Mục tiêu học tập
Sau bài này, bạn sẽ có thể:- ✅ Giải thích MCP là gì và tại sao nó là open standard quan trọng với hệ sinh thái agentic AI
- ✅ Add MCP server (HTTP và stdio) bằng claude mcp add và cấu hình auth đúng cách
- ✅ Chọn đúng scope (local / user / project) cho từng MCP server trong từng tình huống
- ✅ Dùng /mcp để audit context cost và disable server không cần thiết
- ✅ Quyết định khi nào dùng MCP, khi nào dùng CLI, khi nào dùng Skill
Mở đầu: Từ copy-paste đến fetch tự động
Đỗ Minh Khoa là backend engineer tại một startup fintech. Hôm nay anh cần review pull request cho ticket Linear MEN-12 — một thay đổi trong payment reconciliation flow. Trước khi có MCP: Khoa mở Linear trong browser, đọc ticket. Copy requirements. Mở terminal, mở Claude Code. Paste toàn bộ nội dung ticket vào prompt: “Đây là yêu cầu: [dán 400 từ]. Review PR này theo yêu cầu đó.” Claude đọc, review. Mất khoảng 5 phút cho việc copy-paste, chưa kể khi ticket thay đổi (PM vừa update acceptance criteria) thì bản copy đã outdated và Claude đưa ra nhận xét không còn chính xác. Sau khi add Linear MCP:“A lot of your context lives outside your codebase — in databases, productivity apps, or public repositories. MCP bridges that gap.”Context không chỉ nằm trong codebase của bạn. Nó nằm trong Linear, Slack, Notion, Figma, Postgres production, Datadog dashboard, Jira backlog. MCP là cầu nối để Claude Code chạm tới tất cả những nơi đó — không phải qua copy-paste thủ công, mà qua tool calls có structured, real-time, và có thể audit.
MCP là gì?
Model Context Protocol (MCP) là open standard cho phép Claude Code kết nối với external tools và data sources. “Open standard” nghĩa là Anthropic không độc quyền — bất kỳ service nào cũng có thể build MCP server, và Claude Code (cũng như các AI agent khác) có thể connect tới.Khái niệm cốt lõi: Tools
Trước khi hiểu MCP, cần hiểu khái niệm tools trong agentic AI. Tools cho phép agent như Claude Code thực hiện hành động — không chỉ trả về text. Khi Claude Code chạy grep, đọc file, gọi bash, hay tìm kiếm web — đó là tools. MCP mở rộng khả năng này ra ngoài máy tính của bạn: Claude có thể gọi Linear API, query Postgres, post Slack message — tất cả thông qua tool call. Đây là điểm khác biệt căn bản với AI “bình thường”: thay vì chỉ generate text, Claude Code có thể làm việc trong hệ thống thực của bạn.Kiến trúc MCP
Claude Code nói chuyện với MCP server qua MCP Protocol (một JSON-RPC protocol chuẩn). MCP server sau đó nói chuyện với service thực (Linear API, database, v.v.). Bạn không cần biết chi tiết protocol — chỉ cần biết: Claude gọi tool, MCP server thực thi, kết quả trả về cho Claude.2 loại MCP server
HTTP servers — Remote, hosted by service provider
HTTP servers chạy trên cloud của service provider (Linear, Slack, Notion…). Bạn connect tới chúng qua network. Thường yêu cầu auth (OAuth2 hoặc API key). Ví dụ: Linear MCP, Slack MCP, Notion MCP, GitHub MCP, Context7 MCP.Stdio servers — Local processes trên máy bạn
Stdio servers là các process chạy trực tiếp trên máy bạn. Claude Code spawn process đó, giao tiếp qua stdin/stdout. Không có network call, không cần expose port. Ví dụ: MCP server cho local Postgres, MCP server cho nội bộ công ty (CRM, internal DB), MCP server bạn tự viết.Bảng so sánh HTTP vs Stdio
| Tiêu chí | HTTP Server | Stdio Server |
|---|---|---|
| Nơi chạy | Cloud của provider | Máy bạn (local process) |
| Setup complexity | Thấp (URL + auth) | Trung bình (cài package/binary) |
| Network dependency | Cần internet | Không cần internet |
| Security | Auth qua OAuth2 / API key | Chỉ truy cập local resources |
| Latency | Cao hơn (network round-trip) | Thấp (IPC local) |
| Secrets exposure | API key / OAuth token | Không expose ra ngoài |
| Ideal use case | SaaS tools (Linear, Slack, Notion) | Local DB, internal tools, dev tools |
| Ví dụ | Linear, Slack, Context7, Figma | Postgres local, file system, nội bộ |
Add MCP Server
Cú pháp cơ bản
Quản lý servers với /mcp
Trong session Claude Code, gõ /mcp để xem trạng thái:3 Scope của MCP server
Scope quyết định MCP server được lưu ở đâu và ai có thể dùng.| Scope | File lưu | Ai có thể dùng | Chia sẻ | Quản lý secret |
|---|---|---|---|---|
| Local | ~/.claude/mcp.json (project-specific entry) | Chỉ bạn, project hiện tại | Không | API key trong local config, không vào repo |
| User | ~/.claude/mcp.json (global) | Chỉ bạn, tất cả projects | Không | API key trong local config |
| Project | .mcp.json trong root repo | Cả team (ai clone repo đều get) | Có — qua version control | Dùng env vars, KHÔNG hardcode key |
.mcp.json vào repo, mọi người clone về là có ngay.
.mcp.json example (project scope)
.env gitignored) — không bao giờ hardcode vào .mcp.json.
CRITICAL: Context Cost của MCP
Đây là phần quan trọng nhất bài này. Hiểu sai điểm này dẫn đến lãng phí context window rất lớn.MCP servers add tool definitions — kể cả khi bạn không dùng
Khi Claude Code start, nó load toàn bộ tool definitions của tất cả MCP server đang enabled. Tool definition là JSON schema mô tả mỗi tool có tham số gì, làm gì. Mỗi definition này tốn token. 5 server không dùng → 30k token lãng phí — tương đương 15% context window mất trước khi bạn gõ prompt đầu tiên.Tính toán thực tế
| Server | Tools | Token definition | Dùng thực tế |
|---|---|---|---|
| Linear | 12 | ~8k | Mỗi ngày |
| Context7 | 3 | ~2k | Khi cần docs |
| Slack | 6 | ~4k | Vài lần/tuần |
| Figma | 15 | ~12k | Chỉ khi design |
| Jira | 10 | ~7k | Team không dùng nữa |
| Tổng | 46 | ~33k |
Audit và clean up với /mcp
Auto tool search mode (unstable)
Khi MCP tools vượt 10% context window, Claude Code tự động switch sang tool search mode — thay vì load toàn bộ definitions, nó search on-demand khi cần tool nào mới load tool đó. Nghe hay, nhưng feature này chưa stable. Tool search đôi khi miss tool phù hợp, dẫn đến Claude không biết tool đó tồn tại. Không nên dựa vào auto tool search. Chủ động /mcp disable vẫn là cách tốt hơn. Xem thêm về quản lý context trong Bài 2.5: Quản lý Context — phần “Chiến thuật 5: Dọn dẹp MCP servers không dùng”.CRITICAL: MCP vs CLI vs Skill — Decision tree
Đây là quyết định quan trọng. Không phải mọi integration đều nên là MCP server.Bảng so sánh CLI vs MCP vs Skill
| Tiêu chí | CLI (gh, aws…) | MCP Server | Skill |
|---|---|---|---|
| Context cost | Không (zero) | Cao (2-15k/server, luôn on) | Thấp (chỉ load khi dùng) |
| Setup | Đã có sẵn | Cần claude mcp add + auth | Viết 1 file markdown |
| Capability | Theo CLI flags | Theo tool definitions | Theo instructions trong file |
| Real-time data | Qua lệnh CLI | Tự động qua tool call | Cần bạn provide data |
| Best for | GitHub, AWS, k8s, DB migration | Linear, Slack, Figma, Notion | Workflows lặp lại, checklists |
| Khi nào dùng | CLI tốt và documented | Dùng hàng ngày, cần real-time | Task specific, không có CLI/MCP |
Anthropic internal example: cu tool
Anthropic sử dụng một internal CLI tool tên cu cho các workflows nội bộ. Thay vì tạo MCP server riêng cho cu, Anthropic chỉ cần ghi vào CLAUDE.md:Ví dụ thực chiến: Setup Linear + Context7 + Slack cho dev team
Bối cảnh
Team 5 người, stack: Next.js + Postgres + Linear + Slack. Bạn muốn Claude Code có thể:- Fetch ticket details từ Linear
- Tra cứu docs thư viện up-to-date
- Post notification khi PR merge
Bước 1: Add Linear MCP (HTTP, OAuth)
- Fetch ticket chi tiết, acceptance criteria, comments
- Transition status (In Progress → In Review)
- Comment trực tiếp lên ticket
Bước 2: Add Context7 MCP (HTTP)
Bước 3: Add Slack MCP (HTTP)
Bước 4: Save vào .mcp.json project, commit
Linear và Context7 đã ở scope project nên tự động vào .mcp.json. Kiểm tra:.mcp.json vì scope user — mỗi người tự auth bằng account của mình.
Bước 5: Team clone repo → auto get MCP servers
Teammate mới clone repo:.mcp.json, prompt:
Bước 6: /mcp audit context cost — disable khi không cần
Cuối sprint, bạn đang focus code, không cần Slack notifications:Case studies theo role
Backend Engineer: Postgres MCP + Plan Mode
Tình huống: Cần optimize query đang slow, nhưng không nhớ chính xác schema các bảng.DevOps/SRE: Incident Response với Datadog + PagerDuty
Tình huống: Alert 2h sáng, service down.Frontend Engineer: Figma MCP fetch design specs
Tình huống: Implement component mới từ Figma design.Product Manager: Sprint Summary
Tình huống: Viết sprint summary hàng tuần.Marketing: weekly metrics digest
Tình huống: Báo cáo metrics hàng tuần cho team.Anti-patterns
Anti-pattern 1: Bật mọi MCP server “phòng khi cần”
Triệu chứng: /mcp show 12 server connected. Tổng overhead 60k tokens. Bạn thực sự dùng 2 server mỗi ngày. Tại sao tệ: 60k token = 30% context window mất trước khi làm việc. Performance giảm, cost tăng, Claude bị “loãng” attention. Cách đúng: Enable MCP server theo project (.mcp.json chỉ có những gì cả team cần), disable cá nhân những gì bạn không dùng session đó.
Anti-pattern 2: Dùng MCP khi CLI đã đủ tốt
Ví dụ sai: Add github-mcp trong khi gh CLI đã có sẵn, documented tốt, và bạn dùng thành thạo. Tại sao tệ: gh tốn 0 token overhead. github-mcp tốn ~10k token definitions. Với gh, bạn kiểm soát chính xác command nào chạy. Với MCP, Claude tự quyết — đôi khi gọi tool không cần thiết. Cách đúng: GitHub → dùng gh. AWS → dùng aws. Kubernetes → dùng kubectl. Chỉ dùng MCP khi không có CLI tốt hoặc khi cần real-time data phức tạp hơn CLI cho phép.Anti-pattern 3: Hardcode API key trong .mcp.json
Ví dụ sai:Anti-pattern 4: Không refresh OAuth token định kỳ
Triệu chứng: Đang làm việc giữa session, Claude báo “Linear MCP error: 401 Unauthorized”. Mất đà, phải interrupt để re-auth. Cách đúng: /mcp reconnect linear để refresh token trước khi bắt đầu session dài. Set calendar reminder re-auth OAuth monthly (token thường expire 30-90 ngày).Anti-pattern 5: Skip /mcp audit — MCP zombie
Triệu chứng: 6 tháng sau bạn nhận ra Jira MCP vẫn connected dù team chuyển sang Linear từ tháng 2. 7k token mất mỗi session từ tháng 2. Cách đúng: Mỗi tháng gõ /mcp một lần, check usage. Disable server không còn relevant. 5 phút/tháng tiết kiệm hàng nghìn token.Anti-pattern 6: Dùng MCP cho one-off task
Tình huống: Bạn cần một lần duy nhất query Notion để lấy meeting notes hôm qua. Sai: Add Notion MCP (setup, auth, tốn ~5k token overhead mãi mãi sau đó). Đúng: Viết Skill nhỏ với curl gọi Notion API một lần, hoặc copy-paste thủ công nếu thực sự chỉ 1 lần.Mẹo nâng cao
Mẹo 1: Local MCP server cho internal tools
Nếu công ty có internal CRM, legacy system không expose public API — bạn vẫn có thể build MCP server local (stdio):Mẹo 2: .mcp.json template cho organization
Tạo template repo có sẵn.mcp.json với cấu hình chuẩn cho stack của team:
Mẹo 3: Multiple environment — dev vs prod MCP
.mcp.json. Switch bằng env vars — không nhầm lẫn.
Mẹo 4: Combine MCP + Skill cho workflows phức tạp
Skill /sprint-review (xem Bài 2.9: Skills) có thể orchestrate nhiều MCP servers:Mẹo 5: Delegate MCP-heavy task sang subagent
Nếu task cần fetch nhiều data từ nhiều MCP servers (ví dụ: generate quarterly report từ Linear + GitHub + Datadog + Slack + Google Analytics), đừng để main context phình:Mẹo 6: Audit monthly
Lịch đơn giản để không có MCP zombie:Áp dụng ngay
Bài tập 1: Khám phá MCP ecosystem (15 phút)
Bước 1: Mở trình duyệt, vào claude.com/connectors. Bước 2: Browse theo category. Identify 2-3 MCP servers relevant với stack/workflow của bạn. Gợi ý theo stack:- Web dev: Context7 (docs) + Linear/Jira (tickets) + GitHub (PRs)
- Backend/Data: Postgres/MySQL MCP + any analytics MCP
- DevOps: Datadog/Grafana MCP + PagerDuty MCP
- Mobile: Figma MCP + Linear MCP
Bài tập 2: Audit context cost (10 phút)
Bước 1: Mở project bạn đang làm, start Claude Code. Bước 2: Gõ /mcp. Bước 3: Điền vào bảng audit:Tóm tắt
🎯 MCP là open standard — cho phép Claude Code thực hiện actions trong external services (Linear, Slack, Postgres, Figma…) thay vì chỉ trả về text. Tools là cơ chế core của agentic AI. 🎯 2 loại server: HTTP server (remote, provider-hosted, cần auth) và Stdio server (local process, không cần network, an toàn cho internal tools). 🎯 3 scope: Local (chỉ bạn, project này), User (bạn, mọi project), Project (cả team, qua .mcp.json checked in repo). API key luôn qua env vars, không hardcode. 🎯 MCP tốn context kể cả khi không dùng — mỗi server 2-15k token definitions. Dùng /mcp audit định kỳ, disable server không essential. Tránh MCP zombie. 🎯 CLI > MCP khi CLI đã tốt. gh cho GitHub, aws cho AWS — zero context overhead. MCP tốt nhất khi service không có CLI và bạn dùng hàng ngày.Bài tiếp theo
Bạn đã biết cách mở rộng Claude Code ra ngoài codebase qua MCP. Nhưng còn một lớp automation nữa: Hooks — scripts chạy tự động ở các lifecycle events (trước khi tool chạy, sau khi Claude hoàn thành, khi có lỗi…). Hooks khác với MCP, Skills, hay CLAUDE.md ở điểm quan trọng: deterministic — chạy mọi lúc, không phụ thuộc vào Claude quyết định. Bài 2.11 sẽ đi sâu vào Hooks: PreToolUse, PostToolUse, exit codes, và cách build automation pipeline thực sự tin cậy. ➡️ Bài tiếp theo: Bài 2.11 — Hooks: Automation tất địnhTài liệu tham khảo
- claude.com/connectors — Catalog hàng trăm MCP server chính thức
- MCP specification — Open standard spec, JSON-RPC protocol details
- Anthropic MCP docs — Official Claude Code MCP guide
- Slash command trong session: /mcp — list, disable, reconnect servers
- CLI command: claude mcp add, claude mcp list, claude mcp remove
- Cross-reference: Bài 2.5 (context cost quản lý), Bài 2.7 (CLAUDE.md + internal CLI tools), Bài 2.8 (subagent + MCP delegation), Bài 2.9 (MCP vs Skill decision)