MCP 開發 2026年6月16日 約 22 分鐘 Model Context Protocol AI 工具呼叫

從零開發 MCP Server:
手把手建構 AI 工具呼叫能力

協定原理 · Tools / Resources / Prompts · 除錯部署 · 個人知識庫實戰

從零開發 MCP Server 建構 AI 工具呼叫能力

具備一定 Python 或 TypeScript 基礎的後端 / AI 開發者常遇到同一困境:Claude、GPT 再聰明,也無法直接查你的資料庫、呼叫內部 API、讀寫本機檔案——因為模型缺乏存取外部工具的標準化通道Model Context Protocol(MCP)正是 Anthropic 開源的開放協定,讓 AI Client(Cursor、Claude Desktop)與你自己寫的 Server 透過 JSON-RPC 對話。讀完本文,你將能獨立開發並部署一個可上線的 MCP Server,涵蓋:協定架構 → 環境搭建 → Hello World → Tools / Resources / Prompts 三大能力 → HTTP 遠端傳輸 → 除錯測試 → Docker 部署 → 個人知識庫實戰專案 → 2026 生態展望。

01

引言:為什麼 AI 需要 MCP?

大模型再強,訓練資料也有截止日,無法憑空知道你的 CRM 客戶、昨晚的日誌或內網 API 的即時狀態。業界演進路徑清晰:Function Calling → Plugins → MCP。前兩者多為廠商私有格式,換模型就要重寫整合層;MCP 用開放協定把「AI 能發現哪些工具、如何呼叫」標準化,一次撰寫、多 Client 複用。

  1. 01

    痛點:你希望 Claude / GPT 能查資料庫、呼叫 API、操作檔案,但各家格式不同。

  2. 02

    場景:在 Cursor 裡讓 AI 讀你的 Markdown 筆記、在 Claude Desktop 裡查 GitHub Issue。

  3. 03

    承諾:本文帶你從空目錄到可部署 Server,含完整程式碼與排障表。

02

什麼是 MCP?先搞懂協定再寫程式

2.1 誕生背景

Anthropic 於 2024 年 11 月發布 MCP,目標是標準化 AI 與外部工具的通訊,解決 N 個模型 × M 個工具 = N×M 客製適配的碎片問題。更多協定史觀可參閱站內MCP 與 HTTP 類比文

2.2 架構概覽

MCP 採用 Client ↔ Server 模型:Client 在 AI 側(Claude Desktop、Cursor);Server 是你開發的能力提供方,透過 JSON-RPC 暴露三大核心能力:

  • T

    Tools(工具):AI 可呼叫的函式——搜尋、計算、資料庫查詢。

  • R

    Resources(資源):AI 可讀取的資料——檔案、URL、設定串流。

  • P

    Prompts(提示詞範本):預先定義、可參數化的提示片段。

2.3 通訊機制

基於 JSON-RPC 2.0;傳輸層支援 stdio(本機子行程,Cursor / Claude Desktop 預設)與 HTTP + SSE / Streamable HTTP(遠端服務)。生命週期:初始化握手 → 能力協商(initialize)→ 請求/回應 → 關閉。

2.4 與其他方案對比

維度MCPOpenAI Function CallingLangChain Tools
標準化開放協定廠商私有框架綁定
傳輸stdio / HTTPHTTPHTTP
跨模型部分
Resources / Prompts原生支援不支援不支援
生態2026 年 10,000+ Server成熟成熟
03

開發環境準備

3.1 選擇語言

Python(官方 SDK mcp,FastMCP 裝飾器簡潔)推薦新手;TypeScript@modelcontextprotocol/sdk)適合前端/全端。本文以 Python 為主,TS 做對照。

環境搭建
# Python
python -m venv .venv && source .venv/bin/activate
pip install mcp httpx pydantic

# TypeScript(對照)
npm init -y && npm install @modelcontextprotocol/sdk

3.2 專案結構

my-mcp-server/
my-mcp-server/
├── server.py            # 主入口
├── tools/               # calculator.py, web_search.py
├── resources/           # file_reader.py
├── prompts/             # templates.py
├── tests/test_tools.py
├── pyproject.toml
└── README.md

3.3 除錯工具

  1. 1

    MCP Inspector:npx @modelcontextprotocol/inspector python server.py

  2. 2

    Claude Desktop:編輯 claude_desktop_config.json 註冊 Server。

  3. 3

    Cursor:Settings → MCP → 新增 command + args。

04

第一個 MCP Server:Hello World

server.py · 最小可用 Server
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("my-first-server")

@mcp.tool()
def say_hello(name: str) -> str:
    """向指定的人打招呼"""
    return f"Hello, {name}! 這是你的第一個 MCP 工具。"

if __name__ == "__main__":
    mcp.run()

