Skip to content
English - United Kingdom
  • There are no suggestions because the search field is empty.

The BTT MCP Stack

Everything you need to know about how Claude connects to BTT's data and tools.

What is the MCP stack?

MCP (Model Context Protocol) is how Claude talks to external systems. BTT has built a layer of MCPs hosted on Ops Hub that give Claude direct access to client data, SEO tools, and content management without AMs manually exporting spreadsheets or clicking through dashboards.

Ops Hub-hosted MCPs

All hosted MCPs live at ops.bristechtonic.co.uk/api/*-mcp. They use Streamable HTTP transport, stateless POST, and ?token=VALUE URL auth. Tokens are stored in the BTT 1Password vault.

The Omni MCP aggregator

Adding 8 separate MCPs to Claude.ai Chat is impractical (one URL at a time in the UI). The aggregator solves this:

  • /api/btt-omni-mcp fronts all 8 Ops Hub-hosted MCPs via a single POST URL.
  • On tools/list: fans out to each backing MCP in parallel, merges their tool lists. Cached in-process for 5 minutes.
  • On tools/call: routes by tool name to the right backing MCP and proxies the call.
  • HubSpot is excluded -- it is a vendor MCP with its own OAuth flow that cannot be wrapped server-side.
  • Backing MCP tokens are server-side only. The Omni token is the only credential Chat users see.

Third-party MCPs

Vendor-built MCPs the team adds directly to their Claude setup. Each AM authenticates with their own account on first use.

Claude.ai Chat vs Claude Code

  • Claude.ai Chat users connect one URL: the Omni MCP. All 8 BTT tools are available through it. HubSpot requires a separate one-time OAuth.
  • Claude Code (CLI/IDE) users add each MCP individually for more granular debugging and faster direct calls. The /team/mcp-setup page bakes tokens into copy-paste commands.

What is intentionally NOT in any MCP

  • Xero (finances, invoices, payroll) -- web UI only
  • HR data (PIPs, contracts, confidential staff records) -- web UI only
  • Client customer, order, or PII data -- UK GDPR; platform MCPs are scope-constrained
  • Aircall call recordings
  • Internal Slack DMs

GA4 and GSC resolution chain

When an MCP call arrives for a client's GA4 or GSC data, the resolution order is:

  1. Ops Hub mapping: clients.ga4_data_account_id / clients.gsc_data_account_id
  2. Strict-domain fallback: match the client domain against connected reporting accounts in the google_data_accounts table
  3. Structured not_configured response if neither resolves

Reporting tokens are encrypted at rest via lib/crypto.js (AES-256-GCM).