ELO ECM: search, read text, file documents, run and build workflows with your own ELO account
ELO für jede KI: suchen, lesen, ablegen, Workflows steuern und bauen, mit den Rechten des eigenen ELO-Kontos.
Schnellstart · Werkzeuge · Sicherheit · Clients · Bauplan · IX-Fallen
[!NOTE] English: MCP server for the ELO ECM Suite (ELO Digital Office). Runs locally next to the ELO Client (ELO 25) or ELO Java Client and signs in with the user's own ELO account, so ELO enforces that user's permissions. Beyond search and text extraction it can file documents, set index fields, start and forward workflows, and (optionally) build workflow templates and ELOas rules/IX scripts with syntax checks. Every write is a two-step preview + one-time token. Docs are in German because ELO's user base is mostly DACH; issues in English are welcome.
Ein MCP-Server für das ELO ECM der ELO Digital Office GmbH. Ihr fragt in normaler Sprache, etwa „Zeig mir die offenen Aufgaben zu Rechnung 4711" oder „Bau mir eine Freigabe-Vorlage mit zwei parallelen Prüfern", und die KI arbeitet direkt mit eurem Archiv.
-Schreiben) und Bauen (-Bauen) schaltet ihr einzeln frei. Ohne Schalter sieht die KI die Werkzeuge gar nicht.| Getestet bzw. vorausgesetzt | |
|---|---|
| ELO-Server | Indexserver 25.00 (ELO 25). Ältere Versionen mit Java-API sollten gehen, sind aber nicht geprüft. |
| ELO Client | installiert auf dem Rechner, auf dem die KI läuft: der ELO Client 25 oder der ältere ELO Java Client. Getestet gegen Indexserver 25.00 mit dem ELO Client 25 (IX-Client-Bibliothek 25.00, Rhino 1.9, PDFBox 3) und mit dem ELO Java Client (IX-Client-Bibliothek 20.09). Gesucht wird unter Programme\ELO Client, dann Programme\ELO Java Client, sonst -ClientDir. |
| Windows | Windows 10/11 mit Windows PowerShell 5.1 (powershell.exe). PowerShell 7 reicht nicht, der Vorschalt braucht System.Web.Extensions. |
| ELO-Konto | ein normales Benutzerkonto. Die KI kann genau das, was das Konto darf. |
| Zertifikat | Bei https muss das Server-Zertifikat im Windows-Zertifikatsspeicher vertrauenswürdig sein (Java nutzt Windows-ROOT). |
[!IMPORTANT] Jede Sitzung baut eine eigene IX-Verbindung mit eurem Konto auf (Client-Name
elo-mcp). Ob das bei euch eine zusätzliche ELO-Lizenz belegt, klärt bitte mit eurem ELO-Partner.
C:\Tools\elo-mcp:
git clone https://github.com/Herzog-GmbH/elo-mcp.git C:\Tools\elo-mcp
powershell -NoProfile -ExecutionPolicy Bypass -File C:\Tools\elo-mcp\Set-EloCredential.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File C:\Tools\elo-mcp\test\offline.ps1
claude mcp add elo --scope user -- powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Tools\elo-mcp\elo-mcp.ps1" -IxUrl "https://elo.example.com:9093/ix-Archiv/ix"
elo_whoami auf und zeigt Konto, Server, IX-Version und freigeschaltete Stufen.Ihr wollt, dass eure KI das selbst einrichtet? Gebt ihr diesen Satz: „Richte den ELO-MCP-Server nach der AGENTS.md in diesem Ordner ein."
Für Claude Desktop gibt es den Server auch als Paket (MCPB), ohne Git und ohne Konfigurationsdatei:
elo-mcp-<version>.mcpb und Set-EloCredential.ps1 laden.powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\Downloads\Set-EloCredential.ps1"
.mcpb-Datei wählen.Im Paket stecken nur die Skripte aus diesem Repo (rund 70 KB). Java und die ELO-Bibliotheken kommen wie sonst aus dem installierten ELO Client. Für ein Update installiert ihr einfach die neue .mcpb.
Alle Schalter stehen hinter dem Skriptpfad in der Client-Konfiguration.
| Schalter | Wirkung |
|---|---|
-IxUrl <url> | IX-URL des ELO-Servers (Pflicht, alternativ Umgebungsvariable ELO_IX_URL) |
-Schreiben | Stufe 2 freischalten: ablegen, neue Version, Indexfelder, Workflow starten, Aufgabe weiterleiten |
-Bauen | Stufe 3 freischalten: Workflow-Vorlagen, Skripte, ELOas-Regeln, Formularseiten. Am besten nur gegen ein Testarchiv. |
-CredentialFile <pfad> | andere Zugangsdaten, z. B. ein zweites Konto für das Testarchiv. Standard %LOCALAPPDATA%\elo-mcp\elo-credential.xml |
-ClientDir <pfad> | Ordner des ELO Client bzw. ELO Java Client, wenn er nicht unter Programme liegt |
-Archiv "<name>" | Name des Archivs in den Hinweisen an die KI, z. B. "der Muster GmbH (Test)" |
-TextDatumJJJJMMTT | Hausregel mancher Archive: Textfelder, deren Name auf DAT/DATUM endet, bekommen Datumsangaben als JJJJMMTT |
-LeerlaufMinuten <n> | Java nach so vielen Minuten ohne Aufruf beenden (Standard 10, nicht unter 5) |
-Direkt | ohne Vorschalt, Java sofort starten (Rückfall bei Problemen, nur ein Archiv) |
-IxUrl2 <url> | zweites Archiv, z. B. das Testarchiv (siehe unten) |
-Name <name>, -Name2 <name> | Kurznamen der beiden Archive für den Parameter archiv, z. B. Produktiv und Test (Standard 1 und 2) |
-Schreiben2, -Bauen2 | Stufen nur für das zweite Archiv |
-CredentialFile2 <pfad>, -Archiv2 "<name>" | Zugangsdaten (Standard: dieselben wie fürs erste) und Archivname für das zweite Archiv |
Ein Eintrag kann zwei Archive bedienen, z. B. Produktiv nur lesend und Test mit allen Stufen:
claude mcp add elo --scope user -- powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Tools\elo-mcp\elo-mcp.ps1" -IxUrl "https://elo.example.com:9093/ix-Archiv/ix" -Name Produktiv -IxUrl2 "https://elo-test.example.com:9093/ix-Archiv/ix" -Name2 Test -Schreiben2 -Bauen2
archiv (Produktiv oder Test). Ohne Angabe gilt das erste Archiv. Ihr sagt der KI einfach „im Test“ oder „in Produktiv“.elo_whoami, jede Vorschau und das Protokoll nennen das Archiv. Objekt-IDs, Masken und Vorlagen gelten nur im jeweiligen Archiv.| Werkzeug | Zweck |
|---|---|
elo_whoami | Konto, Server, IX-Version, freigeschaltete Stufen |
elo_search | iSearch über Titel, Volltext und Indexfelder, optional auf einen Ordner samt Unterordnern begrenzt, höchstens 50 Treffer |
elo_find_by_fields | Datenbanksuche über Maske und Indexfelder, Platzhalter *. Ohne Feld oder Namen abgelehnt |
elo_list | Ordnerinhalt, eine Ebene, höchstens 300 |
elo_get_object | Metadaten, Indexfelder mit Bezeichnung, Pfad, aktuelle Version, elodms://-Link |
elo_get_versions | Versionsliste, neueste zuerst |
elo_get_text | Text aus PDF (mit Textebene), DOCX, XLSX, PPTX, XLS, EML und Textdateien, höchstens 50.000 Zeichen je Aufruf, Weiterlesen mit abZeichen |
elo_user_rights | Wirksame Funktionsrechte eines Benutzers mit Herkunft (direkt oder über welche Gruppe, auch verschachtelt) |
elo_workflow_templates | Alle Workflow-Vorlagen |
elo_workflow | Vorlage oder laufender/beendeter Workflow im Detail: Knoten, Bearbeiter, Skripte, Formular, JSON-Konfiguration, Verbindungen |
elo_workflows_of_object | Laufende (mit aktiven Knoten) oder beendete Workflows zu genau einem Objekt |
elo_my_tasks | Eigene Aufgaben, auch über Gruppen |
elo_workflow_export | Vorlage als JSON-Bauplan (Format) |
-Schreiben)| Werkzeug | Zweck |
|---|---|
elo_create_folder | Ordner anlegen (nur Ordnermasken), warnt bei gleichem Namen und leeren Pflichtfeldern |
elo_create_document | Lokale Datei als Dokument ablegen (nur Dokumentmasken), höchstens 50 MB |
elo_new_version | Neue Version. Lehnt eine identische Datei ab, warnt bei anderer Endung |
elo_set_fields | Indexfelder und Kurzbezeichnung setzen, Vorschau bisher → neu |
elo_start_workflow | Workflow aus Vorlage starten, warnt, wenn dieselbe Vorlage schon läuft |
elo_forward_task | Aufgabe weiterleiten. Bei mehreren Nachfolgern Pflichtangabe. Knoten mit Formular nur mit trotzFormular, weil Formularprüfungen über die API nicht laufen |
Feldwerte werden vorher gegen die Maske geprüft: Feld vorhanden, Länge, Zahl, Datum (31.02. wird abgelehnt), Stichwortliste bei „nur Liste". Datumsfelder schreibt der Server im ELO-Format JJJJMMTT000000.
-Bauen)| Werkzeug | Zweck |
|---|---|
elo_workflow_build | Vorlage aus Bauplan anlegen oder ersetzen (ID und Name bleiben). Vorschau mit Änderungsliste, Sicherung .ewf vorher und nachher |
elo_script_update | Neue Version eines Dokuments unter Administration (ELOas-Regel, IX-Skript, Formularseite …), Vorschau mit Zeilenvergleich, Kodierung bleibt |
elo_script_create | Neues Dokument unter Administration, Maske, Rechte und Typ vom Vorbild |
Die Prüfungen beim Bauen stammen alle aus echten Störungen:
//@include ist auflösbar, @include steht nur in den Kopfzeilen, nur ASCII. Ein nicht auflösbarer Include stoppt sonst den ganzen Skript-Motor des Indexservers.Neu laden (ELOas, IX-Skripte) und „Aktualisieren" im Formulardesigner bleiben Handarbeit. Das sagt der Server nach jeder Änderung dazu.
runAsUser) lehnt der Indexserver für normale Konten ab. Ein solches Konto vermeidet dieser Server bewusst, er läuft lokal mit dem Konto der Person.%LOCALAPPDATA%\elo-mcp\protokoll-JJJJ-MM.jsonl (Zeit, Konto, Server, Werkzeug, Argumente, Ergebnis).elo_get_text) können Anweisungen an die KI enthalten (Prompt-Injection). Lest deshalb jede Vorschau, bevor ihr zustimmt.MCP-Clients starten jeden Server einmal je Sitzung. Eine JVM je Sitzung kostet rund 650 MB, auch wenn ELO nie gebraucht wird. Deshalb steht elo-mcp.ps1 als schlanker Vorschalt (rund 75 MB) vor Java:
initialize, tools/list und ping beantwortet der Vorschalt aus %LOCALAPPDATA%\elo-mcp\werkzeuge-<hash>.txt. Nach einer Änderung an Code oder Schaltern holt die erste Sitzung die Liste einmal von Java.-XX:+UseSerialGC -Xms32m -XX:TieredStopAtLevel=1 (rund 90–130 MB). Bei zwei Archiven gilt das je Archiv.src\ läuft überall, wo Rhino und die IX-Client-Bibliothek laufen. Ein Startskript für andere Systeme gibt es noch nicht..doc, .msg und Scans ohne Textebene (kein OCR).elodms://(GUID) für den Java Client, noch nicht für den Web Client.| Datei | Zweck |
|---|---|
elo-mcp.ps1 | Startskript und Vorschalt |
Set-EloCredential.ps1 | Zugangsdaten verschlüsselt hinterlegen |
src/elo.js | IX-Verbindung, Archivpfade |
src/elo-mcp.js | Kern, Protokoll, Textauszug, Stufe 1 |
src/elo-mcp-schreiben.js | Stufe 2, Vorschau/Token, Feldprüfung, Protokoll |
src/elo-mcp-bauen.js | Stufe 3, Bauplan, Skriptprüfungen |
src/elo-mcp-start.js | Hauptschleife |
test/offline.ps1 | Prüfungen ohne ELO (Protokoll, Stufen, Bauplan, Skripte) |
test/test-mcp.py | Aufrufe gegen ein echtes ELO, z. B. python -I test\test-mcp.py test\beispiel-lesen.json -- -IxUrl <url> |
mcpb/ | Paket für Claude Desktop: manifest.json, Startskript mcpb-start.ps1 (Einstellungen → Schalter), Symbol |
tools/build-mcpb.ps1 | baut dist\elo-mcp-<version>.mcpb und trägt Prüfsumme und Download-URL in server.json ein |
server.json | Eintrag für die MCP Registry |
test/test-mcpb.py | startet das gebaute Paket wie Claude Desktop, z. B. python -I test\test-mcpb.py dist\elo-mcp-0.5.0.mcpb -- ix_url=<url> |
Fallen der IX-API, auf die wir beim Bau gestoßen sind, stehen in docs/FALLEN.md.
Issues und Pull Requests sind willkommen, gern auch mit Erfahrungen aus anderen ELO-Versionen. Bitte keine internen Daten (Hostnamen, Benutzer, Objekt-IDs, Mandantennamen) in Issues, Logs oder Testdateien. Vor einem Pull Request test\offline.ps1 laufen lassen. Sicherheitslücken bitte nicht öffentlich melden, sondern wie in SECURITY.md beschrieben.
MIT, siehe LICENSE. Ohne Gewähr: Probiert Schreiben und Bauen zuerst an einem Testarchiv aus.
Dies ist kein Produkt der ELO Digital Office GmbH und wird von ihr weder unterstützt noch geprüft. ELO ist eine Marke der ELO Digital Office GmbH. Die ELO-Bibliotheken sind nicht Teil dieses Repos und nicht im Paket. Sie kommen aus eurem lizenzierten ELO Java Client.
This listing does not have a supported local package template. Use the maintainer’s documentation for its hosted endpoint, authentication, and client-specific setup. No install command has been inferred.
https://github.com/Herzog-GmbH/elo-mcp/releases/download/v0.6.0/elo-mcp-0.6.0.mcpbotherELO ECM works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.