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)
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 |