Khi một công cụ hữu ích không còn cần thiết
Tháng 1 năm 2026, trợ lý AI lập trình của mình phải đọc hướng dẫn của mọi công cụ được kết nối dù phần lớn công việc chỉ cần một hai cái, nên mình làm một công cụ giúp trợ lý chỉ tìm đến thứ đang cần. Sau khi đo thử trên một cấu hình, mình ngừng duy trì vì các ứng dụng chạy trợ lý đã tự tìm được công cụ cần thiết.
Tóm tắt
Tháng 1 năm 2026, trợ lý AI lập trình của mình phải nhận hướng dẫn của mọi công cụ được kết nối dù phần lớn công việc chỉ cần một hai cái, nên mình tạo ra tool-hub-mcp để trợ lý chỉ tìm đến công cụ đang cần. Trên một cấu hình đã thử, lượng token đầu vào được báo cáo giảm 38.48%. Mình giải thích con số ấy nói được gì, chưa nói được gì, và vì sao mình dừng khi Claude Code và Codex tự có tính năng tìm công cụ.

Thử hình dung bạn ra bàn để sửa một món đồ nhỏ và chỉ cần đúng một chiếc tua vít, nhưng trước khi cầm được nó thì ai đó đã trải kín mặt bàn bằng hướng dẫn sử dụng của mọi dụng cụ trong xưởng. Việc thì đơn giản, còn chỗ trên bàn đã bị chiếm gần hết bởi những trang giấy bạn sẽ không đọc tới.
Tháng 1 năm 2026, bộ công cụ agent lập trình của mình gặp đúng kiểu chuyện đó. Agent lập trình là trợ lý AI có thể đọc và sửa code, và agent của mình dùng công cụ bên ngoài qua nhiều máy chủ MCP, tức những kết nối cho phép agent làm việc với các thứ như Jira hay trình duyệt. Mỗi máy chủ đều gửi mô tả các công cụ của máy chủ đó cho agent ngay từ trước khi việc chính bắt đầu. Phần lớn công việc chỉ cần một hoặc hai công cụ, vậy mà định nghĩa của toàn bộ công cụ vẫn chiếm chỗ trong ngữ cảnh làm việc của agent, tức lượng thông tin agent có thể sử dụng khi xử lý yêu cầu, nên phần chỗ còn lại cho việc thật sự cần làm cũng hẹp đi.
Ý tưởng của mình là cho agent một lối vào gọn hơn. Thay vì nhận hết mô tả công cụ ngay từ đầu, ứng dụng chạy agent (client) chỉ kết nối với một cổng trung gian, tìm trong đó công cụ mà việc hiện tại cần, rồi gọi công cụ ấy thông qua cổng. Mình tạo ra tool-hub-mcp để thử ý tưởng này. Agent lập trình viết phần lớn code, còn mình là người nhận ra phần tài nguyên bị tiêu tốn lặp đi lặp lại, đề xuất cổng trung gian, quy định cách việc tìm và gọi công cụ phải hoạt động, rà soát các thay đổi và kiểm tra kết quả.
Khi agent đi tìm công cụ
Dùng cổng trung gian cũng giống như hỏi quầy lễ tân thay vì tự lật hết cuốn danh mục, và cuộc trao đổi ở quầy gói gọn trong hai thao tác. Đầu tiên agent gọi hub_search để tìm các công cụ phù hợp và nhận về quy ước gọi của chúng, tức phần mô tả cách dùng từng công cụ. Khi đã chọn được, agent gọi hub_execute và cổng chuyển yêu cầu đến đúng công cụ đó trên máy chủ gốc. Phía sau quầy, cổng giữ một chỉ mục các công cụ sẵn có và khởi động tiến trình máy chủ của chúng khi cần đến.
Vì tìm và gọi là hai bước riêng, agent có thể đọc cách một công cụ hoạt động trước khi đưa tham số vào. Đổi lại, cách sắp xếp này cũng có cái giá của nó: mỗi lần tìm công cụ là thêm một lượt gọi, việc khởi động tiến trình có thể khiến agent phải chờ, và mọi thứ còn phụ thuộc vào việc kết quả tìm kiếm có đúng công cụ đáp ứng yêu cầu hay không. Ngữ cảnh ban đầu gọn hơn chỉ đáng giá khi agent vẫn làm xong được phần việc phía sau.

Khi mình đo thử trên một cấu hình
Repo ghi lại một phép thử với Claude Code v2.1.6 và sáu máy chủ MCP: Jira, Playwright, Outline, shadcn, Chrome DevTools và Figma. Khi kết nối trực tiếp các máy chủ đó, client báo 48,371 token đầu vào, còn khi đi qua cổng trung gian thì client báo 29,758, tức chênh lệch 18,613 token, tương đương 38.48%, trong đúng cấu hình ấy.
Các con số này chỉ trả lời một câu hỏi hẹp về lượng đầu vào mà client báo cáo. Một tổ hợp công cụ khác có thể cho kết quả khác, và trong cả một công việc hoàn chỉnh, agent cũng có thể dùng lại một phần ngữ cảnh tiết kiệm được cho chính các lượt gọi tìm công cụ. Vì thế mình giữ phiên bản client và danh sách máy chủ ngay cạnh các con số, bởi chính chúng cho biết điều gì đã thực sự được đo.
Trong một phép thử khác, Claude Code đã tìm được công cụ Figma cần dùng và gửi đúng yêu cầu dự kiến, nhưng API từ xa trả về lỗi xác thực. Như vậy phép thử này xác nhận được luồng định tuyến và cách truyền tham số, còn thao tác từ xa có chạy thành công hay không thì nó chưa chứng minh được.

Khi các client tự làm được việc đó
Sau đó, các phiên bản mới hơn của những client như Claude Code và Codex tự bổ sung tính năng tìm kiếm công cụ hoặc chỉ tải công cụ khi cần. Trong môi trường của mình, khi client đã tự tìm công cụ hoặc chỉ tải chúng lúc cần, phần lớn lý do mình dùng thêm cổng trung gian cũng không còn.
Giữ cổng lại cũng có nghĩa là giữ luôn những phiền phức đi kèm: cổng vẫn cần cấu hình, có những điểm lỗi riêng và có thể làm tăng độ trễ. Mình cũng không có người dùng bên ngoài hay trường hợp dùng trong môi trường vận hành thực tế nào đủ để tiếp tục duy trì lớp trung gian ấy, một khi vấn đề ban đầu đã không còn đáng kể trong công việc của mình. Nên mình thôi xem tool-hub-mcp là một dự án đang phát triển. Repo vẫn còn lệnh xuất cục bộ để tìm trong chỉ mục công cụ bằng các công cụ shell, nhưng với môi trường hiện tại, mình không có lý do gì để chạy cổng trung gian chính.
Nhìn lại sau khi dừng
Điều mình giữ lại từ thử nghiệm này là cách nó giúp mình đi đến một quyết định. Một bất tiện lặp đi lặp lại đã trở thành một giao diện cụ thể và một phép đo, và khi phần mềm xung quanh thay đổi, chính việc bám vào vấn đề ban đầu cũng giúp mình dễ quyết định dừng hơn.
Source code và ghi chép đo lường vẫn còn đó nếu bạn muốn xem kỹ hơn cấu hình cùng kết quả.
