Agent Consent Protocol (ACP) MCP 服务器实现
使用说明(简要且可操作的步骤)
-
项目简介
- 该仓库实现了一个 ACP-MCP 服务器端框架,核心功能包括拦截 MCP 工具调用、根据策略决定是否允许/请求人类审批/拒绝、在获批后注入凭证、记录并签名的同意凭证,以及基于 JSON-RPC 的通信协议。它可以对接一个或多个上游 MCP 服务器,并通过可扩展的通道(终端、Telegram、Webhook 等)实现人类操作。
-
主要功能点
- MCP 请求/响应处理:实现 initialize、tools/list、tools/call、ping 等 MCP 请求的处理与转发。
- 策略引擎与审判:基于规则对工具调用进行分类、匹配、速率限制等,决定允许、需要同意或拒绝。
- 人工同意与通道适配器:支持通过本地终端、Telegram、Webhook 等渠道请求用户批准,并在获批后生成同意凭证。
- 凭证注入与凭证 vault:在获批后将敏感凭据注入工具调用参数中,敏感信息保存在加密 vault 中(支持 v1 明文与 v2 加密格式)。
- 审计日志与证据:对关键事件进行日志记录,并提供哈希链机制以确保日志不可篡改。
- 上游 MCP 服务器整合:通过两种传输方式(stdio 与 HTTP)管理并路由上游服务器的工具调用。
- 安全特性与可扩展性:支持多种传输协议、可插拔的审核与通道实现,适合拓展到不同的代理场景。
-
安装步骤
- 确保环境:Node.js(推荐 18+)与 Git。
- 克隆仓库并安装依赖:
- 使用 npm install 安装项目依赖(在合适的子目录内执行,如 cli/ 或根目录的对应包)。
- 初始化 ACP 配置与密钥:
- 运行初始化向导:acp init
- 该步骤会生成密钥对、默认策略、Vault 等必要组件,并放置在 ~/.acp/ 目录。
- 启动 ACP 服务端(MCP 代理):
- 运行命令:acp run -- CMD
- CMD 为你要包装的代理或上游 MCP 服务器启动命令,例如执行一个 Python/Node.js/MAP 的 MCP 服务命令。
- 通过该服务器,MCP 客户端(LLM 客户端)将通过 JSON-RPC 与 ACP 服务交互。
- 运行命令:acp run -- CMD
- 连接上游 MCP 服务器:
- 通过配置文件或启动参数,将上游服务器以命令(stdio 传输)或 URL(HTTP 传输)方式加入 ACP。
- 配置与渠道选择:
- 根据需要在 acp init 时选择不同的审批渠道(终端/ Telegram/ webhook)。
-
服务器配置(给 MCP 客户端的配置描述,JSON 结构要素,便于理解但非代码块展示) 说明:MCP 客户端需要知道“服务器名称、启动命令及参数等信息”,以便与 MCP 服务器建立连接。以下字段描述请以实际部署时为准,示例以 ACP 服务端为例。
- server_name: ACP-Proxy 注解:服务器在 MCP 客户端中的标识名称。
- command: acp 注解:启动 ACP 服务器的主命令(在客户端这一步不会直接运行,客户端需要知道如何启动服务器)。
- args: ["run", "--port", "8443"] 注解:启动 ACP 服务时的参数列表,用来配置服务器所监听的端口及行为。
- upstreams:
注解:与 ACP 服务器对接的上游 MCP 服务器集合。每个上游包含:
- name: 上游服务器名称,例如 "logs-service"、"python-mcp-agent"
- command: 如为 stdio 传输,上游的启动命令(如某个 MCP 服务的启动命令)
- url: 如为 HTTP 传输,上游的地址
- env: 启动时注入的环境变量(如需要,包含对 Vault 的引用等) 说明:以上字段用于 MCP 客户端了解如何启动和连接 ACP 服务器及其上游服务。具体配置信息需根据实际部署路径与环境来填写,客户端不需要了解内部实现细节。
-
基本使用方法
- 启动并配置 ACP 服务器后,使用 MCP 客户端连接到 ACP 服务端的地址(默认 http://127.0.0.1:8443)。
- 通过 ACP 提供的工具查询、调用以及对话模板等能力,LLM 客户端将通过 JSON-RPC 请求 ACP 进行工具调用的拦截、策略评估与凭证注入。
- 若策略要求或工具本身需要人类审批,ACP 将通过配置的通道(终端/ Telegram/ webhook)请求审批,审批结果会附带可验证的同意凭证。
- 审计日志与凭证 vault 将帮助实现可追溯性与凭证安全注入。
-
服务器端使用注意事项
- 确保关键路径的权限与文件权限正确,Vault 与密钥所在目录应具有严格的访问权限。
- 如使用网络隔离,请确保对应的系统能力(如 root 权限、网络命名空间、iptables/cgroups 等)可用且经过审核。
- 上游 MCP 服务器若为 HTTP 传输,请确保服务可达且响应符合 MCP 期望的 JSON-RPC 格式。
-
相关功能核验
- MCP 请求/响应格式符合 JSON-RPC 2.0 的规范(包括 initialize、tools/list、tools/call、ping 等方法)。
- 工具调用在策略通过后能向上游转发并返回结果,策略拒绝/等待人类审批等场景均有处理路径。
- 同意证据以 Ed25519 签名、哈希链等形式实现,且有审计日志的记录。
- 支持多通道人机交互、以及凭证的动态注入。