AI Automation

Kết nối n8n với MCP server bằng MCP Client Tool

Bạn đã có một hệ thống n8n chạy ổn trên VPS, nhưng giờ bạn muốn workflow của mình không chỉ dừng lại ở gọi API HTTP. Bạn muốn nó có thể chạy một script Python trực tiếp trên server, đọc file cấu hình, hoặc gọi một công cụ external mà không cần phải tự xây dựng node custom. Giải pháp là MCP Client Tool trong n8n. Bài này sẽ hướng dẫn bạn cách kết nối n8n (đã cài trên VPS Ubuntu 24.04) với một MCP server sẵn có, dùng MCP Client Tool để gọi tool và nhận kết quả.

Yêu cầu trước khi bắt đầu

  • Một VPS chạy Ubuntu 24.04 đã cài đặt n8n bằng Docker Compose (theo hướng dẫn tại cài n8n trên VPS Ubuntu 24.04 bằng Docker Compose).
  • Quyền sudo (root) trên VPS.
  • Một MCP server đã được khởi chạy (có thể là server mẫu hoặc bạn tự viết). Trong bài này, mình dùng MCP server mẫu chạy HTTP trên port 8080.
  • Kiến thức cơ bản về n8n workflow, MCP protocol (Model Context Protocol).

Vì sao cần MCP Client Tool trong n8n?

MCP (Model Context Protocol) là một giao thức cho phép các ứng dụng (như n8n) gọi các công cụ external (tool) thông qua một interface chuẩn. Thay vì phải viết node HTTP Request phức tạp để parse JSON-RPC, MCP Client Tool của n8n làm việc đó cho bạn. Nó biến mỗi MCP server thành một nguồn tool mà workflow của bạn có thể gọi trực tiếp. Kết quả là bạn có thể mở rộng khả năng automation sang các tác vụ hệ thống, xử lý file, gọi script, mà không cần custom node.

Trong bối cảnh 2026, MCP đang dần trở thành chuẩn cho việc kết nối các agent và tool. Nếu bạn đã chạy n8n trên một VPS n8n riêng, việc thêm MCP Client Tool vào workflow là cách nâng cấp mạnh mẽ nhất mà không cần can thiệp hạ tầng.

Bước 1 - Xác định MCP server đang chạy

Trước khi kết nối, bạn cần biết endpoint và giao thức của MCP server. MCP server có thể chạy dạng HTTP (JSON-RPC) hoặc WebSocket. Ở đây mình dùng server HTTP chạy trên localhost, port 8080.

# Kiểm tra MCP server có đang chạy không
curl -X POST http://localhost:8080/mcp -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"list_tools","id":1}' | jq .

Lệnh này gửi một request JSON-RPC để yêu cầu danh sách tool. Nếu server hoạt động, bạn sẽ thấy response dạng:

{
  "jsonrpc": "2.0",
  "result": {
    "tools": [
      { "name": "echo", "description": "Trả về dữ liệu gửi vào", "inputSchema": {"type":"object","properties":{"message":{"type":"string"}}} },
      { "name": "read_file", "description": "Đọc nội dung file", "inputSchema": {"type":"object","properties":{"path":{"type":"string"}}} }
    ]
  },
  "id": 1
}

Nếu lệnh trên không chạy, kiểm tra service của MCP server bằng systemctl status mcp-server hoặc docker ps | grep mcp.

Bước 2 - Cấu hình MCP Client Tool trong n8n

Vào n8n, tạo một workflow mới. Thêm node MCP Client. Trong phần Connection, chọn HTTP. Nhập URL http://host.docker.internal:8080/mcp (nếu n8n chạy trong container) hoặc http://localhost:8080/mcp (nếu chạy native).

Giải thích: Khi n8n chạy trong Docker container, host.docker.internal là cách container n8n kết nối tới host (nơi MCP server đang chạy). Nếu MCP server cũng chạy trong Docker cùng network, bạn có thể dùng tên service.

Sau khi cấu hình xong, nhấn Test. Node sẽ gọi list_tools và hiển thị danh sách tool. Nếu thành công, bạn chuyển sang bước tiếp.

Bước 3 - Gọi tool từ workflow

Thêm một node MCP Client khác, hoặc chỉnh node hiện tại. Ở phần Operation, chọn Call Tool. Trong Tool Name, nhập tên tool bạn muốn gọi, ví dụ echo. Ở Arguments, nhập JSON, ví dụ {"message":"Hello from n8n"}.

Kết nối node này với node trigger (hoặc node Manual). Workflow sẽ trông như sau:

