Skip to content

Connect Bombora to Claude: Define Intent Signals & Webhook Events

Learn how to connect Bombora to Claude using Truto's managed MCP server. Automate intent signal definitions, ABM account lists, and webhook event orchestration.

Nachi Raman Nachi Raman · · 10 min read
Connect Bombora to Claude: Define Intent Signals & Webhook Events

If your go-to-market team needs to connect Bombora to Claude to automate B2B intent signal tracking, manage account-based marketing (ABM) lists, or orchestrate webhook data deliveries, you need a Model Context Protocol (MCP) server. This server acts as the translation layer between Claude's LLM function calls and Bombora's REST API. You can either build and maintain this integration infrastructure yourself, or use a managed integration platform like Truto to dynamically generate a secure, authenticated MCP server URL.

This guide focuses on Claude. If your team uses ChatGPT, check out our guide on connecting Bombora to ChatGPT or explore our broader architectural overview on connecting Bombora to AI Agents.

Giving a Large Language Model (LLM) read and write access to a specialized data engine like Bombora is an engineering challenge. You have to handle OAuth 2.0 token lifecycles, map massive JSON schemas to MCP tool definitions, and deal with Bombora's domain-specific data constraints. Every time Bombora updates an endpoint or changes a taxonomy reference, you have to update your server code, redeploy, and test the integration.

This guide breaks down exactly how to use Truto to generate a secure, managed MCP server for Bombora, connect it natively to Claude Desktop, and execute complex intent data workflows using natural language.

The Engineering Reality of the Bombora API

A custom MCP server is a self-hosted integration layer. While the open MCP standard provides a predictable way for models to discover tools, the reality of implementing it against specialized B2B intent APIs is painful. Bombora is built to process massive volumes of firmographic, demographic, and behavioral data. Its API reflects that scale and complexity.

If you decide to build a custom Bombora MCP server from scratch, here are the specific integration challenges you will face:

Destructive Dependency Chains (HTTP 409 Conflicts) Bombora enforces strict referential integrity across its resources. For example, if you attempt to delete a webhook destination via the API, the request will immediately fail with an HTTP 409 Conflict if that destination has active event subscriptions. You must first query the destination, list its events, issue a bulk update to disable them, and then delete the destination. Similarly, you cannot delete an Account List if it is acting as a parent to a derived list. An LLM has no inherent context on these downstream dependencies. Your MCP server must expose strictly defined tools that guide the model to sequence its operations correctly.

Payload Limits and Page Tokens Fetching intent data via Bombora's API is not a simple paginated CRUD list. Endpoints like the data retrieval route cap response body sizes at a hard 10MB limit. If a result set exceeds this, the API returns fewer results than your requested limit, forcing you to continuously pass a pageToken generated from an initial POST request. An unmanaged AI agent will easily get trapped in infinite loops or hallucinate query parameters if the schema is not explicitly instructing it to return the pageToken exactly as received.

Rate Limits and 429 Handling Bombora, like most enterprise data providers, strictly enforces API rate limits. When a caller exceeds these limits, the API returns an HTTP 429 Too Many Requests status. It is a critical architectural point that Truto does not retry, throttle, or apply backoff on rate limit errors automatically. When Bombora returns a 429, Truto passes that error directly to the caller. However, Truto normalizes the upstream rate limit information into standardized IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). The calling AI agent or application framework is entirely responsible for reading these headers and executing the appropriate retry or backoff logic. Do not build an MCP client assuming the proxy will absorb these errors.

Generating the Bombora MCP Server

Truto derives MCP tools dynamically from the underlying integration's documented API resources. Because these definitions are documentation-driven, you never have to hand-code JSON schemas for Claude.

Every MCP server in Truto is scoped to a single integrated account (a specific authenticated connection to a Bombora instance). You can generate the server URL through the Truto UI or programmatically via the API.

Method 1: Via the Truto UI

