一个统一的模型上下文协议(MCP)服务器,提供Zoho CRM与Zoho Books之间的无缝集成,使AI助手如Claude能够通过标准化工具和资源与这两个系统进行交互。
git clone <repository-url>
cd zoho-mcp-server
npm install
cp .env.example .env
.env中配置您的环境变量:# Zoho OAuth配置
ZOHO_CLIENT_ID=your_client_id_here
ZOHO_CLIENT_SECRET=your_client_secret_here
ZOHO_REDIRECT_URI=http://localhost:3000/callback
ZOHO_REFRESH_TOKEN=your_refresh_token_here
# Zoho数据中心(com, eu, in, com.au, jp)
ZOHO_DATA_CENTER=com
# Zoho Books组织ID(用于Books功能)
ZOHO_BOOKS_ORGANIZATION_ID=your_organization_id_here
# Zoho API范围
ZOHO_SCOPES=ZohoCRM.modules.ALL,ZohoCRM.settings.ALL,ZohoBooks.fullaccess.all
# 启用多配置系统
MULTI_CONFIG_ENABLED=true
# 当前使用的环境
MULTI_CONFIG_ENVIRONMENT=default
# 配置文件路径(可选)
MULTI_CONFIG_PATH=./zoho-config.json
# 旧版变量(为了向后兼容)
ZOHO_CLIENT_ID=your_client_id_here
ZOHO_CLIENT_SECRET=your_client_secret_here
ZOHO_REDIRECT_URI=http://localhost:3000/callback
ZOHO_REFRESH_TOKEN=your_refresh_token_here
ZOHO_DATA_CENTER=com
ZOHO_BOOKS_ORGANIZATION_ID=your_organization_id_here
ZOHO_SCOPES=ZohoCRM.modules.ALL,ZohoCRM.settings.ALL,ZohoBooks.fullaccess.all
关于详细的多配置设置,请参阅MULTI_CONFIG_GUIDE.md。
http://localhost:3000/callbacknpm run build
npm start
对于带有自动重新加载的开发模式:
npm run dev
在您的Claude桌面MCP配置中添加以下内容:
{
"mcpServers": {
"zoho-crm-books": {
"command": "node",
"args": ["C:\\zoho-mcp-server\\dist\\server.js"],
"env": {
"ZOHO_CLIENT_ID": "your_client_id",
"ZOHO_CLIENT_SECRET": "your_client_secret",
"ZOHO_REFRESH_TOKEN": "your_refresh_token",
"ZOHO_DATA_CENTER": "com",
"ZOHO_BOOKS_ORGANIZATION_ID": "your_org_id"
}
}
}
}
在您的VS Code MCP配置中添加以下内容:
{
"servers": {
"zoho-crm-books": {
"command": "node",
"args": ["C:\\zoho-mcp-server\\dist\\server.js"]
}
}
}
同步CRM账户到Books客户。
参数:
source_module: "accounts"(固定值)target_module: "customers"(固定值)filters(可选):
limit: 要处理的记录数(1-200)page: 要处理的页码示例:
{
"source_module": "accounts",
"target_module": "customers",
"filters": {
"limit": 50,
"page": 1
}
}
同步CRM联系人到Books客户(双向同步)。
参数:
source_module: "contacts"(固定值)target_module: "customers"(固定值)filters(可选):
limit: 要处理的记录数(1-200)page: 要处理的页码示例:
{
"source_module": "contacts",
"target_module": "customers",
"filters": {
"limit": 50,
"page": 1
}
}
同步Books客户到CRM联系人(双向同步)。
参数:
source_module: "customers"(固定值)target_module: "contacts"(固定值)filters(可选):
limit: 要处理的记录数(1-200)page: 要处理的页码示例:
{
"source_module": "customers",
"target_module": "contacts",
"filters": {
"limit": 50,
"page": 1
}
}
从CRM交易创建Books发票。
参数:
deal_id: CRM交易ID(必需)customer_id: Books客户ID(可选)invoice_date: 发票日期(可选,默认为今天)due_date: 到期日(可选,默认为今天起30天)include_line_items: 包含交易金额作为明细项(默认:true)send_email: 发送发票电子邮件给客户(默认:false)示例:
{
"deal_id": "123456789",
"customer_id": "987654321",
"include_line_items": true,
"send_email": true
}
跨CRM和Books记录搜索。
参数:
module: 要搜索的模块("accounts", "contacts", "deals", "leads", "customers", "invoices")criteria: 搜索标准(必需)fields: 要返回的字段(可选)page: 页码(默认:1)per_page: 每页结果数(默认:20,最大:200)示例:
{
"module": "accounts",
"criteria": "科技公司",
"fields": ["Account_Name", "Email", "Phone"],
"page": 1,
"per_page": 10
}
获取Books中的所有项目,可选过滤和分页。
参数:
page: 页码(默认:1)per_page: 每页结果数(默认:20,最大:200)search_text: 搜索文本(可选)filter_by: 过滤标准(可选)sort_column: 排序列(可选)sort_order: 排序顺序"A"或"D"(可选)根据ID获取Books中的特定项目。
参数:
item_id: 项目ID(必需)在Books中创建新项目。
参数:
name: 项目名称(必需)description: 项目描述(可选)rate: 项目费率(可选)unit: 测量单位(可选)sku: 库存单位(可选)product_type: 产品类型(可选)is_taxable: 是否征税(可选)tax_id: 税务ID(可选)item_type: 项目类型(可选)更新Books中的现有项目。
参数:
item_id: 项目ID(必需)books_create_item中的任何字段删除Books中的项目。
参数:
item_id: 项目ID(必需)获取Books中的所有报价,可选过滤和分页。
参数:
page: 页码(默认:1)per_page: 每页结果数(默认:20,最大:200)customer_id: 根据客户ID过滤(可选)status: 根据状态过滤(可选)search_text: 搜索文本(可选)filter_by: 过滤标准(可选)sort_column: 排序列(可选)sort_order: 排序顺序"A"或"D"(可选)在Books中创建新的报价。
参数:
customer_id: 客户ID(必需)line_items: 明细项数组(必需)
name: 项目名称(必需)quantity: 数量(必需)rate: 费率(必需)description: 描述(可选)unit: 单位(可选)item_id: 项目ID(可选)tax_id: 税务ID(可选)estimate_date: 报价日期(可选)expiry_date: 到期日期(可选)currency_code: 货币代码(可选)discount: 折扣金额(可选)notes: 备注(可选)terms: 条款(可选)将Books中的报价转换为发票。
参数:
estimate_id: 报价ID(必需)获取Books中的所有付款,可选过滤和分页。
参数:
page: 页码(默认:1)per_page: 每页结果数(默认:20,最大:200)customer_id: 根据客户ID过滤(可选)search_text: 搜索文本(可选)filter_by: 过滤标准(可选)sort_column: 排序列(可选)sort_order: 排序顺序"A"或"D"(可选)在Books中创建新的付款。
参数:
customer_id: 客户ID(必需)payment_mode: 付款方式(必需)amount: 付款金额(必需)date: 付款日期(必需)invoices: 要应用付款的发票数组(必需)
invoice_id: 发票ID(必需)invoice_number: 发票编号(必需)amount_applied: 应用于发票的金额(必需)tax_amount_withheld: 扣除的税额(可选)reference_number: 参考编号(可选)description: 付款描述(可选)bank_charges: 银行费用(可选)currency_code: 货币代码(可选)exchange_rate: 汇率(可选)获取CRM中的所有任务,可选过滤和分页。
参数:
page: 页码(默认:1)per_page: 每页结果数(默认:20,最大:200)sort_by: 排序列(可选)sort_order: 排序顺序"asc"或"desc"(可选)status: 根据状态过滤(可选)due_date: 根据到期日期过滤(可选)在CRM中创建新的任务。
参数:
Subject: 任务主题(必需)Status: 任务状态(可选)Priority: 任务优先级(可选)Due_Date: 到期日期(可选)What_Id: 相关记录ID(可选)Who_Id: 联系人ID(可选)Description: 任务描述(可选)Related_To: 相关字段(可选)Remind_At: 提醒时间(可选)Recurring_Activity: 周期性活动设置(可选)获取CRM中的所有事件,可选过滤和分页。
参数:
page: 页码(默认:1)per_page: 每页结果数(默认:20,最大:200)sort_by: 排序列(可选)sort_order: 排序顺序"asc"或"desc"(可选)start_date: 根据开始日期过滤(可选)end_date: 根据结束日期过滤(可选)在CRM中创建新的事件。
参数:
Subject: 事件主题(必需)Start_DateTime: 开始日期和时间(必需)End_DateTime: 结束日期和时间(必需)Description: 事件描述(可选)Location: 事件地点(可选)What_Id: 相关记录ID(可选)Who_Id: 联系人ID(可选)Event_Title: 事件标题(可选)All_day: 整天事件标志(可选)Participants: 参与者ID数组(可选)Remind_At: 提醒时间(可选)Recurring_Activity: 周期性活动设置(可选)获取特定CRM记录的笔记。
参数:
module: CRM模块名称(必需)record_id: 记录ID(必需)page: 页码(默认:1)per_page: 每页结果数(默认:20,最大:200)为CRM记录创建新的笔记。
参数:
module: CRM模块名称(必需)record_id: 记录ID(必需)Note_Title: 笔记标题(必需)Note_Content: 笔记内容(必需)Parent_Id: 父记录ID(可选)发送CRM记录的电子邮件。
参数:
module: CRM模块名称(必需)record_id: 记录ID(必需)to: 收件人电子邮件地址数组(必需)subject: 邮件主题(必需)content: 邮件内容(必需)cc: 抄送电子邮件地址数组(可选)bcc: 密送电子邮件地址数组(可选)mail_format: 邮件格式(可选)template_id: 邮件模板ID(可选)获取CRM记录的附件。
参数:
module: CRM模块名称(必需)record_id: 记录ID(必需)page: 页码(默认:1)per_page: 每页结果数(默认:20,最大:200)列出多配置系统中的所有可用环境。
参数: 无
示例:
{
"name": "config_list_environments",
"arguments": {}
}
切换到不同的环境。
参数:
environmentName: 要切换到的环境名称(必需)示例:
{
"name": "config_switch_environment",
"arguments": {
"environmentName": "production"
}
}
列出当前环境中的所有配置文件。
参数: 无
示例:
{
"name": "config_list_profiles",
"arguments": {}
}
在当前环境中切换到不同的配置文件。
参数:
profileName: 要切换到的配置文件名称(必需)示例:
{
"name": "config_switch_profile",
"arguments": {
"profileName": "backup"
}
}
向当前环境添加新的配置文件。
参数:
name: 配置文件名称(必需)description: