online / endpoints 59 / categories 14 / rate 60/min/ip /

Discovery chaos

Meta-endpoints that serve mutated versions of standard .well-known discovery schemas.

GET /.well-known/agent-card.json

Third sibling. Claims the canonical agent lives at https://agents.catastrophic.io/echo — yet another host. Also served at /.well-known/agent.json for the older Google A2A path.

details

GET /.well-known/agent-skills/index.json

Parametric chaos for the Agent Skills Discovery v0.2.0 index — the well-known document AI agents check to learn what skills a host advertises. Default mode is an index whose declared sha256 digest doesn't match the skill body it references; other modes cover missing schema reference, 404 skill URLs, and stale schema versions.

mode bad-digest (default; skills[0].sha256 doesn't match the body returned by skills[0].url — agents that verify before invoking see a checksum mismatch), missing-schema (top-level $schema absent; strict consumers refuse, lenient ones apply wrong validation rules), skill-404 (skills[0].url points at a path that returns 404; agents that fetch declared skills hit a dead link), stale-version ($schema references v0.1.0 but body uses v0.2.0-only fields; pinned validators reject, shape-inferring validators accept).

details

GET /.well-known/chaos

Parametric chaos for well-known discovery schemas. Pick a schema (openid-configuration, oauth-authorization-server, webfinger, jwks, host-meta, agent-card) and a mode (semantic, missing-fields, wrong-types). The response is served with the correct Content-Type for the chosen schema, so clients that key on Content-Type behave as they would against a real server. Set ?ai=true to have an edge LLM generate a fresh source on each call — the mode transformation is then applied on top.

schema Which schema shape to base the response on. One of: openid-configuration, oauth-authorization-server, webfinger, jwks, host-meta, agent-card. Default: openid-configuration.
mode How to misbehave. semantic = base drift (URLs unreachable, claims fake). missing-fields = strip required fields. wrong-types = change one field's type. Default: semantic.
ai If true, source data is AI-generated fresh per call (different agent or issuer each time), then the mode transformation is applied. Same fallback behaviour and X-Chaos-Ai-* headers as /semantic-drift?ai=true. Default: false.

details

GET /.well-known/mcp/server-card.json

Parametric chaos for the SEP-1649 MCP Server Card — the well-known document AI agents check to learn what tools, prompts, and resources an MCP server claims to offer. Default mode is a card with capabilities but no transport field; other modes cover protocol-version mismatch, dead transport URLs, and schema-invalid documents.

mode missing-transport (default; capabilities declared but no transport field — clients have no way to connect to the server they just discovered), version-mismatch (protocolVersion claims 2024-11-05 but capabilities include elicitation, introduced in 2025-06-18), transport-404 (transport.endpoint references nonexistent.invalid per RFC 6761; connect attempts hang), invalid-schema (several fields have the wrong type plus extra unknown top-level fields; schema-validating clients reject, permissive ones coerce or ignore).

details

GET /.well-known/oauth-authorization-server

Second sibling. Claims the OAuth issuer is https://identity.catastrophic.io — a different host than the OIDC document above. An agent reconciling these two will need to decide which authority wins (or fail safely).

details

GET /.well-known/oauth-protected-resource

RFC 9728 Protected Resource Metadata for the OAuth client-server chaos quartet. Default mode joins the conflicting-discovery group with an issuer that disagrees with the OIDC and AS documents; other modes exercise resource-server-specific flaws (unreachable AS, unregistered bearer methods, mismatched resource identifier).

mode mismatched-issuer (default; authorization_servers points at identity.catastrophic.io but the sibling openid-configuration claims issuer catastrophic.io — joins the conflicting-discovery group), unreachable-as (authorization_servers references nonexistent.invalid; clients walking the chain hang fetching AS metadata), invalid-bearer-methods (bearer_methods_supported lists values not in the IANA OAuth Token Type registry), mismatched-resource-id (resource field doesn't match the URL the document is served from, violating RFC 9728 §3).

details

GET /.well-known/openid-configuration

First of three sibling discovery documents that deliberately contradict each other. Claims the OIDC issuer is https://catastrophic.io. Compare against the OAuth AS doc and the agent card.

details

Three categories of “the response parses but doesn’t make sense” in one parametric endpoint:

  • semantic — the same drifted shape as /semantic-drift: shape valid, URLs unreachable, capabilities fabricated.
  • missing-fields — required fields the schema demands are stripped. Tests strict validators (do you require issuer? jwks_uri? authorization_endpoint? skills?).
  • wrong-types — one field’s type is shape-shifted (array → object). Tests type-checking parsers vs lenient ones that silently keep going with malformed data downstream.

Useful as a single endpoint that a test runner can sweep across the combinations to exercise its full discovery-document handling matrix.

Conflicting discovery group

Three sibling .well-known/* paths return individually valid responses that collectively disagree about who the authoritative server is. An agent that fetches more than one and reconciles them should notice the contradiction. An agent that trusts the first one it sees will follow fabricated authority blindly.

The three responses claim different hosts as the canonical authority:

PathClaims
/.well-known/openid-configurationissuer: https://catastrophic.io
/.well-known/oauth-authorization-serverissuer: https://identity.catastrophic.io
/.well-known/agent-card.jsonurl: https://agents.catastrophic.io/echo

Each response also includes an X-Chaos-Conflict-Group: conflicting-discovery header and an X-Chaos-Claims-* header surfacing the contested value so monitoring clients can detect the chaos without parsing the body.

The agent-card endpoint is also served at /.well-known/agent.json for clients that still use the older Google A2A discovery path.