Retell AI Voice API as Python library, LangChain tools, and MCP server
Server exposes 26 tools (13 unique operations duplicated across MCP and LangChain interfaces). Tool naming follows verb_noun convention (list_agents, create_agent, get_call_transcript). All tools have descriptions (10-60 chars, mostly adequate). Input schemas are present and properly typed with Pydantic BaseModel definitions. However, output schemas are undocumented, tools return JSON strings with no declared structure. Parameter descriptions are present but minimal (avg 40-60 chars). No error handling guidance, no recovery hints, no validation constraints (e.g., enums for language codes, model names, sort_order). Destructive operations (delete_agent) lack confirmation patterns. Duplicate tool registration (MCP + LangChain) creates maintenance burden and potential LLM confusion.
Create a new voice agent.
Initiate an outbound phone call.
Delete an agent.
Get details of a specific agent.
Get details of a specific call.
Get the transcript of a call.
Get details of a specific voice.
Output schemas undocumented. All tools return JSON strings with no declared structure. LLMs cannot plan downstream calls or extract fields reliably.
Duplicate tool registration. 13 tools registered twice (once in server.py MCP, once in langchain_tools.py). Creates maintenance burden, LLM confusion, and inconsistent behavior if implementations diverge.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
List all voice agents.
List phone calls.
List all registered phone numbers.
List available voices from Retell's voice library.
Create a new voice agent.
Initiate an outbound phone call.
Delete a voice agent.
Get details of a specific voice agent.
Get details of a specific call.
Get the transcript of a call.
Get details of a specific voice.
List all voice agents.
List phone calls.
List all registered phone numbers.
List available voices from Retell's voice library.
Update an existing voice agent.
Update a phone number configuration.
Update an existing agent.
Update a phone number configuration.
No error handling guidance. Tools return raw API responses with no recovery hints. E.g., 'Agent not found' should suggest 'Call list_agents() to see available agents.'
Destructive operations lack confirmation. delete_agent has no dry-run or confirmation step. Agents can permanently delete agents without safeguards.
Enum constraints missing. Parameters like 'language', 'model', 'sort_order' accept free-form strings. Should declare valid values as enums to prevent hallucinated inputs.