Featured

Deploy OpenClaw in 60 seconds — 20% off logoDeploy OpenClaw in 60 seconds — 20% off

Launch OpenClaw on Hostinger in about 60 seconds and keep your agent live 24/7. Our referral link gives you 20% off, no coupon code needed.

Launch on Hostinger
Run your Hermes agent on Hostinger, fully managed logoRun your Hermes agent on Hostinger, fully managed

Launch Hermes on Hostinger in one click, fully managed, no VPS knowledge needed. Use code ZACAARON10 for 10% off.

Launch on Hostinger
Crawl and scrape any site into clean data, 10% off logoCrawl and scrape any site into clean data, 10% off

Firecrawl crawls and scrapes any site into clean markdown for your agent. Get 1,000 free credits, and new users get 10% off their first purchase.

Try Firecrawl free
6,000+ web scrapers for your AI agent, start free logo6,000+ web scrapers for your AI agent, start free

Apify gives your agent live web data: 6,000+ prebuilt scrapers and actors, MCP-ready. Sign up free with $5 in usage credits.

Try Apify free
One API to scrape, enrich, and extract the internet. logoOne API to scrape, enrich, and extract the internet.

Context.dev gives your agents a single API to scrape, enrich, and extract live web data — no proxies, no parsers, no maintenance.

Start building free
SetupClaw: done-for-you OpenClaw for founders & exec teams logoSetupClaw: done-for-you OpenClaw for founders & exec teams

White-glove OpenClaw for founders and exec teams (4–50+ employees): we install, harden, integrate your tools, and maintain it — secured from day one.

Get it set up for you
SEO data APIs for your agent, $1 free credit logoSEO data APIs for your agent, $1 free credit

DataForSEO gives your agent live access to SERP results, keyword data, backlinks, and on-page SEO data through one API. New accounts get a $1 credit, good for up to 20,000 keyword or backlink lookups.

Try DataForSEO free
Reach 48,000+ AI builders

A flat monthly placement in front of developers actively installing AI tools. No lock-in, cancel anytime.

Advertise here

Works with

Claude CodeClaude DesktopCursorVS CodeClineCodex CLIOpenClaw+ any MCP client

Install to Claude Code

This server doesn't publish a one-line install command. Follow the setup in the source repository.

Summary

An MCP server that exposes the 3GPP M1 interface as AI-callable tools, enabling LLM agents to configure 5G Media Streaming sessions through natural language.

README.md

5G-MAG M1 Interface MCP Server

An MCP (Model Context Protocol) server that exposes the 3GPP M1 interface (TS 26.512) as AI-callable tools, enabling LLM agents to configure 5G Media Streaming (5GMS) sessions through natural language.

Overview

This server wraps the 5GMS Application Function's M1 REST API into a full set of tools covering the complete provisioning lifecycle — create, inspect, and delete sessions and their configurations.

The standard 3-step provisioning workflow is:

Step 1 → create_provisioning_session
Step 2 → create_content_hosting_configuration
Step 3 → create_consumption_reporting_configuration

Additional tools allow you to inspect and manage existing resources at any time.

Features

  • Full 3-step 5GMS provisioning workflow via MCP tools
  • GET and DELETE tools for all major resources
  • Enumerate all provisioning sessions via the 5G-MAG management API
  • Session state persisted across tool calls (M1 URL, MAF URL, and session ID remembered automatically)
  • Supports both DASH and HLS entry points
  • JSON template support for content hosting configuration
  • Clear, structured error messages with troubleshooting hints
  • Modular codebase — each resource group lives in its own tool module
  • Reusable MCP prompts covering the full workflow, step-by-step operations, inspection, and teardown
  • Compatible with any MCP client (Claude Desktop, Claude Code, custom agents)

Requirements

Installation

git clone https://github.com/aaronmontilla/M1-mcp.git
cd M1-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Dependencies

| Package | Purpose | |---------|---------| | mcp[cli] | MCP server framework (FastMCP) | | httpx | Async HTTP client for M1 API calls |

Usage

Running the server

source .venv/bin/activate
python server.py

The server communicates over stdio and is intended to be launched by an MCP host (e.g. Claude Desktop).

Connecting to Claude Desktop

Add the following to your claude_desktop_config.json, using the venv Python interpreter so the installed dependencies are available:

