Kết Nối AI Agents Với Microservices Qua MCP Không Cần SDK Tùy Biến

07 tháng 4, 2026·6 phút đọc

Bài viết giới thiệu cách sử dụng Model Context Protocol (MCP) để kết nối các AI agents với nền tảng microservices trong hệ thống phân tán mà không cần viết thủ công HTTP client. MCP đóng vai trò như một giao thức chung giúp các dịch vụ trực tiếp khai thác được các công cụ kinh doanh từ nhiều microservices khác nhau với tính mở rộng và bảo trì cao.

Kết Nối AI Agents Với Microservices Qua MCP Không Cần SDK Tùy Biến

Kết Nối AI Agents Với Microservices Qua MCP Không Cần SDK Tùy Biến

Bài viết này giới thiệu giải pháp sử dụng Model Context Protocol (MCP) trong việc kết nối các AI agents với microservices trong kiến trúc saga phân tán. Thay vì phải phát triển các HTTP client riêng biệt cho từng dịch vụ, MCP giúp đơn giản hóa việc gọi các business logic giữa các dịch vụ, đồng thời giảm sự ràng buộc chặt chẽ trong hệ thống.

Vấn đề từ @Tool trong Môi trường Microservices

Trong ứng dụng orchestration saga của tác giả, hệ thống bao gồm năm microservices:

  • order-service (port 3000), quản lý đơn hàng với MongoDB
  • product-validation-service (port 8090), xác thực danh mục sản phẩm với PostgreSQL
  • payment-service (port 8091), xử lý thanh toán và đánh giá gian lận với PostgreSQL
  • inventory-service (port 8092), quản lý tồn kho
  • orchestrator (port 8050), phối hợp thực thi saga qua Kafka

Ngoài ra còn có dịch vụ ai-saga-agent (port 8099) chứa các AI agent cần truy vấn dữ liệu từ tất cả các dịch vụ trên.

Sử dụng annotation @Tool trong cùng một JVM rất tiện lợi với ứng dụng monolith. Tuy nhiên khi chuyển sang microservices phân tán, mỗi khi agent cần gọi business logic của dịch vụ khác, phải tự viết các HTTP client, DTO và xử lý logic lỗi, retry riêng biệt. Khi dịch vụ thay đổi hay thêm tính năng mới, agent cũng phải cập nhật theo, dẫn đến sự phụ thuộc chặt chẽ, khó mở rộng.

MCP – Giao Thức Chuẩn Cho Tất Cả

MCP (Model Context Protocol) hoạt động như "USB" cho AI agent, bằng cách chuẩn hóa giao tiếp qua giao thức JSON-RPC trên HTTP với SSE (Server-Sent Events). Mỗi microservice cung cấp một server MCP để expose các "tools" - các điểm gọi đến logic nghiệp vụ.

