vora_create_agent
Create a persistent voice agent tailored to your business use case. It learns from every call, compiles product knowledge, handles objections, selects optimal voice and language, and builds conversation workflows.
Instructions
Create a persistent voice agent for a specific use case. Uses your account context (from vora_register) plus any additional details you provide.
The voice agent persists across calls and improves with every conversation it has. Vora automatically:
Compiles product knowledge from your website and registration context
Generates objection handling based on your industry
Selects the optimal voice, language, and speaking style
Builds a conversation workflow (cold call, appointment, follow-up, etc.)
You can create multiple voice agents under one account for different use cases.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| account_id | Yes | Your Vora account ID from vora_register. | |
| objective | Yes | What this voice agent does. Be specific. E.g., 'Cold call restaurant owners in Dubai to sell POS software at $99/mo' or 'Follow up with leads who downloaded our whitepaper about inventory management.' | |
| workflow | No | Conversation workflow template. Auto-detected from objective if omitted. | |
| language | No | Primary language (ISO 639-1). Auto-detected from target market if omitted. E.g., 'ar' for Arabic, 'hi' for Hindi. | |
| additional_context | No | Extra context beyond registration. Product updates, specific campaign details, competitor info, pricing changes. |
Implementation Reference
- src/tools/vora-create-agent.ts:16-92 (handler)The main handler function that registers the 'vora_create_agent' tool. Accepts account_id, objective, workflow, language, and additional_context. POSTs to /v1/agent-api/agents and returns the created agent details.
export function registerVoraCreateAgent(server: McpServer): void { server.tool( "vora_create_agent", `Create a persistent voice agent for a specific use case. Uses your account context (from vora_register) plus any additional details you provide. The voice agent persists across calls and improves with every conversation it has. Vora automatically: - Compiles product knowledge from your website and registration context - Generates objection handling based on your industry - Selects the optimal voice, language, and speaking style - Builds a conversation workflow (cold call, appointment, follow-up, etc.) You can create multiple voice agents under one account for different use cases.`, { account_id: z .string() .describe("Your Vora account ID from vora_register."), objective: z .string() .describe( "What this voice agent does. Be specific. E.g., 'Cold call restaurant owners in Dubai to sell POS software at $99/mo' or 'Follow up with leads who downloaded our whitepaper about inventory management.'" ), workflow: z .enum(["cold_call", "appointment_set", "follow_up", "callback", "custom"]) .optional() .describe( "Conversation workflow template. Auto-detected from objective if omitted." ), language: z .string() .optional() .describe( "Primary language (ISO 639-1). Auto-detected from target market if omitted. E.g., 'ar' for Arabic, 'hi' for Hindi." ), additional_context: z .string() .optional() .describe( "Extra context beyond registration. Product updates, specific campaign details, competitor info, pricing changes." ), }, async (params) => { const client = getApiClient(); try { const response = await client.post<CreateAgentResponse>( "/v1/agent-api/agents", { account_id: params.account_id, objective: params.objective, workflow: params.workflow, language: params.language, additional_context: params.additional_context, } ); return { content: [ { type: "text" as const, text: `Voice agent created!\n\nAgent ID: ${response.agent_id}\nName: ${response.name}\nObjective: ${response.objective}\nWorkflow: ${response.workflow}\nLanguage: ${response.language}\nEst. cost per call: ${response.estimated_cost_per_call}\nVoice preview: ${response.voice_preview_url}\nContext sources: ${response.context_sources.join(", ")}\n\nReady to make calls. Use vora_call with this agent_id.`, }, ], }; } catch (error) { return { content: [ { type: "text" as const, text: `Agent creation error: ${error instanceof Error ? error.message : String(error)}`, }, ], isError: true, }; } } ); } - src/tools/vora-create-agent.ts:5-14 (schema)Response interface for the agent creation API call, containing agent_id, name, objective, workflow, language, voice preview URL, estimated cost, and context sources.
interface CreateAgentResponse { agent_id: string; name: string; objective: string; workflow: string; language: string; voice_preview_url: string; estimated_cost_per_call: string; context_sources: string[]; } - src/tools/index.ts:3-13 (registration)The tool is registered in the central tools index. registerVoraCreateAgent is imported and called with the McpServer instance.
import { registerVoraCreateAgent } from "./vora-create-agent.js"; import { registerVoraCall } from "./vora-call.js"; import { registerVoraCalls } from "./vora-calls.js"; import { registerVoraUpdateAgent } from "./vora-update-agent.js"; export function registerTools(server: McpServer): void { registerVoraRegister(server); registerVoraCreateAgent(server); registerVoraCall(server); registerVoraCalls(server); registerVoraUpdateAgent(server); - src/api-client.ts:207-211 (helper)The getApiClient helper used by the handler to obtain the API client for making HTTP requests to the Vora backend.
let client: VoraApiClient | null = null; export function getApiClient(): VoraApiClient { if (!client) client = new VoraApiClient(); return client; }