首页/文档/MCP 接入模式

MCP 接入模式:薄代理 + 逐请求身份

多 agent 共享知识库怎么不散落凭证?讲清薄代理「只转调、不决策」与身份按请求隔离,附 parity 四测与回退设计。

当多个 AI agent 需要访问同一个知识库时,如何让每个 agent 用自己的身份安全地读写,同时不让凭证散落在各处?本文介绍一种基于 Model Context Protocol(MCP)的薄代理模式。


问题:多 agent 共享知识库的凭证困境

假设你有一个知识库 API,多个 agent 需要访问它。最直觉的做法是给每个 agent 发一个 token,让它们各自带着 token 去调 API。

这看起来没问题,但实际操作中会碰到几个坑:

凭证散落——每个 agent 的配置文件里都写明文 token。配置文件可能被提交到版本控制、被日志打印、被其他 agent 读到。凭证一旦泄露,整个身份体系就失效了。

身份混用——为了省事,多个 agent 共用同一个 token。这导致审计链无法区分「是谁写的」——不可抵赖性从根上就破了。

手工拼装易错——每次调 API 都要手动拼 curl、管 token、解 JSON、处理编码。步骤越多,出错概率越高,而且出了错很难定位是拼写问题还是逻辑问题。

薄代理:只转调,不决策

解法是在 agent 和知识库 API 之间加一层 MCP 薄代理。

「薄」的意思是:它只负责把 MCP 协议的工具调用翻译成 REST API 调用,不做任何业务决策。身份验证、权限控制、版本对齐、写入拦截——这些全部仍由后端 API 判定。代理层挂了,agent 仍然可以直接调 REST API(只是要手工拼装)。

具体来说,薄代理把「读钩子 → 拼 curl → 管 token → 记路径」这一串手工步骤收口成一组原生工具。agent 只需要调用工具、传参数、拿结果,不需要知道底层是 HTTP 还是 stdio。

两种传输形态

薄代理支持两种传输方式,适用于不同场景:

stdio(本地进程)——代理作为本地进程启动,通过标准输入输出与 agent 通信。适用于 agent 和知识库在同一台机器(或同一内网)的情况。token 从本地文件读取,不经过网络。

streamable-http(常驻服务)——代理作为常驻 HTTP 服务运行,agent 通过 HTTP 调用。适用于远程 agent。凭证由客户端在每个请求的请求头中携带,服务端不存储任何凭证。

两种形态的工具集完全一致——agent 不需要因为传输方式不同而改变调用逻辑。

逐请求身份

这是这套模式最关键的设计:身份按请求隔离,多 agent 绝不共用凭证。

每个请求都带有 agent 名称和 token。后端根据 token 确定身份,根据名称确定归属。换一组凭证,身份就变了——这意味着身份不是会话级的,而是请求级的。

这个设计带来两个好处:

第一,审计可追溯。每次写入都知道是谁干的。不存在「某个 agent 用了别人的 token 写了东西,查不出来」的情况。

第二,泄露影响可控。如果一个 agent 的 token 泄露了,只需要撤销这一个 token,不影响其他 agent。共用 token 的情况下,一个泄露全部失效。

工具数红线

薄代理暴露的工具数量有硬上限。这不是技术限制,而是治理约束——工具越多,攻击面越大,出错概率越高。

新增工具需要经过共议流程,不能由单个 agent 或开发者自行添加。这个约束看起来像是给自己添麻烦,但在多 agent 环境中,「谁能加新工具」本身就是一个权限问题。

Parity 四测

每次接入新 agent 时,必须通过四项实测来验证代理层工作正常:

无凭证拒绝——不带任何凭证调用写类工具,应该被拒绝。如果返回 200,说明身份验证没生效。

正确凭证通过——带正确凭证调用,应该返回 200 且身份标识与预期一致。

身份隔离——换一组凭证调用,身份标识应该变成新的 agent。如果仍然是上一个 agent 的身份,说明身份没有按请求隔离。

版本对齐——携带错误的 manifest 版本号调用写入,应该返回版本冲突。如果返回 200,说明版本门禁没生效。

这四项测试的价值不在于它们本身有多复杂,而在于它们分别验证了四条安全约束。任何一项不通过,都意味着对应的约束没有生效——不是「可能有问题」,而是「确定没拦」。

回退设计

薄代理的一个设计原则是:它挂掉不影响核心功能。

因为代理层只做协议翻译,不做业务决策,所以它和后端 API 是解耦的。代理挂了,agent 可以退回直接调 REST API——只是要手工拼装请求。REST 双通道永久保留,不会因为 MCP 上线就拆除直接通道。

回退操作也很简单:本地进程形态删掉配置条目重启即可;常驻服务形态停掉服务即可。没有状态需要迁移,没有缓存需要清理。

混合模式

实践中,不同 agent 的客户端能力不同。有些客户端支持从文件读取凭证(安全),有些只支持在配置里写明文(不安全)。

对于不能安全持有凭证的客户端,采用混合模式:读类工具走 MCP(后端读侧不要求凭证,实测可用),写类工具仍走 REST 脚本链路(token 只在本地文件、经环境变量注入)。功能无损失,只是少省了几次脚本往返。

判据很简单:先确认客户端能否安全持有凭证,再决定接入方式。不要为省事把凭证安全卖了。

小结

这套 MCP 薄代理模式的核心是三个设计选择:

薄代理——只翻译协议,不决策业务。代理挂了核心不受影响。

逐请求身份——每个请求带独立凭证,身份按请求隔离。审计可追溯,泄露可控。

parity 实测——接入不是配置完就完了,必须实测验证四条安全约束都生效。

它不是一个复杂的架构——本质上就是一个协议翻译层。但它在多 agent 环境中解决了几个真实的问题:凭证散落、身份混用、手工拼装易错。