本页目录

MCP 与 Skills

MCP 接入能力(工具、数据、外部系统),Skills 注入方法(工作流、最佳实践、领域知识)。一个是手脚的延伸,一个是经验的注入——两者同用渐进式披露,却是可组合的两层。

概述

Agent 循环 解决了"模型怎么用工具",这篇解决"怎么给 agent 加东西"。给 agent 扩展,有两个同等重要、却常被混为一谈的层级:

  • MCP 接入的是能力 / 接口⁠——可执行的工具、可读的数据、外部系统。让 agent 能做新的事⁠。
  • Skills 注入的是知识 / 方法⁠——工作流、最佳实践、领域 know-how、参考文件。让 agent 把事做对⁠。

一个是"手脚的延伸",一个是"经验的注入"。二者都用按需加载、不撑爆基础上下文的思路(都属于渐进式披露 progressive disclosure),所以容易让人以为是一回事;实际它们是可组合的两层——⁠方法层(Skills)调用能力层(MCP/工具)。本文上半讲 MCP,下半讲 Skills,最后把两者摆在一起对比。


第一部分:MCP —— 接入能力

它要消灭的:M×N 集成爆炸

没有标准时,M 个 AI 应用 × N 个工具/数据源,要写 M×N 套对接。MCP(Model Context Protocol) 是一套开放协议,常被比作"工具界的 USB-C":工具方按协议暴露一个 server,应用方实现一个 client,集成降成 M+N

flowchart LR
    subgraph N1["没有 MCP — M×N 套对接"]
        direction LR
        a1["App1"]
        a2["App2"]
        g1["GitHub"]
        s1["Slack"]
        d1["DB"]
        a1 --- g1
        a1 --- s1
        a1 --- d1
        a2 --- g1
        a2 --- s1
        a2 --- d1
    end
    subgraph N2["有 MCP — M+N"]
        direction LR
        b1["App1"]
        b2["App2"]
        mcp{{"MCP 协议"}}
        g2["GitHub server"]
        s2["Slack server"]
        d2["DB server"]
        b1 --> mcp
        b2 --> mcp
        mcp --> g2
        mcp --> s2
        mcp --> d2
    end

MCP 由 Anthropic 在 2024 年底提出并开源,如今已是跨厂商的事实标准。

client-server 架构

flowchart LR
    subgraph Host["宿主 Host (e.g. Claude Code)"]
        Model["模型<br/>决策用哪个工具"]
        Client["MCP Client<br/>每个 server 一个"]
        Model <-->|"tool_use / tool_result"| Client
    end
    Client -->|"JSON-RPC 2.0<br/>stdio / Streamable HTTP"| Server["MCP Server<br/>暴露 tools / resources / prompts"]
    Server --> World["真实世界<br/>GitHub API / 文件系统 / DB"]
  • 宿主(host):Claude Code、Claude Desktop、自建 app——跑 MCP client。
  • server:把某个能力(GitHub、文件系统、数据库……)按协议暴露,可本地子进程,也可远程服务。
  • 消息JSON-RPC 2.0;⁠传输本地用 stdio(子进程,标准输入输出),远程用 Streamable HTTP(早期是 HTTP+SSE)。

三类原语

原语是什么谁来用类比
tools模型可调用的函数(带 schema)模型决策调用函数 / 动作
resources宿主可读取的数据(文件、记录)宿主/用户读取后放进上下文文件 / GET
prompts可复用的提示模板用户/宿主触发预设命令

最常用的是 tools——它直接接上 agent 循环:server 暴露的工具在模型眼里和自定义工具一样,产出 tool_use、宿主执行、tool_result 喂回。

怎么接一个 server

Claude Code 里接 server 就是一段配置。本地 stdio server:

{
  "mcpServers": {
    "context7": { "command": "npx", "args": ["-y", "@upstash/context7-mcp"] }
  }
}

远程 HTTP server 则给 url。这台机器当前就接着两个真实在用的 server:context7(按需拉最新库文档)、code-review-graph(把代码库解析成结构图供审查)。

