What 140+ MCP tools taught us

Building a tool for every CRM action, instead of a chat layer bolted on top, forces decisions the chat layer lets you skip.

An admin approves every new account by hand. Nothing is created until then. We reply by email; no newsletter, no sequence.

app.salescrew.io/today
The daily working view

The short answer

  • SalesCrew has 145 registered MCP tools as of September 2026, one for nearly every action the UI can take. Not a curated shortlist.
  • One tool per action lets access be scoped at the permission layer, on the same three axes the UI uses (channel, Upwork profile, area), instead of inside a prompt.
  • The hardest part was not writing the tools. It was deciding which actions run immediately and which queue for a human. That decision is made per action class, not per tool.
  • The MCP server runs as a Supabase edge function per client instance, so tool access is scoped to a client's own data by construction, not by a filter an agent could bypass.

The tool count is a side effect, not the goal

The number quoted about SalesCrew's MCP server is 145 registered tools. Nobody set that as a target. It is what happens when the rule is "every UI action gets an MCP twin with identical effect", and the UI already has contacts, companies, deals, an inbox, cadences, campaigns, approvals, agent controls, marketing queries, a knowledge base, an Upwork module, billing, webhooks and a fleet console. Each surface contributes its own handful of tools: create, update, list, search, and whatever domain-specific actions it needs, such as approval_approve or cadence_advance.

The alternative, which most products with an AI layer build first, is one general tool that accepts a natural-language instruction. An LLM inside the server decides what to do with it. That is faster to ship. It also leaves the permission system with nothing to hold on to. The scope of what an agent can touch lives inside a prompt, not inside a grant. Two agents with different intended access end up with the same tool and different instructions. That is a much weaker boundary.

Choosing one tool per action meant choosing the access model first. That model came from a decision already made for the UI: a three-axis scope, channel, Upwork profile and area, enforced by row-level security. Reusing it for MCP tokens means a token issued to an agent inherits the same restrictions a human teammate would have with the same scopes. That part took longest. Not the tool count.

What building this many tools actually forces you to decide

With a handful of tools, you can review every call by hand while building. With 145, you cannot. You have to decide up front which actions an agent may take on its own and which need a person to see the artefact first. SalesCrew's answer is a default policy table, seeded per instance and editable in Agents → Guardrails. Research, enrichment, tagging, scoring, summaries and internal tasks default to auto. Classifying a reply, and suppressing on unsubscribe or bounce, default to auto too, because they read and react with no external side effect. Anything that leaves the building, an email, a LinkedIn message, an SMS, a marketplace proposal, defaults to review. Anything that spends money is human-only, with no mode that lets an agent do it unattended.

That policy table exists because a tool count in the hundreds makes "review every call" unworkable and "let every call run" unacceptable. The alternative most teams reach for is a single global on/off switch. It is too coarse. It cannot tell an agent tagging a contact from an agent emailing a prospect. A policy per action class can. That is why the tool inventory and the approval queue had to be designed together, rather than the queue being added after the tools existed.

The other forcing function was naming. With 145 tools, an ambiguous name costs real time. An agent, or a person reading the tool list, has to guess between contact_update and something that sounds similar but does something narrower. The tools follow one convention, noun_verb, consistently enough that an unfamiliar caller can predict a tool's name from what it needs to do. That matters more at 145 tools than at 15.

Every one of the 145 tools also has a UI twin with identical effect, so the manual path in the app never breaks when automation is turned off. That constraint, dual control, shapes the design before the AI question comes up. The tool schema has to mirror what a person can already do through a form or a button. It cannot invent a shortcut the UI does not offer.

The fix: scope and review before you count tools

If you are building an MCP surface for a system that already has an admin UI, the practical order is scope first, review policy second, tool count last. Decide the axes access will be scoped on: object type, team, client, or role. Decide which action classes run unattended and which queue, and write that policy down somewhere editable, not buried in an agent's system prompt. Only then build the tools. By that point each tool's schema, what it needs, what it returns, whether it queues, is already decided by the policy. Nothing is improvised per tool.

Every tool call in SalesCrew is also written to an audit log, with the actor recorded as a user, a token or an agent. That is the other piece that has to exist before the tool count grows past what a person can watch by hand. Once 145 tools run against real client data, the audit log is what answers "what changed, and who or what changed it". It has to be there from the first tool, not retrofitted after something goes wrong.

Questions

Why not only wrap the CRM in one big 'do anything' tool?
A single broad tool cannot be scoped. A token that can only call contact_search and note_add is safe to hand to a junior automation. A token that calls one tool named crm_action with a free-text instruction is not, because the scope lives inside the instruction text instead of in the permission system.
Does every tool need a human approval step?
No. SalesCrew's default policy table puts research, enrichment, tagging and internal note-taking on auto. The review queue is reserved for anything that leaves the building: an email send, a stage change, a contact merge or delete, and anything that spends money.
How many tools is enough for a CRM?
There is no fixed number. It tracks the number of distinct actions the UI supports. SalesCrew has 145 registered tools as of September 2026, one for close to every UI action, because the goal is parity with the interface, not a curated top ten.