{
  "version": 1,
  "updatedAt": "2026-05-22",
  "description": "Agent/client launch matrix for public Starkscan integration surfaces. Route-level certification remains owned by public-api-correctness-manifest.json; this file classifies the higher-level REST, SDK, CLI, and MCP surfaces.",
  "states": {
    "certified": "Production-safe for the stated scope, with current correctness evidence and stable client contract.",
    "beta": "Usable by named clients with documented limits or release-channel caveats.",
    "experimental": "Partner/internal preview only; schema, packaging, or auth may still change.",
    "unsupported": "Not a supported client contract."
  },
  "surfaces": [
    {
      "id": "rest-core-api",
      "publicName": "REST core API",
      "state": "certified",
      "releaseState": "ready-for-named-client-production",
      "audience": "external clients and agents that call HTTP directly",
      "entrypoint": "https://<host>/api/v1/...",
      "auth": "X-Starkscan-Api-Key; X-Mezcal-Api-Key remains accepted as a legacy alias",
      "scope": [
        "GET /v1/{chain}/status",
        "GET /v1/{chain}/block/{number_or_hash}",
        "GET /v1/{chain}/tx/{tx_hash}",
        "GET /v1/{chain}/token/{token}/total-supply",
        "GET /v1/{chain}/token/{token}/balance-of/{address}"
      ],
      "evidence": [
        "rust-exp/docs/api/public-api-correctness-manifest.json",
        "rust-exp/deploy/hetzner/scripts/core-api-rpc-parity-gate.sh",
        "rust-exp/scripts/agent-api-conformance-smoke.sh"
      ],
      "checks": [
        "public API correctness manifest validation",
        "core API RPC parity gate",
        "authenticated agent API conformance smoke"
      ],
      "blockers": [],
      "notes": "Correctness is the hard gate. Indexed lists and protocol routes stay beta until their reconciliation gates are current."
    },
    {
      "id": "typescript-sdk",
      "publicName": "TypeScript SDK",
      "state": "beta",
      "releaseState": "ready-for-named-client-beta",
      "audience": "TypeScript applications and agent runtimes that want typed REST access",
      "entrypoint": "@mezcal/sdk@alpha",
      "auth": "SDK forwards the same hosted API-key contract as REST",
      "scope": [
        "typed wrappers over the public REST contract",
        "chain-bound Starkscan client helpers",
        "live tester smoke against preview"
      ],
      "evidence": [
        "webapp/packages/sdk/package.json",
        "webapp/packages/sdk/src/mezcalClient.ts",
        "webapp/packages/sdk/scripts/tester-smoke.ts"
      ],
      "checks": [
        "bun run --cwd packages/sdk typecheck",
        "bun run --cwd packages/sdk test",
        "bun run --cwd packages/sdk build",
        "bun run --cwd packages/sdk smoke:tester"
      ],
      "blockers": [
        "public npm release token and release owner approval before promoting beyond alpha"
      ],
      "notes": "SDK package gates are clean on current main, but the public release channel is still alpha."
    },
    {
      "id": "agent-cli",
      "publicName": "Agent CLI",
      "state": "beta",
      "releaseState": "manual-release-blocked",
      "audience": "shell users, local exports, and agent subprocess workflows",
      "entrypoint": "@mezcal/cli@alpha",
      "auth": "CLI sends X-Starkscan-Api-Key and keeps MEZCAL_* env names for compatibility",
      "scope": [
        "npx/npm wrapper",
        "native artifact verification",
        "doctor and command forwarding"
      ],
      "evidence": [
        "webapp/packages/cli/package.json",
        "webapp/packages/cli/README.md",
        "webapp/packages/cli/scripts/tests/cli-wrapper.mjs",
        "rust-exp/scripts/release-cli-smoke.sh"
      ],
      "checks": [
        "npm run typecheck in webapp/packages/cli",
        "npm run test in webapp/packages/cli"
      ],
      "blockers": [
        "npm organization/package publishing access",
        "NPM_TOKEN or equivalent trusted release token",
        "bundled native artifacts for the target release tag"
      ],
      "notes": "The source wrapper is verified, but public release requires artifact and npm access."
    },
    {
      "id": "hosted-mcp-http",
      "publicName": "Hosted MCP HTTP",
      "state": "beta",
      "releaseState": "usable-with-api-key-auth",
      "audience": "MCP-capable agents that can call the hosted JSON-RPC endpoint",
      "entrypoint": "POST https://<host>/api/mcp",
      "auth": "X-Starkscan-Api-Key for the hosted /api/mcp path",
      "scope": [
        "single JSON-RPC request per POST",
        "tools/list and tools/call parity with the read surface",
        "stateless hosted transport"
      ],
      "evidence": [
        "rust-exp/docs/mcp-http-rollout.md",
        "rust-exp/docs/mcp-tool-parity.md",
        "rust-exp/src/transport/api/mcp_http_adapter.rs",
        "rust-exp/src/transport/mcp.rs"
      ],
      "checks": [
        "GET /api/mcp returns 405 Allow: POST",
        "POST /api/mcp initialize returns MCP protocol 2025-11-25",
        "MCP tool parity tests in rust-exp"
      ],
      "blockers": [
        "OAuth protected-resource discovery is not yet live on preview",
        "official launcher package is not finalized"
      ],
      "notes": "Direct hosted MCP is live with API-key auth on /api/mcp. Root /mcp may be served as a compatibility alias on some deployments, but public clients should use the API-base path. Do not describe it as OAuth-ready until discovery and token flow are validated."
    },
    {
      "id": "mcp-launcher",
      "publicName": "Official MCP launcher",
      "state": "experimental",
      "releaseState": "blocked",
      "audience": "Codex, Claude Code, Cursor, Cline, and other desktop MCP clients",
      "entrypoint": "undecided: @mezcal/mcp or @mezcal/cli mcp serve --transport remote",
      "auth": "MEZCAL_API_KEY environment variable passed by the host client",
      "scope": [
        "one-command MCP onboarding",
        "generated client config snippets",
        "packaged launcher smoke"
      ],
      "evidence": [
        "webapp/apps/docs/content/docs/ai/mcp-quickstart.mdx",
        "rust-exp/scripts/tester-mcp-remote-smoke.sh",
        "rust-exp/scripts/release-mcp-remote-smoke.sh"
      ],
      "checks": [
        "packaged launcher smoke, not cargo-run fallback",
        "client config examples for Codex and Claude Code"
      ],
      "blockers": [
        "package name decision: issue #141 requests @mezcal/mcp, repo currently ships @mezcal/cli",
        "packaged launcher smoke currently needs a non-cargo launcher path",
        "npm publishing access"
      ],
      "notes": "Keep this experimental until the package name, release artifacts, and packaged-launcher smoke are settled."
    }
  ]
}
