Thủ thuật
Giao thức Stateless MCP: Bước tiến mới với mcp-explorer và datasette-mcp
(giờ Việt Nam)
Tóm tắt AI
Chuẩn MCP 2.0 giới thiệu giao thức không trạng thái (stateless), rút gọn quy trình HTTP giúp tối ưu hóa đáng kể độ phức tạp cho cả client và server.
Bản dịch AI

Ngày 31 tháng 7 năm 2026
Thứ Ba vừa qua là ngày của Stateless MCP—sự kiện ra mắt MCP 2.0, hay còn gọi là đặc tả Model Context Protocol 2026-07-28 nếu dùng cái tên trang trọng nhưng khó nhớ hơn. Đây là thay đổi đáng kể nhất đối với đặc tả MCP kể từ khi nó ra mắt lần đầu, và cũng là yếu tố khơi dậy sự quan tâm cá nhân của tôi đối với giao thức này.
Thông tin nền: MCP là viết tắt của Model Context Protocol, mô tả một cách tiêu chuẩn để cung cấp các công cụ mới cho các khung tác nhân (agent frameworks) chạy bằng LLM. Nó được Anthropic giới thiệu vào tháng 11 năm 2024, đã có sự bùng nổ về mức độ quan tâm trong suốt năm 2025, và sau đó phần nào bị lu mờ bởi Skills (một phát minh khác của Anthropic) khi nhận thấy rằng một bộ công cụ tác nhân có quyền truy cập vào terminal và curl có thể thực hiện hầu hết những gì MCP làm theo cách linh hoạt hơn. Tôi đã viết về điều đó trong bài đánh giá năm 2025 của mình.
Hiện tại tôi đang quay lại với MCP. Việc cung cấp cho một tác nhân môi trường shell với khả năng truy cập internet tiềm ẩn nhiều rủi ro và đòi hỏi một mô hình mạnh mẽ có khả năng điều khiển hiệu quả môi trường đó. Các công cụ MCP dễ kiểm tra và kiểm soát hơn, đồng thời đủ đơn giản để các mô hình nhỏ hơn chạy trên máy tính xách tay vẫn có thể điều khiển chúng khá tốt.
Đặc tả MCP không trạng thái (stateless) mới cũng làm giảm đáng kể độ phức tạp khi triển khai cả client và server cho giao thức này. Tôi đã xây dựng ba cái trong tuần này!
Những gì trở nên dễ dàng hơn với stateless MCP
Cách minh họa tốt nhất về sự khác biệt giữa MCP có trạng thái (stateful) và không trạng thái (stateless) nằm ở bài đăng trên blog ngày 21 tháng 5, nơi giới thiệu bản RC cho đặc tả mới. Nó bao gồm một ví dụ rõ ràng về trước và sau khi thay đổi.
MCP có trạng thái cũ (tôi sẽ gọi nó là “legacy MCP”) yêu cầu hai yêu cầu HTTP—yêu cầu đầu tiên để khởi tạo phiên và lấy Mcp-Session-Id, và yêu cầu thứ hai để thực sự gọi công cụ:
Cách thức stateless mới sử dụng một yêu cầu HTTP duy nhất trông như thế này:
Điều này gọn gàng hơn rất nhiều từ góc độ triển khai phía client và server. Nó cũng phù hợp hơn để xây dựng các ứng dụng web có khả năng mở rộng, vì giờ đây bạn không cần phải duy trì trạng thái phía server để theo dõi các ID phiên đó, hoặc lo lắng về việc định tuyến cùng một phiên đến cùng một máy backend.
mcp-explorer
Tôi không thể tìm thấy một công cụ CLI tuyệt vời nào để thăm dò tương tác một server MCP, vì vậy tôi đã nhờ Codex giúp xây dựng công cụ của riêng mình.
mcp-explorer là kết quả đạt được. Đây là một công cụ CLI Python stateless, vì vậy bạn thậm chí không cần cài đặt nó để dùng thử—nó hoạt động với uvx như sau:
Lệnh này truy vấn MCP demo agentic-mermaid.dev của Ade Oshineye. Lệnh trên trả về danh sách các công cụ sau:
Sau đó để kiểm tra một công cụ:
Lệnh này xuất ra một loạt thông tin, bao gồm lược đồ JSON của các đầu vào và đầu ra.
Để gọi công cụ đó và truyền đối số cho nó:
Kết quả trả về:
Để chỉ lấy SVG thô, hãy thử thêm | jq.svg -r vào lệnh đó. Tôi đã nhận lại được hình ảnh này:
Có một vài lệnh khác trong tệp README, nhưng bạn đã nắm được ý chính. Tôi thấy việc xây dựng các công cụ CLI như thế này là một cách thực sự hiệu quả để làm quen với một đặc tả, ngay cả khi một tác nhân viết phần lớn mã nguồn thực tế.
datasette-mcp
Dự án thứ hai là datasette-mcp, một plugin Datasette bổ sung endpoint /-/mcp vào bất kỳ instance Datasette nào.
Đây có lẽ là lần thứ tư tôi cố gắng xây dựng plugin này, nhưng nhờ đặc tả stateless MCP mới, cuối cùng tôi đã có một phiên bản cảm thấy đủ tốt để phát hành.
Nó cung cấp ba công cụ: list_databases, get_database_schema(database_name) và execute_sql(database_name, sql). Chúng thực hiện chính xác những gì bạn mong đợi—mặc dù execute_sql hiện tại chỉ ở chế độ đọc (read-only).
Kết nối chúng vào một tác nhân, hoặc một công cụ trò chuyện như ChatGPT hoặc Claude, và chúng sẽ có khả năng chạy các truy vấn SQL trên instance Datasette được lưu trữ của bạn.
Cho đến nay, tôi đang chạy nó trên bản sao Datasette của blog mình tại datasette.simonwillison.net/-/mcp. Phải mất một chút mày mò để tìm cách gắn nó vào ChatGPT và Claude, nhưng cuối cùng tôi cũng làm được. Đây là một bài TIL mới cho thấy chính xác cách thực hiện điều đó.
Đây là một phiên Claude được chia sẻ nơi tôi đã hỏi nó:
liệt kê các bảng trong simonwillison.net
Và sau đó:
gần đây Simon đã nói gì về MCP?
Nó đã chạy 7 truy vấn SQL riêng biệt để tìm ra câu trả lời.
llm-mcp-client
Công cụ LLM của tôi đã quá hạn để có một tích hợp MCP chính thức. Plugin alpha llm-mcp-client mới là nỗ lực của tôi cho chính xác điều đó:
Đây là kết quả đầu ra (bao gồm cả dấu vết suy luận, tôi đang sử dụng LLM 0.32rc2):
Xem xét số lượng ghi chú
Tôi thấy câu hỏi “đếm các ghi chú” có lẽ đang yêu cầu tôi tổng hợp các ghi chú trên blog. Nó cũng có thể có nghĩa là các ghi chú đã xuất bản hoặc bản nháp, vì vậy có một chút mơ hồ ở đó. Tôi sẽ cần tìm ra tổng số ghi chú, có khả năng bằng cách truy vấn số lượng cho cả ghi chú đã xuất bản và bản nháp để có câu trả lời rõ ràng. Hãy thực hiện việc đếm đó!
Có 151 ghi chú.
Và kết quả đầu ra của nhật ký llm cho lời nhắc đó.
Khi mọi thứ đã hoàn thiện, tôi đang cân nhắc đưa nó trực tiếp vào lõi LLM. Tôi cũng rất hào hứng khi thử nghiệm MCP trong Datasette Agent và llm-coding-agent.
Bài viết được AI dịch và tổng hợp tự động từ Simon Willison Blog. Liên kết bài gốc ở phía trên. Dữ liệu đồng bộ qua API công khai được ghi nguồn tại AI HOT (canonical) ↗. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.