{
  "schemaVersion": 1,
  "project": "SwissProof",
  "operator": "Operal AG",
  "provider": {
    "name": "Urstamm AG",
    "url": "https://www.urstamm.ch",
    "type": "member",
    "memberOf": {
      "name": "Verein Nodebetreiber der SwissDLT",
      "alternateName": "Association of SwissDLT Node Operators",
      "url": "https://swissdlt.tech/about.html#members"
    }
  },
  "chainId": 94,
  "updatedAt": "2026-11-08T08:43:23.901Z",
  "publicOrigin": "https://timestamp.swissdlt.tech",
  "status": "prepared-for-submission",
  "mcp": {
    "url": "https://timestamp.swissdlt.tech/mcp",
    "transport": "streamable-http",
    "transportDetail": "JSON-RPC 2.0 over HTTP POST with JSON responses; no SSE stream and no session header",
    "protocolVersion": "2026-07-28",
    "supportedProtocolVersions": [
      "2026-07-28",
      "2025-11-25",
      "2025-06-18"
    ],
    "negotiation": "initialize echoes 2025-11-25 or 2025-06-18 when requested; any other or missing version gets 2026-07-28. Notifications get HTTP 202; an unsupported MCP-Protocol-Version header gets HTTP 400.",
    "auth": "none",
    "healthUrl": "https://timestamp.swissdlt.tech/api/v1/health",
    "openapiUrl": "https://timestamp.swissdlt.tech/api/v1/openapi.json",
    "toolCount": 9,
    "readToolCount": 6,
    "writeOrQuotaToolCount": 3,
    "clientTransactions": false,
    "serverSideAnchoring": "The service signs and broadcasts its own zero-value anchor self-transfers from the anchor wallet. Agents never sign or send transactions.",
    "productionVerifiedAt": "2026-11-08T08:43:23.901Z"
  },
  "thirdfy": {
    "manifestUrl": "https://timestamp.swissdlt.tech/thirdfy-app.json",
    "wellKnownManifestUrl": "https://timestamp.swissdlt.tech/.well-known/thirdfy-app.json",
    "appId": "swissdlt_swissproof",
    "kind": "data",
    "manifestVersion": 2,
    "readActionCount": 6,
    "submitted": false,
    "listed": false,
    "certified": false,
    "writeManifestPublished": false,
    "officialSchemaValidation": "blocked-official-schema-http-404",
    "officialSchemaCheckedAt": "2026-11-07T23:31:12Z",
    "localGeneratorValidation": "passed",
    "readBillingTier": "read_offchain",
    "readCredits": 0.045,
    "creditsObservedAt": "2026-11-07T23:31:14Z",
    "creditsSource": "https://api.thirdfy.com/api/v1/agent/actions/catalog",
    "mcpResultSchema": "CallToolResult: content + structuredContent (the server sends no isError field), excluding the outer JSON-RPC envelope",
    "thirdfyResultMappingConfirmed": false,
    "productionFixtureValidation": "passed",
    "productionFixtureCount": 6,
    "productionFixturesObservedAt": "2026-11-08T08:43:23.901Z",
    "productionFixtureScope": "Real production MCP JSON-RPC calls of the six read tools; replies checked against this package's output schemas. Not Thirdfy adapter mapping or certification."
  },
  "gates": [
    {
      "id": "official-schema",
      "scope": "reads",
      "status": "pending",
      "detail": "The advertised machine schema returned HTTP 404 again on 2026-11-07T23:31:12Z, byte-identical to the earlier observation. Generator checks follow the published reference; they are not official JSON Schema validation.",
      "source": "https://api.thirdfy.com/schemas/thirdfy-app.v1.json"
    },
    {
      "id": "mcp-protocol-version-negotiation",
      "scope": "reads",
      "status": "resolved",
      "detail": "initialize now negotiates 2025-11-25 and 2025-06-18 (checked against their specification for what the server uses). The official MCP TypeScript SDK 1.32.2 connected to production at 2026-11-07T23:51:20.364Z, negotiated 2025-11-25, listed 9 tools and called chain_status without client errors. Before the change it refused protocol 2026-07-28.",
      "observedAt": "2026-11-07T23:51:20.364Z"
    },
    {
      "id": "protocol-label-2026-07-28",
      "scope": "reads",
      "status": "overstated-label-kept",
      "detail": "The server answers protocol 2026-07-28 by default but does not implement that revision: it has no server/discover (a MUST there), its results carry no resultType, tools/list carries no ttlMs or cacheScope, and it still uses the initialize and ping handshake that 2026-07-28 removed. Its behaviour matches 2025-11-25 and 2025-06-18. The label is kept unchanged on the operator's instruction.",
      "source": "https://modelcontextprotocol.io/specification/2026-07-28/changelog",
      "observedAt": "2026-11-07T23:43:52Z"
    },
    {
      "id": "tool-error-shape",
      "scope": "reads",
      "status": "documented",
      "detail": "Not-found, validation, quota and funding failures are JSON-RPC errors (-32602, -32029, -32042). MCP 2025-11-25 prefers tool execution errors (isError: true) for validation and business errors; this is SHOULD-level guidance and the shapes are kept unchanged."
    },
    {
      "id": "mcp-adapter-mapping",
      "scope": "reads",
      "status": "pending-thirdfy-network-check",
      "detail": "Confirm whether Thirdfy validates the full CallToolResult, unwraps structuredContent or parses the text item. The draft describes the full result the server returns. Errors arrive as JSON-RPC errors, not as isError results."
    },
    {
      "id": "category-classification",
      "scope": "reads",
      "status": "pending-reviewer",
      "detail": "No observed shelf fits timestamps and evidence. The draft uses research, as the SwissDLT Bridge package does."
    },
    {
      "id": "shared-quota-principal",
      "scope": "reads",
      "status": "documented",
      "detail": "The six reads use no quota. get_swissproof_quota reports the principal SwissProof sees, which is Thirdfy's upstream identity (its MCP client ID or IP address), not the end user."
    },
    {
      "id": "thirdfy-review",
      "scope": "reads-and-writes",
      "status": "not-submitted",
      "detail": "Account submission, appId ownership, static and network checks, human review and test-agent gates have not been performed.",
      "submissionUrl": "https://thirdfy.com/partner/new"
    },
    {
      "id": "writes-excluded",
      "scope": "writes",
      "status": "not-applicable",
      "detail": "proof_submit uses quota and stores a receipt; anchor_run and proof_upgrade write state and can broadcast anchors from the service wallet. They are API actions, not contract calls from an agent wallet, so Thirdfy's contract_call venue model does not describe them. See write-candidates.json."
    },
    {
      "id": "chain-94-in-catalog",
      "scope": "information",
      "status": "not-present",
      "detail": "No action in the observed public catalog lists chain 94. Read-only remote MCP does not depend on chain-94 wallet support.",
      "source": "https://api.thirdfy.com/api/v1/agent/actions/catalog",
      "observedAt": "2026-11-07T23:31:14Z"
    }
  ],
  "contractsUrl": "https://timestamp.swissdlt.tech/.well-known/contracts.json",
  "llmsUrl": "https://timestamp.swissdlt.tech/llms.txt",
  "docsReference": "https://docs.thirdfy.com/documentation/protocols/thirdfy-app-json"
}