執行 python server.py 後,用 Inspector 或 Cursor 設定中填入 {"command":"python","args":["/path/to/server.py"]},重新整理工具清單應看到 say_hello

Cursor / Claude Desktop 接入要點

  • 使用絕對路徑指向 server.py 與虛擬環境 Python。

  • 修改程式碼後需重啟 MCP 連線或重開 Cursor 視窗。

  • 在對話中明確請求呼叫工具,驗證 AI 上下文已註冊。

05

Tools:開發可被 AI 呼叫的工具

5.1 基本結構

函式簽名即文件:參數型別、回傳型別、docstring 會暴露給模型做工具選擇。命名用 snake_case、動詞開頭(search_webread_file)。錯誤宜回傳結構化 JSON 而非直接拋出例外,便於模型自我修正。

5.2 複雜參數(Pydantic)

帶 Schema 的搜尋工具
from pydantic import BaseModel, Field

class SearchInput(BaseModel):
    query: str = Field(description="搜尋關鍵字")
    max_results: int = Field(default=5, description="最多回傳結果數")
    language: str = Field(default="zh", description="結果語言")

@mcp.tool()
def web_search(input: SearchInput) -> list[dict]:
    """執行網路搜尋,回傳相關結果清單"""
    ...

5.3 五個實用工具清單

工具用途注意點
計算機數學運算式求值ast.literal_eval 或安全解析函式庫,禁用 eval
檔案讀寫讀/寫本機檔案白名單目錄、路徑正規化防路徑遍歷
HTTP 請求呼叫外部 API逾時、重試、回應大小上限
資料庫查詢唯讀 SQL參數化查詢、禁止 DDL
時間工具目前時間、時區轉換回傳 ISO 8601 便於模型解析

5.4 非同步工具

async fetch_url
@mcp.tool()
async def fetch_url(url: str) -> str:
    """取得指定 URL 的內容"""
    async with httpx.AsyncClient(timeout=30.0) as client:
        response = await client.get(url)
        return response.text

5.5 錯誤處理最佳實務

  • !

    網路 / IO 操作設定逾時(建議 15–30s)。

  • !

    敏感操作做權限驗證(API Key、允許路徑)。

  • !

    回傳 {"error": "...", "hint": "..."} 幫助模型重試。

06

Resources:讓 AI 讀取動態內容

Resource 與 Tool 的區別:Resource 是資料提供者(以唯讀為主),Tool 是動作執行者。透過 URI 定址:file://http://custom://

靜態與動態資源
@mcp.resource("config://app-settings")
def get_app_settings() -> str:
    """回傳應用程式設定"""
    return json.dumps({"version": "1.0", "env": "production"})

@mcp.resource("user://{user_id}/profile")
def get_user_profile(user_id: str) -> str:
    """根據使用者 ID 回傳使用者資料"""
    return json.dumps(db.query_user(user_id))

資源類型包括:文字text/plainapplication/json)、二進位(圖片、PDF)、串流(即時行情)。實戰可做檔案系統 Server:列出目錄、讀取檔案、可選訂閱檔案變更。

07

Prompts:可複用的提示詞範本

MCP Prompt 是預先定義的提示片段,支援動態參數注入,提升團隊提示詞一致性與可維護性。

程式碼審查 Prompt 範本
from mcp.types import PromptMessage, TextContent

@mcp.prompt()
def code_review_prompt(language: str, code: str) -> list[PromptMessage]:
    """程式碼審查提示詞範本"""
    return [PromptMessage(
        role="user",
        content=TextContent(type="text", text=f"""請審查以下 {language} 程式碼:
1. 品質與可讀性  2. Bug 與安全隱患  3. 效能最佳化

```{language}
{code}
```""")
    )]

可定義含 user + assistant 多輪範本,用於面試模擬、除錯助手等場景。Client 呼叫 prompts/get 取得填充後的訊息鏈。

08

進階:HTTP 傳輸模式(遠端 MCP Server)

特性stdioHTTP + SSE
部署本機行程遠端伺服器
延遲極低依賴網路
多 Client不支援支援
場景IDE 本機工具SaaS / 團隊共享
Streamable HTTP 模式
mcp = FastMCP("remote-server", transport="streamable-http")

if __name__ == "__main__":
    mcp.run(host="0.0.0.0", port=8000)

生產環境需加:Bearer Token / API Key 中介軟體、CORS 白名單、請求頻率限制。勿將未鑑權的 HTTP MCP 直接暴露公網。

09

除錯與測試

9.1 MCP Inspector

啟動 Inspector 可圖形化測試 tools/listtools/call、檢視 JSON-RPC 日誌、模擬錯誤場景。

9.2 單元測試(pytest + ClientSession)

test_calculator_tool
@pytest.mark.asyncio
async def test_calculator_tool():
    server_params = StdioServerParameters(command="python", args=["server.py"])
    async with stdio_client(server_params) as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            result = await session.call_tool("calculate", {"expression": "2 + 2"})
            assert result.content[0].text == "4"

