API Reference

April 28, 2026 · View on GitHub

Complete listing of all MCP tools, resources, and prompts provided by the OpenSIPS MCP Server.


Tools

MI Commands

mi_execute

Execute an arbitrary OpenSIPS MI command.

ParameterTypeRequiredDescription
commandstringYesMI command name (e.g. ul_dump, lb_list)
paramsdictNoParameters for the MI command

Permission: mi.execute

mi_list_commands

List all MI commands available on the connected OpenSIPS instance.

Permission: mi.list

get_statistics

Retrieve OpenSIPS runtime statistics.

ParameterTypeRequiredDescription
groupstringNoStatistics group (core, shmem, net, tm, sl, usrloc, or all). Default: all
namestringNoSpecific statistic name within the group

Permission: stats.read

health_check

Run a comprehensive health check against the OpenSIPS instance. Checks MI connectivity, basic statistics, and uptime.

Permission: health.read


User Location

ul_show_contacts

Show registered contacts for an Address of Record.

ParameterTypeRequiredDescription
tablestringNoUsrloc table name. Default: location
aorstringYesAddress of Record to look up

Permission: mi.read

ul_dump

Dump all registered users from the user location table.

ParameterTypeRequiredDescription
tablestringNoUsrloc table name. Default: location
briefboolNoReturn abbreviated output

Permission: mi.read

ul_add_contact

Add a contact binding to the user location table.

ParameterTypeRequiredDescription
tablestringNoUsrloc table name. Default: location
aorstringYesAddress of Record
contactstringYesContact URI
expiresintNoExpiration time in seconds
qfloatNoContact priority (0.0-1.0)

Permission: mi.write

ul_remove_contact

Remove a contact binding from the user location table.

ParameterTypeRequiredDescription
tablestringNoUsrloc table name. Default: location
aorstringYesAddress of Record
contactstringYesContact URI to remove

Permission: mi.write


Dialog Management

dlg_list

List active dialogs with optional filtering.

ParameterTypeRequiredDescription
callidstringNoFilter by Call-ID
from_tagstringNoFilter by From-tag

Permission: mi.read

dlg_end

Terminate an active dialog.

ParameterTypeRequiredDescription
callidstringYesCall-ID of the dialog
from_tagstringYesFrom-tag of the dialog
to_tagstringYesTo-tag of the dialog

Permission: mi.write

dlg_get_profiles

Get the size of dialog profiles.

ParameterTypeRequiredDescription
profilestringYesDialog profile name
valuestringNoSpecific profile value to count

Permission: mi.read

dlg_push_var

Set a variable on an active dialog.

ParameterTypeRequiredDescription
callidstringYesCall-ID of the dialog
from_tagstringYesFrom-tag
to_tagstringYesTo-tag
var_namestringYesVariable name
var_valuestringYesVariable value

Permission: mi.write


Subscriber Management

subscriber_list

List subscribers with pagination.

ParameterTypeRequiredDescription
domainstringNoFilter by SIP domain
limitintNoMax records to return. Default: 100
offsetintNoPagination offset. Default: 0

Permission: db.read

subscriber_get

Get a subscriber by ID.

ParameterTypeRequiredDescription
idintYesSubscriber database ID

Permission: db.read

subscriber_create

Create a new subscriber.

ParameterTypeRequiredDescription
usernamestringYesSIP username
domainstringYesSIP domain
passwordstringYesPassword (HA1 hash is computed)

Permission: db.write

subscriber_update

Update subscriber fields.

ParameterTypeRequiredDescription
idintYesSubscriber database ID
passwordstringNoNew password
email_addressstringNoNew email address
rpidstringNoNew Remote-Party-ID

Permission: db.write

subscriber_delete

Delete a subscriber.

ParameterTypeRequiredDescription
idintYesSubscriber database ID

Permission: db.write


Dispatcher (Load Balancing)

dispatcher_list_db

List dispatcher destinations from the database.

ParameterTypeRequiredDescription
setidintNoFilter by dispatcher set ID
limitintNoMax records to return
offsetintNoPagination offset

Permission: db.read

dispatcher_add

Add a new dispatcher destination.

ParameterTypeRequiredDescription
setidintYesDispatcher set ID
destinationstringYesSIP URI of the destination
flagsintNoFlags. Default: 0
priorityintNoPriority. Default: 0
attrsstringNoAttributes string
descriptionstringNoHuman-readable description
weightintNoWeight for load distribution
socketstringNoOutbound socket

