Frost

MCP / AI Agents

MCP (Model Context Protocol) lets AI agents like Claude Code and Cursor interact with your Frost instance directly — deploy services, check logs, manage domains, all from your editor.

Each Frost instance exposes an MCP endpoint. Authentication uses OAuth 2.1 with browser-based approval, so there are no tokens to copy-paste.


Connect Claude Code

Add to ~/.claude.json (global) or .mcp.json (project-level):

terminal
{
  "mcpServers": {
    "frost": {
      "type": "http",
      "url": "https://your-frost-server.com/api/mcp"
    }
  }
}

On first use, your browser opens for approval. No tokens to copy.

Connect Cursor

Same config format. Add to your Cursor MCP settings:

terminal
{
  "mcpServers": {
    "frost": {
      "type": "http",
      "url": "https://your-frost-server.com/api/mcp"
    }
  }
}

Available Tools

ToolInputDescription
searchquery?, method?, pathPrefix?, limit?Search Frost API operations from the OpenAPI spec
requestoperationId or method + path, plus pathParams?, query?, body?Call a Frost API operation with spec-backed validation

Use search first. It returns the exact operationId, HTTP method, path, path params, query params, and body shape to use with request.


Authentication

Frost uses OAuth 2.1 with PKCE for MCP authentication:

  1. Agent connects to /api/mcp and gets a 401
  2. Discovers auth server via /.well-known/oauth-protected-resource
  3. Registers as a client via /api/oauth/register
  4. Opens your browser — you log in and approve access
  5. Agent gets an access token, stores it locally
  6. All subsequent requests include the Bearer token

Access tokens expire (default: 30 days). You can view and revoke active tokens in Settings → MCP Tokens.

For programmatic/CI access, you can also use x-frost-token header with an API key from Settings.


Example Workflows

Once connected, agents usually do this:

  1. Call search with a plain query like deploy project, list domains, or create service
  2. Pick the returned operation
  3. Call request with that operation's operationId and inputs

Example:

  • search { "query": "deploy project" }
  • request { "operationId": "projects.deploy", "pathParams": { "projectId": "proj_123" } }

Another example:

  • search { "query": "create service" }
  • request { "operationId": "services.create", "body": { ... } }