{"ok":true,"data":{"service":"mcp","readyForAgentUiDemo":true,"checks":[{"id":"root-topology-to-mcp","label":"Root graph discovery","status":"ready","publicSafe":true,"authRequired":false,"evidence":["https://platphormnews.com/api/network/graph","https://mcp.platphormnews.com/api/v1/discovery/sites"]},{"id":"mcp-registry-to-agentui","label":"Tool schema rendering","status":"ready","publicSafe":true,"authRequired":false,"evidence":["tools/list","resources/list","prompts/list"]},{"id":"mcp-to-spec-contract","label":"Contract validation","status":"ready","publicSafe":true,"authRequired":true,"evidence":["openapi.yaml","asyncapi.yaml",".well-known/mcp.json"]},{"id":"mcp-to-sandbox-dry-run","label":"Bounded dry-run","status":"ready","publicSafe":false,"authRequired":true,"evidence":["factory draft tool","handoff envelope","trace context"]},{"id":"mcp-to-evals-gate","label":"Release gate scoring","status":"ready","publicSafe":false,"authRequired":true,"evidence":["eval manifest","public-safe scorecard","release gate state"]}],"requiredFixes":["Run the MCP 2025 initialize, initialized, tools/list, and list_network_sites flow from the client page.","Open AgentUI with the MCP tools/list schema and verify the operator workflow renders without secrets.","Use the protected dry-run buttons only with PLATPHORM_API_KEY stored in the operator environment.","Record downstream confirmation from Spec, Sandbox, and Evals before calling a handoff completed."],"degraded":false,"source":"/api/v1/demo/suite","readiness":{"schemaVersion":"platphorm.demo-readiness.v1","generatedAt":"2026-11-14T11:03:04.161Z","purpose":"Public-safe demo readiness for the Root -> MCP -> AgentUI -> Spec -> Sandbox -> Evals workflow. Handoffs are dry-run envelopes unless a downstream service confirms execution.","protocol":{"version":"2026-07-28","supportedVersions":["2026-07-28","2025-11-25","2025-06-18","2025-03-26","2024-11-05"],"transport":"streamable-http"},"score":99,"classification":"demo ready","counts":{"localCallableTools":76,"resources":5,"prompts":22,"services":6,"activeServices":6,"degradedServices":0,"unavailableServices":0,"handoffs":5,"protectedHandoffs":5},"services":[{"serviceId":"root","name":"PlatPhormNews Root","canonicalUrl":"https://platphormnews.com","purpose":"Root network control plane and topology source.","demoRole":"Publishes the network graph and public policy surfaces MCP uses as topology truth.","ownedEvidence":"Network graph, public manifest, sitemap, trust policy, and route standard.","publicArtifactKeys":["health","apiDocs","openapiJson","openapiYaml","llmsIndex","trust","sitemap","robots"],"requiredArtifactKeys":["health","llmsIndex","trust"],"protectedAction":{"label":"Request root graph refresh","capability":"root.network_graph_refresh","endpoint":"https://platphormnews.com/api/network/graph"},"handoffIntent":"Ask the root control plane to refresh or confirm the network graph source used by MCP discovery.","demoNarration":"Start the demo by showing root topology as the source of network truth.","artifacts":[{"key":"health","url":"https://platphormnews.com/api/health","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.161Z","summary":{"readable":true,"status":"ok","version":"0.0.4"}},{"key":"apiDocs","url":"https://platphormnews.com/api/docs","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.163Z","summary":{"readable":true,"keys":["openapi","info","servers","tags","paths","components"]}},{"key":"openapiJson","url":"https://platphormnews.com/openapi.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.164Z","summary":{"readable":true,"title":"PlatPhorm News Root API","version":"0.0.4","pathCount":86}},{"key":"openapiYaml","url":"https://platphormnews.com/openapi.yaml","status":"active","ok":true,"httpStatus":200,"contentType":"application/yaml; charset=utf-8","bytes":0,"checkedAt":"2026-11-14T11:03:04.165Z","summary":{"readable":true,"format":"yaml","pathCount":44}},{"key":"llmsIndex","url":"https://platphormnews.com/llms-index.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json; charset=utf-8","bytes":0,"checkedAt":"2026-11-14T11:03:04.265Z","summary":{"readable":true,"service":"PlatPhorm News"}},{"key":"trust","url":"https://platphormnews.com/.well-known/trust.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.284Z","summary":{"readable":true,"keys":["schema_version","service","domain","role","generated_at","public_read_only","public_capabilities","protected_capabilities","auth","related","integrity","policy"]}},{"key":"sitemap","url":"https://platphormnews.com/sitemap.xml","status":"active","ok":true,"httpStatus":200,"contentType":"application/xml; charset=utf-8","bytes":0,"checkedAt":"2026-11-14T11:03:04.290Z","summary":{"readable":true,"urlCount":41}},{"key":"robots","url":"https://platphormnews.com/robots.txt","status":"active","ok":true,"httpStatus":200,"contentType":"text/plain; charset=utf-8","bytes":0,"checkedAt":"2026-11-14T11:03:04.301Z","summary":{"readable":true,"format":"text","length":1968}}],"artifactSummary":{"status":"active","checkedAt":"2026-11-14T11:03:04.358Z","active":8,"degraded":0,"unavailable":0,"total":8,"requiredActive":3,"confidence":1},"status":"active","lastCheckedAt":"2026-11-14T11:03:04.358Z"},{"serviceId":"mcp","name":"MCP","canonicalUrl":"https://mcp.platphormnews.com","purpose":"Canonical capability registry and delegation broker.","demoRole":"Lists tools, resources, prompts, generated drafts, policies, and trace-linked handoff envelopes.","ownedEvidence":"MCP endpoint, tools/list, registry counts, gateway policy, and discovery manifests.","publicArtifactKeys":["health","apiDocs","openapiJson","openapiYaml","mcpEndpoint","mcpManifest","llmsIndex","trust"],"requiredArtifactKeys":["health","mcpManifest","llmsIndex","trust"],"protectedAction":{"label":"Run protected MCP delegation","capability":"mcp.protected_delegation","endpoint":"https://mcp.platphormnews.com/api/v1/gateway/call"},"handoffIntent":"Create a trace-linked MCP delegation envelope while preserving public/protected boundaries.","demoNarration":"Use MCP as the hub, not as a replacement for the downstream tools.","artifacts":[{"key":"health","url":"https://mcp.platphormnews.com/api/health","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.166Z","summary":{"readable":true,"status":"degraded","version":"0.9.1","tools":76,"resources":5,"prompts":22,"redis":"not_applicable","registry":"degraded"}},{"key":"apiDocs","url":"https://mcp.platphormnews.com/api/docs","status":"unavailable","ok":false,"httpStatus":null,"contentType":null,"bytes":null,"checkedAt":"2026-11-14T11:03:04.167Z","error":"The operation was aborted due to timeout"},{"key":"openapiJson","url":"https://mcp.platphormnews.com/openapi.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.169Z","summary":{"readable":true,"title":"PlatPhormNews MCP Gateway API","version":"0.9.1","pathCount":67}},{"key":"openapiYaml","url":"https://mcp.platphormnews.com/openapi.yaml","status":"active","ok":true,"httpStatus":200,"contentType":"application/yaml; charset=utf-8","bytes":0,"checkedAt":"2026-11-14T11:03:04.170Z","summary":{"readable":true,"format":"yaml","pathCount":67}},{"key":"mcpEndpoint","url":"https://mcp.platphormnews.com/api/mcp","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.375Z","summary":{"readable":true,"keys":["name","version","protocol","protocolVersion","supportedProtocolVersions","transport","sessionMode","endpoint","capabilities","security","network","links"]}},{"key":"mcpManifest","url":"https://mcp.platphormnews.com/.well-known/mcp.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.482Z","summary":{"readable":true,"name":"platphormnews-mcp","protocolVersion":"2026-07-28","tools":76,"resources":5,"prompts":22}},{"key":"llmsIndex","url":"https://mcp.platphormnews.com/llms-index.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.662Z","summary":{"readable":true,"service":"mcp","counts":{"tools":76,"resources":5,"prompts":22,"categories":5,"registeredSites":234,"generatedTools":16,"draftTools":16,"protectedTools":6,"publicTools":70,"degradedTools":0,"integrations":16,"policyPlatforms":12,"mcpClientsSupported":5,"evals":16,"sandboxTests":16,"browserOpsTests":16},"tools":76,"resources":5,"prompts":22}},{"key":"trust","url":"https://mcp.platphormnews.com/.well-known/trust.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.888Z","summary":{"readable":true,"keys":["version","serviceVersion","schema","issuer","baseUrl","issuedAt","publicSafeAccessEnabled","productPurpose","counts","auth","publicProtectedBoundary","trustedDomains"]}}],"artifactSummary":{"status":"active","checkedAt":"2026-11-14T11:03:05.969Z","active":7,"degraded":0,"unavailable":1,"total":8,"requiredActive":4,"confidence":0.91},"status":"active","lastCheckedAt":"2026-11-14T11:03:05.969Z"},{"serviceId":"agentui","name":"AgentUI","canonicalUrl":"https://agentui.platphormnews.com","purpose":"Human-facing workflow orchestration and tool UI renderer.","demoRole":"Renders MCP schemas as operator workflow panels and shows current step state.","ownedEvidence":"Workflow UI, tool form rendering, public workflow templates, and protected action shell.","publicArtifactKeys":["health","apiDocs","openapiJson","openapiYaml","mcpManifest","llmsIndex","trust"],"requiredArtifactKeys":["health","llmsIndex","trust"],"protectedAction":{"label":"Open workflow preview","capability":"agentui.workflow_preview","endpoint":"https://agentui.platphormnews.com/api/v1/workflows"},"handoffIntent":"Ask AgentUI to render MCP tool schemas and present a demo workflow without executing protected tools.","demoNarration":"Show the human operator view after MCP discovers the available capabilities.","artifacts":[{"key":"health","url":"https://agentui.platphormnews.com/api/health","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.170Z","summary":{"readable":true,"status":"degraded","version":"0.10.0"}},{"key":"apiDocs","url":"https://agentui.platphormnews.com/api/docs","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.171Z","summary":{"readable":true,"keys":["ok","data"]}},{"key":"openapiJson","url":"https://agentui.platphormnews.com/openapi.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.180Z","summary":{"readable":true,"title":"PlatPhorm AgentUI","version":"0.10.0","pathCount":121}},{"key":"openapiYaml","url":"https://agentui.platphormnews.com/openapi.yaml","status":"active","ok":true,"httpStatus":200,"contentType":"application/yaml; charset=utf-8","bytes":0,"checkedAt":"2026-11-14T11:03:04.181Z","summary":{"readable":true,"format":"yaml","pathCount":121}},{"key":"mcpManifest","url":"https://agentui.platphormnews.com/.well-known/mcp.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.308Z","summary":{"readable":true,"name":"agentui"}},{"key":"llmsIndex","url":"https://agentui.platphormnews.com/llms-index.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.344Z","summary":{"readable":true,"service":"agentui"}},{"key":"trust","url":"https://agentui.platphormnews.com/.well-known/trust.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.364Z","summary":{"readable":true,"keys":["service","version","auth","domainAllowlist","publicAccess","protectedAccess","vercelMetadataPolicy","publicAccessSummary","protectedActionSummary","aiPolicy","agentPolicy","trustLine"]}}],"artifactSummary":{"status":"active","checkedAt":"2026-11-14T11:03:05.418Z","active":7,"degraded":0,"unavailable":0,"total":7,"requiredActive":3,"confidence":1},"status":"active","lastCheckedAt":"2026-11-14T11:03:05.418Z"},{"serviceId":"spec","name":"Spec","canonicalUrl":"https://spec.platphormnews.com","purpose":"Contract truth engine for OpenAPI, AsyncAPI, JSON Schema, MCP, webhook, event, and envelope contracts.","demoRole":"Validates MCP schemas, OpenAPI contracts, AsyncAPI events, and handoff envelopes.","ownedEvidence":"Contract reports, schema checks, OpenAPI/AsyncAPI validation, and spec remediation notes.","publicArtifactKeys":["health","apiDocs","openapiJson","openapiYaml","mcpManifest","llmsIndex","trust"],"requiredArtifactKeys":["health","openapiYaml","llmsIndex","trust"],"protectedAction":{"label":"Validate MCP registry contracts","capability":"spec.validate_mcp_registry_contracts","endpoint":"https://spec.platphormnews.com/api/v1/validate"},"handoffIntent":"Send the MCP registry and handoff envelope schema bundle to Spec for contract validation.","demoNarration":"Prove the tool schemas are contract-backed before execution is considered.","artifacts":[{"key":"health","url":"https://spec.platphormnews.com/api/health","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.358Z","summary":{"readable":true}},{"key":"apiDocs","url":"https://spec.platphormnews.com/api/docs","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.359Z","summary":{"readable":true,"keys":["openapi","info","servers","security","tags","paths","components"]}},{"key":"openapiJson","url":"https://spec.platphormnews.com/openapi.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.361Z","summary":{"readable":true,"title":"Spec Workbench API","version":"0.4.0","pathCount":131}},{"key":"openapiYaml","url":"https://spec.platphormnews.com/openapi.yaml","status":"active","ok":true,"httpStatus":200,"contentType":"application/yaml; charset=utf-8","bytes":0,"checkedAt":"2026-11-14T11:03:04.361Z","summary":{"readable":true,"format":"yaml","pathCount":131}},{"key":"mcpManifest","url":"https://spec.platphormnews.com/.well-known/mcp.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.651Z","summary":{"readable":true,"name":"spec-workbench"}},{"key":"llmsIndex","url":"https://spec.platphormnews.com/llms-index.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.664Z","summary":{"readable":true,"service":"spec-workbench","tools":28,"resources":11,"prompts":8}},{"key":"trust","url":"https://spec.platphormnews.com/.well-known/trust.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:04.686Z","summary":{"readable":true,"keys":["service","baseUrl","auth","publicReadOnlyAccess","protectedActions","trustedDomains","routeStandard","vercelMetadataPolicy","tracePropagationPolicy","dataExposurePolicy","securityContact","policy"]}}],"artifactSummary":{"status":"active","checkedAt":"2026-11-14T11:03:05.223Z","active":7,"degraded":0,"unavailable":0,"total":7,"requiredActive":4,"confidence":1},"status":"active","lastCheckedAt":"2026-11-14T11:03:05.223Z"},{"serviceId":"sandbox","name":"Sandbox","canonicalUrl":"https://sandbox.platphormnews.com","purpose":"Bounded execution and artifact validation.","demoRole":"Receives generated draft tools for dry-run execution and artifact checks.","ownedEvidence":"Dry-run manifests, bounded execution envelopes, logs, and public-safe artifact summaries.","publicArtifactKeys":["health","apiDocs","openapiJson","openapiYaml","mcpManifest","llmsIndex","trust"],"requiredArtifactKeys":["health","llmsIndex","trust"],"protectedAction":{"label":"Run bounded dry-run","capability":"sandbox.run_bounded_dry_run","endpoint":"https://sandbox.platphormnews.com/api/v1/runs"},"handoffIntent":"Send a generated draft tool to Sandbox for bounded dry-run validation after auth is satisfied.","demoNarration":"Show that protected execution is delegated, bounded, and never faked by MCP.","artifacts":[{"key":"health","url":"https://sandbox.platphormnews.com/api/health","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:05.223Z","summary":{"readable":true}},{"key":"apiDocs","url":"https://sandbox.platphormnews.com/api/docs","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:05.224Z","summary":{"readable":true,"keys":["openapi","info","servers","components","paths","ok","data"]}},{"key":"openapiJson","url":"https://sandbox.platphormnews.com/openapi.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:05.226Z","summary":{"readable":true,"title":"PlatPhorm Sandbox API","version":"1.3.0","pathCount":77}},{"key":"openapiYaml","url":"https://sandbox.platphormnews.com/openapi.yaml","status":"active","ok":true,"httpStatus":200,"contentType":"application/yaml; charset=utf-8","bytes":0,"checkedAt":"2026-11-14T11:03:05.226Z","summary":{"readable":true,"format":"yaml","pathCount":77}},{"key":"mcpManifest","url":"https://sandbox.platphormnews.com/.well-known/mcp.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:05.338Z","summary":{"readable":true,"protocolVersion":"2024-11-05"}},{"key":"llmsIndex","url":"https://sandbox.platphormnews.com/llms-index.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:05.366Z","summary":{"readable":true,"service":"platphorm-sandbox","tools":102,"resources":35,"prompts":15}},{"key":"trust","url":"https://sandbox.platphormnews.com/.well-known/trust.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:05.425Z","summary":{"readable":true,"keys":["schema_version","service","baseUrl","policy","auth","publicReadOnlyAccess","protectedActions","localDraftPersistencePolicy","trustedDomainPolicy","routeStandard","vercelMetadataPolicy","tracePropagationPolicy"]}}],"artifactSummary":{"status":"active","checkedAt":"2026-11-14T11:03:06.192Z","active":7,"degraded":0,"unavailable":0,"total":7,"requiredActive":3,"confidence":1},"status":"active","lastCheckedAt":"2026-11-14T11:03:06.192Z"},{"serviceId":"evals","name":"Evals","canonicalUrl":"https://evals.platphormnews.com","purpose":"Scorecards, release gates, and quality decisions.","demoRole":"Scores tool readiness and returns pass/fail/partial gate state for release decisions.","ownedEvidence":"Eval suites, readiness scorecards, release gates, and quality reports.","publicArtifactKeys":["health","apiDocs","openapiJson","openapiYaml","mcpManifest","llmsIndex","trust"],"requiredArtifactKeys":["health","llmsIndex","trust"],"protectedAction":{"label":"Run MCP readiness eval","capability":"evals.run_mcp_readiness_eval","endpoint":"https://evals.platphormnews.com/api/v1/evals/run"},"handoffIntent":"Submit the MCP registry and generated tool evidence package to Evals for scoring after auth is satisfied.","demoNarration":"Close the demo with a release-gate decision instead of a vague success message.","artifacts":[{"key":"health","url":"https://evals.platphormnews.com/api/health","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:05.418Z","summary":{"readable":true}},{"key":"apiDocs","url":"https://evals.platphormnews.com/api/docs","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:05.419Z","summary":{"readable":true,"keys":["ok","data"]}},{"key":"openapiJson","url":"https://evals.platphormnews.com/openapi.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:05.420Z","summary":{"readable":true,"title":"PlatPhorm Evals","version":"1.7.0","pathCount":156}},{"key":"openapiYaml","url":"https://evals.platphormnews.com/openapi.yaml","status":"active","ok":true,"httpStatus":200,"contentType":"application/yaml; charset=utf-8","bytes":0,"checkedAt":"2026-11-14T11:03:05.421Z","summary":{"readable":true,"format":"yaml","pathCount":0}},{"key":"mcpManifest","url":"https://evals.platphormnews.com/.well-known/mcp.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:05.710Z","summary":{"readable":true,"name":"platphorm-evals"}},{"key":"llmsIndex","url":"https://evals.platphormnews.com/llms-index.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:05.742Z","summary":{"readable":true,"service":"evals","counts":{"servicesTracked":31,"activeSuites":33,"capabilitiesIndexed":996,"evalRunsToday":0,"source":"static_fallback","degradedReason":"Cloudflare D1 is configured but no registry services are persisted yet; Evals is using static fallback targets until registry sync writes records."},"tools":100,"resources":17,"prompts":13}},{"key":"trust","url":"https://evals.platphormnews.com/.well-known/trust.json","status":"active","ok":true,"httpStatus":200,"contentType":"application/json","bytes":0,"checkedAt":"2026-11-14T11:03:05.743Z","summary":{"readable":true,"keys":["schema_version","service","auth","publicAccess","publicReadAccess","protectedActions","trustedDomains","dataExposureBoundaries","policy","provenancePolicy","agentVerificationPolicy"]}}],"artifactSummary":{"status":"active","checkedAt":"2026-11-14T11:03:05.911Z","active":7,"degraded":0,"unavailable":0,"total":7,"requiredActive":3,"confidence":1},"status":"active","lastCheckedAt":"2026-11-14T11:03:05.911Z"}],"workflow":[{"id":"root-topology-to-mcp","order":1,"title":"Root graph discovery","from":"root","to":"mcp","transport":"public_get","status":"ready","publicSafe":true,"authRequired":false,"downstreamExecutionClaimed":false,"evidence":["https://platphormnews.com/api/network/graph","https://mcp.platphormnews.com/api/v1/discovery/sites"],"operatorCue":"Show that MCP reads the root topology and labels source drift instead of inventing site counts."},{"id":"mcp-registry-to-agentui","order":2,"title":"Tool schema rendering","from":"mcp","to":"agentui","transport":"mcp","status":"ready","publicSafe":true,"authRequired":false,"downstreamExecutionClaimed":false,"evidence":["tools/list","resources/list","prompts/list"],"operatorCue":"Render the selected MCP tool schema in AgentUI before any protected execution."},{"id":"mcp-to-spec-contract","order":3,"title":"Contract validation","from":"mcp","to":"spec","transport":"handoff","status":"ready","publicSafe":true,"authRequired":true,"downstreamExecutionClaimed":false,"evidence":["openapi.yaml","asyncapi.yaml",".well-known/mcp.json"],"operatorCue":"Send a protected dry-run handoff to Spec only when the operator key is present."},{"id":"mcp-to-sandbox-dry-run","order":4,"title":"Bounded dry-run","from":"mcp","to":"sandbox","transport":"handoff","status":"ready","publicSafe":false,"authRequired":true,"downstreamExecutionClaimed":false,"evidence":["factory draft tool","handoff envelope","trace context"],"operatorCue":"Use Sandbox for bounded execution evidence; MCP should not claim execution itself."},{"id":"mcp-to-evals-gate","order":5,"title":"Release gate scoring","from":"mcp","to":"evals","transport":"handoff","status":"ready","publicSafe":false,"authRequired":true,"downstreamExecutionClaimed":false,"evidence":["eval manifest","public-safe scorecard","release gate state"],"operatorCue":"Evals owns the scorecard. MCP records the handoff and waits for confirmed results."}],"handoffs":[{"schemaVersion":"platphorm.handoff.v1","id":"handoff_89b68b12-11f1-4c93-8e66-13a8b411ae13","workflowId":"mcp-suite-dry-run","from":"mcp","to":"root","capability":"root.network_graph_refresh","intent":"Ask the root control plane to refresh or confirm the network graph source used by MCP discovery.","transport":"openapi","auth":{"required":true,"satisfied":false,"mode":"none"},"trace":{"traceId":"30ba8e77715c29eaefebc493d395a7f3","spanId":"c3111ae27a5a45ff","traceparent":"00-30ba8e77715c29eaefebc493d395a7f3-c3111ae27a5a45ff-01","traceUrl":"https://trace.platphormnews.com/traces/30ba8e77715c29eaefebc493d395a7f3"},"input":{"payload":{"demo":true,"targetUrl":"https://platphormnews.com","protectedEndpoint":"https://platphormnews.com/api/network/graph","publicEvidence":[{"key":"health","url":"https://platphormnews.com/api/health","status":"active","httpStatus":200},{"key":"apiDocs","url":"https://platphormnews.com/api/docs","status":"active","httpStatus":200},{"key":"openapiJson","url":"https://platphormnews.com/openapi.json","status":"active","httpStatus":200},{"key":"openapiYaml","url":"https://platphormnews.com/openapi.yaml","status":"active","httpStatus":200},{"key":"llmsIndex","url":"https://platphormnews.com/llms-index.json","status":"active","httpStatus":200},{"key":"trust","url":"https://platphormnews.com/.well-known/trust.json","status":"active","httpStatus":200},{"key":"sitemap","url":"https://platphormnews.com/sitemap.xml","status":"active","httpStatus":200},{"key":"robots","url":"https://platphormnews.com/robots.txt","status":"active","httpStatus":200}],"downstreamExecutionClaimed":false},"redaction":"public_safe"},"expectedOutput":{"type":"public_safe_evidence_summary","required":true},"status":"protected_required","createdAt":"2026-11-14T11:03:06.192Z","updatedAt":"2026-11-14T11:03:06.192Z","downstreamExecutionClaimed":false,"demoSafe":true},{"schemaVersion":"platphorm.handoff.v1","id":"handoff_48ba621f-058f-487c-98e8-9108b1c17008","workflowId":"mcp-suite-dry-run","from":"mcp","to":"agentui","capability":"agentui.workflow_preview","intent":"Ask AgentUI to render MCP tool schemas and present a demo workflow without executing protected tools.","transport":"mcp","auth":{"required":true,"satisfied":false,"mode":"none"},"trace":{"traceId":"0a5399dfca7edaf5359083790d1381db","spanId":"eac1a0e95b2f515f","traceparent":"00-0a5399dfca7edaf5359083790d1381db-eac1a0e95b2f515f-01","traceUrl":"https://trace.platphormnews.com/traces/0a5399dfca7edaf5359083790d1381db"},"input":{"payload":{"demo":true,"targetUrl":"https://agentui.platphormnews.com","protectedEndpoint":"https://agentui.platphormnews.com/api/v1/workflows","publicEvidence":[{"key":"health","url":"https://agentui.platphormnews.com/api/health","status":"active","httpStatus":200},{"key":"apiDocs","url":"https://agentui.platphormnews.com/api/docs","status":"active","httpStatus":200},{"key":"openapiJson","url":"https://agentui.platphormnews.com/openapi.json","status":"active","httpStatus":200},{"key":"openapiYaml","url":"https://agentui.platphormnews.com/openapi.yaml","status":"active","httpStatus":200},{"key":"mcpManifest","url":"https://agentui.platphormnews.com/.well-known/mcp.json","status":"active","httpStatus":200},{"key":"llmsIndex","url":"https://agentui.platphormnews.com/llms-index.json","status":"active","httpStatus":200},{"key":"trust","url":"https://agentui.platphormnews.com/.well-known/trust.json","status":"active","httpStatus":200}],"downstreamExecutionClaimed":false},"redaction":"public_safe"},"expectedOutput":{"type":"public_safe_evidence_summary","required":true},"status":"protected_required","createdAt":"2026-11-14T11:03:06.192Z","updatedAt":"2026-11-14T11:03:06.192Z","downstreamExecutionClaimed":false,"demoSafe":true},{"schemaVersion":"platphorm.handoff.v1","id":"handoff_f8613e9f-8f07-430e-9b37-096acd6159c6","workflowId":"mcp-suite-dry-run","from":"mcp","to":"spec","capability":"spec.validate_mcp_registry_contracts","intent":"Send the MCP registry and handoff envelope schema bundle to Spec for contract validation.","transport":"mcp","auth":{"required":true,"satisfied":false,"mode":"none"},"trace":{"traceId":"2740c847d545d3a918653b0654ef42de","spanId":"71af785149b5b744","traceparent":"00-2740c847d545d3a918653b0654ef42de-71af785149b5b744-01","traceUrl":"https://trace.platphormnews.com/traces/2740c847d545d3a918653b0654ef42de"},"input":{"payload":{"demo":true,"targetUrl":"https://spec.platphormnews.com","protectedEndpoint":"https://spec.platphormnews.com/api/v1/validate","publicEvidence":[{"key":"health","url":"https://spec.platphormnews.com/api/health","status":"active","httpStatus":200},{"key":"apiDocs","url":"https://spec.platphormnews.com/api/docs","status":"active","httpStatus":200},{"key":"openapiJson","url":"https://spec.platphormnews.com/openapi.json","status":"active","httpStatus":200},{"key":"openapiYaml","url":"https://spec.platphormnews.com/openapi.yaml","status":"active","httpStatus":200},{"key":"mcpManifest","url":"https://spec.platphormnews.com/.well-known/mcp.json","status":"active","httpStatus":200},{"key":"llmsIndex","url":"https://spec.platphormnews.com/llms-index.json","status":"active","httpStatus":200},{"key":"trust","url":"https://spec.platphormnews.com/.well-known/trust.json","status":"active","httpStatus":200}],"downstreamExecutionClaimed":false},"redaction":"public_safe"},"expectedOutput":{"type":"public_safe_evidence_summary","required":true},"status":"protected_required","createdAt":"2026-11-14T11:03:06.192Z","updatedAt":"2026-11-14T11:03:06.192Z","downstreamExecutionClaimed":false,"demoSafe":true},{"schemaVersion":"platphorm.handoff.v1","id":"handoff_0d60d4ba-3a38-400a-9e0c-aeb571a244a8","workflowId":"mcp-suite-dry-run","from":"mcp","to":"sandbox","capability":"sandbox.run_bounded_dry_run","intent":"Send a generated draft tool to Sandbox for bounded dry-run validation after auth is satisfied.","transport":"mcp","auth":{"required":true,"satisfied":false,"mode":"none"},"trace":{"traceId":"5d31bda01924ebe3d886ec51a60e91d8","spanId":"2c39e2b62b375f30","traceparent":"00-5d31bda01924ebe3d886ec51a60e91d8-2c39e2b62b375f30-01","traceUrl":"https://trace.platphormnews.com/traces/5d31bda01924ebe3d886ec51a60e91d8"},"input":{"payload":{"demo":true,"targetUrl":"https://sandbox.platphormnews.com","protectedEndpoint":"https://sandbox.platphormnews.com/api/v1/runs","publicEvidence":[{"key":"health","url":"https://sandbox.platphormnews.com/api/health","status":"active","httpStatus":200},{"key":"apiDocs","url":"https://sandbox.platphormnews.com/api/docs","status":"active","httpStatus":200},{"key":"openapiJson","url":"https://sandbox.platphormnews.com/openapi.json","status":"active","httpStatus":200},{"key":"openapiYaml","url":"https://sandbox.platphormnews.com/openapi.yaml","status":"active","httpStatus":200},{"key":"mcpManifest","url":"https://sandbox.platphormnews.com/.well-known/mcp.json","status":"active","httpStatus":200},{"key":"llmsIndex","url":"https://sandbox.platphormnews.com/llms-index.json","status":"active","httpStatus":200},{"key":"trust","url":"https://sandbox.platphormnews.com/.well-known/trust.json","status":"active","httpStatus":200}],"downstreamExecutionClaimed":false},"redaction":"public_safe"},"expectedOutput":{"type":"public_safe_evidence_summary","required":true},"status":"protected_required","createdAt":"2026-11-14T11:03:06.193Z","updatedAt":"2026-11-14T11:03:06.193Z","downstreamExecutionClaimed":false,"demoSafe":true},{"schemaVersion":"platphorm.handoff.v1","id":"handoff_314b56dd-7bcc-4229-b4a1-65d664e77ee6","workflowId":"mcp-suite-dry-run","from":"mcp","to":"evals","capability":"evals.run_mcp_readiness_eval","intent":"Submit the MCP registry and generated tool evidence package to Evals for scoring after auth is satisfied.","transport":"mcp","auth":{"required":true,"satisfied":false,"mode":"none"},"trace":{"traceId":"55f6c7482c3e1ef18b12fa170868d37c","spanId":"824fc78a548988ef","traceparent":"00-55f6c7482c3e1ef18b12fa170868d37c-824fc78a548988ef-01","traceUrl":"https://trace.platphormnews.com/traces/55f6c7482c3e1ef18b12fa170868d37c"},"input":{"payload":{"demo":true,"targetUrl":"https://evals.platphormnews.com","protectedEndpoint":"https://evals.platphormnews.com/api/v1/evals/run","publicEvidence":[{"key":"health","url":"https://evals.platphormnews.com/api/health","status":"active","httpStatus":200},{"key":"apiDocs","url":"https://evals.platphormnews.com/api/docs","status":"active","httpStatus":200},{"key":"openapiJson","url":"https://evals.platphormnews.com/openapi.json","status":"active","httpStatus":200},{"key":"openapiYaml","url":"https://evals.platphormnews.com/openapi.yaml","status":"active","httpStatus":200},{"key":"mcpManifest","url":"https://evals.platphormnews.com/.well-known/mcp.json","status":"active","httpStatus":200},{"key":"llmsIndex","url":"https://evals.platphormnews.com/llms-index.json","status":"active","httpStatus":200},{"key":"trust","url":"https://evals.platphormnews.com/.well-known/trust.json","status":"active","httpStatus":200}],"downstreamExecutionClaimed":false},"redaction":"public_safe"},"expectedOutput":{"type":"public_safe_evidence_summary","required":true},"status":"protected_required","createdAt":"2026-11-14T11:03:06.193Z","updatedAt":"2026-11-14T11:03:06.193Z","downstreamExecutionClaimed":false,"demoSafe":true}],"demoScript":[{"label":"Open demo readiness","command":"curl https://mcp.platphormnews.com/api/v1/demo/suite","protected":false},{"label":"Check MCP metadata","command":"curl https://mcp.platphormnews.com/mcp","protected":false},{"label":"Initialize MCP 2025 client","command":"curl -s https://mcp.platphormnews.com/mcp -H 'content-type: application/json' -H 'mcp-protocol-version: 2025-06-18' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2025-06-18\",\"capabilities\":{},\"clientInfo\":{\"name\":\"demo\",\"version\":\"1.0.0\"}}}'","protected":false},{"label":"Inspect local callable tools","command":"curl -s https://mcp.platphormnews.com/api/v1/registry/tools","protected":false},{"label":"Preview protected validation handoff","command":"curl -s https://mcp.platphormnews.com/api/v1/factory/validate -H 'content-type: application/json' -H \"X-PlatPhorm-API-Key: $PLATPHORM_API_KEY\" -d '{\"dryRun\":true,\"toolName\":\"inspect_spec_discovery\"}'","protected":true}],"warnings":[],"nextActions":["Run the MCP 2025 initialize, initialized, tools/list, and list_network_sites flow from the client page.","Open AgentUI with the MCP tools/list schema and verify the operator workflow renders without secrets.","Use the protected dry-run buttons only with PLATPHORM_API_KEY stored in the operator environment.","Record downstream confirmation from Spec, Sandbox, and Evals before calling a handoff completed."]}},"meta":{"generatedAt":"2026-11-14T11:03:06.193Z","traceId":"aa0ffb958443c94b75d6380b1700b566","degraded":false,"source":"registry"},"warnings":[],"errors":[]}