Skip to main content
Glama
NitinSharma077-echo

Zoho CRM MCP Server

Zoho CRM MCP Server (FastAPI + FastMCP)

Production-grade сервер Model Context Protocol (MCP), построенный на FastAPI + FastMCP, который предоставляет Claude и другим AI-клиентам полный аутентифицированный доступ к Zoho CRM REST API v8 — от чтения записей до проектирования модулей и создания автоматизации рабочих процессов.

167 MCP-инструментов, покрывающих записи, COQL, проектирование схемы, правила рабочих процессов и их действия, вебхуки, массовые операции, теги, заметки, электронную почту, настройки безопасности, а также массовый импорт/экспорт — плюс универсальный инструмент zoho_api_request для всего, что Zoho предоставляет, но для чего нет отдельного инструмента.


🌟 Ключевые возможности

  • Веб-фреймворк FastAPI: Высокопроизводительное production-ready ASGI-приложение на базе Uvicorn.

  • Двойной транспорт: Работает как Streamable HTTP MCP-сервер (для удалённого/облачного хостинга) и как STDIO MCP-сервер (для локального Claude Desktop).

  • Полный жизненный цикл OAuth 2.0: Автоматический обмен кода, обработчик перенаправления в браузере (/auth/callback), зашифрованное хранение токенов и фоновый цикл, поддерживающий токен актуальным, пока сервер работает.

  • Учётные данные, настраиваемые из чата: Указывайте Zoho Client ID/Secret прямо из чата (set_zoho_credentials, или инлайн в get_auth_url/exchange_auth_code) вместо .env — удобно для переключения между Zoho-аккаунтами без перезапуска.

  • Полное создание автоматизации: Создавайте правила рабочих процессов от начала до конца — создавайте действия обновления полей, email-уведомлений, задач и вебхуков, затем подключайте их к правилу с триггерами и критериями.

  • Проектирование схемы: Создавайте пользовательские модули (с профилями, которые требует Zoho), поля, глобальные пиклисты, макеты и воронки продаж.

  • Режим ограниченной сессии: Фильтр безопасности на основе ID (activate_scope), ограничивающий операции конкретными ID записей.

  • Утверждения с участием человека (HITL): Деструктивные действия ставятся в очередь ожидающих запросов вместо выполнения. Переключается с помощью ZOHO_REQUIRE_APPROVAL.

  • Структурированное журналирование активности: Каждое событие аутентификации, вызов API и решение об утверждении записывается в формате JSON и доступно через get_logs() / GET /logs.

  • Зашифрованное хранение токенов: OAuth-токены шифруются при хранении (Fernet/AES), никогда не хранятся в открытом виде.

  • Устойчивый сетевой клиент: Пул httpx-клиентов с автоматическим обновлением токена при 401 и повтором, ограничением частоты при 429, экспоненциальным повтором при 5xx, ограничителем исходящей скорости и обнаружением частичных сбоев в по-записных ответах Zoho.

  • Автоматизированный набор тестов: 35 тестов pytest, покрывающих HTTP-поверхность, регистрацию инструментов, формы полезной нагрузки запросов и защитные механизмы клиента.


Related MCP server: Zoho CRM MCP Server

📁 Структура репозитория

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

⚙️ Установка и настройка

1. Предварительные требования

  • Python 3.10+

  • Приложение Zoho CRM API Console (Zoho API Console)

    • Тип клиента: Server-based Applications

    • Redirect URI: http://localhost:8000/auth/callback (или URL обратного вызова вашего развёртывания)

2. Настройка окружения

cp .env.example .env

Минимальная конфигурация:

ZOHO_CLIENT_ID=1000.xxxxxxx
ZOHO_CLIENT_SECRET=xxxxxxx
ZOHO_REDIRECT_URI=http://localhost:8000/auth/callback
ZOHO_DATA_CENTER=com
PORT=8000

Все поддерживаемые переменные, включая шлюз утверждений, переопределение OAuth-скоупа, ограничение частоты и настройки таймаутов, см. в .env.example.

Работаете более чем с одним Zoho-аккаунтом? ZOHO_CLIENT_ID/ZOHO_CLIENT_SECRET необязательны. Оставьте их пустыми и попросите Claude вызвать set_zoho_credentials(client_id, client_secret, redirect_uri?, data_center?), или передайте client_id/client_secret напрямую в get_auth_url / exchange_auth_code. Переключение client_id очищает токены, сохранённые для предыдущего аккаунта, что предотвращает ошибку Zoho invalid_client при повторном использовании refresh-токена, выданного другому приложению.

3. Установка зависимостей

pip install -r requirements.txt

🚀 Запуск и развёртывание

Вариант A: Локальный веб-сервер FastAPI

