CTM VoiceAI MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CTM VoiceAI MCP Review the VoiceAI agent for account 12345 and recommend prompt updates."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CTM VoiceAI MCP
Custom development, not an official CallTrackingMetrics product. Built and maintained by Jason Smith. For support, questions, or feedback, email jason.smith@ctm.com.
An MCP server (and Claude/Codex/pi skill) that reviews a CallTrackingMetrics (CTM) account's real call transcripts against its live VoiceAI agent instructions and produces prioritized, paste-ready prompt updates plus a fully rewritten prompt, rendered as a self-contained HTML report.
Highlights:
No API keys at all. Login is CTM OAuth2 (device flow), and the analysis is performed by your MCP assistant itself - there is no external LLM call and no model API key.
Data + renderer only. The server authenticates with CTM, fetches the agents and the call transcripts, and renders the final report. Your assistant does the thinking.
Read-only. It never changes a live agent. Recommendations are proposals for a human to review and apply.
PII-scrubbed output. Before anything is written or rendered, the server redacts emails, phone numbers, and detected caller/person names (2-3 word proper names) in the analysis prose, while preserving Markdown structure and the customer's own agent prompt.
Works with any MCP-capable client: Claude Desktop, Claude Code, Codex, pi, or a local LLM agent.
The flow
Authenticate with CTM via OAuth device flow (
ctm_voiceai_auth_login).Get the VoiceAI agents and their instructions (
ctm_voiceai_get_voice_bots).Get the call activities and transcriptions (
ctm_voiceai_get_calls). The response includes aplansized to a default target of 500 calls (settarget_callsto override,0for all), and the assistant dispatches one parallel subagent per batch so large call volumes are analyzed concurrently instead of serially.The subagents compare the transcripts against the instructions, call by call, and return compact per-call JSON.
Your assistant merges the batches and writes the recommendations, including a full rewrite.
Write the report (
ctm_voiceai_write_report), which saves the files, renders the HTML report, and opens it in your browser.
Related MCP server: llm-assure-mcp
What the HTML report contains
Topic analysis - canonical caller topics ranked by volume, with a High/Medium/Low voice-AI suitability rating and example calls.
Call analysis - the per-call extraction behind those topics.
Current agent prompt - the live instructions being reviewed.
Recommended prompt updates - a Coverage Map plus prioritized, copy-paste-ready prompt snippets.
Suggested rewritten prompt - a complete, self-contained rewrite with a Copy button.
Requirements
Node.js 20+
Python 3.9+ (standard library only; used for HTML rendering)
Any MCP-capable client
Quick start
1. Get the code
git clone https://github.com/CTMJSON/ctm-voiceai-mcp.git
cd ctm-voiceai-mcp
npm install2. Register it with your MCP client
Claude Code (one command):
claude mcp add ctmVoiceAI --scope user -- node "$(pwd)/src/index.js"Claude Desktop - add this to your claude_desktop_config.json:
{
"mcpServers": {
"ctmVoiceAI": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/ctm-voiceai-mcp/src/index.js"]
}
}
}Codex - add this to ~/.codex/config.toml:
[mcp_servers.ctmVoiceAI]
command = "node"
args = ["/ABSOLUTE/PATH/TO/ctm-voiceai-mcp/src/index.js"]Other MCP clients - use the same stdio command:
node /ABSOLUTE/PATH/TO/ctm-voiceai-mcp/src/index.js.
3. Run it
Ask your assistant:
Review the VoiceAI agent for account <account id>: analyze the calls, compare them to the current agent prompt, recommend updates, and open the report.
The assistant walks the six steps above. It logs in to CTM if needed (you enter a short code in the browser), pulls the agents and transcripts, does the analysis, and finally writes and opens the HTML report.
Tools
Tool | Step | Purpose |
| - | Config + login status (never reveals secrets) |
| 1 | Start or resume the device-flow login |
| 1 | Token state and expiry |
| 1 | Delete stored tokens |
| 1 | Build a web-flow authorize URL |
| 1 | Exchange a web-flow code for tokens |
| 2 | Get agents and their full current instructions |
| 3 | One page of answered calls with transcriptions |
| 6 | Write files, render the HTML report, open it |
| - | Read a prior report's metadata |
| - | List recent reports |
Authentication is per-user: the server ships with a shared, public CTM OAuth client id (not a secret), but each user signs in with their own CTM login and only sees accounts that login can access.
Configuration (optional)
The defaults work out of the box. To change them, create
~/.config/ctm-voiceai/config.env:
# Optional tuning
CTM_VOICEAI_OPEN_REPORT=1 # 0 disables auto-opening the HTML report
CTM_VOICEAI_OUT_DIR=/custom/runs/dir
PYTHON_BIN=python3Precedence: process environment, then ~/.config/ctm-voiceai/config.env, then
any file named by CTM_VOICEAI_ENV_FILE. Never commit config.env or the
stored tokens.
Output
Report runs are written to ~/.local/share/ctm-voiceai/runs/<account>-<timestamp>/:
voiceai_topic_analysis.html the full report (opens automatically)
recommended_prompt_updates.md the recommendations as Markdown
suggested_prompt_rewrite.md the full rewritten agent prompt
analysis_artifacts.json the raw analysis passed to the renderer
voiceai_topic_analysis.csv ranked topics
run.json / run.log run metadata and renderer logTroubleshooting
"NO_AUTH" - run
ctm_voiceai_auth_loginto sign in.Login code expired - device codes expire after about 25 minutes; just run
ctm_voiceai_auth_loginagain for a new one.Report did not open - set
CTM_VOICEAI_OPEN_REPORT=1(default) or open thevoiceai_topic_analysis.htmlpath returned byctm_voiceai_write_report.Thin analysis - accounts with few transcribed calls produce thin results. Check the reported call count before drawing conclusions.
Scope
Read-only against CTM (calls and voice-bot configuration). It never changes a live agent. No data leaves your machine except the analysis you explicitly write into the report - there is no external LLM call.
Support and feedback
This is a custom development, not an official CallTrackingMetrics product. Questions, bugs, feature requests, and feedback are welcome: jason.smith@ctm.com.
Available Tools
11 toolsctm_voiceai_auth_exchangeCTM OAuth Exchange CodeB
Exchanges a web-flow authorization code for CTM OAuth tokens and stores them.
Inputs: code (required), redirect_uri (required).
ctm_voiceai_auth_loginCTM OAuth Login (Device Flow)A
Logs in to CTM with OAuth2 device flow. First call returns a user_code and verification_uri; the user visits the URL and enters the code. Call again (or pass wait_seconds) to finish and store tokens. No API key needed.
Inputs: wait_seconds.
ctm_voiceai_auth_logoutCTM OAuth LogoutADestructive
Deletes stored CTM OAuth tokens and any pending device-flow session.
Inputs: no named parameters.
ctm_voiceai_auth_statusCTM OAuth StatusARead-only
Reports whether CTM OAuth tokens are stored, their expiry, scope, and account id.
Inputs: no named parameters.
ctm_voiceai_auth_urlCTM OAuth Web Flow URLARead-only
Builds the OAuth2 authorization URL for the web flow. Open it in a browser; CTM redirects to your redirect_uri with a ?code=. Then call ctm_voiceai_auth_exchange with that code.
Inputs: redirect_uri (required), scope, state.
ctm_voiceai_configuredVoiceAI MCP ConfigurationARead-only
Shows configured CTM VoiceAI settings: OAuth client id, login state, the report renderer path, and where analysis runs are written. Never reveals secrets.
Inputs: no named parameters.
ctm_voiceai_get_callsGet Call Activities And TranscriptionsARead-only
Step 3 of the review flow: one GET against the CTM calls endpoint returning a page of answered calls with transcriptions. The response includes a plan describing the full parallel coverage: total_pages and an array of batches covering target_calls (default 500). Dispatch one subagent per batch; each subagent calls this tool with that batch's page and per_page. Returns id, date, summary and transcript (truncated to max_transcript_chars) for each call.
Inputs: account_id (required), page, since, until, +5 more.
ctm_voiceai_get_voice_botsGet VoiceAI Agents And InstructionsARead-only
Step 2 of the review flow: returns the account's VoiceAI agents and their full current instructions. Optionally filter to one agent by id or name substring. The assistant compares these instructions against the transcripts from ctm_voiceai_get_calls.
Inputs: account_id (required), voice_bot.
ctm_voiceai_list_runsList VoiceAI RunsCRead-only
Lists recent VoiceAI analysis runs, newest first.
Inputs: limit, out_dir.
ctm_voiceai_run_statusVoiceAI Run StatusBRead-only
Returns the status of an analysis run (running/complete/error), its output file paths, and the tail of the log when still running or failed. When complete, read recommended_prompt_updates to see the recommendations.
Inputs: run_id (required), out_dir.
ctm_voiceai_write_reportWrite Report And Open HTMLA
Step 6 of the review flow: takes the analysis the assistant produced, writes it to files, renders the self-contained HTML report, and opens it in the browser. Pass the canonical topics, an optional per-call table, the reviewed agents with their current instructions, the recommendations Markdown, and the suggested fully rewritten prompt.
Inputs: topics (required), account_id (required), bots, open, +5 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 11 tools
The read/fetch tools (get_calls, get_voice_bots, list_runs, run_status, write_report) each map to a distinct step of the review flow, and step numbering in descriptions helps. The weak spot is the six auth tools: ctm_voiceai_configured vs ctm_voiceai_auth_status both report storage/state, and auth_login (device flow) vs auth_url+auth_exchange (web flow) are two paths to the same goal, which invites misselection.
All names share the ctm_voiceai_ prefix and snake_case, but the internal ordering mixes conventions: verb-first (list_runs, get_calls, write_report) alongside resource-first (auth_status, auth_exchange, auth_url, run_status). ctm_voiceai_configured breaks the pattern further by using a past-tense adjective with no verb.
11 tools is a sensible size for an OAuth plus review-and-report workflow, and each tool does earn a slot. It is slightly top-heavy, though, with 6 of 11 tools devoted to authentication while the actual analysis flow gets 5.
The surface covers the full auth lifecycle (url/exchange/login/logout/status/configured) plus run listing, run status, agent and call retrieval, and report writing, so an agent can complete the review loop end to end. Minor gaps: no explicit run-start trigger or date-range filtering on get_calls, but these are workable around via the batch plan.
Maintenance
Related MCP Connectors
Generate contextual prompts and reusable agent skills, evaluate prompts with the 16-dimension Prompt Score, and manage saved work in PromptDrive. Twelve MCP tools also provide authorized access to private Memory for source-grounded answers. Connect over Streamable HTTP using OAuth 2.1 and PKCE. Generation consumes account quota and automatically saves successful results; Memory access follows account permissions and plan limits.
Analytics your AI agent can actually use. Track, experiment, and optimize via MCP.
Hosted Google Ads MCP for Claude and ChatGPT. Preview every write. No developer token.
Scan prompts for injection attacks, redact PII, and audit LLM SDK usage from any MCP client
Related MCP Servers
- AlicenseAqualityBmaintenanceLets an MCP client check whether an ecommerce store can be read by AI assistants, auditing robots.txt to see which AI search versus training crawlers are blocked and sampling product pages to confirm structured data and facts survive in raw HTML without JavaScript. It can also generate a training-only opt-out robots.txt that leaves answer-engine crawlers allowed, all inside the conversation the user is already in.2MIT
- AlicenseNot gradedqualityCmaintenanceLets any MCP client, such as Claude, browse attack suites and probes, run a full assurance assessment with all reports written out, send custom prompts or multi-turn histories and get leak, PII and refusal checks back for adaptive attacks, and read findings from an earlier assessment. This enables agent-driven red-teaming of a chatbot, RAG app or AI agent without leaving the chat client.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables ChatGPT-compatible MCP clients and OpenAI agents to run static HTML audits, analyze Search Console exports, and perform opt-in bounded same-origin crawling with explicit review queues and portable reports.MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to perform authorized web security assessments through MCP tools and a guided review prompt, including passive and full scans, WAF detection, remediation fixes, report export, triage, scan comparison, and proof-of-control verification.1266 PyPI5MIT