MCP server that provides tools for initiating phone calls via Twilio
Single tool with partially defined schema but significant quality gaps. Tool 'trigger-call' has a schema visible in code (Zod), but lacks actionable descriptions, parameter constraints, error guidance, and output documentation. Description is minimal (53 chars), below the 194-char baseline. No enum constraints on string parameters. Output is JSON-stringified plain text rather than structured. No error classification or recovery guidance. No per-parameter descriptions in the actual descriptions field (they exist in Zod but are redundant/minimal). Prompts and resources registered but not fully implemented (resource returns TODO comment). STDIO transport limits remote accessibility. Overall pattern adoption is sparse, missing command-tool pattern for a destructive operation, missing response-shaper pattern, missing error-classification pattern.
Trigger an outbound phone call via Twilio
Tool description is too brief (53 chars vs 194-char baseline). Lacks WHEN to use it, prerequisite setup (Twilio credentials), or what happens to the phone system. 'Trigger an outbound phone call via Twilio' tells LLM WHAT but not HOW or WHY.
No output schema documented. Tool returns JSON-stringified text with fields 'status', 'message', 'callSid' but nowhere in the code is this structure described to the LLM. LLM cannot reliably extract callSid for downstream use or understand failure responses.
Error handling returns plain text error message in JSON without guidance on recovery. 'Failed to trigger call: [error]' tells LLM the call failed but not whether to retry, ask the user, or try a different number. No error classification (retryable vs user-fixable vs fatal).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 45 | - | v1 |
Parameters 'toNumber' and 'callContext' lack validation constraints. 'toNumber' should declare format (E.164), regex pattern, or min/max length. 'callContext' is unbounded string, no max length, no enum of allowed contexts. LLM can pass garbage.
Destructive operation (makes irreversible outbound call) lacks confirmation or dry-run pattern. LLM could call this by mistake and charge the user's Twilio account. No mention in description that this incurs cost or creates side effects.
Resource 'get-latest-call' is registered but not implemented (returns hardcoded TODO JSON). This creates a broken tool discovery path. Either remove it or implement it properly with pagination, filtering, and documented output schema.
Prompt 'make-restaurant-reservation' is registered but not verified to work end-to-end with the trigger-call tool. If they are meant to compose together, this should be documented in both descriptions and tested.
STDIO transport limits remote accessibility. Hosted MCP clients (e.g., Claude Desktop, web-based agents) cannot connect to this server. Only local stdin/stdout is supported. This is a hard architectural limitation.