{
  "mcpServers": {
    "5gms-m1": {
      "command": "/path/to/M1-mcp/.venv/bin/python",
      "args": ["/path/to/M1-mcp/server.py"]
    }
  }
}

On Windows replace .venv/bin/python with .venv\Scripts\python.exe.

Connecting to Claude Code

claude mcp add 5gms-m1 /path/to/M1-mcp/.venv/bin/python /path/to/M1-mcp/server.py

Tools

Provisioning Sessions

| Tool | Method | Description | |------|--------|-------------| | create_provisioning_session | POST | Create a new provisioning session (Step 1) | | get_provisioning_session | GET | Retrieve details for an existing session | | enumerate_provisioning_sessions | GET | List all provisioning sessions (uses MAF management API) | | delete_provisioning_session | DELETE | Delete a provisioning session and all its configurations |

create_provisioning_session

| Parameter | Required | Default | Description | |-----------|----------|---------|-------------| | asp_id | Yes | — | Application Service Provider ID | | app_id | Yes | — | Application ID | | provisioning_session_type | No | DOWNLINK | DOWNLINK or UPLINK | | m1_url | Yes (first call) | — | Base URL of M1 interface, e.g. http://192.168.1.100:7778 |

enumerate_provisioning_sessions

| Parameter | Required | Default | Description | |-----------|----------|---------|-------------| | maf_url | Yes (first call) | — | Base URL of the 5G-MAG management API, e.g. http://192.168.1.100:7779 |

---

Content Hosting Configuration

| Tool | Method | Description | |------|--------|-------------| | create_content_hosting_configuration | POST | Define media ingest origin and distribution entry point (Step 2) | | get_content_hosting_configuration | GET | Retrieve the current content hosting configuration | | delete_content_hosting_configuration | DELETE | Remove the content hosting configuration |

create_content_hosting_configuration

| Parameter | Required | Default | Description | |-----------|----------|---------|-------------| | name | Yes | — | Friendly name for the configuration | | ingest_base_url | Yes | — | Origin server base URL | | entry_point_relative_path | Yes | — | Path to .mpd (DASH) or .m3u8 (HLS) manifest | | entry_point_content_type | No | application/dash+xml | MIME type of the manifest | | domain_name_alias | No | None | CDN hostname alias | | dash_profiles | No | ["urn:mpeg:dash:profile:isoff-live:2011"] | DASH profile URNs | | ingest_pull | No | true | Pull vs push ingest | | ingest_protocol | No | HTTP pull URN | Ingest protocol URN |

---

Consumption Reporting Configuration

| Tool | Method | Description | |------|--------|-------------| | create_consumption_reporting_configuration | POST | Enable viewer analytics reporting (Step 3) | | get_consumption_reporting_configuration | GET | Retrieve the current consumption reporting configuration |

create_consumption_reporting_configuration

All parameters are optional.

| Parameter | Required | Default | Description | |-----------|----------|---------|-------------| | reporting_interval | No | 10 | Seconds between client reports | | sample_percentage | No | 100.0 | Percentage of clients that report | | location_reporting | No | true | Include geographic location | | access_reporting | No | true | Include network access info | | provisioning_session_id | No | state | Override the session ID from state | | m1_url | No | state | Override the M1 URL from state |

---

Metrics Reporting Configuration

| Tool | Method | Description | |------|--------|-------------| | create_metrics_reporting_configuration | POST | Create a new metrics reporting configuration | | get_metrics_reporting_configuration | GET | Retrieve an existing metrics reporting configuration | | delete_metrics_reporting_configuration | DELETE | Remove a metrics reporting configuration |

create_metrics_reporting_configuration

