☰
什么是 .claude-plugin?从 manifest.json 到 MCP 的插件机制拆解与 TaoToken 配置骨架
2026/9/29 6:44:10 网站建设 项目流程

1. 从一次插件不生效的排查说起

你在 Claude Desktop 或某个 AI 编辑器里装了一个插件,重启之后问它「帮我查一下项目里有哪些 TODO」,结果它一脸无辜地回你「我无法访问本地文件」。打开项目根目录,确实躺着一个.claude-plugin文件夹,里面还有manifest.json,看起来该有的都有,但插件就是没被加载。这个场景我遇到过不止一次,问题往往不在插件本身,而在于你没搞清楚.claude-plugin到底是什么、manifest.json里哪些字段是必须的、以及 Claude 是通过什么路径把这些配置读进去的。

.claude-plugin不是一个可执行程序,也不是某个官方 SDK 的产物,它更像是一份「接口说明书」:告诉 Claude 这个项目里有哪些工具可以被调用、每个工具接受什么参数、以及调用时需要走哪个 MCP 服务端点。它和 MCP(Model Context Protocol)是配套关系——MCP 负责运行时的通信协议,.claude-plugin负责声明式的配置描述。你可以把它理解成docker-compose.yml和 Docker 引擎的关系:前者描述服务,后者负责跑起来。

这篇文章面向正在用 Claude、Cursor 或其他 AI 编辑器做开发的读者,重点拆解.claude-plugin的目录结构、manifest.json的字段含义、插件被加载的完整链路,并给出一套可以直接复制的配置骨架。同时我会演示如何通过 TaoToken 统一 Key 和 API 通道接入,让你在验证插件是否生效时不用来回切换多个密钥。如果你之前只是「把文件夹丢进去就完事」,这篇可以帮你把机制补全。

2. TaoToken 前置:统一 Key 与 API 通道

在讲配置之前,先把接入层说清楚。Claude 插件在调用 MCP 工具时,很多场景需要访问外部模型或 API。如果你每个工具都单独配一套 Key,管理成本会很高,排查问题时也容易搞混是哪个 Key 失效了。TaoToken 的作用就是把这些调用收敛到一个统一的入口。

你需要先拿到一个 API Key。登录 TaoToken 控制台,在 API Keys 页面创建一个新 Key,复制出来备用。这个 Key 会同时用于模型对话和 MCP 工具链中的模型调用。控制台地址是 https://taotoken.net/console ,创建 Key 的页面在 https://taotoken.net/api-keys 。

拿到 Key 之后,API 的基础地址是:

https://taotoken.net/api

注意这个地址不带任何查询参数,直接作为base_url使用。如果你用的是 Anthropic 兼容的调用方式,路径拼接规则和官方一致,只是在 host 部分替换掉。下面是一个最小化的环境变量配置,你可以放在.env或 shell 的 profile 里:

export TAOTOKEN_API_KEY="sk-你的key" export TAOTOKEN_BASE_URL="https://taotoken.net/api"

注意:不要把 Key 硬编码进manifest.json或提交到 Git 仓库。插件配置里只引用环境变量名,实际值通过运行环境注入。

如果你需要长期跑编码类任务或 Agent 工作流,可以了解一下 Coding Plan,它在调用额度和并发上有更适合持续编码场景的配置:https://taotoken.net/coding-plan 。对于只是验证插件是否生效的场景,按量调用就够了。

3. 可复制配置:manifest.json 与 settings.json 骨架

3.1 目录结构长什么样

一个典型的.claude-plugin目录结构如下:

.claude-plugin/ ├── manifest.json ├── tools/ │ ├── get_weather.json │ └── search_notes.json └── permissions.json

manifest.json是入口,tools/目录下每个 JSON 描述一个可被 Claude 调用的工具,permissions.json可选,用来限制文件系统访问范围。Claude 在启动时会扫描项目根目录下的.claude-plugin/manifest.json,读取其中的tools字段,然后按声明的端点去连接对应的 MCP 服务。

3.2 manifest.json 字段逐个说

下面是一份可以直接复制修改的manifest.json:

{ "name": "local-dev-tools", "version": "0.1.0", "description": "本地开发辅助工具集,包含天气查询与笔记检索", "protocol": "mcp", "transport": { "type": "http", "endpoint": "https://taotoken.net/api/mcp", "headers": { "Authorization": "Bearer ${TAOTOKEN_API_KEY}" } }, "tools": [ { "name": "get_weather", "description": "查询指定城市的当前天气", "inputSchema": { "type": "object", "properties": { "city": { "type": "string", "description": "城市名称,例如 杭州" } }, "required": ["city"] } }, { "name": "search_notes", "description": "在本地笔记目录中检索关键词", "inputSchema": { "type": "object", "properties": { "keyword": { "type": "string", "description": "要检索的关键词" }, "limit": { "type": "integer", "description": "返回条数上限", "default": 5 } }, "required": ["keyword"] } } ], "permissions": { "filesystem": { "read": ["./notes"], "write": [] } } }

几个关键字段的含义:

