Bolna MCP Server
OfficialEnables sending WhatsApp messages to contacts as part of multi-step workflow automations and workflow campaigns.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Bolna MCP ServerCreate an AI voice agent to make outbound sales calls"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Bolna MCP Server
Remote MCP server (Streamable HTTP) wrapping the Bolna voice
AI REST API (https://api.bolna.ai): 84 tools covering nearly every documented
Bolna endpoint, TypeScript, deployed on Vercel via mcp-handler.
Live at mcp.bolna.ai — that page has the same connect instructions below with copy-paste buttons for each client.
MCP is an open protocol, not Claude-specific — this server works with any MCP-compatible client: Claude, Codex, Cursor, Windsurf, Zed, and others.
Endpoint corrections found while verifying tool paths against the live Bolna
docs are documented in the comment block at the top of
src/tools/index.ts.
Sub-accounts and switching between accounts
Sub-account API keys (format sa-...) work exactly like a main account's key
(bn-...) — connect a separate client/connector with a sub-account's key as
the Bearer token to work entirely within that sub-account.
To switch accounts within a single connected session instead of
reconnecting, every tool also accepts an optional api_key argument that
overrides the connection's own credential for just that call. Get a
sub-account's key from list_sub_accounts' api_key field, then pass it to
any tool call to run that call against that sub-account instead of the main
account — e.g. "list agents in sub-account X" resolves to calling
list_sub_accounts, finding X's key, then list_agents with that key passed
as api_key.
Related MCP server: VoIPbin MCP Server
Available tools
84 tools across 17 categories. "Write" tools flagged Destructive modify, remove, or spend money and typically prompt for confirmation in MCP clients that respect tool annotations.
Agents & calls
Tool | Type | Description |
| Read | List agents in the account (id, name, status, created_at). Paginated. |
| Read | Full config of one agent by ID. |
| Write | Create a new agent. Returns its ID. |
| Write, Destructive | Patch an existing agent's name, prompts, welcome message, webhook, or voice settings. |
| Write, Destructive | Permanently delete an agent. Irreversible. |
| Write, Destructive | Cancel every queued call for an agent. |
| Write, Destructive | Place a real outbound call from an agent. Spends account balance. |
| Write, Destructive | Cancel a queued or scheduled call. |
Executions
Tool | Type | Description |
| Read | Call history for one agent. Paginated, defaults to the last 7 days. |
| Read | Full details of one call: transcript, status, cost, telephony data. |
| Read | Raw pipeline logs (transcriber/LLM/synthesizer) for a call. |
| Read | Every call execution within a batch. Paginated. |
Batches
Tool | Type | Description |
| Write | Create a batch of outbound calls from a list of recipients. |
| Read | A batch's status, schedule, and contact counts. |
| Read | Call batches for one agent. |
| Write, Destructive | Schedule a batch to start calling. Spends account balance. |
| Write, Destructive | Halt a running or queued batch. |
| Write, Destructive | Permanently delete a batch. |
Dispositions (structured call extraction)
Tool | Type | Description |
| Read | List dispositions, optionally scoped to an agent. |
| Read | Retrieve a single disposition. |
| Write | Create a disposition linked to an agent. |
| Write | Atomically create multiple dispositions for one agent. |
| Write, Destructive | Update a disposition (may fork a private copy — Bolna's copy-on-write). |
| Write, Destructive | Permanently delete a disposition. |
| Read | Run an agent's dispositions against a sample transcript. |
Extraction categories
Tool | Type | Description |
| Read | List an agent's extraction categories with their dispositions. |
| Write | Create an extraction category (name + model) on an agent. |
| Write, Destructive | Rename a category or change its model; renames rewrite the category text on its dispositions. |
| Write, Destructive | Permanently delete a category and every disposition inside it. |
Phone numbers & inbound
Tool | Type | Description |
| Read | Phone numbers on the account. |
| Read | Search phone numbers available for purchase. |
| Write, Destructive | Purchase a phone number. Real recurring charge. |
| Write, Destructive | Remove a phone number and stop its billing. |
| Write | Route inbound calls on a number to an agent, optionally with an IVR menu. |
| Write, Destructive | Remove inbound routing from a number. |
SIP trunks (bring your own telephony)
Tool | Type | Description |
| Write | Create a SIP trunk with gateway and auth config. |
| Read | Full details of a SIP trunk. |
| Read | All SIP trunks on the account. |
| Write, Destructive | Partially update a SIP trunk. |
| Write, Destructive | Permanently delete a trunk and its gateways/numbers. |
| Write | Add a DID phone number to a trunk. |
| Write, Destructive | Remove a number from a trunk. |
| Read | Numbers assigned to a trunk. |
Sub-accounts (enterprise)
Tool | Type | Description |
| Write | Create an isolated sub-account workspace. Requires org admin access. |
| Read | All sub-accounts in the organization. |
| Write, Destructive | Update a sub-account's name or concurrency limits. |
| Write, Destructive | Permanently delete a sub-account and all its data. |
| Read | Usage and cost breakdown for one sub-account. |
| Read | Usage and cost breakdown for every sub-account. |
Voice & providers
Tool | Type | Description |
| Read | TTS providers and models Bolna supports. |
| Read | Voices available for a TTS provider/model. |
| Read | Third-party providers configured on the account (secrets masked). |
| Write, Destructive | Remove a configured provider by name. |
Knowledgebase (RAG)
Tool | Type | Description |
| Write | Create a knowledgebase by scraping a URL. PDF upload isn't supported here. |
| Read | A knowledgebase's file name, status, and settings. |
| Read | All knowledgebases on the account. |
| Write, Destructive | Permanently delete a knowledgebase. |
Violations
Tool | Type | Description |
| Read | List flagged call violations, optionally filtered by status. Paginated. |
Workflows
Multi-step, per-contact automations (call an agent, branch on the outcome, wait, call an API, message over WhatsApp, retry, and so on) — distinct from a single agent's own conversation. A workflow is edited as a draft, then published as an immutable version before it can run.
Tool | Type | Description |
| Write | Create a new (empty) workflow. |
| Read | List workflows, optionally filtered by name. Paginated. |
| Read | A workflow's status plus its full draft/published version history. |
| Write, Destructive | Rename a workflow. |
| Write, Destructive | Permanently delete a workflow and every version. |
| Read | The current editable draft definition and its revision number. |
| Write, Destructive | Overwrite the draft's node graph. Requires the current revision to avoid clobbering concurrent edits. |
| Read | Check the saved draft for errors before publishing. |
| Write, Destructive | Freeze the draft as a new immutable published version. |
| Read | Retrieve a specific published version's node graph. |
| Write, Destructive | Run a single contact through the latest published version. Places real calls/messages. |
| Read | Every node type the engine supports, with its config parameters. |
Workflow campaigns
Runs many contacts through one workflow version as a batch.
Tool | Type | Description |
| Write | Create a campaign pinned to a workflow version. |
| Read | List campaigns, optionally filtered by workflow, status, or kind. Paginated. |
| Read | A campaign's status and totals, plus entry/validation-error breakdowns. |
| Write, Destructive | Delete an empty draft campaign. |
| Write | Add contacts to a campaign (CSV/JSON columns beyond the standard fields go in |
| Read | List a campaign's uploaded contacts. Paginated. |
| Read | The CSV header row the campaign's pinned version expects. |
| Write, Destructive | Start dispatching a campaign's pending entries. Spends account balance. |
| Write, Destructive | Pause a running campaign's dispatching. |
| Write, Destructive | Resume a paused campaign. |
| Write, Destructive | Permanently terminate a campaign. Cannot be undone. |
| Read | List a campaign's per-contact executions. Paginated. |
| Read | Aggregated execution/termination/per-node funnel counts. |
Workflow executions
A single contact's run through a workflow, created by run_workflow or a campaign.
Tool | Type | Description |
| Read | Current node, node-by-node history, and recent timeline events. |
| Write, Destructive | Terminate a running execution. |
Account & documentation
Tool | Type | Description |
| Read | Account profile, wallet balance, concurrency limits. |
| Read | Search the Bolna documentation site for matching pages. |
| Read | Fetch the full markdown content of a Bolna documentation page. |
Not exposed as a tool, all for the same reason — each needs either a raw file upload or a third-party secret as its request body, neither of which maps cleanly to a tool argument or belongs in a chat conversation:
POST /providers(add a provider) — takes a third-party credential (e.g. a Twilio auth token)POST /knowledgebasewith a PDF file (the URL variant is supported, above)POST /violations/submit— takes an evidence screenshot/document
Install & use
Prerequisite: your own Bolna API key (from the Bolna dashboard). Every
client below needs the same two things: the server URL
(https://mcp.bolna.ai/api/mcp) and that key as a Bearer token.
Claude Code
One command:
./scripts/connect.shor the equivalent by hand:
claude mcp add --transport http bolna https://mcp.bolna.ai/api/mcp \
--header "Authorization: Bearer <your BOLNA_API_KEY>" \
--scope useror by hand-editing ~/.claude.json (or .mcp.json for a project-scoped copy):
{
"mcpServers": {
"bolna": {
"type": "http",
"url": "https://mcp.bolna.ai/api/mcp",
"headers": {
"Authorization": "Bearer <your BOLNA_API_KEY>"
}
}
}
}Claude Desktop
Desktop's config only understands locally-run (stdio) servers, so reaching a
remote HTTP server with a custom header needs the
mcp-remote bridge, which runs
locally and forwards the header on your behalf. Add this to
claude_desktop_config.json:
{
"mcpServers": {
"bolna": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.bolna.ai/api/mcp",
"--header",
"Authorization: Bearer <your BOLNA_API_KEY>"
]
}
}
}Restart Claude Desktop after editing the config.
Codex CLI
Reads the key from an environment variable rather than the config file:
export BOLNA_API_KEY="<your BOLNA_API_KEY>"
codex mcp add bolna \
--url https://mcp.bolna.ai/api/mcp \
--bearer-token-env-var BOLNA_API_KEYCursor
Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"bolna": {
"url": "https://mcp.bolna.ai/api/mcp",
"headers": {
"Authorization": "Bearer <your BOLNA_API_KEY>"
}
}
}
}Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"bolna": {
"serverUrl": "https://mcp.bolna.ai/api/mcp",
"headers": {
"Authorization": "Bearer <your BOLNA_API_KEY>"
}
}
}
}Zed
Add to settings.json. Zed doesn't support environment-variable
interpolation in headers yet, so the key goes in directly:
{
"context_servers": {
"bolna": {
"url": "https://mcp.bolna.ai/api/mcp",
"headers": {
"Authorization": "Bearer <your BOLNA_API_KEY>"
}
}
}
}Claude Desktop (extension)
Instead of the mcp-remote bridge above, you can install this as a proper
Desktop Extension (.mcpb) —
a local, stdio-based build of the same 84 tools, packaged with a manifest so
Claude Desktop can install it with one click and prompt you for your API key
itself (no config file editing).
Build it from source:
npm run package:mcpb # bundles src/stdio.ts, packs mcpb/ into bolna-mcp.mcpbThen double-click bolna-mcp.mcpb, or drag it into Claude Desktop's
Settings → Extensions, and enter your Bolna API key when prompted.
This local build talks directly to api.bolna.ai using only the raw API key
path in src/lib/auth.ts — OAuth is specific to the
remote server and isn't used here.
Any other MCP client
Point it at:
URL: https://mcp.bolna.ai/api/mcp
Header: Authorization: Bearer <your BOLNA_API_KEY>claude.ai web/mobile
This server now implements real OAuth (via Bolna's Supabase-backed authorization server), so claude.ai's own "Add custom connector" flow (Settings → Connectors) should work with just the URL — no manually pasted token needed, since claude.ai handles the login/consent redirect itself the same way Claude Code does. This hasn't been separately verified on claude.ai web/mobile specifically yet (only Claude Code's CLI flow has been tested end-to-end so far) — the CLI/config options above remain the proven paths in the meantime.
Try it
After connecting, start a new conversation and ask something like:
"List my Bolna agents"
"What's my Bolna wallet balance?"
"Call +1... using my [agent name] agent"
Auth
Two ways to connect:
OAuth — sign in through Bolna's own login (Supabase-backed). This is what claude.ai's custom-connector UI and Claude Code's
Authenticateprompt use automatically; no manual token needed.Raw API key — pass your own Bolna API key as a Bearer token in the
Authorizationheader, per the client examples above.
Either credential is verified before being forwarded to api.bolna.ai — see
the comment block at the top of src/lib/auth.ts for how.
For local development, set BOLNA_API_KEY in .env and omit the header —
the server falls back to it automatically.
Local dev
npm install
cp .env.example .env # then fill in BOLNA_API_KEY
npm run dev # or: vercel devThe MCP endpoint is served at http://localhost:3000/api/mcp.
Deploy
Deployed under the Bolna AI Vercel team, aliased to mcp.bolna.ai:
vercel deploy --prod --scope bolna-aiSet BOLNA_API_KEY as a Vercel environment variable only if you want a
server-wide fallback for testing; production callers should supply their own
key via the Authorization header.
Test with MCP Inspector
npx @modelcontextprotocol/inspectorIn the Inspector UI, connect with:
Transport: Streamable HTTP
URL:
http://localhost:3000/api/mcp(or your deployed URL +/api/mcp)Header:
Authorization: Bearer <your Bolna API key>(optional locally ifBOLNA_API_KEYis set in.env)
Then use the Inspector's "List Tools" and "Call Tool" panels to exercise each of the 13 core tools with valid and invalid input.
Privacy Policy
See mcp.bolna.ai/privacy.
License
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server exposing the Backtest360 engine API as tools for AI agents.
Remote MCP server for supportsheep: run AI interviews and manage support content for your blog.
Remote MCP server to read and manage your Atako AI agents, messages, files, and integrations.
Human-input bridge for AI agents with voice-first answer links, MCP tools, and HTTP APIs.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for BubblyPhone that lets AI assistants make real phone calls, manage AI voice agents, buy phone numbers in 30+ countries, and track billing. Supports 20 tools for full telephony control.202 npm1MIT

VoIPbin MCP Serverofficial
AlicenseBqualityCmaintenanceAn MCP server that enables AI assistants to interact with the VoIPbin CPaaS platform, exposing tools for managing calls, flows, messaging, conferencing, and more.521MIT- AlicenseCqualityDmaintenanceMCP server that exposes the complete Libredesk REST API (54 endpoints) as tools, enabling natural language management of conversations, contacts, agents, teams, and more for the open-source customer support desk.543 npm4MIT
- FlicenseAqualityCmaintenanceAn MCP server that wraps the UTEL IP-telephony REST API as MCP tools, enabling LLM agents to make authenticated HTTP requests to the UTEL API via a simple tool interface.11-