WB × The Multiplier / AI in the studio

Explainer

What an MCP Server Does for a Small-Business CRM (and When It Is Worth Building)

A fixed list of named tools, a key that can only read, and a log of every write. That is the whole trick, and most businesses should buy it rather than build it.

By Weston BeckwithUpdated 8 min read

A brass junction box with many plugged-in cables and teal indicator lights.
Illustration for WBX Creative

An MCP server gives an AI assistant a fixed menu of things it is allowed to do with your CRM, each with a name, a description written for the model, and a schema for its arguments, behind a key that decides whether it may write. The Model Context Protocol, which Anthropic published as an open standard in November 2024, defines the menu format so that any assistant that speaks it can use any server that offers it.

For a small business the question is not whether to have one but whether to build one. As of September 2026, HubSpot and Zoho ship official servers, Salesforce has one, and Zapier and Composio bridge most of the rest. Build your own when the data already lives in a database you own, or when the tools need to speak your vocabulary. Otherwise use the one you are already paying for.

The example below is the server on WBX Creative's own CRM, built on Supabase and running at /api/mcp: 26 tools, API-key authentication with scopes, and a log of every write.

What is an MCP server made of?

The protocol has three parts. A host is the application the person talks to: Claude, ChatGPT, or a code editor. It runs a client for each server it connects to. The server is the thing you build: a process or URL that advertises tools (actions), resources (data the model can read), and prompts (templates), over standard input and output locally or Streamable HTTP remotely.

Revisions are dated 2024-11-05 through 2026-07-28, which is current as of September 2026 and made the core stateless, removed the initialize handshake and protocol-level sessions, and added a mandatory server/discover. The authorization model for remote servers is OAuth 2.1 with PKCE. Claude, ChatGPT's developer mode (which confirms writes with the person), Cursor, VS Code with Copilot, Gemini CLI, and Copilot Studio all connect as of September 2026, and Claude.ai and Claude Desktop cap a tool result at about 150,000 characters.

The difference from a plain API is not technical. The WBX CRM already has a REST API with an OpenAPI document an agent can be pointed at. What MCP adds is a description of each tool written for a model rather than a developer. The search tool's:

Full-text search across customers, contacts, deals, tasks, projects, and invoices. Call this FIRST to resolve a fuzzy name ("the Henderson site", "that overdue invoice") to a numeric id before any get_/update_/complete_/delete_ tool.

That sentence is the interface. (Henderson is the placeholder name the tool examples use.)

The 26 tools, grouped:

GroupToolsNeeds a read-write key
Orientationagenda, searchNo
Readlist_tasks, get_task, list_customers, get_customer, list_contacts, list_deals, list_projects, list_invoices, list_activities, list_recurringNo
Taskscreate_task, update_task, complete_task, reopen_task, snooze_task, delete_taskYes
Customers and dealscreate_customer, update_customer, create_deal, update_dealYes
Timelineadd_note, log_emailYes
Recurringcreate_recurring, set_recurring_activeYes

agenda returns overdue tasks, tasks due today and this week, unpaid and overdue invoices, projects due within 14 days, and today's date in the owner's timezone so "next Friday" resolves correctly.

How does a request get through?

A request is one HTTPS POST to /api/mcp with a JSON-RPC 2.0 body and a bearer key. The server is stateless, so every request authenticates from scratch:

  1. Authentication. The key is hashed with SHA-256 and looked up; the database holds the hash and a short display prefix, never the key. A revoked or expired key gets a 401.
  2. Method. initialize, ping, tools/list, or tools/call.
  3. Argument validation. Every tool has a JSON Schema for types, enums, required fields, and date and time formats. Nothing reaches a handler without passing it.
  4. Scope. A key's scope is read-only or read-write (the schema also allows an admin value, which the route treats like read-write) and may carry an allow-list of record types. A write tool on a read-only key, or a task tool on a deals-only key, is refused.
  5. Handler, then the record. The tool runs against the CRM's Postgres schema through PostgREST. Creates, updates, and deletes land in the audit log with before and after snapshots and on the record's timeline; notes and logged emails go to the timeline; recurring-task changes go to the audit log. The key is the actor on every entry.

Validation and scope failures come back in-band, as a tool result flagged isError that says what to do instead. Send a lowercase stage name and the reply is "Allowed values: Lead, Proposal, Negotiation, Won, Lost." Try to create a task on a read-only key and the reply is "Read tools still work with this key."

Its limits:

  • It speaks an older revision. The server negotiates protocol versions up to 2025-06-18. It is already stateless, so the move is mechanical, but as of September 2026 it has not been made.
  • Static keys, not OAuth. A bearer key minted in the admin, not a public connector with a login screen.
  • Tools only. No resources, no prompts.
  • Whole-list reads. list_customers returns everything, right for a studio's client list and wrong at 10,000 rows.

When is a custom MCP server worth building (and when is it not)?