| Parameter | Required | Default | Description | |-----------|----------|---------|-------------| | scheme | No | urn:3gpp:5gms:metrics-reporting:qoe-metrics | Metrics reporting scheme URN | | reporting_interval | No | 10 | Seconds between client reports | | sample_percentage | No | 100.0 | Percentage of clients that report | | sampling_period | Yes | — | Seconds between local metric samples | | metrics | No | AF default | List of metric URNs to collect (e.g. urn:3GPP:ns:PSS:DASH:QM10#BufferLevel) | | url_filters | No | None | URL patterns to restrict reporting scope | | data_network_name | No | None | DNN/APN to scope the configuration to a specific network | | slice_scope | No | None | List of S-NSSAI objects (e.g. [{"sst": 1, "sd": "000001"}]) | | provisioning_session_id | No | state | Override the session ID from state | | m1_url | No | state | Override the M1 URL from state |

Prompts

The server exposes 8 reusable prompt templates (@mcp.prompt()) that MCP clients can surface as slash commands or quick-start options. Each prompt accepts typed parameters and returns a fully-formed instruction for the AI agent.

| Prompt | Parameters | Description | |--------|------------|-------------| | complete_m1_setup | m1_url, asp_id, app_id, ingest_base_url, entry_point_path, stream_name | Full 3-step setup in a single prompt | | create_provisioning_session | m1_url, asp_id, app_id, session_type | Step 1 — create a provisioning session | | create_content_hosting | ingest_base_url, entry_point_path, stream_name, content_type | Step 2 — attach a content hosting configuration | | create_consumption_reporting | reporting_interval, sample_percentage, location_reporting, access_reporting | Step 3 — attach a consumption reporting configuration | | add_metrics_reporting | sampling_period, reporting_interval, sample_percentage | Optional — add QoE metrics reporting | | inspect_session | provisioning_session_id | Retrieve and display all resources for a session | | enumerate_sessions | maf_url | List all sessions via the MAF management API | | teardown_session | provisioning_session_id | Cascade-delete all resources for a session |

\* optional — has a sensible default or falls back to stored state.

Example (Claude Code)

/complete_m1_setup m1_url=http://10.0.0.5:7778 asp_id=acme app_id=live-1 \
  ingest_base_url=https://origin.acme.com/ \
  entry_point_path=live/event1/manifest.mpd stream_name="Acme Live"

---

Content Hosting Configuration Template

The file content_hosting_config_template.json is used as a base for create_content_hosting_configuration. You can edit it to add additional fields that will be merged with the values you provide at runtime:

{
    "name": "My 5GMS Stream",
    "ingestConfiguration": {
        "pull": true,
        "protocol": "urn:3gpp:5gms:content-protocol:http-pull-ingest",
        "baseURL": "https://example.com/media/"
    },
    "distributionConfigurations": [
        {
            "entryPoint": {
                "relativePath": "stream/manifest.mpd",
                "contentType": "application/dash+xml",
                "profiles": ["urn:mpeg:dash:profile:isoff-live:2011"]
            }
        }
    ]
}

Example Workflow

User: Set up a 5GMS stream for my live event.

Agent: Step 1 — I'll create a provisioning session.
       [calls create_provisioning_session(asp_id="acme", app_id="live-event-1", m1_url="http://10.0.0.5:7778")]
       → Session ID: abc-123

Agent: Step 2 — Now I'll configure the content hosting.
       [calls create_content_hosting_configuration(
           name="Live Event Stream",
           ingest_base_url="https://origin.acme.com/",
           entry_point_relative_path="live/event1/manifest.mpd"
       )]
       → Content hosting configured.

Agent: Step 3 — Finally, enabling consumption analytics.
       [calls create_consumption_reporting_configuration(reporting_interval=30)]
       → All done! Your 5GMS session is ready.

Project Structure

M1-mcp/
├── server.py                            # Entry point — imports mcp instance, tools, and prompts
├── mcp_instance.py                      # Shared FastMCP server instance
├── state.py                             # Shared session state (M1 URL, MAF URL, session ID)
├── prompts.py                           # Reusable workflow prompts (@mcp.prompt())
├── tools/
│   ├── __init__.py                      # Imports all tool modules (self-registration)
│   ├── provisioning.py                  # create / get / enumerate / delete provisioning sessions
│   ├── content_hosting.py               # create / get / delete content hosting configurations
│   ├── consumption_reporting.py         # create consumption reporting configurations
│   └── metrics_reporting.py             # create / get / delete metrics reporting configurations
├── content_hosting_config_template.json # Base template for create_content_hosting_configuration
├── requirements.txt                     # Python dependencies
└── README.md                            # This file

Standards Reference

  • 3GPP TS 26.512 — 5G Media Streaming (5GMS); Protocols
  • M1 Interface — Provisioning interface between AF and AS
  • 5G-MAG Reference Tools — Open-source 5GMS implementation

Related Projects

License

MIT — see LICENSE for details.

See related servers & alternatives →

Related MCP servers

Browse all →

Related guides

Hand-picked reading to help you choose and use AI & ML servers.