{
  "specVersion": "1.0",
  "host": {
    "displayName": "Gaffer",
    "identifier": "https://gaffer.sh"
  },
  "entries": [
    {
      "identifier": "urn:air:gaffer.sh:mcp:server",
      "displayName": "Gaffer MCP Server",
      "type": "application/json",
      "url": "https://gaffer.sh/.well-known/mcp/server-card.json",
      "description": "Transport is stdio via `npx -y @gaffer-sh/mcp`. There is no hosted or remote MCP endpoint.",
      "representativeQueries": [
        "which of my tests are flaky",
        "give my AI assistant memory of my test history",
        "install the Gaffer MCP server in Claude Code"
      ]
    },
    {
      "identifier": "urn:air:gaffer.sh:api:openapi-v1",
      "displayName": "Gaffer REST API (v1)",
      "type": "application/yaml",
      "url": "https://gaffer.sh/openapi/v1.yaml",
      "representativeQueries": [
        "upload junit test results from CI",
        "what endpoints does the Gaffer API expose",
        "get a project's test run history over HTTP"
      ]
    },
    {
      "identifier": "urn:air:gaffer.sh:api:catalog",
      "displayName": "Gaffer API Catalog",
      "type": "application/linkset+json",
      "url": "https://gaffer.sh/.well-known/api-catalog",
      "representativeQueries": [
        "find Gaffer's API documentation and status endpoints",
        "what machine-readable indexes does Gaffer publish"
      ]
    },
    {
      "identifier": "urn:air:gaffer.sh:skills:index",
      "displayName": "Gaffer Agent Skills Index",
      "type": "application/json",
      "url": "https://gaffer.sh/.well-known/agent-skills/index.json",
      "representativeQueries": [
        "install the Gaffer CLI agent skill",
        "what agent skills does Gaffer publish"
      ]
    },
    {
      "identifier": "urn:air:gaffer.sh:docs:agents-md",
      "displayName": "Gaffer AGENTS.md",
      "type": "text/markdown",
      "url": "https://gaffer.sh/AGENTS.md",
      "representativeQueries": [
        "how do I use Gaffer from a coding agent",
        "what CLI commands does Gaffer provide for CI"
      ]
    },
    {
      "identifier": "urn:air:gaffer.sh:docs:llms-txt",
      "displayName": "Gaffer llms.txt",
      "type": "text/plain",
      "url": "https://gaffer.sh/llms.txt",
      "representativeQueries": [
        "summarize what Gaffer does for an LLM",
        "index of Gaffer documentation for an AI agent"
      ]
    },
    {
      "identifier": "urn:air:gaffer.sh:auth:auth-md",
      "displayName": "Gaffer Agent Auth Guide",
      "type": "text/markdown",
      "url": "https://gaffer.sh/auth.md",
      "description": "Documents both agent auth flows: GitHub Actions OIDC token exchange (RFC 8693) for CI, and the RFC 8628 device code grant for `gaffer login`. Links the RFC 9728 protected-resource metadata and RFC 8414 authorization-server metadata this catalog also lists.",
      "representativeQueries": [
        "how do I get a Gaffer API key for CI",
        "how does an agent authenticate to the Gaffer API"
      ]
    },
    {
      "identifier": "urn:air:gaffer.sh:auth:protected-resource-metadata",
      "displayName": "Gaffer OAuth Protected-Resource Metadata",
      "type": "application/json",
      "url": "https://gaffer.sh/.well-known/oauth-protected-resource",
      "description": "RFC 9728 protected-resource metadata for app.gaffer.sh, mirrored on gaffer.sh for agents that only crawl the marketing domain. Lists the authorization server and supported scopes; app.gaffer.sh serves the canonical copy plus the RFC 8414 authorization-server metadata at /.well-known/oauth-authorization-server (not mirrored here, since its issuer must equal the token-issuing host).",
      "representativeQueries": [
        "how does an agent discover Gaffer's OAuth authorization server",
        "what scopes does the Gaffer API support"
      ]
    }
  ]
}