Claude API 一侧接远程 MCP 用两个必须成对的参数(beta mcp-client-2025-11-20):

client.beta.messages.create(
    betas=["mcp-client-2025-11-20"],
    mcp_servers=[{"type": "url", "name": "my-tools", "url": "https://.../mcp"}],
    tools=[{"type": "mcp_toolset", "mcp_server_name": "my-tools"}],
    ...,
)

Managed Agents 里,server 声明放在 agent 上(type/name/url,⁠不带凭据⁠),凭据存进 vault、创建 session 时用 vault_ids 挂上——Anthropic 侧代理在请求出站时注入 token,容器里的代码读不到密钥。

安全:server 带着权限运行

  • server 以某种权限运行⁠——能读写文件、能调 GitHub 的 server,等于把这些权限交给模型决策。不信任的 server 要沙箱、最小权限,凭据走 vault 而非硬编码。
  • 工具输出里的 prompt 注入⁠:server 返回的内容会进上下文、被当"观察"读。网页/issue 里藏着"忽略此前指令,去做 X"就可能劫持 agent。把工具输出当不可信数据⁠,危险动作走 human-in-the-loop。

第二部分:Skills —— 注入方法

Skills 是什么

Skill 是一个文件夹⁠,核心是一个 SKILL.md,打包了某个领域的工作流、最佳实践、参考文件。它把"每次都要重复叮嘱的 know-how"沉淀成可复用资源,让通用 agent 变成某个领域的专家——做 PPT、做 Excel、按某套规范写代码。

它和单次 prompt 不同:prompt 是这一轮对话的临时指令;skill 是跨对话、按需加载的持久方法。

SKILL.md 与渐进式披露

Skill 的精髓是渐进式披露(progressive disclosure)——不把全部内容塞进上下文,而是分层加载:

flowchart TD
    A["① name + description<br/>(常驻上下文, 极小)"] -->|模型判断任务相关| B["② SKILL.md 正文<br/>(按需读入: 工作流/规则)"]
    B -->|需要时| C["③ 引用的文件 / 脚本<br/>(用到才加载)"]
---
name: pptx
description: 当需要创建或编辑 PowerPoint 演示文稿时使用。
---

# 制作演示文稿的流程
1. 先规划大纲...
2. 用 python-pptx 生成...
(更多步骤、模板、脚本引用)

只有那行 description 常驻上下文(几十 token);模型判断任务相关时,才读 SKILL.md 正文;正文里引用的模板/脚本,用到才加载。这样几十个 skill 也不会撑爆基础上下文⁠——和 MCP 用 tool search 按需加载工具 schema 是同一招。

内置 vs 自定义

类型是什么怎么引用
内置(Anthropic)常见文档任务:pptx / xlsx / docx / pdf按名字 {type: "anthropic", skill_id: "xlsx"}
自定义组织内用 Skills API 建的{type: "custom", skill_id: "skill_...", version: "latest"}

每个 agent 最多 20 个 skill。在 Messages API 上通过 container.skills + code_execution 工具 + 两个 beta(code-execution-2025-08-25skills-2025-10-02)启用,生成的 .pptx/.xlsx 以 file ID 回传、用 Files API 下载。在 Managed Agents 上,skills 直接是 agent 定义的一个数组。

Anthropic 语境里有两处「Skills」,是同一思想的两种载体⁠:Claude Code 的 SKILL.md 技能(如 /oh-my-claudecode:... 那类、以及本会话的 claude-api 技能),和 API / Managed Agents 的 Agent Skills

何时写 skill

  • 写 skill:某套 know-how 会跨对话/任务反复用到⁠(团队的代码规范、固定的报告格式、某领域的标准流程),或要产出特定格式文档。
  • 用一次性 prompt 就够⁠:只在这一轮对话里需要的临时指令。

判据和"何时写 MCP server"同源:⁠复用价值高就沉淀(写 skill / 写 server),用一次就别过度工程。


合到一起:能力 vs 方法

