关于 ACMP MCP Server
ACMP MCP Server 将 MCP 客户端连接到 Aagon ACMP Public API,可查询设备、库存、漏洞、作业和工单。它运行在 ACMP 服务器上,记录写入、执行和删除操作,并提供网页紧急制动开关以阻止这些操作。
主要功能
- 01查询客户端、库存、CVE、作业和工单
- 02记录写入、执行及删除操作
- 03通过紧急制动阻止修改类工具
- 04用 dryRun 预览支持的变更
- 05为每位操作员配置 API 密钥和可选 ACMP 身份
适用场景
- 01查找长期离线的设备
- 02检查会更改 ACMP 的操作记录
- 03发生事件时停止所有写入和执行工具
- 04查看客户端命令的部署进度
MCP 相关
该服务通过 Streamable HTTP 将 ACMP API 操作作为 MCP 工具提供,供支持此传输方式及授权请求头的客户端使用。仅支持 stdio 的客户端可通过 `mcp-remote` 接入。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
说明
English: MCP server for Aagon ACMP's Public API, with an activity log of every write/execute/delete action and an emergency brake that blocks them all (the four-eyes approval of version 1 is gone). Runs as a single Windows EXE on the ACMP server and works with any MCP client. Docs are in German because ACMP's user base is mostly DACH; issues in English are welcome.
一个用于 ACMP 公共 API(Aagon Client Management Platform)的 MCP 服务。你可以用日常语言提问,例如“哪些计算机已离线 30 天?”,AI 会直接从 ACMP 获取答案。
概览
- 支持任何 MCP 客户端: Claude、ChatGPT/Codex、GitHub Copilot、Gemini、Cursor……
- 覆盖范围广: 客户端、容器、作业/客户端命令、工单、资产、库存、漏洞和主数据。
- 活动日志和紧急制动: 所有操作立即生效,执行前
dryRun会显示预览。每项写入、执行和删除操作都会记录操作人员、目标、意图和结果;网页界面上的紧急制动功能可以一键锁定所有这些操作。版本 1 的双人审批已取消(原因)。 - 按操作人员区分: 每人使用自己的 API 密钥,也可以选择使用自己的 ACMP 身份。这样 ACMP 就会检查该人员的实际权限。
- 单个 EXE,无需云服务: 直接运行在 ACMP 服务上。无需 IIS,也无需 .NET SDK。
- 浏览器中的运行概况: 首页显示当前的重要信息(失去联系的计算机、磁盘已满的计算机、过期扫描、错误较多的作业),并提供共用的待办事项列表、按计算机查看客户端命令的部署状态,以及 Windows 更新的错误停止信息。
- 可选功能: 创建、审批、分类并设置参数的客户端命令;维护 Kiosk;拒绝 Windows 更新或在测试环中暂停更新;订阅并分发 Managed Software;设置容器筛选器、维护时段和安全配置文件;编写 Unix 脚本;创建自定义字段;以及在 ACMP 数据库中直接启用或创建作业。默认关闭。
- 现成模板: ACMP CTL(Community Template Library,社区模板库)中提供客户端命令模板,其中每个步骤都以明文列出。
acmp_lib_install会将模板作为草稿添加到你们的 Console 中。
兼容性
| 已测试或要求 | |
|---|---|
| ACMP | 6.9 和 6.10,搭配 AESB/SICS,且已启用 Public API |
| 数据库写入工具(CC、Kiosk、WUM、Unix 脚本、字段和作业写入工具) | ACMP 6.10(Unix 脚本从 6.10 开始提供)。如果存在差异,例如 ACMP 更新后,预检会阻止写入 |
| 服务器 | Windows Server,安装 .NET Framework 4.8,并在 ACMP 服务器上拥有管理员权限 |
| MCP | Streamable HTTP(JSON-RPC 2.0),协议版本 2025-06-18 |
| AI 客户端 | Claude Code、Claude Desktop(也可作为扩展 .mcpb)、Codex CLI、VS Code/GitHub Copilot、Cursor 和 Gemini CLI 的模板见 docs/CLIENTS.md |
快速开始
A) 让 AI 为你完成设置
在 ACMP 服务器上克隆仓库或解压 ZIP 文件。在该服务器上启动一个能够执行命令的 AI Agent(Claude Code、Codex CLI、GitHub Copilot Agent 模式、Gemini CLI、Cursor 等),然后输入:
Richte diesen ACMP-MCP-Server auf diesem Rechner ein. Folge AGENTS.md Schritt für Schritt,
erkläre mir jeden Admin-Schritt, bevor ich ihn ausführe, und frag mich nie nach Passwörtern
oder API-Keys im Chat.
AGENTS.md 包含完整流程:检查、安装、初始设置、LAN 共享、客户端连接和故障排除。大多数 Agent 会自动读取该文件。我们还提供了指向该文件的引用,供 Claude Code(CLAUDE.md)、Gemini CLI(GEMINI.md)和 GitHub Copilot(.github/copilot-instructions.md)使用。
B)手动操作:在终端中运行助手
在 ACMP 服务器上打开 PowerShell,切换到仓库目录并启动。如果没有管理员权限,脚本会在 Windows 提示(UAC)后自动以管理员身份重新启动:
.\install.ps1
最后,助手会显示你们的 API 密钥和 Web 登录信息(用于概览、活动、紧急停止和引导的短名称 + Web 令牌),并可按需将密钥复制到剪贴板。随后,它会询问你们使用的 AI 客户端,并显示相应的完整配置。
助手会执行的 9 个步骤
每个步骤都会说明正在进行的操作,并提供建议值(按 Enter 键即可采用):
- 检查前提条件(AESB SICS、端口 3950、.NET、可用端口)。如有问题,会说明该怎么处理。
- 询问 ACMP 控制台中的 Public API,并显示点击路径。
- 安装并构建到
C:\ProgramData\AcmpMcp。配置、机密和日志仅对管理员和 SYSTEM 可读。 - 询问 SICS 用户。 输入密码时会隐藏内容。
- 设置服务并检查 ACMP 登录。 如果登录失败,会再次询问凭据。
- 将你设为首位管理员(MCP API 密钥和 Web 登录信息)。
- 如果你愿意,关联你自己的 ACMP 身份。之后 ACMP 会检查你的实际权限。
- 可选功能: 即时 PowerShell、数据库报告、数据库写入工具。
- 网络: 建议 LAN IP 和子网,并允许管理员电脑访问服务器。
docs/ACMP-VORBEREITUNG.md 介绍了 ACMP 控制台中的点击操作,例如即时 PowerShell 的客户端命令模板。
其他命令:添加同事、更新、卸载
你们可以在终端中添加其他同事,也可以通过浏览器访问 /onboarding 添加:
cd C:\ProgramData\AcmpMcp
.\add-user.ps1
| 命令 | 用途 |
|---|---|
.\install.ps1 -CheckOnly | 仅检查,不做任何更改(无需管理员权限) |
.\install.ps1 | 再次运行即可更新。配置和操作人员会保留,已完成的步骤会跳过。版本 1 的配置会在此过程中转换(approval → web) |
.\install.ps1 -NonInteractive -SicsUser … -AdminName … | 无需交互确认,例如用于脚本。密码从 $env:ACMP_SICS_PASSWORD 读取 |
.\set-network-admin.ps1 -BindAddress <IP> | 稍后更改网络设置 |
.\renew-web-tokens.ps1 | 更新 Web 令牌(全部更新,或使用 -Name … 指定)。更新后旧令牌将失效,新令牌只会在窗口中显示一次 |
.\uninstall-admin.ps1 | 移除服务和防火墙规则 |
连接客户端
任何支持 Streamable HTTP 且可设置自定义请求头的 MCP 客户端都可以直接连接:
| URL | http://<HOST>:8765/ |
| 请求头 | Authorization: Bearer <KEY>(个人 API 密钥,可在设置或引导页面获取) |
例如,Claude Code:
claude mcp add --transport http acmp http://<HOST>:8765/ --header "Authorization: Bearer <KEY>" --scope user
Claude Desktop: 双击从 Releases 下载的 acmp-mcp-<version>.mcpb 进行安装,然后在扩展程序的设置中填写服务器地址和 API 密钥。
所有常见客户端的完整配置请见 docs/CLIENTS.md。仅支持本地(stdio)服务的客户端,可通过 mcp-remote 桥接接入。
工作原理
flowchart TB
KI["KI-Client<br/>Claude · Codex · Copilot · Gemini · Cursor"]
subgraph SRV["ACMP-Server"]
MCP["ACMP-MCP-Server<br/>(Windows-EXE)"]
LOG[("Aktivitätsprotokoll<br/>+ Notbremse")]
ACMP[("ACMP<br/>Public API über SICS/AESB")]
DB[("ACMP-Datenbank")]
end
TEAM(["IT im Browser<br/>Weboberfläche"])
KI -->|"MCP · HTTP + API-Key"| MCP
MCP -->|"lesen · schreiben · ausführen"| ACMP
MCP -->|"jede Schreibaktion"| LOG
TEAM -->|"Aktivität ansehen · Notbremse ziehen"| LOG
MCP -.->|"optional: DB-Reports, Writer"| DB
技术细节
- 服务通过 Aagon 自己的客户端 DLL(
Aagon.Sis.Sics.*,已包含在 ACMP 安装程序中)连接到 SICS/AESB(wss://127.0.0.1:3950)。因此,协议、加密和登录方式与 Aagon 自己的工具相同。 - 服务向 ACMP 发送 ICQL 命令。路由密钥由服务自行确定,虚拟路由器则从配置中读取(默认值为
VCMN)。 - 这些命令通过 JSON-RPC 2.0/HTTP 作为 MCP 工具提供(使用自有的
TcpListener,无需 URL ACL)。 - **按用户区分:**每位操作人员都有独立的 API 密钥,也可以配置独立的 ACMP 身份。这样,ACMP 会检查该身份的实际权限(
GetOwnUserRights)。 - **活动日志和紧急停止:**每次写入、执行或删除操作之前,服务都会向
activity-JJJJ-MM.jsonl写入一条记录。如果无法写入,操作就不会执行。操作结束后还会记录结果。紧急停止开关(notbremse.json)会在服务端锁定所有这些工具,直到有人在 Web 界面中解除锁定。某次调用是否会写入,由服务(工具列表或命令名称)决定,而不是由大模型决定。只有确实会处理dryRun的工具才支持它。
版本 2:无需双人审批
在版本 1 中,写入、执行和删除命令会作为申请提交到审批页面,只有获批后才会执行。根据我们的实际经验,从未有申请因安全原因被拒绝,点击审批只会拖慢流程。从版本 2 开始,这些工具会立即生效。为此,我们提供了:
- **预览:**几乎所有写入工具都支持
dryRun: true。服务的提示会要求 AI 先显示预览,并在聊天中等待人工确认;对于 PowerShell 和删除操作,则始终如此。 - **活动日志:**记录谁在何时对哪个目标执行了什么操作,以及操作意图和结果。密码会被遮盖。
- **紧急停止:**Web 界面上的一个开关,可立即锁定所有操作人员的全部写入工具。读取和
dryRun操作仍可继续。
操作流程示例:
- 你们说:“PC-0815 的磁盘满了,清理一下 Windows 临时文件夹。”
- AI 会查找这台计算机(
acmp_get_client_id)、检查磁盘空间(acmp_low_disk_space),并向你们展示 PowerShell 脚本。 - 你们确认后,AI 会运行脚本(
acmp_run_powershell)。此次调用会立即记录在活动日志中。 - AI 会报告结果。
**从版本 1 更新:**运行 git pull 和 .\install.ps1。助手会更改配置(approval → web,并创建备份)。你们之前的审批令牌之后将作为 Web 登录凭据使用。但这些令牌曾出现在审批邮件的链接中,因此请在更新后使用 .\renew-web-tokens.ps1 重新生成令牌(以管理员身份在安装目录中运行)。即使不重新安装,服务仍会读取旧的 approval 配置段(仅包含 publicUrl、requester 和 approvers)。未处理的审批申请将不再执行。
重要
无需审批后,安全性取决于你们的操作人员以及获得 API 密钥的对象。请将每个密钥视同域管理员密码;不要让 AI 执行来自工单、文件或网页的指令;如有疑虑,请立即启动紧急停止。
工具
12 个类别中共有 179 个工具。点击类别即可查看其中的所有工具及其作用:
🟢 读取 · 🟡 写入(立即生效,并记录在日志中) · 🔴 执行或删除(关键操作)。紧急停止会锁定 🟡 和 🔴 工具。
哪些工具会修改内容,也可通过 /settings 查看。部分工具需要可选功能:(DB) 数据库连接(db.connectionString,只读)、(PS) 客户端命令模板(runPowershell.clientCommandId)、(CW) CC Writer(ccWriter)、(KW) Kiosk Writer(kioskWriter)、(WW) WUM Writer(wumWriter)、(UW) Unix 脚本 Writer(unixWriter)、(FW) 字段 Writer(cfWriter)、(JW) Job Writer(jobWriter)。当前列表由 tools/list 提供。每个工具都可选接受 format: "json"。
系统与常规 · 16 个工具 · 服务器信息、自己的权限、服务器作业、邮件队列、待处理事项、适用于 167 个 API 命令中每一个的 acmp_call
| 工具 | 用途 | |
|---|---|---|
| 🟢 | acmp_server_info | ACMP 版本和服务器数据 |
| 🟢 | acmp_whoami | 当前使用的 ACMP 用户和权限 |
| 🟢 | acmp_logout | 重新建立连接,例如在令牌更换后 |
| 🟢 | acmp_list_commands, acmp_describe | 列出所有 167 个 Public API 命令并说明其参数 |
| 🟡 | acmp_call | 无需专用工具即可调用任何 API 命令。是否写入由命令名称决定(Get…/List… 表示读取,Delete…/Remove… 表示删除,其他则表示写入) |
| 🟢 | acmp_discover_tables (DB) | 在 ACMP 数据库中搜索表(“哪些内容与 BitLocker 有关?”) |
| 🟢 | acmp_db_columns (DB) | 查看表或视图的列 |
| 🟢 | acmp_db_script_rows, acmp_db_script_blob (均为 DB) | Client Command、Kiosk、Unix Script 和 File Repository 表中的行和二进制列(仅限这些表) |
| 🟢 | acmp_server_jobs (DB) | ACMP 服务器自身的任务(同步、下载、清理、报告),包含最近一次运行和最近一次错误消息 |
| 🟢 | acmp_mail_queue (DB) | ACMP 服务器中滞留在队列里的邮件,以及邮件服务器的错误消息 |
| 🟢 | acmp_console_users (DB) | ACMP Console 的用户和组,包含角色、AD 映射以及当前已登录的用户 |
| 🟡 | acmp_send_report | 立即生成一份 Console 报告并通过邮件发送,仅发送到 reports.allowedMailDomains 中的域 |
| 🟢 | acmp_open_items | IT 团队的共享“待处理事项”列表(显示在 Web 界面的仪表板中) |
| 🟡 | acmp_open_item_set | 创建、修改、完成或重新打开待处理事项;“创建者”始终是 API 密钥的操作人员 |
客户端与资产清单 · 22 个工具 · “最近谁用过 PC-0815?”,硬件、电池和 TPM、服务、共享、个性化字段
| | 工具 | 用途 | |---|---|---| | 🟢 | `acmp_get_clients`, `acmp_get_client_id`, `acmp_client_info` *(DB)* | 列出计算机,通过计算机名称(经由 DB)或 MachineId 和 MAC 查找 ClientId,查看包含 IP、MAC 和 Agent 版本的资料 | | 🟢 | `acmp_get_os_info` | 操作系统和最近登录的用户(“谁最近使用过 PC-0815?”) | | 🟢 | `acmp_get_hardware`, `acmp_hardware_profile` *(DB)* | CPU、RAM、磁盘、服务、制造商、型号、序列号 | | 🟢 | `acmp_offline_clients` *(DB)* | X 天内未联系的计算机 | | 🟢 | `acmp_agent_versions` *(DB)* | Agent 版本分布 | | 🟢 | `acmp_low_disk_space` *(DB)* | 可用空间不足的驱动器 | | 🟡 | `acmp_read_registry`, `acmp_read_registry_result` *(两者均为 PS)* | 从客户端读取一个注册表值(固定的读取脚本;作为作业在客户端运行,因此在协议中以及触发紧急停止时会被拦截) | | 🟢 | `acmp_db_client_attributes` *(DB)* | 客户端的自定义字段 | | 🟢 | `acmp_cf_list` *(DB)* | 包含表、列和类型的自定义字段;也可按需查看各客户端的值 | | 🟡 | `acmp_cf_create` *(FW)* | 像在控制台中一样为客户端创建自定义字段(整数或文本,可选创建新表) | | 🟡 | `acmp_cf_set_value` | 像在控制台中一样设置客户端某个自定义字段的值(Public API,不运行脚本),并检查长度、数值范围和选项列表 | | 🟢 | `acmp_os_builds` *(DB)* | 各客户端的 Windows 版本和修订号(UBR):累积更新是否确实已安装? | | 🟢 | `acmp_user_logons` *(DB)* | 根据 Agent 的记录查看登录情况:某人使用过哪些计算机,某台计算机由谁使用过 | | 🟢 | `acmp_hardware_health` *(DB)* | 各客户端的电池剩余容量和 TPM 版本,按电池状况从差到好排序 | | 🟢 | `acmp_services_search` *(DB)* | 全网的 Windows 服务:服务在哪些计算机上运行、已停止或已禁用,以及使用的账户 | | 🟢 | `acmp_shares` *(DB)* | 客户端的网络共享,不包括管理共享 | | 🟢 | `acmp_windows_features` *(DB)* | 全网的可选 Windows 功能(“哪些地方仍启用了 SMB1?”) | | 🔴 | `acmp_delete_clients` | 像在控制台中执行“删除客户端”一样从 ACMP 中移除旧客户端(最多 25 个,无法撤销)。受保护的客户端以及过去 30 天内联系过的计算机会被拒绝(除非使用 `force`) |软件与安全 · 22 个工具 · CVE、缺失的更新、拒绝更新、测试环中的错误停止、Defender、BitLocker、许可证
| | 工具 | 用途 | |---|---|---| | 🟢 | `acmp_get_software`, `acmp_software_inventory` *(DB)*, `acmp_software_search` *(DB)* | 按计算机查看已安装的软件并搜索(“7-Zip 安装在哪?”) | | 🟢 | `acmp_outdated_software` *(DB)* | 过时的软件 | | 🟢 | `acmp_missing_updates`, `acmp_failed_updates` *(两者均为 DB)* | 缺失和安装失败的 Windows 更新 | | 🟢 | `acmp_wum_declined` *(DB)* | 已拒绝的 Windows 更新、备注及受影响的客户端;使用 `scope: "open"` 查看尚未处理的候选项 | | 🟡 | `acmp_wum_decline`, `acmp_wum_restore` *(WW)* | 像在控制台中一样拒绝 Windows 更新或撤销拒绝;每个任务最多 10 项,且必须填写备注 | | 🟢 | `acmp_wum_update_clients` *(DB)* | 哪些客户端需要、已安装或安装失败的更新(ID、KB 编号或标题) | | 🟢 | `acmp_wu_diagnosis` *(DB)* | 更新管理的注册表检查:缺失的 WSUS 策略、已暂停的更新、Windows Update for Business | | 🟢 | `acmp_wum_rings` *(DB)* | 带故障停止的分发环:每项处于测试环的更新在测试计算机上的状态、计划的后续发布,以及停止原因 | | 🟡 | `acmp_wum_ring_hold` *(WW)* | 暂停测试环中的更新(关闭自动过渡) | | 🔴 | `acmp_wum_ring_release` *(WW)* | 让已暂停的更新继续运行或立即放行(针对严重漏洞的紧急处理) | | 🟢 | `acmp_security_profiles` *(DB)* | ACMP 的 BitLocker 和 Defender 配置文件、容器及设置 | | 🟢 | `acmp_vulnerabilities`, `acmp_oval_scan_status` *(两者均为 DB)* | 漏洞(CVE)的评分和上次扫描时间 | | 🟢 | `acmp_oval_definitions` *(DB)* | 在整个设备群的 OVAL 定义中按 CVE 或产品搜索(“ACMP 已知该 CVE 吗?哪些设备受影响?”),并提示自发布以来已扫描的客户端数量 | | 🟢 | `acmp_defender_health` *(DB)* | Defender 状态(“哪些设备关闭了实时保护?”) | | 🟢 | `acmp_bitlocker_status` *(DB)* | 各驱动器的 BitLocker 状态 | | 🟢 | `acmp_get_licenses`, `acmp_license_compliance` *(DB)* | 许可证及超额和不足情况 |如果某项更新在测试计算机上因实际错误而安装失败,或者即将发布时尚未安装到任何测试计算机上,故障停止机制会暂停该更新。可按需启用服务器上的监控程序,每小时检查一次并通过邮件报告(wumWatch 默认关闭)。规则见:docs/USAGE.md。
托管软件 · 6 个工具 · 订阅、各环版本、设备群分发、测试安装
| 工具 | 用途 | |
|---|---|---|
| 🟢 | acmp_msw_packages (DB) | 已订阅的软件包(或整个目录),包括最新版本和已批准版本、安装该软件包及有待处理更新的客户端、定期任务 |
| 🟢 | acmp_msw_package (DB) | 软件包详情:各分发环的版本、设备群中的版本分布、定期任务、参数 |
| 🟢 | acmp_msw_client (DB) | 客户端的托管软件状态及最近的运行记录 |
| 🟡 | acmp_msw_subscribe (JW) | 像在控制台中一样订阅软件包;下载和批准由 ACMP 服务完成 |
| 🔴 | acmp_msw_job_create (JW) | 为某个容器中的软件包创建定期任务(安装/更新或仅更新) |
| 🔴 | acmp_msw_test_install (JW) | 像“分配托管软件”一样,将软件包一次性发送给 1–5 个客户端,例如用于测试 |
Public API 无法分发托管软件。写入工具属于 Job-Writer,还需要 grant-msw-writer.sql。MCP 无法立即通知 Agent:Agent 会在下次查询任务时获取该任务。
作业与执行 · 20 个工具 · 检查、启用和创建定期作业,步骤日志,维护时段,Agent 计划程序,以 SYSTEM 身份运行 PowerShell 🔴
| 工具 | 用途 | |
|---|---|---|
| 🟢 | acmp_get_client_commands | 可用的客户端命令 |
| 🟢 | acmp_get_jobs、acmp_job_results、acmp_script_history (均为 DB) | 查看某台计算机有哪些作业、运行过什么以及运行结果 |
| 🟢 | acmp_jobs (DB) | 容器上的定期作业,包括目标、以明文显示的启动条件、最近 7 天和 30 天的运行及错误,以及提示(“哪些作业每小时运行且未设置为‘一次性’?”) |
| 🟢 | acmp_agent_tasks、acmp_scanner_status、acmp_maintenance_windows (均为 DB) | Agent 计划程序任务(扫描器),包括启动条件和容器;每个客户端和扫描器的最新数据;维护时段 |
| 🟡 | acmp_job_set_enabled、acmp_job_restore (JW) | 像在控制台中一样启用或禁用定期作业;从备份还原任何作业更改 |
| 🔴 | acmp_job_set_condition (JW) | 为容器设置启动条件(一次性、Agent 启动时、每天、每小时、维护时段内)。适用于该容器的所有定期作业 |
| 🔴 | acmp_job_delete (JW) | 像在控制台中一样删除定期作业;保留作业历史记录和作业模板;一次性作业的删除方式与作业监视器中的“删除”相同 |
| 🔴 | acmp_job_create (JW) | 在容器上创建不带参数的客户端命令定期作业 |
| 🟢 | acmp_job_log (DB) | 客户端命令运行的步骤日志:每个步骤的结果、耗时和消息 |
| 🟡 | acmp_maintenance_window_create (JW) | 像在控制台中一样创建维护配置文件(按星期几设置时段) |
| 🔴 | acmp_maintenance_window_assign、acmp_maintenance_window_delete (JW) | 为容器分配或取消分配维护配置文件,删除未使用的配置文件 |
| 🔴 | acmp_agent_template_assign (JW) | 为容器分配或取消分配 Agent 计划程序模板 |
| 🔴 | acmp_enqueue_client_command | 启动现有客户端命令 |
| 🔴 | acmp_run_powershell (PS) | 以 SYSTEM 身份在客户端上运行任意 PowerShell |
Public API 无法修改作业。因此,作业写入工具会直接写入 ACMP 数据库,且默认处于禁用状态。每个请求最多处理 10 个作业,操作前会先备份;acmp_job_restore 可还原任何更改。设置方法:docs/ACMP-VORBEREITUNG.md →“其他写入工具”。
客户端命令 · 20 个工具 · 可选 · 创建草稿、新建版本、设置参数、发布、整理归档、删除
Public API 只能启动客户端命令,不能创建客户端命令。因此,这些工具会直接从 ACMP 数据库读取客户端命令,按需创建草稿、发布自行创建的草稿,并将命令整理到文件夹中。Aagon 不支持写入,因此默认处于禁用状态。设置方法:docs/ACMP-VORBEREITUNG.md →“直接写入客户端命令”。
Writer 只会修改允许文件夹中由自己创建的草稿,并且仅供获准的操作员使用。对于现有 Commands,它只会通过 acmp_cc_new_version 进行修改:创建新版本,绝不修改 Aagon 标准文件夹中的内容,保留步骤 ID 和已保存的密码;只有在明确要求时才会覆盖他人创建的草稿(并进行备份)。预览(dryRun)会显示每个步骤及其字段。
写入前,服务端会检查 ACMP 版本、表、触发器和写入登录帐号的权限。此外,还会试着解包并重新打包最近的 50 个 Commands。如果发现差异(例如 ACMP 更新后),则不会写入。可发布自己创建的草稿,以及最近由 MCP 保存的版本。对于包含已更改文件的后续版本,不会进行发布,需由控制台处理。像“HIER … EINTRAGEN”这样的占位符会阻止发布。已在 ACMP 6.10 上测试。
Kiosk · 13 个工具 · 可选 · 条目、文件夹、可见性、图标
Public API 也无法维护 ACMP-Kiosk。因此,这些工具会直接在 ACMP 数据库中读取和写入。此功能默认也处于关闭状态。设置方法:[`docs/ACMP-VORBEREITUNG.md`](docs/ACMP-VORBEREITUNG.md#kiosk-pflegen-kiosk-writer) →“维护 Kiosk”。| 工具 | 用途 | |
|---|---|---|
| 🟢 | acmp_kiosk_tree (DB) | 以纯文本形式显示 Kiosk 文件夹、条目和可见性筛选条件;使用 status: true 可查看预检结果 |
| 🟢 | acmp_kiosk_images (DB) | 显示允许来源中现有的图标和图像文件,并在聊天中预览 |
| 🟡 | acmp_kiosk_add_item (KW) | 将 Client Command 或 Managed Software 添加为 Kiosk 条目,并设置图标和可见性筛选条件(AD 组、OU、用户、容器、主数据等) |
| 🟡 | acmp_kiosk_update_items (KW) | 在一个任务中移动多个条目、重命名条目,或更改描述、图标或筛选条件 |
| 🟡 | acmp_kiosk_set_filter, acmp_kiosk_remove_item (KW) | 更改条目的可见性、移除条目 |
| 🟡 | acmp_kiosk_add_group, acmp_kiosk_update_group (KW) | 新建 Kiosk 文件夹、重命名(DE/EN),更改图标和筛选条件 |
| 🟡 | acmp_kiosk_add_image, acmp_kiosk_set_image, acmp_kiosk_remove_image (KW) | 上传图标(PNG、JPG、ICO、SVG)、设置图标、移除未使用的自定义图标 |
| 🟡 | acmp_kiosk_restore (KW) | 从自动备份中恢复 Kiosk 更改 |
| 🔴 | acmp_kiosk_delete_group (JW) | 删除空的 Kiosk 文件夹 |
仅会在你们授权的 Kiosk 文件夹以及 MCP 自行创建的文件夹中写入。每次更改前,服务都会备份旧状态。用户在 Kiosk 中点击“刷新”后即可看到更改。
Unix Scripts · 6 个工具 · 可选 · 适用于 Linux 和 macOS 的 Bash/Zsh,每个客户端分别显示输出
Unix Scripts(ACMP 6.10,Desktop Automation)通过 ACMP Unix Agent,以 root 身份在 Linux 和 macOS 客户端上运行。Public API 同样无法创建 Unix Scripts。写入功能默认处于关闭状态。设置方法:docs/ACMP-VORBEREITUNG.md →“其他写入工具”。
| 工具 | 用途 | |
|---|---|---|
| 🟢 | acmp_unix_scripts (DB) | 显示脚本、文件夹、解释器和已授权版本;也可按需显示所有版本、分发环和内容 |
| 🟢 | acmp_unix_results (DB) | 从作业监视器中查看每个客户端的运行记录及完整输出(StdOut/StdErr) |
| 🟡 | acmp_unix_script_create (UW) | 新建脚本,并将版本 1 放入测试环 1 |
| 🟡 | acmp_unix_script_new_version (UW) | 新建版本,预览会显示已更改的行 |
| 🟡 | acmp_unix_script_set_ring (UW) | 更改版本的分发环;ring: 255 表示发布该版本 |
| 🔴 | acmp_unix_script_delete (JW) | 按照控制台中的方式删除脚本及其所有版本;以往的输出会保留 |
MCP 不会修改现有版本;只能删除整个脚本。由于 ACMP 既没有 API,也没有 Job Collection,因此无法启动 Unix 作业。你们需要在控制台中操作(容器或查询 →“运行 Unix 作业”),之后可通过 acmp_unix_results 读取结果。如果没有可用的 Unix Script 许可证,ACMP 会将作业报告为“成功”,但脚本实际上不会运行。acmp_unix_results 会对此作出提示。
容器 · 9 个工具 · 读取、新建和更改成员及筛选条件、安全配置文件,以及删除 🔴
| | 工具 | 用途 | |---|---|---| | 🟢 | `acmp_container_members`, `acmp_client_containers` *(beide DB)* | 查看容器中的计算机和计算机所属的容器 | | 🟡 | `acmp_create_container`, `acmp_save_containers` | 创建或修改容器 | | 🟡 | `acmp_container_set_restriction` *(JW)* | 设置容器的客户端限制:仅允许其操作系统系列中的客户端,或允许所有客户端 | | 🟢 | `acmp_container_filter` *(DB)* | 查看容器的动态筛选器(连接方式、条件、子组)、当前匹配的计算机数量,以及 MCP 是否可以修改筛选器 | | 🔴 | `acmp_container_set_filter` *(JW)* | 像在控制台中一样设置容器筛选器;预览会列出将加入或移出的计算机。使用 `excludeComputers` 排除单台计算机 | | 🔴 | `acmp_container_security_profile` *(JW)* | 为容器分配或移除 BitLocker 或 Defender 配置文件。Agent 会在所有成员计算机上应用该配置 | | 🔴 | `acmp_delete_containers` | 删除容器 |资产与主数据 · 25 个工具 · 借出资产、联系人、地点、合同
| 工具 | 用途 | |
|---|---|---|
| 🟢 | acmp_get_asset_list, acmp_get_asset_types | 查看资产和资产类型 |
| 🟡 | acmp_create_asset, acmp_update_asset | 创建或修改资产 |
| 🟡 | acmp_lend_asset, acmp_return_asset | 借出或收回资产 |
| 🟢 | acmp_get_contacts, _companies, _locations, _departments, _cost_centers | 查看主数据 |
| 🟡 | acmp_create_*, acmp_update_*,适用于 contact、company、location、department | 创建或修改主数据 |
| 🟢 | acmp_get_contracts, acmp_contracts_expiring (DB) | 查看合同和即将到期的合同 |
| 🟢 | acmp_get_custom_fields, _custom_field_list, _master_data_settings, _app_settings | 查看自定义字段和设置 |
服务台 · 18 个工具 · “创建工单:二楼的打印机无法打印。”
| 工具 | 用途 | |
|---|---|---|
| 🟢 | acmp_get_tickets, acmp_get_ticket, acmp_tickets_by_query | 查看工单,也可通过已保存的查询查看 |
| 🟢 | acmp_get_ticket_comments, _worktime, _costs, acmp_get_linked_tickets | 查看历史记录、工时、费用和关联项 |
| 🟢 | acmp_helpdesk_settings, acmp_get_assignees, _ticket_templates, _ticket_categories, _ticket_resolutions, _queries | 查看服务台设置 |
| 🟡 | acmp_create_ticket | 创建工单(“创建工单:二楼的打印机无法打印。”) |
| 🟡 | acmp_update_ticket | 更改负责人或优先级 |
| 🟡 | acmp_close_ticket, acmp_reopen_ticket | 关闭或重新打开工单 |
| 🟡 | acmp_add_ticket_comment | 添加评论 |
远程维护 · 2 个工具 · TeamViewer ID 和连接链接
| 工具 | 用途 | |
|---|---|---|
| 🟢 | acmp_teamviewer_ids (DB) | 查看所有客户端的 TeamViewer ID |
| 🟢 | acmp_teamviewer_connect (DB) | 获取连接到某台计算机的 TeamViewer 链接,也可通过用户名搜索 |
示例提示词见 docs/USAGE.md。要添加新的原生命令,只需在 api-tools.json 中声明;要添加新的 SQL 报告,只需在 db-tools.json 中声明。两者都无需重新编译。
Web 界面
| 页面 | 用途 |
|---|---|
/dashboard | 概览:当前的重要事项(失联的计算机、空间不足、扫描过旧、错误较多的作业、服务器作业)、带表单的待处理事项、紧急停止开关和最新活动。需要 db.connectionString,以及 dashboard 中的阈值 |
/dashboard/rollout | 按计算机查看客户端命令的部署状态:任务、最近一次运行、结果、输出中的关键行 |
/dashboard/updates | Windows 更新的错误停止机制:已暂停的更新及其决策(继续运行、立即放行)、各测试计算机的状态、通知 |
/activity | 活动日志,可按操作员、工具和错误筛选 |
/settings | 启用和解除紧急停止、配置可访问 Web 界面的操作员、查看所有会更改内容的工具 |
/onboarding | 添加其他操作员 |
/changelog | 服务器补丁记录 |
/setup | 初始设置;仅在还没有可访问 Web 界面的操作员时启用 |
登录(/login)使用操作员的短名称和专属 Web 令牌,之后通过会话 Cookie(HttpOnly、SameSite=Strict,有效期 12 小时)维持登录。Web 令牌与 ACMP 或 MCP 密钥相互独立:即使 API 密钥泄露,也无法解除紧急停止。版本 1 中的旧链接(?approver=…&token=…)不再用于登录,因为地址中的令牌会进入邮件、浏览历史记录和代理日志。renew-web-tokens.ps1 用于更新 Web 令牌。
配置
config.example.json 带有注释(_hinweis 字段)。install.ps1 会据此生成 config.local.json。
重要键
| 键 | 含义 |
|---|---|
sics.username / password | SICS/AESB 基础连接 |
sics.virtualRouter / wssPort | 默认值:VCMN / 3950 |
mcp.bindAddress / httpPort | 默认值:127.0.0.1 / 8765。通过 set-network-admin.ps1 访问局域网 |
web.publicUrl / web.users | Web 界面的地址(也用于 acmp_read_registry 的回传通道)以及可访问 Web 界面的操作员 |
runPowershell.clientCommandId | 可选,启用 acmp_run_powershell / acmp_read_registry |
runPowershell.protectedClients / protectedClientIds | 可选:其他不允许 MCP 启动作业的计算机(计算机名称或 ClientId)。ACMP/MCP 服务器本身始终包含在内。如果没有数据库连接,请设置 protectedClientIds(ACMP 服务器的 ClientId),否则服务器会拒绝在客户端上执行作业 |
db.connectionString | 可选,启用数据库报告工具 |
helpdesk.createdStateId | 可选,新工单的状态 |
ccWriter.* | 可选,默认关闭:将客户端命令保存为草稿、批准并归类。使用 setup-cc-writer.ps1 设置,使用 setup-cc-writer.ps1 -AddRequester <name> 添加其他操作员 |
kioskWriter.* | 可选,默认关闭:维护 Kiosk。需要 CC-Writer(使用相同的 SQL 登录名)。使用 setup-kiosk-writer.ps1 设置 |
wumWriter.*、unixWriter.*、cfWriter.*、jobWriter.* | 可选,默认关闭:拒绝 Windows 更新并在测试环中暂停、编写 Unix 脚本、创建自定义字段、启用和创建作业、管理软件、容器筛选器、维护时段、安全配置文件、删除。需要 CC-Writer(使用相同的 SQL 登录名和操作员)。使用 setup-extra-writers.ps1 设置 |
wumWatch.* | 可选,默认关闭:错误停止机制的监视器(mode: report 仅报告,hold 也会暂停),汇总邮件使用 mail.smtpHost |
reports.allowedMailDomains | 可选:允许 acmp_send_report 发送报告的域名。留空 = 工具关闭 |
dashboard.* | 可选:概览的阈值(无联系天数、可用空间、扫描时间、作业错误率) |
ctl.sources | 可选,acmp_lib_install 的来源。默认:安装目录中的 ctl 文件夹,然后是仓库 Herzog-GmbH/acmp-ctl |
警告
服务器提供完整的 ACMP 访问权限,甚至可以在所有终端设备上执行命令。请将每个 API-Key 都视为管理员密码。
- 未内置 TLS。 服务器默认只监听
127.0.0.1,且没有 API-Key 时拒绝在 LAN 中运行。在 LAN 中,请通过防火墙限制源子网。跨网络边界时,应在前面部署 TLS 代理或 VPN。 install.ps1将安装目录的权限限制为管理员和 SYSTEM,因为其中存放着凭据。- 紧急停止开关和日志位于安装目录中(
notbremse.json、activity-*.jsonl)。能够在此处写入的人也能绕过两者,因此仅允许管理员和 SYSTEM 访问。在 ACMP/MCP 服务器本机上,MCP 不会启动任何作业(acmp_run_powershell、acmp_enqueue_client_command、acmp_read_registry、acmp_call),因为以 SYSTEM 身份运行的脚本可能会读取其中包含所有密钥的config.local.json。其他计算机(例如 SQL 服务器)则通过runPowershell.protectedClients进行保护。 - 操作员密码从不保存:
acmp-token-setup.exe只保存经过 DPAPI 加密的令牌(LocalMachine)。 /regresult(acmp_read_registry的回传通道)有意不要求密钥,因为客户端不知道该密钥。它只接受与尚未关闭且不可猜测的令牌对应的结果。- 请不要通过公开 Issue 报告安全漏洞,而应按照
SECURITY.md中的说明处理。
数据库写入工具
- 可选的 CC Writer 使用专用 SQL 登录账号进行写入,该账号仅具有必要权限(
grant-cc-writer.sql),绝不使用只读账号。仅凭这些权限,它无法删除SYS_SCRIPTS中的任何内容。它只会创建草稿,在每次更改前进行备份,并且只会修改或发布由其自身创建的命令。对于其他人创建的命令,它只会创建新版本(acmp_cc_new_version),并可按需移动该命令。 - 可选的 Kiosk Writer 使用相同的登录账号,具备
grant-kiosk-writer.sql中的权限,并且只会写入已授权的 Kiosk 文件夹。 - WUM、Unix Script、字段和作业 Writer 也使用该登录账号(
grant-wum-writer.sql、grant-unix-writer.sql、grant-cf-params.sql、grant-jobs-writer.sql)。服务器只通过 ACMP 自有过程拒绝更新。对于自定义字段,该登录账号没有 DDL 权限:表和列由两个过程创建,它们只会按 ACMP 服务器的固定模式构建。在SYS_Jobs中,该账号只能修改启动条件和校验和;删除作业时,它通过与作业模板的关联进行删除,其余操作由 ACMP 触发器完成。 - 删除(客户端命令、空的 CC 和 Kiosk 文件夹、Unix 脚本、维护配置文件)以及维护时段、安全配置文件和 Agent 调度器模板,只有额外授予
grant-luecken-writer.sql中的权限后才能操作。每个工具都会在操作前后于事务中备份所有受影响的行,并通过acmp_job_restore还原这些行,前提是期间没有其他人修改它们。不执行该脚本,这些工具就会保持禁用状态。 - 入门配置时请注意:SQL 登录账号属于服务器,而非操作员。谁可以使用写入工具,由
ccWriter.allowedRequesters决定(add-user.ps1会询问此项;对于来自/onboarding的操作员,使用setup-cc-writer.ps1 -AddRequester <name>)。ACMP 不会在这些工具中检查个人的 ACMP 权限,因为它们绕过 Public API 直接写入数据库。
| 文件 | 内容 |
|---|---|
AGENTS.md | AI Agent 的设置流程,包括故障排查 |
docs/ACMP-VORBEREITUNG.md | ACMP 控制台中的操作:Public API、SICS 用户、可选功能 |
docs/CLIENTS.md | 各类常见 MCP 客户端的配置 |
docs/USAGE.md | 面向用户的速查表,含提示词示例 |
config.example.json | 带注释的示例配置 |
SECURITY.md | 私下报告安全漏洞 |
参与贡献
欢迎提交 Issues 和 Pull Requests。请勿在 Issue 中发布包含主机名、IP、用户名、密钥或令牌的日志,发布前请先打码。
许可证
MIT。这不是 Aagon GmbH 的官方产品。ACMP 和 AESB 是 Aagon GmbH 的商标。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。