MCP CRM server: connect your CRM to Claude
Relm ships a native Model Context Protocol server. Add one config block, and Claude gets typed tools for contacts, companies, deals and activities - it reads your schema, writes records, and fixes its own mistakes from the error responses.
What is MCP?
The Model Context Protocol is an open standard for connecting AI models to external tools and data. Instead of every integration inventing its own glue, MCP defines one wire format: a server advertises a set of tools (each with a typed input schema), and a client - Claude Desktop, Claude Code, or any MCP-aware agent - discovers those tools and calls them on the model's behalf. It is, roughly, what USB did for peripherals: one connector, many devices.
Relm's server speaks MCP over Streamable HTTP at https://api.relmcrm.com/mcp, using a request/response transport. Authentication is the same relm_live_ bearer key you would use for the REST API - one credential, two transports. That symmetry matters: whatever a developer can script against REST, an agent can do through MCP, against the exact same data, with the exact same permissions. There is no second CRM to keep in sync and no separate integration surface to secure.
Why a CRM as an MCP server matters
A CRM is state. It is where an agent remembers who it talked to, what they wanted, and where each opportunity stands. Without durable state, an LLM starts every conversation from zero. The usual workaround is to wrap a UI-first CRM's REST API in a pile of custom function definitions - a brittle, per-project translation layer that you maintain forever.
An MCP CRM server removes that layer. The tools, their input schemas, and their descriptions are published by the server itself. Point Claude at Relm and it instantly knows how to create a contact, move a deal, or log a call. Nothing to hand-write, nothing to keep in sync. This is the difference between a CRM built for LLMs and one that merely has an API.
Add Relm's MCP server to Claude
Mint a key in the dashboard first - use a relm_test_ key while you experiment, since test mode is free, unlimited, and never touches live data. Then add the server to your MCP config. In Claude Desktop and Claude Code this lives in an mcp.json-style block:
{
"mcpServers": {
"relm": {
"type": "http",
"url": "https://api.relmcrm.com/mcp",
"headers": { "Authorization": "Bearer relm_live_..." }
}
}
}
Restart the client. Relm's tools appear in the tool list, and you can now talk to your CRM in plain language. Swap the key prefix to relm_test_ for a sandbox, or relm_live_ when you are ready for real records.
What tools it exposes
Every CRM operation is a typed MCP tool. The naming is predictable, so the model can reason about what is available without reading a manual:
| Tool | What it does |
|---|---|
relm_describe_schema | Return the live object, field and enum registry. The agent calls this first. |
relm_create / relm_update | Write a contact, company, deal or activity. Object is a typed argument. |
relm_list / relm_get | Read records with cursor pagination, or fetch one by prefixed ID. |
relm_batch | Run many create/update operations in a single call. |
relm_create_field / relm_create_enum_value | Extend the schema at runtime when a needed value does not exist yet. |
| pipeline & automation tools | Create pipelines and stages, move deals, and define event-triggered automations and drip sequences. |
That is a slice of a set of roughly three dozen tools covering the whole CRM - contacts, companies, deals, activities, pipelines, custom fields, automations, webhooks and transactional email. The full contract is in the docs.
Two conventions make the tools safe for an agent to call unattended. Reads use cursor pagination, so a list tool returns a stable page plus a next_cursor the model follows to walk large result sets without missing or double-counting rows under concurrent writes. Writes accept an idempotency key, so if a tool call is retried after a network hiccup the server returns the original record instead of creating a duplicate. Together they mean an agent can loop over data and retry freely without corrupting your CRM.
Batching: many calls, one request
Chatty tool use is slow. Relm's MCP transport lets the model send an array of tool calls in a single POST, and the relm_batch tool wraps many writes into one operation. When Claude decides to import a list of leads, it does not fire twenty sequential calls - it sends one batch and gets one response.
relm_batch({
"operations": [
{ "method": "create", "object": "contact", "data": { "email": "[email protected]", "first_name": "Ada" } },
{ "method": "create", "object": "contact", "data": { "email": "[email protected]", "first_name": "Bo" } },
{ "method": "create", "object": "deal", "data": { "title": "Acme expansion", "amount": 12000 } }
]
})
Batching saves round-trips, not quota - each operation is metered individually against your monthly request allowance. See the batch pattern in the give your AI agent a CRM walkthrough.
Self-correcting errors
The single most important property of an MCP CRM is what happens when the model gets it wrong. In most integrations a bad value produces an opaque failure, the model guesses a fix, and it loops. Relm answers with an RFC-9457 problem+JSON error that carries the correction:
{
"type": "unknown_value",
"title": "Unknown deal stage 'negotiating'",
"valid_options": ["lead", "qualified", "proposal", "won", "lost"],
"did_you_mean": "proposal"
}
The model reads valid_options and did_you_mean, retries with a valid stage, and continues. This is the "never confused" contract: the error is written for a model, not for a log file. Combined with a live schema the agent can query up front, it means an agent rarely fails twice for the same reason.
Example prompts
Once the server is connected, you drive the CRM conversationally. A few that just work:
- "Add Ada Lovelace at [email protected] as a lead, link her to the Analytical Engine company, and open a $20k deal in the sales pipeline at the qualified stage."
- "Here are 30 leads from our webinar CSV. Create a contact for each and log a 'webinar attendee' activity dated yesterday."
- "Move every deal that has had no activity in 14 days to the at-risk stage and draft a follow-up email for each owner."
Behind each of these, Claude calls relm_describe_schema, resolves the pipeline and stage keys, and batches the writes - self-correcting from any valid_options error along the way. To go deeper on the concept, read what a CRM for LLMs is, and check pricing when you are ready to move off test mode.
Connect your CRM to Claude
Mint a free key, paste the mcp.json block, and start talking to your CRM.
Start free →