MCP server for Elba — manage voice AI agents from any AI coding assistant
Three tools with clear verb-noun naming (list_agents, list_voices, upsert_agent). Descriptions are present and reasonably detailed (100-150 chars each), explaining what each tool does and when to use it. Input schemas are visible and typed. However, parameter descriptions are sparse or missing entirely, upsert_agent has 4 parameters but only 2 have descriptions in the schema. Output schemas are not documented in the code. Error handling exists (ElbaAuthError, ElbaApiError) but recovery guidance is minimal. No pagination support for list tools despite potential for large result sets. Overall: solid foundation but incomplete parameter documentation and missing output schema specs.
List all voice AI agents in your Elba organization. Returns each agent's ID, name, and status (active/inactive).
List available voices for Elba voice AI agents. Returns voice ID, name, description, and provider. Use the voice ID as the "voice" parameter in upsert_agent.
Create or update a voice AI agent. If an agent with the given name exists, it will be updated. Otherwise, a new agent is created with sane defaults.
Parameter descriptions incomplete. upsert_agent has 4 parameters; only 'name' and 'system_prompt' have descriptions in the schema. 'voice' and 'agent_id' descriptions exist in the tool description text but not in the input schema object, forcing LLMs to infer meaning.
Output schemas not documented. list_agents and list_voices return Agent[] and Voice[] respectively, but the response structure is not declared in tool definitions. LLMs cannot plan downstream calls without knowing what fields are returned.
No pagination support. list_agents and list_voices accept no limit or offset parameters. If an organization has hundreds of agents or voices, the response could exhaust context or timeout. Baseline pattern requires pagination for list tools.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Error recovery guidance minimal. ElbaAuthError and ElbaApiError are thrown but tool descriptions do not explain what the LLM should do if a call fails (e.g., 'If you get an auth error, check your ELBA_INTEGRATION_TOKEN environment variable').
upsert_agent parameter 'voice' has optional=true but no default behavior documented in schema. Description says 'defaults to alloy on create' and 'preserves current voice on update', but this conditional logic is not captured in the schema structure.