Tưởng tượng bạn bước vào một quán buffet lẩu nướng với cái bụng đói cồn cào. Vừa ngồi xuống ghế, phục vụ chưa kịp rót nước đã bưng ra một cuốn thực đơn dày 500 trang, bọc bìa da nặng 10kg, đặt đè kín từ đầu bàn đến cuối bàn. Bạn chưa kịp gọi một đĩa bò hay con tôm nào thì mặt bàn đã không còn lấy một centimet trống để đặt đũa. Đó chính xác là những gì đang xảy ra với Claude Code khi bạn hào hứng cắm hàng tá server MCP (Model Context Protocol) vào máy.
Mỗi khi bạn mở một phiên làm việc, Claude Code sẽ gửi một thông điệp tools/list tới tất cả các server đang kết nối. Các server này hân hoan đáp lễ bằng hàng chục bản đặc tả schema JSON chi tiết từng li từng tí: từ tên hàm, mô tả, kiểu dữ liệu tham số cho tới các ràng buộc con. Toàn bộ đống tài liệu hướng dẫn sử dụng khổng lồ này được nhồi thẳng vào System Prompt trước khi bạn kịp gõ một dấu chấm. Hậu quả là ví tiền của bạn âm thầm bị bào mòn ở từng lượt chat, cửa sổ ngữ cảnh 200k bị bóp nghẹt, còn model thì bắt đầu có dấu hiệu ngáo ngơ vì phải nhớ quá nhiều thứ không liên quan.
Bài viết này mổ xẻ tường tận cơ chế ăn token của MCP, kiểm chứng con số giật mình 67.300 token từ cộng đồng GitHub và cung cấp 4 giải pháp cắt gọt thực chiến có sẵn trong tài liệu chính hãng mà không cần tốn thêm một xu mua gateway ngoài.
Đừng trả tiền thừa cho SaaS AI — Nhận lộ trình công cụ & chi phí tối ưu trong 10 giây
Mô tả bài toán của doanh nghiệp bạn (CSKH Zalo OA, Coding, RAG tài liệu nội bộ, Báo cáo P&L). Hệ thống cố vấn của 3A sẽ đề xuất bộ công cụ đã qua kiểm thử thực chiến.
MCP server nuốt chửng token của bạn ở đâu trước khi kịp gõ prompt?
Để hiểu vì sao token bốc hơi, chúng ta phải lột trần cơ chế giao tiếp bên dưới. Giao thức MCP vận hành trên nền JSON-RPC 2.0 (thường qua luồng stdio hoặc SSE). Khi một client như Claude Code khởi động, chu trình trao đổi diễn ra như sau:
{
"jsonrpc": "2.0",
"method": "tools/list",
"id": 1
}Phía MCP server sẽ hồi đáp bằng một mảng các tool kèm theo thuộc tính inputSchema. Hãy nhìn một ví dụ thực tế được trích xuất từ tài liệu MCP của Claude Code:
{
"name": "get_database_schema",
"description": "Returns the complete database schema with tables, columns, indexes, and foreign keys",
"inputSchema": {
"type": "object",
"properties": {
"include_indexes": { "type": "boolean" },
"target_schema": { "type": "string" }
}
},
"_meta": { "anthropic/maxResultSizeChars": 200000 }
}Nhìn một tool thì có vẻ vô hại, nhưng khi bạn gắn 5 đến 7 server, mỗi server chứa từ 15 đến 30 tool thì bài toán nhân lên thành thảm họa. Về mặt kỹ thuật, chi phí token của MCP phân bổ thành 3 nguồn độc lập:
1. Định nghĩa tool tĩnh (Tool Definitions & Schemas): Bao gồm tên tool, mô tả công năng và toàn bộ cấu trúc JSON Schema của các tham số. Đây là phần bị nạp tĩnh vào đầu cửa sổ ngữ cảnh và lặp lại trong mọi lượt trao đổi của phiên làm việc. 2. Dữ liệu đầu ra của tool (Tool Execution Output): Token tiêu tốn mỗi khi Claude thực sự kích hoạt một công cụ. Nếu tool đọc log hoặc truy vấn CSDL trả về một khối văn bản khổng lồ, nó sẽ ngốn sạch quota ngay tức khắc. Claude Code mặc định chặn trần ở MAX_MCP_OUTPUT_TOKENS = 25000 và cảnh báo từ 10.000 token. 3. Hướng dẫn của server (Server Instructions): Mỗi server có thể đính kèm một đoạn văn bản hướng dẫn hành vi. Claude Code phân bổ trần 4.096 ký tự cho instructions và mô tả nạp sẵn, hoặc 16.384 ký tự nếu dùng chế độ tìm kiếm tool.

