dorfteich/packages/shared/i18n/de/apiTokens.json
Claude Fable 5 04e21a0aac
All checks were successful
CD / Build and push images (push) Successful in 3m50s
CI / Lint, typecheck, test (push) Successful in 4m2s
CI / Build container images (push) Has been skipped
CD / Deploy to Test (push) Successful in 11s
CD / Smoke tests against Test (push) Successful in 1m14s
CD / Promote to Int (push) Successful in 13s
CI / Auth e2e pack (push) Successful in 5m37s
CI / Import/export fidelity gate (push) Successful in 47s
Built-in MCP endpoint (Streamable HTTP) on top of the public API (#105)
AI clients talk to the instance directly at /api/mcp — under the /api/
path (deviation from the issue's literal /mcp) so every existing reverse
proxy already routes it; no deployment changes anywhere.

- Transport: official @modelcontextprotocol/sdk server, STATELESS — each
  POST builds a fresh server+transport pair, no session store, replicas
  stay trivial; GET/DELETE answer 405. Auth per PAT bearer (#104 tokens),
  per-token rate limit (429 + Retry-After).
- Own switches, independent of REST: instance mcp.enabled (admin
  settings, default off; off = 404, feature invisible) + pond setting
  mcpEnabled (pond-settings toggle, default off) — pinned independent in
  both directions by tests.
- Tools (thin wrappers over the #104 services, same permission gates,
  audit-logged writes): list_ponds, list_pages, read_page, search,
  create_page, update_page (replace semantics through the collab-owned
  restore path — open editors converge), add_comment, list_labels,
  set_page_labels (exact replace), export_pond (link to the REST ZIP).
  Tool errors carry the api error codes; results carry stable slugs/ids.
  MCP resources stay the documented stage-2 stretch goal.
- Deliberately on the SDK's low-level Server API with a hand-written tool
  table (mcp-tools.ts): the typed registerTool generics drove tsc out of
  memory in a program this size; manual Zod validation keeps the wire
  behavior explicit.
- PublicApiService exposure filtering parameterized ('api' | 'mcp',
  shared pondFeatureEnabled helper) — one implementation, two switches.
- Docs: "Connect Claude Code / MCP clients" section in public-api.md
  (claude mcp add one-liner + mcp-remote bridge for stdio clients).

Verification: 8-test e2e pack driving the real MCP SDK client over
Streamable HTTP against a listening api (initialize + tools/list, switch
independence in both directions, anonymous/garbage 401, opt-in 404
semantics, page roundtrip incl. restore-NOTIFY, labels/comments, read
scope blocked from writes with scope_required); live check through the
web proxy against the seeded stack (tools list, create, read, update,
search — LIVE CHECK PASSED); full api suite 61/61 files green.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EwZ4jR4KFAPvpjWevfUGX1
2026-07-12 11:36:02 +02:00

56 lines
2.8 KiB
JSON

{
"section": {
"title": "API-Tokens",
"intro": "Mit Personal-Access-Tokens nutzen Skripte und Integrationen die öffentliche API in deinem Namen. Ein Token hat deine Berechtigungen, eingeschränkt durch seinen Scope und optional auf bestimmte Teiche.",
"instanceDisabled": "Die öffentliche API ist auf dieser Instanz derzeit deaktiviert — Tokens lassen sich anlegen, funktionieren aber erst, wenn ein Site-Admin sie aktiviert.",
"empty": "Noch keine API-Tokens."
},
"fields": {
"name": "Name",
"scope": "Scope",
"scopeRead": "Nur lesen",
"scopeWrite": "Lesen und schreiben",
"expiresAt": "Läuft ab (optional)",
"ponds": "Auf Teiche beschränken (optional)",
"pondsHint": "Keine Auswahl = alle Teiche, auf die du Zugriff hast (und die die API aktiviert haben)."
},
"list": {
"created": "Erstellt",
"lastUsed": "Zuletzt benutzt",
"never": "nie",
"expires": "Läuft ab",
"status": "Status",
"active": "Aktiv",
"revoked": "Widerrufen",
"expired": "Abgelaufen",
"allPonds": "alle Teiche",
"revoke": "Widerrufen",
"revokeConfirm": "Dieses Token widerrufen? Clients, die es verwenden, funktionieren sofort nicht mehr."
},
"create": {
"button": "Token erstellen",
"pending": "Erstelle…",
"createdTitle": "Token erstellt",
"createdHint": "Jetzt kopieren — es wird nur dieses eine Mal angezeigt.",
"copy": "Kopieren",
"copied": "Kopiert."
},
"pond": {
"title": "Öffentliche API",
"label": "Diesen Teich über die öffentliche API freigeben",
"hint": "Standardmäßig aus. Wenn aktiviert, erreichen Nutzer diesen Teich mit ihren API-Tokens — mit genau den Berechtigungen, die sie hier ohnehin haben. Der instanzweite API-Schalter muss ebenfalls an sein.",
"saved": "Gespeichert.",
"mcpLabel": "Diesen Teich für KI-Assistenten freigeben (MCP)",
"mcpHint": "Standardmäßig aus und unabhängig vom REST-Schalter. Wenn aktiviert, erreichen MCP-Clients wie Claude Code diesen Teich mit einem API-Token — wieder mit genau den Berechtigungen des Nutzers. Der instanzweite MCP-Schalter muss ebenfalls an sein."
},
"admin": {
"title": "Öffentliche API",
"label": "Öffentliche REST-API aktivieren",
"hint": "Hauptschalter (standardmäßig aus). Nutzer erstellen dann Personal-Access-Tokens in ihren Einstellungen; jeder Teich gibt sich zusätzlich über seine Teich-Einstellungen frei. Dokumentation: /api/public/v1/openapi.json",
"save": "Speichern",
"saved": "Gespeichert.",
"mcpLabel": "Eingebauten MCP-Endpoint aktivieren",
"mcpHint": "Hauptschalter (standardmäßig aus), unabhängig von der REST-API. MCP-Clients verbinden sich mit einem API-Token auf /api/mcp; jeder Teich gibt sich zusätzlich über seine Teich-Einstellungen frei. Siehe docs/self-hosting/public-api.md."
}
}