Skip to content

Connect Bland to Claude: Sync Voice Workflows and Agent Memories

Learn how to connect Bland to claude using Truto. Step-by-step guide to tool calling, API quirks, and autonomous workflows.

Sidharth Verma Sidharth Verma · · 10 min read

If you need to connect Bland to Claude to automate outbound calling campaigns, reprogram inbound voice agents on the fly, or sync conversational memory across your organization, you need a Model Context Protocol (MCP) server. This infrastructure layer translates Claude's natural language tool calls into the structured REST API requests that Bland requires. If your team uses ChatGPT, check out our guide on connecting Bland to ChatGPT or explore our broader architectural overview on connecting Bland to AI Agents.

Giving a Large Language Model (LLM) read and write access to a telephony and voice synthesis engine like Bland is a significant engineering undertaking. You are not just dealing with static database records - you are managing active call states, asynchronous pathway generation, and ephemeral WebSocket streams for live audio. Building a custom MCP server means owning the lifecycle of those tokens, maintaining massive JSON schemas for conversational pathways, and handling strict rate limits. Every time Bland updates an endpoint or introduces a new synthesis model, you have to patch, test, and redeploy your custom integration.

This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Bland, connect it natively to Claude Desktop or enterprise AI agents, and execute complex voice orchestration workflows using natural language.

The Engineering Reality of the Bland API

A custom MCP server is a self-hosted integration layer that exposes specific API endpoints as tools an LLM can invoke. While the open MCP standard provides a predictable mechanism for models to discover and execute these tools, implementing it against a voice infrastructure provider like Bland exposes several domain-specific integration hurdles.

If you decide to build a custom MCP server for Bland from scratch, here are the architectural challenges you will face:

Asynchronous State and Polling Mechanics Unlike standard CRUD operations, many of Bland's highest-leverage endpoints operate asynchronously. When you instruct an LLM to generate a new conversational pathway from a prompt, the API does not return the pathway. It returns a job ID. Your MCP server must then expose a separate status-checking tool, and you have to explicitly prompt the LLM to poll that endpoint until the ready flag is true. If you do not construct the schema to explicitly enforce this polling loop, Claude will hallucinate the pathway data and fail silently.

Ephemeral Tokens and Streaming Architecture Voice APIs rely heavily on real-time data streams. If your AI agent needs to analyze a live call or fetch a post-transfer transcript stream, it cannot just hit a REST endpoint. It must call endpoints that mint short-lived WebSocket URLs or JWTs that expire in exactly 5 minutes. Passing these raw, expiring credentials back to an LLM context window is dangerous and error-prone. You have to build state management into your MCP server to handle the lifecycle of these tokens before handing the final data payload back to the model.

Strict Rate Limiting and Backoff Delegation Bland enforces strict rate limits, particularly on outbound call dispatching and voice cloning endpoints. It is a critical architectural requirement to handle these limits correctly. Truto does not retry, throttle, or apply automatic backoff on rate limit errors. Instead, when the upstream Bland API returns an HTTP 429 Too Many Requests, Truto passes that error directly to the caller. Truto normalizes the upstream rate limit information into standardized HTTP headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) per the IETF specification. This design decision ensures that the calling client - in this case, the Claude LLM or your agent orchestrator - is responsible for implementing the retry and backoff logic, rather than masking upstream infrastructure pressure.

sequenceDiagram
    participant Claude as Claude Desktop
    participant Truto as Truto MCP
    participant Bland as Bland API
    Claude->>Truto: Call bland_voices_clone
    Truto->>Bland: POST /v1/voices
    Bland-->>Truto: 429 Too Many Requests
    Truto-->>Claude: Error 429 (Pass-through) + ratelimit-reset
    Note over Claude: LLM observes error <br> and initiates backoff
    Claude->>Truto: Retry bland_voices_clone
    Truto->>Bland: POST /v1/voices
    Bland-->>Truto: 200 OK
    Truto-->>Claude: voice_id returned

Instead of building this infrastructure from scratch, you can use Truto to dynamically generate a fully documented, paginated, and authenticated MCP server derived directly from Bland's API specifications.

How to Generate a Bland MCP Server with Truto

Truto creates MCP servers dynamically based on your integrated account's configuration. The server URL contains a cryptographic token that securely encodes the account credentials, the specific tool filters, and the server expiration. This means the URL itself acts as a fully self-contained connection point for Claude.

You can generate this server either through the Truto UI or programmatically via the API.

Method 1: Via the Truto UI

