关于 ELO ECM
ELO ECM 是本地 MCP 服务,使用每位用户自己的 ELO 账户和权限操作 ELO ECM。它支持搜索和读取文档、归档及工作流操作,也可选提供工作流和脚本编写,并在写入前进行预览和校验。
主要功能
- 01搜索文档并提取文本
- 02归档文档并更新索引字段
- 03查看和操作工作流
- 04构建工作流模板与脚本
- 05通过一次性令牌预览写入
适用场景
- 01按全文或索引字段查找文档
- 02查看分配的 ELO 任务和工作流
- 03归档文档或启动工作流
- 04编写并校验工作流模板或脚本
MCP 相关
它向 MCP 客户端提供 ELO ECM 搜索、文档、权限和工作流操作。写入与构建工具可分别启用;更改需先预览,再使用一次性令牌执行。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
ELO-MCP-Server
为任何 AI 提供 ELO:搜索、读取、归档、管理和构建工作流,使用您自己的 ELO 账户权限。
说明
English: 面向 ELO ECM Suite(ELO Digital Office)的 MCP 服务。可在 ELO Client(ELO 25)或 ELO Java Client 旁本地运行,并使用用户自己的 ELO 账户登录,因此 ELO 会执行该用户的权限控制。除了搜索和提取文本,它还可以归档文档、设置索引字段、启动和转交工作流,并且(可选)构建工作流模板和 ELOas 规则/IX 脚本,并进行语法检查。每次写入都分为两步:预览 + 一次性令牌。文档使用德语,因为 ELO 的用户主要位于 DACH 地区;欢迎使用英语提交问题。
一个面向 ELO Digital Office GmbH 的 ELO ECM 的 MCP 服务。您可以用日常语言提问,例如“显示与发票 4711 相关的未完成任务”或“为我构建一个包含两名并行审核人的审批模板”,AI 会直接与您的档案库交互。
一览
- 支持任何 MCP 客户端: Claude Code、Claude Desktop、Codex、GitHub Copilot、Gemini CLI、Cursor,……(docs/CLIENTS.md)
- 每人使用自己的权限: 服务在用户本地运行,并使用其自己的 ELO 账户登录。ELO 会自行检查每次访问。无需服务账户,也不会复制权限。
- 不止于搜索: 全文和字段搜索、从 PDF/Office/电子邮件中提取文本、查看有效权限及其来源、读取、启动和转交工作流。
- 构建并检查: 将工作流模板导出为 JSON 设计方案、修改并写回。上传 ELOas 规则、IX 脚本和表单页面前,会先进行编译并检查已知陷阱。
- 三个级别: 始终启用读取。您可以分别启用写入(
-Schreiben)和构建(-Bauen)。如果未启用,AI 根本看不到这些工具。 - 两步写入: 每次更改都会先返回预览和一次性令牌。只有在第二次调用时附上令牌,操作才会执行。
- 降低索引服务器负载: 每次只处理一个请求,设置严格的上限,不通过工作流进行批量查询。
- 无需额外下载: 使用已安装的 ELO Client 或 ELO Java Client 中的 Java、Rhino、IX 客户端库、PDFBox 和 POI。
前提条件
| 已测试或要求 | |
|---|---|
| ELO-Server | Indexserver 25.00(ELO 25)。旧版本只要支持 Java-API,理论上也能使用,但未经测试。 |
| ELO Client | 安装在运行 AI 的计算机上:ELO Client 25 或较旧的 ELO Java Client。已使用 ELO Client 25(IX-Client-Bibliothek 25.00、Rhino 1.9、PDFBox 3)和 ELO Java Client(IX-Client-Bibliothek 20.09),针对 Indexserver 25.00 进行了测试。会依次在 Programme\ELO Client、Programme\ELO Java Client 下查找,否则使用 -ClientDir。 |
| Windows | Windows 10/11,搭配 Windows PowerShell 5.1(powershell.exe)。PowerShell 7 不够用,启动器需要 System.Web.Extensions。 |
| ELO-Konto | 一个普通用户帐户。AI 能做的事仅限于该帐户的权限范围。 |
| Zertifikat | 使用 https 时,服务器证书必须受 Windows 证书存储信任(Java 使用 Windows-ROOT)。 |
重要
每个会话都会使用你们的帐户建立独立的 IX 连接(客户端名称为
elo-mcp)。这是否会占用额外的 ELO 许可证,请向你们的 ELO 合作伙伴确认。
快速开始
- 获取,例如放到
C:\Tools\elo-mcp:git clone https://github.com/Herzog-GmbH/elo-mcp.git C:\Tools\elo-mcp - 保存登录凭据,只需一次,并由你们自己在终端中操作(不要让 AI 输入)。密码会通过 DPAPI 加密,并绑定到你们的 Windows 帐户:
powershell -NoProfile -ExecutionPolicy Bypass -File C:\Tools\elo-mcp\Set-EloCredential.ps1 - 检查,不连接 ELO:
powershell -NoProfile -ExecutionPolicy Bypass -File C:\Tools\elo-mcp\test\offline.ps1 - 添加配置,这里以 Claude Code 为例(其他客户端见:docs/CLIENTS.md)。IX-URL 位于 ELO Java Client 的登录配置文件中,也可以向你们的 ELO 管理员获取:
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 中是谁?”。这会调用
elo_whoami,并显示帐户、服务器、IX 版本和已启用的级别。
希望 AI 自行完成设置?将这句话交给它:“按照此文件夹中的 AGENTS.md 配置 ELO-MCP-Server。”
Claude Desktop:以软件包形式安装
Claude Desktop 也提供软件包(MCPB)版本的服务,无需 Git 和配置文件:
- 从最新版本下载
elo-mcp-<version>.mcpb和Set-EloCredential.ps1。 - 保存登录凭据,由你们自己在终端中操作:
powershell -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\Downloads\Set-EloCredential.ps1" - 在 Claude Desktop 中,选择设置 → 扩展 → 高级设置 → 安装扩展(Settings → Extensions → Advanced settings → Install Extension),然后选择
.mcpb文件。 - 填写 IX-URL。仅在需要时启用写入和构建功能。使用默认设置时,凭据文件和客户端文件夹留空。要添加第二个档案(例如测试档案),请填写“档案 2”字段,并为两个档案设置简称,参见两个档案。
- 在新聊天中询问“我在 ELO 中是谁?”。
软件包仅包含此仓库中的脚本(约 70 KB)。Java 和 ELO 库与平常一样,来自已安装的 ELO Client。更新时,只需安装新版 .mcpb。
开关
所有开关都写在客户端配置中的脚本路径后面。
| 开关 | 作用 |
|---|---|
-IxUrl <url> | ELO 服务器的 IX URL(必填,也可使用环境变量 ELO_IX_URL) |
-Schreiben | 解锁第 2 级:归档、新建版本、索引字段、启动工作流、转发任务 |
-Bauen | 解锁第 3 级:工作流模板、脚本、ELOas 规则、表单页。最好只用于测试档案。 |
-CredentialFile <pfad> | 使用其他凭据,例如用于测试档案的第二个账户。默认值:%LOCALAPPDATA%\elo-mcp\elo-credential.xml |
-ClientDir <pfad> | ELO Client 或 ELO Java Client 的文件夹(如果不在 Programme 下) |
-Archiv "<name>" | 提供给 AI 的说明中使用的档案名称,例如 "der Muster GmbH (Test)" |
-TextDatumJJJJMMTT | 某些档案的内部规则:名称以 DAT/DATUM 结尾的文本字段,日期值采用 JJJJMMTT 格式 |
-LeerlaufMinuten <n> | 空闲指定分钟数后退出 Java(默认值为 10,不得低于 5) |
-Direkt | 不使用预启动程序,立即启动 Java(出现问题时的回退方式,仅适用于一个档案) |
-IxUrl2 <url> | 第二个档案,例如测试档案(见下文) |
-Name <name>, -Name2 <name> | 两个档案在 archiv 参数中使用的简称,例如 Produktiv 和 Test(默认值为 1 和 2) |
-Schreiben2, -Bauen2 | 仅为第二个档案解锁相应级别 |
-CredentialFile2 <pfad>, -Archiv2 "<name>" | 第二个档案的凭据(默认与第一个档案相同)和档案名称 |
两个档案
一个条目可以连接两个档案,例如生产档案仅供读取,测试档案则开放所有级别:
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或Test)。不指定时使用第一个档案。只需告诉 AI“在 Test 中”或“在 Produktiv 中”。 - 各档案的级别分别生效。在示例中,即使 AI 尝试修改,也无法更改 Produktiv 中的内容。写入和构建工具的说明会指出它们将在哪个档案中运行。
- 每个档案都在独立的 Java 进程中运行,该进程仅在首次调用时启动。连接、缓存和令牌彼此隔离。在 Test 中预览获得的令牌绝不会作用于 Produktiv。
elo_whoami、每次预览和日志都会注明档案。对象 ID、掩码和模板仅适用于各自的档案。
工具
第 1 级:读取(始终启用)
| 工具 | 用途 |
|---|---|
elo_whoami | 账户、服务器、IX 版本、已解锁的级别 |
elo_search | 通过标题、全文和索引字段进行 iSearch,可选择限制在某个文件夹及其子文件夹中,最多返回 50 条结果 |
elo_find_by_fields | 按掩码和索引字段进行数据库搜索,支持通配符 *。未指定字段或名称时将拒绝执行 |
elo_list | 列出文件夹内容,仅一层,最多 300 项 |
elo_get_object | 元数据、带标签的索引字段、路径、当前版本、elodms:// 链接 |
elo_get_versions | 版本列表,最新版本在前 |
elo_get_text | 从 PDF(含文本层)、DOCX、XLSX、PPTX、XLS、EML 和文本文件中提取文本,每次调用最多 50,000 个字符;使用 abZeichen 继续读取 |
elo_user_rights | 用户实际生效的功能权限及其来源(直接授予或通过哪个组授予,包括嵌套组) |
elo_workflow_templates | 所有工作流模板 |
elo_workflow | 查看模板或正在运行/已结束的工作流详情:节点、处理人、脚本、表单、JSON 配置、连接 |
elo_workflows_of_object | 查看与某个对象相关的正在运行(含活动节点)或已结束的工作流 |
elo_my_tasks | 查看自己的任务,包括通过组分配的任务 |
elo_workflow_export | 将模板导出为 JSON 构建蓝图(格式) |
第 2 阶段:操作(-Schreiben)
| 工具 | 用途 |
|---|---|
elo_create_folder | 创建文件夹(仅限文件夹掩码),同名时发出警告,必填字段为空时也会发出警告 |
elo_create_document | 将本地文件存为文档(仅限文档掩码),最大 50 MB |
elo_new_version | 创建新版本。拒绝相同文件,扩展名不同时发出警告 |
elo_set_fields | 设置索引字段和简短名称,预览更改前 → 更改后 |
elo_start_workflow | 根据模板启动工作流;同一模板已在运行时发出警告 |
elo_forward_task | 转发任务。有多个后续节点时必须提供说明。带表单的节点只能使用 trotzFormular,因为无法通过 API 执行表单检查 |
字段值会先根据掩码进行检查:字段是否存在、长度、数字、日期(拒绝 31.02.)、“仅限列表”时检查关键词列表。服务器会将日期字段写成 ELO 格式 JJJJMMTT000000。
第 3 阶段:构建(-Bauen)
| 工具 | 用途 |
|---|---|
elo_workflow_build | 根据构建计划创建或替换模板(ID 和名称保持不变)。提供变更列表预览,并在操作前后备份为 .ewf |
elo_script_update | 在 Administration 下创建文档的新版本(ELOas 规则、IX 脚本、表单页面……),提供逐行对比预览,保留原编码 |
elo_script_create | 在 Administration 下创建新文档,掩码、权限和类型均沿用范本 |
构建时的检查均源自实际故障:
- **工作流:**恰好有一个起点,至少有一个终点,所有连线都指向现有节点,每个节点都可到达且有通往终点的路径,除终点外的每个节点都必须有后续节点(否则流程会卡住),决策节点必须带条件,计数器必须使用固定值(0 会在第一个前置节点后继续,-1 会在跳过 IF 分支后卡住),处理人和表单必须存在。
- **ELOas 规则:**XML 格式正确,每个脚本部分都会通过 Rhino 编译。
- IX 脚本:编译通过,每个
//@include都可解析,@include只能出现在头部,只允许 ASCII。无法解析的 Include 否则会导致索引服务器的整个脚本引擎停止运行。
重新加载(ELOas、IX 脚本)以及在表单设计器中“更新”仍需手动操作。每次变更后,服务器都会提示这一点。
安全
- **使用个人帐户:**ELO 会根据已登录用户的权限检查每次访问。集中式服务器需要使用具有主管理员权限的服务帐户:索引服务器会拒绝普通帐户以其他用户身份登录(
runAsUser)。本服务器有意避免使用此类帐户,而是在本地以用户自己的帐户运行。 - **凭据:**使用 DPAPI 加密,仅对你们的 Windows 帐户可读。前置程序会在 Java 启动时才解密凭据,并且只将其传递给 Java 进程。
- **两步操作:**首次调用 = 检查 + 预览 + 令牌。令牌有效期为 5 分钟,仅可使用一次,只适用于完全相同的参数,且仅当对象自预览后未发生变化时有效(指纹由名称、掩码、索引字段、锁定状态、版本组成)。给 AI 的提示会要求展示预览并等待确认。
- **代码中不提供:**删除、移动、修改权限和掩码。这些操作并非被禁用,而是根本不存在。
- **日志:**每次执行都会记录,包括失败的执行,保存在
%LOCALAPPDATA%\elo-mcp\protokoll-JJJJ-MM.jsonl中(时间、帐户、服务器、工具、参数、结果)。 - **写入时不重试:**读取工具会在会话过期后重新登录一次。写入工具不会重试,以免重复操作。
- **外来文本:**文档内容(
elo_get_text)可能包含给 AI 的指令(Prompt Injection)。因此,请在确认前仔细阅读每次预览。
启动与内存占用
MCP 客户端会在每个会话中启动每个服务一次。每个会话启动一个 JVM 会占用约 650 MB,即使从未用到 ELO 也是如此。因此,elo-mcp.ps1 会作为轻量级前置程序(约 75 MB)运行在 Java 之前:
- 前置程序会从
%LOCALAPPDATA%\elo-mcp\werkzeuge-<hash>.txt响应initialize、tools/list和ping。代码或开关发生变更后,第一个会话会从 Java 获取一次列表。 - 只有在首次调用工具时才会启动 Java(2–8 s);连续 10 分钟未调用后,Java 会退出。JVM 使用
-XX:+UseSerialGC -Xms32m -XX:TieredStopAtLevel=1运行(约 90–130 MB)。使用两个归档时,每个归档分别计算。
限制
- 仅支持 Windows,且仅支持 stdio(没有 HTTP 服务)。
src\下的核心代码可在任何能运行 Rhino 和 IX 客户端库的环境中运行。其他系统的启动脚本尚未提供。 - 无法读取
.doc、.msg和没有文本层的扫描件(不支持 OCR)。 - 链接仅支持 Java 客户端使用的
elodms://(GUID),尚不支持 Web 客户端。 - 构建时仅支持节点类型 1–6(开始、人员、分发、决策、收集、结束)。包含循环、服务器交接或子工作流的模板可以导出,但无法写回。
- 不支持重新加载 ELOas/IX 脚本,也不支持发布。
结构
| 文件 | 用途 |
|---|---|
elo-mcp.ps1 | 启动脚本和前置程序 |
Set-EloCredential.ps1 | 加密保存访问凭据 |
src/elo.js | IX 连接、归档路径 |
src/elo-mcp.js | 核心、协议、文本提取、第 1 阶段 |
src/elo-mcp-schreiben.js | 第 2 阶段、预览/令牌、字段检查、协议 |
src/elo-mcp-bauen.js | 第 3 阶段、构建计划、脚本检查 |
src/elo-mcp-start.js | 主循环 |
test/offline.ps1 | 无需 ELO 的测试(协议、阶段、构建计划、脚本) |
test/test-mcp.py | 针对真实 ELO 的调用,例如 python -I test\test-mcp.py test\beispiel-lesen.json -- -IxUrl <url> |
mcpb/ | Claude Desktop 的软件包:manifest.json、启动脚本 mcpb-start.ps1(设置 → 开关)、图标 |
tools/build-mcpb.ps1 | 构建 dist\elo-mcp-<version>.mcpb,并将校验和及下载 URL 写入 server.json |
server.json | MCP 注册表的条目 |
test/test-mcpb.py | 像 Claude Desktop 一样启动已构建的软件包,例如 python -I test\test-mcpb.py dist\elo-mcp-0.5.0.mcpb -- ix_url=<url> |
构建过程中遇到的 IX API 陷阱列于 docs/FALLEN.md。
参与贡献
欢迎提交 Issues 和 Pull Request,也欢迎分享其他 ELO 版本的使用经验。请勿在 Issues、日志或测试文件中包含内部数据(主机名、用户、对象 ID、租户名称)。提交 Pull Request 前,请运行 test\offline.ps1。请勿公开报告安全漏洞,而应按照 SECURITY.md 中的说明进行报告。
许可证与商标
采用 MIT 许可证,详见 LICENSE。不作任何保证:请先在测试归档中试用写入和构建功能。
本项目并非 ELO Digital Office GmbH 的产品,也未获得该公司的支持或审核。ELO 是 ELO Digital Office GmbH 的商标。ELO 库不属于本仓库,也不包含在软件包中。请使用您获得授权的 ELO Java 客户端提供的库。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。