python server.py

Или напрямую через Uvicorn:

uvicorn server:app --host 0.0.0.0 --port 8000

После запуска:

Вариант B: Локальный STDIO

python server.py --stdio

Вариант C: Облачное развёртывание (Render, Railway, Docker, AWS, Heroku)

  • Команда запуска: uvicorn server:app --host 0.0.0.0 --port $PORT

  • Путь проверки здоровья: /health

  • Переменные окружения: задайте ZOHO_CLIENT_ID, ZOHO_CLIENT_SECRET, ZOHO_REDIRECT_URI, ZOHO_DATA_CENTER и ZOHO_TOKEN_ENCRYPTION_KEY (чтобы токены переживали перезапуски на эфемерных файловых системах).


🖥️ Интеграция с Claude Desktop

Режим 1: HTTP / удалённое MCP-подключение

{
  "mcpServers": {
    "zoho-crm": {
      "url": "http://localhost:8000/mcp"
    }
  }
}

Режим 2: Локальное STDIO-подключение

{
  "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"
      }
    }
  }
}

🔑 OAuth-поток при первом запуске

  1. Запустите сервер: python server.py

  2. Откройте http://localhost:8000/auth/url или попросите Claude выполнить get_auth_url().

  3. Откройте полученный URL, войдите в Zoho CRM, нажмите Accept.

  4. Zoho перенаправит на /auth/callback?code=...; сервер обменяет код и сохранит зашифрованные токены в ~/.zoho_crm_tokens.json.


🧩 Создание автоматизации: рецепт рабочего процесса

Zoho моделирует правило рабочего процесса как триггер плюс условия, где каждое условие указывает на заранее созданные объекты действий. Создавайте их в таком порядке:

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="...")

Тот же принцип применяется с create_email_notification_action, create_automation_task и create_webhook в качестве источника действий.


🎯 Режим ограниченной сессии (фильтр безопасности)

Ограничьте каждую операцию конкретными ID записей:

  • Активация: activate_scope(module="Deals", record_ids=["4153...001", "4153...002"])

  • REST: POST /scope/activate с {"module": "Leads", "record_ids": ["123", "456"]}

  • Деактивация: deactivate_scope() или POST /scope/deactivate

Пока режим активен, чтение в этом модуле фильтруется по этим ID, а запись в любой другой ID отклоняется с ошибкой OUT_OF_SCOPE.


✅ Утверждения с участием человека (HITL)

По умолчанию деструктивные действия ставятся в очередь ожидающих запросов и возвращают request_id вместо выполнения:

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.

  • Просмотр: list_pending_approvals() или GET /approvals

  • Утвердить и выполнить: approve_action(request_id="...") или POST /approvals/{id}/approve

  • Отклонить и отбросить: reject_action(request_id="...") или POST /approvals/{id}/reject

  • Полностью отключить шлюз: задайте ZOHO_REQUIRE_APPROVAL=false, чтобы эти инструменты выполнялись немедленно.

Каждый запрос, утверждение и отклонение записывается в журнал активности.


📜 Журналирование активности

События аутентификации, исходящие вызовы Zoho API, выполнение функций и решения об утверждениях записываются как записи {timestamp, action, status, details} — хранятся в памяти и дописываются в ~/.zoho_crm_mcp_activity.log.jsonl.

  • Получение: get_logs(limit=50, action=None, status=None) или GET /logs


🔐 Безопасность токенов

  • Токены шифруются при хранении (Fernet/AES) в ~/.zoho_crm_tokens.json.

  • Ключ автоматически генерируется в ~/.zoho_crm_mcp.key при первом запуске (с правами только для пользователя на POSIX) или задаётся явно через ZOHO_TOKEN_ENCRYPTION_KEY для стабильного ключа при перезапусках контейнера.

  • Токены помечаются client_id, который их выдал, и отбрасываются при несовпадении, что предотвращает ошибку Zoho invalid_client после переключения аккаунтов.

  • Исходящие вызовы самоограничиваются (ZOHO_RATE_LIMIT_PER_SEC, по умолчанию 10/сек) в дополнение к откату при 429/5xx.


🧪 Тестирование

pytest -v

