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
| Transport | Use Case | Connection |
|---|---|---|
| stdio | Local tools, CLI | Process stdin/stdout |
| SSE | Remote servers, web | HTTP Server-Sent Events |
| Streamable HTTP | Modern remote | HTTP 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