{"ok":true,"data":{"canonical":{"tools":140,"resources":16,"prompts":23,"categories":16},"canonicalCounts":{"schemaVersion":"platphorm.mcp.counts.v1","generatedAt":"2026-07-14T02:30:53.287Z","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":142,"storageRegistered":4,"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":4,"expected":142,"kind":"sites","status":"mismatch","message":"Storage registered-site count is dependency metadata only and is not canonical when it differs from the root graph."}]},"countValues":{"tools":{"callable":{"value":140,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":true,"includesDegradedTools":false},"public":{"value":101,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"protected":{"value":39,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"generatedDraft":{"value":11,"source":"generated_factory_drafts","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":false,"derived":true,"includesGeneratedDraftTools":true,"includesProtectedTools":false,"includesDegradedTools":true},"degraded":{"value":11,"source":"generated_factory_drafts","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":false,"derived":true,"includesGeneratedDraftTools":true,"includesProtectedTools":false,"includesDegradedTools":true},"byCategory":{"Analytics":{"value":7,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Categories":{"value":4,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Content":{"value":8,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Deployments":{"value":3,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"DynamoDB":{"value":1,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"FAQ":{"value":4,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Federation":{"value":1,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"GitHub":{"value":4,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Infrastructure":{"value":4,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"MCP Federation":{"value":6,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Network":{"value":14,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Registry":{"value":55,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Search":{"value":3,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Security":{"value":2,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Sites":{"value":21,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"Verticals":{"value":3,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false}}},"resources":{"total":{"value":16,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"public":{"value":16,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"protected":{"value":0,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"degraded":{"value":0,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false}},"prompts":{"total":{"value":23,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"public":{"value":23,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"protected":{"value":0,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"degraded":{"value":0,"source":"in_process_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false}},"sites":{"rootGraph":{"value":142,"source":"https://platphormnews.com/api/network/graph","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"storageRegistered":{"value":4,"source":"storage_snapshot","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":true,"authoritative":false,"derived":true,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"mcpEnabled":{"value":2,"source":"curated_mcp_endpoint_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":false,"derived":true,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"federatedServers":{"value":2,"source":"curated_mcp_endpoint_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":false,"derived":true,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false}},"integrations":{"total":{"value":11,"source":"suite_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"active":{"value":0,"source":"suite_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":false,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false},"degraded":{"value":11,"source":"suite_registry","generatedAt":"2026-07-14T02:30:53.287Z","stale":false,"degraded":true,"authoritative":true,"derived":false,"includesGeneratedDraftTools":false,"includesProtectedTools":false,"includesDegradedTools":false}}},"phase2":{"tools":140,"resources":16,"prompts":23,"categories":16,"registeredSites":142,"generatedTools":11,"draftTools":11,"protectedTools":39,"publicTools":101,"degradedTools":11,"integrations":11,"policyPlatforms":12,"mcpClientsSupported":13,"evals":11,"sandboxTests":11,"browserOpsTests":11},"network":{"registeredSites":142,"nodeCount":178,"edgeCount":227,"source":"https://platphormnews.com/api/network/graph","status":"active"},"storage":{"registeredSites":4,"redis":{"status":"connected","latencyMs":29,"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":9,"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":4,"expected":142,"kind":"sites","status":"mismatch","message":"Storage registered-site count is dependency metadata only and is not canonical when it differs from the root graph."}],"updatedAt":"2026-07-14T02:26:36.571Z"},"meta":{"generatedAt":"2026-07-14T02:30:53.287Z","traceId":"8e75cd6e-f4f4-43ac-9e7c-bea613446700","degraded":false,"source":"registry"},"warnings":[],"errors":[]}