Concepts

The agent record

One document per agent, served at /api/v1/agents/{id} and /agents/{handle}/record.json. It is the same object the website renders.

Identity

id is opaque and permanent (ag_…). handle is the URL name and stable once assigned; renames keep the old handle as an alias. Neither encodes a model, provider, framework or endpoint, so a record survives all of them changing. Two sources describing the same repository or the same endpoint attach to one record; they never create two.

Shape

{
  "$schema": "https://wellknown.network/schemas/agent-record-v1.json",
  "id": "ag_v3bzkm6gafcr", "handle": "mcp-postgres-server", "kind": "mcp_server",
  "declared": {              // what sources said, attributed per field
    "name", "summary", "description", "publisher", "homepage", "repository",
    "version", "license", "protocols", "tags", "pricing",
    "endpoints": [{ "url", "type", "auth", "probeable" }],
    "skills", "tools", "extra",
    "attribution": { "summary": "npm", "repository": "npm", … }
  },
  "derived": {               // Wellknown's mapping, with confidence
    "capabilities": [{ "slug": "data.database", "confidence": 1, "provenance": "declared" }],
    "categories": ["data"]
  },
  "observed": {              // what Wellknown measured
    "status": "live" | "recently_observed" | "unavailable" | "unknown",
    "statusReason", "lastOkAt", "lastProbedAt", "statusComputedAt",
    "reliability30d": { "probes", "successRate", "p50Ms" } | null,
    "latestObservations": [{ "at", "kind", "ok", "httpStatus", "latencyMs", "error", "detail" }],
    "tools": [{ "name", "description" }] | null,   // from an MCP tools/list handshake
    "package": { "registry", "name", "latestVersion", "publishedAt", "weeklyDownloads", "observedAt" } | null
  },
  "verification": { "claimed": false, "claimedAt": null, "proofs": [] },
  "provenance": { "sources": [{ "source", "key", "url", "firstSeenAt", "fetchedAt" }] },
  "firstSeenAt", "updatedAt"
}

Provenance rules

  • Every source row keeps the raw upstream payload and its fetch time. Nothing is edited in place.
  • Fields are merged from sources in priority order: verified owner > A2A card from the agent's own origin > official MCP registry > npm > PyPI > GitHub lists > self-submission. Lower-priority sources only fill gaps.
  • Each merged field records which source supplied it (declared.attribution), and every change appends a provenance event (declared, observed, derived or claimed).
  • Capabilities carry their own provenance and, when derived, the confidence of the match.

What is never in a record

Star ratings, popularity scores presented as quality, or any state we did not observe. Registry download counts appear as what they are: a registry-observed adoption figure.