來源出處
- 官方儲存庫: anthropics/skills — mcp-builder/SKILL.md
- 包含的其他技能工程參考:
第一部分:Anthropic 官方 mcp-builder/SKILL.md(三層漸進式揭露範例)
概述
建立 MCP(Model Context Protocol)伺服器,讓 LLM 能夠透過設計良好的工具與外部服務互動。MCP 伺服器的品質取決於它能多好地讓 LLM 完成真實世界的任務。
流程
🚀 高階工作流程
建立一個高品質的 MCP 伺服器包含四個主要階段:
第一階段:深入研究與規劃
1.1 了解現代 MCP 設計
API 覆蓋率 vs. 工作流程工具: 在全面的 API 端點覆蓋率與專業的工作流程工具之間取得平衡。工作流程工具對於特定任務可能更方便,而全面的覆蓋率則給予代理靈活性來組合操作。效能因客戶端而異——某些客戶端受益於結合基本工具的程式碼執行,而其他客戶端則更適合較高層級的工作流程。在不確定的情況下,優先考慮全面的 API 覆蓋率。
工具命名與可發現性:
清晰、描述性的工具名稱可幫助代理快速找到正確的工具。使用一致的 prefix(例如 github_create_issue、github_list_repos)以及以動作為導向的命名。
情境管理: 代理受益於簡潔的工具描述以及篩選/分頁結果的能力。設計能夠回傳聚焦且相關資料的工具。某些客戶端支援程式碼執行,這可以幫助代理有效地篩選和處理資料。
可操作的錯誤訊息: 錯誤訊息應引導代理走向解決方案,提供具體建議和後續步驟。
1.2 研讀 MCP 協定文件
瀏覽 MCP 規格:
從 sitemap 開始尋找相關頁面:https://modelcontextprotocol.io/sitemap.xml
然後取得特定頁面,並加上 .md 後綴以取得 Markdown 格式(例如 https://modelcontextprotocol.io/specification/draft.md)。
需要檢閱的關鍵頁面:
- 規格概述與架構
- 傳輸機制(可串流的 HTTP、stdio)
- 工具、資源與提示的定義
1.3 研讀框架文件
建議的技術堆疊:
- 語言: TypeScript(高品質的 SDK 支援,且在許多執行環境(例如 MCPB)中具有良好的相容性。此外,AI 模型擅長生成 TypeScript 程式碼,受益於其廣泛使用、靜態型別和良好的 linting 工具)
- 傳輸: 遠端伺服器使用可串流的 HTTP,採用無狀態 JSON(比有狀態 session 和串流回應更容易擴展和維護)。本地伺服器使用 stdio。
載入框架文件:
- MCP 最佳實踐: 📋 檢視最佳實踐 - 所有 MCP 伺服器的核心指南
- 適用於 TypeScript(建議): ⚡ TypeScript 指南 - TypeScript 模式與範例
- 適用於 Python: 🐍 Python 指南 - Python/FastMCP 模式與範例
1.4 規劃你的實作
了解 API: 檢閱服務的 API 文件,以識別關鍵端點、驗證需求和資料模型。必要時可使用網路搜尋和網頁擷取。
工具選擇: 優先考慮全面的 API 覆蓋率。列出要實作的端點,從最常見的操作開始。
第二階段:實作
2.1 設定專案結構
請參閱特定語言的專案設定指南:
- ⚡ TypeScript 指南 - 專案結構、package.json、tsconfig.json
- 🐍 Python 指南 - 模組組織、相依性
2.2 實作核心基礎設施
建立共享的公用程式:
- 具有驗證功能的 API 客戶端
- 錯誤處理輔助函式
- 回應格式化(JSON 和 Markdown)
- 分頁支援
2.3 實作工具
對於每個工具:
輸入 schema:
- 使用 Zod (TypeScript) 或 Pydantic (Python)
- 包含約束條件和清晰的描述
- 在欄位描述中加入範例
輸出 schema:
- 盡可能定義
outputSchema以處理結構化資料 - 在工具回應中使用
structuredContent(TypeScript SDK 功能) - 幫助客戶端理解和處理工具輸出
工具描述:
- 功能簡潔摘要
- 參數描述
- 回傳值 schema
實作:
- 對 I/O 操作使用 async/await
- 使用可操作的訊息進行適當的錯誤處理
- 在適用的情況下支援分頁
- 使用現代 SDK 時回傳純文字內容和結構化資料
註解:
readOnlyHint: true/falsedestructiveHint: true/falseidempotentHint: true/falseopenWorldHint: true/false
第三階段:審查與測試
3.1 程式碼品質
檢查:
- 無重複程式碼(DRY 原則)
- 一致的錯誤處理
- 完整的型別涵蓋率
- 清晰_tool 描述 (原文為
clear_tool descriptions)
3.2 建置與測試
TypeScript:
- 執行
npm run build驗證編譯 - 使用 MCP Inspector 測試:
npx @modelcontextprotocol/inspector
Python:
- 驗證語法:
python -m py_compile your_server.py - 使用 MCP Inspector 測試
請參閱特定語言的指南以獲取詳細的測試方法和品質檢查清單。
第四階段:建立評量
在實作你的 MCP 伺服器之後,建立全面的評量來測試其有效性。
載入 ✅ 評量指南 以獲取完整的評量指引。
4.1 了解評量目的
使用評量來測試 LLM 是否能有效地使用你的 MCP 伺服器來回答真實、複雜的問題。
4.2 建立 10 個評量問題
為了建立有效的評量,請遵循評量指南中概述的流程:
- 工具檢查: 列出可用的工具並了解其能力
- 內容探索: 使用唯讀操作來探索可用的資料
- 問題生成: 建立 10 個複雜、真實的問題
- 答案驗證: 自己解決每個問題以驗證答案
4.3 評量需求
確保每個問題:
- 獨立: 不依賴於其他問題
- 唯讀: 僅需要非破壞性操作
- 複雜: 需要多次工具呼叫和深入探索
- 真實: 基於人類會關心的實際使用案例
- 可驗證: 單一、明確的答案,可透過字串比對驗證
- 穩定: 答案不會隨時間改變
4.4 輸出格式
建立一個具有以下結構的 XML 檔案:
<evaluation>
<qa_pair>
<question>尋找關於 AI 模型發布的討論,其代號為動物。一個模型需要一個特定的安全標籤,格式為 ASL-X。為命名為斑點野生貓科動物的模型確定的數字 X 是多少?</question>
<answer>3</answer>
</qa_pair>
<!-- 更多 qa_pairs... -->
</evaluation>
參考檔案
📚 文件庫
根據需要在開發過程中載入這些資源:
核心 MCP 文件(優先載入)
- MCP 協定: 從 sitemap
https://modelcontextprotocol.io/sitemap.xml開始,然後取得特定頁面並加上.md後綴 - 📋 MCP 最佳實踐 - 通用 MCP 指南,包括:
- 伺服器和工具命名慣例
- 回應格式指南(JSON vs Markdown)
- 分頁最佳實踐
- 傳輸選擇(可串流 HTTP vs stdio)
- 安全與錯誤處理標準
SDK 文件(在第一/二階段載入)
- Python SDK: 從
https://raw.githubusercontent.com/modelcontextprotocol/python-sdk/main/README.md取得 - TypeScript SDK: 從
https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/main/README.md取得
特定語言的實作指南(在第二階段載入)
評量指南(在第四階段載入)
第二部分:Claude Code 動態情境注入 (!command``) 技能範例
- 來源: Claude Code 技能文件
---
name: pr-summary
description: 總結拉取請求中的變更。當使用者要求檢視、總結或稽核目前的 PR 或分支差異時使用。
context: fork
agent: Explore
allowed-tools: Bash(gh *)
---
## 拉取請求情境
- PR 差異:!`gh pr diff`
- PR 評論:!`gh pr view --comments`
- 已變更檔案:!`gh pr diff --name-only`
## 你的任務
總結此拉取請求,包含具體的檔案層級風險、重大變更和驗證步驟...
第三部分:OpenAI Codex / ChatGPT agents/openai.yaml Sidecar Schema
- 來源: OpenAI 建置技能文件
interface:
display_name: "自我進化元提示與角色架構師"
short_description: "跨工具編譯、評估和調整提示、技能和代理角色"
icon_small: "./assets/icon-small.svg"
icon_large: "./assets/icon-large.png"
brand_color: "#2563EB"
default_prompt: "使用評估計分卡設計或最佳化提示、技能或代理角色定義。"
policy:
allow_implicit_invocation: true
dependencies:
tools:
- type: "mcp"
value: "git"
description: "用於儲存庫檢查的 Git MCP 伺服器"
第四部分:Agent Skills PEP 723 自包含腳本 Harness 範例
# /// script
# dependencies = [
# "pydantic>=2.0",
# ]
# requires-python = ">=3.10"
# ///
"""專為透過 `uv run` 呼叫 Agent Skill 而設計的自包含非互動式 CLI 腳本。"""
import argparse
import json
import sys
def main() -> int:
parser = argparse.ArgumentParser(
description="在不使用互動式提示的情況下,驗證技能或角色的 frontmatter 和 token 預算。"
)
parser.add_argument("--input", required=True, help="目標 Markdown 檔案的路徑")
parser.add_argument("--max-chars", type=int, default=12000, help="字元預算上限")
parser.add_argument("--dry-run", action="store_true", help="預覽檢查而不寫入")
args = parser.parse_args()
try:
with open(args.input, "r", encoding="utf-8") as f:
text = f.read()
except FileNotFoundError:
sys.stderr.write(
f"錯誤:找不到檔案 '{args.input}'。請透過 --input <path> 傳入有效路徑。\n"
)
return 1
char_count = len(text)
passed = char_count <= args.max_chars
result = {
"file": args.input,
"char_count": char_count,
"max_chars": args.max_chars,
"passed": passed,
"remediation": None if passed else f"請刪減 {char_count - args.max_chars} 個字元,或將詳細資訊移至 references/。",
}
sys.stdout.write(json.dumps(result, ensure_ascii=False, indent=2) + "\n")
return 0 if passed else 2
if __name__ == "__main__":
sys.exit(main())