关于 Achromat MOM
Achromat MOM 是供 Agent 检查工具调用是否符合策略、或复用已验证合规修正方案的 MCP 服务。它可检索过往经验,并依据实时策略评估调用;请求使用本地 Ed25519 密钥签名。
主要功能
- 01检索已验证的合规调用
- 02依据实时策略检查调用
- 03返回修正指引
- 04注册签名身份
- 05私钥保留在本机
适用场景
- 01执行前审查支付调用
- 02按策略检查 Shell 或 SQL 参数
- 03调用被拦截后复用已验证修正
MCP 相关
服务以子进程形式由 MCP 客户端宿主启动,并通过 stdio 通信,向客户端提供身份注册、经验检索和策略校验工具。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://mom.achromat.ai/mcpclaude mcp add --transport http ai-achromat https://mom.achromat.ai/mcp{"mcpServers":{"ai-achromat":{"type":"http","url":"https://mom.achromat.ai/mcp"}}}在 Cursor 中打开{"servers":{"ai-achromat":{"type":"http","url":"https://mom.achromat.ai/mcp"}}}在 VS Code 中打开{"mcpServers":{"ai-achromat":{"type":"http","url":"https://mom.achromat.ai/mcp"}}}{"mcpServers":{"ai-achromat":{"serverUrl":"https://mom.achromat.ai/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
1| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| user_confirmed | boolean | 是 | 仅当用户已明确同意创建身份后,才设为 true。如果尚未询问,请先询问,不要调用此工具。 |
详细介绍
Achromat MCP 服务
一个 MCP 服务,可让任何 MCP 宿主(Claude Desktop、IDE、Agent 框架)将 Achromat MOM 用作原生工具。MOM 会保存已验证的记忆,其中包括被策略拦截的工具调用,以及之后获准的修正调用。借助此服务,你的 Agent 可以在采取行动之前请求符合规范的调用版本,并依据实时策略检查调用,无需你编写任何集成代码。
此服务在你的机器上作为宿主的子进程运行,并通过 stdio 与宿主通信。它使用一把保留在你机器上的 Ed25519 密钥为发往 MOM 的每个请求签名:只有签名会离开你的机器,密钥不会。
添加到 Claude Desktop
打开配置文件:
| OS | 路径 |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
在 mcpServers 下添加此服务,然后重启 Claude Desktop:
{
"mcpServers": {
"achromat": {
"command": "npx",
"args": ["-y", "@achromat-ai/mcp-server"]
}
}
}
设置就全部完成了。需要 Node.js 20 或更高版本;-y 可让 npx 安装此软件包而无需询问。其他 MCP 宿主也使用相同的命令和参数,只需将它们写入各自的配置即可。
首次使用:让你的 Agent 设置身份
MOM 的每个请求都需要签名,因此此服务需要一把 MOM 认可的密钥。你不需要自行创建或注册密钥。首次使用此服务时,它还没有密钥,因此会提供一个工具 achromat_register_identity,并由你的 Agent 询问你是否要设置身份。如果你同意,此服务将:
- 在你的机器上生成一对 Ed25519 密钥,
- 执行简短的工作量证明(约需一秒;MOM 通过此方式限制自动注册),
- 向 MOM 注册公钥,然后
- 将私钥保存到
~/.achromat/achromat_agent_key.pem,此文件只有你可以读取。
之后,achromat_recall 和 achromat_calibrate 将取代注册工具。如果你的宿主不会自动刷新工具列表,请重启一次。
会离开你机器的内容:公钥、工作量证明,以及证明你持有私钥的签名。私钥绝不会离开。MOM 会保留注册记录,并将每个网络的注册次数限制为每天 10 次。
密钥文件就是身份。 请妥善保密,不要提交到 git,也不要出现在截图中,并做好备份:如果丢失,将无法恢复。此服务绝不会覆盖已有的密钥文件,并且只有在 MOM 接受密钥后才会保存文件,因此失败的尝试不会留下任何内容。
选择密钥存放位置
默认情况下,密钥位于 ~/.achromat/achromat_agent_key.pem。若要使用其他路径,请在宿主配置中设置 ACHROMAT_AGENT_KEY_FILE。此设置适用于新密钥(服务会在该路径创建密钥),也适用于已有密钥:
{
"mcpServers": {
"achromat": {
"command": "npx",
"args": ["-y", "@achromat-ai/mcp-server"],
"env": {
"ACHROMAT_AGENT_KEY_FILE": "/Users/you/keys/achromat_agent_key.pem"
}
}
}
}
在 Windows 上,请使用带转义反斜杠的完整路径,例如 "C:\\Users\\you\\keys\\achromat_agent_key.pem"。服务会展开路径开头的 ~。桌面应用启动服务时使用的主目录可能与终端中的不同,因此写明完整路径可避免任何疑问。
已有密钥必须是未加密的 PKCS#8 Ed25519 PEM 文件,并且已获 MOM 认可。
从源代码运行
git clone https://github.com/achromat-ai/achromat-mcp-server.git
cd achromat-mcp-server
npm install
npm run build
将宿主指向构建产物,而不是 npx:
{
"mcpServers": {
"achromat": {
"command": "node",
"args": ["/absolute/path/to/achromat-mcp-server/dist/index.js"]
}
}
}
若要在没有宿主的情况下通过浏览器试用这些工具,请使用 MCP Inspector:
npm run inspect
工具
achromat_register_identity
仅在不存在密钥文件时提供。如上所述,此工具会创建并注册身份。它要求 user_confirmed: true,且 Agent 只能在你同意后设置此值;工具描述会指示它先询问你。
| 参数 | 必填 | 描述 |
|---|---|---|
user_confirmed | 是 | 必须为 true,且只能在用户表示同意后设置。 |
achromat_recall
在运行可能被策略拦截的工具(支付、信用决策、机器人或工厂命令、shell、SQL、Web 请求)之前调用此工具。它会查询是否已有经过验证且合规的调用版本。匹配时,你会收到 compliant_arguments、steering_directive 以及适用的规则。将整个 compliant_arguments 对象用作模板,保留所有 [VERIFIED_STATE] 占位符原样不变,只修改你自己的操作值。
| 参数 | 必填 | 描述 |
|---|---|---|
domain | 是 | fintech、industrial_iot、robotics 或 devsecops。 |
tool_name | 是 | 你即将调用的工具的准确名称。 |
task_description | 是 | 用通俗文字描述你要做的事(16 到 1000 个字符,至少 3 个词)。不得包含金额、标识符或个人数据。 |
arguments | 是 | 你打算发送的参数,必须是非空 JSON 对象,并使用该工具实际的键名。语义匹配只使用键名(及其嵌套结构),绝不会使用值,因此使用实际键名才能找到合适的经验,而编造结构则会找到错误的经验或找不到任何经验。 |
achromat_calibrate
当 recall 未找到任何结果,或风险较高时调用此工具。它会根据当前策略评估调用,并返回判定结果、steering directive 和回执 ID。BLOCK 会附带一个 trap_id:按 directive 修正参数,并使用相同的 task_description 和该 trap_id 再次调用工具。ALLOW 表示调用合规。先被拦截、随后获准的调用会成为其他 Agent 的经验。
| 参数 | 必填 | 描述 |
|---|---|---|
domain | 是 | 同上。 |
tool_name | 是 | 同上。 |
task_description | 是 | 重试时必须使用完全相同的措辞:它用于将拦截与修正配对。 |
arguments | 是 | 要检查的调用参数。必须是非空 JSON 对象。 |
trap_id | 否 | 仅在重试时填写:使用先前 BLOCK 返回的 trap_id。 |
切勿在 arguments 或 task_description 中填写机密或凭据;服务会拒绝此类内容。
这些工具使用 tool_name 这个名称;服务自身的字段是 tool,服务器会在两者之间进行映射。
经验文本(规则、指令、参数)来自社区。服务器会在每个回答中将其标记为数据,Agent 应仅将其用于选择参数值。
配置
| 变量 | 默认值 | 含义 |
|---|---|---|
ACHROMAT_AGENT_KEY_FILE | ~/.achromat/achromat_agent_key.pem | Agent 的 Ed25519 私钥所在位置,或创建位置。 |
ACHROMAT_BASE_URL | https://mom.achromat.ai | 服务源地址。必须使用 https(仅 localhost 可使用普通 http)。 |
是否存在密钥文件决定了会提供哪些工具;系统会在启动时和注册后立即检查密钥文件。如果主机运行期间你删除、移动或替换了密钥文件,请重启主机。密钥本身会在首次调用工具时读取,因此错误的密钥不会导致服务器从主机中消失:工具调用会返回一条说明需要修正内容的消息。
遇到问题时
每次失败都会以易读的工具结果返回给 Agent,并说明下一步该怎么做。
| 你看到的内容 | 原因和修复方法 |
|---|---|
只列出了 achromat_register_identity | 目前还没有密钥文件。这是首次使用时的正常状态。Agent 询问时,选择同意。 |
A key file already exists at … | 此处已设置身份。若要重新开始,请移动或删除该文件,然后重启主机。 |
The key could not be saved at … | 该文件夹不可写。请修复其权限,或设置 ACHROMAT_AGENT_KEY_FILE。未注册任何内容。 |
Too many registration requests / registration limit | MOM 会限制每个网络的注册次数(每天 10 次)。请等待,或换用其他网络。未创建任何内容。 |
Could not reach … / No answer from … | 网络问题。未创建任何内容;请重试。 |
The identity was registered, but the key file could not be moved … | 罕见情况。消息中会给出密钥的保存路径;请将其移动到所需路径。不要删除它。 |
The key file is passphrase-protected / …holds a rsa key | 现有密钥必须是未加密的 PKCS#8 Ed25519 密钥。 |
The key file … is accessible to other users(在主机的服务日志中) | 对密钥文件运行 chmod 600。在执行此操作前,密钥仍可正常使用。 |
AGENT_KEY_UNKNOWN(401) | 密钥文件存在,但 MOM 不认识该密钥。请移动或删除该文件,然后重启主机以创建新身份。 |
AGENT_KEY_INACTIVE(403) | 密钥已被撤销或轮换。请移动或删除该文件,然后重启主机。 |
AGENT_SIGNATURE_EXPIRED(401) | 你的时钟与标准时间相差超过 60 秒。服务端会使用服务的时钟自动校正;如果仍然失败,请检查系统时间。 |
Rate limited(429) | Recall 每个密钥每小时最多允许 240 次请求,每天最多允许 50 条不同的经验;calibrate 每小时最多允许 120 次。请等待提示中给出的时间。 |
HTTP 400 INVALID_REQUEST | 服务会列出有问题的字段。通常是文本或参数中包含凭据或个人数据。 |
服务日志会写入 stderr,主机会将其写入各自的 MCP 日志文件(Claude Desktop 将日志保存在其日志文件夹中;macOS 上的路径为 ~/Library/Logs/Claude/)。服务绝不会记录密钥、签名或请求内容。
如果主机无法启动 npx,它可能无法看到终端所使用的 PATH(使用 nvm 时很常见)。请在 command 中填写 npx 或 node 的绝对路径。
开发
npm run typecheck # source and tests
npm test # vitest
npm run build # compile to dist/ and mark dist/index.js executable
npm start # run the built server on stdio (waits for a host)
stdout 是协议通道,因此服务不会向其中写入其他内容。
签名和注册代码遵循Agent 协议(第 2 和第 3 节)的字节级约定;测试会精确复现其中发布的自检向量:请求签名和工作量证明随机数。Ed25519 是确定性的,因此只要签名内容有一个字节发生变化,测试就会失败。
工作量证明会在多个工作线程上进行搜索(最多 8 个,不会占用所有核心),因此大约需要一秒,同时服务在运行期间仍能保持响应。
许可
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。