Tool Chooser

April 28, 2026 · View on GitHub

~210 tools can be overwhelming. This guide maps goals → tools.

For a high-level pipeline (generate → validate → lint → explain), use the /opensips-config-build skill. For an interactive triage tree for incidents, use /opensips-troubleshoot.


Pick by goal

Build a config

StepTool
List available scenarioscfg_list_scenarios
Generate from scenariocfg_generate
Generate from Kamailio-style flagscfg_compose_flags + cfg_build_from_flags
Iterative refinementcfg_generate_iterative
Validate syntaxcfg_validate
Lint semanticscfg_lint
Explain a routecfg_explain_route
Tune capacitycfg_tune
Add a modulecfg_add_module

Edit an existing config

StepTool
Start an edit sessioncfg_start_session
Apply natural-language editcfg_edit
Diff against baselinecfg_diff
Save sessioncfg_save_session

Migrate versions

StepTool
Supported versionscfg_list_versions
Scan for incompatibilitiescfg_check_compat
Produce migration plancfg_migrate_plan
Apply migrationcfg_migrate

Manage users & registrations

TaskTool
List subscriberssubscriber_list
Get onesubscriber_get
Createsubscriber_create
Updatesubscriber_update
Deletesubscriber_delete
Bulk import from CSVsubscriber_bulk_import (dry-run first)
Bulk export to CSVsubscriber_bulk_export
List contacts (runtime)ul_show_contacts / ul_dump
Add/remove contactul_add_contact / ul_remove_contact
Hash a passwordsecurity_generate_ha1
Registrar statsregistrar_stats
UAC registrations (upstream)uac_reg_list, uac_reg_enable, uac_reg_disable, uac_reg_force_register

Manage routing

TaskTool
Dispatcher (round-robin / weighted)dispatcher_list_db, dispatcher_add, dispatcher_update, dispatcher_remove
Dynamic routing (prefix-based)drouting_* (list/add/update/delete for rules, gateways, carriers)
Load balancerlb_list, lb_resize, lb_set_status, lb_reload
Dialplan (number translation)dialplan_list_rules, dialplan_add_rule, dialplan_translate, etc.
Carrier routingcarrierroute_* (dump, reload, activate/deactivate hosts)
Least-cost routinglcr_dump, lcr_reload
Domainsdomain_list, domain_add, domain_delete

Manage security

TaskTool
IP ACLsaddress_list, address_add, address_remove
Anti-floodpike_list_blocked, pike_unblock_ip
Fraud rulesfraud_list_rules, fraud_add_rule, fraud_update_rule, fraud_delete_rule
TLS cert lifecycletls_list, tls_add, tls_update, tls_delete
TLS observabilitytls_statistics, tls_connections, tls_check_expiry, tls_check_all_expiry, tls_handshake_errors
Fail2banfail2ban_*
Config auditsecurity_audit prompt, cfg_lint

Observe runtime

TaskTool
Healthhealth_check
Statsget_statistics (group=core, sl, tm, shmem, usrloc, ...)
Stateless replies (auth load, scanner sig)sl_stats
Processesget_process_list, perf_process_breakdown (grouped)
Memoryget_memory_stats, perf_memory_report (shm + pk + stats)
TCP connectionsget_tcp_connections
Dialogsdlg_list, dlg_get_profiles
NAT keepalivenathelper_stats
Topology hiding statetopology_hiding_list
Mid-registrar statemid_registrar_dump
"Where is the pain?" snapshotperf_hotspots
Short-window samplingperf_sample_window

Diagnose an incident

SymptomTool
One-way audio / NATdiagnose_nat_flow(callid)
Missing CDRs / revenue gapcdr_audit(date_from, date_to)
Duplicate CDRscdr_audit (reports duplicates)
SIP response-code spikecdr_count_by_code(date_from, date_to)
Traffic volume shiftcdr_summary(group_by="hour")
Call you can't find in the UIhomer_search_calls_v7 (ms precision + source IP)
Call-ID rewritten (B2BUA)homer_correlate_callid
Stranded media sessionrtpengine_terminate_call(callid)
"Can this SBC even reach X?"sip_options_ping(target)
Generate a SIPp test for latersip_generate_sipp_scenario

Orchestrate operational changes