Permission: db.write

dispatcher_update

Update an existing dispatcher destination.

ParameterTypeRequiredDescription
idintYesDispatcher record ID
setidintNoNew set ID
destinationstringNoNew destination URI
flagsintNoNew flags
priorityintNoNew priority
attrsstringNoNew attributes
descriptionstringNoNew description
weightintNoNew weight

Permission: db.write

dispatcher_remove

Remove a dispatcher destination.

ParameterTypeRequiredDescription
idintYesDispatcher record ID

Permission: db.write


Dynamic Routing

drouting_list_rules

List dynamic routing rules.

ParameterTypeRequiredDescription
groupidstringNoFilter by group ID
prefixstringNoFilter by prefix
limitintNoMax records
offsetintNoPagination offset

Permission: db.read

drouting_add_rule

Add a dynamic routing rule.

ParameterTypeRequiredDescription
groupidstringYesGroup ID
prefixstringYesDigit prefix to match
gwliststringYesGateway list (comma-separated IDs)
priorityintNoRule priority
routeidstringNoRoute ID
timerecstringNoTime recurrence
attrsstringNoAttributes
descriptionstringNoDescription
sort_algstringNoSort algorithm (N, W, etc.)

Permission: db.write

drouting_list_gateways

List dynamic routing gateways.

ParameterTypeRequiredDescription
typeintNoFilter by gateway type
limitintNoMax records
offsetintNoPagination offset

Permission: db.read

drouting_add_gateway

Add a dynamic routing gateway.

ParameterTypeRequiredDescription
addressstringYesGateway SIP address
typeintNoGateway type
stripintNoDigits to strip
pri_prefixstringNoPrefix to prepend
attrsstringNoAttributes
probe_modeintNoOPTIONS probe mode
descriptionstringNoDescription

Permission: db.write

drouting_list_carriers

List dynamic routing carriers.

ParameterTypeRequiredDescription
limitintNoMax records
offsetintNoPagination offset

Permission: db.read

drouting_add_carrier

Add a dynamic routing carrier.

ParameterTypeRequiredDescription
carrieridstringYesCarrier identifier
gwliststringYesGateway list
flagsintNoFlags
sort_algstringNoSort algorithm
attrsstringNoAttributes
descriptionstringNoDescription

Permission: db.write


Load Balancer

lb_list

List load balancer destinations and their resource status.

Permission: mi.read

lb_reload

Reload the load balancer table from the database.

Permission: mi.execute

lb_set_status

Enable or disable a load balancer destination.

ParameterTypeRequiredDescription
groupintYesDestination group ID
uristringYesDestination SIP URI
statusintYes0 = active, 1 = disabled

Permission: mi.execute

lb_resize

Resize a load balancer resource.

ParameterTypeRequiredDescription
groupintYesDestination group ID
uristringYesDestination SIP URI
resourcestringYesResource name
valueintYesNew resource value

Permission: mi.execute


Call Center

cc_list_queue

List the call center queue (waiting calls).

Permission: mi.read

cc_list_agents

List all call center agents and their status.

Permission: mi.read

cc_agent_login

Login or logout a call center agent.

ParameterTypeRequiredDescription
agent_idstringYesAgent identifier
stateintYes1 = login, 0 = logout

Permission: mi.execute

cc_reload_tool

Reload call center configuration from the database.

Permission: mi.execute

cc_status

Get call center statistics (queue size, agent counts, etc.).

Permission: mi.read


Permissions

address_list

List address permission entries.

ParameterTypeRequiredDescription
grpintNoFilter by permission group
limitintNoMax records
offsetintNoPagination offset

Permission: db.read

address_add

Add an address permission entry.

ParameterTypeRequiredDescription
grpintYesPermission group
ipstringYesIP address
maskintNoNetwork mask (CIDR). Default: 32
portintNoPort (0 = any). Default: 0
protostringNoProtocol (udp, tcp, tls, any). Default: any
patternstringNoMatching pattern
context_infostringNoContext info string

Permission: db.write

address_remove

Remove an address permission entry.

ParameterTypeRequiredDescription
idintYesAddress record ID

Permission: db.write


Security

pike_list_blocked

List IP addresses currently blocked by the Pike anti-flood module.

