<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Claude 擴充生態三部曲 - Bobo 的學思山丘</title><description>MCP（Model Context Protocol）是讓 Claude 能呼叫外部工具的標準協議。這篇從零解釋 MCP 的核心概念、和一般 API 的差異，以及如何用 FastMCP 在 10 分鐘內跑起第一個本地工具。</description><link>https://bobochen.dev/</link><item><title>MCP 到底是什麼？一篇讀懂 Claude 的插件系統</title><link>https://bobochen.dev/blog/what-is-mcp-claude-plugin-system/</link><guid isPermaLink="true">https://bobochen.dev/blog/what-is-mcp-claude-plugin-system/</guid><description>MCP（Model Context Protocol）是讓 Claude 能呼叫外部工具的標準協議。這篇從零解釋 MCP 的核心概念、和一般 API 的差異，以及如何用 FastMCP 在 10 分鐘內跑起第一個本地工具。</description><pubDate>Sat, 25 Apr 2026 00:00:00 GMT</pubDate><content:encoded>## 背景

常常有人問我：「Claude 可以連到外部工具嗎？可以查資料庫、呼叫 API、讀本機檔案嗎？」

答案是可以的，靠的就是 MCP——Model Context Protocol。

但每次我說出「MCP」這三個字，下一個問題幾乎都是「那是什麼」。這篇就從頭說清楚。

## 發現過程：Claude 為什麼不能直接呼叫 API？

先搞清楚問題本身。

假設你希望 Claude 能查今天的天氣，最直覺的想法是：讓 Claude 直接打一個 HTTP request 給氣象 API，拿到資料後回答你。

但有兩個問題：

**安全性**：Claude 是一個語言模型，不是一個可以任意執行代碼的程式。讓 AI 隨意呼叫外部服務，沒有任何控制機制，後果很難預測——它可能呼叫到你不想讓它碰的東西。

**標準化**：如果每個工具都有自己的呼叫方式，Claude 要怎麼「自動」知道每個工具的介面？你寫的工具是用 REST？GraphQL？還是自訂格式？模型沒辦法猜。

MCP 的出現，就是為了解決這兩件事。

它定義了一個標準的 client-server 協議：

- **MCP Server**：你寫的程式，負責暴露工具給 Claude 用
- **MCP Client**：Claude Desktop 或 Claude Code，負責呼叫你的工具

Claude 不是「自己去呼叫外部 API」，而是「透過 MCP 協議，呼叫你已經寫好、已經受控的工具」。這個設計讓整件事變得安全、可預期、而且可組合。

## 核心概念：用 USB 類比說清楚

我覺得最好的類比是 USB 標準。

**MCP 就像 USB 規格**

以前的電腦周邊設備，每家廠商都有自己的接頭——滑鼠有滑鼠的接頭，鍵盤有鍵盤的接頭，印表機又是另一種。USB 統一了這個標準之後，只要符合 USB 規格，插上去就能用，不管是哪家廠商做的裝置。

MCP 做的事情一模一樣：只要你的工具符合 MCP 規格，Claude 就知道怎麼用——不管你的工具是查天氣、讀資料庫、還是操作 Notion。

**MCP Tool 就像 USB 插頭**

每個 MCP tool 都有三樣東西：名稱、參數定義、回傳值。這就是「插頭的規格」。你定義好，Claude 自動知道什麼情況下該用哪個工具、要傳什麼參數進去。

**Claude Desktop config 就像裝置管理員**

Windows 的裝置管理員告訴作業系統：「這台電腦上有哪些 USB 裝置」。Claude Desktop 的 config 做一樣的事：告訴 Claude「這台機器上有哪些 MCP Server 可以用」。

## 具體數據：一個最小可用的 MCP Server

說了這麼多概念，來看實際程式碼長什麼樣子。

### 安裝

```bash
pip install mcp
```

### 最小 Server 範例

下面這個 server 只有一個工具——`greet`，輸入名字，回傳打招呼的字串。

