Skip to main content
Glama
KarpovPartnersCom

Bitrix24 MCP Bridge

Bitrix24 MCP Bridge

Brücke zwischen Claude (MCP) und Bitrix24 CRM/Aufgaben. Gehostet auf Beget unter mcp-bitrix.karpovpartners-it.ru.

1. Warum das nötig war

Ursprünglich wurde versucht, Claude über den in Bitrix24 integrierten Connector „MCP-Verbindungen" (App aiassistant.bitrix_mcp / Schaltfläche „Б24" im Marketplace) an Bitrix24 anzubinden. Es stellte sich heraus, dass diese Funktion nicht funktioniert: Die Endpunkte /authorize, /.well-known/oauth-authorization-server, /.well-known/oauth-protected-resource liefern einen nackten nginx 404, obwohl alle Einstellungen und das Abonnement in Ordnung sind. Das ist ein Bug/Feature-Fehler auf Seiten von Bitrix24, kein Konfigurationsfehler.

Als Workaround wurde ein eigener MCP-Server („Brücke") geschrieben, der:

  • nimmt MCP-Anfragen von Claude über das Streamable-HTTP-Protokoll entgegen;

  • übersetzt sie in Aufrufe der normalen Bitrix24-REST-API über einen eingehenden Webhook (in Bitrix24 mit Rechten nur für CRM + Aufgaben erstellt);

  • gibt das Ergebnis als MCP-Tool-Antworten an Claude zurück.

Related MCP server: fast-bitrix24-mcp

2. Architektur und Dateien

Datei

Zweck

server.mjs

Hauptcode der Brücke (ES-Modul). Startet einen Express-Server, verarbeitet MCP-Anfragen über @modelcontextprotocol/sdk, ruft die Bitrix24-REST-API auf.

app.js

Dünner CommonJS-Wrapper zum Starten von server.mjs. Notwendig wegen der Besonderheit von Passenger auf Beget (siehe unten).

package.json

Abhängigkeiten: @modelcontextprotocol/sdk, express, zod, undici.

.htaccess.example

Vorlage für die Phusion-Passenger-Konfiguration + Umgebungsvariablen. Die echte .htaccess mit echten Geheimnissen wird nicht im Repository gespeichert (siehe .gitignore) – sie ist direkt auf dem Server bereitgestellt und separat beim Projektinhaber gespeichert.

Welche Tools sind in Claude verfügbar

  • bitrix24_call – direkter Aufruf beliebiger Methoden crm.*, task.*, tasks.*, user.current, profile (Escape-Luke).

  • bitrix24_list_crm / bitrix24_get_crm / bitrix24_add_crm / bitrix24_update_crm – Liste/Lesen/Erstellen/Aktualisieren von CRM-Einträgen (lead, deal, contact, company).

  • bitrix24_list_tasks / bitrix24_add_task / bitrix24_update_task / bitrix24_complete_task – Arbeiten mit Aufgaben.

Der Server beschränkt die aufgerufenen Bitrix24-Methoden strikt auf die Präfixe crm., task., tasks., user.current, profile (siehe ALLOWED_METHOD_PREFIXES in server.mjs) – das ist ein Schutz für den Fall, dass der Webhook jemals umfangreichere Rechte erhält.

3. Authentifizierung / Sicherheit

Benutzerdefinierte MCP-Connectors in der Claude-Oberfläche haben kein Feld für beliebige HTTP-Header – nur URL (plus optional OAuth Client ID/Secret). Deshalb ist das Geheimnis statt im Authorization-Header in den URL-Pfad eingebettet:

https://mcp-bitrix.karpovpartners-it.ru/mcp/<секрет>

Das Geheimnis und die Adresse des Bitrix24-Webhooks werden nur in der produktiven .htaccess auf dem Server und in einer privaten Kopie beim Projektinhaber gespeichert – sie sind absichtlich nicht in dieses Repository eingecheckt (siehe .gitignore). Jeder, der das Geheimnis aus der URL erfährt, erhält Zugriff auf CRM und Aufgaben von Bitrix24 im Rahmen der Webhook-Rechte.

4. So funktioniert es Schritt für Schritt

  1. Claude öffnet den MCP-Connector → POST an /mcp/<secret> mit dem Body {"method":"initialize", ...}.

  2. Die Express-Route in server.mjs erstellt einen neuen McpServer (StreamableHTTPServerTransport, sessionIdGenerator: undefined – Server ohne Session-Speicherung, jede Anfrage ist unabhängig).

  3. Claude ruft tools/list auf, dann tools/call mit einem bestimmten Tool (z.B. bitrix24_list_crm).

  4. server.mjs ruft bitrixCall(method, params) auf, das ein fetch() auf https://<portal>.bitrix24.ru/rest/<id>/<webhook>/<method>.json ausführt.

  5. Die Antwort von Bitrix24 wird in das MCP-Format verpackt und an Claude zurückgesendet.

5. Bereitstellung von Grund auf

  1. Eingehenden Webhook in Bitrix24 erstellen: Einstellungen → Entwicklern → Sonstiges → Eingehender Webhook. Rechte – mindestens CRM + Aufgaben.

  2. Repository auf den Server klonen, in das Website-Verzeichnis (public_html Ihrer Domain/Subdomain).

  3. npm install in diesem Verzeichnis (installiert express, zod, @modelcontextprotocol/sdk, undici).

  4. .htaccess.example in .htaccess kopieren und die echten BITRIX_WEBHOOK_URL und MCP_PATH_SECRET eintragen.

  5. Auf Beget: mkdir tmp && touch tmp/restart.txt – Passenger-Befehl zum Neustart der Anwendung nach Codeänderungen.

  6. Im Beget-Panel: „Websites" → bei der gewünschten Website → „⋮" → „Domain anhängen" – ohne diesen Schritt versucht Apache nicht einmal, Ihren Code zu erreichen (siehe Abschnitt 6.2 – leicht zu vergessen, Fehler nicht offensichtlich).

6. Probleme bei der Bereitstellung auf Beget und deren Lösungen

Debug-Log – nützlich bei erneuter Bereitstellung auf Beget oder einem anderen Shared-Hosting mit altem Node.js.

6.1. Node.js auf Beget – Version 16.20.2, zu alt

Auf Beget (Ubuntu 18.04, glibc 2.27) lassen sich offizielle Node-18+-Builds nicht starten (GLIBC_2.28' not found). Wir mussten bei Node 16.20.2 bleiben und die in Node 16 fehlenden globalen Objekte manuell bereitstellen, die moderne Abhängigkeiten (@modelcontextprotocol/sdk, Express 5) benötigen:

  • fetch, Headers, Request, Response – über das Paket undici.

  • crypto (Web Crypto API, crypto.randomUUID()) – über das eingebaute node:crypto (webcrypto).

  • ReadableStream, WritableStream, TransformStream – über das eingebaute node:stream/web.

  • structuredClone, MessageChannel/MessagePort – für alle Fälle, über node:v8 und node:worker_threads.

All dies steht ganz am Anfang von server.mjs, vor dem Import von Express und MCP SDK (über await import(...) statt eines normalen import am Dateianfang – siehe nächster Punkt, warum).

6.2. Domain war nicht an das Website-Verzeichnis „angehängt"

Nach dem Hochladen des Codes auf den Server lieferte die Website die Beget-eigene Seite „Domain ist nicht an das Verzeichnis auf dem Server gebunden" statt der Anwendung aus. Es reicht nicht, einfach einen Website-Ordner zu erstellen und Dateien hineinzuladen – die Domain muss separat über das Panel „angehängt" werden: Websites → gewünschte Website → ⋮ → „Domain anhängen". Ein nicht offensichtlicher Schritt, den man leicht übersieht.

6.3. ERR_REQUIRE_ESM: Passenger kann keine ES-Module laden

Passenger auf Beget (alte Version, passenger40) startet die Startdatei über require(), und require() in Node kann grundsätzlich keine ES-Module laden (import/export, type: module in package.json). server.mjs verwendet await auf oberster Dateiebene – das ist nur in einem ES-Modul möglich.

Lösung: In package.json gibt es kein "type": "module" (standardmäßig ist .js CommonJS), der Code selbst liegt in einer Datei mit der Erweiterung .mjs (die Erweiterung .mjs ist immer ein ES-Modul, unabhängig von package.json), und als Einstiegspunkt für Passenger dient app.js – eine winzige CommonJS-Datei:

// app.js
import('./server.mjs').catch((err) => {
  console.error('Failed to start server:', err);
  process.exit(1);
});

require() lädt app.js problemlos (es ist normales CommonJS), und darin kann ein dynamisches import() (das ist eine Funktion, keine Deklaration) das ES-Modul server.mjs asynchron laden.

6.4. Geheimnis im URL-Pfad

MCP_PATH_SECRET – eine zufällige Zeichenfolge (z.B. secrets.token_urlsafe(32) in Python oder crypto.randomUUID() + crypto.randomUUID() in der Browserkonsole). Wenn das Geheimnis neu ausgestellt werden muss – ein neues generieren und in der .htaccess auf dem Server sowie in den Connector-Einstellungen in Claude aktualisieren.

7. So verbinden Sie es in Claude

  1. claude.ai → Einstellungen → Connectors → Add custom connector.

  2. Name: Bitrix24 (beliebig).

  3. Remote MCP server URL: https://mcp-bitrix.karpovpartners-it.ru/mcp/<secret>

  4. OAuth Client ID / Secret – leer lassen, sie werden nicht benötigt (die Autorisierung ist bereits in der URL eingebettet).

  5. Speichern, Connector im Chat aktivieren.

8. Offene Frage – nativer MCP-Connector von Bitrix24

Es lohnt sich, den Bitrix24-Support über den defekten nativen MCP-Connector („Б24" im Marketplace) zu informieren: /authorize und die standardmäßigen OAuth-Discovery-Endpunkte liefern einen nackten nginx 404 bei aktivierten Einstellungen und aktivem Abonnement. Wenn/falls Bitrix24 das behebt, kann man auf den offiziellen Connector umsteigen – oder diese Brücke behalten, sie funktioniert ebenfalls und bietet mehr Kontrolle (z.B. Einschränkung der Methoden auf CRM+Aufgaben direkt im Code).

F
license - not found
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides a REST API and MCP server to interact with Bitrix24 CRM, enabling CRUD operations on entities like deals, leads, contacts, and tasks via natural language.
    10
    13
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server for interacting with Bitrix24 REST API, enabling CRUD operations on deals, contacts, companies, users, leads, and tasks, plus analytics and risk assessment.
    2
  • F
    license
    Not graded
    quality
    D
    maintenance
    Production-grade MCP server for Bitrix24 Cloud with 45 tools, safe by default. Connects Claude Desktop to your Bitrix24 tenant for AI-driven CRM, tasks, messaging, and calendar operations.

View all related MCP servers

Related MCP Connectors

  • Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer

  • Uptime, SSL, DNS and domain monitoring you can talk to from Claude or any MCP client.

  • MCP server for LeadDelta — manage LinkedIn connections and CRM data via AI assistants.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/KarpovPartnersCom/bitrix24-mcp-bridge-claude'

If you have feedback or need assistance with the MCP directory API, please join our Discord server