AI 编程助手工具体系指南
AI 编程助手(Claude Code、Cursor、Copilot 等)在帮你写代码时,背后调用了多种不同来源的工具。本文从工程师视角系统讲解这些工具的分类、协议原理和选择逻辑,帮你从"能用"到"理解为什么这样设计"。
本文用到的基础术语(已熟悉可跳过)
:::
一、扩展体系全景
AI 编程助手"调用了某个东西然后返回结果"。表面上看起来都一样,但来源完全不同:
表中出现的 JSON-RPC 是 MCP 使用的通信格式,§3.3 会详细讲解。
还有一个经常被混淆的概念:Skills。Skills 不是工具,而是教 AI "怎么做事"的 Markdown 指令文件。它指挥 AI 去调用上面这三层工具。
选择优先级:Built-in > MCP > Bash。 AI 助手被设计为优先使用内置工具(比如用 Read 而不是 cat,用 Grep 而不是 grep),其次使用 MCP 工具,最后才用 Bash 执行 CLI 命令。
完整扩展体系
但工具只是 AI 助手能力的一部分。以 Claude Code 2026 为例,完整的扩展体系有 6 层:
本文接下来按层详解。§二~§四 讲工具层(Built-in / MCP / CLI),§五 讲指令层(Skills),§六~§九 讲代理层、事件层、打包层和配置层。
二、Built-in Tools — 出厂自带的能力
Built-in Tools 是 AI 编程助手自带的功能,安装时就有,不需要额外配置,也不能增删。以 Claude Code 为例,共有约 28 个内置工具,按功能分为 7 组:
2.1 文件操作
Read → Edit 是最安全的编辑流程。 AI 被强制要求"先读再改",不可能修改一个它没看过的文件。
2.2 搜索
2.3 执行
2.4 网络
通常配合使用:WebSearch 找到 URL → WebFetch 读取具体页面。
2.5 Agent 协作
2.6 交互与流程控制
2.7 MCP 相关
三、MCP — AI 的标准插件协议
3.1 MCP 解决什么问题 { #31-mcp-解决什么问题 }
每个 AI 工具(Claude、ChatGPT、Cursor)都想连接外部系统(数据库、GitHub、Slack)。没有标准的话,需要 N × M 个定制集成:
MCP(Model Context Protocol)就是 AI 世界的 USB 接口。一个开放协议,让任何 AI client 连接任何 MCP server。由 Anthropic 发起,2025 年底捐给 Linux Foundation 的 Agentic AI Foundation。OpenAI、Google、Microsoft、AWS 都是支持者。
3.2 三层架构:Host / Client / Server { #32-三层架构host--client--server }
这三个不是抽象概念,是你电脑上真实运行的进程(不熟悉"进程"概念可回看文章开头的术语表):
图中 PID(Process ID)是操作系统分配给每个进程的编号,每次启动都不同。
美团类比: Host = 美团 App,Client = App 里连接每家餐厅的模块,Server = 每家餐厅的厨房。你只跟 App 交互,App 负责把订单翻译成每个厨房能理解的格式。
::: details 用 Activity Monitor 验证
在 macOS 上打开 Activity Monitor,搜索 claude,可以看到主进程(Host)。搜索 npx 或 MCP server 名称,可以看到各个 server 子进程。这能帮你直观验证"1 个 Host + N 个 Server"的进程模型。
3.3 通信基础:JSON-RPC { #33-json-rpc }
所有 MCP 消息都用 JSON-RPC 2.0 格式。只有三种消息类型:
Request(请求)。要求对方做事,等回复:
Response(响应)。回复请求结果:
Notification(通知)。单向消息,不需要回复(没有 id 字段):
连接建立时有能力协商:双方各报自己支持什么,之后只能用已声明的能力。
3.4 Server 提供的三大能力
MCP server 可以向 client 暴露三种东西,控制权分属不同角色:
控制权分层是刻意的安全设计。Tools 让 AI 有行动力,但 Host 必须征求人类确认(权限弹窗)。Resources 由应用决定注入。Prompts 完全由用户主动触发,是最安全的。
Resources 的高级特性
Resource Templates。URI 支持模板语法(如 db:///{table}/schema),客户端动态填充参数,避免 server 注册海量静态 URI。
Subscriptions。Client 可以订阅特定 resource。当 resource 内容变化时,server 推送 notifications/resources/updated,client 自动重新获取。适用于数据库 schema、配置文件等会变的数据。
::: ::: details Tool 的错误处理协议 Tool 调用失败时,MCP 区分协议错误和执行错误:
- 协议错误(tool 不存在、参数格式错):返回 JSON-RPC error response
- 执行错误(SQL 语法错、API 返回 500):仍然返回正常 response,但
content里标记isError: true
这样 LLM 能看到执行错误的详情,尝试修正后重试(比如改 SQL 语法)。
3.5 Client 提供的三大能力
方向相反。Server 也可以向 Client 发请求:
Sampling(采样)。Server 借用 Host 的 LLM 能力:
Server 不需要自己的 API key,借用 Host 的 LLM。
Roots(根目录)。Client 告诉 Server 操作范围:
Elicitation(信息收集)。Server 主动向用户提问。两种模式:
Form 模式。弹出表单收集非敏感信息:
URL 模式。跳转到网页处理敏感操作(OAuth 授权登录、支付等):
AskUserQuestion vs Elicitation
两者都是"向用户提问",但发起者和协议不同:
:::
::: details Elicitation 在当前 Claude Code 中还不常见
截至 2026 年初,大多数 MCP server 还没有实现 Elicitation。它是 2025-11 spec 新增的能力,生态支持仍在早期。你在 Claude Code 里看到的"向用户提问"基本都是 AskUserQuestion(Built-in tool),而不是 Elicitation。
3.6 Transport: stdio vs HTTP
MCP 定义了两种传输方式:
大多数 MCP server 使用 stdio(本地子进程)。远程服务(如飞书 Meegle)使用 HTTP。
什么是 stdin/stdout 管道
每个进程都有两个内置的文本通道:
- stdin(standard input):进程的"耳朵",用来接收输入
- stdout(standard output):进程的"嘴巴",用来输出结果
当 Host 启动 MCP server 子进程时,会建立一条管道(pipe):Host 写数据到 server 的 stdin,server 写结果到自己的 stdout,Host 读取。就像两个人通过一根管子传纸条。
3.7 一次 MCP 调用的完整流程 { #37-一次-mcp-调用的完整流程 }
用户问"帮我看 users 表结构"时,电脑上物理发生的事:
MCP 章节小结: 1 个 Host 管理 N 个 Client,每个 Client 对接 1 个 Server。Server 提供 Tools / Resources / Prompts 三种能力,Client 提供 Sampling / Roots / Elicitation 三种反向能力。通信用 JSON-RPC 2.0,传输用 stdio(本地)或 Streamable HTTP(远程)。
四、CLI (Bash) — 万能后备 { #cli-bash }
当没有 Built-in tool 也没有 MCP tool 能做某件事时,AI 通过 Bash 执行 CLI 命令。
MCP Server 子进程 vs Bash 子进程
两者都是子进程,但性质完全不同:
时间线对比:
什么时候用 CLI vs MCP
五、Skills — 教 AI 怎么做事的指令集
5.1 Skills 是什么
Skills 就是 Markdown 文件。 没有任何魔法。它被注入到 AI 的 context window(上下文窗口,即 AI 当前能"看到"的全部文本,包括你的对话历史、文件内容、工具结果等)里,教 AI 一个工作流程:
Skills 不能直接执行任何操作。它只是告诉 AI:当遇到某种任务时,应该按什么步骤、用什么工具来完成。
Skills 的三层 Progressive Disclosure
Skills 不会浪费 context window。它用三层渐进加载:
这意味着装 50 个 skills,闲置时只消耗 50 × ~40 tokens ≈ 2000 tokens。
5.2 Skills vs MCP vs CLI 的定位
5.3 2026 生态现状
Skills 和 MCP 是互补的,不是替代关系。 Skills 爆发式增长是因为创建门槛极低(写 Markdown),但它们解决的是不同问题。
六、Custom Agents — 独立 context 的专家子进程
6.1 什么是 Custom Agent
Custom Agent 是一个 Markdown 文件,定义在 ~/.claude/agents/ 或项目的 .claude/agents/ 目录下。AI 通过 Task tool 启动它作为独立子进程,拥有独立的 context window。
name— agent 名称,在Tasktool 的subagent_type参数中引用model— 可以指定不同于主 agent 的模型(如主 agent 用 opus,reviewer 用 sonnet 降低成本)tools— 限制 agent 可用的工具(最小权限原则)
6.2 Agent vs Skill
两者都是 Markdown 文件,但运行方式完全不同:
经验法则: 如果任务能在 10 步内完成且不需要隔离 → Skill。如果任务需要深度探索、可能污染主 context、或需要并行 → Agent。
Agent Teams:多 agent 协作
多个 agent 可以组成团队并行工作:
TeamCreate— 创建团队和共享任务列表Task— 启动多个 agent 加入团队SendMessage— agent 之间发消息协作TaskList/TaskUpdate— 通过共享任务列表协调分工
典型模式是 orchestrator-workers:一个 leader agent 拆分任务,多个 worker agent 并行执行,leader 汇总结果。
:::
七、Hooks — 生命周期事件处理
7.1 什么是 Hook
Hook 是绑定在 AI 助手生命周期事件上的 shell 命令。当特定事件发生时,自动执行你定义的代码。
与 Skills 的关键区别:
7.2 常用事件
::: details 完整事件列表
除上述 6 个常用事件外,还有:SessionStart(会话开始)、SessionEnd(会话结束)、SubagentStart(子 agent 启动)、PostToolUseFailure(工具执行失败后)、PermissionRequest(权限请求时)、PreCompact(context 压缩前)等,共计 17 个生命周期事件。完整列表参见 Claude Code 官方文档。
7.3 配置示例
Hook 在 settings.json 中配置(项目级或全局级均可):
matcher 用正则匹配工具名。不指定 matcher 则对所有该事件触发。
八、Plugins — 打包分发层
8.1 什么是 Plugin
Plugin 是 Skills + Agents + Hooks + MCP + Commands 的打包分发单元。一个 plugin 可以包含上述任意组合的组件,通过一条命令安装到 Claude Code 中。
Plugin 不是新能力,而是现有能力的快递包裹。 它解决的是分发和复用问题。
8.2 Plugin 的内部结构
Plugin 的清单文件位于 .claude-plugin/plugin.json,声明元数据:
组件不在清单中声明,而是按目录约定自动发现:
目录结构示例
8.3 与其他机制的关系
Plugin 是组合层。你可以单独使用 Skills、Agents、Hooks,不需要打包成 plugin。Plugin 的价值在于:
- 分享给团队 — 通过
/plugin install命令或claude --plugin-dir加载 - 版本管理 — 清单文件支持 semver 版本号
- 组合发布 — 一个 plugin 把相关的 skill + agent + hook 捆绑在一起
九、CLAUDE.md — 指令与记忆
9.1 文件层级
CLAUDE.md 是 AI 助手启动时自动读取的指令文件,按三个层级叠加生效:
三层指令叠加生效,不互相覆盖。
9.2 Auto-memory
Claude Code 还有一个自动记忆目录:~/.claude/projects/<project>/memory/。其中 <project> 由项目路径派生(如 -Users-maxwsy-workspace-docs)。
AI 在工作过程中自动学习并记住:项目结构、调试经验、用户偏好、架构决策。这些记忆跨 session 持久化,下次对话时 AI 已经"认识"你的项目。
CLAUDE.md vs Skills 的区别
CLAUDE.md 告诉 AI "你不能做什么"(约束),Skills 告诉 AI "你应该怎么做"(流程)。
:::
十、实战场景分析
场景 1: 纯 CLI——查 AWS 资源
场景 2: 多次 CLI 查询 ≠ 多个 Server
::: warning 常见误解 查 2 个 AWS 资源 ≠ 启动 2 个 MCP server。Bash 子进程是临时的,跑完就销毁。MCP server 才是常驻进程。两者本质不同,参见第四章。
场景 3: 纯 MCP。查 Neon 数据库
场景 4: 混合使用。Neon + AWS CLI + 本地文件
全局进程图
不管执行什么任务,你电脑上的进程布局始终是:
十一、选择决策树
简化版:
附录
A. MCP Server 安装配置示例
MCP server 在 AI 助手的配置文件中声明。以 Claude Code 的 ~/.claude/settings.json 为例:
command+args= 怎么启动这个 server 子进程(stdio transport)env= 传给子进程的环境变量(API key 等)type: "url"= 远程 server,不启动子进程,直接 HTTP 连接(HTTP transport)
B. MCP 2025-11 Spec 新增特性
为什么用 Streamable HTTP 替代 SSE
旧版 MCP 用 SSE(Server-Sent Events)做远程传输,有三个问题:
- 双端口问题。Client → Server 用 HTTP POST,Server → Client 用 SSE 长连接。两个独立通道,部署和防火墙配置复杂
- 有状态。SSE 要求保持长连接,server 必须记住每个 client 的 session。无法水平扩展(加机器就丢 session)
- 基础设施不友好。很多 CDN、负载均衡器对 SSE 支持不好,会提前断开连接
Streamable HTTP 合并为单一 HTTP 端点。Server 可以选择返回普通 JSON(无状态)或升级为 SSE stream(需要推送时)。这让 MCP server 能像普通 REST API 一样部署在 Cloudflare Workers、Vercel 等 serverless 平台上。
B+. MCP 2026 Roadmap
MCP 2025-11-25 spec 仍为当前最新稳定版。社区和核心团队正在推进的方向: