SKILL.md
readonlyread-only
name
mcp-developer
description
在建立、除錯或擴充 MCP 伺服器或客戶端,以連接 AI 系統與外部工具和資料來源時使用。呼叫以實作工具處理器、設定資源提供者、建立 stdio/HTTP/SSE 傳輸層、使用 Zod 或 Pydantic 驗證架構、除錯協定合規問題,或使用 TypeScript 或 Python SDK 搭建完整的 MCP 伺服器/客戶端專案。
MCP Developer
資深 MCP(Model Context Protocol)開發者,專精於建立連接 AI 系統與外部工具及資料來源的伺服器和客戶端。
核心工作流程
- 分析需求 — 識別資料來源、所需工具及客戶端應用程式
- 初始化專案 —
npx @modelcontextprotocol/create-server my-server(TypeScript)或pip install mcp+ 搭建(Python) - 設計協定 — 定義資源 URI、工具架構(Zod/Pydantic)及提示模板
- 實作 — 註冊工具和資源處理器;設定傳輸層(stdio/SSE/HTTP)
- 測試 — 執行
npx @modelcontextprotocol/inspector以互動方式驗證協定合規性;確認工具出現、架構接受有效輸入,且錯誤回應為格式正確的 JSON-RPC 2.0。回饋迴圈: 若架構驗證失敗 → 檢查 Zod/Pydantic 錯誤輸出 → 修正架構定義 → 重新執行 inspector。若工具呼叫回傳格式錯誤的回應 → 檢查傳輸序列化 → 修正處理器 → 重新測試。 - 部署 — 打包、加入驗證/速率限制、設定環境變數、監控
參考指南
根據情境載入詳細指引:
| 主題 | 參考 | 載入時機 |
|---|---|---|
| 協定 | references/protocol.md |
訊息類型、生命週期、JSON-RPC 2.0 |
| TypeScript SDK | references/typescript-sdk.md |
在 Node.js 中建立伺服器/客戶端 |
| Python SDK | references/python-sdk.md |
在 Python 中建立伺服器/客戶端 |
| 工具 | references/tools.md |
工具定義、架構、執行 |
| 資源 | references/resources.md |
資源提供者、URI、模板 |
最小可行範例
TypeScript — 使用 Zod 驗證的工具
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({ name: "my-server", version: "1.1.0" });
// 註冊一個具有驗證輸入架構的工具
server.tool(
"get_weather",
"取得指定地點的目前天氣",
{
location: z.string().min(1).describe("城市名稱或座標"),
units: z.enum(["celsius", "fahrenheit"]).default("celsius"),
},
async ({ location, units }) => {
// 實作:呼叫外部 API,轉換回應
const data = await fetchWeather(location, units); // 你的擷取邏輯
return {
content: [{ type: "text", text: JSON.stringify(data) }],
};
}
);
// 註冊一個資源提供者
server.resource(
"config://app",
"應用程式設定",
async (uri) => ({
contents: [{ uri: uri.href, text: JSON.stringify(getConfig()), mimeType: "application/json" }],
})
);
const transport = new StdioServerTransport();
await server.connect(transport);
Python — 使用 Pydantic 驗證的工具
from mcp.server.fastmcp import FastMCP
from pydantic import BaseModel, Field
mcp = FastMCP("my-server")
class WeatherInput(BaseModel):
location: str = Field(..., min_length=1, description="城市名稱或座標")
units: str = Field("celsius", pattern="^(celsius|fahrenheit)$")
@mcp.tool()
async def get_weather(location: str, units: str = "celsius") -> str:
"""取得指定地點的目前天氣。"""
data = await fetch_weather(location, units) # 你的擷取邏輯
return str(data)
@mcp.resource("config://app")
async def app_config() -> str:
"""將應用程式設定暴露為資源。"""
return json.dumps(get_config())
if __name__ == "__main__":
mcp.run() # 預設使用 stdio 傳輸
預期的工具呼叫流程:
客戶端 → { "method": "tools/call", "params": { "name": "get_weather", "arguments": { "location": "Berlin" } } }
伺服器 → { "result": { "content": [{ "type": "text", "text": "{\"temp\": 18, \"units\": \"celsius\"}" }] } }
限制
必須做
- 正確實作 JSON-RPC 2.0 協定
- 使用架構(Zod/Pydantic)驗證所有輸入
- 使用適當的傳輸機制(stdio/HTTP/SSE)
- 實作全面的錯誤處理
- 加入驗證和授權
- 記錄協定訊息以便除錯
- 徹底測試協定合規性
- 記錄伺服器能力
禁止做
- 跳過工具輸入的驗證
- 在資源內容中暴露敏感資料
- 忽略協定版本相容性
- 混合同步程式碼與非同步傳輸
- 硬編碼憑證或機密
- 回傳非結構化錯誤給客戶端
- 未設定速率限制就部署
- 跳過安全控制
輸出模板
實作 MCP 功能時,提供:
- 伺服器/客戶端實作檔案
- 架構定義(工具、資源、提示)
- 設定檔(傳輸、驗證等)
- 設計決策的簡要說明






