Espomcp
概述
工具列表
内容详情
替代品
什么是EspoCRM MCP Server?
EspoCRM MCP Server是一个智能桥梁,连接您的AI助手(如Claude、ChatGPT等)与EspoCRM系统。它允许您使用自然语言来管理客户关系、安排会议、跟踪商机、分配任务等,无需手动登录CRM系统。如何使用EspoCRM MCP Server?
您可以通过两种方式使用:1) 直接集成到AI助手工具中,通过47个专用工具管理CRM数据;2) 使用内置的AI聊天机器人,在EspoCRM界面中直接通过对话进行所有操作。适用场景
适用于销售团队、客户支持、项目经理、行政助理等需要频繁使用CRM系统的角色。特别适合希望通过AI提高工作效率、减少重复性数据录入工作的团队。主要功能
AI聊天机器人
内置的浮动聊天窗口,可直接在EspoCRM中使用自然语言进行所有CRM操作
联系人管理
创建、搜索、更新联系人信息,支持批量操作和高级筛选
会议安排
安排会议、管理参会人员、同步日历事件,支持Google Calendar集成
商机跟踪
创建销售机会、跟踪进展、管理金额和预期关闭日期
任务管理
创建待办事项、分配任务、设置优先级和截止日期
线索转化
将潜在客户转化为正式客户、联系人或商机
团队管理
管理团队成员、分配角色、设置权限
自定义实体支持
支持EspoCRM中的所有自定义实体和字段
优势
自然语言交互:无需学习复杂界面,用对话方式管理CRM
47个专用工具:覆盖CRM所有核心功能
实时同步:所有操作立即反映在EspoCRM中
多平台支持:可在任何支持MCP协议的AI助手工具中使用
安全可靠:支持API密钥和HMAC双重认证
易于部署:提供Docker容器和详细部署指南
局限性
需要EspoCRM实例:必须已有EspoCRM系统才能使用
网络要求:需要稳定的网络连接访问CRM服务器
权限依赖:操作受限于用户在EspoCRM中的权限设置
学习曲线:需要了解基本的CRM概念和数据结构
如何使用
环境准备
确保您有可访问的EspoCRM实例,并获取API访问权限
安装服务器
克隆代码库并安装依赖包
配置连接
设置环境变量连接到您的EspoCRM
启动服务
构建并启动MCP服务器
集成到AI助手
在您的AI助手工具中配置MCP服务器连接
使用案例
销售跟进自动化
销售代表使用AI助手自动记录客户互动并安排跟进任务
会议安排助手
行政助理通过对话快速安排团队会议
客户支持工单管理
客服团队快速创建和处理支持请求
潜在客户转化流程
市场团队将网站线索转化为正式客户
常见问题
我需要有编程知识才能使用这个工具吗?
不需要。主要使用方式是通过自然语言与AI助手对话,或者使用内置的聊天机器人界面。只有服务器部署和配置需要基本的技术知识。
支持哪些EspoCRM版本?
支持EspoCRM 7.0及以上版本。建议使用最新版本以获得最佳兼容性和功能支持。
数据安全如何保障?
支持API密钥和HMAC双重认证,所有通信建议通过HTTPS加密。服务器不存储任何CRM数据,只是作为中间桥梁。
可以同时管理多个EspoCRM实例吗?
每个MCP服务器实例只能连接一个EspoCRM。如果需要连接多个,可以运行多个服务器实例。
响应速度如何?
响应速度取决于网络延迟和EspoCRM服务器的性能。通常操作在1-3秒内完成。复杂搜索或大量数据操作可能需要更长时间。
支持自定义字段和实体吗?
完全支持。可以使用通用实体操作工具管理任何自定义实体和字段。
如何获取技术支持?
可以通过GitHub Issues提交问题,或查阅项目文档。社区支持和商业支持选项正在规划中。
相关资源
GitHub代码库
完整的源代码、文档和问题跟踪
EspoCRM官方文档
EspoCRM系统的官方文档和API参考
MCP协议规范
Model Context Protocol的官方技术规范
Docker部署指南
使用Docker容器化部署的详细指南
示例配置文件
环境配置文件的完整示例
安装
复制以下命令到你的Client进行配置
注意:您的密钥属于敏感信息,请勿与任何人分享。
🚀 EspoCRM MCP 服务器
这是一个全面的模型上下文协议(MCP)服务器,用于与 EspoCRM 进行无缝集成。该服务器使 AI 助手能够通过标准化接口与你的 EspoCRM 实例进行交互,为联系人、账户、商机、会议、用户、任务、潜在客户等提供完整的 CRUD 操作,以及高级系统管理功能。
🤖 新增:AI 聊天机器人集成 - 现在包含一个完整的聊天机器人界面,可直接嵌入到你的 EspoCRM 中,通过自然语言访问所有 47 个 MCP 工具!
🚀 快速开始
前提条件
- Node.js 18+
- npm 或 yarn
- 具有 API 访问权限的 EspoCRM 实例
- 有效的 API 凭证
安装
- 克隆仓库
git clone https://github.com/zaphod-black/EspoMCP.git
cd EspoMCP
- 安装依赖
npm install
- 配置环境
cp .env.example .env
# 使用你的 EspoCRM 凭证编辑 .env 文件
- 构建项目
npm run build
- 测试连接
npm run test:config
✨ 主要特性
核心功能
- 完整的 CRUD 操作 - 创建、读取、更新和删除实体
- 多实体支持 - 联系人、账户、商机、会议、用户、任务和潜在客户
- 高级搜索和过滤 - 支持日期范围、分页和复杂过滤器的灵活搜索
- 任务管理 - 具有父关系和用户分配的完整任务生命周期管理
- 潜在客户管理 - 从创建到转化的完整潜在客户管道管理
- 会议管理 - 与日历全面集成,支持参会人员管理
- 用户管理 - 全面的用户搜索和查找功能
- 实时验证 - 基于 Zod 的所有操作模式验证
- 全面日志记录 - 由 Winston 驱动的多级日志记录
认证与安全
- 多种认证方法 - 支持 API 密钥和 HMAC 认证
- 安全配置 - 基于环境的配置管理
- 速率限制 - 内置速率限制以保护 API
- 错误处理 - 强大的错误处理和详细日志记录
日历集成
- 会议操作 - 创建、搜索、更新和管理会议
- 参会人员管理 - 将联系人与用户关联到会议
- 日期/时间过滤 - 高级日期范围搜索功能
- 与 Google 日历同步兼容 - 专为日历同步工作流设计
AI 聊天机器人集成 🤖
- 浮动聊天窗口 - 美观且不干扰的聊天气泡界面
- 自然语言处理 - 使用纯英语聊天来执行 CRM 操作
- 实时通信 - 由 WebSocket 驱动的即时响应
- 访问 47 个 MCP 工具 - 通过聊天实现完整的 CRM 功能
- 嵌入 EspoCRM - 直接集成到你的 EspoCRM 界面中
- 移动响应式 - 在所有设备上无缝运行
开发者体验
- TypeScript 支持 - 全面支持 TypeScript 并采用严格类型检查
- Docker 支持 - 支持容器化部署
- 全面测试 - 多个测试脚本和验证工具
- 符合 MCP 2024/2025 规范 - 支持最新的 MCP 规范
📦 安装指南
克隆仓库
git clone https://github.com/zaphod-black/EspoMCP.git
cd EspoMCP
安装依赖
npm install
配置环境
cp .env.example .env
# 使用你的 EspoCRM 凭证编辑 .env 文件
构建项目
npm run build
测试连接
npm run test:config
💻 使用示例
任务管理
// 创建一个分配给用户且具有父关系的任务
await client.callTool('create_task', {
name: '跟进潜在客户讨论',
assignedUserId: 'user123',
parentType: 'Lead',
parentId: 'lead456',
priority: '高',
status: '未开始',
dateEnd: '2025-08-15',
description: '联系潜在客户了解定价问题'
});
// 按分配用户和状态搜索任务
await client.callTool('search_tasks', {
assignedUserId: 'user123',
status: '已开始',
priority: '高',
dueDateFrom: '2025-08-01',
dueDateTo: '2025-08-31'
});
// 将任务分配给其他用户
await client.callTool('assign_task', {
taskId: 'task789',
assignedUserId: 'user456'
});
潜在客户管理
// 创建一个新的潜在客户
await client.callTool('create_lead', {
firstName: '约翰',
lastName: '史密斯',
emailAddress: 'john.smith@example.com',
accountName: '史密斯工业',
source: '网站',
status: '新',
assignedUserId: 'user123',
description: '对企业解决方案感兴趣'
});
// 按状态和来源搜索潜在客户
await client.callTool('search_leads', {
status: '处理中',
source: '网站',
assignedUserName: '销售代表',
createdFrom: '2025-08-01',
limit: 20
});
// 将潜在客户转化为联系人和账户
await client.callTool('convert_lead', {
leadId: 'lead123',
createContact: true,
createAccount: true,
createOpportunity: true,
opportunityName: '史密斯工业 - 企业交易',
opportunityAmount: 50000
});
团队与角色管理
// 将用户添加到团队并指定职位
await client.callTool('add_user_to_team', {
userId: 'user123',
teamId: '销售团队',
position: '销售经理'
});
// 获取团队的所有成员
await client.callTool('get_team_members', {
teamId: '销售团队',
limit: 50
});
// 为用户分配角色以进行权限管理
await client.callTool('assign_role_to_user', {
userId: 'user123',
roleId: '经理角色'
});
// 根据条件搜索团队
await client.callTool('search_teams', {
name: '销售',
description: '收入'
});
// 获取用户的有效权限
await client.callTool('get_user_permissions', {
userId: 'user123'
});
通用实体操作
// 创建任何实体类型(包括自定义实体)
await client.callTool('create_entity', {
entityType: '自定义产品',
data: {
name: '高级小部件',
price: 199.99,
category: '电子产品',
inStock: true
}
});
// 使用灵活的过滤器搜索任何实体
await client.callTool('search_entity', {
entityType: '自定义订单',
filters: {
status: '待处理',
totalAmount: 1000,
customerType: '企业'
},
select: ['id', '订单编号', '客户名称', '总金额'],
orderBy: 'createdAt',
order: 'desc'
});
// 更新任何实体记录
await client.callTool('update_entity', {
entityType: '自定义产品',
entityId: 'prod123',
data: {
price: 179.99,
inStock: false,
lastModified: '2025-07-20T10:30:00Z'
}
});
// 删除任何实体记录
await client.callTool('delete_entity', {
entityType: '自定义产品',
entityId: 'prod123'
});
// 获取特定实体并选择字段
await client.callTool('get_entity', {
entityType: '自定义订单',
entityId: 'order456',
select: ['订单编号', '客户名称', '商品', '总金额']
});
关系管理
// 将实体关联在一起(例如,将联系人关联到账户)
await client.callTool('link_entities', {
entityType: 'Contact',
entityId: 'contact123',
relatedEntityType: 'Account',
relatedEntityId: 'account456',
relationshipName: 'accounts'
});
// 获取实体的所有关系
await client.callTool('get_entity_relationships', {
entityType: 'Contact',
entityId: 'contact123',
relationshipName: 'opportunities'
});
// 移除实体之间的关系
await client.callTool('unlink_entities', {
entityType: 'Contact',
entityId: 'contact123',
relatedEntityType: 'Account',
relatedEntityId: 'account456',
relationshipName: 'accounts'
});
沟通工具
// 创建一个通话记录
await client.callTool('create_call', {
name: '跟进与约翰·史密斯的通话',
status: '已完成',
direction: '呼出',
duration: 1800, // 30 分钟,以秒为单位
parentType: 'Contact',
parentId: 'contact123',
description: '讨论了定价选项和下一步计划'
});
// 根据条件搜索通话记录
await client.callTool('search_calls', {
status: '已完成',
direction: '呼出',
dateFrom: '2025-07-01',
dateTo: '2025-07-31',
limit: 20
});
// 创建一个支持案例
await client.callTool('create_case', {
name: '登录问题',
status: '新',
priority: '高',
type: '技术',
accountId: 'account123',
description: '客户无法登录门户'
});
// 为任何实体添加备注
await client.callTool('add_note', {
parentType: 'Lead',
parentId: 'lead123',
post: '客户对企业功能表示感兴趣。下周安排演示。',
data: {
isInternal: false
}
});
// 根据父实体搜索备注
await client.callTool('search_notes', {
parentType: 'Lead',
parentId: 'lead123',
createdFrom: '2025-07-01',
limit: 10
});
AI 聊天机器人使用
嵌入式聊天机器人理解自然语言,可以执行任何 CRM 操作:
// 用户可以输入的自然语言示例:
"创建一个名为莎拉·约翰逊的联系人,邮箱为 sarah@techcorp.com"
"查找软件行业的所有账户"
"显示超过 50,000 美元的商机"
"创建一个跟进潜在客户约翰·史密斯的任务"
"安排明天下午 2 点的会议"
"系统健康状态如何?"
"将联系人 ID 123 关联到账户 TechCorp"
"在案例 #456 中添加备注:'客户对解决方案满意'"
会议管理
// 创建一个带有参会人员的会议
await client.callTool('create_meeting', {
name: '项目启动会议',
dateStart: '2025-08-01T10:00:00',
dateEnd: '2025-08-01T11:00:00',
location: 'A 会议室',
description: '初始项目规划会议',
status: '计划中',
contactsIds: ['contact123', 'contact456'],
usersIds: ['user789']
});
// 按日期范围搜索会议
await client.callTool('search_meetings', {
dateFrom: '2025-08-01',
dateTo: '2025-08-31',
status: '计划中',
limit: 20
});
用户管理
// 通过电子邮件查找用户
await client.callTool('get_user_by_email', {
emailAddress: 'john.doe@company.com'
});
// 搜索活跃用户
await client.callTool('search_users', {
isActive: true,
type: '普通用户',
limit: 50
});
带日期过滤的高级联系人搜索
// 搜索上周创建的联系人
await client.callTool('search_contacts', {
searchTerm: '经理',
createdFrom: '2025-07-13',
createdTo: '2025-07-20',
limit: 10
});
日历集成工作流
// 完整的日历同步工作流
const meetings = await client.callTool('search_meetings', {
dateFrom: '2025-08-01',
dateTo: '2025-08-31'
});
const user = await client.callTool('get_user_by_email', {
emailAddress: 'calendar@company.com'
});
const newMeeting = await client.callTool('create_meeting', {
name: '从 Google 日历同步的会议',
dateStart: '2025-08-15T14:00:00',
dateEnd: '2025-08-15T15:00:00',
googleEventId: 'google_event_123'
});
📚 详细文档
可用工具
MCP 服务器为 EspoCRM 集成提供了 47 个全面的工具:
联系人管理
create_contact- 创建支持所有字段的新联系人search_contacts- 使用日期范围过滤搜索和筛选联系人get_contact- 通过 ID 检索特定联系人
账户管理
create_account- 创建新的公司/组织账户search_accounts- 使用日期范围过滤搜索和筛选账户
商机管理
create_opportunity- 创建新的销售商机search_opportunities- 使用包括金额范围在内的高级过滤器搜索商机
会议管理
create_meeting- 创建支持参会人员管理和日历集成的会议search_meetings- 使用日期范围、状态和地点过滤器搜索会议get_meeting- 检索包括参会人员在内的详细会议信息update_meeting- 更新现有会议,支持所有会议字段
用户管理
search_users- 按用户名、电子邮件、姓名、类型和状态搜索用户get_user_by_email- 基于电子邮件直接查找用户,用于日历同步操作
任务管理
create_task- 创建支持父实体(潜在客户、账户、联系人、商机)的任务search_tasks- 按分配用户、状态、优先级、父实体和截止日期搜索任务get_task- 检索包括关系在内的详细任务信息update_task- 更新任务属性,包括状态、优先级和截止日期assign_task- 将任务分配或重新分配给特定用户
潜在客户管理
create_lead- 创建支持所有字段并进行验证的新潜在客户search_leads- 按状态、来源、分配用户和日期范围搜索潜在客户update_lead- 更新潜在客户属性和状态convert_lead- 将潜在客户转化为联系人、账户和/或商机assign_lead- 将潜在客户分配或重新分配给特定用户
团队与角色管理
add_user_to_team- 将用户添加到团队,并可选择指定职位remove_user_from_team- 从团队中移除用户assign_role_to_user- 为用户分配角色以进行权限管理get_user_teams- 获取用户所属的所有团队get_team_members- 获取特定团队的所有成员search_teams- 按名称和描述搜索团队get_user_permissions- 根据角色获取用户的有效权限
通用实体操作
create_entity- 为任何实体类型(包括自定义实体)创建记录search_entity- 使用灵活的过滤器和字段选择搜索任何实体类型update_entity- 通过 ID 更新任何实体记录,支持灵活的数据delete_entity- 通过 ID 删除任何实体记录get_entity- 获取特定实体记录,并可选择字段
关系管理
link_entities- 在任意两个实体记录之间创建关系unlink_entities- 移除实体记录之间的关系get_entity_relationships- 获取实体的所有相关记录,并包含关系详细信息
沟通工具
create_call- 创建支持状态、方向和持续时间跟踪的通话记录search_calls- 按状态、方向、联系人及日期范围搜索通话记录create_case- 创建支持优先级、类型和账户关联的支持案例search_cases- 按状态、优先级、类型和分配情况搜索案例add_note- 为任何实体记录添加备注,用于文档记录和跟进search_notes- 按父实体、作者和日期范围搜索备注create_document- 创建支持文件附件和元数据的文档记录
系统工具
health_check- 验证服务器和 EspoCRM 在所有实体上的连接性
增强搜索功能
所有搜索工具现在支持高级过滤选项:
日期范围过滤
createdFrom/createdTo- 按创建日期范围过滤modifiedFrom/modifiedTo- 按修改日期范围过滤dateFrom/dateTo- 按日期范围过滤会议
会议特定过滤器
status- 按会议状态(计划中、已举行、未举行)过滤location- 按会议地点过滤assignedUserName- 按分配用户过滤
用户特定过滤器
userName- 按用户名搜索emailAddress- 按电子邮件地址搜索firstName/lastName- 按姓名组件搜索isActive- 按活动状态过滤type- 按用户类型(管理员、普通用户、门户用户、API 用户)过滤
🔧 技术细节
测试
自动化测试
项目包含全面的测试工具:
# 测试配置和连接性
npm run test:config
# 测试 MCP 客户端功能
npm run test:client
# 运行单元测试
npm test
手动测试脚本
连接测试
node test-connection.js
测试基本连接性、API 端点和认证。
增强工具测试
node test-enhanced-tools.js
全面测试所有增强功能,包括会议和用户管理。
随机联系人生成
node create-random-contact.js
创建一个随机测试联系人以验证 CRUD 操作。
开发
项目结构
EspoMCP/
├── src/ # 源代码
│ ├── config/ # 配置管理
│ ├── espocrm/ # EspoCRM API 客户端和类型
│ │ ├── client.ts # 带有认证的 HTTP 客户端
│ │ └── types.ts # 所有实体的 TypeScript 接口
│ ├── tools/ # MCP 工具实现
│ ├── utils/ # 实用函数和格式化
│ │ ├── errors.ts # 错误处理工具
│ │ ├── formatting.ts # 实体格式化函数
│ │ ├── logger.ts # Winston 日志配置
│ │ └── validation.ts # Zod 模式验证
│ └── index.ts # 主服务器入口点
├── tests/ # 测试文件
├── build/ # 编译后的 JavaScript
├── logs/ # 应用程序日志
└── docs/ # 文档
关键组件
- MCP 服务器 (
src/index.ts):主服务器实现,支持环境加载、优雅关闭处理和 MCP 协议合规性。 - EspoCRM 客户端 (
src/espocrm/client.ts):带有认证、错误处理、日志记录和完整 CRUD 操作的 HTTP 客户端。 - 实体类型 (
src/espocrm/types.ts):联系人、账户、商机、会议、用户及相关实体的完整 TypeScript 接口。 - 工具注册表 (
src/tools/index.ts):所有 MCP 工具的中央注册表,具有适当的类型安全、验证和错误处理。 - 格式化工具 (
src/utils/formatting.ts):所有实体类型的专业格式化函数,确保输出格式一致。
开发工作流
- 对
src/中的源文件进行更改 - 使用
npm run build构建项目 - 使用
npm run test:config测试更改 - 使用
npm run test:client测试增强功能 - 使用
npm run lint检查代码
Docker 部署
使用 Docker 构建和运行
# 构建 Docker 镜像
npm run docker:build
# 使用环境文件运行
npm run docker:run
Docker Compose
version: '3.8'
services:
espocrm-mcp:
build: .
environment:
- ESPOCRM_URL=${ESPOCRM_URL}
- ESPOCRM_API_KEY=${ESPOCRM_API_KEY}
- ESPOCRM_AUTH_METHOD=apikey
- MCP_TRANSPORT=stdio
- RATE_LIMIT=100
- LOG_LEVEL=info
volumes:
- ./logs:/app/logs
restart: unless-stopped
日历同步集成
此 MCP 服务器专为与日历同步系统无缝协作而设计:
与 Google 日历同步兼容
- 会议实体包含
googleEventId字段,用于同步跟踪 - 通过电子邮件查找用户,用于参会人员管理
- 日期范围过滤,实现高效同步操作
- 通过
contactsIds和usersIds关联参会人员
同步预防功能
- 全面的实体跟踪,防止重复创建
- 支持外部系统标识符
- 强大的同步操作错误处理
工作流集成
// 典型的日历同步工作流
const existingMeetings = await client.callTool('search_meetings', {
dateFrom: syncStartDate,
dateTo: syncEndDate
});
const user = await client.callTool('get_user_by_email', {
emailAddress: assignedUserEmail
});
// 从外部日历创建会议
for (const externalEvent of externalEvents) {
await client.callTool('create_meeting', {
name: externalEvent.title,
dateStart: externalEvent.start,
dateEnd: externalEvent.end,
googleEventId: externalEvent.id,
description: externalEvent.description
});
}
故障排除
常见问题
连接失败
# 测试基本连接性
node test-connection.js
# 检查环境变量
npm run test:config
# 测试特定端点
curl -H "X-Api-Key: YOUR_API_KEY" http://your-espocrm.com/api/v1/App/user
认证问题
- 验证 API 密钥是否正确且有效
- 检查 EspoCRM 中的用户权限
- 确保用户已启用 API 访问
- 验证正确的 API 端点格式
会议创建问题
- 确保提供了必需字段(名称、开始日期、结束日期)
- 验证日期格式是否为 ISO 8601(YYYY-MM-DDTHH:mm:ss)
- 检查用户是否有创建会议的权限
- 在关联前验证联系人与用户 ID 是否存在
用户搜索问题
- 验证用户是否有权限访问用户实体
- 检查系统中是否存在用户
- 确保电子邮件地址格式正确
调试模式
启用调试日志:
LOG_LEVEL=debug
查看详细日志:
tail -f logs/espocrm-mcp.log
连接诊断
测试特定 API 端点:
# 测试用户端点
curl -H "X-Api-Key: YOUR_KEY" http://your-espocrm.com/api/v1/App/user
# 测试会议搜索
curl -H "X-Api-Key: YOUR_KEY" "http://your-espocrm.com/api/v1/Meeting?maxSize=1"
# 测试用户搜索
curl -H "X-Api-Key: YOUR_KEY" "http://your-espocrm.com/api/v1/User?maxSize=1"
API 参考
工具模式
所有工具使用 Zod 模式进行验证。关键模式包括:
联系人模式
{
firstName: string,
lastName: string,
emailAddress?: string,
phoneNumber?: string,
title?: string,
department?: string,
accountId?: string,
description?: string
}
会议模式
{
name: string,
dateStart: string, // ISO 8601 格式
dateEnd: string, // ISO 8601 格式
location?: string,
description?: string,
status?: 'Planned' | 'Held' | 'Not Held',
parentType?: string,
parentId?: string,
contactsIds?: string[], // 联系人 ID 数组
usersIds?: string[], // 用户 ID 数组
googleEventId?: string // 用于日历同步
}
用户模式
{
userName: string,
firstName?: string,
lastName?: string,
emailAddress?: string,
phoneNumber?: string,
isActive?: boolean,
type?: 'admin' | 'regular' | 'portal' | 'api'
}
任务模式
{
name: string,
assignedUserId?: string,
parentType?: 'Lead' | 'Account' | 'Contact' | 'Opportunity',
parentId?: string,
status?: 'Not Started' | 'Started' | 'Completed' | 'Canceled' | 'Deferred',
priority?: 'Low' | 'Normal' | 'High' | 'Urgent',
dateEnd?: string, // 截止日期,YYYY-MM-DD 格式
description?: string
}
潜在客户模式
{
firstName: string,
lastName: string,
emailAddress?: string,
phoneNumber?: string,
accountName?: string, // 公司名称
website?: string,
status?: 'New' | 'Assigned' | 'In Process' | 'Converted' | 'Recycled' | 'Dead',
source: 'Call' | 'Email' | 'Existing Customer' | 'Partner' | 'Public Relations' | 'Web Site' | 'Campaign' | 'Other',
industry?: string,
assignedUserId?: string,
description?: string
}
团队模式
{
name: string,
description?: string,
positionList?: string[], // 团队中的可用职位
}
通用实体模式
{
entityType: string, // 实体类型名称(例如,'Contact','CustomProduct')
data: { // 灵活的键值对
[key: string]: any
},
// 搜索/获取操作可选
filters?: {
[field: string]: any
},
select?: string[], // 要检索的字段
orderBy?: string,
order?: 'asc' | 'desc'
}
通话模式
{
name: string,
status?: 'Planned' | 'Held' | 'Not Held',
direction?: 'Inbound' | 'Outbound',
duration?: number, // 持续时间,以秒为单位
parentType?: string, // 相关实体类型
parentId?: string, // 相关实体 ID
assignedUserId?: string,
description?: string
}
案例模式
{
name: string,
status?: 'New' | 'Assigned' | 'Pending' | 'Closed' | 'Rejected' | 'Duplicate',
priority?: 'Low' | 'Normal' | 'High' | 'Urgent',
type?: string, // 案例类型
accountId?: string, // 相关账户
contactId?: string, // 相关联系人
assignedUserId?: string,
description?: string
}
备注模式
{
parentType: string, // 备注所关联的实体类型
parentId: string, // 备注所关联的实体 ID
post: string, // 备注内容
data?: { // 额外的备注数据
isInternal?: boolean, // 内部备注标志
[key: string]: any
}
}
关系模式
{
entityType: string, // 源实体类型
entityId: string, // 源实体 ID
relatedEntityType: string, // 目标实体类型
relatedEntityId: string, // 目标实体 ID
relationshipName: string // 关系字段名称
}
团队管理操作
// 将用户添加到团队
{
userId: string,
teamId: string,
position?: string // 团队内的可选职位
}
// 角色分配
{
userId: string,
roleId: string
}
搜索参数
{
searchTerm?: string,
limit?: number, // 默认值:20,最大值:200
offset?: number, // 默认值:0
createdFrom?: string, // YYYY-MM-DD 格式
createdTo?: string, // YYYY-MM-DD 格式
modifiedFrom?: string, // YYYY-MM-DD 格式
modifiedTo?: string, // YYYY-MM-DD 格式
// 特定实体过滤器...
}
响应格式
标准列表响应
{
"total": 150,
"list": [
{
"id": "entity123",
"name": "实体名称",
"createdAt": "2025-07-20T10:30:00Z",
"modifiedAt": "2025-07-20T15:45:00Z"
}
]
}
会议响应
{
"id": "meeting123",
"name": "项目会议",
"status": "计划中",
"dateStart": "2025-08-01T10:00:00Z",
"dateEnd": "2025-08-01T11:00:00Z",
"location": "A 会议室",
"assignedUserName": "约翰·多伊",
"contacts": ["contact1", "contact2"],
"googleEventId": "google_event_123"
}
性能考虑
分页
- 默认限制:20 条结果
- 最大限制:200 条结果
- 使用偏移量对大型数据集进行分页
速率限制
- 默认值:每分钟 100 个请求
- 可通过 RATE_LIMIT 环境变量进行配置
- 实现指数退避以处理速率限制
缓存
- 无内置缓存(建议在应用程序级别实现)
- 不缓存 EspoCRM API 响应,以确保数据新鲜度
批量操作
- 仅支持单个实体操作
- 对于批量操作,在应用程序级别遍历数组
- 处理大型数据集时考虑速率限制
安全最佳实践
API 密钥管理
- 仅将 API 密钥存储在环境变量中
- 定期轮换 API 密钥
- 使用具有最小所需权限的专用 API 用户
- 监控 API 使用日志
网络安全
- 对所有 EspoCRM 连接使用 HTTPS
- 对于敏感数据,考虑使用 VPN 或专用网络
- 如果你的 EspoCRM 实例支持,实现 IP 白名单
数据验证
- 使用 Zod 模式验证所有输入
- 应用清理以防止注入攻击
- 错误消息不暴露敏感系统信息
📄 许可证
本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。
支持
- 问题反馈:GitHub 问题
- 文档:查看
docs/目录以获取更多文档 - EspoCRM API:官方 EspoCRM API 文档
- MCP 规范:模型上下文协议文档
变更日志
版本 2.0.0 - AI 聊天机器人集成 🤖
- 完整的聊天机器人界面:可嵌入 EspoCRM 的浮动聊天气泡
- 自然语言处理:使用纯英语聊天来执行 CRM 操作
- WebSocket 通信:实时双向通信
- 访问 47 个 MCP 工具:通过对话界面实现完整的 CRM 功能
- 安全与速率限制:具备输入验证的生产级安全
- Docker 部署:与 MCP 服务器一起进行容器化的聊天机器人服务器部署
- 移动响应式:在所有设备上都有美观的界面
- EspoCRM 集成:与现有 EspoCRM 实例进行简单的三行集成
- AI 驱动:可选的 OpenAI 集成,实现高级自然语言理解
- 生产测试:全面的测试套件和演示界面
版本 1.5.0 - 第三阶段:完整的通信与关系管理
- 关系管理:3 个新工具,用于链接/取消链接实体和管理关系
- 通信工具:7 个新工具,用于通话、案例、备注和文档管理
- 实体关系操作:链接/取消链接任何实体,获取关系详细信息
- 通话管理:创建和搜索支持持续时间和方向跟踪的通话记录
- 案例管理:创建和搜索支持优先级和类型分类的支持案例
- 备注系统:为任何实体添加备注,支持内部/外部可见性控制
- 文档管理:创建支持文件附件的文档记录
- 高级格式化:为通话、案例和备注添加专门的格式化
- 工具数量:从 39 个扩展到 47 个全面工具(新增 8 个工具)
版本 1.4.0 - 第二阶段:完整的企业解决方案
- 团队与角色管理:7 个新工具,用于完整的用户/团队/角色管理
- 通用实体操作:5 个新工具,用于操作任何 EspoCRM 实体(包括自定义实体)
- 团队管理:添加/移除团队中的用户,分配职位,获取团队成员
- 角色分配:为用户分配角色并获取有效权限
- 通用实体支持:创建、读取、更新、删除和搜索任何实体类型
- 自定义实体支持:全面支持自定义 EspoCRM 实体和字段
- 增强的类型安全:添加了团队、角色和通用实体的 TypeScript 接口
- 工具数量:从 27 个扩展到 39 个全面工具(新增 12 个工具)
版本 1.3.0 - 第一阶段扩展
- 任务管理:5 个新工具,实现完整的任务生命周期管理(创建、搜索、获取、更新、分配)
- 潜在客户管理:5 个新工具,实现完整的潜在客户管道管理(创建、搜索、更新、转化、分配)
- 父关系:任务可以关联到潜在客户、账户、联系人或商机
- 潜在客户转化:一次操作将潜在客户转化为联系人、账户和商机
- 高级任务功能:优先级级别、截止日期、状态跟踪和用户分配
- 扩展搜索:任务和潜在客户搜索支持全面的过滤选项
- 类型安全:为所有新实体增强了 TypeScript 接口
- 工具数量:从 17 个扩展到 27 个全面工具
版本 1.2.0
- 增强的会议管理:实现会议的完整 CRUD 操作
- 用户管理:用户搜索和查找功能
- 高级日期过滤:所有搜索操作支持日期范围
- 日历同步兼容性:支持与 Google 日历集成
- 改进的错误处理:更好的错误消息和调试功能
- 连接修复:解决 API 端点兼容性问题
版本 1.1.0
- 扩展的实体支持:添加了全面的类型定义
- 增强的搜索:高级过滤功能
- 性能改进:优化 API 客户端和错误处理
版本 1.0.0
- 初始版本,全面支持 MCP 2024/2025
- 联系人、账户、商机的完整 CRUD 操作
- Docker 支持和全面测试
- 多种认证方法
- 生产级日志记录和错误处理
为现代 AI 应用提供企业级 EspoCRM 集成
create_contact
在EspoCRM中创建新联系人(带验证)
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
search_contacts
使用灵活条件搜索联系人
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
get_contact
通过ID获取特定联系人的详细信息
参数
: *
描述
create_account
在EspoCRM中创建新账户/公司
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
search_accounts
使用灵活条件搜索账户/公司
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
create_opportunity
在EspoCRM中创建新的销售机会
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
search_opportunities
使用灵活条件搜索销售机会
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
create_meeting
在EspoCRM中创建新会议
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
search_meetings
使用灵活条件搜索会议
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
get_meeting
通过ID获取特定会议的详细信息
参数
: *
描述
update_meeting
更新EspoCRM中的现有会议
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
search_users
在EspoCRM系统中搜索用户
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
get_user_by_email
通过电子邮件地址查找用户
参数
: *
描述
create_task
创建新任务并分配给用户,可关联父实体(线索、账户、联系人、机会)
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
search_tasks
使用灵活条件搜索任务
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
get_task
通过ID获取特定任务的详细信息
参数
: *
描述
update_task
更新现有任务
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
assign_task
将任务分配或重新分配给特定用户
参数
: *
描述
参数
: *
描述
create_lead
创建具有完整字段支持的新线索
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
search_leads
使用灵活条件搜索线索
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
update_lead
更新现有线索
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
convert_lead
将线索转换为联系人、账户和/或机会
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
assign_lead
将线索分配或重新分配给特定用户
参数
: *
描述
参数
: *
描述
add_user_to_team
将用户添加到团队中(可选职位)
参数
: *
描述
参数
: *
描述
参数
: *
描述
remove_user_from_team
从团队中移除用户
参数
: *
描述
参数
: *
描述
assign_role_to_user
为用户分配角色
参数
: *
描述
参数
: *
描述
get_user_teams
获取用户所属的所有团队
参数
: *
描述
get_team_members
获取团队的所有成员
参数
: *
描述
参数
: *
描述
参数
: *
描述
search_teams
在系统中搜索团队
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
get_user_permissions
根据角色和团队获取用户的有效权限
参数
: *
描述
create_entity
为任何实体类型创建记录(带验证)
参数
: *
描述
参数
: *
描述
search_entity
使用灵活过滤器搜索任何实体类型
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
update_entity
通过ID更新任何实体记录
参数
: *
描述
参数
: *
描述
参数
: *
描述
delete_entity
通过ID删除任何实体记录
参数
: *
描述
参数
: *
描述
get_entity
通过ID获取特定实体记录
参数
: *
描述
参数
: *
描述
参数
: *
描述
link_entities
创建任意两个实体之间的关系
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
unlink_entities
移除实体之间的关系
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
get_entity_relationships
获取特定实体的所有相关实体和关系
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
create_call
记录带有参与者和详情的电话呼叫
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
search_calls
使用灵活条件搜索电话呼叫
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
create_case
创建带有详细信息的支持工单/案例
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
search_cases
使用灵活条件搜索支持案例
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
update_case
更新现有支持案例
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
add_note
向任何实体添加备注/评论
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
search_notes
跨实体搜索备注/评论
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
参数
: *
描述
health_check
检查EspoCRM连接和API状态

