Skip to content

MCP konektor (Claude, ChatGPT) ​

Každá instance aplikace může mít vlastní MCP konektor: adresu, kterou uživatel vloží do Claude nebo ChatGPT a tím jim zpřístupní aplikaci. AI pak smí jen to, co smí přihlášený uživatel. Vše je řešeno centrálně v user-api — aplikace samotné nemusí implementovat OAuth ani MCP.

Claude / ChatGPT ──OAuth 2.1 + MCP──▶ user-api /mcp/<connector>  ──RS256 JWT (60 s)──▶ backend aplikace
                                        │ ověří token, instanci,
                                        │ přístup a oprávnění nástroje
                                        ▼
                                  vestavěné nástroje (profil, oprávnění, podpora, notifikace)

Co je zaručeno ​

PravidloJak
Nic není vystaveno, dokud to admin nezapneKonektor je vypnutý; nástroj musí být výslovně v allowlistu instance.
AI smí jen to, co uživatelKaždý nástroj deklaruje oprávnění; kontrola při tools/list i při každém tools/call (CheckService, cache 30 s).
Odebrání práv platí hnedBezstavový server: přístup k instanci i oprávnění se ověřuje u každého požadavku.
Token nejde použít jindeToken je vázán na jednu instanci (RFC 8707 resource); jiný konektor ho odmítne.
Režim jen pro čteníNástroje s readOnly: false se v read-only konektoru nikdy nezobrazí.
Krádež tokenuTokeny jsou v DB jen jako SHA-256; refresh tokeny rotují, opakované použití po 60 s odvolá celé připojení.
AuditKaždé volání nástroje je v auditním logu (resource_type = mcp_tool).
OdpojeníUživatel v nastavení aplikace, admin v panelu, vypnutí konektoru odvolá všechna připojení.

Kdo smí konektor použít ​

Stejné pravidlo jako brána aplikace — nastavuje se u instance (accessMode):

  • any_permission (výchozí) — uživatel má v aplikaci aspoň jedno udělené oprávnění,
  • permission — uživatel má konkrétní oprávnění (accessPermission),
  • authenticated — jakýkoli aktivní přihlášený uživatel.

Superadmin a admin aplikace projdou vždy. Deaktivovaný uživatel nikdy.

Nastavení (admin panel) ​

Aplikace → detail → Instance → AI konektor

  1. Zapnout konektor, zvolit režim (jen čtení / i změny).
  2. Volitelně vyplnit URL backendu implementujícího kontrakt.
  3. Zaškrtnout povolené nástroje. Nové nástroje z backendu jsou vypnuté, dokud je admin nezapne.
  4. Zkopírovat URL konektoru a předat uživatelům (ti ji vidí i v nastavení aplikace).

Připojení v Claude / ChatGPT ​

  • Claude (claude.ai / Desktop): Settings → Connectors → Add custom connector → vložit URL.
  • ChatGPT: Settings → Apps & Connectors → Advanced → Developer mode → Create → URL, autentizace OAuth.

Klient se sám zaregistruje (Dynamic Client Registration), přesměruje na přihlášení přes ZITADEL a uživatel na souhlasové obrazovce vidí aplikaci, svůj účet, cílovou adresu a seznam nástrojů.

Provoz ​

ProměnnáÚčel
MCP_STATE_SECRETHS256 klíč pro stav přihlášení a souhlasu (32+ znaků). Bez něj OAuth neběží.
MCP_SIGNING_KEYRSA privátní klíč (base64 PEM) pro podepisování volání backendů. Bez něj fungují jen vestavěné nástroje.
MCP_PREVIOUS_SIGNING_KEYPředchozí klíč při rotaci — jen publikován v JWKS.
mcp.publicBaseUrlVeřejný origin user-api (issuer, URL konektorů).

Jednorázově: v aplikaci auth přidat instanci s redirect URI https://<api>/oauth/callback (přihlašovací callback). Admin panel u konektoru vypíše, co chybí.

Caddy musí na hostu user-api propouštět /.well-known/*, /oauth/* a /mcp/*.

Endpointy ​

CestaÚčel
GET /.well-known/oauth-authorization-serverMetadata autorizačního serveru (RFC 8414)
GET /.well-known/oauth-protected-resource/mcp/:idMetadata konektoru (RFC 9728)
GET /.well-known/jwks.jsonVeřejné klíče pro ověření volání backendů
POST /oauth/registerDynamic Client Registration (RFC 7591)
GET /oauth/authorize · POST /oauth/token · POST /oauth/revokeOAuth 2.1 + PKCE (S256)
POST /mcp/:idMCP Streamable HTTP (bezstavový, JSON odpovědi)
GET/PUT /api/applications/:app/instances/:id/mcpNastavení (admin)
GET /api/applications/:app/instances/:id/mcp/toolsKatalog nástrojů včetně odmítnutých (admin)
GET/DELETE /api/applications/:app/instances/:id/mcp/grantsPřipojení klienti (admin)
GET /api/mcp/connector?appCode=&origin=URL a nástroje pro přihlášeného uživatele
GET/DELETE /api/mcp/connectionsVlastní připojení uživatele

Test ​

scripts/e2e-mcp-gate.mjs spustí skutečný server proti dočasné DB a projde celý tok oficiálním MCP SDK klientem (discovery, DCR, PKCE, consent, nástroje, refresh, odvolání, brána).

Atrea User API — interní dokumentace