{"ok":true,"data":{"canonical":{"tools":140,"resources":16,"prompts":23,"categories":16},"canonicalCounts":{"schemaVersion":"platphorm.mcp.counts.v1","generatedAt":"2026-05-27T13:01:55.733Z","authoritativeSource":"mixed","tools":{"callable":140,"public":101,"protected":39,"generatedDraft":11,"degraded":11,"byCategory":{"Analytics":7,"Categories":4,"Content":8,"Deployments":3,"DynamoDB":1,"FAQ":4,"Federation":1,"GitHub":4,"Infrastructure":4,"MCP Federation":6,"Network":14,"Registry":55,"Search":3,"Security":2,"Sites":21,"Verticals":3}},"resources":{"total":16,"public":16,"protected":0,"degraded":0},"prompts":{"total":23,"public":23,"protected":0,"degraded":0},"sites":{"rootGraph":24,"storageRegistered":0,"mcpEnabled":2,"federatedServers":2},"integrations":{"total":11,"active":0,"degraded":11},"drift":[{"surface":"dashboard.tools","observed":140,"expected":140,"kind":"tools","status":"match","message":"Dashboard callable tools use canonical in-process registry counts."},{"surface":"/api/health.platform.tools","observed":140,"expected":140,"kind":"tools","status":"match","message":"Health reports the canonical callable tool count."},{"surface":"/api/v1/registry/counts.canonical.tools","observed":140,"expected":140,"kind":"tools","status":"match","message":"Registry counts reports the same callable tool count as tools/list."},{"surface":"/api/mcp tools/list","observed":140,"expected":140,"kind":"tools","status":"match","message":"tools/list is authoritative for callable tools."},{"surface":"/api/mcp resources/list","observed":16,"expected":16,"kind":"resources","status":"match","message":"resources/list is authoritative for public resources."},{"surface":"/api/mcp prompts/list","observed":23,"expected":23,"kind":"prompts","status":"match","message":"prompts/list is authoritative for public prompts."},{"surface":"/.well-known/mcp.json.tools","observed":140,"expected":140,"kind":"tools","status":"match","message":"The MCP well-known manifest must use canonical callable tool counts."},{"surface":"/llms.txt.tools","observed":140,"expected":140,"kind":"tools","status":"match","message":"LLMS summary must use canonical callable tool counts."},{"surface":"/openapi.yaml.x-mcp.counts.tools","observed":140,"expected":140,"kind":"tools","status":"match","message":"OpenAPI extension counts must use canonical callable tool counts."},{"surface":"storage.registeredSites","observed":0,"expected":24,"kind":"sites","status":"stale","message":"Storage registered-site count is dependency metadata only and is not canonical when it differs from the root graph."},{"surface":"rootGraph.registeredSites","observed":24,"expected":24,"kind":"sites","status":"unknown","message":"Root graph was unavailable or degraded; registered-site count came from labeled fallback."}]},"countValues":{"tools":{"callable":{"value":140,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":true,"includesDegradedTools":false},"public":{"value":101,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"protected":{"value":39,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"generatedDraft":{"value":11,"source":"generated_factory_drafts","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":false,"derived":true,"includesGeneratedDraftTools":true,"includesProtectedTools":false,"includesDegradedTools":true},"degraded":{"value":11,"source":"generated_factory_drafts","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":false,"derived":true,"includesGeneratedDraftTools":true,"includesProtectedTools":false,"includesDegradedTools":true},"byCategory":{"Analytics":{"value":7,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Categories":{"value":4,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Content":{"value":8,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Deployments":{"value":3,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"DynamoDB":{"value":1,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"FAQ":{"value":4,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Federation":{"value":1,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"GitHub":{"value":4,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Infrastructure":{"value":4,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"MCP Federation":{"value":6,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Network":{"value":14,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Registry":{"value":55,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Search":{"value":3,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Security":{"value":2,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Sites":{"value":21,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Verticals":{"value":3,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false}}},"resources":{"total":{"value":16,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"public":{"value":16,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"protected":{"value":0,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"degraded":{"value":0,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false}},"prompts":{"total":{"value":23,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"public":{"value":23,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"protected":{"value":0,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"degraded":{"value":0,"source":"in_process_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false}},"sites":{"rootGraph":{"value":24,"source":"bootstrap-fallback","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":true,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"storageRegistered":{"value":0,"source":"storage_snapshot","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":true,"authoritative":false,"derived":true,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"mcpEnabled":{"value":2,"source":"curated_mcp_endpoint_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":false,"derived":true,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"federatedServers":{"value":2,"source":"curated_mcp_endpoint_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":false,"derived":true,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false}},"integrations":{"total":{"value":11,"source":"suite_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"active":{"value":0,"source":"suite_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"degraded":{"value":11,"source":"suite_registry","generatedAt":"2026-05-27T13:01:55.734Z","stale":false,"degraded":true,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false}}},"phase2":{"tools":140,"resources":16,"prompts":23,"categories":16,"registeredSites":24,"generatedTools":11,"draftTools":11,"protectedTools":39,"publicTools":101,"degradedTools":11,"integrations":11,"policyPlatforms":12,"mcpClientsSupported":13,"evals":11,"sandboxTests":11,"browserOpsTests":11},"network":{"registeredSites":24,"nodeCount":24,"edgeCount":0,"source":"bootstrap-fallback","status":"degraded"},"storage":{"registeredSites":0,"redis":{"status":"connected","latencyMs":2508,"canonical":false,"note":"Redis is connected for live/cache state and storage metadata. MCP counts still come from the canonical registry."},"dynamodb":{"status":"degraded","latencyMs":32,"table":"aws-dynamodb-fuchsia-yacht","accessMode":"READ_ONLY","canonical":false,"note":"DynamoDB is unavailable/read-only and is not the canonical registry for live MCP counts."}},"federation":{"localCallableTools":140,"remoteToolsListedSeparately":true,"federatedToolsEndpoint":"/api/v1/registry/federated-tools?live=1","federatedToolsQuery":"/api/v1/registry/tools?scope=federated&live=1","policy":"The canonical tools count is local callable MCP hub state. Network-wide MCP tools are remote capabilities and must be discovered through source-labeled federated probes, not folded into tools/list as if MCP can execute them locally."},"reconciliation":{"status":"reconciled","explanation":"Dashboard, health, MCP metadata, llms, OpenAPI, and registry routes derive tool/resource/prompt/category counts from the same canonical MCP registry.","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":140,"expected":140,"kind":"tools","status":"match","message":"Dashboard callable tools use canonical in-process registry counts."},{"surface":"/api/health.platform.tools","observed":140,"expected":140,"kind":"tools","status":"match","message":"Health reports the canonical callable tool count."},{"surface":"/api/v1/registry/counts.canonical.tools","observed":140,"expected":140,"kind":"tools","status":"match","message":"Registry counts reports the same callable tool count as tools/list."},{"surface":"/api/mcp tools/list","observed":140,"expected":140,"kind":"tools","status":"match","message":"tools/list is authoritative for callable tools."},{"surface":"/api/mcp resources/list","observed":16,"expected":16,"kind":"resources","status":"match","message":"resources/list is authoritative for public resources."},{"surface":"/api/mcp prompts/list","observed":23,"expected":23,"kind":"prompts","status":"match","message":"prompts/list is authoritative for public prompts."},{"surface":"/.well-known/mcp.json.tools","observed":140,"expected":140,"kind":"tools","status":"match","message":"The MCP well-known manifest must use canonical callable tool counts."},{"surface":"/llms.txt.tools","observed":140,"expected":140,"kind":"tools","status":"match","message":"LLMS summary must use canonical callable tool counts."},{"surface":"/openapi.yaml.x-mcp.counts.tools","observed":140,"expected":140,"kind":"tools","status":"match","message":"OpenAPI extension counts must use canonical callable tool counts."},{"surface":"storage.registeredSites","observed":0,"expected":24,"kind":"sites","status":"stale","message":"Storage registered-site count is dependency metadata only and is not canonical when it differs from the root graph."},{"surface":"rootGraph.registeredSites","observed":24,"expected":24,"kind":"sites","status":"unknown","message":"Root graph was unavailable or degraded; registered-site count came from labeled fallback."}],"updatedAt":"2026-05-27T12:59:42.435Z"},"meta":{"generatedAt":"2026-05-27T13:01:55.734Z","traceId":"99ffa313-a68f-4f6a-a019-f55d2387bbb6","degraded":false,"source":"registry"},"warnings":[],"errors":[]}