Nhìn vào sơ đồ trên, bạn sẽ thấy sự khác biệt một trời một vực giữa việc nhồi nhét toàn bộ schema ngay từ Turn 0 và việc chỉ giữ lại cái tên rồi hoãn nạp nội dung chi tiết.
Con số 67.300 token từ đâu ra và những thủ phạm giấu mặt?
Con số gây bão trong giới kỹ sư thời gian qua là: "Cắm 7 MCP server làm mất đứt 67.300 token, chiếm 33,7% của cả cửa sổ 200k". Tôi đã lần tìm tận gốc nguồn gốc của tuyên bố này.
Dữ liệu này xuất phát từ issue công khai trên kho lưu trữ của Anthropic: anthropics/claude-code#11364 mở ngày 10/11/2025 với tiêu đề "Lazy-load MCP tool definitions to reduce context usage". Một lập trình viên đã dùng lệnh /context để đo lường thực tế trên môi trường cá nhân.
| Hạng mục bóc tách trong Issue #11364 | Dung lượng đo được | Tỷ lệ chiếm dụng trên cửa sổ 200k | Ghi chú kỹ thuật |
|---|---|---|---|
| Tổng ngữ cảnh khi cắm đủ 7 MCP server | 86.600 token | 43,3% | Đã bao gồm system prompt và hướng dẫn cơ bản |
| Riêng định nghĩa tool của 7 MCP server | 67.300 token | 33,7% | Bị nạp cứng vào bộ nhớ tạm trước prompt đầu |
| Khi tháo bớt chỉ còn 3 MCP server | 42.600 token | 21,3% | Tiết kiệm được ngay 24.700 token |
| Server GitHub MCP (chứa 27 tools) | ~18.000 token | 9,0% | Trung bình mỗi tool ngốn từ 550 đến 850 token |
| Trung bình một tool MCP tiêu chuẩn | 670 token | 0,33% | Dao động tùy thuộc vào độ phức tạp của JSON Schema |
Phép tính chia đơn giản: 18.000 token chia cho 27 công cụ của server GitHub ra trung bình khoảng 667 token cho mỗi công cụ. Hãy tưởng tượng bạn chỉ cần hỏi Claude "Hôm nay thời tiết thế nào?" hoặc "Hàm này viết sai cú pháp ở đâu?", thì con bot vẫn phải vác theo một ba lô chứa 67.300 token đặc tả của GitHub, Postgres, Sentry, AWS... đi qua từng vòng suy luận.

