OpenSIPS MCP Server
AI-powered control plane for OpenSIPS SIP servers, enabling natural-language operations and CLI-based management for configuration, migration, monitoring, and diagnostics.
README
OpenSIPS MCP Server
An AI-powered and shell-callable control plane for OpenSIPS. Connect any MCP-compatible AI client (Claude Desktop, Cursor, Cline, Continue, Cody) for natural-language operations — or use the same primitives via the opensips-mcp CLI for shell scripts, CI pipelines, and air-gapped operators.
Presented at OpenSIPS Summit 2026, Bucharest, April 28-30.
# AI client mode — connect any MCP-aware client
opensips-mcp serve
# CLI mode — no LLM required
opensips-mcp cfg list-scenarios
opensips-mcp cfg generate residential_pbx --param db_url=mysql://... --param domain=pbx.example.com
opensips-mcp cfg lint /etc/opensips/opensips.cfg --fail-on warning
opensips-mcp snapshot capture /var/lib/snapshots --label pre-deploy
Features
| Category | Count | Description |
|---|---|---|
| Tools | 236 | MI, DB CRUD, cfg engine, migration, linting, tuning, diagnostics, security, B2BUA, presence, events, snapshots, benchmarks, RBAC, observability stack generator (Grafana + Prometheus + provisioning + monitoring docker-compose) |
| Scenarios | 25 | From class-4 SBC and residential PBX to IMS Cx with HSS interop, STIR/SHAKEN, SIPREC, MSRP, RADIUS auth, qrouting, RTT accessibility |
| Prompts | 22 | Config building, migration, troubleshoot, security audit, education |
| Operator-facing docs | 15 | SIP primer, error-code decoder, annotated cfg tour, ngrep/sngrep, end-to-end PBX tutorial, HA failover, NAT decision tree, TLS-from-scratch, post-deploy smoke test, IMS Cx with open5gs, compliance positioning, observability stack, Kamailio comparison + migration, limitations, more |
| Compliance frameworks addressed | 8 | HIPAA, GDPR/CCPA, SOC 2, PCI DSS, FCC § 13.114 (E911), STIR/SHAKEN, RFC 4103 RTT, NENA i3 |
| Tests | 751 | Drift-prevention regression markers for every audit finding |
| Skills | 6 | Claude Code slash commands |
| Subagents | 6 | Claude Code orchestration roles |
Why this over X?
| If you're considering... | This project gives you |
|---|---|
| Hand-written m4 templates | A typed scenario library + auto-discovered knobs + a linter that catches what opensips -C misses |
opensips-cli |
Same primitives + 25 scenario templates + the migration engine + drift snapshots + 15 operator-facing docs |
Kamailio (kamctl / kamcli) |
An honest comparison (docs/learn/kamailio-vs-opensips.md) and a migration guide (docs/learn/migrate-from-kamailio.md) |
| Twilio / Telnyx / Bandwidth | Self-hosted control over your SIP — at the cost of operating it yourself |
| DIY without an LLM | The CLI is the same code path; nothing requires AI |
| DIY without a CLI | Same primitives via MCP for any AI client |
Skeptical or looking for what this is NOT good for? Read docs/learn/limitations.md before adopting.
Highlights
- Full MI Coverage -- Execute any Management Interface command, list commands, gather statistics, and run health checks.
- Database Management -- CRUD operations for subscribers, dispatchers, dynamic routing, permissions, call center, load balancer, dialplan, and accounting tables.
- Configuration Engine -- Generate complete OpenSIPS configs from 8 scenario templates plus the m4/local.cfg override pattern, with a Kamailio-compatible
WITH_*feature-flag composer that materialises a flat config (no#!ifdefnesting hell). - Version-Aware Migration -- Declarative per-hop rule chain across 2.4 → 3.0 → 3.1 → 3.2 → 3.3 → 3.4 → 3.5 → 3.6 (7 fully-populated hops). Rewrites behaviour-preserving changes (MI command renames, AVP prefix drop, global param renames) and flags every manual step / silent-gotcha the engineer must handle by hand. Includes the painful 3.4 → 3.5
load_balancer_* → lb_*MI rename that silently breaks monitoring in 3.6. An eighth hop 3.6 → 4.0 is scaffolded with the MI renames anticipated in the 4.0 beta but emits an "advisory" warning until a stable 4.0 lands. (OpenSIPS skipped 3.7 entirely — the chain reflects the actual release line.) - Semantic Linter -- 20+ rules checking module dependency graph, orphaned
modparam, deprecated parameters, missingmf_process_maxfwd_header, anti-flood absence, NAT/rtpengine gaps, and production readiness. - Capacity Tuner (PGTune for SIP) -- Describe your workload (role + cores + RAM + CPS + NAT + TLS + HA), get a paste-ready override snippet with a
# why:comment on every line. - Module Catalog + Explain -- Machine-readable module metadata powers a
kubectl explain-style lookup for directives, modparams, script functions, pseudo-variables, and MI commands (with rename history). - Diagnostics -- Process lists, memory stats, TCP connections, uptime, tracing, and comprehensive health checks.
- Security -- RBAC with readonly/admin roles, input validation, HA1 digest generation, config audit, Pike anti-flood management, and structured audit logging.
- Version Support -- 2.4 → 3.6 fully rule-backed; one anticipatory 3.6 → 4.0 hop with master-branch MI renames (advisory until 4.0 stable). Runtime version strategies for 3.4 and 3.6 (production-ready) plus a 4.0 strategy flagged as experimental.
- Docker Ready -- 7 pre-built Docker scenarios and a full-stack compose for instant deployment.
Quick Start
pip install
# Install from source
pip install -e .
# For MySQL support
pip install -e ".[mysql]"
# For PostgreSQL support
pip install -e ".[postgres]"
Configure
cp .env.example .env
# Edit .env with your OpenSIPS MI URL and database connection
Key environment variables:
| Variable | Default | Description |
|---|---|---|
OPENSIPS_MCP_MI_URL |
http://127.0.0.1:8888/mi |
OpenSIPS MI HTTP endpoint |
OPENSIPS_MCP_DB_URL |
sqlite+aiosqlite:///opensips.db |
Database connection string |
OPENSIPS_MCP_VERSION |
3.6 |
Target OpenSIPS runtime version (3.4 or 3.6) |
OPENSIPS_MCP_TRANSPORT |
stdio |
MCP transport (stdio, sse, streamable-http) |
OPENSIPS_MCP_ROLE |
readonly |
RBAC role (readonly, admin). Defaults to least-privileged; set to admin only when write / MI-execute access is required. |
OPENSIPS_MCP_LOG_LEVEL |
INFO |
Logging level |
OPENSIPS_MCP_HOST |
127.0.0.1 |
Bind address for network transports |
OPENSIPS_MCP_PORT |
8080 |
Listen port for network transports |
OPENSIPS_MCP_API_KEY |
(empty) | Optional API key for authentication |
OPENSIPS_MCP_OPENSIPS_BIN |
/usr/sbin/opensips |
Path to opensips binary for config validation |
OPENSIPS_MCP_READ_ONLY |
false |
Force read-only mode regardless of role |
Run
# stdio transport (for Claude Desktop, Cursor, etc.)
opensips-mcp
# SSE transport (for web-based clients)
opensips-mcp --transport sse --host 0.0.0.0 --port 8080
# Streamable HTTP transport
opensips-mcp --transport streamable-http --host 0.0.0.0 --port 8080
MCP Client Integration
<details> <summary><b>Claude Desktop</b></summary>
~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or
%APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"opensips": {
"command": "opensips-mcp",
"env": {
"OPENSIPS_MCP_MI_URL": "http://your-opensips:8888/mi",
"OPENSIPS_MCP_DB_URL": "mysql+asyncmy://opensips:opensipsrw@localhost/opensips"
}
}
}
}
</details>
<details> <summary><b>Claude Code (CLI)</b></summary>
claude mcp add opensips -- opensips-mcp --transport stdio
Or edit .claude/settings.json:
{
"mcpServers": {
"opensips": { "command": "opensips-mcp", "args": ["--transport", "stdio"] }
}
}
The project ships skills and subagents in .claude/ — Claude Code picks them
up automatically when run inside the repo.
</details>
<details> <summary><b>Cursor</b></summary>
~/.cursor/mcp.json:
{
"mcpServers": {
"opensips": { "command": "opensips-mcp", "args": ["--transport", "stdio"] }
}
}
</details>
<details> <summary><b>Continue (VS Code / JetBrains)</b></summary>
~/.continue/config.json:
{
"experimental": {
"modelContextProtocolServers": [
{
"transport": {
"type": "stdio",
"command": "opensips-mcp",
"args": ["--transport", "stdio"]
}
}
]
}
}
</details>
<details> <summary><b>Remote SSE / streamable-http</b></summary>
opensips-mcp --transport sse --host 0.0.0.0 --port 8700
Point any MCP-speaking client at http://<host>:8700/sse. Put an auth proxy
in front in production — see docs/security.md and
docker/nginx/ for a working config.
</details>
Docker Quick Start
Start OpenSIPS, MySQL, and the MCP server with a single command:
docker compose -f docker/docker-compose.yml up -d
This brings up:
- opensips -- OpenSIPS 3.6 with MI HTTP on port 8888
- mysql -- MySQL 8.0 with the OpenSIPS schema
- opensips-mcp -- MCP server on port 8080 (streamable-http transport)
See docs/deployment.md for production deployment guidance.
MCP Tools
MI Commands
mi_execute-- Execute any MI commandmi_list_commands-- List available MI commandsget_statistics-- Retrieve runtime statisticshealth_check-- Comprehensive health check
User Location
ul_show_contacts-- Show registered contacts for an AORul_dump-- Dump all registered usersul_add_contact-- Add a contact bindingul_remove_contact-- Remove a contact binding
Dialog Management
dlg_list-- List active dialogsdlg_end-- Terminate a dialogdlg_get_profiles-- Get dialog profile sizesdlg_push_var-- Set a dialog variable
Subscriber Management
subscriber_list-- List subscribers (with pagination)subscriber_get-- Get subscriber by IDsubscriber_create-- Create a new subscribersubscriber_update-- Update subscriber fieldssubscriber_delete-- Delete a subscriber
Dispatcher (Load Balancing)
dispatcher_list_db-- List dispatcher destinationsdispatcher_add-- Add a destinationdispatcher_update-- Update a destinationdispatcher_remove-- Remove a destination
Dynamic Routing (full CRUD + reload)
drouting_list_rules,drouting_add_rule,drouting_update_rule,drouting_delete_ruledrouting_list_gateways,drouting_add_gateway,drouting_update_gateway,drouting_delete_gatewaydrouting_list_carriers,drouting_add_carrier,drouting_update_carrier,drouting_delete_carrier
Dialplan (number translation)
dialplan_list_rules,dialplan_add_rule,dialplan_update_rule,dialplan_delete_ruledialplan_reload,dialplan_translate
Carrier Routing & LCR
carrierroute_reload,carrierroute_dump,carrierroute_activate_host,carrierroute_deactivate_host,carrierroute_replace_hostlcr_dump,lcr_reload
B2BUA (back-to-back, SBC, SCA)
b2b_list_sessions,b2b_list_entities,b2b_terminate,b2b_bridge,b2b_trigger_scenario,b2b_sca_listtopology_hiding_list
Presence / PUA / BLF / MWI
presence_list_subscriptions,presence_refresh_watchers,presence_cleanuppua_list_publications,pua_publish
UAC / Upstream Registrations
uac_reg_list,uac_reg_reload,uac_reg_enable,uac_reg_disable,uac_reg_force_register
Mid-Registrar
mid_registrar_dump,mid_registrar_update
NAT Helper
nathelper_enable_ping,nathelper_stats
Event Interface (flatstore, rabbitmq, json, etc.)
event_list,event_list_subscribers,event_subscribe
Stateless (SL)
sl_stats
AVP Operations
avp_get,avp_set,avp_delete
Load Balancer
lb_list-- List load balancer destinationslb_reload-- Reload LB tablelb_set_status-- Enable/disable a destinationlb_resize-- Resize a resource
Call Center
cc_list_queue-- List call center queuecc_list_agents-- List agentscc_agent_login-- Login/logout an agentcc_reload_tool-- Reload call center configcc_status-- Call center statistics
Permissions
address_list-- List address permissionsaddress_add-- Add an address entryaddress_remove-- Remove an address entry
Security
pike_list_blocked-- List Pike-blocked IPspike_unblock_ip-- Unblock an IPsecurity_generate_ha1-- Generate HA1 digestssecurity_audit_config-- Audit a configuration
RTPEngine
rtpengine_show-- Show RTPEngine statusrtpengine_enable-- Enable/disable an RTPEngine instancertpengine_reload-- Reload RTPEngine config
Rate Limiting
ratelimit_status-- Show rate limit pipesratelimit_reset-- Reset a rate limit pipe
Cluster
cluster_status-- Cluster node statuscluster_topology-- Cluster topologycluster_send_command-- Send a cluster broadcast command
Tracing
trace_control-- Enable/disable SIP tracingtrace_start_live-- Start live SIP trace
Registrar
registrar_stats-- Registrar statistics
Accounting
acc_query_cdrs-- Query CDR recordsacc_query_missed-- Query missed call records
Diagnostics
get_process_list-- OpenSIPS process listget_memory_stats-- Shared/private memory statsget_uptime-- Server uptimeget_tcp_connections-- Active TCP connectionsopensips_version-- OpenSIPS version info
Configuration Engine — generation
cfg_generate-- Generate config from a scenario templatecfg_generate_iterative-- Generate and iteratively validatecfg_list_scenarios/cfg_get_scenario_params-- Scenario catalogcfg_start_session/cfg_generate_m4/cfg_preprocess/cfg_dry_run/cfg_save_session-- m4 / local.cfg override patterncfg_list_flags/cfg_compose_flags/cfg_build_from_flags-- Kamailio-compatibleWITH_*feature-flag composer (produces a flat config with only enabled branches materialised)
Configuration Engine — understanding
cfg_parse-- Parse config and extract structurecfg_validate-- Validate with theopensips -C -fbinarycfg_explain--kubectl explain-style inline reference for any module / modparam / function /$pv/ global / MI commandcfg_explain_route-- Analyse a specific route blockcfg_list_modules-- Module catalog (filter by version or category)
Configuration Engine — editing
cfg_diff-- Unified diff between two configurationscfg_diff_reference-- Diff against the reference scenario template to see what's "custom"cfg_edit-- Apply a natural-language edit and show the diffcfg_add_module-- Add a module (with optional modparams) into an existing cfgcfg_optimize-- Quick heuristic suggestions
Configuration Engine — linting & tuning
cfg_lint-- Run 20+ semantic lint rules (dependency gaps, deprecated params, missing anti-flood, etc.)cfg_list_lint_rules-- Rule catalogcfg_tune-- PGTune-style capacity tuner: describe workload → get override snippet with# why:comments
Configuration Engine — version migration
cfg_list_versions-- Supported versions and hop chain (2.4 → 3.0 → 3.1 → 3.2 → 3.3 → 3.4 → 3.5 → 3.6 fully populated; one anticipatory 3.6 → 4.0 hop)cfg_check_compat-- Check a config for modules unavailable in a target versioncfg_migrate_plan-- Terraform-plan-style dry-run: report every rewrite and every manual stepcfg_migrate-- Apply the migration, emit a unified diff, validate the result
MCP Resources
| URI | Description |
|---|---|
opensips://system/version |
OpenSIPS version information |
opensips://system/uptime |
Server uptime |
opensips://system/processes |
Running processes |
opensips://system/memory |
Memory usage |
opensips://stats/all |
All runtime statistics |
opensips://modules/list |
Available modules |
opensips://modules/{name} |
Module documentation |
opensips://docs/mi/{command} |
MI command documentation |
opensips://templates/list |
Available config templates |
opensips://templates/{scenario} |
Scenario template source |
opensips://scenarios/list |
Deployment scenario catalog |
opensips://scenarios/{name} |
Scenario detail and Docker config |
opensips://db/subscribers |
Subscriber table snapshot |
opensips://db/dispatchers |
Dispatcher table snapshot |
MCP Prompts
| Prompt | Description |
|---|---|
build_config |
Interactive OpenSIPS configuration builder |
optimize_performance |
Performance tuning advisor |
design_architecture |
SIP architecture designer |
troubleshoot_calls |
Call failure troubleshooting guide |
troubleshoot_registration |
Registration failure troubleshooting |
explain_error |
SIP/OpenSIPS error explainer |
security_audit |
Security configuration auditor |
teach_concept |
SIP/VoIP concept educator |
explain_sip_ladder |
SIP ladder diagram analyzer |
explain_route |
OpenSIPS route block explainer |
debug_sip_message |
SIP message parser and debugger |
plan_capacity |
SIP capacity planning advisor |
write_module |
OpenSIPS C module development guide |
migrate_version |
Version migration assistant (natural-language plan) |
migrate_version_auto |
Automated plan + apply workflow driving cfg_migrate_plan / cfg_migrate |
compare_modules |
Module comparison guide |
Architecture
+------------------+ +-------------------+ +------------------+
| MCP Client | | OpenSIPS MCP | | OpenSIPS |
| (Claude, etc.) |<--->| Server |<--->| (MI HTTP) |
+------------------+ | | +------------------+
| +-------------+ |
| | Tools (94) | | +------------------+
| +-------------+ | | Database |
| | Resources | |<--->| (MySQL/PG/ |
| +-------------+ | | SQLite) |
| | Prompts | | +------------------+
| +-------------+ |
| | Config Eng. | |
| +-------------+ |
| | Security | |
| +-------------+ |
+-------------------+
Layers:
MCP (FastMCP) -> Service (Tools/Resources/Prompts)
-> Infrastructure (MI Client, DB, Config Engine)
-> Version (3.4 / 3.6 strategies)
-> Security (RBAC, Validation, Audit)
Supported OpenSIPS Versions
| Version | Status | Notes |
|---|---|---|
| 2.4 | Migration source | Fully rule-backed source for cfg_migrate |
| 3.0–3.5 | Migration source | Each hop has fully-populated rule sets |
| 3.4 | Runtime supported | LTS — full MI and DB coverage |
| 3.6 | Runtime default + migration target | Latest stable LTS (3.6.4 as of 2026-04) |
| 4.0 | Anticipated migration target / experimental runtime | One advisory hop with master-branch MI renames; rules not yet validated against a stable build |
OpenSIPS jumped from 3.6 directly to 4.0 — there was no 3.7 release. The migrator chain reflects the actual release line (8 hops total: 7 fully populated to 3.6, plus 1 anticipatory hop to 4.0).
Development
# Setup
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
# Test
make test
# Lint and format
make lint
make format
make type-check
See CONTRIBUTING.md for the full development guide.
Documentation
Start here:
- Quickstart -- Zero to working proxy in 15 minutes (install → client setup → first prompts)
- Tool Chooser -- "Which tool should I use for X?" — map goals to tools
- FAQ / Troubleshooting -- Setup errors, runtime issues, common questions
Reference:
- Architecture -- Layered design and component overview
- Configuration Reference -- All environment variables and options
- Security Model -- RBAC, validation, and audit logging
- API Reference -- Complete tools, resources, and prompts listing
- Deployment Guide -- Docker and bare metal deployment
- Config Engine -- Scenario templates, linter, tuner, migration
- Developer Guide -- Adding tools, templates, and testing
Claude Code skills and subagents (in .claude/skills/ and .claude/agents/):
- Skills:
/opensips-quickstart,/opensips-config-build,/opensips-troubleshoot,/opensips-migrate,/opensips-security-audit,/opensips-tool-chooser - Subagents:
opensips-architect,opensips-config-author,opensips-incident-responder,opensips-migrator,opensips-security-auditor,opensips-teacher
Examples
License
Apache License 2.0 -- Copyright 2026 Officering LLC
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.