除了直接使用別人寫好的 MCP Server,自己動手寫一個也不難。這篇整理我用 Python 官方 SDK 寫一個最小 MCP Server、用 MCP Inspector 測試,再掛進 Claude Code 使用的完整流程。
有哪些官方驗證過的 MCP Server 可以先參考?
在動手寫之前,先看看官方認證過的參考實作伺服器,能幫助理解一個 MCP Server 通常會公開哪些工具、資源。
比較泛用、適合先試用的幾個:
- Filesystem:安全操作檔案,支援讀寫控制
- Fetch:從網頁擷取內容並轉成 LLM 可讀格式
- Memory:提供持久記憶能力(知識圖譜)
- Sequential Thinking:讓模型用步驟式思考解題
適合在 coding 流程中使用的:
- Git - 用於讀取、搜索和操作 Git 儲存庫的工具
- GitHub - 倉庫管理、檔案操作和 GitHub API 集成
- GitLab - GitLab API 集成,支持專案管理
- Sentry - 從 Sentry.io 中檢索和分析問題
瀏覽器自動化相關的:
- Brave Search - 使用 Brave 的搜索 API 進行 Web 和本地搜索
- Puppeteer - 瀏覽器自動化和網頁抓取功能
更多官方推薦的 MCP 完整清單,可以參考 modelcontextprotocol/servers 的官方整合列表。
寫 MCP Server 前要先裝什麼開發工具?
我用 `uv` 來管理 Python 環境與套件,比傳統 `pip` + `venv` 的組合更省事。
```bash
winget install astral-sh.uv
brew install uv
pip install uv
```
如果想用其他語言寫 MCP Server,官方在 modelcontextprotocol 這個組織下也提供多種語言的 SDK:
- specification - 協議規範和文檔
- typescript-sdk - TypeScript 實現
- python-sdk - Python 實現
- java-sdk - Java 實現
- kotlin-sdk - Kotlin 實現
- csharp-sdk - C# 實現
- docs - 使用者文件和指南
如何用 Python 初始化一個最小的 MCP Server?
先建立虛擬環境,安裝 `mcp[cli]`:
```bash
uv venv --python cpython-3.11.13-windows-x86_64-none
.\.venv\Scripts\activate
uv pip install "mcp[cli]"
```
接著把 `main.py` 內容設定如下,這是官方 FastMCP quickstart 的範例,包含一個工具(tool)、一個資源(resource)與一個提示詞模板(prompt):
```python
"""
FastMCP quickstart example.
cd to the `examples/snippets/clients` directory and run:
uv run server fastmcp_quickstart stdio
"""
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("Demo")
@mcp.tool()
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
"""Get a personalized greeting"""
return f"Hello, {name}!"
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
"""Generate a greeting prompt"""
styles = {
"friendly": "Please write a warm, friendly greeting",
"formal": "Please write a formal, professional greeting",
"casual": "Please write a casual, relaxed greeting",
}
return f"{styles.get(style, styles['friendly'])} for someone named {name}."
if name == "main":
mcp.run(transport="stdio")
```
寫完之後直接啟動:
```bash
uv run main.py
```
怎麼測試自己寫的 MCP Server?
用官方的 MCP Inspector 就可以測試,不用另外寫測試程式:
```bash
npx -y @modelcontextprotocol/inspector@latest
```
啟動後,在介面的 Transport Type 選擇 STDIO,command 輸入 `uv run server.py`(或對應的 `main.py`),連上之後就可以從 Resource、Prompts、Tools 分頁分別測試剛剛寫的工具是否如預期運作。
怎麼把自己寫的 MCP Server 加進 Claude Code?
測試沒問題後,用 `claude mcp add` 把它註冊進 Claude Code:
```bash
claude mcp add my-mcp-server uv run main.py
claude mcp list
```
看到類似下面的輸出,代表連線成功:
```text
Checking MCP server health...
firecrawl-mcp: cmd /c npx -y firecrawl-mcp - ✓ Connected
my-mcp-server: uv run main.py - ✓ Connected
```
之後就可以在 Claude Code 對話裡直接呼叫這個 MCP Server 提供的工具、資源與提示詞模板。
常見問題
一定要用 Python 寫 MCP Server 嗎?
不用。官方在 TypeScript、Java、Kotlin、C# 都提供對應 SDK,選熟悉的語言即可。這篇用 Python 是因為 FastMCP 的裝飾器語法最簡潔,適合先理解 MCP 的核心概念(tool、resource、prompt)。
寫好的 MCP Server 一定要先用 MCP Inspector 測試嗎?
不是必要,但強烈建議。直接掛進 Claude Code 才發現工具寫錯,除錯會比較麻煩;先用 MCP Inspector 個別測試 tool、resource、prompt,能提早抓到參數或回傳格式的問題。
`claude mcp add` 加入本機腳本和加入現成套件(如 Firecrawl)有什麼不同?
概念上一樣,差別只在 command 的內容。加入現成套件通常是 `npx -y 套件名稱`;加入自己寫的腳本則是直接呼叫執行指令(例如 `uv run main.py`),Claude Code 並不區分兩者的來源。
參考資料
- Model Context Protocol 官方文件
- modelcontextprotocol/python-sdk
- modelcontextprotocol/servers(官方參考實作伺服器)
- modelcontextprotocol/inspector
最後更新
2026-08-27
延伸閱讀
關於作者 {#author}
Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。
首次發布:2025-07-23