Firecrawl MCP Server
Firecrawl MCP Server是一个集成Firecrawl网页抓取能力的模型上下文协议服务器,提供丰富的网页抓取、搜索和内容提取功能。
TypeScript
134.0K
5分

Duckduckgo MCP Server
已认证
DuckDuckGo搜索MCP服务器,为Claude等LLM提供网页搜索和内容抓取服务
Python
76.7K
4.3分

Figma Context MCP
Framelink Figma MCP Server是一个为AI编程工具(如Cursor)提供Figma设计数据访问的服务器,通过简化Figma API响应,帮助AI更准确地实现设计到代码的一键转换。
TypeScript
68.5K
4.5分

Edgeone Pages MCP Server
EdgeOne Pages MCP是一个通过MCP协议快速部署HTML内容到EdgeOne Pages并获取公开URL的服务
TypeScript
30.5K
4.8分

Exa Web Search
已认证
Exa MCP Server是一个为AI助手(如Claude)提供网络搜索功能的服务器,通过Exa AI搜索API实现实时、安全的网络信息获取。
TypeScript
51.8K
5分

Context7
Context7 MCP是一个为AI编程助手提供实时、版本特定文档和代码示例的服务,通过Model Context Protocol直接集成到提示中,解决LLM使用过时信息的问题。
TypeScript
95.2K
4.7分

Baidu Map
已认证
百度地图MCP Server是国内首个兼容MCP协议的地图服务,提供地理编码、路线规划等10个标准化API接口,支持Python和Typescript快速接入,赋能智能体实现地图相关功能。
Python
46.6K
4.5分

Minimax MCP Server
MiniMax Model Context Protocol (MCP) 是一个官方服务器,支持与强大的文本转语音、视频/图像生成API交互,适用于多种客户端工具如Claude Desktop、Cursor等。
Python
58.9K
4.8分

