# MCP Server 開發指南
## 什麼是 MCP Server
MCP (Model Context Protocol) Server 是一個讓 AI 應用程式能夠存取外部工具和資料的伺服器。它可以提供三種功能:
### 1. Tools (工具)
LLM 可以主動呼叫的函式來執行操作。
**使用情境**: 當 LLM 需要執行某個動作時(如計算、API 呼叫、資料庫操作),它會選擇適當的 tool 並傳入參數執行。
**LLM 使用方式**:
- LLM 會根據 tool 的 description 決定是否使用
- LLM 根據 inputSchema 準備正確的參數
- Tool 執行後,結果會回傳給 LLM 繼續對話
**範例對話流程**:
```
User: "15 乘以 23 等於多少?"
LLM 思考: 需要計算,我有 calculate tool 可用
LLM 動作: 呼叫 calculate(operation="multiply", a=15, b=23)
Tool 回應: {"result": 345, "operation": "multiply"}
LLM 回覆: "15 乘以 23 等於 345"
```
### 2. Resources (資源)
提供上下文資料的來源(檔案、資料庫、API 內容)。
**使用情境**: Resource 不是讓 LLM 主動呼叫的,而是讓 LLM 能夠「讀取」某個資料來源的內容。當用戶要求 LLM 存取特定資料時,LLM 會讀取 resource 的內容作為上下文。
**LLM 使用方式**:
- LLM 看到 resource 清單,知道有哪些資料可以存取
- 當用戶提到需要某個資料時,LLM 會讀取對應的 resource URI
- Resource 的內容會被載入到 LLM 的上下文中
- LLM 基於這些內容來回答問題
**範例對話流程**:
```
User: "user://12345 的電子郵件是什麼?"
LLM 思考: 用戶要求存取 user://12345 resource
LLM 動作: 讀取 resource "user://12345"
Resource 內容: {"id": "12345", "name": "User 12345", "email": "user12345@example.com", ...}
LLM 回覆: "用戶 12345 的電子郵件是 user12345@example.com"
```
**Tool vs Resource 的差異**:
- **Tool**: LLM 主動執行動作(寫入、計算、API 呼叫)
- **Resource**: LLM 被動讀取資料(檔案內容、資料庫記錄、文件)
### 3. Prompts (提示模板)
預先定義的對話模板,用於結構化常見的互動模式。
**使用情境**: Prompt 是一個「快捷方式」,讓用戶可以快速套用預先設計好的提示詞範本。當用戶選擇某個 prompt 時,系統會用指定的參數生成完整的提示訊息。
**LLM 使用方式**:
- Prompts 主要是給「用戶」使用,不是給 LLM 自己使用
- 用戶在 UI 中選擇一個 prompt(如 "code-review")
- 填入必要參數(如程式碼、語言、聚焦項目)
- 系統生成完整的 prompt 訊息傳給 LLM
- LLM 收到的是已經格式化好的問題
**範例使用流程**:
```
User 在 UI: 選擇 "code-review" prompt
User 填入: language="Python", code="def add(a,b): return a+b", focus="security"
系統生成: "Please review the following Python code, focusing on security vulnerabilities and best practices:\n\n```python\ndef add(a,b): return a+b\n```"
LLM 收到: (上述完整訊息)
LLM 回覆: (進行程式碼安全審查)
```
**Prompt 的價值**:
- 確保提示詞的一致性和品質
- 節省用戶重複輸入相同結構的提示
- 可以封裝複雜的提示詞工程技巧
## 實際應用案例
### Resource 實際使用案例
**案例 1: 文件系統伺服器**
- **Server**: `@modelcontextprotocol/server-filesystem`
- **Resource**: 提供檔案系統存取,如 `file:///path/to/file.txt`
- **使用方式**:
```
User: "請總結 file:///docs/report.md 的內容"
Claude: 讀取 file:///docs/report.md → 取得文件內容 → 總結
```
**案例 2: GitHub 儲存庫伺服器**
- **Server**: `@modelcontextprotocol/server-github`
- **Resource**: 提供 GitHub repo 內容,如 `github://owner/repo/file.ts`
- **使用方式**:
```
User: "github://facebook/react/README.md 說了什麼?"
Claude: 讀取該 resource → 取得 README 內容 → 回答問題
```
**案例 3: 資料庫查詢結果**
- **Server**: 自訂 PostgreSQL MCP server
- **Resource**: 提供資料表內容,如 `postgres://users/table`
- **使用方式**:
```
User: "postgres://users/active 這些用戶的平均年齡是多少?"
Claude: 讀取 active users 資料 → 計算平均年齡 → 回答
```
### Prompt 實際使用案例
**案例 1: Git Commit Message 生成器**
- **Prompt**: `git-commit`
- **參數**: `changes` (變更描述)
- **UI 操作**:
1. 用戶選擇 "git-commit" prompt
2. 貼上變更內容:「Added user authentication, fixed login bug」
3. 系統生成完整 prompt 給 Claude
4. Claude 回覆標準格式的 commit message
**案例 2: Bug Report 模板**
- **Prompt**: `bug-report`
- **參數**: `title`, `steps`, `expected`, `actual`
- **UI 操作**:
1. 用戶選擇 "bug-report" prompt
2. 填入各欄位
3. Claude 收到結構化的 bug report prompt
4. Claude 生成完整且格式正確的 bug report
**案例 3: API 文件生成器**
- **Prompt**: `api-documentation`
- **參數**: `endpoint`, `method`, `parameters`
- **UI 操作**:
1. 用戶選擇 "api-documentation" prompt
2. 填入 API 資訊
3. Claude 生成標準化的 API 文件
## 為什麼 Resources 和 Prompts 需要用戶主動使用?
### Resources 的設計理念
Resources 設計為「被動讀取」是為了:
1. **安全性**: LLM 不能隨意讀取所有檔案,必須由用戶明確指定
2. **效能**: 只在需要時載入資料,避免浪費 context window
3. **明確性**: 用戶清楚知道 LLM 存取了哪些資料來源
實際上在支援 MCP 的 IDE(如 Claude Desktop、Cursor)中,當你提到某個檔案路徑或 URI 時,系統會自動建議可用的 resources,讓存取變得很方便。
### Prompts 的設計理念
Prompts 設計為「用戶選擇」是為了:
1. **可重複性**: 確保相同任務使用相同的提示詞結構
2. **專業性**: 封裝 prompt engineering 的最佳實踐
3. **效率**: 快速套用複雜的提示詞模板
在實際使用中,IDE 會在適當時機顯示相關的 prompts 供你選擇,就像是程式碼片段(snippets)一樣方便。
## MCP Client 功能支援比較
不同的 MCP clients 對 MCP 功能的支援程度不同:
### IDE / 編輯器
#### Cursor
根據社群討論,**Cursor 目前只支援 Tools**。
**支援功能**:
- ✅ Tools
- ❌ Resources (計劃中)
- ❌ Prompts (計劃中)
**Note**: Cursor 論壇有多個討論串詢問 Resources 和 Prompts 支援,目前尚未實作。
#### Kiro
**支援功能**:
- ✅ Tools (完整支援)
- ✅ Resources (完整支援)
- ✅ Prompts (完整支援)
- ✅ 完整 MCP 支援
**特點**:
- AWS 推出的 agentic IDE(基於 VS Code fork)
- 專注於 spec-driven development
- 內建 MCP 支援,配置位於 `.kiro/settings/mcp.json`
- 與 Claude Code 整合良好
- 提供 spec 和 steering documents 管理
**注意**: Kiro 是獨立的 IDE,不是 VS Code extension。另有第三方 extension "Kiro for Claude Code" 提供類似功能於 VS Code 中。
**文件**: https://kiro.dev/docs/guides/learn-by-playing/07-extending-kiro-with-mcp/
**官網**: https://kiro.dev/
#### VS Code Copilot
**支援功能**:
- ✅ Tools (完整支援)
- ✅ Resources (完整支援)
- ❌ Prompts (不支援)
**特點**:
- VS Code 1.102+ 正式支援 MCP(GA)
- 可透過 `copilot-mcp` extension 管理 MCP servers
- 支援本地和遠端 MCP servers
- 官方提供 GitHub MCP server(可透過 Copilot Chat 操作 GitHub)
- 企業可透過 group policies 管理 MCP 功能
**文件**: https://code.visualstudio.com/docs/copilot/customization/mcp-servers
**Extension**: https://marketplace.visualstudio.com/items?itemName=AutomataLabs.copilot-mcp
#### Cline (VS Code Extension)
**支援功能**:
- ✅ Tools (完整支援)
- ✅ Resources (完整支援)
- ✅ Prompts (完整支援)
- ✅ 完整 MCP 支援
**特點**:
- 開源 AI coding assistant (前身為 Claude Dev)
- 支援多種 LLM providers
- 完整 MCP 協定支援
- MCP Marketplace 提供預設 servers
- 支援 MCP Rules 進行智能工具啟動
- 可透過 `.clinerules` 自訂 MCP 伺服器觸發邏輯
**文件**: https://docs.cline.bot/mcp/mcp-overview
**Marketplace**: https://marketplace.visualstudio.com/items?itemName=saoudrizwan.claude-dev
#### Continue (VS Code Extension)
**支援功能**:
- ✅ Tools
- ✅ Resources
- ✅ Prompts
- ✅ 完整 MCP 支援
#### Roo Code (VS Code Extension)
**支援功能**:
- ✅ Tools
- ❌ Resources
- ❌ Prompts
### AI 平台
#### Claude Desktop
**支援功能**:
- ✅ Tools
- ✅ Resources
- ✅ Prompts
- ✅ 完整 MCP 支援
#### ChatGPT (OpenAI)
**支援功能**:
- ✅ Tools (完整支援)
- ✅ Resources (完整支援)
- ⚠️ Prompts (文件未明確說明)
**特點**:
- OpenAI 於 2025 年 1 月正式支援 MCP
- ChatGPT Developer Mode (beta) 提供完整 MCP client 支援
- 支援 read/write tools
- Workspace admins 可為 Deep Research 建立 custom MCP connectors
- 透過 OpenAI Agents SDK 整合 MCP
- 支援 MCP server tools 於 ChatGPT developer mode
**文件**: https://platform.openai.com/docs/mcp
**Agents SDK**: https://openai.github.io/openai-agents-python/mcp/
#### Google AI Studio
**支援功能**:
- ❌ Tools (無原生 MCP 支援)
- ❌ Resources (無原生 MCP 支援)
- ❌ Prompts (無原生 MCP 支援)
**特點**:
- Google 官方的 web-based AI 開發平台
- 主要用於 prompt 設計和 Gemini API 測試
- **不支援原生 MCP 協定**
- 可透過第三方瀏覽器擴充功能(如 MCP SuperAssistant)間接使用 MCP
- 適合快速原型開發和 API 測試
**官網**: https://aistudio.google.com/
**注意**: Google AI Studio 本身不支援 MCP,需要透過外部工具整合
### CLI 工具
#### Codex CLI (OpenAI)
**支援功能**:
- ✅ Tools (完整支援)
- ✅ Resources (完整支援)
- ⚠️ Prompts (文件未明確說明)
**特點**:
- OpenAI 官方發布的輕量級 coding agent
- 在 terminal 中運行
- 支援 MCP servers(透過 `~/.codex/config.toml` 配置)
- 支援圖片分享(截圖、線框圖、架構圖)
- 內建 to-do list 追蹤進度
- 內建 web search 功能
**重要**:
- Codex CLI 支援 MCP
- Codex Cloud (SWE Agent) **目前不支援 MCP**(有社群討論要求加入)
- Codex IDE extension 支援 MCP
**文件**: https://developers.openai.com/codex/cli/
**GitHub**: https://github.com/openai/codex
**MCP 配置**: https://developers.openai.com/codex/mcp
#### Claude CLI / Claude Code (Anthropic)
**支援功能**:
- ✅ Tools (完整支援)
- ✅ Resources (完整支援)
- ✅ Prompts (完整支援)
**特點**:
- Anthropic 官方產品
- MCP 協定的創始者,支援最完整
- 支援 local 和 remote MCP servers
- Claude Desktop Extensions 提供一鍵安裝 MCP servers
- 可透過 gh CLI 與 GitHub 互動
**文件**: https://docs.claude.com/en/docs/claude-code/mcp
**Desktop Extensions**: https://www.anthropic.com/engineering/desktop-extensions
**Remote MCP**: https://www.anthropic.com/news/claude-code-remote-mcp
#### Gemini CLI (Google)
**支援功能**:
- ✅ Tools (完整支援)
- ✅ Resources (完整支援)
- ✅ Prompts (完整支援)
**特點**:
- Google 官方發布
- 完整 MCP 支援
- 適合 terminal 工作流程
### 框架整合
#### LangChain / LangGraph
**langchain-mcp-adapters** 套件支援:
- ✅ Tools (MCP tools → LangChain tools)
- ✅ Resources (可轉換為 context)
- ⚠️ Prompts (需要自行整合)
**特點**:
- 可以將 MCP servers 整合到 LangGraph workflows
- 支援將 LangGraph agents 作為 MCP server 暴露
- 雙向整合:MCP → LangChain 和 LangChain → MCP
**套件**: `langchain-mcp-adapters`
**文件**: https://langchain-ai.github.io/langgraph/agents/mcp/
#### GenAIScript (Microsoft)
**支援功能**:
- ✅ Tools (可將 scripts 暴露為 MCP tools)
- ✅ Resources (支援 https, file, git, gist, vscode 等協定)
- ✅ Prompts (可用 JavaScript 組裝)
- ✅ 雙向整合:可作為 MCP client 也可作為 MCP server
**特點**:
- 由 Microsoft 開發的 JavaScript/TypeScript 框架
- 專門用於程式化組裝 LLM prompts
- 內建 MCP tool 驗證和安全功能
**文件**: https://microsoft.github.io/genaiscript/
**MCP 整合**: https://microsoft.github.io/genaiscript/reference/scripts/mcp-tools/
### 開發策略建議
- 優先開發 Tools(所有 clients 都支援)
- 根據目標 client 的支援程度決定是否實作 Resources 和 Prompts
- 選擇框架時,需考慮所需 MCP 功能的支援程度(LangChain/LangGraph 支援 Tools 和 Resources,GenAIScript 支援完整功能)
- 參考上方「MCP Client 功能支援比較」表格評估需求
## 開發環境設定
### TypeScript
```bash
npm install @modelcontextprotocol/sdk zod
```
### Python
```bash
pip install mcp
# 或使用 uv
uv add mcp
```
## 快速開始
完整的開發範例和程式碼請參考:
- **官方文件**: https://modelcontextprotocol.io/
- **快速入門教學**: https://modelcontextprotocol.io/quickstart/server
- **TypeScript SDK**: https://github.com/modelcontextprotocol/typescript-sdk
- **Python SDK**: https://github.com/modelcontextprotocol/python-sdk
- **實際案例集合**: https://www.pulsemcp.com/use-cases
- **完整教學**: https://www.dailydoseofds.com/model-context-protocol-crash-course-part-4/
- **Prompts 進階指南**: https://www.speakeasy.com/mcp/building-servers/advanced-concepts/prompts
## 常見 MCP Servers
以下是一些實際可用的 MCP servers,可以直接安裝使用:
### 檔案系統存取
```bash
npm install -g @modelcontextprotocol/server-filesystem
```
### GitHub 整合
```bash
npm install -g @modelcontextprotocol/server-github
```
### SQLite 資料庫
```bash
pip install mcp-server-sqlite
```
### Google Drive
```bash
npm install -g @modelcontextprotocol/server-gdrive
```
### Brave Search
```bash
npm install -g @modelcontextprotocol/server-brave-search
```
這些 servers 可以在 Claude Desktop 的設定檔中配置後立即使用,不需要自己開發。
## 測試你的 Server
### 使用 MCP Inspector
**TypeScript:**
```bash
npx @modelcontextprotocol/inspector npx tsx server.ts
```
**Python:**
```bash
uv run mcp dev server.py
```
### 整合到 Claude Desktop
編輯 `claude_desktop_config.json`:
```json
{
"mcpServers": {
"my-server": {
"command": "python",
"args": ["server.py"]
}
}
}
```