Permission: mi.read

pike_unblock_ip

Remove an IP address from the Pike block list.

ParameterTypeRequiredDescription
ipstringYesIP address to unblock

Permission: mi.execute

security_generate_ha1

Generate HA1 and HA1B digest authentication hashes.

ParameterTypeRequiredDescription
usernamestringYesSIP username
domainstringYesSIP domain
passwordstringYesPassword

Permission: db.read

security_audit_config

Perform a basic security audit on an OpenSIPS configuration snippet.

ParameterTypeRequiredDescription
configstringYesOpenSIPS configuration text

Permission: config.read


RTPEngine

rtpengine_show

Show RTPEngine node status and statistics.

Permission: mi.read

rtpengine_enable

Enable or disable an RTPEngine instance.

ParameterTypeRequiredDescription
urlstringYesRTPEngine socket URL
enableintYes1 = enable, 0 = disable

Permission: mi.execute

rtpengine_reload

Reload RTPEngine configuration.

Permission: mi.execute


Rate Limiting

ratelimit_status

Show the status of all rate limit pipes.

Permission: mi.read

ratelimit_reset

Reset a rate limit pipe counter.

ParameterTypeRequiredDescription
pipestringYesPipe name to reset

Permission: mi.execute


Cluster

cluster_status

Show cluster node status.

Permission: mi.read

cluster_topology

Show cluster topology (nodes and links).

Permission: mi.read

cluster_send_command

Send a command to cluster nodes.

ParameterTypeRequiredDescription
cluster_idintYesCluster ID
commandstringYesCommand to broadcast
nodeintNoTarget node (omit for broadcast)

Permission: mi.execute


Tracing

trace_control

Enable or disable SIP tracing.

ParameterTypeRequiredDescription
actionstringYeson or off
trace_idstringNoSpecific trace ID

Permission: mi.execute

trace_start_live

Start a live SIP trace session.

ParameterTypeRequiredDescription
filterstringNoSIP message filter expression

Permission: mi.execute


Registrar

registrar_stats

Retrieve registrar statistics (registrations, lookups, etc.).

Permission: stats.read


Accounting

acc_query_cdrs

Query Call Detail Records from the accounting table.

ParameterTypeRequiredDescription
from_datestringNoStart date (ISO 8601)
to_datestringNoEnd date (ISO 8601)
callerstringNoFilter by caller
calleestringNoFilter by callee
limitintNoMax records. Default: 100

Permission: db.read

acc_query_missed

Query missed call records.

ParameterTypeRequiredDescription
from_datestringNoStart date (ISO 8601)
to_datestringNoEnd date (ISO 8601)
callerstringNoFilter by caller
calleestringNoFilter by callee
limitintNoMax records. Default: 100

Permission: db.read


Diagnostics

get_process_list

List all OpenSIPS worker processes.

Permission: mi.read

get_memory_stats

Get shared and private memory statistics.

Permission: mi.read

get_uptime

Get the server uptime.

Permission: mi.read

get_tcp_connections

List active TCP connections.

Permission: mi.read

opensips_version

Get the OpenSIPS version string.

Permission: mi.read


Configuration Engine

cfg_generate

Generate an OpenSIPS configuration from a predefined scenario template.

ParameterTypeRequiredDescription
scenariostringYesScenario name (e.g. load_balancer, webrtc_gateway)
paramsdictNoTemplate parameters

Permission: config.generate

cfg_validate

Validate an OpenSIPS configuration by running opensips -C -f.

ParameterTypeRequiredDescription
configstringYesConfiguration text to validate

Permission: config.read

cfg_parse

Parse an OpenSIPS configuration and extract its structure (modules, routes, globals).

ParameterTypeRequiredDescription
configstringYesConfiguration text to parse

Permission: config.read

cfg_list_scenarios

List all available configuration scenarios with descriptions.

Permission: config.read

cfg_get_scenario_params

Get required and optional parameters for a scenario.

ParameterTypeRequiredDescription
scenariostringYesScenario name

Permission: config.read

cfg_diff

Compute a unified diff between two OpenSIPS configurations.

ParameterTypeRequiredDescription
config_astringYesFirst configuration text
config_bstringYesSecond configuration text

Permission: config.read

cfg_explain_route

Explain an OpenSIPS route block by identifying its components.

ParameterTypeRequiredDescription
route_codestringYesRoute block source code