Start with what has gone wrong. In 2025: tool descriptions carrying hidden instructions, reported in April, and a Supabase MCP demonstration in July in which text in a support ticket, read by an agent holding a service-role key, was executed as instructions. In 2026, a cross-tenant token-reuse flaw in the Terraform MCP server was scored CVSS 10.0 in July. The OWASP MCP Top 10, still in beta, lists token mismanagement first and tool poisoning third.

no system is completely immune

The Supabase case matters here because my CRM runs on Supabase. The WBX server never hands the model SQL or a service-role key; it can call 26 named tools with validated arguments and nothing else. The lesson still applies one level up: text in the CRM is input to the model. A note that arrived through a contact form will be read by the next assistant that pulls that customer's timeline, which is why that assistant's key should be able to do no more than its job. The spec's security guidance says a server must verify every inbound request, must not treat a state handle as authentication, and must not accept tokens issued for something else. The WBX server keeps to those rules mostly because it has no sessions, no handles, and no OAuth yet; its own API key is the only credential it accepts.

The money, as of September 2026:

If your CRM isYou already haveBuild a custom server?
HubSpotAn official server at mcp.hubspot.com behind OAuth (its developer page still says OAuth 2.0, with OAuth 2.1 and PKCE promised, as of 2026-09-23): read and write on contacts, companies, deals, tickets, and engagements; read-only on users, campaigns, and CMS pagesNo
Zoho CRM or BiginZoho MCP at no added charge over your subscription, covering 50-plus Zoho apps per its pricing page on 2026-09-23No
SalesforceThe DX MCP server; Agentforce from $2 a conversationNo
PipedriveNo official server listed on Pipedrive's pricing or developer changelog pages on 2026-09-22. Zapier MCP (9,000-plus apps) or Composio (free to 100,000 calls a month, then $29) bridge itRarely
A database you ownNothing, until you write itYes, if the API and the data model already exist

In plain terms: HubSpot Sales Hub Professional is $90 a seat a month on annual billing plus $1,500 onboarding, so a five-person team pays $450 a month for a server with OAuth, maintained by people paid to maintain it. A custom server beats that on no axis except control. It wins when the CRM is custom, which for most companies of two to 20 people it should not be: the CRM playbook is the argument for buying one, and the stack piece is the confession of why I did not.

How I set it up

The server is one route file in the same Next.js app as the CRM. Beyond what the walkthrough above shows, two decisions:

  1. One key per assistant or job, named for it, scoped to what the job touches, and set to expire, so the audit log says which key did what. That is a recommendation, not a record I can show; the schema's default scope is read-write, so read-only has to be chosen when the key is minted.
  2. Tool descriptions are written as instructions. Resolve ids with search first, never guess an id, prefer complete_task or snooze_task over delete_task, use the agenda date for relative-date math.

Next, in order: the 2026-07-28 revision, then OAuth, for which Vercel's mcp-handler 2.x implements the current spec and ships an auth wrapper. Until then the server stays where a static key is appropriate: my own tools, my own data. The technical services page describes this kind of work, the bio covers the CRM years at Pravada on HubSpot, Zoho, and Pipedrive, and the Claude Code opinion piece is the wider account of building with agents. Ask me which row you are in.

Want an assistant that can actually read your pipeline?

Tell me which CRM. The answer might be a setting you already pay for.

Start a conversation

Questions people ask

What is an MCP server in plain English?
A small web service that gives an AI assistant a fixed menu of named actions against your data, such as "list overdue invoices" or "create a task," each with a description written for the model and a schema for its arguments. The Model Context Protocol, published by Anthropic in November 2024 and governed by the Linux Foundation's Agentic AI Foundation since December 2025, defines the menu format.
Does my CRM already have an MCP server?
As of September 2026, HubSpot runs an official server at mcp.hubspot.com with OAuth login, Zoho offers Zoho MCP at no added charge over a subscription, and Salesforce ships a DX MCP server. Pipedrive's pricing and developer changelog pages listed no official server on 2026-09-22; Zapier MCP or Composio bridge that gap.
Is it safe to connect an AI assistant to my CRM?
Only with a key that cannot do more than the job: read-only unless the job writes, limited to the record types it touches, set to expire, every write logged under that key. Text stored in the CRM is input to the model. Incidents in 2025 and 2026 included a Supabase MCP prompt injection through a support ticket and a CVSS 10.0 token-reuse flaw in the Terraform MCP server.
What can an AI assistant actually do with a CRM over MCP?
On the WBX Creative server: pull the day's agenda, resolve a fuzzy name to a record id, list and filter tasks, deals, invoices, and projects, then with a read-write key create, snooze, or complete tasks, open and move deals, add notes, log emails, and set up recurring tasks. A read-only key gets the first half only.
How much does a custom MCP server for a CRM cost?
On the WBX CRM the server is one route file in the same app, so its cost sat inside building the CRM. For a client it is scoped inside a CRM implementation, listed on the WBX pricing page as $3,500–$15,000+ as of September 2026. Building a separate server against a CRM that already ships an official one is paying twice.

Sources

Keep reading