Đây là phép đo trên một máy trạm cụ thể tại thời điểm tháng 11/2025. Tuy không phải benchmark chính thức của Anthropic, nhưng nó phản ánh chính xác bậc độ lớn (order of magnitude) mà bất kỳ anh em lập trình viên nào thích vọc vạch công cụ cũng sẽ phải đối mặt.
Tool search giải cứu ngữ cảnh thế nào và chỉnh ENABLE_TOOL_SEARCH ra sao?
May mắn thay, các kỹ sư Anthropic không để tình trạng này kéo dài. Từ các bản phát hành gần đây của Claude Code, cơ chế Tool Search (Tìm kiếm công cụ động) đã được kích hoạt mặc định.
Về bản chất, thay vì nạp toàn bộ inputSchema của tất cả các tool, Claude Code chỉ nạp tên tool và phần server instructions. Toàn bộ phần schema chi tiết được gắn nhãn hoãn nạp (deferred). Khi người dùng đưa ra một yêu cầu liên quan, model sẽ gọi một tool nội bộ để tra cứu và kéo đúng schema cần thiết vào phiên làm việc.
Hành vi này được kiểm soát bởi biến môi trường ENABLE_TOOL_SEARCH:
| Giá trị cấu hình | Cơ chế hoạt động thực tế | Trường hợp sử dụng tối ưu |
|---|---|---|
(bỏ trống) | Hoãn nạp toàn bộ tool MCP, chỉ nạp theo nhu cầu thực tế | Mặc định khuyến nghị cho hầu hết các dự án |
auto | Nạp sẵn nếu tổng schema < 10% cửa sổ; vượt quá 10% sẽ hoãn tất cả | Dành cho máy có ít server nhưng muốn tốc độ tức thì |
auto:N | Tương tự auto nhưng tự đặt ngưỡng phần trăm N (từ 0 đến 100) | Ví dụ auto:5 cho các dự án cần tiết kiệm tối đa |
true | Ép buộc hoãn nạp kể cả khi dùng proxy qua ANTHROPIC_BASE_URL | Bắt buộc khi dùng gateway nội bộ của công ty |
false | Tắt hoàn toàn Tool Search, nạp sẵn tất cả (Eager Loading) | Chỉ dùng khi gỡ lỗi hoặc khi model liên tục chọn nhầm tool |
Cú pháp áp dụng ngay trên terminal:
# Thiết lập ngưỡng nhạy cảm 5% cửa sổ ngữ cảnh
export ENABLE_TOOL_SEARCH=auto:5
claude
# Hoặc ép bật hoãn nạp xuyên suốt phiên làm việc
ENABLE_TOOL_SEARCH=true claudeNếu bạn có một MCP server tối quan trọng (ví dụ công cụ đọc file hoặc terminal) mà bạn không muốn model mất thêm một vòng suy luận để tìm kiếm, hãy dùng thuộc tính alwaysLoad: true trong file cấu hình claude.json:
{
"mcpServers": {
"core-filesystem": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "."],
"alwaysLoad": true
}
}
}Các tool của server này sẽ luôn túc trực sẵn sàng, trong khi hàng chục tool phụ trợ khác vẫn nằm ngoan ngoãn ở chế độ chờ.
Bốn chiêu cắt gọt token thực chiến cứu ví tiền của bạn
Dưới đây là 4 giải pháp được tôi đúc kết trực tiếp từ tài liệu kỹ thuật và vận hành thực tế tại 3A Labs:
1. Rà soát định kỳ bằng lệnh /context và tháo dỡ server rác
Đừng bao giờ để các server "cài một lần rồi quên" bám rễ trong môi trường của bạn. Hãy mở một phiên Claude Code và gõ ngay:
/contextMàn hình sẽ hiển thị chính xác dung lượng mà từng thành phần đang ngốn: từ System prompt, Memory, Custom instructions đến MCP tools. Sau đó gõ /mcp để duyệt danh sách các server đang chạy và tắt ngay những thứ bạn không hề đụng tới trong dự án hiện tại.
2. Ưu tiên dùng CLI thay vì dựng MCP server cồng kềnh
Đây là lời khuyên vàng từ chính trang tài liệu chi phí của Claude: Hãy ưu tiên CLI khi có thể.
Thay vì cài đặt một GitHub MCP server đồ sộ với 27 tool chỉ để tạo pull request hay đọc issue, hãy cài đặt gh CLI trên máy. Claude Code có sẵn quyền gọi lệnh Bash, nó có thể tự chạy gh pr create hay gh issue list mà không tốn lấy một token nào cho phần định nghĩa schema. Điều này áp dụng tương tự cho aws, gcloud, docker hay sentry-cli.
3. Cắt gọt dữ liệu thô bằng PreToolUse Hook
Dữ liệu trả về từ tool mới là kẻ thù nguy hiểm nhất có thể làm bạn phá sản trong tích tắc. Giả sử bạn yêu cầu đọc log server, một tool ngây thơ sẽ ném về 10.000 dòng log (tương đương gần 100.000 token).

