Khi Anthropic công bố spec Model Context Protocol vào cuối 2024, tôi đọc qua trong một buổi chiều và nghĩ: cái này hoặc sẽ bị lờ đi, hoặc sẽ trở thành TCP/IP của AI agents. Mười tám tháng sau, 97 triệu lượt cài đã trả lời câu hỏi đó.

MCP không thắng vì Anthropic marketing giỏi. Nó thắng vì nó giải quyết một vấn đề thực tế, nhức nhối mà mọi team xây dựng hệ thống AI đều đang tự mình vật lộn.

Vấn Đề Trước Khi Có MCP

Nếu bạn đã từng build AI assistant hoặc agent trước khi có MCP, bạn biết cái vòng lặp quen thuộc đó. Mỗi tích hợp tool là một bản custom riêng. Bạn viết function riêng để kết nối LLM với database. Một function riêng cho calendar. Một cái khác cho file system. Một cái khác cho CI/CD pipeline.

Mỗi tích hợp này có schema riêng, error handling riêng, câu chuyện authentication riêng. Khi bạn chuyển LLM provider — hoặc khi provider ra model mới — đôi khi bạn phải viết lại tất cả. Lớp tích hợp thì fragile, proprietary, và coupled chặt với model bạn đang dùng.

Vấn đề sâu hơn: không có chuẩn nào cho cách một AI model nên discover và invoke external capabilities. Mỗi framework tự nghĩ ra câu trả lời. LangChain có tools. AutoGPT có commands. OpenAI có function calling. Những thứ này không compatible với nhau. Tool viết cho ecosystem này không dùng được ở ecosystem kia.

MCP Thực Sự Là Gì

MCP là một JSON-RPC-based protocol chuẩn hóa cách AI model giao tiếp với các hệ thống bên ngoài. Về cốt lõi, nó định nghĩa ba thứ:

Tools — callable functions mà LLM có thể invoke. Một tool có tên, JSON Schema mô tả inputs, và một handler thực thi và trả về kết quả.

Resources — read-only data sources mà LLM có thể truy cập. Resource được xác định bằng URI và trả về structured content.

Prompts — reusable prompt templates mà servers có thể expose, cho phép LLM request các pre-built context snippets.

Đây là một MCP server tối giản bằng TypeScript expose một tool:

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";

const server = new Server(
  { name: "my-tools", version: "1.0.0" },
  { capabilities: { tools: {} } }
);

server.setRequestHandler("tools/list", async () => ({
  tools: [{
    name: "get_deploy_status",
    description: "Kiểm tra trạng thái deployment cho một service",
    inputSchema: {
      type: "object",
      properties: {
        service: { type: "string", description: "Tên service" }
      },
      required: ["service"]
    }
  }]
}));

server.setRequestHandler("tools/call", async (request) => {
  const { name, arguments: args } = request.params;
  if (name === "get_deploy_status") {
    const status = await checkDeployment(args.service);
    return { content: [{ type: "text", text: JSON.stringify(status) }] };
  }
});

const transport = new StdioServerTransport();
await server.connect(transport);

Server đó giờ hoạt động với bất kỳ MCP-compatible client nào — Claude, GPT-4, Gemini, hoặc bất kỳ open-source model nào có hỗ trợ MCP. Bạn viết tích hợp một lần, dùng mãi.

Tại Sao Con Số 97 Triệu Quan Trọng

Bản thân con số gần như không phải điểm cốt lõi. Điều quan trọng là tipping point nó báo hiệu.

Network effects đã vào guồng. Ở mức 97M lượt cài, hiện có hàng ngàn pre-built MCP servers cho mọi thứ từ GitHub đến Postgres, Stripe đến Kubernetes. Khi bắt đầu dự án mới, bước đầu tiên của bạn không phải là “viết custom integration” — mà là “kiểm tra xem MCP server đã tồn tại chưa.” Trong hầu hết các trường hợp, nó đã có rồi.

Linux Foundation adoption thay đổi câu chuyện governance. Khi một protocol chuyển sang open governance, nó báo hiệu tính bền vững. Các enterprise architect đang chờ xem MCP có sống sót sau sự quan tâm của Anthropic không — giờ đã có câu trả lời. Đây không phải vendor feature — đây là shared infrastructure.

