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):
{
"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:
{
"mcpServers": {
"frost": {
"type": "http",
"url": "https://your-frost-server.com/api/mcp"
}
}
}Available Tools
| Tool | Input | Description |
|---|---|---|
search | query?, method?, pathPrefix?, limit? | Search Frost API operations from the OpenAPI spec |
request | operationId 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:
- Agent connects to
/api/mcpand gets a401 - Discovers auth server via
/.well-known/oauth-protected-resource - Registers as a client via
/api/oauth/register - Opens your browser — you log in and approve access
- Agent gets an access token, stores it locally
- 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:
- Call
searchwith a plain query likedeploy project,list domains, orcreate service - Pick the returned operation
- Call
requestwith that operation'soperationIdand 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": { ... } }