Roog's BLOG & TOOLS

[系统已在线] :: 2026-01-30 16:10:21 :: 终端 v1.0

Claude Code 基础分享III - MCP 和 Subagent

在上一篇内容中,我们叙述了Claude Code的上下文机制,包括了Slash Command、Skills和Context的使用方法。

本篇内容将深入探讨Claude Code的两个核心概念:MCP(Model Context Protocol) 和 Subagent。

  • MCP是Agent和外部服务的通信协议,它定义了Agent如何与外部服务进行交互,如果对技术细节感兴趣,可以查阅官方文档
  • Subagent是Agent的子Agent,它可以在Agent中运行,可以访问Agent的上下文,可以与外部服务进行交互。总的而言Subagent就像一个由Agent委派任务的小兄弟,帮它完成一些任务。

虽然看起来Subagent和MCP都是全新的概念,但事实上它们实际的表现形式仍旧和上下文高度相关,它们都是为了扩展Agent的能力而设计的。


MCP

我们已经简述过MCP是什么,实际上如果仅仅是这么讲可能会比较抽象,让我们进入一些比较具体的场景:


场景1: 前端开发的小困境

如果你在web前端工作中,使用claude code完成编码工作,很快就会发现一些小困境,对于本场景是这样的:

  • 你可以使用成型的ui组件快速的搭建起应用的界面,因为有项目原来的参考,且书写了很详细的代码规范,agent表现得很好。
  • 很快,进入到集成阶段,在这个阶段,你的工作流变成了一遍一遍的从API FOX/Postman 总结接口的有效信息然后作为提示词输入给Agent
  • 你不禁会想: 要是Agent能自己读取API FOX/Postman的文档,我们的工作流似乎会变得非常高效。

我们能处理这个场景吗?当然能,MCP就是为此而生的。它可以把远端或者本地的Service作为Agent的上下文,Agent可以读取这些上下文,从而完成一些任务。

我们用Apifox举例,如何将Apifox的文档作为Claude Code Agent的上下文,并让Agent在书写集成代码时参考这些文档。

  1. 首先我们需要找到这个服务是否有MCP Server

Apifox官方确实提供了Mcp,我们只要接入就可以了,文档在这里

  1. 接下来我们要在项目根目录放入一个.mcp.json文件,用来告诉claude code 如何接入Apifox的mcp
{
  "mcpServers": {
    "API 文档": {
      "command": "npx",
      "args": [
        "-y",
        "apifox-mcp-server@latest",
        "--project=<project-id>" 《=== 这里填入你的项目ID
      ],
      "env": {
        "APIFOX_ACCESS_TOKEN": "<access-token>" 《=== 这里填入你的access token (在账号设置-->API访问令牌中获取)
      }
    }
  }
}

然后重新启动claude code。并输入

/mcp

img.png

看到这个API 文档显示connect时,即为链接成功。

你可以进一步点按回车,查看该MCP拥有那些能力,重新链接等

img_1.png

初次安装后你可以测试一下像这样:

img_2.png

Agent会向你询问,是否允许它访问API文档的MCP

img_3.png

随后经过一段思考它返回了它的想法


事实上像这样解决实际问题的MCP非常多,例如

  • 链接到本地的数据库,帮助你进行数据查询和操作
  • 通过外部服务访问获取框架最新的技术文档
  • 连接到Gitlab/Github等代码仓库,帮助你进行Pr/Mr等操作

针对后端开发者,也可以关注一下如何书写MCP服务,下面两个SDK分别是phpgolang的。 而我个人最喜欢的Laravel框架事实上已经有一套完整的集成方案由Laravel官方团队主导–Laravel/MCP

如果你书写其他语言,比如NodeJs/Rust/Python等可以在这里找到对应的SDK 另外,我虽然没做调查,但是我觉得像nest/Django等框架应该也会像Laravel已经做好了集成Mcp的能力,可以到各自框架的社区寻找。


MCP 的运作方式

MCP 的运作方式大概就是这样

sequenceDiagram AGENT ->> MCP: 启动加载(如何调用MCP的)上下文 USER ->> AGENT: 输入Prompt,并提醒其使用MCP AGENT ->> MCP: 思考过后调用 MCP ->> AGENT: 返回调用结果 AGENT ->> USER: 推理后输出结果

事实上,从你刚刚启动MCP,他就已经占用了你的一部分上下文窗口,且会一直占用下去。 这意味着如果你配置了太多的MCP,那么就会导致你会经常触发压缩,这有可能会导致模型的反馈不佳。 事实上在上下文窗口这一角度,SKILLS优势更大。


Subagent

Subagent的运作方式事实上更加简单。你可以理解成,进程又派生了一个子进程,去执行异步任务,等待它返回结果。

它的配置方式和SKILL差不多,也可以通过书写markdown文档来构造。

功能用户位置项目位置本地位置
Settings~/.claude/settings.json.claude/settings.json.claude/settings.local.json
Subagents~/.claude/agents/.claude/agents/
MCP 服务器~/.claude.json.mcp.json~/.claude.json(每个项目)
Plugins~/.claude/settings.json.claude/settings.json.claude/settings.local.json
CLAUDE.md~/.claude/CLAUDE.mdCLAUDE.md 或 .claude/CLAUDE.mdCLAUDE.local.md

你可以将SubAgent理解为一个带有额外人格文件的进程,它会独立于主进程运行,且可以独立于主进程的上下文窗口。

在Agent给它委派任务后,SubAgent会独立于主进程运行,且不占用任何主Agent的上下文窗口,通过这一机制,Anthropic宣城你可以实现理论上的(无限上下文窗口)

举个例子,你有一个十分复杂的项目等待探索,如果让主Agent浏览其项目文件,那么不仅浪费token,而且会占用大量的上下文窗口,甚至200K吃满都不够用。

如果你使用SubAgent,那么探索任务就可以交给负责探索的SubAgent,在子Agent浏览了很多文件后,将这些文件推理得到的结论返回给主Agent,从而节省了大量的上下文空间。

让我来举个例子:

代码审核这件事非常适合这个场景,这也是Anthropic官方提到底例子。

在这个场景中,SubAgent可以独立于主Agent运行,且不占用主Agent的上下文窗口,最重要的,由于没有之前的上下文,SubAgent可以更客观的审核代码。

我们把下面这个文件放在 .claude/agents/audit.md 中

---
name: code-reviewer
description: 审查代码质量与最佳实践
tools: Read, Glob, Grep
model: sonnet
---

你是一名代码审查员。当被调用时,分析代码并提供
关于质量、安全及最佳实践的具体、可执行反馈。

然后我们重启CC来加载它。并输入

/agents

img_4.png

通常来讲主Agent会自动调度这些子Agent进行任务处理,但是你也可以直接要求它,测试Subagent效果是这十分有效。

然后你就能观察到你的subagent开始工作了

img_5.png

最终,它的工作总结会交还给主Agent,并且由主Agent作为上下文再次推理给你结果:

img_6.png

Tags: