Chuyển đến nội dung chính
Model Context Protocol (MCP) cho phép các agent gọi các tool được host bởi các server bên ngoài. Điều đó mạnh mẽ và nguy hiểm ngang nhau: mỗi MCP server mà một agent kết nối tới là một tập mới các tool, credential, và phạm vi tiếp cận mạng mà chưa ai xem xét. MCP gateway của Firewall đặt một điểm nghẽn được audit duy nhất phía trước tất cả chúng. Bạn đăng ký mỗi MCP server một lần; gateway phơi bày các tool của chúng tới các agent của bạn dưới một kết nối duy nhất và chạy mọi tools/call qua engine firewall trước khi nó đến được server thật.

1. Kiểm soát MCP mang lại cho bạn điều gì

  • Một gateway, mọi server. Agent của bạn kết nối tới một endpoint. Gateway tổng hợp các tool của mọi server đã đăng ký có thể tiếp cận được, được đặt namespace <server>.<tool>, nên github.create_issueshell.exec hiển thị cạnh nhau dưới một kết nối MCP duy nhất.
  • Chính sách trên mọi cuộc gọi. Mỗi tools/call được chính sách của bạn đánh giá trước. Một cuộc gọi bị block quay lại với mô hình như một lỗi tool (firewall deny: …), không phải một thất bại truyền tải, nên agent có thể phản ứng thay vì crash. sanitize viết lại các argument trước khi chuyển tiếp; pending_approval giữ cuộc gọi lại.
  • Được bảo vệ SSRF. Các endpoint từ xa được xác thực đối với chính sách SSRF của gateway — các dải intranet và các địa chỉ cloud-metadata bị block, và IP dial đã phân giải được kiểm tra lại để đánh bại DNS rebinding, trên mọi hop bao gồm cả redirect.
  • Credential được mã hóa. Secret xác thực server được mã hóa lúc nghỉ và masked khi đọc. Gateway tiêm chúng vào lúc dispatch; chúng không bao giờ đến được mô hình hoặc client.

2. Hai loại server

LoạiendpointHành vi
BYO (bring-your-own)Một URL streamable-HTTPGateway proxy tools/call tới MCP server từ xa của bạn.
BundledrỗngMCP server in-process của OrcaRouter. Được đăng ký để nó hiển thị và có thể kiểm soát; không thể probe riêng.

3. Đăng ký một server

Một bản ghi server mang theo:
TrườngGhi chú
nameBusiness key, duy nhất theo workspace, ≤ 128 ký tự. Không có . — nó là dấu phân tách namespace <server>.<tool>.
endpointURL của MCP server (≤ 512 ký tự). Rỗng cho server đóng gói sẵn.
auth_modenone (mặc định), bearer, oauth, hoặc basic.
auth_jsonCredential đặc thù theo mode (xem bên dưới). Bắt buộc mỗi khi auth_mode không phải none.
enabledMặc định là true. Một server bị tắt được bỏ qua hoàn toàn khỏi gateway.
statusKhả năng tiếp cận — ok (mặc định), degraded, hoặc down. Được đặt bởi probing.
Hình dạng credential theo mode:
// bearer
{ "token": "ghp_…" }
// oauth
{ "client_id": "…", "client_secret": "…", "token_url": "…" }
// basic
{ "username": "…", "password": "…" }
// none
""
Một request đăng ký trông như thế này:
curl https://api.orcarouter.ai/api/workspace/firewall/mcp_servers \
  -H "Authorization: Bearer sk-orca-..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "github",
    "endpoint": "https://api.githubcopilot.com/mcp",
    "auth_mode": "bearer",
    "auth_json": "{\"token\":\"ghp_x\"}",
    "enabled": true
  }'
Một tên trùng lặp trong cùng một workspace trả về HTTP 409 (cùng một tên trong một workspace khác là được).
Secrets không bao giờ được lưu dưới dạng plaintext. auth_json được mã hóa lúc nghỉ với một workspace secrets key. Nếu key đó không được cấu hình, việc ghi bị từ chối thay vì persist một credential không mã hóa. Khi đọc, secrets và endpoint được masked; echo mask trở lại trên một update để giữ giá trị đã lưu. Chuyển đổi giữa hai auth mode có credential yêu cầu auth_json mới (ciphertext bị ràng buộc hình dạng với mode của nó).

4. Probe — khám phá các tool của nó

Trước khi bạn có thể viết các quy tắc đối với các tool của một server, bạn cần biết tên của chúng. Probe server:
curl -X POST \
  https://api.orcarouter.ai/api/workspace/firewall/mcp_servers/42/probe \
  -H "Authorization: Bearer sk-orca-..."
Gateway chạy một MCP initialize + tools/list đối với endpoint (dùng các credential đã giải mã, giới hạn ở 10s), ghi lại status khả năng tiếp cận và một dấu thời gian, và trả về các tool được quảng bá cùng với các input schema của chúng:
{
  "status": "ok",
  "last_checked_at": 1700000000,
  "tools": [
    { "name": "create_issue", "description": "…", "input_schema": { } }
  ]
}
Giờ bạn có thể soạn các quy tắc như tool_name_glob: github.* khi biết chính xác github.create_issue chấp nhận cái gì. Server đóng gói sẵn (endpoint rỗng) không thể probe và trả về một 400.