Sự khác biệt trong code khi dùng MCP rất rõ ràng:
Trước đây: Agent phải tự xây dựng từng HTTP client riêng cho mỗi dịch vụ (InventoryHttpClient, PaymentHttpClient, OrderHttpClient...).
Sau khi dùng MCP: Agent chỉ cần kết nối đến endpoint MCP của dịch vụ (ví dụ http://localhost:8092/sse) và tự động khám phá các công cụ như getStockByProduct, getLowStockAlert, checkReservationExists. Mỗi khi dịch vụ có thêm công cụ mới, chỉ cần cập nhật MCP server mà không cần chỉnh sửa agent.

Cách Xây Dựng Một Microservice Thành MCP Server

Tác giả mô tả minh họa đoạn mã trong payment-service. Các dịch vụ đã có business logic như PaymentService hay FraudValidationService được expose thành các MCP tools bằng cách:

  • Thêm dependency MCP SDK trong Gradle:
implementation 'io.modelcontextprotocol.sdk:mcp:0.9.0'
  • Cấu hình transport SSE cho server MCP:
@Bean
public HttpServletSseServerTransportProvider mcpTransport() { ... }

@Bean
public ServletRegistrationBean mcpServlet(HttpServletSseServerTransportProvider transport) { ... }
  • Đăng ký các công cụ với thông tin tên, mô tả, JSON schema của tham số đầu vào và function xử lý logic:
@Bean
public McpSyncServer mcpServer(HttpServletSseServerTransportProvider transport,
                               PaymentService paymentService,
                               FraudValidationService fraudService) {
    return McpServer.sync(transport)
        .serverInfo("payment-mcp", "1.0.0")
        .capabilities(ServerCapabilities.builder().tools(true).build())
        .tools(
            getPaymentStatus(paymentService),
            getRefundRate(paymentService),
            getFraudRiskScore(fraudService)
        )
        .build();
}

private SyncToolSpecification getPaymentStatus(PaymentService paymentService) {
    return tool(
        "getPaymentStatus",
        "Returns the current payment status for a given transaction.",
        "{...JSON schema...}",
        args -> {
            String txId = (String) args.get("transactionId");
            return paymentService.findByTransactionId(txId)
                .map(p -> "status=" + p.getStatus() + " | totalAmount=" + p.getTotalAmount())
                .orElse("No payment found for transactionId=" + txId);
        }
    );
}

Điều thú vị là code nghiệp vụ sẵn có được tái sử dụng nguyên trạng, chỉ bọc lại để LLM hiểu cách gọi và tương tác.

Dịch Vụ Và Các Công Cụ MCP Được Expose

Các dịch vụ khác cũng được triển khai tương tự với các tools đặc thù:

Dịch vụTools MCP
order-servicegetOrderById, listRecentEvents, getLastEventByOrder
payment-servicegetPaymentStatus, getRefundRate, getFraudRiskScore
inventory-servicegetStockByProduct, getLowStockAlert, checkReservationExists
product-validation-servicecheckProductExists, checkValidationExists, listCatalog

Mỗi dịch vụ vẫn giữ quyền quản lý dữ liệu riêng, MCP chỉ đóng vai trò là lớp giao tiếp mỏng giữa agent và dịch vụ.

Kết Nối AI Agent Với MCP Client

Trên dịch vụ AI agent, tác giả tạo một McpToolProvider với danh sách các MCP client tương ứng các service:

@Bean
public McpToolProvider mcpToolProvider() {
    return McpToolProvider.builder()
        .mcpClients(List.of(
            buildClient("http://localhost:3000/sse"),
            buildClient("http://localhost:8091/sse"),
            buildClient("http://localhost:8092/sse"),
            buildClient("http://localhost:8090/sse")
        ))
        .build();
}

private McpClient buildClient(String sseUrl) { ... }

Khi xây dựng agent, chỉ cần truyền mcpToolProvider làm nguồn công cụ, agent sẽ tự động truy cập được hơn 12 công cụ từ 4 dịch vụ mà không phải viết HTTP client thủ công.

Tổng Quan về Kiến Trúc Saga

Saga là mẫu kiến trúc xử lý giao dịch phân tán mà không cần hai-phase commit. Các bước là chuỗi các transaction cục bộ, nếu có lỗi sẽ chạy bù để hoàn tác bước trước.

Quy trình trong hệ thống:
Order → Orchestrator → Product Validation → Payment → Inventory → Thành công
Nếu thất bại, orchestrator khởi chạy rollback ngược lại các bước trước.

Giao tiếp giữa các thành phần qua Kafka với bảng trạng thái rõ ràng, giúp việc theo dõi và audit diễn ra dễ dàng, đảm bảo tính xác định của luồng thao tác.

Khi Nào Nên Dùng @Tool và MCP Tool

  • Dùng @Tool khi logic nằm trong cùng JVM với agent, không có overhead mạng, phù hợp với chức năng utility nhỏ gọn.

  • Dùng MCP khi logic nằm ở dịch vụ khác, cần giao tiếp qua mạng, yêu cầu tính mở rộng, khả năng kết nối đa dạng ngôn ngữ, cập nhật công cụ không cần sửa client.

Trong thực tế, tác giả gần như dùng MCP cho mọi tương tác giữa agent và microservices, chỉ giữ @Tool cho những hàm tiện ích.

Kiểm Tra MCP Thủ Công

MCP cũng có thể dùng curl để mở session SSE, gọi danh sách tools hoặc gọi trực tiếp công cụ để test, rất hữu dụng cho việc debug lúc AI agent có hành vi bất ngờ.

Ví dụ:

curl http://localhost:8092/sse  # mở SSE session

curl -X POST "http://localhost:8092/mcp/message?sessionId=YOUR_SESSION" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'  # liệt kê tools

curl -X POST "http://localhost:8092/mcp/message?sessionId=YOUR_SESSION" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"getStockByProduct","arguments":{"productCode":"COMIC_BOOKS"}}}'  # gọi tool

Kết Luận Và Hướng Đi Tiếp Theo

Với MCP được triển khai, hạ tầng microservices đã sẵn sàng để AI agents tận dụng triệt để khả năng nghiệp vụ từ toàn bộ hệ thống phân tán. Bài tiếp theo trong chuỗi sẽ trình bày chi tiết ba agent chính: OperationsAgent tự động chẩn đoán lỗi saga, SagaComposerAgent tối ưu kế hoạch thực thi, và DataAnalystAgent trả lời các truy vấn ngôn ngữ tự nhiên về trạng thái saga.

Mã nguồn dự án được mở trên GitHub: https://github.com/pedrop3/sagaorchestration


Bài viết nằm trong chuỗi 3 phần về tích hợp AI trong hệ thống saga phân tán:

  1. Part 1 – Tại sao chọn LangChain4j thay vì Spring AI
  2. Part 2 – Kết nối AI Agents với Microservices qua MCP (bài viết này)
  3. Part 3 – Các Agents chẩn đoán, lập kế hoạch và truy vấn saga
Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