本期做单点深拆,对象是官方仓库 anthropics/skills 里最“工程师向”的一对 Skill:mcp-builder(教 Claude 从零造一个 MCP 服务器)和 webapp-testing(教 Claude 用 Playwright 验收本地 Web 应用)。把它们放一起拆是因为二者天然构成一条流水线——前者负责“造工具”,后者负责“验工具”。更重要的原因是:这两份 SKILL.md 是目前公开可读的、把「渐进式加载」「上下文保护」「强制验收环节」三个设计思想贯彻得最彻底的范本,逐段看完,你自己写 Skill 的品味会上一个台阶。
| 维度 | 权重 | mcp-builder | webapp-testing |
|---|---|---|---|
| 功能完整度 | 25% | ★★★★★ | ★★★★ |
| 设计质量 | 25% | ★★★★★ | ★★★★★ |
| 实战效果 | 20% | ★★★★ | ★★★★ |
| 上手难度 | 15% | ★★★★ | ★★★★☆ |
| 社区活跃度 | 15% | ★★★★★(官方仓库直出) | ★★★★★(官方仓库直出) |
| 加权印象 | — | 4.8 | 4.6 |
说明:二者都随官方仓库分发,不存在第三方 Skill 常见的“弃坑”风险;社区活跃度直接锚定 anthropics/skills 本身。截至发稿抓取该 GitHub 页面显示约 173k stars、20.5k forks(此数字来自单次页面抓取,未经第二来源交叉验证,仅供参考)。
SKILL.md 开头的 YAML 是整个 Skill 的“路由器”,原文如下:
---
name: mcp-builder
description: Guide for creating high-quality MCP (Model Context Protocol)
servers that enable LLMs to interact with external services through
well-designed tools. Use when building MCP servers to integrate external
APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
license: Complete terms in LICENSE.txt
---
注意 description 的两句式结构:前半句定义“是什么”,后半句用 "Use when..." 明确触发时机。这不是装饰——Claude 判断是否激活一个 Skill,几乎完全依赖这段 description。"Use when building MCP servers to integrate external APIs or services" 精确圈定了触发场景,还顺手把双语言支持(Python/FastMCP 和 Node/TypeScript SDK)写进了触发条件,等于告诉模型:“只要用户提 MCP + 任意一种语言,都归我管”。想写自己 Skill 的读者,先把这两句式抄下来。
另外 license: Complete terms in LICENSE.txt 这个写法延续了官方文档类 Skill 的惯例:正文开源可读,但授权条款单独放在 LICENSE.txt 里,目录里也确实有这个文件。
正文标题是 "MCP Server Development Guide",骨架为:
编号精确到 2.3 这种粒度,是官方 Skill 的典型手法:把长任务切成有明确“完成标志”的小步,模型每完成一小步就有确认点,不容易在长流程里迷路或跳步。
SKILL.md 末尾有一节 "📚 Documentation Library",它的子标题本身就是一份加载时序表:
对应的实体文件在 skills/mcp-builder/reference/ 下,一共四个:mcp_best_practices.md、python_mcp_server.md、node_mcp_server.md、evaluation.md,另有 scripts/ 目录放配套脚本。
这就是 Agent Skills 规范里“渐进式披露”(progressive disclosure)的标准落地:SKILL.md 本体永远不塞实现细节,细节拆进 reference/,并在正文里写明“哪一步才允许读哪个文件”。造一个 MCP Server 可能涉及几万字协议文档,如果全部塞进 SKILL.md,Skill 一激活上下文就爆炸;门控加载后,Phase 4 之前模型根本不会碰 evaluation.md。
大多数“生成器”类 Skill 生成完就结束,mcp-builder 例外——它要求 Phase 4 产出一个评测文件:恰好 10 道复杂、真实的测试题,且每道题必须满足六个约束:independent(相互独立)、read-only(只读,不改数据)、complex、realistic、verifiable(答案可验证)、stable(答案不随时间漂移)。输出格式是 XML:
<qa_pairs>
<qa_pair>
<question>...</question>
<answer>...</answer>
</qa_pair>
</qa_pairs>
这六个约束是精心挑的:read-only 保证评测不污染真实数据,stable 保证评测可以反复回归。“强制验收环节”是这份 SKILL.md 和市面上大量“模板生成器” Skill 拉开差距的地方——它不假设 Claude 造出来的东西能用,而是要求给出可复核的证据。
几个值得单独点名的段落:
github_create_issue、github_list_repos,让 LLM 在工具列表里靠前缀聚类。readOnlyHint、destructiveHint、idempotentHint、openWorldHint——这些是 MCP 协议的 hint 注解,直接决定调用方(也就是未来的 Claude)敢不敢放心调这个工具。name: webapp-testing
description: Toolkit for interacting with and testing local web applications
using Playwright. Supports verifying frontend functionality, debugging UI
behavior, capturing browser screenshots, and viewing browser logs.
license: Complete terms in LICENSE.txt
正文开篇第一段就立了一条规矩,原文:
Important: Always run scripts with
--helpfirst to see usage. DO NOT read the source until you try running the script first and find that a customized solution is absolutely necessary. These scripts can be very large and thus pollute your context window.
这是我近期读过的所有 SKILL.md 里最聪明的一段话。它针对的正是 Agent 的真实恶习:遇到 scripts/with_server.py 这种大脚本,模型的第一反应是把源码整个读进上下文,一次 Read 就可能吃掉几万 token,还容易在细节里迷失。这条铁律的解法是“把脚本当黑盒”:先跑 --help 看用法,直接调用,实在不行才许读源码。写自己 Skill 时,只要你的 Skill 带脚本,就值得原样抄这条。
SKILL.md 的核心是一棵画在代码块里的决策树:
User task → Is it static HTML?
├─ Yes → Read HTML file directly to identify selectors
│ ├─ Success → Write Playwright script using selectors
│ └─ Fails/Incomplete → Treat as dynamic (below)
└─ No (dynamic webapp) → Is the server already running?
├─ No → Run: python scripts/with_server.py --help
└─ Yes → Reconnaissance-then-action: ...
静态页面和动态应用走完全不同的路径,服务器起没起又分两条路。用决策树而不是段落,是给模型看的流程图——分支条件、每条分支的第一个动作都一目了然,模型几乎不可能走错岔路。这比一堆 "if... then..." 的自然语言省 token 且更不易误读。
测试本地应用最烦的是起服务、等端口、测完关服务。这个 Skill 只提供一个 helper,用法原文:
python scripts/with_server.py --server "npm run dev" --port 5173 -- python your_automation.py
还支持多服务器(backend + frontend 各一条 --server)。注意设计取舍:它不封装“测试”本身,只封装“环境准备”。测试逻辑仍由 Claude 现场写 Playwright 脚本完成。这个边界划得很好——环境管理是重复劳动,适合做成脚本;页面结构千变万化,封装成工具反而僵化。
对动态页面,SKILL.md 规定了固定套路 "Reconnaissance-then-Action":先导航并等 networkidle → 截图或读 DOM → 从渲染结果里找 selector → 再执行操作。配套还有一个用 ❌/✅ 标出的 "Common Pitfall":不许在等待 networkidle 之前去 inspect DOM——这是 Playwright 自动化最高频的翻车点(JS 还没执行完,元素根本不存在),Skill 把它上升为明文禁令。示例代码里甚至在内联注释里写死 # Always launch chromium in headless mode,防呆防到了行级。
examples/ 下给了三个可直接模仿的样例:element_discovery.py(发现页面上的按钮/链接/输入框)、static_html_automation.py(用 file:// URL 测本地 HTML)、console_logging.py(抓浏览器 console 日志)。给三个覆盖典型场景的最小样例,而不是一个大而全的 demo,这个配比值得所有 Skill 作者参考。
把上面的拆解压缩成五条可直接复用的模式:
--help 再调用。其中 mcp-builder 是模式 2、5 的范本,webapp-testing 是模式 3、4 的范本。
来自官方 README 的插件方式(两条 marketplace 命令为原文):
# 在 Claude Code 中添加官方 marketplace
/plugin marketplace add anthropics/skills
# 安装示例技能包(mcp-builder、webapp-testing 所在系列)
/plugin install example-skills@anthropic-agent-skills
# 文档技能包(docx/pdf/pptx/xlsx)
/plugin install document-skills@anthropic-agent-skills
或手动方式:克隆 anthropics/skills,把 skills/mcp-builder、skills/webapp-testing 整个文件夹拷到 ~/.claude/skills/(项目级则放 .claude/skills/)。
触发方式零配置:装好后在 Claude Code 里直接说“帮我给 XX API 写一个 MCP Server”或“测试一下这个本地页面能不能正常提交表单”,description 里的 "Use when..." 就会把对应 Skill 拉起来。
flowchart TD
A[用户: 给 XX API 造个 MCP Server] --> B[mcp-builder 激活]
B --> P1[Phase 1 研究规划]
P1 -.Load First.-> R1[mcp_best_practices.md]
P1 --> P2[Phase 2 实现 Tools]
P2 -.Phase 2 加载.-> R2[python_mcp_server.md<br/>node_mcp_server.md]
P2 --> P3[Phase 3 Build + MCP Inspector]
P3 --> P4[Phase 4 出 10 道 eval 题]
P4 -.Phase 4 加载.-> R3[evaluation.md]
P4 --> T{产物是 Web 应用?}
T -->|是| W[webapp-testing 激活]
T -->|否| D[交付 MCP Server + 评测文件]
W --> W1[--help 先行<br/>禁止读脚本源码]
W1 --> W2{页面类型?}
W2 -->|静态 HTML| W3[直接读 HTML 找 selector]
W2 -->|动态应用| W4[with_server.py 起服务<br/>networkidle 后侦察 DOM]
W3 --> W5[写 Playwright 脚本执行验证]
W4 --> W5
W5 --> D
mcp-builder 适合:为有 REST/SDK 的外部服务造 MCP 接入层;想把内部系统暴露给 Claude 用。不适合:只想调现成 MCP 的用户(那是配置问题,不需要造);对 MCP 协议零概念的新手——它默认你懂 tool/schema,上手难度四星由此而来。
webapp-testing 适合:本地 dev server 的功能验收、UI 回归、截图取证、console 报错排查。不适合:生产环境监控(它明确面向 local web applications)、非 Web 的桌面应用。另外它依赖本机装有 Python + Playwright,环境缺失时第一步就会卡住。
--help 铁律 + 决策树)> mcp-builder(阶段门控)--help 铁律、决策树、with_server.py 用法、侦察-行动模式原文[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