protocol固定为mcp,表示这个插件走 Model Context Protocol。transport.type可以是http或stdio,前者适合远程服务,后者适合本地进程。transport.endpoint是 MCP 服务的实际地址,这里指向 TaoToken 的 MCP 入口。headers里的${TAOTOKEN_API_KEY}会在运行时被环境变量替换,这样你就不用在配置文件里写明文。

tools数组里每一项的inputSchema遵循 JSON Schema 规范,Claude 会根据这个 schema 来决定调用时传什么参数。permissions.filesystem.read限定插件只能读./notes目录,写权限留空表示不允许写入。这个权限声明不是摆设,Claude 在加载时会校验,越界的调用会被拒绝。

3.3 settings.json 里要配什么

除了.claude-plugin目录,你还需要在编辑器的settings.json里告诉它去哪里找插件。以常见的 AI 编辑器配置为例:

{ "claude.plugins.enabled": true, "claude.plugins.paths": ["./.claude-plugin"], "claude.mcp.servers": { "taotoken-mcp": { "url": "https://taotoken.net/api/mcp", "headers": { "Authorization": "Bearer ${TAOTOKEN_API_KEY}" } } }, "claude.api.baseUrl": "https://taotoken.net/api", "claude.api.key": "${TAOTOKEN_API_KEY}" }

claude.plugins.paths指向插件目录,claude.mcp.servers注册 MCP 服务端点。claude.api.baseUrl和claude.api.key是模型调用的通道配置,指向 TaoToken。这样插件工具调用和模型对话走的是同一个 Key,排查问题时只需要看一个地方。

4. 验证请求:插件到底有没有生效

配置写完之后,怎么确认插件真的被加载了?分三步走。

第一步,检查 MCP 服务连通性。用 curl 直接打一下端点:

curl -X POST https://taotoken.net/api/mcp \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'

如果返回里包含get_weather和search_notes两个工具名,说明 MCP 服务端已经识别到了你的工具声明。如果返回 401,检查 Key 是否正确注入;如果返回 404,检查 endpoint 路径是否写错。

第二步,在 Claude 对话里触发工具调用。直接问:

杭州今天天气怎么样?

正常情况下,Claude 会先输出一段「我来调用 get_weather 工具」,然后返回结构化结果。如果它只是用训练数据里的天气信息糊弄你,说明工具没有被加载,回到manifest.json检查tools字段的 JSON 格式是否合法。

第三步,看日志。大多数 AI 编辑器在输出面板里会有 MCP 连接日志,搜索mcp或plugin关键字,能看到加载了哪些工具、连接是否成功。这一步能帮你区分是「配置没读到」还是「读到了但连接失败」。

如果你想单独验证模型通道是否正常,可以用模型对话页面发一条测试消息:https://taotoken.net/model-chat 。这个页面走的是同一套 Key,能快速排除是 Key 的问题还是插件配置的问题。

5. 本篇常见错排查

5.1 manifest.json 解析失败

最常见的报错是Failed to parse manifest.json。九成情况是 JSON 里多了尾逗号,或者用了单引号。JSON 标准不支持尾逗号和单引号,用编辑器自带的 JSON 校验功能过一遍。另一个坑是inputSchema里required写成了字符串而不是数组,正确写法是"required": ["city"]。

5.2 工具被列出但调用超时

tools/list能返回工具名,但实际调用时超时,通常是transport.endpoint指向了一个不可达的地址,或者headers里的认证信息没生效。检查环境变量是否在编辑器启动前就已经 export,有些编辑器不会继承 shell 的 profile,需要在编辑器设置里显式配置环境变量。

5.3 权限被拒绝

如果日志里出现permission denied或path outside allowed scope,检查permissions.filesystem.read里的路径是否相对于项目根目录。用./notes而不是绝对路径,跨平台兼容性更好。写操作默认关闭,如果工具需要写文件,必须在write数组里显式声明目录。

5.4 Key 混用导致 401

插件配置里用了 Key A,编辑器模型通道用了 Key B,其中一个失效时很难定位。统一用同一个 TaoToken Key,通过环境变量注入,能省掉大量排查时间。如果你在多个项目里共用配置,建议每个项目用独立的 Key,方便在控制台按项目查看调用量。

5.5 插件目录位置放错

.claude-plugin必须放在项目根目录,和.git同级。放在子目录里编辑器扫描不到。如果你在 monorepo 里工作,每个子项目需要各自的.claude-plugin,或者在编辑器设置里把claude.plugins.paths配成多个路径。

6. 接入文档与后续动作

配置骨架跑通之后,下一步是把工具定义替换成你实际需要的功能。manifest.json里的tools数组可以按需增删,每个工具的inputSchema决定了 Claude 调用时能传什么参数。建议先从一两个工具开始验证链路,确认端到端通了再批量添加。

完整的接入参数和字段说明可以参考接入文档:https://taotoken.net/doc 。如果你在配置过程中遇到报错,优先检查三件事:JSON 格式是否合法、环境变量是否注入、endpoint 是否可达。这三步能覆盖八成以上的加载失败问题。

插件机制本身不复杂,复杂的是配置项之间的依赖关系。把.claude-plugin当成一份声明式的接口清单,把 MCP 当成运行时通道,把 TaoToken 当成统一的认证和路由层,三者各司其职,排查问题时就能快速定位到是哪一层出了状况。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询