MCP Forge
View Markdown
Local admin portal.mdDownload .md

The admin portal

Runku includes a local operator portal served by the same runku process at:

http://<host>:<port>/portal/

It's operator-facing only. Nothing about it is reachable by an MCP agent, and it never appears in tools/list — it's a separate HTTP surface (/reports/* + /portal/) mounted alongside /mcp/*.

Getting in

The portal's static shell (/portal/) always loads, regardless of auth.enabled — a browser has to be able to load the page before a human has anything to authenticate with. Everything it fetches (/reports/*) is protected exactly like /mcp when auth is on:

Logging out via SSO performs a real RP-initiated logout against the provider (not just clearing the local token) — so switching test identities doesn't require an incognito window.

The six tabs

Tab What it shows
Dashboard Summary cards (allowed / blocked / error / pending counts), a connector/identity filter, and charts (call volume over time, tool-usage breakdown, latency). Clicking a verdict card jumps to Audit Log pre-filtered to it.
Audit Log The full, searchable audit trail — text search plus verdict/tool/identity filters and a from/to time range (with a live "Realtime" toggle). Click any row for a slide-in panel with the entry's full JSON.
Playground Pick a connector and a tool, get a JSON editor pre-filled with a schema-derived sample payload, and call it directly from the browser — invokes the real tool handler in-process, so it's a genuine call (audited, policy-checked), not a mock.
MCP Docs Auto-generated documentation for every tool the connected connectors currently expose — the same JSON Schemas an MCP client sees, rendered for a human.
Tool Analysis Runtime metrics — CPU, memory, disk, and audit-database size, current and historical.
Agent Config The full effective policy and permission picture: every connector's exposed tables, columns and mutations, every identity's role, and any read-only or per-table restriction. Tables that exist but are not exposed remain visibly marked as unavailable.

Nothing sensitive ever reaches the browser through any of these: no DSNs, no API-key hashes, no OAuth2 client secrets, and masked-column values never appear even in the Playground or Audit Log — the same discipline that applies to the audit log everywhere else applies here, since the portal is reading the same data.

The portal is available automatically whenever the service is running; no separate installation or web server is required.