Permission: config.read

cfg_add_module

Add a module to an existing OpenSIPS configuration.

ParameterTypeRequiredDescription
configstringYesExisting configuration text
modulestringYesModule name to add
paramsdictNoModule parameters

Permission: config.generate

cfg_optimize

Analyze an OpenSIPS configuration and suggest optimizations.

ParameterTypeRequiredDescription
configstringYesConfiguration text to analyze

Permission: config.read

cfg_generate_iterative

Generate an OpenSIPS config and iteratively validate it.

ParameterTypeRequiredDescription
scenariostringYesScenario name
paramsdictNoTemplate parameters
max_iterationsintNoMax validation attempts

Permission: config.generate


Resources

URIDescription
opensips://system/versionOpenSIPS version string from the MI version command
opensips://system/uptimeServer uptime from the MI uptime command
opensips://system/processesRunning OpenSIPS processes from MI ps
opensips://system/memoryShared and private memory usage
opensips://stats/allAll runtime statistics
opensips://modules/listList of known OpenSIPS modules with brief descriptions
opensips://modules/{name}Detailed documentation for a specific module
opensips://docs/mi/{command}Documentation for a specific MI command
opensips://templates/listAvailable configuration scenario templates
opensips://templates/{scenario}Raw Jinja2 template source for a scenario
opensips://scenarios/listDeployment scenario catalog with Docker info
opensips://scenarios/{name}Detailed scenario description and configuration
opensips://db/subscribersSnapshot of the subscriber table
opensips://db/dispatchersSnapshot of the dispatcher table

Prompts

Configuration

build_config

Interactive configuration builder that guides through scenario selection and parameter input.

ArgumentTypeRequiredDescription
scenariostringNoPre-selected scenario
requirementsstringNoFree-text requirements

optimize_performance

Performance tuning advisor that analyzes current stats and config.

ArgumentTypeRequiredDescription
current_configstringNoCurrent configuration to analyze
workloadstringNoExpected workload description

design_architecture

SIP architecture designer for multi-node deployments.

ArgumentTypeRequiredDescription
requirementsstringYesArchitecture requirements
scalestringNoExpected call volume

Troubleshooting

troubleshoot_calls

Call failure troubleshooting workflow.

ArgumentTypeRequiredDescription
symptomstringYesDescription of the call failure
callerstringNoCaller URI
calleestringNoCallee URI

troubleshoot_registration

Registration failure troubleshooting workflow.

ArgumentTypeRequiredDescription
symptomstringYesDescription of the registration failure
userstringNoAffected user

explain_error

SIP or OpenSIPS error code/message explainer.

ArgumentTypeRequiredDescription
errorstringYesError message or SIP response code

Security

security_audit

Security configuration audit that reviews the running config for common issues.

ArgumentTypeRequiredDescription
configstringNoConfiguration to audit
focusstringNoArea to focus on (auth, tls, acl, etc.)

Education

teach_concept

SIP/VoIP concept educator.

ArgumentTypeRequiredDescription
topicstringYesConcept to explain (e.g. "SIP registration", "dialog state")

explain_sip_ladder

SIP ladder diagram analyzer that explains message flows.

ArgumentTypeRequiredDescription
sip_tracestringYesSIP trace or ladder diagram text

explain_route

OpenSIPS route block explainer.

ArgumentTypeRequiredDescription
route_codestringYesOpenSIPS route block code

debug_sip_message

SIP message parser and debugger.

ArgumentTypeRequiredDescription
sip_messagestringYesRaw SIP message text

SIP Operations

plan_capacity

SIP capacity planning advisor.

ArgumentTypeRequiredDescription
call_volumestringYesExpected call volume (CPS, concurrent calls)
featuresstringNoRequired features (recording, transcoding, etc.)

write_module

OpenSIPS C module development guide and scaffolding.

ArgumentTypeRequiredDescription
module_namestringYesName of the module to develop
descriptionstringNoModule purpose and functionality

Migration

migrate_version

Version migration assistant.

ArgumentTypeRequiredDescription
from_versionstringYesCurrent OpenSIPS version
to_versionstringYesTarget OpenSIPS version

compare_modules

Module comparison guide between OpenSIPS versions.

ArgumentTypeRequiredDescription
modulestringYesModule name to compare
version_astringYesFirst version
version_bstringYesSecond version

