---
title: "10 - MCP 與外部工具"
type: note
specialty: Programming
tags: [claude-code-cli從0開始使用教學, 10-mcp, pubmed, integrations]
created: 2026-08-04
updated: "2026"
modified: 2026-08-04
---

# 10 - MCP 與外部工具

← [[09-Hooks自動化]] | [[00-Index]] | 下一篇 → [[11-非互動模式與腳本化]]

---

## MCP 是什麼

**Model Context Protocol (MCP) 是一個開放標準，用來把 AI 工具接到外部資料來源。**

有了 MCP，Claude Code 可以：讀 Google Drive 的設計文件、更新 Jira 的 ticket、抓 Slack 資料、或用你自己寫的工具。

> 🔑 **對你來說最重要的一個**：**PubMed MCP**。它是 vault `CLAUDE.md` §4 指定的「文獻搜尋第一優先」，也是 [[Programming/Herdr/Herdr從0開始使用教學/10-實戰-Obsidian醫學筆記庫|Claude / Codex 分工線]] 上「醫學查證不可外包」的技術原因——**Codex 沒有這個 MCP**。

---

## 管理 MCP server

### 在 session 裡

```
/mcp                      # 管理 MCP server 連線與 OAuth
/mcp reconnect
/mcp enable / disable
```

### 從 CLI

```bash
claude mcp                        # 設定 MCP server
claude mcp login <name>           # 跑某個 server 的 OAuth 流程（不用開 /mcp 面板）
claude mcp login <name> --no-browser   # SSH 環境：印出授權 URL，貼回 redirect URL
claude mcp logout <name>          # 清掉存起來的 OAuth 憑證
```

`claude mcp login` 對 HTTP、SSE、和 claude.ai connector server 都有效。

### 用設定檔載入

```bash
claude --mcp-config ./mcp.json               # 載入 MCP server（可空白分隔多個）
claude --strict-mcp-config --mcp-config ./mcp.json   # 只用這裡的，忽略其他所有 MCP 設定
```

`--strict-mcp-config` 在 CI 很有用——確保每台機器的 MCP 環境一致。

---

## 專案層級的 MCP 設定

`.mcp.json` 放在 repo 根目錄，團隊共享。

> ⚠️ **`.mcp.json` 和 `.claude.json` 都是 [protected paths](../Claude-Code-CLI從0開始使用教學/05-權限模式與安全#protected-paths受保護路徑)**——寫入永遠不會被自動核准（除了 `bypassPermissions`）。這是刻意的：MCP 設定決定 Claude 能接觸哪些外部系統，不該被隨手改掉。

---

## 檢查 MCP 有沒有正常載入

### 互動式

```
/mcp
```

### 腳本 / CI

`system/init` 事件（`--output-format stream-json` 時）有這兩個欄位：

| 欄位 | 說明 |
|---|---|
| `mcp_servers` | session 裡的 MCP server，每個含 `name` 和 `status` |
| `mcp_server_errors` | 被設定驗證跳過的 `--mcp-config` 項目，含 `name`、`type`、`message`。**沒有錯誤時這個 key 不存在**，所以 CI gate 可以在陣列非空時失敗 |

`type` 是跳過的分類：`unknown_type`、`url_missing_type`、`invalid_config`、`reserved_name` 等；沒見過的值當成一般跳過處理。

> ⚠️ **手動在終端機跑時**，Claude Code 會印警告到 stderr（`Warning: 1 MCP server skipped due to invalid config:`）。**但你把 stderr 導向、或 CI runner 捕捉它時就不會印**——只能靠 `mcp_server_errors` 欄位。

---

## 權限相關的兩個特殊行為

MCP 工具有兩個會**繞過一般權限邏輯**的機制，值得知道：

1. **組織把某個 connector 工具設成 `ask`** → 即使你有 allow 規則，它還是會直接問你。連 auto mode 的 classifier 都會跳過、直接問。
2. **MCP 工具標了 `_meta["anthropic/requiresUserInteraction"]`** → 同樣一定會問。

而在 `dontAsk` 模式下，這兩類工具會被**拒絕**（因為那個模式從不收集使用者回應）。

---

## 給 subagent 指定 MCP server

subagent frontmatter 的 `mcpServers` 欄位：

```yaml
---
name: lit-search
description: 用 PubMed 查證文獻與 PMID
mcpServers:
  - pubmed
tools: Read, Grep
---
```

每一項可以是「已設定好的 server 名稱」（如 `"pubmed"`），或直接內嵌完整設定。

> 💡 **這對你很有用**：做一個專門的 `lit-search` subagent，只給它 PubMed MCP 和唯讀工具，讓它在自己的 context 裡把一批 PMID 查完再回傳結論——主對話不會被幾十筆 abstract 淹沒。

⚠️ 注意：**plugin subagent 會忽略 `mcpServers` 欄位**。

---

## 其他外部整合（不是 MCP）

Claude Code 還有幾條非 MCP 的整合路線：

| 想做什麼 | 用什麼 |
|---|---|
| 從手機 / 別的裝置控制本機 session | **Remote Control** |
| 把 Telegram、Discord、iMessage、自訂 webhook 的事件推進 session | **Channels** |
| 本機開始、手機接續 | `claude --cloud` + 手機 app |
| 定期排程 | **Routines**（跑在 Anthropic 機器上，電腦關機也會跑）/ 桌面排程任務 / `/loop` |
| 自動 PR review 與 issue 分類 | **GitHub Actions** / **GitLab CI/CD** |
| 每個 PR 自動 code review | **GitHub Code Review** |
| 從 Slack 把 bug 報告變成 PR | **Slack** |
| 除錯活的網頁應用 | **Chrome** 整合（`claude --chrome`）|
| 自建 agent | **Agent SDK** |

> 💡 **Routines 對你可能有用**：例如「每週一早上盤點 vault 裡哪些筆記的 guideline 引用超過兩年」。因為跑在 Anthropic 的機器上，電腦關著也會跑。
> ⚠️ 但**雲端 session 讀不到你機器上的 `~/.claude/skills/`**——要用的 skill 必須 commit 進 repo 的 `.claude/skills/`（你的 vault 剛好已經是這樣了）。

---

## 🔗 相關筆記

- [[09-Hooks自動化]] — 上一步
- [[11-非互動模式與腳本化]] — 下一步
- [[05-權限模式與安全]] — protected paths 包含 `.mcp.json`
- [[08-Subagents與平行工作]] — 給 subagent 指定 MCP
- [[Programming/Herdr/Herdr從0開始使用教學/10-實戰-Obsidian醫學筆記庫|Herdr 10]] — 為什麼「有沒有 PubMed MCP」是分工的分界線

---

*最後更新：2026-08-04*
