forge
Clone forge-starter
142 routeson the control plane · :3717
137 routeson the data plane · :3718 · a strict subset
5 gate kindspublic · service token · session · OAuth bearer · signature

Routes

control plane · :3717142data plane · :371813716 shared modules · auth · mcp · oauth · connect · billing · membership · authz · search · blobs · notifications · app-events · status · incidents · tenant · theme · owner+ inline: health · capabilities · resources · events · logs (9)+ control-only: ingest-routes · sms-routes+ inline: health · capabilities · resources · events · logs (8)refuses control-plane capability slugs (404)the same route modules, mounted by two server files · which server = which file calls registerXRoutesapp-facing modules carry no HTTP auth: app-asserted owner over the private network
Which server serves a route is decided by which server file mounts the module, not by a field. Everything the data plane serves, the control plane serves too.
moduleroutesplanesgatewhat it is
auth-routes27bothpublic pages · session cookie · service token (admin)C10 hosted identity: login, signup, verify, reset, Google, 2FA, refresh, admin identities
mcp-routes16bothOAuth 2.1 bearer (/mcp) · service token (management)C23 MCP host: JSON-RPC, SSE stream, tools, instructions, consents, clients
membership-routes17bothnone (app-asserted) · service token (teardown)C31 roles, groups, members, invitations
billing-routes16bothsession or service token + subscriber · Stripe signature (hook)C33 subscription, entitlements, catalog, checkout, portal, admin
connect-routes11bothsession · session or service token + ownerC24 connectors: start, callback, token, calendar write, send
oauth-routes8bothpublic (DCR, token) · session (authorize) · service token (admin token)C23 OAuth 2.1 authorization server
authz-routes7bothnone (app-asserted)C29 authorize, policies, approvals
notifications-routes7bothnone · public (VAPID key)C4 notifications · C21 push subscriptions
blobs-routes · search-routes · incident-routes4 · 4 · 4bothnone (owner-filtered)C20 blobs · C19 search · C15 incidents
app-events-routes3bothnone (app-asserted owner)C3 emit, query, latest
status · tenant · theme · owner2 · 1 · 1 · 1bothpublic · service token · public · noneC15 status page · C34 teardown · C16 theme.css · C11 claim-legacy
sms-routes · ingest-routes3 · 1control onlynone · Google OIDC service identityC21 phone verification + Twilio hook · eval-runner ingest

Discovery, without a token

GETanswers
/health · /health/deepliveness · readiness with billing-mode consistency
/capabilitiesthe capability list this plane serves
/.well-known/oauth-protected-resource[/mcp] · /.well-known/oauth-authorization-server[/mcp]RFC 9728 · RFC 8414 — the path-suffixed forms exist because Claude's validator requires them
/status · /status.json · /theme.css · /auth/config · /connect/providers · /billing/catalogpublic health page · tokens · enabled sign-in methods · configured providers · plans

The same-origin proxy contract

Only /auth/* is a generated rewrite. /oauth/*, /mcp, /connect/*, /billing/* + the Stripe hook (raw body), /status and /theme.css are a documented contract your app adds itself.