If you are an administrator provisioning access for your team's Claude Desktop instances, the UI is the fastest route:

  1. Navigate to the Integrated Accounts page in your Truto dashboard and select your connected Bland instance.
  2. Click the MCP Servers tab.
  3. Click Create MCP Server.
  4. Configure the server name, tag filters, or allowed HTTP methods (e.g., restricting the server to read operations to prevent Claude from accidentally dispatching live calls).
  5. Copy the generated MCP server URL (e.g., https://api.truto.one/mcp/a1b2c3d4...).

Method 2: Via the Truto API

For platform engineers building multi-tenant AI products, you can dynamically generate MCP servers for your users by hitting the Truto REST API.

Make a POST request to /integrated-account/:id/mcp with your desired configuration:

curl -X POST https://api.truto.one/integrated-account/YOUR_ACCOUNT_ID/mcp \
  -H "Authorization: Bearer YOUR_TRUTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Bland Auto-Dialer Agent",
    "config": {
      "methods": ["read", "write", "custom"]
    },
    "expires_at": "2026-12-31T23:59:59Z"
  }'

The API will securely hash the token, store the configuration in Cloudflare KV for low-latency lookups, and return the database record along with your ready-to-use URL.

Connecting the MCP Server to Claude

Once you have the Truto MCP server URL, you need to register it with your LLM client. Truto's servers use JSON-RPC 2.0 over HTTP POST, which is compatible with the standard Server-Sent Events (SSE) transport pattern used by major LLM clients.

Method A: Via the Claude UI (or ChatGPT)

Anthropic and OpenAI both support remote MCP server URLs directly in their enterprise and developer interfaces.

For Claude:

  1. Open Claude Settings -> Integrations.
  2. Click Add MCP Server.
  3. Paste the Truto MCP URL generated in the previous step.
  4. Click Add. Claude will automatically execute the initialize handshake and load the available Bland tools.

For ChatGPT:

  1. Navigate to Settings -> Apps -> Advanced settings.
  2. Toggle on Developer mode.
  3. Under MCP servers / Custom connectors, click to add a new server.
  4. Provide a label (e.g., "Bland AI Voice") and paste the Truto MCP URL.

Method B: Via Manual Configuration File

If you are running Claude Desktop locally or orchestrating a custom agent framework (like LangGraph or CrewAI), you can connect via your claude_desktop_config.json file. Because Truto's server handles the translation natively, you use the standard @modelcontextprotocol/server-sse package to proxy the connection.

{
  "mcpServers": {
    "bland-voice-ops": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-sse",
        "https://api.truto.one/mcp/YOUR_SECURE_TOKEN"
      ]
    }
  }
}

Save the file and restart Claude Desktop. The model will immediately parse the integration documentation and make the tools available in your chat context.

Security and Access Control

Giving an LLM unconstrained access to a voice platform is dangerous. If a model hallucinates, it could accidentally purchase dozens of phone numbers, dispatch thousands of outbound calls, or delete production conversational pathways. Truto provides four distinct mechanisms to lock down your MCP server:

  • Method Filtering: Limit the LLM's capabilities at the HTTP level. By passing config: { methods: ["read"] } during creation, the server will strictly reject any create, update, or delete tools. Claude can analyze call transcripts but cannot initiate new calls.
  • Tag Filtering: Restrict access by business domain. If you only want Claude to access knowledge base endpoints and not billing endpoints, you can pass config: { tags: ["knowledge_bases", "pathways"] }.
  • Additional Authentication (require_api_token_auth): By default, possessing the Truto MCP URL grants access to the server. If your server URL might be exposed in logs, set require_api_token_auth: true. This forces the client to pass a valid Truto API token in the Authorization header, adding a strict secondary identity check.
  • Time-to-Live (expires_at): For temporary workflows - like giving an AI agent 24 hours to audit a month of call recordings - you can set a specific ISO datetime for server expiration. Truto will schedule an automated cleanup alarm that completely destroys the token infrastructure when time is up.

Hero Tools for Voice Automation

Truto dynamically generates schemas for every documented Bland endpoint. Here are the highest-leverage tools available to your AI agent and how to prompt Claude to use them.

1. Dispatching Outbound Calls (bland_calls_send_simple_pathway)

This tool dials a specified phone number and guides the conversation using a predefined conversational pathway. It is the primary mechanism for initiating outbound AI phone agents.

Usage Note: The phone number should be formatted in E.164 (e.g., +14155552671). If no country code is specified, it defaults to +1.

"Claude, initiate an outbound call to +15550198372 using the 'Overdue Invoice Collection' pathway ID. Confirm the call status and provide the returned call_id."

2. Post-Call Intelligence Extraction (bland_calls_analyze)

This tool uses AI to analyze a completed call against a specific goal and a set of custom questions. It allows your agent to extract structured data (like boolean values or specific quotes) from unstructured voice conversations.

Usage Note: You must provide an array of questions, each defining the question text and the expected data type. If the answer is not present in the call, it defaults to null.

