iT邦幫忙

2026 iThome 鐵人賽

DAY 10
0

前言

昨天用 Hook 決定 Claude 不能做什麼,今天反過來,要讓 Claude 能讀到這台機器以外的東西。


昨天說到

昨天做的兩支 Hook,擋的都是這台機器上的事

  • 能不能修改某個檔案
  • 能不能在測試沒過的情況下結束

但規格不只存在 markdown 裡,也可能存在:

  • GitHub Issue
  • 資料庫 Schema
  • 設計稿
  • 第三方套件文件

這些地方 Claude 原本都讀不到,只能靠訓練資料裡的記憶去猜。

所以今天要處理的是另一個問題:

怎麼讓 Claude 接觸到外部世界?

答案就是 MCP(Model Context Protocol)


MCP 是什麼?

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 的工具呼叫。


兩種 MCP 來源

一、自己設的 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。


實作:接 context7

這個 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,以及它所帶進來的內容嗎?」


小結

  • MCP 是讓 Claude 接觸外部世界的方式,可以取得資料,也可以呼叫外部工具。
  • MCP Server 主要提供 tools / resources / prompts,實務上最常遇到的是 tools。
  • MCP 可以自己設定,也可以透過 claude.ai Connector 使用。
  • MCP 讓外部內容進入 Context,也因此增加了 Prompt Injection 的風險。
  • 昨天 Hook 在收緊 Claude 能做什麼,今天 MCP 在放寬 Claude 能接觸什麼,兩者其實是一體兩面。

Part 2 到這裡結束,模型、指令、Skill、Hook、MCP 分別都講解過了。

明天:開始進 Part 3,會先說明接下來要實做系統的功能和核心。


上一篇
Day 09|Hooks:讓 AI Workflow 自動化
下一篇
Day 11|要做什麼:會議紀錄系統實作介紹
系列文
30 天打造我的 AI 開發工作流:從需求分析到上線12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言