Покрывает HTTP-поверхность (/health, /, /auth/*, /scope/*, /approvals/*, /logs), регистрацию всех 167 MCP-инструментов, точные формы полезной нагрузки для рабочих процессов/модулей/заметок/звонков/вебхуков/объединений/блокировок, защитные механизмы валидации на стороне клиента, ограничение частоты и обнаружение частичных сбоев Zoho.

Тесты полностью работают офлайн — учётные данные Zoho не требуются.


🛠️ Справочник MCP-инструментов

Категория

Инструменты

OAuth и аутентификация

get_auth_url, exchange_auth_code, set_zoho_credentials, get_auth_status, get_access_token, refresh_access_token, validate_token, get_token_expiry

Ограниченный режим

activate_scope, deactivate_scope, get_scope_status

HITL и журналирование

list_pending_approvals, approve_action, reject_action, get_logs

Запасной выход

zoho_api_request — вызов любого эндпоинта Zoho v8 с полной обработкой аутентификации и повторных попыток

CRUD записей

create_record, get_record, update_record, delete_record†, list_records, search_records, upsert_record, clone_record, get_record_count, get_deleted_records, get_record_timeline

Пакетные операции (≤100/вызов)

bulk_create_records, bulk_update_records†, bulk_upsert_records, bulk_delete_records

Массовые операции (асинхронные задания)

mass_update_records†, get_mass_update_status, mass_delete_records†, get_mass_delete_status, change_owner†, mass_change_owner†, merge_records

Блокировка и совместный доступ

lock_record, unlock_record, get_record_locking_info, share_record, get_shared_record_details, revoke_shared_record

Связанные записи

get_related_records, get_related_records_count, link_related_records, delink_related_record

Запросы

execute_coql, composite_request

Метаданные и обнаружение

get_modules, get_module_details, get_fields, get_field_details, get_picklist_values, get_layouts, get_layout_structure, get_related_lists, get_custom_views, get_custom_view_details, get_features, get_organizations, get_business_hours, get_currencies, get_email_templates, get_recycle_bin

Проектирование схемы

create_module, update_module, create_field, create_fields, update_field, delete_field†, get_global_picklists, create_global_picklist, update_layout†, activate_layout†, deactivate_layout, delete_layout†, get_pipelines, create_pipeline, update_pipeline

Правила рабочих процессов

get_workflows, get_workflow, get_workflow_configurations, create_workflow, update_workflow, activate_workflow, deactivate_workflow, delete_workflow†, delete_workflows

Действия рабочих процессов

get_field_update_actions, create_field_update_action, update_field_update_action, delete_field_update_action, get_email_notification_actions, create_email_notification_action, delete_email_notification_action, get_automation_tasks, create_automation_task, update_automation_task, get_assignment_rules

Вебхуки

create_webhook, get_webhooks, update_webhook, delete_webhook

Файлы

upload_attachment, get_attachments, download_attachment, delete_attachment, upload_photo, delete_photo

Заметки, звонки и электронная почта

create_note, get_notes, update_note, delete_note, create_call, send_mail, get_from_addresses, get_emails

Теги

get_tags, create_tags, update_tag, delete_tag†, merge_tags, get_tag_record_count, add_tags, remove_tags, add_tags_to_multiple_records

Конвертация лидов

get_lead_conversion_options, convert_lead, mass_convert_leads, get_mass_convert_status

Блюпринт

get_blueprints, execute_blueprint†, create_blueprint, update_blueprint

Пакетное чтение/запись

bulk_read_create_job, bulk_read_job_status, bulk_read_download_result, bulk_write_upload_file, bulk_write_create_job†, bulk_write_job_status

Безопасность и пользователи

get_users, create_user, update_user, delete_user†, get_profiles, create_profile, get_roles, create_role, update_role, get_territories, get_variables, create_variables

Уведомления

get_notification_details, enable_notifications, disable_notifications

Функции

execute_function, get_functions, create_function, update_function, delete_function

Отчеты и панели мониторинга

get_reports (проксирует в Custom Views), create_report, export_report, get_dashboard, create_dashboard_widget

† По умолчанию требуют одобрения. Установите ZOHO_REQUIRE_APPROVAL=false для немедленного выполнения.

* В публичном REST API Zoho CRM нет эндпоинта для этой операции — создание блюпринтов, исходный код функций Deluge и создание отчетов/панелей мониторинга доступны только через интерфейс или относятся к отдельному продукту Zoho Analytics. Эти инструменты возвращают понятное сообщение NOT_SUPPORTED_BY_ZOHO_API с указанием рабочей альтернативы, а не завершаются ошибкой при обращении к несуществующему URL.


🧭 Доступ ко всему, что не перечислено

API Zoho больше, чем любая написанная вручную обёртка. zoho_api_request покрывает остальное с той же аутентификацией, ограничением частоты запросов и обработкой повторных попыток:

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")

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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.

  • 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

  • F
    license
    Not graded
    quality
    D
    maintenance
    Connects 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.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
    -
  • F
    license
    B
    quality
    D
    maintenance
    Exposes Zoho CRM v6 REST API as structured tools for LLM agents via MCP, enabling CRUD operations, search, COQL queries, and more.
    11
    3
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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.
    3
    MIT

Latest Blog Posts

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