EspoCRM MCP Server
A local, read-only MCP server for Claude Desktop that provides 16 tools to search and read EspoCRM accounts, contacts, opportunities, and related emails via a strict allowlist.
README
EspoCRM MCP Server für Claude Desktop und ChatGPT
Ein lokal ausgeführter und ausschließlich lesender MCP-Server für Claude Desktop und ChatGPT. Claude Desktop kann den Node.js-Prozess direkt über Standard-Ein-/Ausgabe (stdio) starten. ChatGPT erreicht denselben lokalen stdio-Server optional über den offiziellen OpenAI Secure MCP Tunnel. Der MCP-Server selbst öffnet in beiden Varianten keinen öffentlichen Port und benötigt kein externes Hosting.
Version 0.3 stellt Claude und ChatGPT sechzehn eng begrenzte Werkzeuge für EspoCRM Accounts, Contacts, Opportunities und verknüpfte E-Mails bereit. Es gibt keinen generischen API-Zugriff und keine Schreib- oder Löschfunktion.
Status: Frühe Version
0.3.0. Vor einem produktiven Einsatz sollten Berechtigungen, Felder und Filter gegen die eigene EspoCRM-Installation geprüft werden.
Dieses Repository ist ein inoffizielles Community-Projekt. Es ist weder mit EspoCRM noch mit Anthropic, Claude oder OpenAI verbunden und wird von diesen Unternehmen nicht unterstützt oder geprüft.
Wie die lokale Integration funktioniert
- Das Repository, die Konfiguration und der EspoCRM-API-Key liegen lokal auf dem Rechner.
- Beim Start von Claude Desktop wird
dist/index.jsals lokaler Unterprozess gestartet. - Claude ruft ausschließlich die fest definierten MCP-Werkzeuge über
stdioauf. - Der lokale Prozess sendet die erlaubten HTTPS-GET-Anfragen an EspoCRM und filtert die Antworten über seine Allowlists.
- Nur die gefilterten Werkzeugergebnisse werden an Claude zurückgegeben. Beim vollständigen Beenden von Claude Desktop wird auch der lokale MCP-Prozess beendet.
„Lokal“ bezieht sich auf die Ausführung und Speicherung des MCP-Servers und seiner EspoCRM-Zugangsdaten. Abgerufene CRM-Inhalte werden zur Verarbeitung an den jeweils verwendeten KI-Dienst übertragen und unterliegen den Daten- und Datenschutzeinstellungen des Anthropic- beziehungsweise OpenAI-Kontos.
Funktionen
- Accounts suchen, einzeln lesen sowie Kontakte und Opportunities eines Accounts auflisten
- Contacts suchen, einzeln lesen sowie Accounts und Opportunities eines Kontakts auflisten
- Opportunities suchen, einzeln lesen sowie Account und Kontakte einer Opportunity laden
- normalisierten Activity Stream von Accounts, Contacts und Opportunities lesen
- einzelne, im Activity Stream referenzierte E-Mails mit Klartextinhalt lesen
- explizite Feld-, Filter-, Sortier- und Beziehungs-Allowlist
- höchstens 20 Ergebnisse pro Anfrage
- lokales Audit-Log ohne CRM-Inhalte oder Zugangsdaten
Activity-Stream-Antworten enthalten freigegebene Posts, E-Mail-Betreffzeilen, emailId-Verweise und Ereignismetadaten. Anhänge, Reaktionen, rohe EspoCRM-data-Objekte sowie alte und neue Werte aus Feldänderungen werden nicht ausgegeben. Post-Texte sind auf 4.000 Zeichen begrenzt.
Das Werkzeug get_email liest eine einzelne E-Mail anhand einer emailId. Es bevorzugt bodyPlain und wandelt HTML nur dann in Text um, wenn kein Klartext vorhanden ist. Pro Aufruf werden standardmäßig 20.000 und höchstens 30.000 Zeichen ausgegeben; längere Inhalte können mit bodyOffset abschnittsweise gelesen werden. Anhangsinhalte, BCC, technische Message-IDs und rohe HTML-Inhalte werden nicht zurückgegeben.
Voraussetzungen
- Node.js 22 oder neuer
- EspoCRM mit HTTPS und REST API
- separater EspoCRM-API-Benutzer mit reinen Leserechten auf Account, Contact, Opportunity und Email
- für Claude: Claude Desktop für macOS oder Windows
- für ChatGPT: ein ChatGPT-Workspace mit freigeschaltetem Entwicklermodus und Zugriff auf Secure MCP Tunnel
Installation
npm install
npm run check
npm test
npm run build
Kopiere .env.example nach .env und trage URL und API-Key ein. Die .env-Datei ist von Git ausgeschlossen.
ESPOCRM_URL=https://crm.example.de
ESPOCRM_API_KEY=dein-api-key
Der Server ergänzt /api/v1 automatisch. Die Feldfreigaben stehen in config/permissions.example.yaml.
Die .env und relative Konfigurationspfade werden immer vom Projektordner aus aufgelöst. Der MCP-Client muss deshalb keine Zugangsdaten in seiner eigenen Konfiguration speichern.
Installationsspezifische Felder
Die Beispiel-Allowlist und die Suchwerkzeuge enthalten die benutzerdefinierten Felder cEnrichment, cRolle und cSektor. Diese Felder gehören nicht zum allgemeinen EspoCRM-Standardschema. Andere Installationen müssen sie in config/permissions.example.yaml und den entsprechenden Filtern in src/server.ts anpassen oder entfernen.
Claude Desktop konfigurieren
Der Server ist für den lokalen stdio-Betrieb mit Claude Desktop vorbereitet. Er wird normalerweise nicht manuell gestartet: Claude Desktop startet und beendet ihn anhand seiner Konfigurationsdatei.
1. Absolute Pfade ermitteln
Claude Desktop wird als grafische Anwendung gestartet und kann deshalb eine andere PATH-Umgebung als das Terminal besitzen. Verwende für Node.js und dist/index.js möglichst absolute Pfade.
Auf macOS zeigt dieser Befehl den Node.js-Pfad:
command -v node
Der Projektpfad muss auf die bereits gebaute Datei dist/index.js zeigen.
2. Claude-Konfiguration öffnen
Öffne in Claude Desktop Settings → Developer → Edit Config. Die Konfigurationsdatei liegt normalerweise hier:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Wenn bereits andere MCP-Server eingetragen sind, ergänze den vorhandenen Inhalt innerhalb von mcpServers, anstatt die übrigen Einträge zu überschreiben.
3. MCP-Server eintragen
Beispiel für macOS:
{
"mcpServers": {
"espocrm": {
"command": "/opt/homebrew/bin/node",
"args": [
"/Users/DEINNAME/git/espocrm-mcp-server/dist/index.js"
]
}
}
}
Passe beide Pfade an die eigene Installation an. Auf Intel-Macs kann Node.js beispielsweise unter /usr/local/bin/node liegen.
Beispiel für Windows:
{
"mcpServers": {
"espocrm": {
"command": "C:\\Program Files\\nodejs\\node.exe",
"args": [
"C:\\Users\\DEINNAME\\git\\espocrm-mcp-server\\dist\\index.js"
]
}
}
}
Der Server lädt .env automatisch aus seinem Projektordner. Der API-Key muss daher nicht in claude_desktop_config.json eingetragen werden.
4. Claude Desktop vollständig neu starten
Speichere die JSON-Datei und beende Claude Desktop vollständig:
- macOS: Cmd+Q oder Claude → Quit Claude
- Windows: Claude über das Symbol im Infobereich mit Quit/Exit schließen
Öffne Claude Desktop anschließend erneut. Ein bloßes Schließen des Fensters reicht möglicherweise nicht aus, weil die Anwendung und der MCP-Prozess im Hintergrund weiterlaufen können.
5. Verbindung testen
Öffne in einem neuen Chat das Menü für Tools beziehungsweise Connectors. Dort sollten die EspoCRM-Werkzeuge erscheinen. Ein einfacher Test ist:
Suche maximal drei Accounts in EspoCRM und nenne nur ihre Namen.
Für den Activity Stream und E-Mail-Inhalte beispielsweise:
Zeige die letzten Aktivitäten zu diesem Kontakt und lies auch die darin referenzierten E-Mails.
Claude entscheidet anhand der Werkzeugbeschreibungen, welche Aufrufe erforderlich sind. Jeder Aufruf bleibt durch die Allowlist und die EspoCRM-Rechte des API-Benutzers begrenzt.
Aktualisieren
Nach einem Update des Repositories müssen Abhängigkeiten und Build aktualisiert werden:
git pull
npm install
npm run check
npm test
npm run build
Danach Claude Desktop vollständig beenden und neu starten, damit der neu gebaute Serverprozess geladen wird.
ChatGPT über Secure MCP Tunnel konfigurieren
ChatGPT kann einen lokalen stdio-Server nicht direkt starten. Der offizielle OpenAI Secure MCP Tunnel stellt deshalb eine verschlüsselte, ausschließlich ausgehende HTTPS-Verbindung von dem lokalen Rechner zu OpenAI her. Es wird kein eingehender Port geöffnet und der EspoCRM-API-Key bleibt in der lokalen .env.
Die Tunnel-Funktion und der ChatGPT-Entwicklermodus sind separate Berechtigungen und können je nach Tarif beziehungsweise Workspace-Richtlinie nicht verfügbar sein. Die Tunnel-Variante eignet sich für eine private Entwickler-App im eigenen Workspace; sie ist kein öffentlicher Plugin-Endpunkt.
1. Tunnel und Laufzeitschlüssel anlegen
- In den Platform-Tunnel-Einstellungen einen Tunnel anlegen.
- Dem Tunnel die zuständige OpenAI-Organisation und den ChatGPT-Workspace zuordnen.
- Unter Platform API Keys einen separaten Laufzeitschlüssel erstellen.
- Den Schlüssel auf Restricted setzen und ausschließlich Tunnels: Read + Use freigeben. Tunnels: Manage wird nur zum Anlegen oder Ändern eines Tunnels benötigt und gehört nicht in den langfristig laufenden Client.
Tunnel-ID und Laufzeitschlüssel dürfen nicht in das Repository eingecheckt werden. Unter macOS oder Linux kann der Schlüssel beispielsweise außerhalb des Projekts in einer nur für den eigenen Benutzer lesbaren Datei liegen. Die verdeckte Eingabe verhindert, dass der Schlüssel in der Shell-History erscheint:
install -d -m 700 "$HOME/.config/openai/tunnel-client"
read -s tunnel_runtime_key
printf '%s\n' "$tunnel_runtime_key" \
> "$HOME/.config/openai/tunnel-client/espocrm-local.key"
chmod 600 "$HOME/.config/openai/tunnel-client/espocrm-local.key"
unset tunnel_runtime_key
2. tunnel-client installieren
Lade die aktuelle, zum Betriebssystem und zur Prozessorarchitektur passende Version aus den offiziellen openai/tunnel-client-Releases. Prüfe vor der Installation die SHA-256-Prüfsumme aus SHA256SUMS.txt und stelle sicher, dass tunnel-client anschließend über PATH erreichbar ist:
tunnel-client --version
tunnel-client help quickstart
3. Lokales Tunnel-Profil erstellen
Ermittle zunächst den absoluten Node.js-Pfad mit command -v node. Ersetze anschließend Tunnel-ID, Node.js-Pfad und Projektpfad im folgenden Beispiel:
tunnel-client init \
--sample sample_mcp_stdio_local \
--profile espocrm-local \
--tunnel-id tunnel_... \
--mcp-command "/ABSOLUTER/PFAD/ZU/node /ABSOLUTER/PFAD/ZUM/espocrm-mcp-server/dist/index.js" \
--control-plane-api-key-ref "file:$HOME/.config/openai/tunnel-client/espocrm-local.key"
Der Befehl speichert nur den Verweis auf die Schlüsseldatei. Die EspoCRM-Konfiguration wird weiterhin automatisch aus der lokalen .env im Projektordner geladen.
Prüfe das Profil, bevor der Tunnel gestartet wird:
tunnel-client doctor --profile espocrm-local --explain
4. Tunnel starten und Status prüfen
Für einen lokal verwalteten Hintergrundprozess:
tunnel-client runtimes connect \
--alias espocrm-local \
--profile espocrm-local \
--tunnel-id tunnel_... \
--runtime-api-key "file:$HOME/.config/openai/tunnel-client/espocrm-local.key" \
--mcp-command "/ABSOLUTER/PFAD/ZU/node /ABSOLUTER/PFAD/ZUM/espocrm-mcp-server/dist/index.js"
tunnel-client runtimes status espocrm-local --json
Der Status muss process_running: true, healthy: true und ready: true melden. Nach einem Neustart des Rechners muss der lokale Prozess gegebenenfalls erneut gestartet werden:
tunnel-client runtimes connect --alias espocrm-local
Ohne laufenden Tunnel bleibt die App in ChatGPT sichtbar, Werkzeugaufrufe schlagen jedoch fehl. Beenden lässt sich der verwaltete Prozess mit:
tunnel-client runtimes stop espocrm-local
5. Entwickler-App in ChatGPT verbinden
- In ChatGPT unter Settings → Security and login den Developer mode aktivieren. Diese Einstellung erlaubt generell nicht verifizierte Entwickler-Apps und sollte bewusst verwendet werden.
- ChatGPT Plugins öffnen und Create app beziehungsweise App erstellen wählen.
- Einen Namen und eine Beschreibung eintragen.
- Unter Connection die Option Tunnel und anschließend den zuvor angelegten Tunnel wählen.
- Unter Authentication die Option None beziehungsweise Keine Authentifizierung wählen. Der Tunnel-Laufzeitschlüssel authentifiziert den lokalen Tunnel-Client bereits separat; der EspoCRM-API-Key bleibt ausschließlich auf dem Rechner.
- Den Sicherheitshinweis bestätigen und die App erstellen.
- Vor dem Verbinden kontrollieren, dass genau die erwarteten sechzehn Werkzeuge erkannt und alle als Read/Lesen gekennzeichnet werden.
- Die App mit dem Workspace verbinden.
Ein erster Test in einem neuen Chat kann lauten:
Nutze EspoCRM und suche maximal drei Accounts. Nenne nur ihre Namen.
Für Activity Stream und E-Mail-Inhalte:
Zeige die letzten Aktivitäten zu diesem Kontakt und lies auch die darin referenzierten E-Mails.
ChatGPT überträgt nur die Ergebnisse der tatsächlich aufgerufenen Werkzeuge. Diese CRM-Inhalte werden Bestandteil der ChatGPT-Unterhaltung und unterliegen den Daten-, Aufbewahrungs- und Compliance-Einstellungen des verwendeten Workspace.
Fehlerbehebung in ChatGPT
Wenn die App sichtbar ist, aber keine Daten liefert:
tunnel-client runtimes status espocrm-local --jsonausführen und aufhealthy: truesowieready: trueprüfen.tunnel-client doctor --profile espocrm-local --explainausführen.- Prüfen, ob der Tunnel der richtigen Platform-Organisation und dem richtigen ChatGPT-Workspace zugeordnet ist.
- Prüfen, ob der Laufzeitschlüssel Tunnels: Read + Use besitzt.
- Nach Codeänderungen
npm run check,npm testundnpm run buildausführen, den Tunnel-Prozess neu starten und die App in ChatGPT über Update/Aktualisieren neu einlesen.
Fehlerbehebung in Claude Desktop
Wenn die EspoCRM-Werkzeuge nicht erscheinen:
- JSON-Syntax der
claude_desktop_config.jsonprüfen. - Sicherstellen, dass
commandundargsabsolute, vorhandene Pfade enthalten. - Prüfen, ob
.envim Projektordner liegt und URL sowie API-Key gesetzt sind. - Im Projekt
npm run check,npm testundnpm run buildausführen. - Claude Desktop vollständig beenden und erneut öffnen.
Claude-Desktop-Protokolle liegen normalerweise hier:
- macOS:
~/Library/Logs/Claude - Windows:
%APPDATA%\Claude\logs
Besonders hilfreich sind mcp.log und Dateien nach dem Muster mcp-server-espocrm.log. Die allgemeine Anleitung für lokale MCP-Server und aktuelle Claude-Desktop-Oberflächen steht in der offiziellen MCP-Dokumentation. Anthropic beschreibt alternativ installierbare Desktop Extensions in seiner Claude-Desktop-Hilfe; dieses Repository verwendet derzeit weiterhin die direkte lokale JSON-Konfiguration.
Entwicklung
npm run dev
npm run test:watch
Siehe SECURITY.md für das Berechtigungs- und Datenschutzmodell.
Lizenz
Veröffentlicht unter der MIT-Lizenz.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。