Operational tools (Top-10 coverage expansion)

These tools fill the workflow gaps an audit identified in April 2026: Homer integration, graceful reload orchestration, cluster drain, CDR audit, NAT-flow diagnosis, RTPEngine control, bulk subscriber ops, synthetic SIP traffic, performance sampling, and cfg backup/rollback.

Homer (advanced)

Complements the beginner-friendly homer_search_calls / homer_get_call_flow / homer_stats tools in ecosystem_tools. All require OPENSIPS_MCP_HOMER_URL pointing at a Homer 7 / homer-app deployment.

homer_search_calls_v7

Homer 7 native search with ms-precision timestamps and source-IP filter.

ParameterTypeRequiredDescription
from_ts, to_tsintYesUnix timestamps in milliseconds
from_user, to_userstringNoSubstring match on SIP From/To user
callidstringNoExact SIP Call-ID
source_ipstringNoSource IP filter
limitintNoDefault 50, cap 500

homer_get_call_transaction

Fetch every captured SIP message for a Call-ID (timestamp-windowed).

homer_correlate_callid

Find sibling Call-IDs when OpenSIPS rewrites Call-ID mid-dialog (B2BUA, topology_hiding).

homer_health

Status probe against /api/v3/status. Returns {ok: false} when Homer is not configured — never raises.

Reload orchestration

reload_data_tables

Fire every data-table reload (ds_reload, dr_reload, lb_reload, dp_reload, tls_reload, ...) in dependency order. Missing commands are reported as skipped, not failures.

ParameterTypeRequiredDescription
targetslist[str]NoWhitelist of module names to reload
stop_on_errorboolNoAbort on first failure. Default False
delay_ms_betweenintNoPer-call spacing. Default 100ms

reload_single

Reload one module and (optionally) snapshot its stats after.

reload_dry_run

Preview which reloads would run, based on which enumeration.

Cluster orchestration

cluster_drain_node

Disable a node in the clusterer and poll dialog count until it hits zero (or timeout). Does NOT stop the OpenSIPS process — combine with your init-script.

ParameterTypeRequiredDescription
cluster_id, node_idintYesTarget node
timeout_secintNo5..600, default 60
poll_interval_secintNo1..60, default 5

cluster_promote_node

Flip status back to active after maintenance.

cluster_sync_check

Report node list, capabilities, sharing tags, and topology in one call. Derives a simple healthy: true/false.

CDR audit

cdr_audit

Scan the acc table for gaps, duplicate Call-IDs, and duration anomalies (negative, excessive, connected-with-zero-duration).

ParameterTypeRequiredDescription
date_from, date_toISO stringYesWindow, capped at 31 days
max_gap_secintNoSuspicious-silence threshold. Default 300
long_call_threshold_secintNoStuck-dialog threshold. Default 14400

cdr_summary

Volume + answered/failed breakdown grouped by hour or day.

cdr_count_by_code

SIP-response-code histogram for a window.

NAT diagnosis

diagnose_nat_flow

One-call triage for "why is this call one-way audio?". Correlates dialog state, RTPEngine state, and nathelper/tm/dialog stats, plus returns heuristic hints.

RTPEngine (new)

rtpengine_terminate_call

MI teardown — forcibly free a media session when signalling leaves one stranded.

rtpengine_instance_health

Fold rtpengine_show + rtpengine: stats into one call.

Subscriber bulk ops

subscriber_bulk_import

Import a CSV of (username, domain, password [, email_address, rpid]). Cap: 5000 rows. Modes: skip / overwrite / error. dry_run=True by default — always review the plan before committing.

subscriber_bulk_export

CSV dump of subscribers. include_ha1=True is opt-in: credential material does not leave the DB by accident.

Performance

perf_process_breakdown

Group OpenSIPS child processes by role (UDP, TCP, timer, HTTPD, ...).

perf_memory_report

mem + shmem: / pkmem: stats. Watch shmem in production.

perf_sample_window

Sample selected get_statistics groups at a fixed cadence (1..10 min, 2..60 samples) and return the raw series.

perf_hotspots

One-shot "where is the pain?" view: memory + core rates + process count in a single call.

Synthetic SIP traffic

sip_options_ping

Pure-Python UDP OPTIONS probe. Refuses public-IP targets unless allow_public=True.

