{"ok":true,"data":{"canonical":{"tools":76,"resources":5,"prompts":22,"categories":5},"canonicalCounts":{"schemaVersion":"platphorm.mcp.counts.v1","generatedAt":"2026-08-28T06:35:54.250Z","authoritativeSource":"mixed","tools":{"callable":76,"public":70,"protected":6,"generatedDraft":16,"degraded":0,"byCategory":{"external":1,"github":4,"handoff":4,"mcp":34,"network":33}},"resources":{"total":5,"public":5,"protected":0,"degraded":0},"prompts":{"total":22,"public":22,"protected":0,"degraded":0},"sites":{"rootGraph":322,"storageRegistered":0,"mcpEnabled":317,"federatedServers":317},"integrations":{"total":16,"active":16,"degraded":0},"drift":[{"surface":"dashboard.tools","observed":76,"expected":76,"kind":"tools","status":"match","message":"Dashboard callable tools use canonical in-process registry counts."},{"surface":"/api/health.platform.tools","observed":76,"expected":76,"kind":"tools","status":"match","message":"Health reports the canonical callable tool count."},{"surface":"/api/v1/registry/counts.canonical.tools","observed":76,"expected":76,"kind":"tools","status":"match","message":"Registry counts reports the same callable tool count as tools/list."},{"surface":"/api/mcp tools/list","observed":76,"expected":76,"kind":"tools","status":"match","message":"tools/list is authoritative for callable tools."},{"surface":"/api/mcp resources/list","observed":5,"expected":5,"kind":"resources","status":"match","message":"resources/list is authoritative for public resources."},{"surface":"/api/mcp prompts/list","observed":22,"expected":22,"kind":"prompts","status":"match","message":"prompts/list is authoritative for public prompts."},{"surface":"/.well-known/mcp.json.tools","observed":76,"expected":76,"kind":"tools","status":"match","message":"The MCP well-known manifest must use canonical callable tool counts."},{"surface":"/llms.txt.tools","observed":76,"expected":76,"kind":"tools","status":"match","message":"LLMS summary must use canonical callable tool counts."},{"surface":"/openapi.yaml.x-mcp.counts.tools","observed":76,"expected":76,"kind":"tools","status":"match","message":"OpenAPI extension counts must use canonical callable tool counts."},{"surface":"storage.registeredSites","observed":0,"expected":322,"kind":"sites","status":"stale","message":"Storage registered-site count is dependency metadata only and is not canonical when it differs from the root graph."}]},"countValues":{"tools":{"callable":{"value":76,"source":"in_process_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":true,"includesDegradedTools":false},"public":{"value":70,"source":"in_process_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"protected":{"value":6,"source":"in_process_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"generatedDraft":{"value":16,"source":"generated_factory_drafts","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":false,"derived":true,"includesGeneratedDraftTools":true,"includesProtectedTools":false,"includesDegradedTools":false},"degraded":{"value":0,"source":"generated_factory_drafts","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":false,"derived":true,"includesGeneratedDraftTools":true,"includesProtectedTools":false,"includesDegradedTools":true},"byCategory":{"external":{"value":1,"source":"in_process_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"github":{"value":4,"source":"in_process_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"handoff":{"value":4,"source":"in_process_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"mcp":{"value":34,"source":"in_process_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"network":{"value":33,"source":"in_process_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false}}},"resources":{"total":{"value":5,"source":"in_process_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"public":{"value":5,"source":"in_process_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"protected":{"value":0,"source":"in_process_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"degraded":{"value":0,"source":"in_process_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false}},"prompts":{"total":{"value":22,"source":"in_process_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"public":{"value":22,"source":"in_process_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"protected":{"value":0,"source":"in_process_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"degraded":{"value":0,"source":"in_process_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false}},"sites":{"rootGraph":{"value":322,"source":"https://platphormnews.com/api/network/graph","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"storageRegistered":{"value":0,"source":"storage_snapshot","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":false,"derived":true,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"mcpEnabled":{"value":317,"source":"https://platphormnews.com/api/network/graph#stats.mcpEnabledSites","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"federatedServers":{"value":317,"source":"https://platphormnews.com/api/network/graph#stats.mcpEnabledSites","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false}},"integrations":{"total":{"value":16,"source":"suite_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"active":{"value":16,"source":"suite_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"degraded":{"value":0,"source":"suite_registry","generatedAt":"2026-08-28T06:35:54.252Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false}}},"phase2":{"tools":76,"resources":5,"prompts":22,"categories":5,"registeredSites":322,"generatedTools":16,"draftTools":16,"protectedTools":6,"publicTools":70,"degradedTools":0,"integrations":16,"policyPlatforms":12,"mcpClientsSupported":5,"evals":16,"sandboxTests":16,"browserOpsTests":16},"network":{"registeredSites":322,"nodeCount":372,"edgeCount":415,"source":"https://platphormnews.com/api/network/graph","status":"active"},"storage":{"registeredSites":0,"redis":{"status":"not_applicable","required":false,"role":"retired_legacy_product_store","observedConnection":{"status":"retired","canonical":false,"note":"Redis is no longer read, written, or probed by the production MCP runtime."}},"federatedRegistry":{"configured":true,"backend":"cloudflare-d1-r2","schema":"d1+r2","authMode":"server_side_platform_key","contractSource":"mcp.platphormnews.com","cache":{"configured":false,"backend":"retired-redis"},"status":"active","latestSnapshot":null,"durable":{"backend":"cloudflare-d1-r2","status":"active","latestSnapshotAt":"2026-08-26T16:04:37.229Z"},"legacyPostgresql":{"status":"not_probed","latestSnapshotAt":null},"legacyRedis":{"status":"retired","latestSnapshotAt":null}}},"federation":{"localCallableTools":76,"remoteToolsListedSeparately":true,"remoteToolsAvailableAsNamespacedAliases":true,"networkToolCallsRequire":"PLATPHORM_API_KEY","federatedToolsEndpoint":"/api/v1/registry/federated-tools?live=1","federatedToolsQuery":"/api/v1/registry/tools?scope=federated&live=1","policy":"The canonical tools count remains local handler state. Persisted source-owned network tools are appended to tools/list as paginated network__ aliases and authenticated calls are delegated to their real owners; they are never counted or represented as local handlers."},"reconciliation":{"status":"reconciled","explanation":"Dashboard, health, MCP metadata, llms, OpenAPI, and registry routes derive local handler counts from the same canonical MCP registry. Paginated native MCP, OpenAPI, and root-graph surface aliases remain separately source-labeled from the persisted federation snapshot.","surfaces":["dashboard","/api/health","/api/v1/health","/api/mcp tools/list","/api/mcp resources/list","/api/mcp prompts/list","/.well-known/mcp.json","/llms.txt","/llms-full.txt","/llms-index.json","/openapi.yaml","/openapi.json","/api/docs"]},"drift":[{"surface":"dashboard.tools","observed":76,"expected":76,"kind":"tools","status":"match","message":"Dashboard callable tools use canonical in-process registry counts."},{"surface":"/api/health.platform.tools","observed":76,"expected":76,"kind":"tools","status":"match","message":"Health reports the canonical callable tool count."},{"surface":"/api/v1/registry/counts.canonical.tools","observed":76,"expected":76,"kind":"tools","status":"match","message":"Registry counts reports the same callable tool count as tools/list."},{"surface":"/api/mcp tools/list","observed":76,"expected":76,"kind":"tools","status":"match","message":"tools/list is authoritative for callable tools."},{"surface":"/api/mcp resources/list","observed":5,"expected":5,"kind":"resources","status":"match","message":"resources/list is authoritative for public resources."},{"surface":"/api/mcp prompts/list","observed":22,"expected":22,"kind":"prompts","status":"match","message":"prompts/list is authoritative for public prompts."},{"surface":"/.well-known/mcp.json.tools","observed":76,"expected":76,"kind":"tools","status":"match","message":"The MCP well-known manifest must use canonical callable tool counts."},{"surface":"/llms.txt.tools","observed":76,"expected":76,"kind":"tools","status":"match","message":"LLMS summary must use canonical callable tool counts."},{"surface":"/openapi.yaml.x-mcp.counts.tools","observed":76,"expected":76,"kind":"tools","status":"match","message":"OpenAPI extension counts must use canonical callable tool counts."},{"surface":"storage.registeredSites","observed":0,"expected":322,"kind":"sites","status":"stale","message":"Storage registered-site count is dependency metadata only and is not canonical when it differs from the root graph."}],"updatedAt":"2026-08-28T06:07:57.250Z"},"meta":{"generatedAt":"2026-08-28T06:35:54.252Z","traceId":"07cb1e9d67e1074c6653f1924407ee3f","degraded":false,"source":"registry"},"warnings":[],"errors":[]}