Skip to content
Public beta preview — you're seeing the sneak peek

Connect the platform MCP server

read as .md

Guuey runs an MCP server over its own platform API. Connect it to the coding agent you already work in — Claude Code, Cursor, or any client that speaks MCP over HTTP — and that agent can do what guuey does from the terminal: list and create apps, deploy, manage environment variables and secrets, read logs, rotate widget keys, and write the chat theme. Every tool call is the same authenticated request the CLI makes; nothing is cached, re-authorized or reshaped on the way, and an upstream 401, 403 or 404 comes back as a tool error carrying that status.

https://platform-mcp.guuey.com/mcp

Streamable HTTP, stateless — no session id to keep — on MCP protocol 2025-06-18. The server identifies itself as guuey-platform.

The server takes your personal token — the same one the CLI uses — and forwards it verbatim:

  • Your personal access token (guuey_user_…) — the key guuey login delivers. Mint one in the console under Settings → API keys; guuey login --token guuey_user_… accepts the same key, so it is the one credential for both doors.
  • Service tokens (guuey_svc_…) and workspace keys (guuey_wkz_…) are refused at this door — it takes a personal token only. CI automation keeps using those through the CLI, not through this server.

Send it as Authorization: Bearer <token>. An unauthenticated request answers 401 with a WWW-Authenticate header pointing at https://platform-mcp.guuey.com/.well-known/oauth-protected-resource/mcp; clients that implement MCP’s OAuth discovery follow that document to Guuey’s authorization server (https://oauth.guuey.com, which publishes registration, authorization and token endpoints with PKCE), register themselves, and sign you in with your Guuey account instead of a pasted token.

Claude Code:

Terminal window
claude mcp add --transport http guuey-platform https://platform-mcp.guuey.com/mcp \
--header "Authorization: Bearer guuey_user_…"

Any client that reads an mcpServers map (Cursor, Windsurf, the MCP inspector, and most others):

{
"mcpServers": {
"guuey-platform": {
"url": "https://platform-mcp.guuey.com/mcp",
"headers": { "Authorization": "Bearer guuey_user_…" }
}
}
}

Keep the token in the client’s secret store or an environment variable, never in a file you commit.

Tool What it is
whoami Who the token belongs to — { userId, keyId? }, nothing richer.
apps_list, apps_get, apps_create, apps_update Your apps. The argument is id (not appId). apps_update also sets the look: chatTheme is the same document guuey apps update --chat-theme-file sends (null clears it; every hosted surface follows within minutes), brandAccent is a full replacement (null clears).
deploy_upload, deploy_trigger A deploy. For code deploys, deploy_upload presigns the upload of the source tarball and comes first — its returned s3Key goes into deploy_trigger as sourceTarballKey; a declarative (no-code) deploy needs only deploy_trigger.
deployments_list, deployment_get, deployment_status Build history and the state of one build.
env_list, env_set, env_delete Environment variables. env_list returns names only — values never leave the platform. env_delete is destructive.
secrets_set, secrets_list, secrets_unset A hosted MCP server’s secrets — again names only, never values. secrets_unset is destructive (and idempotent).
logs_fetch The app’s runtime logs.
mcp_servers_list, mcp_server_get Your hosted MCP servers (workspaceId defaults to your personal workspace when omitted).
widget_keys_create, widget_keys_rotate, widget_keys_revoke The widget signing keys. widget_keys_revoke is destructive; there is no list — the platform exposes none.

Everything else the platform API can do — deleting or archiving an app, billing, membership, undeploy, deleting a hosted MCP server — is deliberately not on this server. Those stay with the CLI and the console, where a person confirms them.

This is the door the console’s Copy prompt on Design → Chat theme names: a coding agent with this server connected can read the theme it proposes back into the app with apps_update { "id": "<appId>", "chatTheme": <the document> } and verify it with apps_get. The document, its validation and its precedence over the brand accent are all on Theming.