Build agents from Claude Code
What this actually is
Most MCP servers hand an assistant a REST API and hope for the best. This one hands it the job.
Connect Decibyl to Claude Code, Codex, Cursor or Claude Desktop and your assistant can author a complete voice agent — plan it with you, write it, validate it, save it, and review its own work. Not “list my agents.” Build one.
You: Build me an agent that calls people who abandoned their cart, asks why, and offers a 10% code if the reason was price. Telugu and English.
Claude: [reads Decibyl's voice-prompting guide, asks you six questions about persona, escalation and what counts as success] [writes the workflow in TypeScript, validates it, saves it]
Saved as a draft. Four nodes: greeting → reason capture → discount offer → close. The reason node extracts `churn_reason` so you can segment on it later. Publish when you've listened to a test call.That loop is the product.
Why the agents come out good
An LLM with API access writes a voice agent the way it writes any other code: plausibly, and wrong in the ways voice is specifically hard. Turns that never hand back to the caller. Prompts that contradict each other three nodes apart. No definition of what a successful call was.
So the server ships the craft alongside the API. get_voice_prompting_guide is
a tool, and the server’s own instructions tell the assistant to call it
before writing prompts — not as documentation it might find, but as a step
in the loop it is told to run.
| Stage | What the assistant is made to do |
|---|---|
| Plan | Ask you about persona, node order, exit conditions and the tools it will need. Present a plan. Wait for you to approve it before writing any code. |
| Create | Pull the guidance for each node type it is about to write, emit TypeScript, and save. |
| Review | Re-read its own work for instruction collision, missing handoff cues and success-criteria gaps. |
Eight topics sit behind that, each one written from a failure mode seen in real agents: global-node guidelines, guardrails against fabrication and abuse, call flow design, one-tool-one-job discipline, explicit success criteria, end-call consolidation, turn-taking, and instruction collision.
The practical effect: the assistant asks before it builds, and what it builds holds a conversation.
What it can do
Agents are stored as JSON and projected to TypeScript against the
@decibyl/sdk package for editing, then parsed back on save. Your assistant
edits real code — with real type errors, returned as structured feedback it can
act on rather than a 400 it has to guess at.
| Tools | |
|---|---|
| Author agents | create_workflow, save_workflow, get_workflow_code |
| Learn the schema | list_node_types, get_node_type |
| Get the craft right | get_voice_prompting_guide |
| Build custom tools | create_tool — with list_credentials for auth |
| See the workspace | list_workflows, get_workflow, list_tools, list_documents, list_recordings |
| Check telephony | get_telephony_verification, list_phone_numbers, search_available_numbers, get_billing_summary |
| Read the manual | search_docs, read_doc, list_docs |
Everything is scoped to the workspace behind your API key.
What it deliberately cannot do
Buying a phone number and releasing one are not available over MCP, and that is on purpose rather than unfinished.
Buying spends money every month, and an assistant that retries a request it thinks failed can end up renting two numbers where you wanted one. Releasing is irreversible at the carrier — the number goes back to the pool and may be issued to someone else the same day, and it may be the number printed on your storefront.
So the assistant can tell you what is available and what you are paying, and the decision to spend or to give up a number stays with a person, over the REST API or the dashboard.
Connect it
You need a Decibyl API key — generate one at app.decibyl.ai/api-keys. See API Keys.
The endpoint is https://app.decibyl.ai/api/v1/mcp/, also shown in
Platform Settings → MCP Server.
claude mcp add --transport http decibyl https://app.decibyl.ai/api/v1/mcp/ \ --header "X-API-Key: YOUR_API_KEY"
claude mcp list # verify[mcp_servers.decibyl]url = "https://app.decibyl.ai/api/v1/mcp/"http_headers = { "X-API-Key" = "YOUR_API_KEY" }{ "mcpServers": { "decibyl": { "url": "https://app.decibyl.ai/api/v1/mcp/", "headers": { "X-API-Key": "YOUR_API_KEY" } } }}Restart Claude Desktop after saving. Any client supporting Streamable HTTP transport connects with the same URL and header — Cursor included.
To keep the key out of config.toml in Codex, use env_http_headers instead
and export it before launching:
[mcp_servers.decibyl]url = "https://app.decibyl.ai/api/v1/mcp/"env_http_headers = { "X-API-Key" = "DECIBYL_API_KEY" }export DECIBYL_API_KEY="YOUR_API_KEY"codexVerify with codex mcp list and codex mcp get decibyl.
Things to ask it
Build something
- “Build me an appointment reminder agent for a dental clinic. Hindi, and it should offer to reschedule if they say no.”
- “Create a lead qualification agent that asks for budget and timeline, and transfers to a human if the budget is over ₹5 lakh.”
- “Make a tool that posts to our CRM webhook, then wire it into Support Agent so it logs every resolved ticket.”
Change something
- “In Lead Qualifier, add a node after the greeting that asks for budget, then routes to the existing qualification node.”
- “Rename the intro node to greeting and fix every edge that referenced it.”
- “Review Support Agent for instruction collision and tell me what you’d change before I publish.”
Check on telephony and billing
- “Why can’t my agent make phone calls?”
- “What phone numbers do I have, and which agent answers each one?”
- “What am I paying in monthly number rental, and is anything overdue?”
- “Are there any local numbers available in Hyderabad?”
Understand something
- “What node types are there, and what fields does a
knowledge_basenode take?” - “Search the docs for how to configure a TURN server.”
- “List the recordings from my most recent agent.”
Next
- Put the agent you just built on your website with the web voice widget — no phone number needed.
- Or give it a phone number: Telephony.