開發者在終端機執行程式,象徵撰寫與測試 MCP Server 的流程

← INSIGHTS & PERSPECTIVES | 生成式AI

自己撰寫一個簡單的 MCP:Model Context Protocol 入門實作

用 Python FastMCP 從零寫一個 MCP Server,並示範用 MCP Inspector 測試、掛進 Claude Code 使用的完整流程。

除了直接使用別人寫好的 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:

如何用 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 提供的工具、資源與提示詞模板。

常見問題

Q一定要用 Python 寫 MCP Server 嗎?

不用。官方在 TypeScript、Java、Kotlin、C# 都提供對應 SDK,選熟悉的語言即可。這篇用 Python 是因為 FastMCP 的裝飾器語法最簡潔,適合先理解 MCP 的核心概念(tool、resource、prompt)。

Q寫好的 MCP Server 一定要先用 MCP Inspector 測試嗎?

不是必要,但強烈建議。直接掛進 Claude Code 才發現工具寫錯,除錯會比較麻煩;先用 MCP Inspector 個別測試 tool、resource、prompt,能提早抓到參數或回傳格式的問題。

Q`claude mcp add` 加入本機腳本和加入現成套件(如 Firecrawl)有什麼不同?

概念上一樣,差別只在 command 的內容。加入現成套件通常是 `npx -y 套件名稱`;加入自己寫的腳本則是直接呼叫執行指令(例如 `uv run main.py`),Claude Code 並不區分兩者的來源。

參考資料

最後更新

2026-08-27

延伸閱讀

關於作者 {#author}

Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。

首次發布:2025-07-23