```python
from mcp.server.fastmcp import FastMCP

mcp = FastMCP(&quot;my-first-server&quot;)

@mcp.tool()
def greet(name: str) -&gt; str:
    &quot;&quot;&quot;輸入名字，回傳打招呼的字串。&quot;&quot;&quot;
    return f&quot;哈囉，{name}！這是你的第一個 MCP 工具。&quot;

if __name__ == &quot;__main__&quot;:
    mcp.run()
```

就這樣。10 行，一個可以被 Claude 呼叫的工具就存在了。

[FastMCP](https://github.com/jlowin/fastmcp) 把 MCP 協議的底層細節全包起來，你只需要寫 `@mcp.tool()` decorator，剩下的它處理。

### 加進 Claude Desktop Config

找到這個檔案：`~/Library/Application Support/Claude/claude_desktop_config.json`

加入以下內容：

```json
{
  &quot;mcpServers&quot;: {
    &quot;my-first-server&quot;: {
      &quot;command&quot;: &quot;/usr/local/bin/python3&quot;,
      &quot;args&quot;: [&quot;/path/to/your/server.py&quot;]
    }
  }
}
```

注意 `command` 要填你系統實際的 Python 路徑（用 `which python3` 確認），`args` 填你的 server 檔案位置。

### 確認工具出現

完全重啟 Claude Desktop（不是關視窗再開，是從選單列 Quit 掉再重開）。

重開之後，直接問 Claude：「你現在有哪些工具？」

如果設定正確，它會列出你剛才定義的 `greet` 工具。然後你就可以說：「用 greet 工具，幫我打個招呼，名字是 Bobo」——Claude 會真的呼叫你的 Python function，回傳結果。

## 3 分鐘快速上手 Checklist

1. **安裝**：`pip install mcp`
2. **寫 server**：建立 `.py` 檔，加上 `FastMCP` 和至少一個 `@mcp.tool()`
3. **本機確認**：直接跑 `python3 server.py`，沒有 error 代表可以啟動（它會等待 stdin，Ctrl+C 結束）
4. **確認 Python 路徑**：`which python3`（重要，多版本環境容易填錯）
5. **加 config**：填進 `claude_desktop_config.json`
6. **完全重啟** Claude Desktop
7. **驗證**：問 Claude「你有哪些工具？」

## 反思

### 技術面：MCP 和傳統 REST API 的差異

傳統的 REST API 是**你的 app 主動呼叫**：你的程式在某個時機點，決定要打一個 HTTP request，拿到資料，再做後續處理。整個流程的控制權在你手上。

MCP 是**Claude 主動呼叫**：你定義好工具，Claude 根據對話情境，自己判斷什麼時候該用哪個工具、傳什麼參數。你不需要寫「呼叫工具的邏輯」，那是 Claude 的工作。

這個差異比看起來大。它意味著你不需要事先知道「使用者會問什麼」——只要工具定義清楚，Claude 自己會想辦法把對話和工具對應起來。

### 心態面：標準化協議為什麼重要

MCP 的設計目標是讓**任何 LLM 都能用同一套工具**——不只是 Claude。只要是支援 MCP 的客戶端，都可以呼叫你寫的 server。

這讓工具的投資報酬率變高：你做一次，可以被 Claude、被其他支援 MCP 的 AI agent 重複使用。生態系的邏輯就是這樣建立起來的。

### 有趣發現：MCP server 不需要對外開放

很多人第一次聽到「server」會直覺想到「要部署到雲端」、「要有 public IP」。

但 MCP server 完全可以跑在本機，甚至必須是本機——Claude Desktop 的 config 直接指向你的本機 Python 腳本，Claude 透過 stdio（標準輸入輸出）和 server 溝通，不需要任何 HTTP、不需要 port、不需要雲端。

你的工具，只跑在你的電腦上，只有你的 Claude 能用，資料不出你的機器。這對很多涉及私人資料的應用場景來說，是比任何雲端 API 更好的選擇。</content:encoded><media:content url="https://bobochen.dev/_astro/cover.BsYJspxv.webp" medium="image"/><category>MCP</category><category>Claude</category><category>Python</category><category>FastMCP</category><category>入門</category><enclosure url="https://bobochen.dev/_astro/cover.BsYJspxv.webp" length="0" type="image/png"/></item></channel></rss>