Manual → MCP Client (call_tool: echo) → NoOp

Execute thử. Kết quả trả về sẽ là {"result":"Hello from n8n"}.

Ví dụ thực tế: Đọc file cấu hình từ MCP server

Giả sử MCP server có tool read_file. Bạn có thể tạo workflow:

Manual → MCP Client (call_tool: read_file, arguments: {"path":"/etc/hostname"}) → Set → Slack

Kết quả là n8n sẽ đọc file /etc/hostname từ server và gửi lên Slack. Điều này rất hữu ích khi bạn cần kiểm tra trạng thái hệ thống định kỳ mà không cần SSH.

Cách verify: Node trả về {"result": "my-vps-hostname"}. Nếu lỗi (file không tồn tại), MCP server sẽ trả về error JSON-RPC, n8n sẽ báo lỗi ở node đó.

Bước 4 - Tích hợp với các node khác

Sức mạnh của MCP Client Tool là bạn có thể kết hợp với bất kỳ node nào. Ví dụ:

  • HTTP Request → MCP Client: Nhận webhook, parse dữ liệu, gọi MCP tool xử lý, trả response.
  • Schedule → MCP Client → MongoDB: Lên lịch chạy script dọn dẹp log thông qua MCP server, ghi kết quả vào database.
  • MCP Client → Function: Lấy kết quả từ MCP tool, xử lý trong node Function, gửi tiếp.

Mở rộng: Bạn có thể viết MCP server riêng bằng Python (dùng thư viện mcp), đăng ký các tool chuyên biệt (ví dụ: tool restart service, backup database, kiểm tra disk), sau đó n8n sẽ gọi các tool này như node native.

Để workflow chạy ổn định trên môi trường production, hãy chắc chắn bạn đã cấu hình bảo mật n8n đúng cách. Nếu workflow cần độ trễ thấp, cân nhắc bật queue mode với Redis.

Xử lý lỗi thường gặp

Lỗi "Connection refused" khi kết nối MCP server

Kiểm tra MCP server có chạy đúng port không. Dùng lệnh ss -tlnp | grep :8080. Nếu không thấy, khởi động lại server. Nếu n8n trong Docker, nhớ dùng host.docker.internal thay vì localhost.

Lỗi "Tool not found"

MCP server không có tool bạn yêu cầu. Gọi lại list_tools từ node MCP Client để xem danh sách tool hiện có. Kiểm tra tên tool viết đúng chính tả (case-sensitive).

Lỗi "Invalid arguments"

Kiểm tra schema của tool trong response list_tools. Đảm bảo bạn gửi đúng type (string, number, object). Ví dụ: tool read_file yêu cầu path là string, nếu bạn gửi số sẽ báo lỗi.

Câu hỏi thường gặp

MCP Client Tool có yêu cầu gì từ phía n8n không?

Không. Node MCP Client có sẵn trong n8n từ bản 1.40+. Bạn chỉ cần cấu hình URL và gọi tool. Không cần cài thêm package.

Tôi có thể kết nối nhiều MCP server cùng lúc không?

Có. Mỗi node MCP Client kết nối đến một server. Bạn có thể có nhiều node trong workflow, mỗi node trỏ đến server khác nhau.

MCP server có bắt buộc chạy HTTP không?

Không. MCP hỗ trợ cả HTTP và WebSocket. Node n8n hiện tại hỗ trợ HTTP. Nếu server chạy WebSocket, bạn cần chạy một cổng chuyển tiếp (ví dụ: dùng websocat).

Khi workflow chạy 1000 job/ngày, MCP server có bị quá tải không?

Tùy vào năng lực server. Nếu MCP server chạy script nặng (xử lý video, render PDF), bạn nên chạy trên VPS có tài nguyên đủ mạnh, ít nhất VPS 4GB RAM. Có thể chạy MCP server trong Docker với giới hạn resource để tránh ảnh hưởng n8n.

Tôi có thể dùng MCP Client Tool với LLM Agent trong n8n không?

Có. Node MCP Client có thể là một tool trong Agent workflow. Bạn cấu hình tool name và arguments, Agent sẽ tự động gọi khi cần. Xem thêm dùng AI Agent trong n8n.

Bài viết liên quan

Lưu ý: Bài viết mang tính tham khảo, tổng hợp kiến thức chung. Mỗi hệ thống, hạ tầng và nhu cầu có đặc thù riêng, nên kiểm thử trong môi trường an toàn và tham vấn kỹ sư trước khi triển khai thực tế.