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狀態

Markdownify MCP
Markdownify是一個多功能文件轉換服務,支持將PDF、圖片、音頻等多種格式及網頁內容轉換為Markdown格式。
TypeScript
27.3K
5分

Baidu Map
已認證
百度地圖MCP Server是國內首個兼容MCP協議的地圖服務,提供地理編碼、路線規劃等10個標準化API接口,支持Python和Typescript快速接入,賦能智能體實現地圖相關功能。
Python
34.0K
4.5分

Firecrawl MCP Server
Firecrawl MCP Server是一個集成Firecrawl網頁抓取能力的模型上下文協議服務器,提供豐富的網頁抓取、搜索和內容提取功能。
TypeScript
101.8K
5分

Sequential Thinking MCP Server
一個基於MCP協議的結構化思維服務器,通過定義思考階段幫助分解複雜問題並生成總結
Python
28.8K
4.5分

Magic MCP
Magic Component Platform (MCP) 是一個AI驅動的UI組件生成工具,通過自然語言描述幫助開發者快速創建現代化UI組件,支持多種IDE集成。
JavaScript
19.3K
5分

Edgeone Pages MCP Server
EdgeOne Pages MCP是一個通過MCP協議快速部署HTML內容到EdgeOne Pages並獲取公開URL的服務
TypeScript
20.4K
4.8分

Notion Api MCP
已認證
一個基於Python的MCP服務器,通過Notion API提供高級待辦事項管理和內容組織功能,實現AI模型與Notion的無縫集成。
Python
15.7K
4.5分

Context7
Context7 MCP是一個為AI編程助手提供即時、版本特定文檔和代碼示例的服務,通過Model Context Protocol直接集成到提示中,解決LLM使用過時信息的問題。
TypeScript
68.4K
4.7分