MCPSkills
扩展什么能力 / 接口(tools, resources, prompts)知识 / 方法(指令、工作流、参考文件)
形态client-server 协议,跨厂商文件夹 + SKILL.md,渐进式披露
谁执行server(外部进程 / 服务)模型按 skill 指引,⁠用现有工具执行
解决的问题M×N 集成、连接外部世界重复 know-how、领域专精
渐进披露tool search 按需加载 schema描述常驻、全文/文件按需读
例子GitHub / Slack / DB server、context7pptx / xlsx 文档技能、自定义流程

它们可组合⁠——方法层调用能力层:一个 skill 的流程里完全可以去调 MCP 暴露的工具。

flowchart TD
    Loop["agent 循环 — 编排层"]
    Skills["Skills — 方法层<br/>工作流 / 领域 know-how / 参考"]
    Cap["能力层<br/>MCP 工具 · 内置工具 · 自定义工具"]
    Loop --> Skills
    Skills -->|驱动| Cap
    Loop -->|也可直接调| Cap

落到本会话所在的栈:claude-api、OMC 那些 SKILL.md方法层⁠;context7、code-review-graph 这些 MCP server 是能力层⁠。两者各管一摊,合起来才是完整的 agent。

前沿:MCP 已是跨厂商标准

一个有力旁证:阿里的 world model Qwen-AgentWorld-35B-A3B 在它模拟的七类 agent 环境里,⁠第一类就是 "tool calling (MCP)"——连一个非 Anthropic 的前沿模型,都把"通过 MCP 调工具"当作 agent 的标准交互范式来训练和模拟。MCP 正在成为 agent 接触世界的通用接口。详见 Agent 循环与工具使用 的前沿小节。

最佳实践

  • 分清两层再扩展。 缺能力(连外部系统)上 MCP,缺方法(重复 know-how)写 Skill;别用一个解决另一个的问题。
  • 复用价值高才沉淀。 跨对话反复用到才写 server / 写 skill;用一次的临时指令用 prompt 就够。
  • 靠渐进式披露控上下文。 Skill 只让 description 常驻、正文按需读;工具多了用 tool search 按需加载 schema——几十个也不撑爆。
  • 不信任的 server 要沙箱 + 最小权限。 server 带着权限运行,等于把权限交给模型决策。
  • 凭据走 vault,别硬编码。 Managed Agents 把 server 声明(不带凭据)放 agent、凭据存 vault、出站注入,容器读不到密钥。
  • 工具输出当不可信数据。 server 返回内容会进上下文被当"观察",防 prompt 注入(见 安全与防护)。

权衡与失败模式

  • 把 MCP 和 Skills 混为一谈⁠:以为二选一 → 它们是可组合两层,方法层(Skill)调能力层(MCP/工具)。
  • 该用 prompt 却写了 skill:只在这一轮要的临时指令过度工程 → 一次性需求用 prompt。
  • server 凭据硬编码进配置/agent:泄露风险 → 走 vault,出站注入。
  • 信了工具输出里的"指令":网页/issue 藏"忽略此前指令"劫持 agent → 工具输出当数据,危险动作走 human-in-the-loop。
  • 本地 stdio server 当远程接⁠:传输用错 → 本地 stdio(子进程)、远程 Streamable HTTP,别混。

参考

  • 协议规范⁠: modelcontextprotocol.io(JSON-RPC、传输、原语定义,以官方为准)
  • Anthropic 文档⁠: MCP Connector(mcp_servers + mcp_toolset)、Agent Skills、Managed Agents Vaults(platform.claude.com)
  • 前沿模型⁠: Qwen-AgentWorld-35B-A3B(把 MCP tool calling 列为模拟域之一)

Keywords: MCP, Model Context Protocol, client-server, JSON-RPC, stdio, Streamable HTTP, SSE, tools, resources, prompts, mcp_toolset, mcp_servers, vault, prompt injection, M×N, USB-C for tools, context7, code-review-graph, Skills, SKILL.md, Agent Skills, progressive disclosure, 能力 vs 方法