cucm-emulator-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| HOST | No | Bind host for SSE transport (also settable via MCP_HOST) | 127.0.0.1 |
| PORT | No | Port for SSE HTTP server (also settable via MCP_PORT) | 3000 |
| MCP_HOST | No | Bind host for SSE transport (also settable via HOST) | 127.0.0.1 |
| MCP_PORT | No | Port for SSE HTTP server (also settable via PORT) | 3000 |
| CUCM_MOCK | No | Force in-process in-memory mock store | false |
| MCP_TRANSPORT | No | Transport type: stdio or sse | stdio |
| REDACT_SECRETS | No | Redact sensitive strings in logs | false |
| CUCM_EMULATOR_URL | No | Target live emulator URL | |
| CUCM_OPENAPI_SPEC | No | Path or URL to OpenAPI 3.1.0 spec (default is bundled) | |
| CUCM_SEED_PROFILE | No | Seed profile: lab-small, standard-enterprise, empty | lab-small |
| CUCM_EMULATOR_AUTH_TOKEN | No | Bearer auth token for live emulator |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| emu_seed_fixturesB | Seeds deterministic cluster topology, nodes, phones, dial plan partitions, CSS, and CURRI policies into the CUCM emulator store. |
| emu_reset_storeA | Resets or wipes the CUCM emulator in-memory state and re-seeds with a specified topology profile. |
| emu_inspect_fixturesB | Inspects and returns a comprehensive summary of active CUCM cluster nodes, phones, call sessions, policies, and buffers. |
| emu_list_nodesA | Lists all CUCM cluster nodes (Publisher, Subscribers, TFTP) with their IP addresses, active versions, and RISDB return codes. |
| emu_set_node_statusA | Modifies the status and RIS return code of a cluster node to simulate failover, network isolation, or service degradation (ADR 0120/0122). |
| emu_list_phonesB | Lists configured and registered Cisco IP phone endpoints with their line numbers, MAC addresses, firmware, and registration status. |
| emu_set_phone_statusB | Updates the registration status of a specific Cisco IP phone (Registered, UnRegistered, Rejected) in the RISDB projection. |
| emu_get_phone_webA | Retrieves serviceability, network configuration, or XML execute web responses from a simulated Cisco IP phone endpoint. |
| emu_simulate_callA | Simulates an end-to-end telephone call through CUCM dial plan routing, calculating RTP media metrics and emitting synthetic CDR/CMR records. |
| emu_call_actionB | Executes mid-call state transitions such as answering, holding, resuming, or disconnecting an active call session. |
| emu_list_active_callsA | Lists active or in-progress telephone call sessions and their current state (alerting, connected, policy-pending, held). |
| emu_evaluate_curriB | Evaluates external call routing policies via Cisco External Call Control (CURRI / ECC), returning permit, deny, or divert routing decisions. |
| emu_get_curri_historyB | Retrieves the log of past CURRI / ECC routing evaluation decisions and rule matches. |
| emu_generate_cdrsB | Generates realistic synthetic Cisco Call Detail Records (CDRs) for load testing, abandoned call analysis, or CURRI block reporting. |
| emu_get_cdr_historyB | Retrieves recent CDR records from the emulator buffer in structured JSON or raw Cisco CSV export format. |
| emu_get_healthzC | Health check |
| emu_post_axl_B | Accepts AXL SOAP operations such as getPhone, getUser, listPhone, and executeSQLQuery. |
| emu_post_realtimeservice2_services_risservice70C | Accepts RIS SOAP operations such as selectCmDevice and selectCmDeviceExt. |
| emu_post_logcollectionservice2_services_log_collection_port_type_serviceB | Accepts CUCM serviceability log-collection operations such as listNodeServiceLogs and selectLogFiles. |
| emu_post_logcollectionservice_services_dime_get_file_serviceB | Returns CUCM serviceability files through multipart/related DIME responses. |
| emu_post_cdron_demand_service2_services_cdron_demand_serviceB | Accepts get_file_list requests for virtual CDR repository files. |
| emu_post_perfmonservice2_services_perfmon_serviceC | Accepts CUCM PerfMon operations including counter discovery, collection, and session workflows. |
| emu_get_contracts_catalogB | Returns the v2 contract catalog with typed AXL operation metadata, coverage summaries, resources, capabilities, and state collections. |
| emu_get_contracts_versionsB | List supported contract versions |
| emu_get_contracts_axlC | Inspect AXL operation coverage for one CUCM version |
| emu_get_contracts_openapi_jsonB | Fetch generated OpenAPI JSON |
| emu_get_contracts_openapi_yamlB | Fetch generated OpenAPI YAML |
| emu_get_summaryD | Get v2 summary counters |
| emu_query_sqlB | Available when CUCM_EMULATOR_STORAGE=sqlite. Supports SELECT, WITH, and PRAGMA statements only. |
| emu_get_topologyB | Get v2 switch topology and endpoint routing |
| emu_get_phone_by_ipB | Resolve a phone fixture by IP address |
| emu_list_inventoryC | List inventory objects from a v2 collection |
| emu_upsert_inventoryC | Create or upsert a v2 inventory object |
| emu_get_inventory_itemC | Get a v2 inventory object by id |
| emu_delete_inventory_itemC | Delete a v2 inventory object |
| emu_patch_inventory_itemD | Patch a v2 inventory object |
| emu_list_scenariosB | List supported v2 scenario definitions |
| emu_bootstrap_labC | Bootstrap the emulator with a generated canonical lab fixture |
| emu_apply_scenarioC | Apply a v2 emulator scenario |
| emu_get_scenario_runC | Get a v2 scenario run |
| emu_get_scenario_run_eventsC | Get the event log for a v2 scenario run |
| emu_replay_scenario_runC | Replay a previous v2 scenario run |
| emu_list_call_sessionsC | List canonical v2 call sessions |
| emu_create_call_sessionD | Create a canonical v2 call session |
| emu_get_call_sessionC | Get a canonical v2 call session |
| emu_append_call_session_eventC | Append an event to a canonical v2 call session |
| emu_terminate_call_sessionC | Terminate a canonical v2 call session |
| emu_list_operation_runsC | List completed operation runs |
| emu_create_operation_runD | Execute a synchronous operations drill |
| emu_get_operation_runC | Fetch one operation run |
| emu_list_cdr_recordsC | List canonical CDR projections |
| emu_export_cdr_csvC | Export canonical CDR projections as Cisco-style CSV |
| emu_get_cdr_publisherB | Get canonical CDR publisher configuration and pending state |
| emu_update_cdr_publisherB | Update canonical CDR publisher configuration |
| emu_list_cmr_recordsC | List canonical CMR projections |
| emu_get_cmr_publisherA | Get canonical CMR publisher configuration and pending state |
| emu_update_cmr_publisherD | Update canonical CMR publisher configuration |
| emu_list_curri_eventsC | List canonical CURRI projections |
| emu_list_syslog_eventsC | List canonical syslog projections |
| emu_list_syslog_sourcesB | List canonical syslog source inventory |
| emu_get_syslog_publisherA | Get canonical syslog publisher configuration and delivery state |
| emu_update_syslog_publisherC | Update canonical syslog publisher configuration |
| emu_list_artifact_batchesA | List pending and delivered artifact batches across publishers |
| emu_preview_artifactsB | Preview session-derived artifacts without publishing them |
| emu_publish_cdrB | Flush the CDR publisher immediately |
| emu_publish_cmrC | Flush the CMR publisher immediately |
| emu_publish_syslogB | Flush the syslog publisher immediately |
| emu_get_evidenceC | Fetch an evidence bundle for a canonical call session |
| emu_create_evidence_bundleC | Build an aggregate evidence bundle from session IDs or a scenario run |
| emu_list_snapshotsA | List persisted emulator snapshots |
| emu_export_snapshotC | Export the current emulator state as a persisted snapshot |
| emu_import_snapshotC | Persist a provided snapshot pack |
| emu_load_snapshotB | Load a persisted snapshot into the in-memory emulator |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 73 tools
Many tools form parallel legacy and v2 surfaces for the same concepts (e.g., emu_list_active_calls vs emu_list_call_sessions, emu_get_cdr_history vs emu_list_cdr_records, emu_simulate_call vs emu_create_call_session), so an agent must infer which generation to use. The SOAP passthrough tools also overlap with higher-level tools for AXL, RIS, PerfMon, and CDR operations.
The emu_ verb_noun convention is visible, but it is broken by unwieldy endpoint-derived names like emu_post_realtimeservice2_services_risservice70 and emu_post_logcollectionservice_services_dime_get_file_service, as well as by inconsistent verb choices (list/get/inspect/fetch/query, create/generate/upsert/seed/bootstrap). The legacy/v2 distinction is not encoded in names, making the pattern unpredictable.
73 tools is far beyond the 50+ threshold and includes extensive meta surfaces (contracts, OpenAPI, scenarios, operation runs, snapshots, evidence) alongside parallel legacy SOAP passthrough endpoints. The core CUCM emulation could be exposed through a much smaller, purpose-built toolset.
The server covers cluster nodes, phones, call sessions, CDR/CMR, CURRI, syslog, publishers, snapshots, and AXL/RIS/serviceability operations, so most domain workflows have a path. Minor gaps remain: phone/node lifecycle is mostly limited to status changes and generic inventory upserts, and canonical v2 lacks some direct update/delete semantics that legacy tools patch over.