9.3 常見錯誤排查

錯誤原因解決
工具未出現設定路徑錯誤檢查 config.json 絕對路徑
JSON 序列化失敗回傳型別不支援轉 str 或 dict
逾時斷線工具執行慢非同步 + 逾時控制
權限拒絕檔案路徑受限設定允許目錄 / VNC 點 TCC
10

生產部署

10.1 Docker 容器化

Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "server.py"]

10.2 雲端服務選型

  • Railway / Render:個人專案一鍵部署。

  • AWS Lambda / Cloud Run:Serverless,注意冷啟動與 stdio 限制。

  • 自建 VPS + Nginx:反向代理 + TLS + 限流。

10.3 可觀測性

結構化請求日誌、Prometheus 工具呼叫指標、Sentry 錯誤告警、/health 健康檢查。宣告 MCP 協定版本,工具升級保持向後相容。

11

實戰:個人知識庫 MCP Server

需求:讓 AI 搜尋本機 Markdown 筆記、語意檢索、建立/更新筆記。在 Cursor 中問:「我上週記錄了什麼關於 MCP 的筆記?」

技術選型

元件推薦
向量資料庫ChromaDB / Qdrant(本機)
嵌入模型text-embedding-3-small
檔案監聽watchfiles 增量索引

核心 Tools

  1. 1

    index_notes:掃描目錄建立向量索引。

  2. 2

    semantic_search:按語意回傳相關片段。

  3. 3

    write_note:建立或追加 Markdown。

  4. 4

    Resource:notes://{path} 直接讀取單篇筆記。

效果:AI 呼叫 semantic_search 召回片段後綜合回答,比把整個筆記庫塞進上下文省 Token 且更準確。

12

MCP 生態與 2026 展望

優質開源 Server 推薦

  • mcp-server-filesystem — 檔案系統操作

  • mcp-server-github — GitHub 儲存庫

  • mcp-server-brave-search — 網路搜尋

  • mcp-server-postgres — 資料庫查詢

  • mcp-server-slack — Slack 訊息

2026 年 Cursor、Claude Desktop、OpenAI、Google Gemini、Microsoft 均已支援或完成 MCP 接入;MCP Marketplace 與企業級安全標準(OAuth 2.1、稽核)持續完善。官方文件:modelcontextprotocol.io;Python SDK:github.com/modelcontextprotocol/python-sdk

落地五步(含遠端 Mac 驗收)

  1. 1

    選定 Host(Cursor / Claude Desktop)並確認 2026 版本原生支援 MCP。

  2. 2

    本機 stdio 開發 Server,Inspector 驗證 tools/list

  3. 3

    註冊到 Cursor MCP 設定,用 Hello World 工具冒煙測試。

  4. 4

    涉及瀏覽器、鑰匙圈、螢幕錄製的 Server,在 macOS 圖形工作階段完成 TCC 授權(純 SSH 無法點選)。

  5. 5

    Docker 部署 HTTP 模式,加鑑權與監控後上線;與站內Agent Skill瀏覽器 MCP文互連。

13

FAQ

Python(mcp + FastMCP)上手最快;TypeScript(@modelcontextprotocol/sdk)適合已有 Node 棧的團隊。協定層等價。

IDE 本機開發優先 stdio;需多使用者共享、SaaS 交付選 HTTP + SSE / Streamable HTTP,並務必加鑑權。

Tools 執行動作(寫庫、發請求);Resources 提供唯讀資料(設定、檔案內容),透過 URI 範本定址。

瀏覽器 DevTools MCP、高權限檔案操作、鑰匙圈與螢幕錄製會觸發 macOS TCC 彈窗。純 SSH 無法點「始終允許」,需 VNC 圖形工作階段與 Host 同機驗收。

結語

MCP 是 AI 工具化的標準協定——掌握從 Hello World 到生產部署的全鏈路,是 2026 年 AI 工程師的核心競爭力之一。你打算用 MCP 開發什麼工具?歡迎在實踐後複盤自己的 Server 設計。

隱性成本往往不在寫程式,而在執行環境:Windows 主力機 + 雲端 Mac 混跑 Cursor MCP 時,權限彈窗、Python 虛擬環境與 Inspector 日誌要在同一台機器的桌面工作階段裡交叉核對;自購 Mac mini 則要承擔睡眠、系統更新與折舊,8GB 記憶體在向量索引 + 多 Server 並行時也容易吃滿。

若你希望按小時驗證 MCP 工具鏈、又要在與 Cursor 同機的圖形介面裡完成 TCC 與 Inspector 驗收,可透過 VNCMac 租用遠端 Mac:下方主按鈕進入購買頁;需要對比套餐時先瀏覽首頁