EvoHub DocsEvoHub Docs Sign in

Get drift

Use with AI
View as MarkdownThis page as plain text, for pasting into an AI tool Open in ClaudeAsk Claude questions about this page Open in ChatGPTAsk ChatGPT questions about this page
Connect to Cursor / VS Code / ClaudeSearch and read these docs from your AI tool (MCP server)

MCP server URL

https://docs.evohub.io/mcp

Claude Code

claude mcp add --transport http evohub-docs https://docs.evohub.io/mcp

Claude (claude.ai and Claude Desktop): Settings → Connectors → Add custom connector, and paste the URL above.

Claude Desktop — claude_desktop_config.json

{
  "mcpServers": {
    "evohub-docs": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://docs.evohub.io/mcp"
      ]
    }
  }
}

Cursor — ~/.cursor/mcp.json

{
  "mcpServers": {
    "evohub-docs": {
      "url": "https://docs.evohub.io/mcp"
    }
  }
}

VS Code — .vscode/mcp.json

{
  "servers": {
    "evohub-docs": {
      "type": "http",
      "url": "https://docs.evohub.io/mcp"
    }
  }
}
GET/api/v1/catalog/drift

Where what was declared and what runs disagree. Each list is capped at 100 (200 for exposed) with a truncated flag:

  • unowned: live resources with no service, per environment and kind
  • undeployed: services with no live resource; retired ones are left out
  • environment_diff: per service running in more than one environment, the kinds and names it runs in some and not others, compared without the namespace
  • version_diff: per service, the workloads running different images in one environment than in another
  • vanished: missing and gone resources, most recent first
  • not_ready: live workloads with fewer pods ready than wanted, or containers failing
  • exposed: cloud resources whose security groups open an admin port (SSH, RDP, databases) to the whole internet

environment_diff and version_diff always compare every environment, whatever environment_id says.

Requires the catalog:component:read and catalog:resource:read scopes.

Authorization

Any one of:

Parameters

Query parameters

  • environment_id string
    Only this environment.
    Example: env_2c4e6a8b0d1f3a5c7e9b1d3f5a7c9e0b

Responses

200

The drift report.

Content type: application/json

Type: object

  • data Drift
    Show Drift properties
    • unowned object
      • total integer
      • by_kind array of object
        • environment_id string
        • provider string
        • kind string
        • category string
        • live integer
        • unowned integer
      • truncated boolean
    • undeployed object
      • total integer
      • components array of object
        • id string
        • slug string
        • display_name string
        • owner_team_id string | null
        • lifecycle Lifecycle
          One of: experimental production deprecated retired
      • truncated boolean
    • environment_diff object
      • components array of object
        • component_id string
        • slug string
        • environments array of string
        • differences array of object
          • kind string
          • name string
          • present_in array of string
          • missing_from array of string
      • truncated boolean
    • version_diff object
      • workloads array of object
        • component_id string
        • slug string
        • kind string
        • name string
        • environments array of object
          • environment_id string
          • images array of string
      • truncated boolean
    • vanished object
      • missing integer
      • gone integer
      • resources array of object
        • id string
        • environment_id string
        • provider string
        • kind string
        • name string
        • namespace string
        • component_id string | null
        • status string
        • missing_since string (date-time)
      • truncated boolean
    • not_ready object
      • workloads array of object
        • resource_id string
        • environment_id string
        • kind string
        • name string
        • namespace string
        • ready integer
        • desired integer
        • restarts integer
        • reasons object
          Other keys: integer
        • health Health
          One of: healthy degraded down idle unknown
      • truncated boolean
    • exposed object
      • resources array of object
        • resource_id string
        • environment_id string
        • provider string
        • kind string
        • name string
        • region string
        • ports array of ExposedPort
          Show ExposedPort properties
          • port integer
            Example: 22
          • service string
            Example: SSH
          • protocol string
          • from string
            Example: 0.0.0.0/0
          • security_group_id string
      • truncated boolean

400

The request is not valid: a field or filter value is wrong (VALIDATION_ERROR, with a sentence saying what), the body is not the expected JSON or carries an unknown field (INVALID_BODY), the cursor is not one this list gave (INVALID_CURSOR), a binding names a service that does not exist (UNKNOWN_COMPONENT), or a PATCH tries to change a slug (SLUG_IMMUTABLE).

Content type: application/json

Type: Error

  • error object required
    • code string required
      Example: NOT_FOUND
    • message string required
      Example: not found
    • request_id string

401

No API key was sent, or it is unknown, revoked or expired (UNAUTHORIZED).

Content type: application/json

Type: Error

  • error object required
    • code string required
      Example: NOT_FOUND
    • message string required
      Example: not found
    • request_id string

403

The key lacks a scope this endpoint needs (FORBIDDEN).

Content type: application/json

Type: Error

  • error object required
    • code string required
      Example: NOT_FOUND
    • message string required
      Example: not found
    • request_id string

429

Too many requests (RATE_LIMITED). Wait for Retry-After seconds.

Headers

  • Retry-After integer
    Seconds to wait before retrying.

Content type: application/json

Type: Error

  • error object required
    • code string required
      Example: NOT_FOUND
    • message string required
      Example: not found
    • request_id string

500

Something went wrong on EvoHub's side (INTERNAL_ERROR). Retry later.

Content type: application/json

Type: Error

  • error object required
    • code string required
      Example: NOT_FOUND
    • message string required
      Example: not found
    • request_id string

Example request

curl -X GET 'https://evohub.io/api/v1/catalog/drift' \
  -H 'Authorization: Bearer <TOKEN>'