---
title: console.ggui.ai
description: User dashboard for the hosted mcp.ggui.ai server — apps, orgs, connector keys, blueprints, credits, BYOK provider keys, and OAuth/CLI consent.
---

[`console.ggui.ai`](https://console.ggui.ai) is the user-facing dashboard for the [`mcp.ggui.ai`](/clients/claude-desktop/) hosted MCP server. Sign in with Google, GitHub, or email (Cognito). The left-sidebar nav surfaces ten screens in three task-verb groups — Build, Configure, Account. Three more screens are deep-linked into by the OAuth ceremony, the CLI device flow, and an org-invite email — the last is separate from the **Invites** screen already in the nav, which lists your own pending invites rather than accepting one.

| Group     | Screen         | Path                  | What lives here                                                             |
| --------- | -------------- | --------------------- | --------------------------------------------------------------------------- |
| Build     | Apps           | `/apps`               | Per-app surfaces — keys, blueprints, gadgets, marketplace, theme, settings. |
| Configure | Connector keys | `/keys/connector`     | Mint and list `ggui_user_*` API keys (revoke via the CLI).                  |
| Configure | Provider keys  | `/keys/providers`     | BYOK — paste your Anthropic / OpenAI / Google / OpenRouter keys.            |
| Configure | Author keys    | `/keys/authors`       | Publisher Ed25519 signing keys — list and two-step revoke.                  |
| Configure | Credits        | `/credits`            | Balance, transaction log, coupon redeem, Stripe top-up.                     |
| Account   | Orgs           | `/orgs`               | Organizations you belong to; org-scoped wallets, invites, members.          |
| Account   | Invites        | `/invites`            | Your own pending org invites, looked up by email.                           |
| Account   | Connected apps | `/connections`        | OAuth clients that have access to your account — see below.                 |
| Account   | Account        | `/account`            | Email, default app, sign out.                                               |
| Account   | Support        | `/support`            | Contact ggui — one page, one email, no case system yet.                     |
| —         | OAuth consent  | `/oauth/consent`      | Approval landing for MCP-Apps-aware clients (Claude Desktop, etc.).         |
| —         | CLI sign-in    | `/cli-confirm/[code]` | Approval landing for the [`ggui` CLI's](/cli/login/) device flow.           |
| —         | Org invite     | `/invites/[inviteId]` | Auto-accept landing for an org-invite email link.                           |

The home path `/` redirects to `/apps` — apps are the primary primitive in the current IA (post-2026-05 apps pivot). You don't visit `/oauth/consent` or `/cli-confirm/*` directly — the MCP host or the CLI navigates you there at the right moment.

:::note
The console is the end-user surface for **ggui** (the protocol, hosted at `mcp.ggui.ai`). **guuey** is the separate agent-hosting platform — a distinct product built on the same protocol underneath.
:::

:::tip[Also available as an MCP route]
Most console actions — apps, orgs, connector keys, provider keys, coupons, blueprints, themes — are also exposed as `ops` MCP tools on the control plane at `mcp.ggui.ai/control`. Stripe top-up checkout, author keys, gadget installs, and invite acceptance are console/CLI-only today. See [Control MCP plane](/api/control-mcp/) — useful for operator agents and automation.
:::

## Apps (`/apps`)

Apps are the primary primitive. Each app is a scope that owns its own blueprints, theme, marketplace installs, and per-app API keys. New accounts land here with a single default app already provisioned; create more from this page.

Per-app sub-routes (under `/apps/[appId]/`), in nav order:

- **Overview** (`/apps/[appId]`) — the connect checklist, the MCP connect config snippet, and the app's render activity. This is where the app id lands you.
- **Blueprints** (`/blueprints`) — the app's blueprint library: view source, rename, edit metadata, delete.
- **Gadgets** (`/apps/[appId]/gadgets`) — the app's resolved gadget catalog, exactly what agents receive from `ggui_list_gadgets`: the stdlib floor, web-installed rows, and the `ggui.json`-declared overlay (floor < installed < declared). Installed rows get a **Remove** action and a version-pin menu.
- **Marketplace** (`/marketplace`) — browse and install published blueprints and gadgets; a kind toggle switches the search between the two.
- **Keys** (`/keys`) — per-app connector keys (`ggui_user_*` rows bound to this `appId`, so the pod locks the session to this app) **and** per-app BYOK provider-key overrides (precedence over the user-pool BYOK keys for renders bound to this app).
- **Theme** (`/theme`) — per-app theme overrides.
- **Settings** (`/settings`) — display name, system prompt, per-key rate limit, delete app.

Blueprints are matched during `ggui_handshake`, before any generation. Curated app blueprints match deterministically when the agent's declared tools cover the blueprint's `dataTools` (deterministic, zero-LLM); other cached blueprints are reused by contract similarity. Either way, a hit renders with zero generation cost. See the [generation pipeline](/architecture/overview/#generation-pipeline) for the matching flow and [Marketplace](/hosted/marketplace/) for authoring + distribution.

## Orgs (`/orgs`)

Organizations you belong to, each with its own credit wallet, member list, and invite flow. Per-org detail lives under `/orgs/[orgId]`, and invite-email links land at `/invites/[inviteId]`. See [Orgs and teams](/hosted/orgs/).

## Connector keys (`/keys/connector`)

Every `ggui_user_*` key on your account, whichever path minted it — the console, an OAuth ceremony, or the CLI. See [Connector keys](/hosted/connector-keys/).

## Connected apps (`/connections`)

OAuth clients (Claude Desktop, claude.ai, Goose, …) that have registered against your account via Dynamic Client Registration. The per-client list and per-row revoke aren't available yet — OAuth-grant storage is pod-local and not scoped by user, so there is no per-user list to safely show today.

Revocation works today at the **key** level instead: every OAuth approval, console mint, and CLI mint lands in the same table at [Connector keys](/hosted/connector-keys/) (`/keys/connector`). Revoke the `ggui_user_*` row there (via the CLI: `ggui keys revoke <id>`) and every client holding that key loses access immediately — which is also the argument for minting one key per client, so you can cut off one without disturbing the rest.

## Credits (`/credits`)

Balance, transaction log, Stripe top-up, and coupon redemption. See [Credits, billing & BYOK](/hosted/billing/).

## Provider keys / BYOK (`/keys/providers`)

Your account-wide Anthropic / OpenAI / Google / OpenRouter keys, so model calls run on your provider account instead of ggui's pool. See [Credits, billing & BYOK](/hosted/billing/#bring-your-own-key-byok).

## Account (`/account`)

Email, default app selection, sign out, and account deletion.

## Ask the console

A persistent agent helper is mounted in the sidebar (cmd-K to focus it; a floating **Ask** launcher opens the same input in a bottom sheet on mobile). Type a natural-language request and it renders its answer as a generative-UI surface inside the console itself — the console dogfooding the same generation it hosts. Saved results group under helper history in the app's Blueprints tab (see [Apps](#apps-apps) above).

## OAuth consent (`/oauth/consent`)

The browser landing for MCP-Apps-aware clients running through the [OAuth ceremony](/self-hosted/oauth/). When Claude Desktop (or any compatible host) asks `mcp.ggui.ai` to authorize, the server 302s the browser here with the OAuth params.

You see:

- The requesting client's name (from DCR `client_name`).
- The scope being requested (`mcp`).
- Two buttons: **Approve** / **Cancel**.

**Approve** mints a fresh `ggui_user_*` key (default label `MCP — <shortClientId> — <date>`, editable via the Key-name field; per-app flows that carried an RFC 8707 `resource` get the `appId` bound on the row so the session locks to that app) and posts it back to the MCP server through a cross-origin form POST. The server completes the OAuth flow and the client's next `/mcp` request authenticates with the new key.

**Cancel** redirects back to the client with `error=access_denied` per [RFC 6749 §4.1.2.1](https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.2.1). The MCP server is never contacted; nothing is minted.

You don't visit this URL directly — the MCP host sends you here at OAuth time.

## CLI sign-in (`/cli-confirm/[user_code]`)

The browser landing for the [`ggui login`](/cli/login/) device flow. The CLI prints a URL like:

```
https://console.ggui.ai/cli-confirm/AB12-CD34
```

Open it, sign in if you aren't already, confirm the codes match, click **Approve**. The CLI's polling on `/v1/auth/poll` flips to `approved` and tokens land at `~/.ggui/auth.json`.

Same trust model as the OAuth consent screen — confirm the code matches what the CLI printed before approving.

## Account model

One Cognito user owns one ggui account. User-scoped data on the dashboard (your keys, your blueprints, your personal credit balance, your provider keys) is visible only to you via owner-auth on every model. Org-scoped data (org wallet, org members, org-scoped blueprints) is gated by org membership.