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 แหล่งเมื่อเริ่มต้น:

  1. settings.json — คีย์ mcpServers กำหนด command, args, env
  2. CLI --mcp-config — ไฟล์หรือ inline JSON
  3. 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 ใน Authorization header
  • 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

ToolMCP ใช้ทำอะไร
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.tsJSON-RPC client
src/services/mcp/auth.tsOAuth + Bearer token authentication
src/services/mcp/oauthPort.tsLocal HTTP server สำหรับ OAuth callback
src/services/mcp/types.tsType definitions
src/services/mcp/InProcessTransport.tsIn-process transport สำหรับ DirectConnect
src/services/mcp/officialRegistry.tsทะเบียน MCP server ทางการ
src/tools.tsassembleToolPool() รวม MCP tools