Model Context Protocol (MCP)
เชื่à¸à¸¡à¸•่ภClew à¸à¸±à¸šà¹€à¸„รื่à¸à¸‡à¸¡à¸·à¸à¸ ายนà¸à¸, à¹à¸«à¸¥à¹ˆà¸‡à¸‚้à¸à¸¡à¸¹à¸¥, à¹à¸¥à¸°à¸šà¸£à¸´à¸à¸²à¸£à¸œà¹ˆà¸²à¸™ MCP — มาตรà¸à¸²à¸™à¹€à¸›à¸´à¸”สำหรับ AI-tool integration
MCP à¸à¸¢à¸¹à¹ˆà¹ƒà¸™ src/services/mcp/ — Clew ค้นหาเซิร์ฟเวà¸à¸£à¹Œ MCP จาภsettings.json, CLI flags, à¹à¸¥à¸° plugin manifests à¹à¸¥à¹‰à¸§à¸£à¸§à¸¡à¹€à¸„รื่à¸à¸‡à¸¡à¸·à¸à¹€à¸‚้าสู่ runtime
สถาปัตยà¸à¸£à¸£à¸¡
┌──────────────────────────────────────────────────────────────────────────â”
│ MCP — MODEL CONTEXT PROTOCOL │
└──────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────â”
│ Settings / CLI Config │
│ src/services/mcp/config │
└────────────┬─────────────┘
│
â–¼
┌──────────────────────────â”
│ MCPConnectionManager │
│ จัดà¸à¸²à¸£ lifecycle │
│ ขà¸à¸‡à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸à¸£à¹Œ MCP ทั้งหมด │
└────────────┬─────────────┘
│
┌───────────────────┼───────────────────â”
â–¼ â–¼ â–¼
┌──────────────┠┌──────────────┠┌──────────────â”
│ Stdio MCP │ │ SSE MCP │ │Direct Connect│
│ (subprocess) │ │ (remote) │ │ (in-process) │
│ npx/node/etc │ │ HTTP + SSE │ │ │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
└──────────────────┼───────────────────┘
│
â–¼
┌──────────────────────â”
│ Client (JSON-RPC) │
│ tools/list │
│ tools/call │
│ resources/list │
└──────────┬───────────┘
│
â–¼
┌──────────────────────â”
│ assembleToolPool │
│ (MCP + built-in │
│ tools รวมà¸à¸±à¸™) │
└──────────┬───────────┘
│
â–¼
┌──────────────────────â”
│ Query Engine │
│ Model เห็น tools │
│ ทั้งหมดใน pool │
└──────────────────────┘
วิธีà¸à¸²à¸£à¸—ำงาน
à¸à¸²à¸£à¸„้นหาเซิร์ฟเวà¸à¸£à¹Œ
MCP servers ถูà¸à¸„้นหาจาภ3 à¹à¸«à¸¥à¹ˆà¸‡à¹€à¸¡à¸·à¹ˆà¸à¹€à¸£à¸´à¹ˆà¸¡à¸•้น:
settings.json— คีย์mcpServersà¸à¸³à¸«à¸™à¸” command, args, env- CLI
--mcp-config— ไฟล์หรืภinline JSON - Plugins — manifest ขà¸à¸‡ plugin สามารถประà¸à¸²à¸¨ MCP server ได้; เริ่มเมื่ภplugin โหลด, หยุดเมื่ภunload
ประเภทà¸à¸²à¸£à¹€à¸Šà¸·à¹ˆà¸à¸¡à¸•่à¸
| ประเภท | Transport | วิธีà¸à¸²à¸£ |
|---|---|---|
| Stdio | stdin/stdout | Clew spawn subprocess (เช่น npx @modelcontextprotocol/server-filesystem) à¹à¸¥à¸°à¸ªà¸·à¹ˆà¸à¸ªà¸²à¸£à¸œà¹ˆà¸²à¸™ JSON-RPC ทาง stdin/stdout |
| SSE | HTTP + SSE | เชื่à¸à¸¡à¸•่ภremote MCP server ผ่าน HTTP ใช้ SSE สำหรับ server→client, HTTP POST สำหรับ client→server รà¸à¸‡à¸£à¸±à¸š OAuth |
| Direct Connect | In-process | รัน MCP server ใน process เดียวà¸à¸±à¸™ ใช้ InProcessTransport — ไม่มี network, ไม่มี subprocess ใช้ใน plugin-bundled servers |
Tool Lifecycle
1. CONNECT ──► MCPConnectionManager เชื่à¸à¸¡à¸•่ภserver
│
â–¼
2. DISCOVER ──► เรียภtools/list (รà¸à¸‡à¸£à¸±à¸š paginated)
│
â–¼
3. MERGE ──► assembleToolPool() รวม MCP tools
│ à¸à¸±à¸š built-in tools (sort + dedup)
â–¼
4. PRESENT ──► Model เห็น MCP tools เป็น native tools
│ (permission gating, hooks, logging)
â–¼
5. EXECUTE ──► Model เรียภtool → toolExecution.ts
│ route ไปยัง server ที่ถูà¸à¸•้à¸à¸‡
â–¼
6. RESPOND ──► ผลลัพธ์à¸à¸¥à¸±à¸šà¹„ปหา model
à¸à¸²à¸£à¸¢à¸·à¸™à¸¢à¸±à¸™à¸•ัวตน (Authentication)
- OAuth 2.0 — redirect flow สำหรับ remote MCP servers เปิด local HTTP port เพื่à¸à¸£à¸±à¸š callback
- Bearer token — static API token ใน
Authorizationheader - XAA token — auth provider token สำหรับ Claude-specific servers
- Credential vault — credentials ที่เà¸à¹‡à¸šà¹„ว้ใน vault ถูภinject à¸à¸±à¸•โนมัติ
คำสั่ง MCP
| คำสั่ง | คำà¸à¸˜à¸´à¸šà¸²à¸¢ |
|---|---|
/mcp | เปิดเมนูจัดà¸à¸²à¸£ MCP — list servers, add, remove, reconnect |
/mcp list | à¹à¸ªà¸”งเซิร์ฟเวà¸à¸£à¹Œ MCP ทั้งหมด พร้à¸à¸¡ tools, resources, prompts |
/mcp add <name> <command> [args...] | เพิ่ม stdio MCP server ใหม่ |
/mcp remove <name> | ลบ MCP server |
/mcp reconnect <name> | เชื่à¸à¸¡à¸•่ภMCP server ใหม่ |
รูปà¹à¸šà¸š Config (settings.json)
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"],
"env": {}
},
"database": {
"command": "node",
"args": ["./mcp/db-server.js"],
"env": {
"DB_URL": "postgresql://localhost:5432/mydb"
}
},
"remote-api": {
"url": "https://mcp.example.com",
"headers": {
"Authorization": "Bearer sk-..."
}
}
}
}
Plugin-Bundled MCP Servers
Plugin สามารถประà¸à¸²à¸¨ MCP server ใน manifest เมื่ภplugin โหลด Clew จะสร้าง DirectConnect session ให้à¸à¸±à¸•โนมัติ — ไม่ต้à¸à¸‡ subprocess ไม่ต้à¸à¸‡ network — server จะพร้à¸à¸¡à¹ƒà¸Šà¹‰à¸‡à¸²à¸™à¸—ันที
เครื่à¸à¸‡à¸¡à¸·à¸ Built-in ที่ใช้ MCP
| Tool | MCP ใช้ทำà¸à¸°à¹„ร |
|---|---|
ListMcpResources | à¹à¸ªà¸”ง resources จาภMCP servers ทั้งหมด (resources/list) |
ReadMcpResource | à¸à¹ˆà¸²à¸™ resource ตาม URI จาภMCP server (resources/read) |
ไฟล์สำคัà¸
| ไฟล์ | หน้าที่ |
|---|---|
src/services/mcp/MCPConnectionManager.tsx | จัดà¸à¸²à¸£ lifecycle ขà¸à¸‡à¹€à¸‹à¸´à¸£à¹Œà¸Ÿà¹€à¸§à¸à¸£à¹Œ MCP |
src/services/mcp/config.ts | โหลด config จาภsettings.json à¹à¸¥à¸° CLI flags |
src/services/mcp/client.ts | JSON-RPC client |
src/services/mcp/auth.ts | OAuth + Bearer token authentication |
src/services/mcp/oauthPort.ts | Local HTTP server สำหรับ OAuth callback |
src/services/mcp/types.ts | Type definitions |
src/services/mcp/InProcessTransport.ts | In-process transport สำหรับ DirectConnect |
src/services/mcp/officialRegistry.ts | ทะเบียน MCP server ทางà¸à¸²à¸£ |
src/tools.ts | assembleToolPool() รวม MCP tools |