18%

2.4 MCP Server Integration

MCP (Model Context Protocol) คืออะไร

MCP เป็น open protocol สำหรับเชื่อมต่อ AI models กับ external data sources และ tools — เหมือน USB-C สำหรับ AI applications คือ standardized interface ที่ทุก AI client สามารถเชื่อมต่อกับทุก MCP server ได้โดยไม่ต้องเขียน custom integration

MCP มี 3 primitives หลัก:

  • Tools — functions ที่ AI เรียกใช้ได้ (เหมือน tool_use ใน API)
  • Resources — data ที่ AI อ่านได้ (เช่น files, database records)
  • Prompts — reusable prompt templates

Architecture

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  AI Client  │────▶│  MCP Server │────▶│  External   │
│ (Claude Code)│◀────│  (your code)│◀────│  Service    │
└─────────────┘     └─────────────┘     └─────────────┘
      stdio/SSE          your logic         API/DB/etc

Building an MCP Server (Python)

from mcp.server import Server
from mcp.types import Tool, TextContent

server = Server("my-tools")

@server.tool()
async def search_docs(query: str) -> list[TextContent]:
    """Search documentation for relevant articles."""
    results = await search_engine.query(query)
    return [TextContent(type="text", text=format_results(results))]

@server.tool()
async def get_user(user_id: str) -> list[TextContent]:
    """Get user profile by ID."""
    user = await db.users.find_one({"id": user_id})
    return [TextContent(type="text", text=json.dumps(user))]

# Run with stdio transport
if __name__ == "__main__":
    server.run(transport="stdio")

Building an MCP Server (TypeScript)

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";

const server = new McpServer({ name: "my-tools", version: "1.0.0" });

server.tool("search_docs", { query: z.string() }, async ({ query }) => {
  const results = await searchEngine.query(query);
  return { content: [{ type: "text", text: formatResults(results) }] };
});

const transport = new StdioServerTransport();
await server.connect(transport);

Transport Layers

TransportUse CaseConnection
stdioLocal tools, CLIProcess stdin/stdout
SSERemote servers, webHTTP Server-Sent Events
Streamable HTTPModern remoteHTTP with streaming

Connecting MCP Servers to Claude Code

ใน ~/.claude/settings.json:

{
  "mcpServers": {
    "my-docs": {
      "command": "python3",
      "args": ["/path/to/my-mcp-server.py"],
      "env": {
        "API_KEY": "..."
      }
    },
    "remote-tools": {
      "url": "https://my-server.com/mcp",
      "transport": "sse"
    }
  }
}

Resources vs Tools

  • Tools = actions ที่ AI เรียกใช้ (write, search, calculate) — AI ตัดสินใจเมื่อไหร่จะเรียก
  • Resources = data ที่ AI อ่านได้ (files, configs) — client load เข้า context ตอนเริ่ม
  • ใช้ Tools สำหรับ operations ที่มี side effects
  • ใช้ Resources สำหรับ read-only data ที่ต้องการ upfront

Exam Tips

  • MCP = standardized protocol ที่ decouple AI client จาก tool implementation
  • stdio transport = local, fast, simple — เหมาะ development
  • SSE transport = remote, scalable — เหมาะ production shared tools
  • ข้อสอบอาจถามความแตกต่างของ Tools vs Resources ใน MCP
  • MCP server เป็น process แยก — crash ไม่ทำให้ AI client crash
  • จำ 3 primitives: Tools, Resources, Prompts