5. Vòng đời & thực thi

  • Bật vs. tắt. Một server bị tắt được loại khỏi registry runtime — các tool của nó biến mất khỏi gateway và các credential của nó không bao giờ được giải mã. Đó là công tắc off.
  • Khả năng tiếp cận. status (ok / degraded / down) phản ánh lần probe gần nhất; một server không thể tiếp cận được bỏ qua khi gateway xây dựng tập tool của nó.
  • Verdict theo từng cuộc gọi. Khi dispatch, engine trả về một verdict cho cuộc gọi <server>.<tool> cụ thể với các argument của nó:
    • allow / audit → chuyển tiếp (audit ghi log, vẫn cho phép).
    • sanitize → chuyển tiếp với các argument đã viết lại.
    • deny / pending_approval / bất cứ thứ gì chưa biết → bị block như một lỗi tool. (Qua gateway hợp nhất, một cuộc gọi bị giữ lại hiện ra như một lỗi vĩnh viễn thay vì luồn approval id — hãy dùng evaluate hook khi bạn cần cái bắt tay phê duyệt.)
  • Xóa là một soft delete; slot tên được giải phóng ngay lập tức để bạn có thể đăng ký lại dưới cùng một tên.
Mọi thay đổi đều vô hiệu hóa cache tool theo từng workspace của gateway ngay lập tức, nên một server vừa đăng ký, bị tắt, hoặc được probe lại có hiệu lực ở lần kết nối kế tiếp thay vì sau một cache TTL.

6. Kết nối một client

Trỏ bất kỳ MCP client nào vào endpoint gateway với một token có phạm vi firewall-gateway:
https://api.orcarouter.ai/api/v1/firewall/mcp
Gateway nói streamable HTTP (POST message, GET cho SSE stream, DELETE để kết thúc một session) và tự nhận diện là orcarouter-firewall-gateway. Nó quảng bá các tool của mọi server đã bật, có thể tiếp cận được dưới namespace <server>.<tool>, phơi bày lại input schema của mỗi tool nguyên văn. Một token không có phạm vi firewall-gateway nhận 403 — hãy phát hành một gateway token chuyên dụng cho việc này.

Tham chiếu API

Console (theo phạm vi workspace, RBAC)

Method & pathVai tròMục đích
GET /api/workspace/firewall/mcp_serversMemberLiệt kê các server (secrets masked, endpoint redacted).
GET /api/workspace/firewall/mcp_servers/:idMemberMột server đơn lẻ, masked.
POST /api/workspace/firewall/mcp_serversDeveloper+Đăng ký một server (409 khi tên trùng lặp).
PUT /api/workspace/firewall/mcp_serversDeveloper+Cập nhật một server (id trong body).
DELETE /api/workspace/firewall/mcp_servers/:idDeveloper+Soft-delete; giải phóng tên.
POST /api/workspace/firewall/mcp_servers/:id/probeDeveloper+Probe khả năng tiếp cận + khám phá các tool.

Gateway (token có phạm vi firewall-gateway)

Method & pathMục đích
ANY /api/v1/firewall/mcpEndpoint dispatch MCP gateway hợp nhất.
GET /api/v1/firewall/mcp_serversRegistry runtime (auth đã giải mã, chỉ các server đã bật) cho một SDK proxy.
POST /api/v1/firewall/evaluateĐánh giá một tools/call đơn lẻ trước khi tự bạn dispatch nó.

FAQ

Để có một nơi duy nhất thấy mọi cuộc gọi tool. Không có một gateway, mỗi agent kết nối tới mỗi MCP server trực tiếp — không có chính sách chung, không có dấu vết audit, không có bảo vệ SSRF, và credential rải rác khắp các config agent. Gateway tập trung hóa tất cả những thứ đó: một kết nối, một chính sách, một log được audit, secrets được mã hóa tiêm vào lúc dispatch.
Mô hình nhận nó như một lỗi tool (firewall deny: <reason>), cùng hình dạng nó sẽ nhận từ bất kỳ tool nào đang thất bại. Điều đó cho phép agent thích nghi — thử một cách tiếp cận khác, hỏi người dùng, hoặc dừng lại — thay vì coi nó như một crash truyền tải.
Có — đó là mục đích của namespace <server>.<tool>. Một quy tắc với tool_name_glob: trusted.* có thể allow trong khi community.* bị audit hoặc pending_approval. Kết hợp nó với một skill-name glob để thu hẹp phạm vi còn tinh hơn nữa.
Có. Các URL endpoint và các IP dial đã phân giải của chúng được xác thực đối với chính sách SSRF khi đăng ký và trên mọi hop dispatch — các dải intranet và địa chỉ cloud-metadata bị từ chối, và IP đã phân giải được kiểm tra lại để đánh bại DNS rebinding. Ghép nó với một quy tắc egress để kiểm soát nơi các tool có thể vươn tới.

Xem thêm

Muốn đi sâu hơn về bảo mật agent? Các hướng dẫn Bảo mật agent (Zero Trust) đặt tính năng này vào một quy trình zero-trust.

Bảo mật MCP server (Zero Trust)

Kết nối, xác thực, và quản trị MCP server dưới một tư thế zero-trust.

Checklist tin tưởng MCP

Những gì cần xác minh trước khi bạn tin tưởng một MCP server của bên thứ ba.