Bằng cách sử dụng hook PreToolUse (hoặc xử lý trực tiếp ở script wrapper), bạn có thể chặn đầu ra và lọc bỏ dữ liệu rác trước khi đẩy vào model. Dưới đây là đoạn script Python mẫu để lọc log chỉ giữ lại dòng lỗi:
import sys, re, json
def filter_tool_output(raw_output: str) -> str:
lines = raw_output.splitlines()
# Chỉ giữ lại các dòng chứa ERROR hoặc FATAL
error_lines = [l for l in lines if re.search(r'(ERROR|FATAL|EXCEPTION)', l, re.I)]
if len(error_lines) > 50:
return "
".join(error_lines[:50]) + f"
... (Đã cắt bớt {len(error_lines)-50} dòng lỗi)"
return "
".join(error_lines) if error_lines else "Không phát hiện lỗi nghiêm trọng trong 10.000 dòng log."
if __name__ == "__main__":
data = sys.stdin.read()
print(filter_tool_output(data))Từ 100.000 token ban đầu, hook này ép dung lượng xuống chỉ còn 1.200 token, tiết kiệm tới 98,7% chi phí cho một lần kiểm tra lỗi.
4. Giữ file CLAUDE.md dưới 200 dòng và chuyển giao thức sang Skill
Tài liệu chính hãng cảnh báo: File CLAUDE.md bị nạp lại ở mọi tương tác đơn lẻ. Rất nhiều lập trình viên có thói quen copy toàn bộ tài liệu kiến trúc, quy tắc code của công ty vào file này khiến nó phình lên hàng nghìn dòng.
Hãy giữ CLAUDE.md thanh thoát dưới 200 dòng, chỉ chứa các quy ước cốt lõi nhất. Toàn bộ các quy trình chuyên biệt (như deploy, đo kiểm benchmark, migrate CSDL) hãy đóng gói thành các Skill riêng biệt để chỉ nạp khi có yêu cầu cụ thể.
Rủi ro, chi phí ẩn và các điểm mù khi tối ưu token MCP
Không có bữa trưa nào là miễn phí trong kỹ thuật phần mềm. Khi áp dụng các biện pháp tối ưu trên, bạn bắt buộc phải lường trước các điểm đánh đổi sau:
Cảnh báo kỹ thuật
Đừng tối ưu mù quáng Hoãn nạp tool giúp bạn tiết kiệm chi phí ban đầu, nhưng có thể làm tăng độ trễ phản hồi (latency) ở lần gọi đầu tiên do model phải thực hiện thêm một vòng suy luận để tìm kiếm công cụ phù hợp. Ngoài ra, việc bật tắt server liên tục sẽ phá vỡ cơ chế Prompt Cache của Claude.
Dưới đây là các chi phí ẩn cần đặc biệt lưu tâm:
- Bẫy Cache Miss khi đổi cấu hình liên tục: Anthropic áp dụng cơ chế Prompt Caching giúp giảm 90% chi phí cho phần prompt được dùng lại. Tuy nhiên, nếu bạn liên tục thêm, bớt hoặc đổi tên MCP server giữa chừng, hash của prompt sẽ thay đổi hoàn toàn, dẫn đến
Cache Missvà khiến bạn phải trả đủ 100% chi phí nạp lại từ đầu. - Điểm mù khi đứng sau Corporate Proxy: Tài liệu chính hãng ghi rõ: Claude Code sẽ tự động tắt Tool Search nếu biến
ANTHROPIC_BASE_URLtrỏ tới một proxy hoặc máy chủ không phải của Anthropic, do hầu hết các proxy hiện nay không hỗ trợ forward khốitool_reference. Các lập trình viên trong doanh nghiệp dùng gateway có thể đang phải gánh toàn bộ 67.300 token nạp sẵn mà không hề hay biết. - Không hỗ trợ trên Azure Foundry: Triển khai Claude Code trên nền tảng Microsoft Foundry (Azure) hiện chưa hỗ trợ Tool Search; toàn bộ tool MCP đều bị nạp sẵn tĩnh 100%.
Có nên xuống tiền mua các giải pháp MCP Gateway thương mại không?
Phán quyết dứt khoát của tôi: Chỉ dùng gói Free, tức là khai thác triệt để các vũ khí có sẵn trong Claude Code.
Lý do rất rõ ràng: Bản thân Claude Code đã trang bị sẵn cơ chế ENABLE_TOOL_SEARCH để hoãn nạp schema, lệnh /context để soi xét chi phí, lệnh /mcp để tắt server thừa và biến MAX_MCP_OUTPUT_TOKENS để khóa van xả token. Bốn công cụ này đã giải quyết trọn vẹn hơn 80% vấn đề phình to ngữ cảnh.
Bạn chỉ nên cân nhắc các giải pháp Gateway thương mại hoặc tự dựng LiteLLM proxy khi và chỉ khi công ty của bạn có nhu cầu khắt khe về: kiểm soát truy cập phân quyền RBAC đa người dùng, mã hóa dữ liệu đầu cuối theo chuẩn doanh nghiệp, hoặc cần báo cáo chi phí chi tiết theo từng phòng ban qua OpenTelemetry. Với nhu cầu dev cá nhân hoặc nhóm nhỏ, mua thêm gateway chỉ làm tăng thêm một điểm nghẽn (single point of failure) và làm ví tiền của bạn mỏng đi nhanh hơn.
Nguồn tham khảo
Nguồn tham khảo
Ghi chú
Toàn bộ liên kết chính thức đều được kiểm tra phản hồi HTTP 200 ngày 19/10/2026.
| Nguồn tài liệu | Nội dung trích dẫn & Đối chiếu | Liên kết chính hãng |
|---|---|---|
| Claude Code Docs | Scale with MCP tool search, alwaysLoad, giới hạn ký tự | code.claude.com/docs/en/mcp |
| Claude Code Costs | Quản lý chi phí, giảm overhead MCP, CLAUDE.md và PreToolUse Hook | code.claude.com/docs/en/costs |
| GitHub anthropics | Issue #11364: Báo cáo thực tế 7 MCP server ngốn 67.300 token (10/11/2025) | anthropics/claude-code#11364 |
- Hoàng Nam, thử trước khi bạn xuống tiền.



