CRM for developers
Where the tools come from, and the REST surface underneath them: one operation table behind the router, the OpenAPI document and this server.
Read it →POST/v1/tasks/{id}/claim
Point a client at /mcp, send the same bearer key the REST API takes, and 97 tools appear — one for every operation, generated from the table the routes are registered from. There is no hand-written tool layer to drift out of step with the product it describes.
The short version, then the version that matters — what the term means in general, and what it turns out to mean when a product is actually built that way.
Most tools an engineer touches now have one — GitHub, Slack, Postgres, Figma. A server speaks the Model Context Protocol so a model can call that product directly, and connecting it once makes its tools appear in the client. This is that, for a CRM.
This CRM's operations, as tools: read the schema, write a company, claim a task, move a deal, add a field, run a saved view. Everything the REST API does, under the same key and the same role, with nothing added and nothing simplified away.
Every CRM with an MCP server got one somehow. What matters is what happens to it the week after an operation is added.
A hand-written MCP wrapperThe dozen operations somebody had time for. The rest need a REST call the model cannot make.
Agent Native CRM97 tools — every operation but the one that serves the spec document itself.
A hand-written MCP wrapperA new endpoint is a new tool somebody has to remember to write and describe.
Agent Native CRMA new operation is a new tool. The generation reads the same table the router registers from.
A hand-written MCP wrapperWritten by hand, so a required field can be optional in the tool and rejected by the API.
Agent Native CRMDerived from the operation's own request schema, which is the schema the API validates against.
A hand-written MCP wrapperA second authorisation path, and a second place for it to be wrong.
Agent Native CRMThe same key, the same role, the same forbidden. MCP is a transport, not a privilege level.
A hand-written MCP wrapperWhatever read well at the time, per tool.
Agent Native CRMThe operationId from the spec, which a test keeps unique across the whole surface.
Every route named below is one this API serves — a test reads them back against the operation table and fails on anything invented. Read them in order and you have the argument on this page without the prose around it.
The endpoint is /mcp, the transport is JSON-RPC over POST, and the credential is the bearer key a principal already holds. Nothing to install and nothing to run locally. The tool list is the operation list: names are operationIds, descriptions are the operation summaries, and argument schemas come from the request bodies the API validates against.
Read the workspace, find out who you are, then write something. This is the same order the skill file gives, because a tool call that guesses a field name costs a round trip and an error that lists the fields it should have used.
List what is open, claim it, do the job with the client's other tools, close it with an outcome. A model that has a mailbox tool and this queue can run the whole loop, and the CRM records the half it can actually vouch for.
Custom objects, fields, stages, activity types, saved views, principals and keys are all tools, because they are all operations. An MCP client can shape the workspace it is about to work in rather than filing a request and waiting.
GET/v1/activities
None of these is a setting somebody switches on. Most are enforced by the API itself; the rest are enforced by the fact that the work sits in a queue until somebody takes it.
An MCP session authenticates as a principal and inherits that principal's role exactly. There is no tool that does something the same key could not do over REST, which is what makes the permission model on this product one model rather than two.
409 do_not_contact, 409 already_claimed and 403 forbidden come back through MCP with the same codes and details. A model can tell the difference between work that failed and work somebody else already took.
GET /v1/skill returns the whole contract as markdown, served at /skill.md as well so an agent with only the domain can find it. It documents every path the API serves — a test fails the build if a route exists that it does not describe.
Tool calls are API calls, and API calls are never rate limited. A model that reads the schema before every write is not paying for the caution, which is the only way that advice is honest.
POST/v1/tasks/{id}/claim
Not a diagram of the architecture — the actual shape of the response the rest of this page is built on. Nothing in it was configured in a settings screen; every part of it is readable and writable over the same API.
Said plainly, because each of these is a thing a product described this way is usually assumed to do, and an agent that assumes it will write code that never runs.
This server exposes this CRM and nothing else. It will not proxy your mailbox, your data vendor or another SaaS product. An agent that needs those brings its own tools for them and writes the results here.
There is no sendEmail. The contact tools create and close tasks; the message inside one is delivered by the client, from its own account. A tool list that implied otherwise would be the most expensive kind of wrong.
There is no curated subset and no simplified tool that wraps three calls into one. Every operation is a tool, which means the list is long and honest rather than short and lossy.
Answered here rather than in a call, and answered the way they would be answered in a call.
An implementation of the Model Context Protocol that exposes a CRM's data and operations as tools an AI client can call. Instead of writing code against the REST API, the model discovers what it can do and calls it directly.
Point the client at the /mcp endpoint on this domain and give it a bearer key issued to a principal. It lists tools over JSON-RPC and gets one back per operation. There is nothing to install, no local process to run and no second credential to manage.
97 — one for every operation in the API except the one that serves the OpenAPI document. They are generated from the same operation table the routes are registered from, so the list moves whenever the API does.
No. An MCP session authenticates with a principal's key and inherits that role exactly. Anything refused over REST is refused here with the same code, and there is no tool that reaches something a key could not reach directly.
Yes, if its role allows it. Adding fields, stages, activity types and whole custom objects are ordinary operations, so they are ordinary tools. Every change is logged as a schema_changed activity carrying the diff.
No. Contact channels exist as task shapes: a tool writes the message into a task payload and a person can review it, and the client that claims the task sends it from its own mailbox or account. This product delivers nothing.
The same product from a different angle. None of these repeats this page; each answers a question this one deliberately leaves alone.
Where the tools come from, and the REST surface underneath them: one operation table behind the router, the OpenAPI document and this server.
Read it →What an agent does once it is connected — identity, provenance, and the queue between several of them.
Read it →The quickstart, and the error vocabulary a client should branch on.
Read it →An agent can create one with no key, no invitation and no human, and shape it through the same API you are about to hand it. Your API calls are never rate limited and agents are never counted.