llms-txtmarkdown with an H1 and substantive content
The 10-point checklist
| # | Check | Verdict |
|---|---|---|
| 01 | llms.txt is served and agent-actionable | PASS |
| 02 | /.well-known/agents.json capability card parses | PASS |
| 03 | /icp.json self-classification surface | PASS |
| 04 | root content-negotiates (curl → markdown, browser → HTML, agent JSON → JSON/non-HTML) | PASS |
| 05 | machine-readable API contract (OpenAPI) is published | PASS |
| 06 | MCP interface declared with transport + tools | PASS |
| 07 | at least one declared endpoint answers 2xx with no key | PASS |
| 08 | payment boundaries answer as structured 402 offers | FAIL |
| 09 | surfaces cross-reference each other (linkset) | PASS |
| 10 | attestation/identity ladder is declared | FAIL |
Check details
llms-txtmarkdown with an H1 and substantive content
agents-jsonvalid JSON; name="epcis.dev", 5 http endpoint(s) declared
icp-jsonvalid JSON with agent_classes — an agent can self-classify
content-negotiationAccept: */* got non-HTML text; Accept: text/html got HTML; Accept: application/json got a parseable JSON body
openapiOpenAPI parses; 7 path(s), 3 keyless GET candidate(s)
mcp-declaredmcp: streamable-http with tools [capture, query, get_event, translate, resolve, subscribe] (presence-grade; stdio not spawned)
mcp-oauth-protected-resourcekeyless MCP (No-ask Zone, AXP Clause 7) — the unauthenticated MCP GET returned 200 with no auth challenge; OAuth 2.1 is not required for a keyless-first-value surface
mcp-oauth-as-metadatakeyless MCP (No-ask Zone, AXP Clause 7) — the unauthenticated MCP GET returned 200 with no auth challenge; OAuth 2.1 is not required for a keyless-first-value surface
mcp-pkcekeyless MCP (No-ask Zone, AXP Clause 7) — the unauthenticated MCP GET returned 200 with no auth challenge; OAuth 2.1 is not required for a keyless-first-value surface
mcp-oauth-dcrkeyless MCP (No-ask Zone, AXP Clause 7) — the unauthenticated MCP GET returned 200 with no auth challenge; OAuth 2.1 is not required for a keyless-first-value surface
mcp-oauth-resource-indicatorskeyless MCP (No-ask Zone, AXP Clause 7) — the unauthenticated MCP GET returned 200 with no auth challenge; OAuth 2.1 is not required for a keyless-first-value surface
mcp-www-authenticatekeyless MCP (No-ask Zone, AXP Clause 7) — the unauthenticated MCP GET returned 200 with no auth challenge; OAuth 2.1 is not required for a keyless-first-value surface
aap-discoveryno /.well-known/agent-configuration document (2xx) — target does not claim the Agent Auth Protocol
authmd-agent-identityno authorization-server metadata resolved (no MCP/OAuth AS declared) — nothing advertises an agent_auth block
keyless-flow3/3 sampled endpoint(s) answered 2xx keyless (seed 1040120266)
offers-402no monetization.offers declared — payment boundaries are dead ends, not offers — got: status 200
linksetLink header present on root
attestationno attestation or identity ladder declared on agents.json or icp.json — got: status 200
schema-conformance1 sampled response(s) conform to their OpenAPI schemas
claims-honestyevery probed claimed endpoint exists (no 404/5xx)
contract-difflive surface conforms to every declared contract; 7 additive deviation(s) (undeclared field/endpoint — live has more than declared, non-breaking)
mcp-server-jsonno server.json manifest served at the well-known/declared path — target is not claiming MCP-registry publishability
mcp-remote-liveno server.json manifest — no registry remote to resolve
mcp-registry-ownershipno server.json manifest — no namespace ownership to prove
mcp-registry-presenceno server.json manifest — registry presence not applicable
mcp-ui-resource-linkageno MCP-UI declared (no tool advertises a ui:// template) — informational not-ready, not a failure
mcp-ui-self-containedno MCP-UI declared (no tool advertises a ui:// template) — informational not-ready, not a failure
mcp-ui-envelope-hygieneno MCP-UI declared (no tool advertises a ui:// template) — informational not-ready, not a failure
mcp-ui-register-parityno MCP-UI declared (no tool advertises a ui:// template) — informational not-ready, not a failure
mcp-ui-host-renderno MCP-UI declared (no tool advertises a ui:// template) — informational not-ready, not a failure
ui-stream-transportno UI-message-stream face declared (no interfaces.uiMessageStream) — informational not-ready, not a failure
ui-stream-framingno UI-message-stream face declared (no interfaces.uiMessageStream) — informational not-ready, not a failure
ui-stream-part-shapesno UI-message-stream face declared (no interfaces.uiMessageStream) — informational not-ready, not a failure
ui-stream-envelope-hygieneno UI-message-stream face declared (no interfaces.uiMessageStream) — informational not-ready, not a failure
ui-stream-parityno UI-message-stream face declared (no interfaces.uiMessageStream) — informational not-ready, not a failure
digital-link-resolverno Digital Link interface declared (agents.json `interfaces.digitalLink` absent) — the interface is OPTIONAL and this card does not claim it, so nothing was fetched and nothing is judged; under a pinned must:pass this fails closed
published-test-suiteno published test suite interface declared (agents.json `interfaces.testSuite` absent) — the interface is OPTIONAL and this card does not claim it, so nothing was fetched and nothing is judged; under a pinned must:pass this fails closed
machine-legible-homehome machine-legible under all three machine-class profiles; 3 sampled typed bodies non-HTML
conneg-accepttext/html → HTML, application/json → JSON, text/markdown → markdown; JSON face is JSON-LD ($context/@context present)
conneg-client-class*/* defaults: bare client → JSON, Sec-Fetch navigation → HTML, agent User-Agent → markdown
conneg-alternatesevery face response advertises both sibling faces via Link rel="alternate" + type
conneg-forced-faceall three Link-advertised face addresses serve their face under a contradictory Accept — the address wins
card-interfaces-linkedcard names 5 http endpoint(s) + mcp; card ↔ openapi ↔ llms.txt mutually cross-linked
probe-manifestprobe manifest declares every required channel (observed pricing model: free); all entries same-origin GET on contract-declared paths
card-interfaces-linkedcard names interfaces (http/mcp) and cross-links llms.txt <-> agents.json <-> openapi
Attestation & evidence
Verify this yourself
Re-run the checks over the bundle and you must get this same grade, or the report is forged or the verifier version changed.