昨天用 Hook 決定 Claude 不能做什麼,今天反過來,要讓 Claude 能讀到這台機器以外的東西。
昨天做的兩支 Hook,擋的都是這台機器上的事:
但規格不只存在 markdown 裡,也可能存在:
這些地方 Claude 原本都讀不到,只能靠訓練資料裡的記憶去猜。
所以今天要處理的是另一個問題:
怎麼讓 Claude 接觸到外部世界?
答案就是 MCP(Model Context Protocol)。
MCP 可以把 Claude 和外部資料、工具接起來,一個 MCP Server 可以提供三種東西:
| 類型 | 是什麼 |
|---|---|
| tools | 可以被 Claude 呼叫的函式,例如查資料庫、建立 Issue |
| resources | 可以被讀取的資料來源 |
| prompts | 可以被套用的提示詞模板 |
實務上最常遇到的是 tools,例如:
Claude
↓
MCP
↓
┌───────────────┬───────────────┬───────────────┐
│ GitHub │ Database │ Context7 │
│ Issue │ Schema │ 文件 │
└───────────────┴───────────────┴───────────────┘
這代表 Claude 不再只能看專案裡的檔案,而是可以透過 MCP 去取得外部資訊,而這也會和昨天的 Hook 接起來。
MCP 工具在 Claude Code 裡會有這種命名:
mcp__<server名稱>__<tool名稱>
例如:
mcp__github__create_issue
mcp__context7__query_docs
這個命名很重要,因為昨天學到的 Hook,可以直接拿來管 MCP。
例如:
"matcher": "mcp__.*"
就可以攔截 MCP Server 的工具呼叫。
一、自己設的 server
可以直接寫在設定檔裡,也可以使用 claude mcp add 加,有三種 scope:
| scope | 寫到哪 | 影響範圍 |
|---|---|---|
local(預設) |
~/.claude.json 的專案區塊 |
只有這個專案,只有我 |
project |
專案根目錄的 .mcp.json |
這個專案,會進版控、team 共用 |
user |
~/.claude.json 頂層 |
我的所有專案 |
二、claude.ai 的 connector
另一種是 claude.ai 上的 Connector,例如:Gmail、Notion、Linear、Figma,這些不是直接寫進專案設定,而是在 claude.ai 網頁上授權,通常走 OAuth。
這個 server 在做什麼?
context7 提供的是套件文件的即時查詢,它要解決的是一個很實際的問題:AI 可能會用兩年前的 API 寫法。
套件會更新,但模型訓練資料不會跟著即時更新。這種錯最麻煩的地方就是,程式碼看起來是對的,直到真的跑才知道錯。Context7 的做法,就是在需要的時候查詢最新的套件文件。
設定
{
"mcpServers": {
"context7": {
"type": "http",
"url": "https://mcp.context7.com/mcp",
"headers": {
"CONTEXT7_API_KEY": "${CONTEXT7_API_KEY}"
}
}
}
}
設定檔記得檢查:API Key、Token 這類資訊,不要直接寫死。
執行
設定完成後,先不要急著開始問問題。
先用:
/mcp
確認 Context7 有沒有真的連上,如果看到:✔ Connected,才代表 MCP Server 正常。
確認 Context7 連線成功後,我直接拿目前專案骨架裡正在使用的 SQLAlchemy 2.0 來測:SQLAlchemy 2.0 的 Declarative Mapping 怎麼寫?Mixin 裡的共用欄位又該怎麼定義?
libraryId: /websites/sqlalchemy_en_20_orm
query: declarative mapping with DeclarativeBase, Mapped and mapped_column,
and how to share columns across models using mixins
結果
claude 不只告訴我 2.0 的寫法,還能讓我看出 1.x 和 2.0 到底差在哪裡,這樣就能避免 Claude 用「記得的舊知識」寫出一段還能跑,但其實已經過時的程式碼。
Context7 的價值,不只是讓 Claude「知道最新版」,而是讓它能查到最新版的官方文件,並用文件裡的內容回答問題。
放寬與收緊要同步進行
昨天的 Hook 是在收緊(界定 Claude 的行為邊界),今天的 MCP 則是放寬(擴充 Claude 能獲取的資訊),兩者相輔相成。
當 MCP 放寬了資訊調用,Hook 的管控就變得更加關鍵。因為 MCP 帶進來的除了資料,還包含外部內容(例如 GitHub Issue)——自己寫的 CLAUDE.md 是 Context,別人寫在 Issue 裡的也是 Context。
這正是為什麼評估 MCP Server 時,不能只看「能不能用」,更要問:「我信任這個 Server,以及它所帶進來的內容嗎?」
Part 2 到這裡結束,模型、指令、Skill、Hook、MCP 分別都講解過了。
明天:開始進 Part 3,會先說明接下來要實做系統的功能和核心。