AI 编程助手工具体系指南

AI 编程助手(Claude Code、Cursor、Copilot 等)在帮你写代码时,背后调用了多种不同来源的工具。本文从工程师视角系统讲解这些工具的分类、协议原理和选择逻辑,帮你从"能用"到"理解为什么这样设计"。

本文用到的基础术语(已熟悉可跳过)
术语含义
进程(process)一个正在运行的程序。打开 Chrome 是一个进程,打开 VS Code 是另一个进程。在 macOS 的 Activity Monitor 或 Windows 的 Task Manager 里能看到所有进程
子进程(child process)由一个进程启动的另一个进程。比如 VS Code 启动一个 Node.js 进程来跑你的代码,那个 Node.js 进程就是 VS Code 的子进程
Shell命令行解释器。你在终端(Terminal)里敲命令,Shell 负责理解并执行。常见的 Shell 有 Bash 和 Zsh
协议(protocol)两个程序之间"怎么对话"的约定格式。类比:中文是人与人的协议,HTTP 是浏览器与网站的协议,MCP 是 AI 与外部工具的协议
APIApplication Programming Interface。一个程序对外暴露的调用接口。比如你的代码调用 Anthropic API,就能让 Claude 帮你处理请求
JSON一种用 {}[] 组织数据的文本格式。程序之间传数据最常用的格式。例:{"name": "Max", "age": 25}
LLMLarge Language Model(大语言模型)。ChatGPT、Claude、Gemini 背后的 AI 模型。你在 AI 助手里打字,实际上是在跟 LLM 对话

:::

一、扩展体系全景

AI 编程助手"调用了某个东西然后返回结果"。表面上看起来都一样,但来源完全不同:

┌──────────────────┬──────────────────┬────────────────────┐
│  Built-in Tools  │  MCP Tools       │  CLI (Bash)        │
│  原生内置         │  外部插件协议     │  系统命令行          │
├──────────────────┼──────────────────┼────────────────────┤
│  Read / Write    │  run_sql         │  git status        │
│  Edit / Grep     │  query-docs      │  aws dynamodb ...  │
│  Glob / Bash     │  read_channel    │  npm run docs:build │
│  WebSearch       │  create_branch   │  npm test          │
├──────────────────┼──────────────────┼────────────────────┤
│  进程内直接执行    │  JSON-RPC 协议    │  子进程执行 shell    │
│  最快、最安全     │  结构化、可扩展    │  万能、风险最高      │
└──────────────────┴──────────────────┴────────────────────┘

表中出现的 JSON-RPC 是 MCP 使用的通信格式,§3.3 会详细讲解。

还有一个经常被混淆的概念:Skills。Skills 不是工具,而是教 AI "怎么做事"的 Markdown 指令文件。它指挥 AI 去调用上面这三层工具。

层级本质职责类比
SkillsMarkdown 指令教 AI 怎么做(HOW)员工培训手册
Built-in Tools内置代码AI 的基础能力手机自带相机
MCP Tools外部协议插件连接外部系统(WHAT)App Store 下载的 app
CLI (Bash)Shell 命令万能后备越狱后跑任意程序

选择优先级:Built-in > MCP > Bash。 AI 助手被设计为优先使用内置工具(比如用 Read 而不是 cat,用 Grep 而不是 grep),其次使用 MCP 工具,最后才用 Bash 执行 CLI 命令。

完整扩展体系

但工具只是 AI 助手能力的一部分。以 Claude Code 2026 为例,完整的扩展体系有 6 层

层级机制本质职责类比
配置层CLAUDE.mdMarkdown 指令文件告诉 AI "你是谁、规矩是什么"公司规章制度
指令层SkillsMarkdown 工作流教 AI 按特定步骤做事员工培训手册
工具层Built-in / MCP / CLI内置代码 / JSON-RPC / Shell执行具体操作手 / 工具 / 万能钥匙
代理层Custom Agents独立子进程 + 独立 context派专家去做特定任务外包给专业顾问
事件层HooksShell 命令绑定生命周期事件在特定时刻自动执行代码门禁系统(刷卡触发)
打包层Plugins上述所有的打包分发一键安装整套能力App Store 的 app

本文接下来按层详解。§二~§四 讲工具层(Built-in / MCP / CLI),§五 讲指令层(Skills),§六~§九 讲代理层、事件层、打包层和配置层。