If you are setting up Claude Desktop for internal use, the UI is the fastest path:

  1. Log into your Truto dashboard and navigate to your Integrated Accounts.
  2. Select your connected Bombora account.
  3. Click the MCP Servers tab.
  4. Click Create MCP Server.
  5. Configure the server (e.g., name it "Bombora Intent Prod", select permitted methods like read or write).
  6. Copy the generated MCP Server URL (e.g., https://api.truto.one/mcp/a1b2c3d4...).

Method 2: Via the Truto API

If you are dynamically provisioning Claude-powered workspaces for your users, you should generate the MCP server programmatically.

Make a POST request to /integrated-account/:id/mcp. You can pass a configuration object to restrict the server to specific HTTP methods or tags.

curl -X POST https://api.truto.one/integrated-account/{integrated_account_id}/mcp \
  -H "Authorization: Bearer YOUR_TRUTO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Bombora Intent Signals",
    "config": {
      "methods": ["read", "write", "custom"]
    }
  }'

The API validates the configuration, generates a secure cryptographic token, and returns the URL. This URL encapsulates both the routing and the authentication for the specific Bombora tenant.

{
  "id": "mcp_srv_9x8y7z6",
  "name": "Bombora Intent Signals",
  "config": {
    "methods": ["read", "write", "custom"]
  },
  "expires_at": null,
  "url": "https://api.truto.one/mcp/a1b2c3d4e5f6g7h8i9j0"
}

Connecting the MCP Server to Claude

Once you have the Truto MCP URL, you need to register it with Claude. Because the URL contains the cryptographic token, no additional headers are required (unless you explicitly enabled require_api_token_auth).

Method A: Via the Claude UI

