opencode-anthropic-auth 的 mcp_ 工具前缀从何而来?OAuth 工具命名限制完整解析
【免费下载链接】opencode-anthropic-auth项目地址: https://gitcode.com/GitHub_Trending/op/opencode-anthropic-auth
opencode-anthropic-auth是一个 OpenCode 插件,让你用 Claude Pro/Max 订阅账号通过OAuth 授权登录Anthropic 模型,无需 API Key 也能享受订阅额度。本文完整解析它源码中神秘的mcp_工具前缀从何而来,以及 Anthropic OAuth 接口对工具命名的隐藏限制。
项目速览:用 Claude 订阅登录 OpenCode
这个插件的全部逻辑集中在一个文件里:index.mjs。它做三件事:
- OAuth 登录:内置 PKCE 授权流程(见 index.mjs),支持 Claude Pro/Max 订阅登录和一键创建 API Key 两种方式;
- 请求拦截:把 OpenCode 发往 Anthropic 的请求改造成 Claude Code 官方 CLI 的模样(
user-agent伪装、注入anthropic-beta头); - 工具名变换:在请求中给所有工具名加上
mcp_前缀,在响应中再剥掉——这正是本文的主角。
💡 订阅用户登录后,插件还会把所有模型成本清零(index.mjs),因为订阅套餐本来就是包月的。
mcp_ 前缀从何而来?OAuth 工具命名限制
为什么普通工具名会被服务器拒绝?
关键在于:Anthropic 的 OAuth 通道对请求体中的工具名有严格约束。当你以 Claude Code 的身份(OAuth Bearer Token)调用/v1/messages接口时,服务端只接受符合 MCP(Model Context Protocol)命名规范的工具名,形如:
mcp__{服务器名}__{工具名}
也就是说,工具定义里不能出现裸名(比如bash、read),必须带mcp_开头的命名空间前缀。这是 OAuth 工具命名的硬性限制,违反它请求就会被拒。
而 OpenCode 自己定义的工具都是裸名,于是插件在中间做了一次"翻译"。
请求方向:给工具统一加前缀
在 index.mjs 中定义了前缀常量TOOL_PREFIX = "mcp_"。每次发请求前,插件解析请求体,完成两处改写:
| 改写位置 | 作用 | 源码位置 |
|---|---|---|
tools数组 | 所有工具定义的name加mcp_前缀 | index.mjs |
messages中的tool_use块 | 历史消息里的工具调用名同步加前缀 | index.mjs |
注意第二处容易被忽略:历史消息里的tool_use块也必须同步改名,否则模型上下文中的工具引用与新的工具定义对不上,对话会立刻错乱。
响应方向:流式还原去前缀
如果只加不还原,OpenCode 本地就无法把模型返回的mcp_bash映射回自己的bash工具了。
所以插件对响应做了流式改写:用正则mcp_([^"]+)匹配响应流中的工具名并剥掉前缀(见 index.mjs)。整个过程无需缓冲完整响应,边读边改,对 SSE 流式输出透明。
OpenCode → mcp_bash → Anthropic 服务器 Anthropic → mcp_bash → OpenCode 变回 bash一来一回,前缀只在"过海关"时存在,本地代码始终看到原始工具名。
前缀之外:还有哪些"过海关"的伪装
mcp_前缀只是其中一环,插件还做了几处配套处理,值得新手了解:
- 系统提示词净化:服务器会拦截含有 "OpenCode" 字样的请求,插件把系统提示中的相关字样替换掉,同时用负向后顾正则保护了文件路径不受影响(index.mjs);
- 强制注入 beta 头:合并
oauth-2025-04-20等必需的anthropic-beta头,并把/v1/messages请求 URL 补上beta=true参数(index.mjs); - 身份伪装:
user-agent设置为 Claude CLI 标识(index.mjs); - 系统提示注入:聊天系统提示前会加入 "You are Claude Code" 声明(index.mjs)。
小结
mcp_前缀的由来一句话讲清:Anthropic OAuth 通道只认 MCP 格式的工具名,插件在请求出网时加前缀、响应回流时去前缀,完成一次对双方都无感的"双向翻译"。这正是第三方客户端复用 Claude 订阅额度的关键技巧之一。
想深入阅读,可以从这三个文件入手:
- 核心插件逻辑:index.mjs
- 版本与依赖声明:package.json
- 版本发布脚本:script/publish.ts
【免费下载链接】opencode-anthropic-auth项目地址: https://gitcode.com/GitHub_Trending/op/opencode-anthropic-auth
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考