二、Built-in Tools — 出厂自带的能力

Built-in Tools 是 AI 编程助手自带的功能,安装时就有,不需要额外配置,也不能增删。以 Claude Code 为例,共有约 28 个内置工具,按功能分为 7 组:

2.1 文件操作

Tool做什么为什么不用 CLI 替代
Read读文件,返回带行号的文本。支持图片、PDF、Jupyter notebook进程内直接读,不起子进程;能看图片和 PDF
Write创建新文件,或完全覆盖已有文件显示完整内容让你确认,防止误覆盖
Edit精确查找替换,old_stringnew_string显示 diff 让你审核;要求先 Read 才能 Edit,防止盲改
NotebookEdit编辑 Jupyter notebook 的单个 cell支持 replace / insert / delete 操作

Read → Edit 是最安全的编辑流程。 AI 被强制要求"先读再改",不可能修改一个它没看过的文件。

2.2 搜索

Tool做什么区别
Glob按文件名模式匹配(**/*.md"叫什么名字的文件?"
Grep按内容正则搜索(底层是 ripgrep)"文件里写了什么?"

2.3 执行

Tool做什么说明
Bash执行任意 shell 命令万能后备。能做一切,但没有结构化输出,安全风险最高
LSP(Language Server Protocol)代码智能分析:跳转定义、查引用、看类型比 Grep 更精准。它理解语法,不会把注释里的同名字符串当成定义

2.4 网络

Tool做什么区别
WebSearch搜索互联网,返回摘要和链接相当于 Google 搜索框
WebFetch抓取指定 URL,HTML → Markdown相当于打开一个网页阅读内容

通常配合使用:WebSearch 找到 URL → WebFetch 读取具体页面。

2.5 Agent 协作

Tool做什么
Task启动子 agent 执行复杂任务(搜索代码库、设计方案、代码审查等)
TaskCreate / TaskUpdate / TaskList / TaskGet任务列表管理,跟踪多步骤工作进度
TaskOutput / TaskStop读取后台任务输出 / 终止后台任务
TeamCreate / TeamDelete / SendMessage创建和销毁 agent 团队,多 agent 并行协作

2.6 交互与流程控制

Tool做什么
AskUserQuestion弹出选择题让用户回答
EnterPlanMode / ExitPlanMode进入/退出计划模式(只做调研,不写代码)
EnterWorktree创建隔离的 git worktree 工作区,在独立分支上修改不影响主分支
Skill加载并执行 skill(/pr/commit 等 slash command)

2.7 MCP 相关

Tool做什么
ToolSearch搜索并加载 MCP tools(延迟加载,不搜索就不能用)
ListMcpResourcesTool / ReadMcpResourceTool列出和读取 MCP server 提供的资源

三、MCP — AI 的标准插件协议

3.1 MCP 解决什么问题 { #31-mcp-解决什么问题 }

每个 AI 工具(Claude、ChatGPT、Cursor)都想连接外部系统(数据库、GitHub、Slack)。没有标准的话,需要 N × M 个定制集成:

没有 MCP:                    有了 MCP:
Claude  ──→ GitHub           Claude  ──┐
Claude  ──→ Slack                      │
ChatGPT ──→ GitHub           ChatGPT ──┤── MCP ──→ GitHub Server
ChatGPT ──→ Slack                      │          Slack Server
Cursor  ──→ GitHub           Cursor  ──┘          DB Server
Cursor  ──→ Slack
...(N×M 个连接)             ...(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 }

这三个不是抽象概念,是你电脑上真实运行的进程(不熟悉"进程"概念可回看文章开头的术语表):

你在终端敲: claude

你的电脑上启动了这些进程:
┌─────────────────────────────────────────────────────────┐
│  PID 12345: claude (Node.js 进程)        ← 这就是 Host  │
│                                                          │
│  内部包含:                                               │
│  ├── LLM 连接(与 Anthropic API 通信)                    │
│  ├── 终端 UI                                              │
│  ├── Built-in tools 代码                                  │
│  ├── Client 实例 1 → 管理与 Neon server 的连接            │
│  ├── Client 实例 2 → 管理与 Lark server 的连接            │
│  └── Client 实例 3 → 管理与 Cloudflare server 的连接      │
└─────────────────────────────────────────────────────────┘

          ┌───────────────┼───────────────┐
          ▼               ▼               ▼
  PID 12346           PID 12347       PID 12348
  Neon MCP Server     Lark Server     CF Server    ← 独立子进程

图中 PID(Process ID)是操作系统分配给每个进程的编号,每次启动都不同。

角色是什么数量
HostAI 助手主进程。管理所有连接,控制权限,聚合上下文永远 1 个
ClientHost 进程内部的连接管理模块,每个 MCP server 配一个N 个(N = 配置的 server 数)
Server独立进程(或远程服务),提供具体工具能力N 个(启动时全部创建,后台常驻)

美团类比: 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(请求)。要求对方做事,等回复:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "run_sql",
    "arguments": { "sql": "SELECT * FROM users LIMIT 5" }
  }
}

Response(响应)。回复请求结果:

{ "jsonrpc": "2.0", "id": 1, "result": { "content": [{"type": "text", "text": "..."}] } }

Notification(通知)。单向消息,不需要回复(没有 id 字段):

{ "jsonrpc": "2.0", "method": "notifications/tools/list_changed" }

连接建立时有能力协商:双方各报自己支持什么,之后只能用已声明的能力。

3.4 Server 提供的三大能力

MCP server 可以向 client 暴露三种东西,控制权分属不同角色

能力谁决定用不用做什么例子
ToolsAI 模型自动判断可调用的函数run_sqlcreate_branch
Resources应用程序/用户手动选择提供上下文数据文件内容、数据库 schema
Prompts用户显式触发预定义的对话模板slash commands、菜单选项

控制权分层是刻意的安全设计。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: "帮我用 LLM 分析一下这段代码"
  → Client 转发给 LLM
  → LLM 返回结果
  → Client 把结果发回 Server

Server 不需要自己的 API key,借用 Host 的 LLM。

Roots(根目录)。Client 告诉 Server 操作范围:

{ "roots": [{ "uri": "file:///Users/max/workspace/docs", "name": "Docs Project" }] }

Elicitation(信息收集)。Server 主动向用户提问。两种模式:

Form 模式。弹出表单收集非敏感信息:

部署 Server 需要更多信息,于是主动向用户提问:

┌────────────────────────────────────────┐
│  部署助手需要以下信息:                   │
│  目标环境: [staging ▼]                   │
│  分支:     [main___________]            │
│  是否跑迁移: [✓] 是                      │
│  [Submit]  [Decline]                    │
└────────────────────────────────────────┘

URL 模式。跳转到网页处理敏感操作(OAuth 授权登录、支付等):

GitHub MCP Server 不能通过聊天收集密码(不安全),
所以引导用户直接在浏览器里完成 OAuth 授权(类似"用 Google 登录"的流程)。
密码/token 完全不经过 AI 助手,AI 只知道"授权成功了"。
AskUserQuestion vs Elicitation

两者都是"向用户提问",但发起者和协议不同:

维度AskUserQuestionElicitation
发起者AI 模型(LLM 决定要问)MCP Server(外部程序决定要问)
协议Built-in tool 调用MCP JSON-RPC elicitation/create
适用场景AI 需要澄清需求Server 需要运行时配置(环境、分支等)
示例"你想用 OAuth 还是 JWT?""请选择部署目标环境"

::: ::: 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 定义了两种传输方式:

Transport适用场景工作方式
stdio本地 MCP serverHost 启动子进程,通过 stdin/stdout 管道通信
Streamable HTTP远程 MCP serverHost 通过 HTTP 请求与远程服务通信

大多数 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 表结构"时,电脑上物理发生的事

步骤 1: Claude Code 主进程把你的话发给 Anthropic API
        你的电脑 ──HTTP──→ api.anthropic.com

步骤 2: API 返回 LLM 的决定:"调用 describe_table_schema"
        api.anthropic.com ──HTTP──→ 你的电脑

步骤 3: 弹出权限确认 [Allow? (y/n)]

步骤 4: 你按 y

步骤 5: Client 通过 stdin 管道写 JSON 给 Server 子进程

        主进程 PID 12345                    子进程 PID 12346
        ┌──────────────┐    stdin 管道      ┌──────────────┐
        │  Client 代码  │ ──────────────→   │  Neon MCP    │
        │              │  {"method":       │  Server      │
        │              │   "tools/call"}   │  → 连接 Neon  │
        │              │    stdout 管道     │  → 执行查询   │
        │  收到结果     │ ←────────────── │  → 返回结果   │
        └──────────────┘                   └──────────────┘

步骤 6: 主进程再调 Anthropic API,附上工具结果

步骤 7: API 返回自然语言回答,显示在终端

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 子进程

两者都是子进程,但性质完全不同:

维度MCP Server 子进程Bash 子进程
创建时机AI 助手启动时就创建需要执行命令时才创建
存活时间一直在后台跑,等待请求命令跑完就退出,消失
通信方式JSON-RPC 协议(结构化)读 stdout 纯文本
交互次数可以来回对话无数次只有一次,跑完就没了
类比餐厅厨房(一直开着,随时接单)自动售货机(投币出货,结束)

时间线对比:

你启动 AI 助手的那一刻:

时间 ──────────────────────────────────────────→

Neon MCP Server:    ████████████████████████████  (常驻)
Lark MCP Server:    ████████████████████████████  (常驻)

Bash "aws ls":                 ██                 (2 秒)
Bash "git status":                    █           (0.5 秒)
Bash "npm run docs:build":                ████    (4 秒)

什么时候用 CLI vs MCP

场景CLI 更好MCP 更好
AWS 操作✅ CLI 覆盖全部 AWS 服务MCP 通常只包装部分 API
数据库查询需要安装 psql 等客户端✅ MCP server 自带连接管理
安全性能跑任何命令(包括危险的)✅ 只暴露定义好的 tools
输出格式纯文本,LLM 自己解析✅ 结构化 JSON,有 schema
安装成本系统已有的命令直接用需要配置 settings.json
跨平台复用只在当前机器可用✅ 同一 server 可被多个 AI 工具使用

五、Skills — 教 AI 怎么做事的指令集

5.1 Skills 是什么

Skills 就是 Markdown 文件。 没有任何魔法。它被注入到 AI 的 context window(上下文窗口,即 AI 当前能"看到"的全部文本,包括你的对话历史、文件内容、工具结果等)里,教 AI 一个工作流程:

---
name: code-review
description: Review code for bugs, style, and test coverage
---

# Code Review Skill

When asked to review code:
1. Run `git diff` to see changes
2. Check style against project conventions
3. Verify test coverage
4. Generate a structured report with severity ratings

Skills 不能直接执行任何操作。它只是告诉 AI:当遇到某种任务时,应该按什么步骤、用什么工具来完成。

Skills 的三层 Progressive Disclosure

Skills 不会浪费 context window。它用三层渐进加载:

层级内容大小何时加载
Level 1YAML frontmatter(name + description~30-50 tokens始终加载(触发判断用)
Level 2Skill body(完整指令)几百 tokens激活时加载
Level 3子目录文件(references/*.md按需只在需要时读取

这意味着装 50 个 skills,闲置时只消耗 50 × ~40 tokens ≈ 2000 tokens。

5.2 Skills vs MCP vs CLI 的定位

用户: "帮我查一下数据质量问题"

Skills 的角色(指挥官):
  → "先理解问题 → 多角度调查 → 交叉验证 → 写报告"

MCP 的角色(执行者):
  → mcp__Neon__run_sql("SELECT COUNT(*) WHERE field IS NULL")

CLI 的角色(后备):
  → Bash("git log --oneline -5")  查最近改了什么
维度SkillsMCP ToolsCLI (Bash)
本质Markdown 指令JSON-RPC 协议 + 外部进程Shell 命令
创建难度写 Markdown,5 分钟写 JSON-RPC server,几小时装命令行工具
能做外部操作?❌ 自己不能,但指挥 AI 调 MCP/Bash✅ 直接操作外部系统✅ 直接执行
分发方式npx skills add / Git reposettings.json 配置brew install / apt
跨平台✅ 任何 LLM 都能读 Markdown✅ MCP 协议跨平台❌ 依赖系统环境

5.3 2026 生态现状

维度数据
skills.sh 注册 skill 数数千个
anthropics/skills GitHub Stars90K+
MCP SDK 月下载量9700 万+(Python + TypeScript)
MCP 活跃 server 数10,000+
支持 Skills 的平台Claude Code、Cursor、Copilot、Gemini CLI、Codex 等
支持 MCP 的平台Claude、ChatGPT、Cursor、VS Code、JetBrains、Copilot Studio 等

Skills 和 MCP 是互补的,不是替代关系。 Skills 爆发式增长是因为创建门槛极低(写 Markdown),但它们解决的是不同问题。


六、Custom Agents — 独立 context 的专家子进程

6.1 什么是 Custom Agent

Custom Agent 是一个 Markdown 文件,定义在 ~/.claude/agents/ 或项目的 .claude/agents/ 目录下。AI 通过 Task tool 启动它作为独立子进程,拥有独立的 context window。

---
name: code-reviewer
model: sonnet
tools:
  - Glob
  - Grep
  - Read
  - Bash
---

# Code Review Agent

你是一个专注于代码质量的 reviewer。
检查以下维度:安全漏洞、性能问题、代码风格...
  • name — agent 名称,在 Task tool 的 subagent_type 参数中引用
  • model — 可以指定不同于主 agent 的模型(如主 agent 用 opus,reviewer 用 sonnet 降低成本)
  • tools — 限制 agent 可用的工具(最小权限原则)

6.2 Agent vs Skill

两者都是 Markdown 文件,但运行方式完全不同:

维度SkillsCustom Agents
context共享主 agent 的 context window独立 context window
model用主 agent 的 model可指定不同 model
并行不能并行可并行多个
创建方式写 Markdown写 Markdown(一样简单)
适用场景重复工作流(PR review、commit)需要专业知识或隔离的任务(深度调研、并行审查)

经验法则: 如果任务能在 10 步内完成且不需要隔离 → Skill。如果任务需要深度探索、可能污染主 context、或需要并行 → Agent。

Agent Teams:多 agent 协作

多个 agent 可以组成团队并行工作:

  1. TeamCreate — 创建团队和共享任务列表
  2. Task — 启动多个 agent 加入团队
  3. SendMessage — agent 之间发消息协作
  4. TaskList / TaskUpdate — 通过共享任务列表协调分工

典型模式是 orchestrator-workers:一个 leader agent 拆分任务,多个 worker agent 并行执行,leader 汇总结果。

:::

七、Hooks — 生命周期事件处理

7.1 什么是 Hook

Hook 是绑定在 AI 助手生命周期事件上的 shell 命令。当特定事件发生时,自动执行你定义的代码。

与 Skills 的关键区别:

维度SkillsHooks
本质非确定性指令(AI 理解后执行)确定性代码(shell 直接执行)
触发AI 判断是否需要事件驱动,每次必触发
能做什么教 AI 工作流程拦截操作、格式化代码、注入提示

7.2 常用事件

事件触发时机典型用途
PreToolUse工具执行拦截危险操作(如阻止 rm -rf
PostToolUse工具执行自动格式化已修改的文件
StopAgent 停止时播放提示音通知用户
Notification发送通知时播放声音、发送桌面通知
UserPromptSubmit用户提交 prompt 时注入上下文(如当前日期、安全提醒)
SubagentStop子 agent 停止时记录子 agent 运行日志

::: details 完整事件列表 除上述 6 个常用事件外,还有:SessionStart(会话开始)、SessionEnd(会话结束)、SubagentStart(子 agent 启动)、PostToolUseFailure(工具执行失败后)、PermissionRequest(权限请求时)、PreCompact(context 压缩前)等,共计 17 个生命周期事件。完整列表参见 Claude Code 官方文档

7.3 配置示例

Hook 在 settings.json 中配置(项目级或全局级均可):

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "jq -r '.tool_input.file_path' | xargs npx prettier --write"
          }
        ]
      }
    ],
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "afplay /System/Library/Sounds/Glass.aiff"
          }
        ]
      }
    ]
  }
}

matcher 用正则匹配工具名。不指定 matcher 则对所有该事件触发。


八、Plugins — 打包分发层

8.1 什么是 Plugin

Plugin 是 Skills + Agents + Hooks + MCP + Commands 的打包分发单元。一个 plugin 可以包含上述任意组合的组件,通过一条命令安装到 Claude Code 中。

Plugin 不是新能力,而是现有能力的快递包裹。 它解决的是分发和复用问题。

8.2 Plugin 的内部结构

Plugin 的清单文件位于 .claude-plugin/plugin.json,声明元数据:

{
  "name": "my-plugin",
  "description": "A plugin that adds code review capabilities",
  "version": "1.0.0",
  "author": "your-name"
}

组件不在清单中声明,而是按目录约定自动发现:

目录结构示例
my-plugin/
├── .claude-plugin/
│   └── plugin.json      # 清单文件(name/version/author)
├── skills/
│   └── review.md        # Skill 定义
├── agents/
│   └── reviewer.md      # Agent 定义
├── hooks/
│   └── hooks.json       # Hook 配置
└── .mcp.json            # MCP server 配置

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 助手启动时自动读取的指令文件,按三个层级叠加生效:

文件位置作用域是否进 Git
~/.claude/CLAUDE.md全局(所有项目)
./CLAUDE.md(项目根目录)项目级✅ 是(团队共享)
~/.claude/projects/<project>/CLAUDE.md项目级私有否(个人偏好)

三层指令叠加生效,不互相覆盖。

9.2 Auto-memory

Claude Code 还有一个自动记忆目录:~/.claude/projects/<project>/memory/。其中 <project> 由项目路径派生(如 -Users-maxwsy-workspace-docs)。

AI 在工作过程中自动学习并记住:项目结构、调试经验、用户偏好、架构决策。这些记忆跨 session 持久化,下次对话时 AI 已经"认识"你的项目。

CLAUDE.md vs Skills 的区别
维度CLAUDE.mdSkills
加载时机启动时自动加载按需激活
生效范围永远生效(全局规矩)特定任务才生效
内容规则、约束、偏好工作流程、操作步骤
类比公司规章制度员工培训手册

CLAUDE.md 告诉 AI "你不能做什么"(约束),Skills 告诉 AI "你应该怎么做"(流程)。

:::

十、实战场景分析

场景 1: 纯 CLI——查 AWS 资源

你: "帮我看一下 DynamoDB 有哪些表"

AI 的决策:没有 DynamoDB MCP server → 用 Bash
  Bash("aws dynamodb list-tables")
  → 起一个临时 shell 子进程 → 跑完退出
项目数量说明
Host1AI 助手主进程
MCP Client 参与0没用到 MCP
MCP Server 参与0后台有 server 在跑,但这次没调用
Bash 子进程1跑完就销毁

场景 2: 多次 CLI 查询 ≠ 多个 Server

你: "帮我看 DynamoDB 有哪些表,再看一下 S3 有哪些 bucket"

AI 的决策:两次查询都没有 MCP server → 用 Bash
  Bash("aws dynamodb list-tables")    → 临时子进程 1,跑完销毁
  Bash("aws s3 ls")                   → 临时子进程 2,跑完销毁
项目数量说明
Host1永远只有 1 个
MCP Client 参与0没用到 MCP
MCP Server 参与0后台 server 在跑,但没被调用
Bash 子进程2每次 Bash 调用创建一个临时子进程

::: warning 常见误解 查 2 个 AWS 资源 ≠ 启动 2 个 MCP server。Bash 子进程是临时的,跑完就销毁。MCP server 才是常驻进程。两者本质不同,参见第四章

场景 3: 纯 MCP。查 Neon 数据库

你: "帮我看 phonebook 表的 schema"

AI 的决策:有 MCP tool → 用 mcp__Neon__describe_table_schema
  → Client 通过 stdin 管道发 JSON-RPC 给 Neon Server
  → Server 连接 Neon 数据库查询
  → 返回结构化 JSON 结果
项目数量说明
Host1AI 助手主进程
MCP Client 参与1Neon 的 client
MCP Server 参与1Neon server(已在后台运行)
Bash 子进程0不需要 CLI

场景 4: 混合使用。Neon + AWS CLI + 本地文件

你: "帮我对比 Neon 的 phonebook 表和 DynamoDB 的 PhoneBook 表,
     顺便看看文档怎么描述这个表的"

AI 需要三种不同来源:
  操作 1: MCP     → mcp__Neon__describe_table_schema
  操作 2: Bash    → aws dynamodb describe-table --table-name PhoneBook
  操作 3: Read    → Read("docs/system-design/database-schema.md")
项目数量说明
Host1永远只有 1 个
MCP Client 参与1只有 Neon 的 client 被用到
MCP Server 参与1Neon server
Built-in Tool2Bash + Read
临时 shell 进程1跑 aws cli

全局进程图

不管执行什么任务,你电脑上的进程布局始终是:

┌────────────────────────────────────────────────────────┐
│  1 个 Host(AI 助手主进程)                              │
│  ├── N 个 MCP Client(每个 server 配一个,启动时创建)   │
│  ├── 所有 Built-in Tools                                │
│  └── LLM 连接                                          │
├────────────────────────────────────────────────────────┤
│  M 个 MCP Server(settings.json 里配几个就有几个)       │
│  不管用不用,它们都在后台跑。用到时才收到 JSON-RPC 请求    │
├────────────────────────────────────────────────────────┤
│  临时 shell 进程(Bash tool 使用时才创建,跑完就销毁)    │
└────────────────────────────────────────────────────────┘

十一、选择决策树

简化版:

需求选择
读/写/搜索本地文件Built-in(Read / Edit / Grep / Glob)
连接外部系统且有 MCP serverMCP Tool
连接外部系统但没有 MCP serverBash + CLI
教 AI 按特定流程做事Skill(Markdown 文件)
需要独立 context 或并行的专家任务Custom Agent
在特定时刻自动执行(格式化、拦截等)Hook
搜索互联网Built-in(WebSearch / WebFetch)
代码智能分析(跳转定义、查引用)Built-in(LSP)

附录

A. MCP Server 安装配置示例

MCP server 在 AI 助手的配置文件中声明。以 Claude Code 的 ~/.claude/settings.json 为例:

{
  "mcpServers": {
    "Neon": {
      "command": "npx",
      "args": ["-y", "@neondatabase/mcp-server-neon"],
      "env": { "NEON_API_KEY": "your-api-key" }
    },
    "lark-mcp": {
      "command": "npx",
      "args": ["-y", "@larksuiteoapi/lark-mcp", "--appId=xxx", "--appSecret=xxx"]
    },
    "meegle": {
      "type": "url",
      "url": "https://project.larksuite.com/mcp_server/v1"
    }
  }
}
  • command + args = 怎么启动这个 server 子进程(stdio transport)
  • env = 传给子进程的环境变量(API key 等)
  • type: "url" = 远程 server,不启动子进程,直接 HTTP 连接(HTTP transport)

B. MCP 2025-11 Spec 新增特性

特性说明
ElicitationServer 主动向用户收集信息(Form + URL 两种模式)
Tool Annotations标记 tool 是否只读、破坏性、幂等
Structured OutputTool 返回带 schema 验证的结构化 JSON(outputSchema
IconsServer / Tool / Resource 可带图标
Async Tasks长时间操作的异步执行支持
Server Identity服务端身份验证,防恶意 server
Auth Extensions官方 OAuth 2.1 认证标准
Streamable HTTP替代旧的 SSE(原因见下方折叠)
为什么用 Streamable HTTP 替代 SSE

旧版 MCP 用 SSE(Server-Sent Events)做远程传输,有三个问题:

  1. 双端口问题。Client → Server 用 HTTP POST,Server → Client 用 SSE 长连接。两个独立通道,部署和防火墙配置复杂
  2. 有状态。SSE 要求保持长连接,server 必须记住每个 client 的 session。无法水平扩展(加机器就丢 session)
  3. 基础设施不友好。很多 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 仍为当前最新稳定版。社区和核心团队正在推进的方向:

特性状态说明
MCP Apps提案中将 MCP server 打包为可独立分发的应用
Server Discovery提案中自动发现和注册 MCP server,无需手动配置
Tasks primitive提案中长时间运行任务的标准化管理(进度、取消、恢复)

C. 参考资源

资源链接
MCP 官方 Spec (2025-11-25)modelcontextprotocol.io/specification
MCP GitHubgithub.com/modelcontextprotocol
Claude Code 官方文档docs.anthropic.com/en/docs/claude-code
skills.sh 注册表skills.sh
Anthropic Skills 仓库github.com/anthropics/skills
Claude Code Plugins 指南docs.anthropic.com/en/docs/claude-code/plugins