If you are using a Claude plan that supports UI-based custom connectors (e.g., Team or Enterprise):

  1. Open Claude and navigate to Settings.
  2. Click on Integrations (or Connectors depending on your specific Claude tier).
  3. Select Add MCP Server or Add custom connector.
  4. Paste the Truto MCP URL (https://api.truto.one/mcp/...) and click Add.

Claude will immediately ping the endpoint, execute the MCP handshake, and discover the available Bombora tools.

Method B: Via the Claude Desktop Config File

For developers using the standard Claude Desktop application, you configure the server via the claude_desktop_config.json file. Truto provides an NPM package (@modelcontextprotocol/server-sse) that translates Claude's standard local stdio communication into Server-Sent Events (SSE) over HTTP.

Open your Claude Desktop configuration file (usually located at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS or %APPDATA%\Claude\claude_desktop_config.json on Windows) and add the following JSON:

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

Restart Claude Desktop. The application will initialize the SSE connection, fetch the Bombora schemas, and the tools will appear as an available attachment in your chat interface.

Hero Tools for Bombora Intent Workflows

Truto automatically generates a comprehensive suite of tools based on Bombora's API documentation. Here are 6 high-leverage hero tools that transform Claude from a simple chatbot into a B2B intent orchestration engine.

1. get_single_bombora_signal_definition_by_id

Before modifying intent signals, Claude needs to inspect the current state of a signal definition. This tool returns the full definition, including its ID, status, topic count, and the exact metadata configuration applied to it.

Contextual Usage: Use this when you need to audit an existing signal to understand why certain accounts are scoring high, or to verify topics before running a bulk update.

"Fetch the configuration for the Bombora signal definition ID sig_88492. I need to see the exact topic count and metadata description before we add new competitor keywords."

2. create_a_bombora_signal_definition

This is the core operational tool for defining what intent looks like. It accepts a payload of product data points - such as domains, keywords, and URLs - and creates a new signal definition in Bombora.

Contextual Usage: Claude can take a natural language description of a new product launch or competitor and translate it into the strict metadata schema Bombora requires to start tracking intent.

"Create a new Bombora signal definition for our upcoming AI product launch. Target the keywords 'machine learning orchestration', 'MLOps', and 'LLM routing'. Name the signal 'Q4 AI Product Intent'."

3. list_all_bombora_account_lists

Account Lists (ABM lists) are the foundation of targeting in Bombora. This tool retrieves paginated lists of all account lists, returning their IDs, names, pending update status, and modification dates.

Contextual Usage: Before Claude can extract intent data for a specific set of target accounts, it needs to find the correct list ID from the environment.

"List all available Bombora account lists. Find the one named 'Tier 1 Enterprise Retail Targets' and give me its ID and last modified date."

4. create_a_bombora_destination

Bombora relies heavily on webhook destinations to push intent data events to your infrastructure. This tool creates a new destination endpoint that can later be subscribed to specific event types.

Contextual Usage: When setting up a new intent ingestion pipeline in your CRM or data warehouse, Claude can provision the required Bombora webhook target.

"Create a new Bombora webhook destination called 'Snowflake Intake Prod'. Point the address to https://ingest.example.com/bombora/webhook and set a description indicating it handles enterprise intent events."

5. bombora_events_bulk_update

Creating a destination is only step one. To actually receive data, you must subscribe that destination to events. This tool replaces the event subscription document for a destination, allowing you to enable or disable specific event types.

Contextual Usage: Use this tool immediately after creating a destination, or when an engineering team needs to temporarily halt a specific data feed to debug a downstream issue.

"Update the event subscriptions for destination ID dest_7473. Enable the 'intent_surge_detected' event type and ensure all other event types are disabled."

6. list_all_bombora_data

This tool retrieves the actual paginated intent data from Bombora. It requires a pageToken obtained from a corresponding POST request, and returns objects containing the domain, score, and score label for organizations showing intent.

Contextual Usage: This is the analytical powerhouse tool. Claude uses it to fetch raw intent scores and summarize which companies are surging on your defined topics.

"Using the page token pt_9948abc, fetch the next batch of Bombora intent data. Filter the response and summarize the domains that have a score above 85, categorized by their score label."

For the complete inventory of available Bombora tools, including firmographic references, demographic filters, and digital audience creation, view the Bombora integration page.

Workflows in Action

When you connect Bombora to Claude via an MCP server, you move beyond simple API wrappers. Claude can orchestrate multi-step data engineering and marketing operations autonomously.

Workflow 1: Configure a New Competitor Intent Signal and Webhook Delivery

Marketing ops often needs to spin up tracking for a new competitor and pipe that data directly to a Slack alert system or CRM via webhooks. Claude can handle this end-to-end.

"We have a new competitor, AcmeCorp. Create a Bombora signal definition tracking their domain 'acmecorp.com' and the keywords 'Acme migration' and 'Acme pricing'. Once that is created, provision a new webhook destination pointing to https://api.ourcrm.com/webhooks/intent and subscribe it to surge events."

Execution Steps:

  1. Claude calls create_a_bombora_signal_definition, passing the metadata with the domain and keywords, and receives the new signalDefinitionId.
  2. Claude calls create_a_bombora_destination with the provided URL, returning a destinationId.
  3. Claude calls bombora_events_bulk_update using the new destinationId, enabling the intent surge event type.
sequenceDiagram
    participant User
    participant Claude as Claude
    participant MCP as Truto MCP Server
    participant Bombora as Bombora API

    User->>Claude: "Create signal for AcmeCorp and setup webhook..."
    Claude->>MCP: Call create_a_bombora_signal_definition
    MCP->>Bombora: POST /v2/signal-definitions
    Bombora-->>MCP: Returns signalDefinitionId
    MCP-->>Claude: Tool result (Success)
    
    Claude->>MCP: Call create_a_bombora_destination
    MCP->>Bombora: POST /v2/destinations
    Bombora-->>MCP: Returns destinationId
    MCP-->>Claude: Tool result (Success)
    
    Claude->>MCP: Call bombora_events_bulk_update
    MCP->>Bombora: PUT /v2/destinations/{id}/events
    Bombora-->>MCP: 200 OK (Events enabled)
    MCP-->>Claude: Tool result (Success)
    Claude->>User: "Signal created and webhook destination subscribed successfully."

Result: The user gets a confirmation that the intent signal is actively tracking the competitor and the data pipeline is fully provisioned, eliminating manual setup in the Bombora developer portal.

Workflow 2: Audit ABM Lists and Extract High-Intent Target Accounts

Sales teams need to know which accounts on their named target lists are currently researching relevant topics. Claude can locate the list, generate the request, and analyze the results.

"Find the Bombora account list named 'Q3 Healthcare Targets'. Once you have the ID, initiate a data fetch for it and retrieve the first page of intent data. Tell me which top 5 domains have the highest intent scores."

Execution Steps:

  1. Claude calls list_all_bombora_account_lists to search the directory and extracts the ID for 'Q3 Healthcare Targets'.
  2. Claude calls create_a_bombora_datum (the POST counterpart for data retrieval), passing the list ID to generate a pageToken.
  3. Claude calls list_all_bombora_data using the pageToken to fetch the first batch of results.
  4. Claude analyzes the JSON payload, sorts by score, and formats the response.
flowchart TD
    A["User Prompt<br>Analyze Q3 Healthcare Targets"] --> B["list_all_bombora_account_lists<br>Find list ID"]
    B --> C["create_a_bombora_datum<br>POST for pageToken"]
    C --> D["list_all_bombora_data<br>Fetch intent payload"]
    D --> E["Claude sorts and filters scores"]
    E --> F["Final Output<br>Top 5 domains by intent"]

Result: The sales rep receives an immediate, actionable list of the top 5 surging healthcare accounts without having to log into a dashboard or run a manual CSV export.

Security and Access Control

Giving an AI agent access to enterprise intent data and webhook infrastructure requires strict guardrails. Truto provides four mechanisms to secure your Bombora MCP server:

  • Method Filtering: Configure config.methods: ["read"] to allow Claude to query intent scores and account lists, but prevent it from creating or deleting signal definitions and webhooks.
  • Tag Filtering: Use config.tags to limit the server's tools to specific Bombora resources (e.g., exposing only destinations and events for a DevOps agent, while hiding firmographic data).
  • Expiration (TTL): Set an expires_at ISO datetime when generating the server. Once the timestamp passes, the server URL automatically expires and all KV entries are purged.
  • Require API Token Auth: Enable require_api_token_auth: true. This disables public token-only access, forcing the MCP client to also pass a valid Truto API token in the Authorization header, adding a critical second layer of enterprise authentication.

Moving from Manual Plumbing to Intent Orchestration

Connecting Bombora to Claude via a managed MCP server removes the friction of API lifecycle management. You don't have to worry about mapping Bombora's 10MB payload restrictions, handling strict 409 dependency rules, or maintaining OAuth 2.0 flows.

By leveraging Truto's auto-generated tools, your engineering team can stop building point-to-point API wrappers and start focusing on what matters: turning raw B2B intent signals into autonomous sales and marketing workflows.

FAQ

How do I connect Bombora to Claude?
You connect Bombora to Claude by generating a Model Context Protocol (MCP) server URL via Truto. You then add this URL to Claude Desktop's custom connectors or config file, granting the LLM direct access to Bombora's APIs.
Does Truto automatically handle Bombora API rate limits?
No. Truto passes HTTP 429 rate limit errors directly to the caller. Truto normalizes the upstream rate limit information into standard IETF headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset), and the calling AI agent is responsible for implementing retry and backoff logic.
Can Claude configure Bombora webhook destinations?
Yes. Using the MCP server, Claude can call tools like create_a_bombora_destination and bombora_events_bulk_update to dynamically provision webhook endpoints and subscribe to intent events.
How do I secure my Bombora MCP server?
Truto MCP servers can be secured using method filtering (e.g., read-only), tag filtering, expirations (expires_at), and an optional require_api_token_auth flag that forces the client to pass a valid Truto API token.

More from our Blog