MuninMunin
Sign inStart free
Home/Journal/Run your CRM from Claude Code.
Engineering · 5 min read

Run your CRM from Claude Code.

One `claude mcp add` and your terminal is holding 204 tools across CRM, support, knowledge, content, outreach, and analytics. What that's actually good for — and what to scope before you try it.

Seen from low and looking up, a slim matt black rail on a white plaster wall in a bright modern kitchen holds an even row of identical plain white implements, one hook in the middle empty, and the one that came off it lying alone on the worktop below — the catalogue as the working surface.
The catalogue is the working surface.

The odd thing about wiring a customer platform into a coding agent is how quickly it stops feeling odd. You add one server, and the next time you need to know which trial accounts went quiet last week, you ask in the same window where you were reading a stack trace. No tab. No dashboard. No export to CSV so you can look at it in a spreadsheet.

What does it mean to run your CRM from Claude Code?

It means Claude Code holds your customer platform as tools rather than as a website. Munin serves 204 MCP tools at one endpoint, so Claude can look up a contact, search your knowledge base, read a support thread, draft a CMS entry, or score a segment — as ordinary tool calls in the session you're already working in.

That's a different thing from a chatbot that answers questions about your CRM. The agent is operating the platform, with the same permissions model your dashboard uses.

How do you connect Claude Code to Munin?

One command. claude mcp add --transport http writes the Munin endpoint and a bearer header into your config, and Claude Code connects the server at the next session start. Munin Cloud serves MCP at https://mcp.getmunin.com; a self-hosted instance serves it at /mcp on your backend port. Mint an admin key under Settings, then API keys — it's shown once.

bashconnect
# Munin Cloud
claude mcp add --transport http munin https://mcp.getmunin.com \
  --header "Authorization: Bearer $MUNIN_API_KEY"

# Self-hosted
claude mcp add --transport http munin-local http://localhost:3001/mcp \
  --header "Authorization: Bearer $MUNIN_API_KEY"

# Make it available in every project instead of just this one
claude mcp add --scope user --transport http munin https://mcp.getmunin.com \
  --header "Authorization: Bearer $MUNIN_API_KEY"

# Check it landed
claude mcp list
claude mcp get munin

Inside a session, /mcp shows connection status and which servers are approved for the current project. From the shell, claude mcp list prints a health line per server — Connected, Needs authentication, or Failed to connect — and claude mcp get munin prints the one entry in full. If you'd rather use OAuth than a static key — which you should, for anything a human is driving — Munin supports scoped OAuth, and Claude Code v2.1.186 and later runs the flow from the shell with claude mcp login munin, or claude mcp login munin --no-browser on a box with no browser.

Worth doing before anything else: confirm the credential is what you think it is.

curl 'https://api.getmunin.com/v1/whoami' \
  -H "Authorization: Bearer $MUNIN_API_KEY"

It tells you which org and which audience Munin thinks is calling. Half of all "why can't the agent see anything" turns out to be a key scoped to the wrong audience.

What can you actually do once it's connected?

Everything the dashboard does, because it's the same backend. The tools group by module — crm_*, kb_*, cms_*, outreach_*, conv_*, analytics_* — and each one ships with its JSON Schema and a scope list, so the agent reads the catalogue rather than guessing at your API.

In practice, the useful requests are the ones that would otherwise be four tabs and a spreadsheet:

  • 01Ask across modules. "Which contacts in the trial segment opened a support thread but never got a reply?" Touches crm_list_contacts_in_segment and conv_list_conversations — two systems in most stacks, one query here.
  • 02Enrich on arrival. Point the lead-research recipe at a new signup and it reads their company site, fills in role, seniority, and industry, then stamps a short summary on the record with crm_set_ai_summary.
  • 03Find the bugs hiding in support. The bug-triage recipe clusters conversations by broken-behaviour phrasing, separates real defects from confusion, and files internal notes on representative threads.
  • 04Turn recurring questions into content. The conversation-distiller recipe reads what keeps coming up, checks the knowledge base for gaps, and drafts CMS entries for editorial review.

Why is this better than a REST API and a script?

Because the tool catalogue is written to be read by a model, and a REST API isn't. Munin also ships 218 REST endpoints — use them when another HTTP service is the caller. But MCP gives an agent named operations with schemas and scopes attached, plus 47 bundled markdown skills it can read at runtime to learn how to do a job, not just which endpoint exists.

