Zoho CRM MCP Server
Servidor MCP de Zoho CRM (FastAPI + FastMCP)
Un servidor de Model Context Protocol (MCP) de nivel de producción construido con FastAPI + FastMCP que ofrece a Claude y otros clientes de IA un acceso completo y autenticado a la API REST de Zoho CRM v8 — desde la lectura de registros hasta el diseño de módulos y la creación de automatizaciones de flujos de trabajo.
167 herramientas MCP que cubren registros, COQL, diseño de esquemas, reglas de flujo de trabajo y sus acciones, webhooks, operaciones masivas, etiquetas, notas, correo electrónico, ajustes de seguridad e importación/exportación masiva — además de una vía genérica de escape zoho_api_request para cualquier cosa que Zoho exponga y que no tenga una herramienta dedicada.
🌟 Características principales
Framework web FastAPI: Aplicación ASGI de alto rendimiento y lista para producción impulsada por Uvicorn.
Transporte dual: Funciona como servidor MCP HTTP transmisible (para alojamiento remoto/en la nube) y como servidor MCP STDIO (para Claude Desktop local).
Ciclo de vida completo de OAuth 2.0: Intercambio automático de código, manejador de redirección del navegador (
/auth/callback), almacenamiento cifrado de tokens y un bucle en segundo plano que mantiene el token actualizado mientras el servidor está en ejecución.Credenciales configurables desde el chat: Proporciona un ID de cliente y secreto de Zoho desde el chat (
set_zoho_credentials, o directamente enget_auth_url/exchange_auth_code) en lugar de.env— útil para cambiar de cuenta de Zoho sin reiniciar.Creación completa de automatizaciones: Construye reglas de flujo de trabajo de principio a fin: crea acciones de actualización de campos, notificaciones por correo, tareas y webhooks, y luego conéctalas a una regla con disparadores y criterios.
Diseño de esquemas: Crea módulos personalizados (con los perfiles que Zoho exige), campos, listas de selección globales, diseños y canalizaciones de ventas.
Modo de sesión con ámbito: Filtro de seguridad basado en ID (
activate_scope) que restringe las operaciones a IDs de registro específicos.Aprobaciones con intervención humana (HITL): Las acciones destructivas ponen en cola una solicitud pendiente en lugar de ejecutarse. Se activa o desactiva con
ZOHO_REQUIRE_APPROVAL.Registro de actividad estructurado: Cada evento de autenticación, llamada a la API y decisión de aprobación se registra como JSON, recuperable mediante
get_logs()/GET /logs.Almacenamiento cifrado de tokens: Los tokens de OAuth se cifran en reposo (Fernet/AES), nunca en texto plano.
Cliente de red resiliente: Cliente
httpxagrupado con renovación y reintento automáticos ante 401, retroceso controlado ante 429, reintento exponencial ante errores 5xx, limitador de velocidad de salida y detección de fallos parciales en las respuestas por registro de Zoho.Suite de pruebas automatizada: 35 pruebas
pytestque cubren la superficie HTTP, el registro de herramientas, las formas de las cargas útiles de solicitudes y las salvaguardas del cliente.
Related MCP server: Zoho CRM MCP Server
📁 Estructura del repositorio
zoho-crm-mcp/
├── server.py # FastAPI app + all FastMCP tool definitions & REST endpoints
├── auth_manager.py # OAuth 2.0 flow, scopes & token refresh
├── zoho_client.py # Async HTTP client for Zoho CRM API v8 (151 methods)
├── models.py # Pydantic state & validation models
├── token_store.py # Encrypted (Fernet) token persistence
├── approval_manager.py # HITL approval queue for high-risk actions
├── activity_log.py # Structured JSON activity logger
├── test_server.py # pytest suite
├── requirements.txt # Dependencies
├── .env.example # Environment configuration template
├── pyproject.toml # Package metadata
└── README.md⚙️ Configuración e instalación
1. Requisitos previos
Python 3.10+
Una aplicación de la consola de API de Zoho CRM (Consola de API de Zoho)
Tipo de cliente: Aplicaciones basadas en servidor
URI de redirección:
http://localhost:8000/auth/callback(o la URL de devolución de llamada de tu despliegue)
2. Configuración del entorno
cp .env.example .envConfiguración mínima:
ZOHO_CLIENT_ID=1000.xxxxxxx
ZOHO_CLIENT_SECRET=xxxxxxx
ZOHO_REDIRECT_URI=http://localhost:8000/auth/callback
ZOHO_DATA_CENTER=com
PORT=8000Consulta .env.example para conocer todas las variables admitidas, incluidos el control de aprobaciones, la anulación del ámbito de OAuth, el límite de velocidad y los ajustes de tiempo de espera.
¿Trabajas con más de una cuenta de Zoho?
ZOHO_CLIENT_ID/ZOHO_CLIENT_SECRETson opcionales. Déjalos en blanco y pide a Claude que llame aset_zoho_credentials(client_id, client_secret, redirect_uri?, data_center?), o pasaclient_id/client_secretdirectamente aget_auth_url/exchange_auth_code. Cambiar declient_idborra los tokens guardados de la cuenta anterior, lo que evita el errorinvalid_clientde Zoho por reutilizar un token de actualización emitido para otra aplicación.
3. Instalar dependencias
pip install -r requirements.txt🚀 Ejecución y despliegue
Opción A: Servidor web FastAPI local
python server.pyO directamente con Uvicorn:
uvicorn server:app --host 0.0.0.0 --port 8000Una vez en ejecución:
Panel web: http://localhost:8000/
Documentación Swagger: http://localhost:8000/docs
Comprobación de estado: http://localhost:8000/health
Endpoint MCP:
http://localhost:8000/mcp
Opción B: STDIO local
python server.py --stdioOpción C: Despliegue en la nube (Render, Railway, Docker, AWS, Heroku)
Comando de inicio:
uvicorn server:app --host 0.0.0.0 --port $PORTRuta de comprobación de estado:
/healthVariables de entorno: define
ZOHO_CLIENT_ID,ZOHO_CLIENT_SECRET,ZOHO_REDIRECT_URI,ZOHO_DATA_CENTERyZOHO_TOKEN_ENCRYPTION_KEY(para que los tokens sobrevivan a los reinicios en sistemas de archivos efímeros).
🖥️ Integración con Claude Desktop
Modo 1: Conexión MCP HTTP / remota
{
"mcpServers": {
"zoho-crm": {
"url": "http://localhost:8000/mcp"
}
}
}Modo 2: Conexión STDIO local
{
"mcpServers": {
"zoho-crm": {
"command": "python",
"args": ["C:/Users/Lenovo/Desktop/zoho MCP/server.py", "--stdio"],
"env": {
"ZOHO_CLIENT_ID": "1000.YOUR_CLIENT_ID",
"ZOHO_CLIENT_SECRET": "YOUR_CLIENT_SECRET",
"ZOHO_REDIRECT_URI": "http://localhost:8000/auth/callback",
"ZOHO_DATA_CENTER": "com"
}
}
}
}🔑 Flujo de OAuth en el primer uso
Inicia el servidor:
python server.pyAbre
http://localhost:8000/auth/url, o pide a Claude que ejecuteget_auth_url().Abre la URL devuelta, inicia sesión en Zoho CRM y haz clic en Aceptar.
Zoho redirige a
/auth/callback?code=...; el servidor intercambia el código y guarda los tokens cifrados en~/.zoho_crm_tokens.json.
🧩 Creación de automatizaciones: la receta del flujo de trabajo
Zoho modela una regla de flujo de trabajo como un disparador más condiciones, donde cada condición apunta a objetos de acción creados previamente. Créalos en ese orden:
1. get_workflow_configurations(module="Leads")
-> see which triggers, comparators, and action types this org supports
2. create_field_update_action(
name="Mark as Hot", module="Leads",
field_api_name="Rating", value="Hot")
-> returns the action id
3. create_workflow(
name="Hot Lead Router",
module="Leads",
execute_when={"type": "create_or_edit"},
conditions=[{
"sequence_number": 1,
"criteria_details": {"criteria": {"group_operator": "and", "group": [
{"comparator": "equal",
"field": {"api_name": "Lead_Source"},
"value": "Web Form"}]}},
"instant_actions": {"actions": [
{"id": "<action id from step 2>", "type": "field_updates"}]}}])
4. activate_workflow(workflow_id="...")El mismo patrón se aplica con create_email_notification_action, create_automation_task y create_webhook como fuente de la acción.
🎯 Modo de sesión con ámbito (filtro de seguridad)
Restringe cada operación a IDs de registro específicos:
Activar:
activate_scope(module="Deals", record_ids=["4153...001", "4153...002"])REST:
POST /scope/activatecon{"module": "Leads", "record_ids": ["123", "456"]}Desactivar:
deactivate_scope()oPOST /scope/deactivate
Mientras esté activo, las lecturas de ese módulo se filtran a esos IDs, y las escrituras a cualquier otro ID se rechazan con OUT_OF_SCOPE.
✅ Aprobaciones con intervención humana (HITL)
De forma predeterminada, las acciones destructivas ponen en cola una solicitud pendiente y devuelven un request_id en lugar de ejecutarse:
delete_record, bulk_update_records, bulk_delete_records, mass_update_records, mass_delete_records, change_owner, mass_change_owner, merge_records, delete_workflow, delete_workflows, execute_blueprint, update_layout, activate_layout, delete_layout, delete_field, delete_user, delete_tag, bulk_write_create_job.
Revisar:
list_pending_approvals()oGET /approvalsAprobar y ejecutar:
approve_action(request_id="...")oPOST /approvals/{id}/approveRechazar y descartar:
reject_action(request_id="...")oPOST /approvals/{id}/rejectDesactivar el control por completo: define
ZOHO_REQUIRE_APPROVAL=falsepara que estas herramientas se ejecuten de inmediato.
Cada solicitud, aprobación y rechazo se registra en el registro de actividad.
📜 Registro de actividad
Los eventos de autenticación, las llamadas salientes a la API de Zoho, las ejecuciones de funciones y las decisiones de aprobación se registran como entradas {timestamp, action, status, details} — se mantienen en memoria y se añaden a ~/.zoho_crm_mcp_activity.log.jsonl.
Recuperar:
get_logs(limit=50, action=None, status=None)oGET /logs
🔐 Seguridad de los tokens
Los tokens se cifran en reposo (Fernet/AES) en
~/.zoho_crm_tokens.json.La clave se genera automáticamente en
~/.zoho_crm_mcp.keyen el primer uso (con permisos solo para el usuario en POSIX), o se define explícitamente medianteZOHO_TOKEN_ENCRYPTION_KEYpara una clave estable entre reinicios del contenedor.Los tokens se etiquetan con el
client_idque los emitió y se descartan si no coinciden, lo que evita el errorinvalid_clientde Zoho después de cambiar de cuenta.Las llamadas salientes se autolimitan (
ZOHO_RATE_LIMIT_PER_SEC, 10/seg por defecto) además del retroceso ante errores 429/5xx.
🧪 Pruebas
pytest -vCubren la superficie HTTP (/health, /, /auth/*, /scope/*, /approvals/*, /logs), el registro de las 167 herramientas MCP, las cargas útiles de solicitud exactas enviadas para flujos de trabajo/módulos/notas/llamadas/webhooks/fusiones/bloqueos, las salvaguardas de validación del lado del cliente, el ajuste del límite de velocidad y la detección de fallos parciales de Zoho.
Las pruebas se ejecutan completamente sin conexión — no se requieren credenciales de Zoho.
🛠️ Referencia de herramientas MCP
Categoría | Herramientas |
OAuth y autenticación |
|
Modo con ámbito |
|
HITL y registro |
|
Vía de escape |
|
CRUD de registros |
|
En lote (≤100/llamada) |
|
Masivo (trabajos asíncronos) |
|
Bloqueo y uso compartido |
|
Registros relacionados |
|
Consultas |
|
Metadatos y descubrimiento |
|
Diseño de esquema |
|
Reglas de flujo de trabajo |
|
Acciones de flujo de trabajo |
|
Webhooks |
|
Archivos |
|
Notas, llamadas y correo electrónico |
|
Etiquetas |
|
Conversión de leads |
|
Blueprint |
|
Lectura/escritura en lote |
|
Seguridad y usuarios |
|
Notificaciones |
|
Funciones |
|
Informes y paneles |
|
† Aprobación requerida por defecto. Establece ZOHO_REQUIRE_APPROVAL=false para ejecutar de inmediato.
* La API REST pública de Zoho CRM no tiene endpoint para esta operación: la creación de blueprints, el código fuente de funciones Deluge y la creación de informes/paneles son solo de interfaz o pertenecen al producto independiente Zoho Analytics. Estas herramientas devuelven un mensaje claro NOT_SUPPORTED_BY_ZOHO_API que indica una alternativa viable, en lugar de fallar contra una URL que no existe.
🧭 Acceder a cualquier cosa no listada
La API de Zoho es más amplia que cualquier envoltorio escrito a mano. zoho_api_request cubre el resto con el mismo manejo de autenticación, limitación de velocidad y reintentos:
zoho_api_request(
method="GET",
endpoint="settings/territories")
zoho_api_request(
method="POST",
endpoint="settings/automation/scoring_rules",
body={"scoring_rules": [{...}]})
zoho_api_request(
method="GET",
endpoint="read/1234567890",
api_root="bulk")api_root selecciona la base de la URL: crm → {domain}/crm/v8 (predeterminado), bulk → {domain}/crm/bulk/v8, root → {domain}.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
The HubSpot MCP Server acts as a bridge that enables AI assistants and Large Language Models to securely interact with HubSpot CRM data through natural conversation, without requiring users to understand complex API structures. It provides read-only access to standard CRM objects (contacts, companies, deals, tickets, products, invoices, and more) and their associations, secured via OAuth 2.0, allowing AI agents to perform tasks like summarizing deals, fetching company updates, and looking up record changes.
- platform7nOAuthtech.p7n
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
xmagnet — AI-powered B2B CRM for Claude. 35 tools that turn natural-language prompts into real CRM actions: prospect, enrich, score leads, manage deals, scan buying intent, run email campaigns and sequences, build forms and landing pages, refine ICP, and analyze performance — all directly inside Claude. 🚀 ONE-CLICK INSTALL: https://api.xmagnet.ai/claude The install page guides Claude users through 3 steps in under a minute: open Claude Connectors, paste the connector name, paste the server URL, sign in. A reviewer workspace is auto-provisioned on first sign-in with sample contacts, deals, campaigns, and ICP suggestions, so every tool works end-to-end with zero setup. No 2FA. No paid plan required. Free tier exposes all 35 tools. What you can do: • Prospecting — search_contacts, search_companies, search_investors, find_contacts_at_companies, enrich_contact, validate_email, find_competitors, company_intelligence • Pipeline — get_deals_pipeline, scan_deal_intent, get_ghost_pipeline, create_deal • Campaigns & sequences — create_campaign, generate_campaign_content, get_campaign_stats, get_bounce_stats, get_unsub_stats, create_sequence_draft, list_sequences • Top of funnel — suggest_icp, get_icp, create_form, list_forms, create_landing_page, list_landing_pages, show_suggestions • Operations — analyze_contacts, get_contact_details, update_contact, save_contacts_to_crm, export_contacts, get_dashboard_stats, get_credit_balance Example prompts to try: • "Find C-suite contacts at fintech companies that raised Series A in the last 6 months." • "Scan my open deals for buying intent and prioritize follow-ups." • "Generate a re-engagement campaign for contacts who opened my last newsletter but didn't reply." • "Show me my deals pipeline by stage with weighted value and win rate." • "Generate a landing page for my Q2 webinar with a registration form." Built for founders, SDRs, RevOps, and growth teams who want their CRM to take action — not just store records. Install: https://api.xmagnet.ai/claude · Site: https://xmagnet.ai · Privacy: https://xmagnet.ai/privacy-policy · Terms: https://xmagnet.ai/terms-of-service · Support: ashish.sinha@xmagnet.ai
WHOOP recovery, strain, sleep and workouts in Claude via official WHOOP OAuth. Free, open source.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceConnects Claude to Zoho CRM with read-only access, enabling natural language queries to search records, list modules, retrieve field information, and count records using OAuth authentication.-
- FlicenseNot gradedqualityDmaintenanceEnables read-only interaction with Zoho CRM data through natural language queries, allowing users to search records, list modules, retrieve field information, and count records using secure OAuth authentication.2-
- FlicenseBqualityDmaintenanceExposes Zoho CRM v6 REST API as structured tools for LLM agents via MCP, enabling CRUD operations, search, COQL queries, and more.113-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Zoho CRM data through secure OAuth authentication, supporting comprehensive CRM operations including record management, search, bulk operations, and lead conversion.3MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/NitinSharma077-echo/zoho-crm-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server