Zoho CRM V8 MCP服务器
用于Zoho CRM V8 API集成的综合模型上下文协议(MCP)服务器。此服务器提供对所有Zoho CRM API的无缝访问,包括CRUD操作、元数据管理、文件上传、批量操作、COQL查询等。
特性
✨ API全面覆盖
- CRUD操作:获取、搜索、创建、更新、删除记录
- 元数据API:模块、字段、布局、自定义视图、相关列表
- 文件API:将文件上传到Zoho文件系统(每个文件最多20MB)
- COQL:执行类似SQL的查询以进行复杂的数据检索
- 批量操作:用于大型数据集的异步批量读/写
- 复合API:在单个请求中组合多达5个API调用
- 通知:启用/禁用实时通知
🔐 强健的身份验证
- OAuth 2.0,带有自动令牌刷新功能
- 安全令牌管理
- 指数退避自动重试
⚡ 性能优化
- HTTP请求的连接池
- 元数据缓存(可配置TTL)
- 自动分页处理
- 费率限制管理
🛡️ 全面的错误处理
- 所有Zoho API错误的详细错误映射
- 带有解决提示的用户友好错误消息
- 临时故障自动重试
✅ 完全验证
- 参数约束执行
- 模块特定验证
- 字段限制检查
- 分页规则验证
安装
先决条件
- Python 3.10或更高版本
- 具有API访问权限的Zoho CRM帐户
- OAuth 2.0凭据(客户端ID、客户端密码、刷新令牌)
设置
- 克隆存储库:
git clone https://github.com/yourusername/MCP-Zoho-CRM.git
cd MCP-Zoho-CRM- 安装依赖项:
pip install -e .- 配置环境变量:
cp .env.example .env
# Edit .env with your Zoho OAuth credentialsOAuth 2.0设置
第一步:注册您的申请
- 首选 Zoho API控制台
- 创建新的 自助客户端 应用
- 注意你的 客户端ID 和 客户端密钥
步骤2:生成刷新令牌
- 生成授权码URL:
https://accounts.zoho.com/oauth/v2/auth?scope=ZohoCRM.modules.ALL,ZohoCRM.settings.ALL,ZohoCRM.bulk.ALL,ZohoCRM.coql.READ,ZohoSearch.securesearch.READ,ZohoCRM.Files.CREATE&client_id=YOUR_CLIENT_ID&response_type=code&access_type=offline&redirect_uri=YOUR_REDIRECT_URI- 访问浏览器中的URL并授权应用程序
- 从重定向URL复制授权码
- 将代码替换为刷新令牌:
curl -X POST "https://accounts.zoho.com/oauth/v2/token" \
-d "grant_type=authorization_code" \
-d "client_id=YOUR_CLIENT_ID" \
-d "client_secret=YOUR_CLIENT_SECRET" \
-d "code=YOUR_AUTH_CODE" \
-d "redirect_uri=YOUR_REDIRECT_URI"- 保存 refresh_token 从回复中
步骤3:配置环境
编辑 .env 文件:
ZOHO_CLIENT_ID=your_client_id_here
ZOHO_CLIENT_SECRET=your_client_secret_here
ZOHO_REFRESH_TOKEN=your_refresh_token_here
# API Domain (change based on your data center)
ZOHO_API_DOMAIN=https://www.zohoapis.com # US
# ZOHO_API_DOMAIN=https://www.zohoapis.eu # EU
# ZOHO_API_DOMAIN=https://www.zohoapis.in # India
# ZOHO_API_DOMAIN=https://www.zohoapis.com.au # Australia
# ZOHO_API_DOMAIN=https://www.zohoapis.jp # Japan需要OAuth作用域
完整功能需要以下范围:
ZohoCRM.modules.ALL-完全访问所有模块ZohoCRM.settings.ALL-访问元数据和设置ZohoCRM.bulk.ALL-批量读/写操作ZohoCRM.coql.READ-COQL查询执行ZohoSearch.securesearch.READ-高级搜索功能ZohoCRM.Files.CREATE-文件上传功能ZohoCRM.Files.READ-文件读取功能
对于特定于模块的访问,请使用:
ZohoCRM.modules.{module}.READZohoCRM.modules.{module}.CREATEZohoCRM.modules.{module}.UPDATEZohoCRM.modules.{module}.DELETE
用法
运行服务器
python -m mcp_zoho_crm.server或与MCP客户端一起使用:
{
"mcpServers": {
"zoho-crm": {
"command": "python",
"args": ["-m", "mcp_zoho_crm.server"],
"env": {
"ZOHO_CLIENT_ID": "your_client_id",
"ZOHO_CLIENT_SECRET": "your_client_secret",
"ZOHO_REFRESH_TOKEN": "your_refresh_token"
}
}
}
}可用工具
记录CRUD操作
1. zoho_get_records
从具有高级过滤和分页功能的模块中获取记录。
参数:
module(必需):模块API名称(例如,“潜在客户”、“联系人”、“交易”)record_id:要获取的特定记录IDfields:字段API名称的列表(最大50个,大容量提取必须使用)per_page:每页记录数(默认200条,最多200条)page:页码(仅1-10页,最多2000条记录)page_token:标记超过2000条记录的分页sort_by:排序字段(“id”、“Created_Time”、“Modified_Time”)sort_order:排序顺序(“sc”或“desc”)cvid:自定义视图IDterritory_id:区域ID(仅限交易、联系人、帐户)
例子:
{
"module": "Leads",
"fields": ["First_Name", "Last_Name", "Email", "Company"],
"per_page": 50,
"page": 1,
"sort_by": "Created_Time",
"sort_order": "desc"
}2. zoho_search_records
使用条件、电子邮件、电话或单词搜索搜索记录。
参数:
module(必需):模块API名称criteria:搜索条件(最多10个条件)email:要搜索的电子邮件地址phone:要搜索的电话号码word:要搜索的单词(最少2个字符)
例子:
{
"module": "Leads",
"criteria": "((Company:equals:Acme) and (City:equals:New York))"
}3. zoho_create_records
在模块中创建新记录。
参数:
module(必需):模块API名称records(必填):记录数据列表(最多100个)trigger:自动触发执行lar_id:分配规则ID
例子:
{
"module": "Leads",
"records": [
{
"Last_Name": "Doe",
"First_Name": "John",
"Email": "john.doe@example.com",
"Company": "Acme Corp"
}
]
}4. zoho_update_records
更新现有记录。
参数:
module(必需):模块API名称records(必填):带“id”字段的记录数据列表(最多100个)record_id:特定记录ID(用于单记录更新)
例子:
{
"module": "Leads",
"records": [
{
"id": "5843104000000624046",
"Email": "newemail@example.com",
"Phone": "+1-555-0123"
}
]
}5. zoho_delete_records
从模块中删除记录。
参数:
module(必需):模块API名称record_ids(必填):记录ID列表(最多100个)
例子:
{
"module": "Leads",
"record_ids": ["5843104000000624046", "5843104000000624047"]
}元数据API
6. zoho_get_modules
获取所有模块或特定模块的元数据。
例子:
{
"module": "Leads",
"use_cache": true
}7. zoho_get_fields
获取字段元数据,包括数据类型、约束和最大长度。
例子:
{
"module": "Contacts",
"use_cache": true
}8. zoho_get_layouts
获取布局元数据,包括字段排列和管道。
例子:
{
"module": "Deals",
"use_cache": true
}9. zoho_get_custom_views
获取自定义视图配置。
例子:
{
"module": "Leads",
"use_cache": true
}10. zoho_get_related_lists
获取模块的可用相关列表。
例子:
{
"module": "Accounts"
}文件API
11. zoho_upload_files
将文件上传到Zoho文件系统。
参数:
files(必填):文件路径列表(最多10个,每个20MB)file_type:可选类型(内联图像为“内联”)
例子:
{
"files": ["/path/to/document.pdf", "/path/to/image.jpg"],
"file_type": "inline"
}API公司
12. zoho_execute_coql
执行类似SQL的COQL查询。
例子:
{
"query": "SELECT First_Name, Last_Name, Email FROM Leads WHERE City = 'New York' AND Rating = 'Hot'"
}批量API
13. zoho_bulk_read
为大型数据集创建批量读取作业。
例子:
{
"module": "Contacts",
"fields": ["First_Name", "Last_Name", "Email", "Phone"],
"criteria": "((Created_Time:greater_than:2024-01-01T00:00:00+00:00))",
"file_type": "csv"
}14. zoho_get_bulk_read_job
获取批量读取作业状态和下载URL。
例子:
{
"job_id": "5843104000001856001"
}15. zoho_bulk_write
为批处理操作创建批量写入作业。
例子:
{
"module": "Leads",
"file_id": "5843104000001234567",
"operation": "insert"
}16. zoho_get_bulk_write_job
获取批量写入作业状态。
例子:
{
"job_id": "5843104000001856002"
}复合API
17. zoho_composite_request
在单个请求中执行最多5个API调用。
例子:
{
"requests": [
{
"method": "GET",
"url": "/crm/v8/Leads?fields=Last_Name,Email&per_page=2"
},
{
"method": "POST",
"url": "/crm/v8/Contacts",
"body": {
"data": [
{
"Last_Name": "Smith",
"Email": "smith@example.com"
}
]
}
}
]
}通知API
18. zoho_enable_notifications
启用实时通知。
例子:
{
"channel_id": "my_channel_1",
"events": ["Leads.create", "Leads.edit"],
"notify_url": "https://myapp.com/webhook"
}19. zoho_disable_notifications
禁用通知。
例子:
{
"channel_ids": ["my_channel_1", "my_channel_2"]
}常见工作流
工作流程1:创建新潜在客户
# Step 1: Get field metadata to understand required fields
get_fields_result = zoho_get_fields(module="Leads")
# Step 2: Create the lead
create_result = zoho_create_records(
module="Leads",
records=[
{
"Last_Name": "Johnson",
"First_Name": "Sarah",
"Email": "sarah.johnson@techcorp.com",
"Company": "TechCorp Inc",
"Phone": "+1-555-0199",
"Lead_Status": "Contacted"
}
]
)工作流程2:搜索和更新交易
# Step 1: Search for deals in specific stage
search_result = zoho_search_records(
module="Deals",
criteria="((Stage:equals:Negotiation) and (Amount:greater_than:50000))"
)
# Step 2: Update found deals
update_result = zoho_update_records(
module="Deals",
records=[
{
"id": deal["id"],
"Stage": "Closed Won",
"Closing_Date": "2024-12-31"
}
for deal in search_result["data"]
]
)工作流程3:批量导出联系人
# Step 1: Create bulk read job
bulk_job = zoho_bulk_read(
module="Contacts",
fields=["First_Name", "Last_Name", "Email", "Phone", "Account_Name"],
file_type="csv"
)
# Step 2: Check job status (poll until completed)
job_status = zoho_get_bulk_read_job(job_id=bulk_job["data"][0]["id"])
# Step 3: Download the file using the download_url from job_statusAPI约束和限制
分页限制
- 记录1-2000:使用
page和per_page参数 - 记录2001-100000:必须使用
page_token从响应 - 最大每页:200条记录(标准),2000条(批量读取)
- 最大分页:共100000条记录
字段限制
- 请求中的最大字段数:50个字段
- 最大搜索条件:10个条件
记录限制
- 每次创建/更新的最大记录数:100条记录
- 每次删除的最大记录数:100条记录
- 最大搜索结果数:2000条记录
文件限制
- 最大文件大小:每个文件20 MB
- 每次上传的最大文件数:10个文件
复合API
- 最大请求数:每个复合请求5个API调用
错误处理
服务器通过用户友好的消息提供全面的错误处理:
常见错误
OAUTH_SCOPE_MISMATCH(401)
问题:缺少所需的OAuth作用域 解决方案:使用所需的作用域重新生成令牌
离散分页限制已超过(400)
问题:请求超过2000条没有page_token的记录 解决方案:使用 page_token 2000年以后的记录回复
模糊处理(400)
问题:使用不兼容的参数(例如,page+page_token) 解决方案:使用其中之一 page 或 page_token,不是两者都有
已超过限制(400)
问题:超出请求限制 解决方案:减少请求中的字段/记录/标准数量
重复数据(400)
问题:唯一字段中的重复值 解决方案:使用其他值或更新现有记录
模块特定规则
引导模块
- 必填字段:
Last_Name - 支持
converted参数('false'、'true'、'both') - 转换字段:
Converted__s,Converted_Date_Time
联系人模块
- 必填字段:
Last_Name - 支持区域过滤
- 只读:
full_name(名字+姓氏的串联)
账户模块
- 必填字段:
Account_Name - 支持区域过滤
交易模块
- 必填字段:
Deal_Name,Stage - 启用管道时:
Pipeline也是必需的 - 支持区域过滤
- 使用GetPipelinesneneneba API获取管道详细信息
任务模块
- 必填字段:
Subject(多线)
呼叫模块
- 必填字段:
Subject,Call_Type,Call_Start_Time,Call_Duration - 约束:
Call_Duration不能为零
事件模块
- 必填字段:
Event_Title,Start_DateTime,End_DateTime,Remind_At - 最多参与者:50
产品模块
- 必填字段:
Product_Name
报价单/发票/销售订单/采购订单
- 必修的:
Subject和行项目子表单 - 库存子表单仅在获取特定记录时可用
发展
项目结构
MCP-Zoho-CRM/
├── src/
│ └── mcp_zoho_crm/
│ ├── __init__.py
│ ├── auth.py # OAuth 2.0 authentication
│ ├── client.py # Base API client
│ ├── cache.py # Metadata caching
│ ├── config.py # Configuration management
│ ├── errors.py # Error handling
│ ├── records.py # CRUD operations
│ ├── metadata.py # Metadata APIs
│ ├── files.py # Files API
│ ├── coql.py # COQL queries
│ ├── bulk.py # Bulk operations
│ ├── composite.py # Composite API
│ ├── notifications.py # Notifications
│ └── server.py # MCP server
├── pyproject.toml
├── README.md
├── .env.example
└── .gitignore测试
# Install dev dependencies
pip install -e ".[dev]"
# Run tests (when available)
pytest故障排除
令牌刷新问题
- 在中验证OAuth凭据
.env - 检查刷新令牌是否未过期
- 确保包括所需的范围
- 验证API域是否与您的数据中心匹配
速率限制
- 服务器以指数回退方式自动重试
- 最大重试次数:4次尝试(可配置)
- 等待时间:2秒、4秒、8秒、16秒
分页错误
- 对于>2000条记录,请始终使用
page_token - 使用时不要修改参数
page_token page_token24小时后过期
文件上传失败
- 检查文件大小(最大20MB)
- 验证是否支持文件格式
- 确保文件存在且可读
- 检查文件中的病毒/恶意软件
支持和资源
许可证
MIT许可证-有关详细信息,请参阅许可证文件
贡献
欢迎投稿!请随时提交拉取请求。
更新日志
版本1.0.0(2024-11-15)
- 初始版本
- 完整的Zoho CRM V8 API支持
- OAuth 2.0身份验证,自动刷新
- 全面的错误处理
- 元数据缓存
- 所有CRUD操作
- 批量API
- COQL支持
- 复合API
- 文件API
- 通知API
