MCP là giao thức mở chuẩn hoá cách một ứng dụng AI (host) kết nối tới nguồn dữ liệu và công cụ bên ngoài. Thay vì viết integration riêng cho từng model, bạn viết một MCP server và mọi client hỗ trợ MCP (Claude Code, Claude Desktop, IDE...) đều dùng được.
Thành phần
| Thành phần | Vai trò | Ví dụ |
|---|---|---|
| Host | Ứng dụng người dùng tương tác | Claude Code |
| Client | Giữ kết nối 1-1 tới một server | Nằm trong host |
| Server | Cung cấp tools, resources, prompts |
netbox-mcp, gnmi-mcp |
| Transport | Kênh truyền JSON-RPC | stdio, Streamable HTTP |
Luồng gọi tool
sequenceDiagram participant U as Người dùng participant H as Host (Claude Code) participant S as MCP server participant R as Router U->>H: "Interface nào trên pe1 đang down?" H->>S: tools/list S-->>H: [get_interfaces, get_bgp] H->>S: tools/call get_interfaces(host=pe1) S->>R: gNMI Get /interfaces R-->>S: JSON state S-->>H: kết quả đã lọc H-->>U: Tóm tắt + đề xuất
Ba primitive
- Tools: hàm model được phép gọi (có side-effect). Mô tả bằng JSON Schema.
- Resources: dữ liệu chỉ đọc, định danh bằng URI (
netbox://device/pe1). - Prompts: template do server gợi ý, người dùng chọn.
Khi nào nên viết MCP server riêng
- Dữ liệu nằm trong hệ thống nội bộ (NetBox, ClickHouse, Git config backup) mà agent cần tra cứu thường xuyên.
- Muốn giới hạn quyền: chỉ cho phép
show/get, chặncommitở tầng server thay vì tin model. - Cần audit: server ghi log mọi
tools/call.
Tool có side-effect trên thiết bị mạng nên yêu cầu xác nhận của người dùng và chạy commit confirmed / commit check trước.
Khai báo trong Claude Code
claude mcp add netbox -- uv run netbox-mcp --url https://netbox.example.net
claude mcp listXem thêm: Thu thập inventory bằng Ansible — có thể bọc playbook này thành một MCP tool.