Zoho CRM MCP demo
by Monsteroo
README.md
# Zoho CRM MCP demo
A small MCP server exposing four Zoho CRM operations (Deals and Leads
modules, real Zoho API v8 field names) as tools an LLM/agent can call in
plain language:
- `search_deals(stage=None, min_amount=None)` — filter the pipeline by stage/amount
- `summarize_pipeline()` — deal count + total Amount per stage, open vs. closed
- `find_duplicate_leads()` — groups Leads by (Email, Company) to catch the same
contact entering through two different capture channels with slightly
different name spelling (e.g. a Marketplace extension form vs. a webhook)
- `create_lead(first_name, last_name, company, email, lead_source)` — adds a Lead
## Why this exists
Built as a short, self-contained proof of concept — not a submission tied to
any specific client work. It runs entirely against the synthetic dataset in
`data/seed.json`; there is no connection to a real Zoho CRM org and no
CRMOZ or client data involved anywhere.
It mirrors the same pattern as production MCP work already shipped
elsewhere (n8n MCP integrations, a GoHighLevel MCP integration for a live
client) — applied here to Zoho CRM's schema, to show the pattern fits, not
to replace any existing "AI + Zoho" tooling.
## Run it
```bash
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python3 server.py
```
This starts the server on stdio, ready to be added to any MCP client
(Claude Desktop, Claude Code, etc.) config as a local server.
## Verified working
All four tools were exercised directly and through `mcp.list_tools()` —
`search_deals`, `summarize_pipeline`, `find_duplicate_leads`, and
`create_lead` all registered and returned correct output against the
seed data, including a deliberately planted duplicate lead
(`sam.cutter@bramwellfoods.example`, entered once via an "Email to Lead"
style channel and once via a "Google Sheets" style channel with the name
spelled "Sam" vs. "Samuel") that `find_duplicate_leads()` correctly caught.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessSyncing