{
  "$comment": "NOT A STANDARD, AND SAYING SO IS THE POINT. There is no .well-known convention for advertising an MCP server from a domain. The MCP specification's answer to 'what is this server' is the in-band server/discover RPC, which needs the URL you already have; a Server Card document is an active working-group proposal (SEP-2127, status Draft) whose experimental shape is GET <mcp-url>/server-card, not this path. This file is Trooth's own descriptor, published because a fixed address a person or an agent can guess is worth having, and it is named here so nobody cites it as a convention. The endpoint below is the real interface. Checked against modelcontextprotocol.io on 2026-09-15.",
  "name": "Trooth",
  "description": "The Trooth Network: one public, signed record per company, carrying its identity, products and demos, commercial terms, domain and marketing links, people, documents, security and privacy posture, AI practices, procurement terms and relationships. DNS says where a company is; this says who it is. Look up a company's record, take a live neutral read of a domain's public surface, verify a signed Trust Ledger Token, or ask about Trooth. Read-only, public data, no key. Trooth does not score, rate or rank companies.",
  "mcp": {
    "endpoint": "https://api.trooth.co/public/mcp",
    "transport": "streamable-http",
    "protocolVersion": "2026-07-28",
    "serverInfo": {
      "name": "trooth-mcp",
      "version": "1.1.0"
    },
    "authentication": "none",
    "$comment_authorization": "THIS IS NOT AN OAUTH METADATA DOCUMENT AND IT DOES NOT REPLACE ONE. It is a statement of state, published because the alternative is an absence somebody has to discover. The MCP specification makes an authorized HTTP server an OAuth 2.0 protected resource: it answers 401 with a WWW-Authenticate header naming its protected-resource metadata, publishes that metadata under RFC 9728, and the client discovers the authorization server from it under RFC 8414 and asks for a token bound to this resource under RFC 8707. None of that applies here, because this server takes no credential: the four tools read data already public to any browser. So there is no protected resource, no protected-resource metadata and no authorization server, and `protectedResourceMetadata` below is null rather than a URL nobody serves. WHERE IT WOULD HAVE TO LIVE, IF IT EVER EXISTS: RFC 9728 locates the document by the RESOURCE's origin, which for https://api.trooth.co/public/mcp is https://api.trooth.co/.well-known/oauth-protected-resource/public/mcp. That is the upstream Worker's origin. trooth.co, which serves this file, cannot answer a request to it, which is why `servedByThisOrigin` is false and why no oauth-protected-resource document is published beside this one. lib/mcp-authorization.ts derives every value here from this file and scripts/check-mcp-descriptor.mjs refuses a descriptor that advertises a flow its own authentication field says does not exist. Checked against modelcontextprotocol.io on 2026-09-19.",
    "authorization": {
      "state": "none",
      "resource": "https://api.trooth.co/public/mcp",
      "protectedResourceMetadata": null,
      "authorizationServers": [],
      "protectedResourceMetadataWouldBeAt": "https://api.trooth.co/.well-known/oauth-protected-resource/public/mcp",
      "servedBy": "https://api.trooth.co",
      "servedByThisOrigin": false,
      "specifications": {
        "protectedResourceMetadata": "RFC 9728",
        "authorizationServerMetadata": "RFC 8414",
        "resourceIndicators": "RFC 8707",
        "securityBestCurrentPractice": "RFC 9700",
        "oauth21": "draft-ietf-oauth-v2-1, an IETF Internet-Draft. Referenced by the MCP specification and not a finalized RFC."
      },
      "tokenChecks": [
        "issuer",
        "audience-or-resource",
        "expiry",
        "signature",
        "scopes",
        "client-context"
      ]
    },
    "tools": [
      "trooth_public_trust_profile",
      "trooth_outside_in_read",
      "trooth_verify",
      "trooth_ask"
    ],
    "resources": [
      "trooth://methodology",
      "trooth://provenance-labels",
      "trooth://verify-a-vendor",
      "trooth://what-a-call-sends"
    ],
    "prompts": [
      "vendor_trust_check",
      "verify_trust_token",
      "before_you_trust"
    ],
    "$comment": "The server negotiates 2026-07-28 and still answers every revision listed in supportedVersions, so a client on the older handshake keeps working. Checked against the live endpoint on 2026-09-16, immediately after deploy: initialize with protocolVersion 2025-06-18 negotiated 2025-06-18, and server/discover with the reserved _meta key returned resultType complete and the supportedVersions above. 2026-07-28 removed protocol-level sessions and the initialize handshake and added the required server/discover RPC; which era a request belongs to is decided by the presence of that _meta key, not by the version value, so an unknown future version is refused rather than silently served as an old one.",
    "supportedVersions": [
      "2026-07-28",
      "2025-06-18",
      "2025-03-26",
      "2024-11-05"
    ]
  },
  "openapi": "https://trooth.co/openapi.json",
  "verify": "https://trooth.co/verify/keys",
  "network": "https://trooth.co/network",
  "docs": "https://trooth.co/docs/agents",
  "policy": "https://trooth.co/llms.txt",
  "listings": {
    "chatgpt": "https://chatgpt.com/plugins/plugin_asdk_app_6a9361d2ee7481919a8c706c3ff5388f"
  },
  "icon": "https://trooth.co/app-icon-1024x1024.png",
  "registry": {
    "$comment": "THE CURRENT RECORD IS io.github.troothllc/trooth-network, AND THE PREVIOUS ONE IS io.github.trooth-eng/trooth-network (D-046). namespace names the current record and previousNamespace the superseded one, whose versions are marked deleted on the registry because the registry gives one remote URL to one record and counts every version not marked deleted, deprecated ones included. Up to 1.1.3 the official MCP Registry held this server as io.github.trooth-eng/trooth-network (the dated entries below say how it got there). io.github.* is the registry's GitHub-authenticated namespace, which is why no signing key and no DNS proof were ever needed. It was stale for a long time before that: the record had sat at 1.0.0 since 2026-08-30 with a repository URL under the organization trooth-llc, which is a 404 - the organization is troothllc - and the payload meant to replace it carried a 218-character description against the schema's limit of 100, so every attempt to refresh it would have been rejected. Version 1.0.0 is still listed as a superseded version and still shows that dead repository link; clients resolve isLatest. TWO VERSIONS, ON PURPOSE. publishedVersion is the registry record and runningVersion is the deployment, and on 2026-09-17 they stopped being the same number: the publish (founder action queue 16.5) was refused with 400 cannot-publish-duplicate-version because 1.1.0 was already on the registry, so the payload went out as 1.1.1 while the Worker kept reporting 1.1.0. The live run on 2026-09-19 read both back and recorded exactly that - registry manifest 1.1.1, serverInfo 1.1.0 - in docs/rebuild-package/PUBLIC_MCP_VERIFICATION.md. This file had said 1.1.0 for both since 2026-09-17. scripts/check-mcp-descriptor.mjs holds publishedVersion against the payload in mcp-server.json and runningVersion against serverInfo here, and tests/mcp-protocol-revision.test.mjs holds both against the live run, so neither can drift again without somebody being told. PREPARED AND NOT YET PUBLISHED, 2026-09-19. publishedVersion stays 1.1.1 because that is what the registry holds, measured against registry.modelcontextprotocol.io, which returns three records under this name: 1.0.0 deprecated with a statusMessage saying it is superseded, 1.1.0 active, and 1.1.1 active and flagged isLatest. pendingVersion is 1.1.2, the payload prepared for the next publish. The gate used to require publishedVersion and the payload's version to be equal, which is true only in the moment after a publish: between preparing a version and publishing it they legitimately differ, and forcing them equal would have meant either lying about the registry or holding the whole repository red until a founder click happened. A state a file cannot express is a state that gets hidden. PUBLISHED 2026-09-19 AND READ BACK. 1.1.2 is live, active and isLatest, carrying \"Trooth is an infrastructure & cybersecurity company providing Machine-Readable Trust.\" The registry now holds four records under this name: 1.0.0 deprecated, 1.1.0 and 1.1.1 active and no longer latest, 1.1.2 active and latest. pendingVersion and pendingReason are gone because the gap they declared has closed, which is exactly what the gate insists on the moment the two numbers agree again. runningVersion stays 1.1.0: that is the deployed Worker and it is a different fact. PREPARED AND NOT YET PUBLISHED, 2026-09-23. 1.1.3 is prepared in mcp-server.json and is not yet published: it changes the description from \"infrastructure & cybersecurity\" to the house company introduction, \"Trooth is an infrastructure and cybersecurity company providing Machine-Readable Trust.\", so the registry says what every Trooth page says, and publishing it is a GitHub device sign-in as trooth-eng, which only the account holder can do. publishedVersion stays 1.1.2 until the registry serves 1.1.3. PUBLISHED 2026-09-25 AND READ BACK. 1.1.3 is live and the registry marks it latest, carrying the house company introduction. pendingVersion and pendingReason are gone because the gap they declared has closed. PREPARED AND NOT YET PUBLISHED, 2026-09-26 (D-046). 1.1.4 moves the record to the organization's name, io.github.troothllc/trooth-network. trooth-eng is a personal GitHub account, so every publish under the previous name needed that one person at a device sign-in, and the registry's GitHub OIDC sign-in grants a workflow only io.github.<repository owner>/*, which for troothllc/trooth-mcp is io.github.troothllc/*. The workflow publish-registry.yml in that repository publishes 1.1.4 with no secret. publishedVersion stays 1.1.3, which the registry serves under previousNamespace, until the live run reads 1.1.4 back under namespace; until then the checks read the registry under either name. The first publish, 2026-09-26, was refused because the previous record's versions still held https://api.trooth.co/public/mcp; so they are marked deleted, with a message naming the current record, before the publish, and restored if it fails. PUBLISHED 2026-09-26 AND READ BACK (D-046). 1.1.4 is live under io.github.troothllc/trooth-network and the registry marks it latest. io.github.trooth-eng/trooth-network is the previous record, superseded and still listed. pendingVersion and pendingReason are gone because the gap they declared has closed.",
    "serverJson": "https://trooth.co/.well-known/mcp-server.json",
    "namespace": "io.github.troothllc/trooth-network",
    "previousNamespace": "io.github.trooth-eng/trooth-network",
    "published": true,
    "publishedAt": "2026-09-19",
    "publishedVersion": "1.1.4",
    "runningVersion": "1.1.0",
    "recordUrl": "https://registry.modelcontextprotocol.io/v0/servers?search=trooth",
    "checked": "2026-09-19"
  }
}