Mọi AI provider lớn đều ship MCP tooling. Có nghĩa là bạn không bị lock-in. Tool bạn viết hôm nay cho Claude sẽ hoạt động ngày mai với GPT-5, Llama 5, hay bất cứ thứ gì tiếp theo. Đó là một investment calculus hoàn toàn khác so với 18 tháng trước.

Những Gì Tôi Thay Đổi Trong Cách Build

Chúng tôi đã chạy MCP trong production được khoảng tám tháng trên ba dự án. Đây là những gì đã thay đổi trong thực tế:

Tool-first design

Chúng tôi không còn nghĩ “làm sao kết nối LLM với X?” Chúng tôi nghĩ “agent này cần những tools gì?” Rồi định nghĩa tool contracts trước khi viết bất kỳ dòng AI logic nào. Tool schema trở thành specification — nó buộc bạn phải suy nghĩ rõ ràng về inputs, outputs, và failure modes trước khi LLM xuất hiện.

Shared tool libraries

Team chúng tôi hiện maintain một private MCP server expose internal tools: deployment pipeline, incident management system, cost dashboards. Bất kỳ agent nào chúng tôi build đều có thể connect vào server này. Chúng tôi viết những tích hợp này một lần và chúng đã được tái sử dụng cho sáu agents khác nhau.

Composition thay vì monolith

Vì MCP cho phép agent connect vào nhiều servers cùng lúc, chúng tôi đã bỏ cách build những monolithic agents lớn cố làm tất cả mọi thứ. Thay vào đó, chúng tôi compose các agents nhỏ hơn, tập trung, chỉ kéo vào những tools cần thiết. Điều này giúp testing sạch hơn nhiều — bạn có thể unit test tool servers độc lập với agents dùng chúng.

Treat tools như APIs

Tool versioning, backward compatibility, và documentation giờ quan trọng. MCP tool đổi schema sẽ break agents. Chúng tôi đã áp dụng những practices tương tự cho tool APIs như cho REST APIs: semver, changelogs, deprecation notices.

Những Điểm Chưa Hoàn Thiện

MCP thực sự tốt, nhưng không phải không có vấn đề.

Context window pressure. Khi agent có quyền truy cập nhiều tools, danh sách tool tự nó đã tiêu thụ tokens. Tôi đã thấy tool manifests ăn hết 15-20% context khả dụng trong những setup phức tạp. Work đang diễn ra trên MCP spec về tool filtering và dynamic discovery sẽ giúp ích ở đây.

Authentication chưa được specify rõ. Protocol hiện tại để auth phần lớn cho từng server implementation tự xử. Điều này có nghĩa OAuth flows, API key handling, và credential rotation đều cần được giải quyết riêng per-server. Đang có work active trên một standard auth layer, nhưng chưa có.

Streaming còn hạn chế. MCP streaming support hiện tại khá cơ bản. Với những long-running tools tạo ra incremental output — code execution, web scraping, data processing — bạn thường phải wrap results theo cách mà mất đi lợi ích real-time UX.

Error semantics cần cải thiện. Sự phân biệt giữa “tool failed” và “tool returned bad data” chưa được chuẩn hóa tốt. Chúng tôi đã có những debugging sessions mà agent âm thầm nhận error responses và xử lý chúng như success vì response về mặt kỹ thuật là valid JSON.

Hướng Đi Tiếp Theo

Linux Foundation governance và cột mốc 97M cùng chỉ về một tương lai: MCP trở thành invisible infrastructure, như HTTP. Bạn sẽ không nghĩ đến nó — bạn chỉ dùng nó.

Câu hỏi thú vị hơn là những gì được build trên đó. Với một universal tool layer đã được chuẩn hóa, chiến trường tiếp theo là orchestration — cách agents discover, select, và compose tools một cách dynamic. Đó là vấn đề mà các frameworks như AWS’s Strands Labs và NVIDIA agent tooling đang cố giải quyết bây giờ.

Với các teams đang build AI systems hôm nay, recommendation của tôi đơn giản: adopt MCP cho tất cả new tool integrations, migrate những cái cũ khi có bandwidth, và treat tool servers như first-class production services. Khoản đầu tư sẽ hoàn vốn nhanh nhờ tính portability và reuse.

Protocol đã thắng. Bây giờ công việc thú vị mới bắt đầu.

Xuất nội dung

Bình luận