That's the whole reason we built tools-first rather than UI-first. If agents are the new users, MCP is HTTP — and if you build the UI first and bolt the protocol on later, you get two systems that drift apart forever. Here the dashboard and your agent are clients of the same catalogue.

What stops the agent doing something stupid?

The tools it holds. Scopes are enforced at the tool layer, not at the edge, and audiences gate visibility — an admin key sees everything, a delegated end-user token sees only self-service tools. Riskier operations don't have a direct write at all: merging two contacts or publishing a knowledge article can only be proposed, landing in a review queue for a human.

That asymmetry is deliberate. Cheap, reversible actions — tagging a thread, titling a conversation — apply directly. Irreversible ones are separate, narrowly-scoped, separately-audited tools. An agent that gets confused, or prompt-injected by something a customer pasted into a ticket, can still only do what its tools allow. The judgment stays in the review queue, and every tool call is audited.

Don't hand exploratory sessions an admin key

An admin key is full access to the org. For poking around, mint something scoped, or use OAuth so the agent acts as you rather than as root.

And remember the key is in your shell history and your MCP config. Treat it like any other production credential — because it is one.

Who is this not for?

Teams who want to point and click, and requests that aren't specific. If nobody on the team wants a terminal or a chat window in the loop, this is a genuine mismatch, and Zendesk sells a mature agent workspace built for people who want to click. Munin's dashboard covers settings, auth, and review; the working surface is the tool catalogue.

It also rewards a specific request — "clean up my CRM" is too vague to act on, and naming the pass you want is what gets you the pass you want.

What makes the specific requests work is that the recipes are explicit: which tools, in which order, with which stopping condition. They're markdown you can read and edit, and you should. Read the recipe, change the stopping condition, run it again — that loop is the thing a tool catalogue buys you and a dashboard can't, because a dashboard's behaviour isn't a file you own. And the terminal is only one door onto it: the same endpoint serves an operations person in ChatGPT who has never opened a shell. It's why the recipe you end up with is yours rather than ours.

Frequently asked questions

How do I add a remote MCP server to Claude Code? Run claude mcp add --transport http <name> <url>, adding --header "Authorization: Bearer <token>" if the server needs a credential. Add --scope user to make it available across all your projects instead of just the current one, then confirm with claude mcp list or claude mcp get <name>.

Can Claude Code write to my CRM, or only read it? Both, bounded by the scopes on your credential. Cheap reversible writes — updating a contact, tagging a conversation — apply directly. Irreversible ones like merging contacts or publishing knowledge articles can only be proposed into a review queue for a human to approve.

Does this work with Cursor, ChatGPT, or my own agent? Yes. Munin serves standard MCP at one endpoint with no client-specific behaviour, so Claude Desktop, Cursor, ChatGPT, Codex, Gemini, the OpenAI Agents SDK, or a runner you wrote yourself all connect the same way. Munin doesn't ship a model.

Do I need Munin Cloud, or can I self-host? Either. The repo is MIT-licensed and a self-hosted instance serves MCP at /mcp on your backend port — the Docker route walks through it. Munin Cloud is EU-hosted and Cloud Free is €0/month. Same code, same tool surface, same audit log.

How is the agent authenticated? Three ways: an admin API key for server-to-server, scoped OAuth 2.1 for user-authorised agents, or a delegated end-user token limited to self-service tools. Call /v1/whoami to check which one you're actually presenting.

How many tools will this add to my context? 204, across the six modules, each carrying its own JSON Schema and scope list. Scope the credential to the modules a session needs and the audience gate decides which tools are visible at all, so a support session sees conv_* and kb_* and nothing else. Why we ship 204 rather than a dozen has the reasoning.

The short version

  • claude mcp add --transport http munin https://mcp.getmunin.com --header "Authorization: Bearer $MUNIN_API_KEY" and you're connected.
  • Verify with claude mcp list, claude mcp get munin, /mcp in session, and a /v1/whoami call before you debug anything else.
  • 204 tools grouped as crm_*, kb_*, cms_*, outreach_*, conv_*, analytics_*, plus 47 markdown skills the agent reads at runtime.
  • Cheap actions write directly; merges and publishes only propose into a review queue. Scopes are enforced at the tool layer.
  • Scoped OAuth 2.1 or a scoped key for exploratory sessions; keep the admin key for server-to-server.

Point whatever client you already use at https://mcp.getmunin.com, ask it a real customer question, and keep the MCP tool reference open while you work — Munin Cloud is free to start on.

Run your CRM from Claude Code; the tools were always the product.