tools/call przez silnik firewalla, zanim dotrze
ono do prawdziwego serwera.
1. Co daje ci zarządzanie MCP
- Jedna brama, każdy serwer. Twój agent łączy się z jednym
endpointem. Brama agreguje narzędzia każdego osiągalnego
zarejestrowanego serwera, w przestrzeni nazw
<server>.<tool>, więcgithub.create_issueishell.execpojawiają się obok siebie pod jednym połączeniem MCP. - Polityka na każdym wywołaniu. Każde
tools/calljest najpierw ewaluowane przez twoją politykę. Zablokowane wywołanie wraca do modelu jako błąd narzędzia (firewall deny: …), a nie awaria transportu, więc agent może zareagować, zamiast się wysypać.sanitizeprzepisuje argumenty przed przesłaniem;pending_approvalwstrzymuje wywołanie. - Z ochroną SSRF. Zdalne endpointy są walidowane wobec polityki SSRF bramy — zakresy intranetowe i adresy metadanych chmury są blokowane, a rozwiązany IP wybierania jest ponownie sprawdzany, by pokonać DNS rebinding, na każdym przeskoku włącznie z przekierowaniami.
- Zaszyfrowane poświadczenia. Sekrety auth serwera są szyfrowane w spoczynku i maskowane przy odczycie. Brama wstrzykuje je w czasie dyspozycji; nigdy nie docierają do modelu ani klienta.
2. Dwa rodzaje serwera
| Rodzaj | endpoint | Zachowanie |
|---|---|---|
| BYO (bring-your-own) | URL streamable-HTTP | Brama proxuje tools/call do twojego zdalnego serwera MCP. |
| Dołączony (bundled) | pusty | Serwer MCP OrcaRouter działający in-process. Zarejestrowany, by był widoczny i zarządzalny; nie sondowany osobno. |
3. Rejestracja serwera
Rekord serwera niesie:| Pole | Uwagi |
|---|---|
name | Klucz biznesowy, unikalny per przestrzeń robocza, ≤ 128 znaków. Bez . — to separator przestrzeni nazw <server>.<tool>. |
endpoint | URL serwera MCP (≤ 512 znaków). Pusty dla dołączonego serwera. |
auth_mode | none (domyślnie), bearer, oauth lub basic. |
auth_json | Poświadczenia specyficzne dla trybu (zobacz niżej). Wymagane zawsze, gdy auth_mode nie jest none. |
enabled | Domyślnie true. Wyłączony serwer jest całkowicie pominięty w bramie. |
status | Osiągalność — ok (domyślnie), degraded lub down. Ustawiana przez sondowanie. |
Sekrety nigdy nie są przechowywane jako tekst jawny.
auth_json jest
szyfrowany w spoczynku kluczem sekretów przestrzeni roboczej. Jeśli ten
klucz nie jest skonfigurowany, zapis jest odrzucany, zamiast utrwalać
poświadczenie niezaszyfrowane. Przy odczycie sekrety i endpoint są
maskowane; odeślij maskę z powrotem przy aktualizacji, aby zachować
przechowywaną wartość. Przełączanie między dwoma trybami auth z
poświadczeniami wymaga świeżego auth_json (szyfrogram jest związany
kształtem ze swoim trybem).4. Sondowanie — odkryj jego narzędzia
Zanim będziesz mógł napisać reguły wobec narzędzi serwera, musisz znać ich nazwy. Zasonduj serwer:initialize + tools/list wobec endpointu (używając
odszyfrowanych poświadczeń, ograniczona do 10s), rejestruje status
osiągalności oraz znacznik czasu i zwraca ogłoszone narzędzia wraz z ich
schematami wejścia:
tool_name_glob: github.*, wiedząc
dokładnie, co przyjmuje github.create_issue. Dołączony serwer (z pustym
endpointem) nie jest sondowalny i zwraca 400.
5. Cykl życia i egzekwowanie
- Włączony vs. wyłączony. Wyłączony serwer jest usuwany z rejestru czasu wykonania — jego narzędzia znikają z bramy, a jego poświadczenia nigdy nie są odszyfrowywane. To przełącznik wyłączający.
- Osiągalność.
status(ok/degraded/down) odzwierciedla ostatnie sondowanie; nieosiągalny serwer jest pomijany, gdy brama buduje swój zestaw narzędzi. - Werdykt per wywołanie. Przy dyspozycji silnik zwraca werdykt dla
konkretnego wywołania
<server>.<tool>z jego argumentami:allow/audit→ przesłane (audit loguje, wciąż dopuszcza).sanitize→ przesłane z przepisanymi argumentami.deny/pending_approval/ cokolwiek nieznanego → zablokowane jako błąd narzędzia. (Przez ujednoliconą bramę wstrzymane wywołanie wypływa jako trwały błąd, zamiast przewlekać id zatwierdzenia — użyj hooka evaluate, gdy potrzebujesz uścisku dłoni zatwierdzenia.)
- Usunięcie to miękkie usunięcie; slot nazwy jest zwalniany natychmiast, więc możesz ponownie zarejestrować pod tą samą nazwą.
6. Łączenie klienta
Skieruj dowolnego klienta MCP na endpoint bramy z tokenem w zakresie firewall-gateway:orcarouter-firewall-gateway. Ogłasza narzędzia każdego włączonego,
osiągalnego serwera pod przestrzenią nazw <server>.<tool>,
re-eksponując schemat wejścia każdego narzędzia dosłownie. Token bez
zakresu firewall-gateway dostaje 403 — wybij dedykowany token bramy do
tego.
API reference
Konsola (w zakresie przestrzeni roboczej, RBAC)
| Metoda i ścieżka | Rola | Cel |
|---|---|---|
GET /api/workspace/firewall/mcp_servers | Member | Lista serwerów (sekrety zamaskowane, endpoint zredagowany). |
GET /api/workspace/firewall/mcp_servers/:id | Member | Pojedynczy serwer, zamaskowany. |
POST /api/workspace/firewall/mcp_servers | Developer+ | Zarejestruj serwer (409 przy zduplikowanej nazwie). |
PUT /api/workspace/firewall/mcp_servers | Developer+ | Zaktualizuj serwer (id w ciele). |
DELETE /api/workspace/firewall/mcp_servers/:id | Developer+ | Miękkie usunięcie; zwalnia nazwę. |
POST /api/workspace/firewall/mcp_servers/:id/probe | Developer+ | Zasonduj osiągalność + odkryj narzędzia. |
Brama (token w zakresie firewall-gateway)
| Metoda i ścieżka | Cel |
|---|---|
ANY /api/v1/firewall/mcp | Ujednolicony endpoint dyspozycji bramy MCP. |
GET /api/v1/firewall/mcp_servers | Rejestr czasu wykonania (odszyfrowane auth, tylko włączone serwery) dla proxy SDK. |
POST /api/v1/firewall/evaluate | Ewaluuj pojedyncze tools/call, zanim sam je zdyspozytujesz. |
FAQ
Po co w ogóle kierować MCP przez OrcaRouter?
Po co w ogóle kierować MCP przez OrcaRouter?
Żeby było jedno miejsce, które widzi każde wywołanie narzędzia. Bez
bramy każdy agent łączy się z każdym serwerem MCP bezpośrednio — brak
wspólnej polityki, brak śladu audytu, brak ochrony SSRF i poświadczenia
rozproszone po konfiguracjach agentów. Brama centralizuje to wszystko:
jedno połączenie, jedna polityka, jeden audytowany log, zaszyfrowane
sekrety wstrzykiwane przy dyspozycji.
Co się dzieje, gdy zablokowane wywołanie MCP wraca?
Co się dzieje, gdy zablokowane wywołanie MCP wraca?
Model odbiera je jako błąd narzędzia (
firewall deny: <reason>), w tym
samym kształcie, jaki dostałby z dowolnego zawodzącego narzędzia. To
pozwala agentowi się dostosować — spróbować innego podejścia, zapytać
użytkownika lub zatrzymać się — zamiast traktować to jako awarię
transportu.Czy mogę zarządzać tym samym narzędziem inaczej per serwer?
Czy mogę zarządzać tym samym narzędziem inaczej per serwer?
Tak — po to właśnie jest przestrzeń nazw
<server>.<tool>. Reguła z
tool_name_glob: trusted.* może allow, podczas gdy community.*
jest audit-owane lub pending_approval. Połącz to z
globem nazwy skilla
dla jeszcze drobniejszego zawężenia.Czy brama chroni przed SSRF?
Czy brama chroni przed SSRF?
Tak. URL-e endpointów i ich rozwiązane IP wybierania są walidowane
wobec polityki SSRF przy rejestracji i na każdym przeskoku dyspozycji —
zakresy intranetowe i adres metadanych chmury są odrzucane, a rozwiązany
IP jest ponownie sprawdzany, by pokonać DNS rebinding. Sparuj to z
regułą egress, aby
zarządzać tym, dokąd narzędzia mogą sięgać.
Zobacz także
Chcesz głębiej wejść w bezpieczeństwo agentów? Przewodniki Secure Your Agents (Zero Trust) osadzają tę funkcję w przepływie pracy zero-trust.Zabezpiecz serwery MCP (Zero Trust)
Łącz, uwierzytelniaj i zarządzaj serwerami MCP w postawie zero-trust.
Lista kontrolna zaufania MCP
Co zweryfikować, zanim zaufasz serwerowi MCP innej firmy.
