> ## Documentation Index
> Fetch the complete documentation index at: https://boundbot.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Connected MCPs

> Connect external MCP servers to BoundBot so your bot can use live tools and data through the Model Context Protocol.

export const BrowserWrapper = ({src, alt, title, description, height = '280px', caption, imgStyle = {}, children, imagePadding = '0px'}) => {
  const legacyDocsImagePrefix = '/images/';
  const productionDocsImagePrefix = '/docs/images';
  const rawSrc = typeof src === 'string' ? src : src && (src.src || src.default) || '';
  const imageSrc = rawSrc.startsWith(legacyDocsImagePrefix) ? `${productionDocsImagePrefix}/${rawSrc.slice(legacyDocsImagePrefix.length)}` : rawSrc;
  return <Frame caption={caption || alt || title} width="100%">
      <div style={{
    border: '1px solid #e2e8f0',
    borderRadius: '12px',
    overflow: 'hidden',
    boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)',
    width: '100%'
  }}>
        <div style={{
    backgroundColor: '#f8fafc',
    padding: '10px 15px',
    borderBottom: '1px solid #e2e8f0',
    display: 'flex',
    gap: '6px'
  }}>
          <div style={{
    width: '10px',
    height: '10px',
    borderRadius: '50%',
    backgroundColor: '#ff5f56'
  }} />
          <div style={{
    width: '10px',
    height: '10px',
    borderRadius: '50%',
    backgroundColor: '#ffbd2e'
  }} />
          <div style={{
    width: '10px',
    height: '10px',
    borderRadius: '50%',
    backgroundColor: '#27c93f'
  }} />
        </div>
        <div style={{
    overflow: 'hidden',
    background: '#ffffff',
    width: '100%',
    padding: imagePadding
  }}>
          {src ? <img src={imageSrc} alt={alt || ''} data-docs-screenshot style={{
    ...imgStyle,
    width: '100%',
    minWidth: '100%',
    height: 'auto',
    display: 'block',
    borderRadius: '0px'
  }} /> : children ? children : null}
        </div>
      </div>
    </Frame>;
};

<a href="https://www.boundbot.com/dashboard/knowledge/connected-mcps" target="_blank" rel="noopener noreferrer">Connected MCPs</a> let BoundBot call external tool servers through the Model Context Protocol. This is different from files or FAQs because the bot can use live tools, not just read stored content.

<BrowserWrapper src="../images/mcp-enable.png" alt="Connected MCPs dashboard with connect dialog, test state, and management table." />

## Common use cases

MCPs shine when the bot needs **live data** or **external actions** instead of static knowledge:

* **Calendar and booking** — Check availability and create events (e.g. Calendly-style tools). The bot can say “I have Tuesday at 2 p.m. free” and book it.
* **CRM and lead capture** — Look up or create contacts, deals, and activities in your CRM so conversations sync with sales pipelines.
* **Databases and APIs** — Query internal APIs, inventory, or config so the bot answers with current data (e.g. “Is item X in stock?”).
* **Notifications and workflows** — Trigger alerts, tickets, or downstream workflows (Slack, email, help desk) from the conversation.

Use **FAQs**, **Files**, **Websites**, or **Products** when the bot only needs reference content; use **Connected MCPs** when it must call tools or fetch live data.

## Before you connect an MCP

You need:

* an MCP server URL
* the correct transport type
* an optional API key or bearer token if the server requires one

In the current app, supported transports are:

* `SSE`
* `Streamable HTTP`

## Choose the right transport

<Tabs sync={false}>
  <Tab title="SSE" icon="waypoints">
    Use `SSE` when the provider only exposes server-sent events or you are matching an older MCP deployment that has not moved to the newer HTTP transport.
  </Tab>

  <Tab title="Streamable HTTP" icon="network">
    Use `Streamable HTTP` when the server supports the newer HTTP transport. It is usually easier to run through modern proxies and shared infrastructure.
  </Tab>
</Tabs>

<Note>
  MCP connections are plan-gated. If your current tier does not support MCP integrations, BoundBot opens the upgrade flow before the connect dialog.
</Note>

## Connect a server

<Steps>
  <Step title="Open Connected MCPs">
    Go to <a href="https://www.boundbot.com/dashboard/knowledge/knowledge-base" target="_blank" rel="noopener noreferrer"><b>Knowledge</b></a> -> <a href="https://www.boundbot.com/dashboard/knowledge/connected-mcps" target="_blank" rel="noopener noreferrer"><b>Connected MCPs</b></a>.
  </Step>

  <Step title="Enter connection details">
    Click **Connect MCP**, then add a name, optional description, transport, server URL, and optional API key.
  </Step>

  <Step title="Test the connection">
    Use **Test Connection** before saving. The current app reports whether the server responded, how many tools it found, and the measured latency.
  </Step>

  <Step title="Save the MCP">
    Click **Connect** to add the MCP to the workspace.
  </Step>
</Steps>

<BrowserWrapper src="../images/mcp-create.png" alt="Connect MCP modal: name, description, transport, server URL, and optional API key with Test Connection." />

<Tip>
  **Testing latency:** Use **Test Connection** after every change to URL or transport. If latency is high or unstable, the bot may feel slow when calling tools. Prefer MCP servers that are geographically close to BoundBot or run on low-latency infrastructure.
</Tip>

## Manage existing MCPs

The MCP list supports:

* search by name, description, or URL
* enable or disable with a switch
* retest an existing connection
* edit connection details
* disconnect the MCP

If you disconnect an MCP, the bot loses access to the tools from that server immediately.

## If the test fails

<AccordionGroup>
  <Accordion title="Authentication error" icon="key">
    Recheck the API key or bearer token, then confirm the server expects that credential in the format you entered.
  </Accordion>

  <Accordion title="Transport mismatch" icon="cable">
    Make sure the selected transport matches the server. A working URL still fails if BoundBot expects `SSE` and the server only supports `Streamable HTTP`, or the other way around.
  </Accordion>

  <Accordion title="Server unreachable" icon="shield-alert">
    Confirm the URL is public, reachable from the BoundBot environment, and not blocked by IP allowlists, reverse proxies, or expired TLS configuration.
  </Accordion>
</AccordionGroup>

## MCPs vs knowledge sources

Use **Connected MCPs** when the bot needs to run tools, fetch live data, or trigger actions in external systems.

Use **FAQs**, **Files**, **Websites**, or **Products** when the bot only needs reference content.

## Related pages

<CardGroup cols={2}>
  <Card title="Knowledge base" icon="book-open-text" href="/guides/knowledge-base">
    Compare MCPs with the rest of BoundBot knowledge sources.
  </Card>

  <Card title="Integrations" icon="plug" href="/developers/integrations">
    Review the broader integration surface across the app.
  </Card>

  <Card title="Actions" icon="zap" href="/automation/actions">
    Combine external tools with automation flows.
  </Card>

  <Card title="Plans and limits" icon="badge-dollar-sign" href="/reference/plans-and-limits">
    Confirm which plans include MCP integrations.
  </Card>
</CardGroup>