ParameterTypeRequiredDescription
targetstringYeshost[:port], port defaults to 5060
countintNo1..20, default 3
timeout_secfloatNo0.2..10, default 2.0
from_uristringNoSynthetic From URI so traffic analysis can filter it
allow_publicboolNoMust be True for non-private addresses

sip_generate_sipp_scenario

Generate a SIPp XML scenario (options / register / invite_uas_ringing) and the exact run command. Does not execute SIPp — the MCP process is the wrong place to originate load.

Config backup / rollback

cfg_backup

Copy <config> to <config>.bak-YYYYMMDD-HHMMSS within an allowlisted dir (/tmp, /var/tmp, $HOME, or the OPENSIPS_MCP_OUT_DIR_ROOT override).

cfg_list_backups

Enumerate .bak-* siblings of a config, sorted newest first.

cfg_rollback

Restore a backup. Before overwriting, the current target file is itself snapshotted as <target>.pre-rollback-<ts> so the rollback is reversible one more step. validate_after=True runs the restored file through opensips -C; a validation failure is reported but does NOT undo the restore.


Observability stack generator

The observability tools synthesise a complete monitoring deployment (Grafana dashboards + Prometheus scrape config + Grafana provisioning

  • a docker-compose for the monitoring side-car stack) tailored to the exact OpenSIPS scenario being deployed. Panel categories are picked from the loaded modules so the dashboard set never drifts from what the cfg actually exposes.

observability_list_panel_categories

Return every panel category (overview, dialog/calls, dispatcher, rtpengine, tls, security, ims, b2b, ...). No parameters.

observability_categories_for_modules

Given a list of loadmodule names, return which panel categories would fire. Useful for previewing a dashboard set before generating.

ParameterTypeRequiredDescription
moduleslist[str]YesModule names (with or without .so)

observability_generate_dashboards

Generate Grafana dashboards for a scenario.

ParameterTypeRequiredDescription
scenariostringYesScenario name (must exist in cfg engine)
paramsdictNoSame params you'd pass to cfg_generate
instance_labelstringNoDefault instance filter for templating

observability_generate_dashboards_from_cfg

Same idea but takes an arbitrary rendered cfg instead of a scenario name. Useful when you've already produced a custom cfg via cfg_generate_iterative or hand-edited.

observability_generate_prometheus_scrape

Emit a Prometheus scrape_configs YAML stanza for one or more OpenSIPS instances exposing /metrics.

ParameterTypeRequiredDescription
targetslist[str]Yeshost:port of each OpenSIPS metrics endpoint
job_namestringNoscrape_configs.job_name. Default opensips.
scrape_intervalstringNoPrometheus duration. Default 15s.

observability_generate_grafana_provisioning

Emit Grafana provisioning files: a Prometheus datasource definition

  • a dashboard provider that auto-loads dashboards from a directory. Drop both into Grafana's /etc/grafana/provisioning/.

observability_generate_monitoring_compose

Emit a docker-compose YAML for a side-car Prometheus + Grafana stack that points at the OpenSIPS instances you specify. Pair with the observability_generate_grafana_provisioning output.

observability_inject_prometheus

Add loadmodule "prometheus.so" + loadmodule "httpd.so" to a rendered cfg if they aren't already present. Idempotent. Returns the modified cfg + a list of warnings (e.g. existing httpd port collision).

observability_generate_bundle

The headline tool. One call → deployment-ready bundle:

  • Rendered OpenSIPS cfg with prometheus module injected
  • Per-category Grafana dashboard JSON files
  • Prometheus scrape YAML
  • Grafana datasource + dashboard-provider provisioning files
  • docker-compose for the side-car monitoring stack
  • README explaining how to deploy
ParameterTypeRequiredDescription
scenariostringYesScenario name
paramsdictNoScenario render params
targetslist[str]NoPrometheus scrape targets. Default ["localhost:8888"]

observability_generate_bundle_from_cfg

Same as observability_generate_bundle but starts from an existing cfg string instead of a scenario name.

observability_save_bundle

Persist a bundle returned by observability_generate_bundle* to disk under an allowlisted directory (/tmp, /var/tmp, $HOME, or OPENSIPS_MCP_OUT_DIR_ROOT). Rejects path traversal in the bundle's own filenames.

ParameterTypeRequiredDescription
bundledictYesThe bundle dict returned by a generator
out_dirstringYesTarget directory (must be in safe allowlist)