"Take call_id 'c8a2b1-992a' and analyze it. The goal is 'Determine if the prospect wants to schedule a demo'. Ask two questions: 'Did they ask for pricing?' (boolean) and 'What is their current vendor?' (string)."

3. Reprogramming Inbound Agents (update_a_bland_number_by_id)

This tool allows Claude to dynamically alter the behavior of an active inbound phone number by updating its core prompt, webhook configuration, or voice settings.

Usage Note: This is incredibly powerful for dynamic routing. Based on external events (like a major system outage), Claude can rewrite the prompt on your support line to acknowledge the outage before routing the caller.

"Update our main support number (+18005559999). Change the first_sentence to 'Welcome to Acme Corp. We are currently aware of the database outage and are working on a fix.' and update the prompt to handle frustrated customers with high empathy."

4. Cross-Channel Context Retrieval (bland_memory_get_context)

Bland maintains memory across calls and SMS. This tool fetches the rolling summary, extracted entities, and open action items for a specific contact and persona pair.

Usage Note: Excellent for preparing human agents or feeding context into external CRMs. It requires the contact ID and either the associated persona ID or agent number.

"Retrieve the memory context for contact ID 'usr_99281' interacting with our 'Sales Engineer' persona. I need to see their recent messages, the rolling summary, and any open action items we haven't addressed."

5. Managing Voice Clones (bland_voices_clone)

This tool allows Claude to orchestrate the creation of custom voices by submitting audio samples to the BTTS V2 or V3 synthesis engines.

Usage Note: Ensure your agent understands the strict audio constraints (max 10 seconds, max 10MB) before attempting to invoke this tool.

"Take the processed audio file for 'CEO Welcome Speech' and clone it into a new voice named 'Executive Default'. Use the BTTS V3 engine and set the gender to male."

For the complete inventory of available Bland endpoints, including detailed JSON Schemas for dynamic voice tuning, pathway management, and compliance auditing, see the Truto Bland Integration Reference.

Workflows in Action

MCP servers transform Claude from a passive text generator into an active orchestration engine. Here is what happens when you combine the hero tools above into complex workflows.

Workflow 1: The Outbound Collection Escalation

Customer success teams often need to chase down failed payments. Instead of doing this manually, an AI agent can orchestrate the entire process based on CRM triggers.

"Review the failed payment alert for Acme Corp. Trigger an outbound call to their billing contact at +15558881234 using our 'Billing Recovery' pathway. Once the call completes, analyze the transcript. If they promised to pay today, log a note. If they refused, compile the transcript and escalate to the finance team."

  1. bland_calls_send_simple_pathway: Claude maps the user's phone number and the known 'Billing Recovery' pathway ID to dispatch the call, receiving a call_id in response.
  2. Wait/Poll: Claude waits for the call to finish (often handled by a webhook returning state to the agent framework, or Claude polling a call status endpoint).
  3. bland_calls_analyze: Claude submits the call_id to the analysis endpoint with the goal: "Determine payment intent" and the question "Will they pay today? (boolean)".
  4. Decision Branch: Based on the returned JSON analysis, Claude either formats a success note or drafts an escalation email containing the relevant transcript excerpts.

Workflow 2: Dynamic VIP Support Routing

When a high-value client experiences a critical issue, their inbound support experience should reflect the urgency. Claude can use cross-channel memory to dynamically alter how the phone agent treats them.

"A severity-1 ticket just opened for GlobalTech. Pull their current memory context to see what they discussed on the phone yesterday. Then, update our dedicated VIP inbound number to explicitly mention their ticket number and bypass the standard triage menu."

  1. bland_contacts_find: Claude looks up GlobalTech's contact ID using their external ID or known phone number.
  2. bland_memory_get_context: Claude retrieves the cross-channel memory, noting that the client was already frustrated about a delayed feature yesterday.
  3. update_a_bland_number_by_id: Claude patches the VIP phone number settings. It rewrites the first_sentence to say, "Hello GlobalTech, we see your Sev-1 ticket regarding the database constraint is active. I am connecting you directly to a senior engineer." It strips out the standard triage instructions from the prompt field.
  4. Result: The next time the client calls, the voice agent is fully context-aware and routes them immediately, lowering frustration and accelerating resolution.

If you are serious about building agentic workflows, the bottleneck is no longer LLM reasoning - it is API execution. Writing custom integration layers for deeply complex domains like telephony, audio streaming, and asynchronous AI generation pipelines traps your engineering team in a perpetual cycle of maintenance. By deploying a managed MCP server, you offload the authentication, pagination normalization, and schema mapping to Truto, allowing your AI agents to focus entirely on orchestrating the perfect conversation.

More from our Blog