TaskTool
Reload all data tables in orderreload_data_tables
Reload one module + verifyreload_single
Preview what would reloadreload_dry_run
Drain a cluster node for maintenancecluster_drain_node
Bring node back onlinecluster_promote_node
Check cluster sync healthcluster_sync_check
Backup a config before editingcfg_backup
List existing backupscfg_list_backups
Roll a change backcfg_rollback (auto pre-rollback snapshot)

Observability stack — Grafana + Prometheus + provisioning

Pair any cfg / scenario with a deployment-ready monitoring stack. See docs/learn/observability-stack.md for the operator runbook.

TaskTool
Everything in one call (cfg + dashboards + Prometheus + Grafana + compose)observability_generate_bundle
Same, starting from a hand-edited cfgobservability_generate_bundle_from_cfg
Just the Grafana dashboards for a scenarioobservability_generate_dashboards
Just the Prometheus scrape stanzaobservability_generate_prometheus_scrape
Just the Grafana provisioning filesobservability_generate_grafana_provisioning
Just the side-car monitoring docker-composeobservability_generate_monitoring_compose
Add prometheus.so + httpd.so to an existing cfgobservability_inject_prometheus
Preview which dashboard categories would fire for a module setobservability_categories_for_modules
List every available panel categoryobservability_list_panel_categories
Persist a generated bundle to diskobservability_save_bundle

Interact with the ecosystem

TaskTool
SIP capture (Homer, simple)homer_search_calls, homer_get_call_flow, homer_stats
SIP capture (Homer 7 advanced)homer_search_calls_v7, homer_get_call_transaction, homer_correlate_callid, homer_health
Media (RTPEngine, MI)rtpengine_show, rtpengine_enable, rtpengine_reload, rtpengine_terminate_call, rtpengine_instance_health
Media (RTPEngine, HTTP)rtpengine_stats, rtpengine_sessions
Load testingsipp_run_scenario, sipp_load_test, sip_generate_sipp_scenario
Quick reachability probesip_options_ping (pure Python, no SIPp needed)
Dockerdocker_list_scenarios, docker_deploy_scenario, docker_status, docker_logs, docker_restart

B2BUA / PBX / SBC

TaskTool
List B2B sessionsb2b_list_sessions
List B2B entitiesb2b_list_entities
Terminate a B2B callb2b_terminate
Bridge a B2B callb2b_bridge
Trigger a B2B scenariob2b_trigger_scenario
SCA subscriptionsb2b_sca_list
Topology hidingtopology_hiding_list

Presence / BLF / MWI

TaskTool
List subscriptionspresence_list_subscriptions
Force NOTIFY to watcherspresence_refresh_watchers
Cleanup expiredpresence_cleanup
OpenSIPS-as-publisher (PUA)pua_list_publications, pua_publish

Event interface

TaskTool
List event typesevent_list
List subscribersevent_list_subscribers
Subscribeevent_subscribe

Develop an OpenSIPS module

StepTool / Prompt
Plan the modulewrite_module prompt
Scaffold C skeletonmodule_scaffold
Add MI commandsmodule_add_mi_command
Compilemodule_compile
Testmodule_test_*

Pick by layer

LayerPrimary tool family
Config-as-codecfg_* (31 tools)
Runtime MImi_execute, mi_list_commands, get_statistics, health_check
User data planedlg_*, ul_*, registrar_*, subscriber_*
Routing planedispatcher_*, drouting_*, lb_*, dialplan_*, carrierroute_*, lcr_*
Mediartpengine_*, nathelper_*
B2BUAb2b_*
Presencepresence_*, pua_*
Securitypike_*, fraud_*, fail2ban_*, tls_*, address_*
Observability (runtime)get_*, homer_*, trace_*, sl_stats, tls_statistics, perf_*
Observability (stack generator)observability_generate_bundle, observability_generate_dashboards*, observability_generate_prometheus_scrape, observability_inject_prometheus
Operational orchestrationreload_*, cluster_drain_*, cfg_backup / cfg_rollback
Incident triagediagnose_nat_flow, cdr_audit, sip_options_ping
Synthetic trafficsip_options_ping, sip_generate_sipp_scenario, sipp_*
Infradocker_*, module_*
Eventsevent_*

When in doubt

Call mi_list_commands first — shows every MI command the running OpenSIPS actually exposes. Many tools are version-gated, and this is the ground truth for your specific deployment.