{"service":"webhooklab","version":"1.0.0","baseUrl":"https://webhooks.platphormnews.com","description":"Event delivery laboratory for webhook contracts, signed payloads, delivery attempts, replay safety, async jobs, MCP/API/CLI, and trace-linked evidence.","lifecycle":[{"number":1,"title":"Define event type","description":"Name the event, version it, and wrap it in the PlatPhorm event envelope.","evidenceKey":"eventId","access":"public-safe"},{"number":2,"title":"Define event contract","description":"Attach JSON Schema or an AsyncAPI-compatible event contract before delivery.","evidenceKey":"contractId","access":"public-safe"},{"number":3,"title":"Register endpoint","description":"Validate endpoint URLs with SSRF protection; server persistence is protected.","evidenceKey":"endpointId","access":"protected"},{"number":4,"title":"Generate payload","description":"Create a positive sample, negative sample, or local event payload from a template.","evidenceKey":"payloadHash","access":"public-safe"},{"number":5,"title":"Sign payload","description":"Build the canonical string and HMAC header without storing the raw secret.","evidenceKey":"signatureStatus","access":"public-safe"},{"number":6,"title":"Send event","description":"Protected sends create an event, delivery, async job, attempt, and trace-linked evidence.","evidenceKey":"deliveryId","access":"protected"},{"number":7,"title":"Receive delivery","description":"Inbound receivers validate signatures where configured and redact payload evidence.","evidenceKey":"attemptCount","access":"protected"},{"number":8,"title":"Inspect attempts","description":"Review status, latency, retry decision, redacted request/response summaries, and trace span.","evidenceKey":"responseStatus","access":"public-safe"},{"number":9,"title":"Retry or replay","description":"Replay and cancel require confirmation plus PLATPHORM_API_KEY unless local-only dry run is selected.","evidenceKey":"nextRetryAt","access":"protected"},{"number":10,"title":"Generate evidence","description":"Package public-safe evidence for Spec, Evals, Sandbox, AgentUI, Monitor, Trace, MCP, API, Docs, Sheets, Catalog, CLI, and Decks.","evidenceKey":"evidenceArtifacts","access":"degraded"}],"publicSafeAccess":["homepage, docs, FAQ, OpenAPI, llms, RSS, sitemap, robots, and well-known policy files","Lab shell, local-only payload generation, public templates, JSON/schema validation, and transient signature utilities","redacted event, endpoint, delivery, contract, integration, health, and route-compliance summaries when storage is available","read-only MCP introspection and public-safe MCP tools"],"protectedActions":["persistent endpoint registration, update, and deletion","persistent event creation that sends to registered endpoints","third-party delivery attempts, replay, cancel, retry, and async delivery job mutation","contract create, update, delete, persistent test runs, and protected handoffs to Spec, Evals, Sandbox, AgentUI, Monitor, Docs, Sheets, and Decks","raw delivery details, raw request headers, private payloads, private traces, private audits, registry mutation, and report publishing"],"publicSafeRoutes":["/","/lab","/dashboard","/docs","/explore","/changelog","/status","/capabilities","/endpoints","/events","/deliveries","/replays","/contracts","/signatures","/templates","/integrations","/integrations/spec","/integrations/evals","/integrations/sandbox","/integrations/agentui","/integrations/monitor","/clients/cli","/faq","/api/docs","/openapi.yaml","/openapi.json","/llms.txt","/llms-full.txt","/llms-index.json","/robots.txt","/.well-known/mcp.json","/.well-known/agents.json","/.well-known/agent-policy.json","/.well-known/ai-policy.json","/.well-known/trust.json","/.well-known/security.txt"],"auth":{"protectedHeader":"X-PlatPhorm-API-Key","protectedBearer":"Authorization: Bearer $PLATPHORM_API_KEY","publicSafeByDefault":true},"safety":{"signatureSecretsPersisted":false,"ssrfProtection":true,"redactionRequired":true,"publicSimulatorSendsExternalRequests":false,"rawVercelJa4DigestPublic":false},"manifest":{"schemaVersion":"platphorm-site.v1","siteKey":"webhooklab","serviceName":"webhooklab","displayName":"PlatPhorm Webhook Lab","environment":"production","baseUrl":"https://webhooks.platphormnews.com","version":"1.0.0","owner":{"team":"PlatPhorm News","contact":"support@platphormnews.com"},"routes":{"home":"/","lab":"/lab","dashboard":"/dashboard","docs":"/docs","explore":"/explore","changelog":"/changelog","status":"/status","capabilities":"/capabilities","endpoints":"/endpoints","events":"/events","deliveries":"/deliveries","replays":"/replays","contracts":"/contracts","signatures":"/signatures","templates":"/templates","integrations":"/integrations","integrations-spec":"/integrations/spec","integrations-evals":"/integrations/evals","integrations-sandbox":"/integrations/sandbox","integrations-agentui":"/integrations/agentui","integrations-monitor":"/integrations/monitor","clients-cli":"/clients/cli","faq":"/faq","api-docs":"/api/docs","openapi-yaml":"/openapi.yaml","openapi-json":"/openapi.json","llms-txt":"/llms.txt","llms-full-txt":"/llms-full.txt","llms-index-json":"/llms-index.json","robots-txt":"/robots.txt","well-known-mcp-json":"/.well-known/mcp.json","well-known-agents-json":"/.well-known/agents.json","well-known-agent-policy-json":"/.well-known/agent-policy.json","well-known-ai-policy-json":"/.well-known/ai-policy.json","well-known-trust-json":"/.well-known/trust.json","well-known-security-txt":"/.well-known/security.txt","apiCapabilities":"/api/capabilities","openapi":"/api/openapi.json","mcp":"/api/mcp","agent":"/api/v1/agent","health":"/api/health","v1Health":"/api/v1/health","eventsApi":"/api/v1/events","endpointsApi":"/api/v1/endpoints","deliveriesApi":"/api/v1/deliveries","contractsApi":"/api/v1/contracts","templatesApi":"/api/v1/templates","integrationsApi":"/api/v1/integrations","deliveryJobsApi":"/api/v1/delivery-jobs","feed":"/feed.xml","rss":"/rss.xml","sitemapIndex":"/sitemap-index.xml","sitemapMain":"/sitemap-main.xml"},"capabilities":[{"id":"webhook-simulation","name":"Webhook Simulation","description":"Generate webhook event payloads and run public-safe local simulations without persistent delivery.","kind":"workflow","publicSafe":true,"protected":false,"status":"working","humanUrl":"/lab","apiUrl":"/api/v1/agent","mcpTool":"generate_test_payload","docsUrl":"/docs","testCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace"},{"id":"signature-generation","name":"Signature Generation","description":"Generate HMAC signatures for test webhook payloads without persisting raw secrets.","kind":"workflow","publicSafe":true,"protected":false,"status":"working","humanUrl":"/simulator","apiUrl":"/api/v1/signatures/generate","mcpTool":"generate_signature","docsUrl":"/docs","testCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace"},{"id":"signature-verification","name":"Signature Verification","description":"Verify webhook signatures against payloads and timestamp tolerance without persisting raw secrets.","kind":"workflow","publicSafe":true,"protected":false,"status":"working","humanUrl":"/simulator","apiUrl":"/api/v1/signatures/verify","mcpTool":"verify_signature","docsUrl":"/docs","testCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace"},{"id":"endpoint-registration","name":"Endpoint Registration","description":"Register webhook receiver endpoints with SSRF-safe URL validation.","kind":"api","publicSafe":false,"protected":true,"status":"working","humanUrl":"/dashboard/endpoints","apiUrl":"/api/v1/endpoints","mcpTool":"register_webhook_endpoint","docsUrl":"/docs","testCommand":"PLATPHORM_API_KEY=... npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --protected --json --trace"},{"id":"event-creation-listing","name":"Event Creation and Listing","description":"Create persistent webhook events with protected dispatch; public reads are redacted.","kind":"webhook","publicSafe":true,"protected":true,"status":"working","humanUrl":"/dashboard/events","apiUrl":"/api/v1/events","mcpTool":"create_webhook_event","docsUrl":"/docs","testCommand":"PLATPHORM_API_KEY=... npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --protected --json --trace"},{"id":"delivery-tracking","name":"Delivery Tracking","description":"Inspect webhook delivery and attempt state with public-safe redaction.","kind":"data","publicSafe":true,"protected":false,"status":"working","humanUrl":"/dashboard/replays","apiUrl":"/api/v1/deliveries","mcpTool":"list_deliveries","docsUrl":"/docs","testCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace"},{"id":"delivery-replay","name":"Delivery Replay","description":"Replay webhook deliveries with protected authorization and explicit operator confirmation.","kind":"workflow","publicSafe":false,"protected":true,"status":"working","humanUrl":"/dashboard/replays","apiUrl":"/api/v1/deliveries/{id}/replay","mcpTool":"replay_webhook","docsUrl":"/docs","testCommand":"PLATPHORM_API_KEY=... npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --protected --json --trace"},{"id":"contract-creation","name":"Contract Creation","description":"Create and manage persistent webhook contracts.","kind":"workflow","publicSafe":false,"protected":true,"status":"working","humanUrl":"/dashboard/contracts","apiUrl":"/api/v1/contracts","mcpTool":"create_contract","docsUrl":"/docs","testCommand":"PLATPHORM_API_KEY=... npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --protected --json --trace"},{"id":"payload-validation","name":"Payload Validation","description":"Validate webhook payloads against known contracts or demo schemas.","kind":"workflow","publicSafe":true,"protected":false,"status":"working","humanUrl":"/dashboard/contracts","apiUrl":"/api/v1/contracts/{id}/validate","mcpTool":"validate_payload","docsUrl":"/docs","testCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace"},{"id":"vercel-webhook-receiver","name":"Vercel Webhook Receiver","description":"Receive Vercel webhook events and verify configured Vercel signatures.","kind":"webhook","publicSafe":false,"protected":true,"status":"working","humanUrl":"/docs","apiUrl":"/api/webhooks","mcpTool":"receive_test_webhook","docsUrl":"/docs","testCommand":"PLATPHORM_API_KEY=... npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --protected --json --trace"},{"id":"mcp-integration","name":"MCP Integration","description":"Expose webhook tools, resources, and prompts through JSON-RPC MCP.","kind":"mcp","publicSafe":true,"protected":false,"status":"working","humanUrl":"/capabilities","apiUrl":"/api/mcp","mcpTool":null,"docsUrl":"/docs","testCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace"},{"id":"agent-endpoint","name":"Agent Endpoint","description":"Expose safe agent actions with protected mutations gated by PLATPHORM_API_KEY.","kind":"agent","publicSafe":true,"protected":true,"status":"working","humanUrl":"/capabilities","apiUrl":"/api/v1/agent","mcpTool":null,"docsUrl":"/docs","testCommand":"PLATPHORM_API_KEY=... npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --protected --json --trace"},{"id":"docs-openapi","name":"Docs and OpenAPI","description":"Publish human API docs and parseable OpenAPI metadata for public and protected routes.","kind":"docs","publicSafe":true,"protected":false,"status":"working","humanUrl":"/docs","apiUrl":"/api/docs","mcpTool":null,"docsUrl":"/docs","testCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace"},{"id":"discovery-files","name":"llms, Sitemap, Robots, Feed","description":"Expose public-safe discovery files for agents and crawlers.","kind":"docs","publicSafe":true,"protected":false,"status":"working","humanUrl":"/capabilities","apiUrl":"/llms-index.json","mcpTool":null,"docsUrl":"/docs","testCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace"}],"agent":{"preferredCli":"npx @platphormnews/platphormctl","inspectCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace","validateCommand":"npx @platphormnews/platphormctl --include webhooks.platphormnews.com network validate --best-effort --evidence --json --trace","harnessCommand":"npx @platphormnews/platphormctl harness run webhooks-site-check --trace --best-effort --json"},"security":{"publicSafeByDefault":true,"protectedRequiresApiKey":true,"redactionRequired":true,"ssrfProtectionRequired":true,"signatureSecretsNeverPersisted":true},"trace":{"supportsTraceHeaders":true,"headers":["traceparent","X-PlatPhorm-Trace-Id","X-PlatPhorm-Span-Id","X-PlatPhorm-Request-Id","X-PlatPhorm-Source-Site","X-PlatPhorm-Target-Site"]},"generatedAt":"2026-05-25T16:19:24.308Z"},"capabilities":{"schemaVersion":"platphorm-capabilities.v1","site":{"siteKey":"webhooklab","serviceName":"webhooklab","displayName":"PlatPhorm Webhook Lab","baseUrl":"https://webhooks.platphormnews.com","environment":"production","version":"1.0.0"},"summary":{"status":"degraded","capabilityCount":14,"workingCount":14,"degradedCount":0,"missingCount":0,"protectedCount":6,"publicSafeCount":10,"mcpToolCount":58,"mcpResourceCount":22,"mcpPromptCount":12},"routes":[{"routeType":"home","expectedUrl":"/","canonicalUrl":"https://webhooks.platphormnews.com/","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"lab","expectedUrl":"/lab","canonicalUrl":"https://webhooks.platphormnews.com/lab","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"dashboard","expectedUrl":"/dashboard","canonicalUrl":"https://webhooks.platphormnews.com/dashboard","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"docs","expectedUrl":"/docs","canonicalUrl":"https://webhooks.platphormnews.com/docs","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"explore","expectedUrl":"/explore","canonicalUrl":"https://webhooks.platphormnews.com/explore","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"changelog","expectedUrl":"/changelog","canonicalUrl":"https://webhooks.platphormnews.com/changelog","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"status","expectedUrl":"/status","canonicalUrl":"https://webhooks.platphormnews.com/status","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"capabilities","expectedUrl":"/capabilities","canonicalUrl":"https://webhooks.platphormnews.com/capabilities","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"endpoints","expectedUrl":"/endpoints","canonicalUrl":"https://webhooks.platphormnews.com/endpoints","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"events","expectedUrl":"/events","canonicalUrl":"https://webhooks.platphormnews.com/events","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"deliveries","expectedUrl":"/deliveries","canonicalUrl":"https://webhooks.platphormnews.com/deliveries","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"replays","expectedUrl":"/replays","canonicalUrl":"https://webhooks.platphormnews.com/replays","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"contracts","expectedUrl":"/contracts","canonicalUrl":"https://webhooks.platphormnews.com/contracts","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"signatures","expectedUrl":"/signatures","canonicalUrl":"https://webhooks.platphormnews.com/signatures","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"templates","expectedUrl":"/templates","canonicalUrl":"https://webhooks.platphormnews.com/templates","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"integrations","expectedUrl":"/integrations","canonicalUrl":"https://webhooks.platphormnews.com/integrations","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"integrations-spec","expectedUrl":"/integrations/spec","canonicalUrl":"https://webhooks.platphormnews.com/integrations/spec","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"integrations-evals","expectedUrl":"/integrations/evals","canonicalUrl":"https://webhooks.platphormnews.com/integrations/evals","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"integrations-sandbox","expectedUrl":"/integrations/sandbox","canonicalUrl":"https://webhooks.platphormnews.com/integrations/sandbox","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"integrations-agentui","expectedUrl":"/integrations/agentui","canonicalUrl":"https://webhooks.platphormnews.com/integrations/agentui","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"integrations-monitor","expectedUrl":"/integrations/monitor","canonicalUrl":"https://webhooks.platphormnews.com/integrations/monitor","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"clients-cli","expectedUrl":"/clients/cli","canonicalUrl":"https://webhooks.platphormnews.com/clients/cli","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"faq","expectedUrl":"/faq","canonicalUrl":"https://webhooks.platphormnews.com/faq","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"api-docs","expectedUrl":"/api/docs","canonicalUrl":"https://webhooks.platphormnews.com/api/docs","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"openapi-yaml","expectedUrl":"/openapi.yaml","canonicalUrl":"https://webhooks.platphormnews.com/openapi.yaml","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"openapi-json","expectedUrl":"/openapi.json","canonicalUrl":"https://webhooks.platphormnews.com/openapi.json","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"llms-txt","expectedUrl":"/llms.txt","canonicalUrl":"https://webhooks.platphormnews.com/llms.txt","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"llms-full-txt","expectedUrl":"/llms-full.txt","canonicalUrl":"https://webhooks.platphormnews.com/llms-full.txt","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"llms-index-json","expectedUrl":"/llms-index.json","canonicalUrl":"https://webhooks.platphormnews.com/llms-index.json","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"robots-txt","expectedUrl":"/robots.txt","canonicalUrl":"https://webhooks.platphormnews.com/robots.txt","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"well-known-mcp-json","expectedUrl":"/.well-known/mcp.json","canonicalUrl":"https://webhooks.platphormnews.com/.well-known/mcp.json","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"well-known-agents-json","expectedUrl":"/.well-known/agents.json","canonicalUrl":"https://webhooks.platphormnews.com/.well-known/agents.json","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"well-known-agent-policy-json","expectedUrl":"/.well-known/agent-policy.json","canonicalUrl":"https://webhooks.platphormnews.com/.well-known/agent-policy.json","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"well-known-ai-policy-json","expectedUrl":"/.well-known/ai-policy.json","canonicalUrl":"https://webhooks.platphormnews.com/.well-known/ai-policy.json","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"well-known-trust-json","expectedUrl":"/.well-known/trust.json","canonicalUrl":"https://webhooks.platphormnews.com/.well-known/trust.json","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"well-known-security-txt","expectedUrl":"/.well-known/security.txt","canonicalUrl":"https://webhooks.platphormnews.com/.well-known/security.txt","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"apiCapabilities","expectedUrl":"/api/capabilities","canonicalUrl":"https://webhooks.platphormnews.com/api/capabilities","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"openapi","expectedUrl":"/api/openapi.json","canonicalUrl":"https://webhooks.platphormnews.com/api/openapi.json","status":"working","source":"openapi","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"mcp","expectedUrl":"/api/mcp","canonicalUrl":"https://webhooks.platphormnews.com/api/mcp","status":"working","source":"mcp","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"agent","expectedUrl":"/api/v1/agent","canonicalUrl":"https://webhooks.platphormnews.com/api/v1/agent","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"health","expectedUrl":"/api/health","canonicalUrl":"https://webhooks.platphormnews.com/api/health","status":"working","source":"health","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"v1Health","expectedUrl":"/api/v1/health","canonicalUrl":"https://webhooks.platphormnews.com/api/v1/health","status":"working","source":"health","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"eventsApi","expectedUrl":"/api/v1/events","canonicalUrl":"https://webhooks.platphormnews.com/api/v1/events","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"endpointsApi","expectedUrl":"/api/v1/endpoints","canonicalUrl":"https://webhooks.platphormnews.com/api/v1/endpoints","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"deliveriesApi","expectedUrl":"/api/v1/deliveries","canonicalUrl":"https://webhooks.platphormnews.com/api/v1/deliveries","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"contractsApi","expectedUrl":"/api/v1/contracts","canonicalUrl":"https://webhooks.platphormnews.com/api/v1/contracts","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"templatesApi","expectedUrl":"/api/v1/templates","canonicalUrl":"https://webhooks.platphormnews.com/api/v1/templates","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"integrationsApi","expectedUrl":"/api/v1/integrations","canonicalUrl":"https://webhooks.platphormnews.com/api/v1/integrations","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"deliveryJobsApi","expectedUrl":"/api/v1/delivery-jobs","canonicalUrl":"https://webhooks.platphormnews.com/api/v1/delivery-jobs","status":"working","source":"route","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"feed","expectedUrl":"/feed.xml","canonicalUrl":"https://webhooks.platphormnews.com/feed.xml","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"rss","expectedUrl":"/rss.xml","canonicalUrl":"https://webhooks.platphormnews.com/rss.xml","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"sitemapIndex","expectedUrl":"/sitemap-index.xml","canonicalUrl":"https://webhooks.platphormnews.com/sitemap-index.xml","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"},{"routeType":"sitemapMain","expectedUrl":"/sitemap-main.xml","canonicalUrl":"https://webhooks.platphormnews.com/sitemap-main.xml","status":"working","source":"generated","publicSafe":true,"protected":false,"testCommand":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace"}],"capabilities":[{"id":"webhook-simulation","name":"Webhook Simulation","description":"Generate webhook event payloads and run public-safe local simulations without persistent delivery.","kind":"workflow","status":"working","publicSafe":true,"protected":false,"humanUrl":"/lab","apiUrl":"/api/v1/agent","mcpTool":"generate_test_payload","docsUrl":"/docs","testCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace"},{"id":"signature-generation","name":"Signature Generation","description":"Generate HMAC signatures for test webhook payloads without persisting raw secrets.","kind":"workflow","status":"working","publicSafe":true,"protected":false,"humanUrl":"/simulator","apiUrl":"/api/v1/signatures/generate","mcpTool":"generate_signature","docsUrl":"/docs","testCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace"},{"id":"signature-verification","name":"Signature Verification","description":"Verify webhook signatures against payloads and timestamp tolerance without persisting raw secrets.","kind":"workflow","status":"working","publicSafe":true,"protected":false,"humanUrl":"/simulator","apiUrl":"/api/v1/signatures/verify","mcpTool":"verify_signature","docsUrl":"/docs","testCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace"},{"id":"endpoint-registration","name":"Endpoint Registration","description":"Register webhook receiver endpoints with SSRF-safe URL validation.","kind":"api","status":"working","publicSafe":false,"protected":true,"humanUrl":"/dashboard/endpoints","apiUrl":"/api/v1/endpoints","mcpTool":"register_webhook_endpoint","docsUrl":"/docs","testCommand":"PLATPHORM_API_KEY=... npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --protected --json --trace"},{"id":"event-creation-listing","name":"Event Creation and Listing","description":"Create persistent webhook events with protected dispatch; public reads are redacted.","kind":"webhook","status":"working","publicSafe":true,"protected":true,"humanUrl":"/dashboard/events","apiUrl":"/api/v1/events","mcpTool":"create_webhook_event","docsUrl":"/docs","testCommand":"PLATPHORM_API_KEY=... npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --protected --json --trace"},{"id":"delivery-tracking","name":"Delivery Tracking","description":"Inspect webhook delivery and attempt state with public-safe redaction.","kind":"data","status":"working","publicSafe":true,"protected":false,"humanUrl":"/dashboard/replays","apiUrl":"/api/v1/deliveries","mcpTool":"list_deliveries","docsUrl":"/docs","testCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace"},{"id":"delivery-replay","name":"Delivery Replay","description":"Replay webhook deliveries with protected authorization and explicit operator confirmation.","kind":"workflow","status":"working","publicSafe":false,"protected":true,"humanUrl":"/dashboard/replays","apiUrl":"/api/v1/deliveries/{id}/replay","mcpTool":"replay_webhook","docsUrl":"/docs","testCommand":"PLATPHORM_API_KEY=... npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --protected --json --trace"},{"id":"contract-creation","name":"Contract Creation","description":"Create and manage persistent webhook contracts.","kind":"workflow","status":"working","publicSafe":false,"protected":true,"humanUrl":"/dashboard/contracts","apiUrl":"/api/v1/contracts","mcpTool":"create_contract","docsUrl":"/docs","testCommand":"PLATPHORM_API_KEY=... npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --protected --json --trace"},{"id":"payload-validation","name":"Payload Validation","description":"Validate webhook payloads against known contracts or demo schemas.","kind":"workflow","status":"working","publicSafe":true,"protected":false,"humanUrl":"/dashboard/contracts","apiUrl":"/api/v1/contracts/{id}/validate","mcpTool":"validate_payload","docsUrl":"/docs","testCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace"},{"id":"vercel-webhook-receiver","name":"Vercel Webhook Receiver","description":"Receive Vercel webhook events and verify configured Vercel signatures.","kind":"webhook","status":"working","publicSafe":false,"protected":true,"humanUrl":"/docs","apiUrl":"/api/webhooks","mcpTool":"receive_test_webhook","docsUrl":"/docs","testCommand":"PLATPHORM_API_KEY=... npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --protected --json --trace"},{"id":"mcp-integration","name":"MCP Integration","description":"Expose webhook tools, resources, and prompts through JSON-RPC MCP.","kind":"mcp","status":"working","publicSafe":true,"protected":false,"humanUrl":"/capabilities","apiUrl":"/api/mcp","mcpTool":null,"docsUrl":"/docs","testCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace"},{"id":"agent-endpoint","name":"Agent Endpoint","description":"Expose safe agent actions with protected mutations gated by PLATPHORM_API_KEY.","kind":"agent","status":"working","publicSafe":true,"protected":true,"humanUrl":"/capabilities","apiUrl":"/api/v1/agent","mcpTool":null,"docsUrl":"/docs","testCommand":"PLATPHORM_API_KEY=... npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --protected --json --trace"},{"id":"docs-openapi","name":"Docs and OpenAPI","description":"Publish human API docs and parseable OpenAPI metadata for public and protected routes.","kind":"docs","status":"working","publicSafe":true,"protected":false,"humanUrl":"/docs","apiUrl":"/api/docs","mcpTool":null,"docsUrl":"/docs","testCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace"},{"id":"discovery-files","name":"llms, Sitemap, Robots, Feed","description":"Expose public-safe discovery files for agents and crawlers.","kind":"docs","status":"working","publicSafe":true,"protected":false,"humanUrl":"/capabilities","apiUrl":"/llms-index.json","mcpTool":null,"docsUrl":"/docs","testCommand":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace"}],"mcp":{"endpoint":"/api/mcp","status":"working","toolCount":58,"resourceCount":22,"promptCount":12,"publicSafeTools":["get_webhooklab_info","list_webhook_events","get_webhook_event","list_webhook_endpoints","get_webhook_endpoint","get_delivery","list_delivery_attempts","generate_signature","verify_signature","explain_signature_failure","list_contracts","get_contract","validate_payload","generate_negative_payload","get_route_compliance","get_discovery_compliance","generate_webhook_test_plan","generate_webhook_remediation","get_integration_status","get_agent_policy","list_agent_platforms","get_agent_platform","evaluate_agent_access","get_robots_policy","get_ai_policy","get_trust_policy","get_discovery_manifest","get_public_access_summary","get_health","get_info","list_deliveries","generate_test_payload","get_service_status"],"protectedTools":["create_webhook_event","register_webhook_endpoint","update_webhook_endpoint","delete_webhook_endpoint","send_webhook","replay_webhook","cancel_delivery","create_contract","update_contract","delete_contract","run_contract_test","receive_test_webhook","sync_mcp_servers","send_contract_to_spec","create_evals_suite","generate_sandbox_receiver_test","publish_monitor_status","update_agent_policy","refresh_agent_platform_registry","create_docs_report","create_sheet_report","create_deck_summary","create_webhook_endpoint","emit_test_event","replay_event"]},"webhooks":{"receiverEndpoint":"/api/v1/receive/{endpointSlug}","vercelEndpoint":"/api/webhooks","signatureAlgorithms":["sha256","sha512"],"ssrfProtection":true,"secretPersistence":false,"deliveryReplayProtected":true},"degradedFeatures":[{"id":"webhooklab-report-integrations-degraded","title":"Docs, Sheets, and Deck report publishing integrations","classification":"degraded_backend","severity":"medium","expectedBehavior":"Protected report tools should create durable docs, sheets, or deck artifacts after PLATPHORM_API_KEY confirmation.","actualBehavior":"The MCP handlers currently return explicit degraded responses for docs, sheets, and deck publishing integrations.","reproductionCommand":"npx @platphormnews/platphormctl mcp tools https://webhooks.platphormnews.com/api/mcp --json --trace","validationCommand":"PLATPHORM_API_KEY=... npx @platphormnews/platphormctl mcp call https://webhooks.platphormnews.com/api/mcp create_docs_report --protected --input '{\"title\":\"WebhookLab report\"}' --json --trace","ownerHint":"webhooklab"}],"agent":{"commands":[{"label":"Inspect site","command":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace","requiresProtected":false},{"label":"Verify routes","command":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace","requiresProtected":false},{"label":"Validate OpenAPI","command":"npx @platphormnews/platphormctl site openapi https://webhooks.platphormnews.com --json --trace","requiresProtected":false},{"label":"Inspect llms discovery","command":"npx @platphormnews/platphormctl site llms https://webhooks.platphormnews.com --json --trace","requiresProtected":false},{"label":"Validate sitemap","command":"npx @platphormnews/platphormctl site sitemap https://webhooks.platphormnews.com --json --trace","requiresProtected":false},{"label":"Initialize MCP","command":"npx @platphormnews/platphormctl mcp initialize https://webhooks.platphormnews.com/api/mcp --json --trace","requiresProtected":false},{"label":"List MCP tools","command":"npx @platphormnews/platphormctl mcp tools https://webhooks.platphormnews.com/api/mcp --json --trace","requiresProtected":false},{"label":"Network validation","command":"npx @platphormnews/platphormctl --include webhooks.platphormnews.com network validate --best-effort --evidence --json --trace","requiresProtected":false},{"label":"Generate degraded docs","command":"npx @platphormnews/platphormctl docs degraded generate --from-route-map <route-map.json> --json --trace","requiresProtected":false},{"label":"Protected validation","command":"PLATPHORM_API_KEY=... npx @platphormnews/platphormctl --include webhooks.platphormnews.com network validate --protected --best-effort --evidence --json --trace","requiresProtected":true}]}},"mcp":{"endpoint":"/api/mcp","toolCount":58,"resourceCount":22,"promptCount":12,"tools":[{"name":"get_webhooklab_info","description":"Get WebhookLab product identity, lifecycle, and public/protected policy.","access":"public-safe"},{"name":"list_webhook_events","description":"List webhook events.","access":"public-safe"},{"name":"get_webhook_event","description":"Get webhook event by id.","access":"public-safe"},{"name":"create_webhook_event","description":"Create and optionally send webhook event.","access":"protected"},{"name":"list_webhook_endpoints","description":"List registered webhook endpoints.","access":"public-safe"},{"name":"get_webhook_endpoint","description":"Get webhook endpoint by id with public-safe redaction.","access":"public-safe"},{"name":"register_webhook_endpoint","description":"Register webhook endpoint.","access":"protected"},{"name":"update_webhook_endpoint","description":"Update webhook endpoint.","access":"protected"},{"name":"delete_webhook_endpoint","description":"Delete webhook endpoint.","access":"protected"},{"name":"send_webhook","description":"Send webhook event to endpoint.","access":"protected"},{"name":"replay_webhook","description":"Replay webhook delivery.","access":"protected"},{"name":"cancel_delivery","description":"Cancel a pending delivery.","access":"protected"},{"name":"get_delivery","description":"Get webhook delivery.","access":"public-safe"},{"name":"list_delivery_attempts","description":"List delivery attempts.","access":"public-safe"},{"name":"generate_signature","description":"Generate HMAC signature.","access":"public-safe"},{"name":"verify_signature","description":"Verify HMAC signature.","access":"public-safe"},{"name":"explain_signature_failure","description":"Explain a signature mismatch with redacted canonical-string evidence.","access":"public-safe"},{"name":"list_contracts","description":"List webhook contracts.","access":"public-safe"},{"name":"get_contract","description":"Get webhook contract by id.","access":"public-safe"},{"name":"create_contract","description":"Create webhook contract.","access":"protected"},{"name":"update_contract","description":"Update webhook contract.","access":"protected"},{"name":"delete_contract","description":"Delete webhook contract.","access":"protected"},{"name":"validate_payload","description":"Validate payload against contract.","access":"public-safe"},{"name":"generate_negative_payload","description":"Generate negative test payload from contract schema.","access":"public-safe"},{"name":"run_contract_test","description":"Run contract test.","access":"protected"},{"name":"receive_test_webhook","description":"Record inbound webhook receipt.","access":"protected"},{"name":"sync_mcp_servers","description":"Sync MCP server registry.","access":"protected"},{"name":"get_route_compliance","description":"Get route compliance summary.","access":"public-safe"},{"name":"get_discovery_compliance","description":"Get discovery file compliance summary.","access":"public-safe"},{"name":"generate_webhook_test_plan","description":"Generate webhook test plan.","access":"public-safe"},{"name":"generate_webhook_remediation","description":"Generate remediation guidance for failures.","access":"public-safe"},{"name":"get_integration_status","description":"Get public-safe integration status matrix.","access":"public-safe"},{"name":"get_agent_policy","description":"Get WebhookLab agent access policy.","access":"public-safe"},{"name":"list_agent_platforms","description":"List supported agent platform categories without hardcoded unverified crawler strings.","access":"public-safe"},{"name":"get_agent_platform","description":"Get agent platform policy by id.","access":"public-safe"},{"name":"evaluate_agent_access","description":"Evaluate whether an action is public-safe or protected.","access":"public-safe"},{"name":"get_robots_policy","description":"Get robots and sensitive-route policy.","access":"public-safe"},{"name":"get_ai_policy","description":"Get AI policy summary.","access":"public-safe"},{"name":"get_trust_policy","description":"Get trust policy summary.","access":"public-safe"},{"name":"get_discovery_manifest","description":"Get discovery manifest with llms, OpenAPI, sitemap, RSS, robots, and well-known links.","access":"public-safe"},{"name":"get_public_access_summary","description":"Get public-safe and protected access summary.","access":"public-safe"},{"name":"get_health","description":"Get health summary.","access":"public-safe"},{"name":"get_info","description":"Get concise WebhookLab service info.","access":"public-safe"},{"name":"send_contract_to_spec","description":"Protected handoff of a contract to Spec.","access":"protected"},{"name":"create_evals_suite","description":"Protected handoff to Evals for contract test-suite creation.","access":"protected"},{"name":"generate_sandbox_receiver_test","description":"Protected handoff to Sandbox for receiver tests.","access":"protected"},{"name":"publish_monitor_status","description":"Protected handoff of webhook health to Monitor.","access":"protected"},{"name":"update_agent_policy","description":"Protected update of agent policy registry.","access":"protected"},{"name":"refresh_agent_platform_registry","description":"Protected refresh of agent platform registry.","access":"protected"},{"name":"create_docs_report","description":"Create docs report artifact.","access":"protected"},{"name":"create_sheet_report","description":"Create sheet report artifact.","access":"protected"},{"name":"create_deck_summary","description":"Create deck summary artifact.","access":"protected"},{"name":"create_webhook_endpoint","description":"Backward compatible alias for register_webhook_endpoint.","access":"protected"},{"name":"emit_test_event","description":"Backward compatible alias for create_webhook_event.","access":"protected"},{"name":"replay_event","description":"Backward compatible alias for replay_webhook.","access":"protected"},{"name":"list_deliveries","description":"Backward compatible alias for delivery listing.","access":"public-safe"},{"name":"generate_test_payload","description":"Generate test payload template.","access":"public-safe"},{"name":"get_service_status","description":"Get service status summary.","access":"public-safe"}],"resources":["webhooks://events","webhooks://event/{id}","webhooks://endpoints","webhooks://endpoint/{id}","webhooks://deliveries","webhooks://delivery/{id}","webhooks://delivery/{id}/attempts","webhooks://contracts","webhooks://contract/{id}","webhooks://templates","webhooks://signature-policy","webhooks://integrations","webhooks://network/sites","webhooks://network/compliance","webhooks://openapi","webhooks://llms","webhooks://trust-policy","agent-policy://summary","agent-policy://platforms","agent-policy://robots","agent-policy://ai-policy","agent-policy://trust-policy"],"prompts":["create_webhook_test","explain_delivery_failure","generate_retry_test","generate_signature_test","generate_contract_schema","debug_webhook_delivery","replay_webhook_safely","create_webhook_remediation","create_webhook_contract","generate_sandbox_receiver_test","generate_evals_contract_suite","human_machine_webhook_handoff"]},"integrations":[{"id":"spec","name":"Spec Workbench","url":"https://spec.platphormnews.com","purpose":"Validate webhook contracts and generate schema reports.","handoff":"send_contract_to_spec","status":"degraded","access":"protected"},{"id":"evals","name":"Evals","url":"https://evals.platphormnews.com","purpose":"Create contract suites and score retry, replay, and delivery behavior.","handoff":"create_evals_suite","status":"degraded","access":"protected"},{"id":"sandbox","name":"Sandbox","url":"https://sandbox.platphormnews.com","purpose":"Generate receiver tests and validate sample payload handling in a safe runtime.","handoff":"generate_sandbox_receiver_test","status":"degraded","access":"protected"},{"id":"agentui","name":"AgentUI","url":"https://agentui.platphormnews.com","purpose":"Generate payload forms, contract editors, and protected replay panels.","handoff":"generate_agentui_form","status":"degraded","access":"protected"},{"id":"monitor","name":"Monitor","url":"https://monitor.platphormnews.com","purpose":"Publish delivery health, endpoint health, and webhook failure-rate summaries.","handoff":"publish_monitor_status","status":"degraded","access":"protected"},{"id":"trace","name":"Trace","url":"https://trace.platphormnews.com","purpose":"Link events, deliveries, attempts, replays, and contract tests to trace timelines.","handoff":"open_trace_timeline","status":"degraded","access":"public-safe"},{"id":"mcp","name":"MCP Gateway","url":"https://mcp.platphormnews.com","purpose":"Expose WebhookLab tools, resources, prompts, schema validation, and tool status.","handoff":"sync_mcp_servers","status":"working","access":"public-safe"},{"id":"api","name":"API Hub","url":"https://api.platphormnews.com","purpose":"Register OpenAPI, event contracts, webhook metadata, and API product descriptors.","handoff":"register_api_catalog_entry","status":"degraded","access":"protected"},{"id":"docs","name":"Docs","url":"https://docs.platphormnews.com","purpose":"Publish delivery reports, contract remediation notes, and incident docs.","handoff":"create_docs_report","status":"degraded","access":"protected"},{"id":"sheets","name":"Sheets","url":"https://sheets.platphormnews.com","purpose":"Export delivery matrices and endpoint health reports.","handoff":"create_sheet_report","status":"degraded","access":"protected"},{"id":"decks","name":"Decks","url":"https://decks.platphormnews.com","purpose":"Generate executive delivery evidence summaries.","handoff":"create_deck_summary","status":"degraded","access":"protected"},{"id":"cli","name":"platphormctl","url":"https://github.com/platphormnews/platphorm-cli","purpose":"Run repeatable webhook tests, MCP validation, site inspection, and policy checks.","handoff":"platphormctl webhooks","status":"working","access":"public-safe"}],"agent":{"commands":[{"label":"Inspect site","command":"npx @platphormnews/platphormctl site inspect https://webhooks.platphormnews.com --json --trace","requiresProtected":false},{"label":"Verify routes","command":"npx @platphormnews/platphormctl site routes https://webhooks.platphormnews.com --json --trace","requiresProtected":false},{"label":"Validate OpenAPI","command":"npx @platphormnews/platphormctl site openapi https://webhooks.platphormnews.com --json --trace","requiresProtected":false},{"label":"Inspect llms discovery","command":"npx @platphormnews/platphormctl site llms https://webhooks.platphormnews.com --json --trace","requiresProtected":false},{"label":"Validate sitemap","command":"npx @platphormnews/platphormctl site sitemap https://webhooks.platphormnews.com --json --trace","requiresProtected":false},{"label":"Initialize MCP","command":"npx @platphormnews/platphormctl mcp initialize https://webhooks.platphormnews.com/api/mcp --json --trace","requiresProtected":false},{"label":"List MCP tools","command":"npx @platphormnews/platphormctl mcp tools https://webhooks.platphormnews.com/api/mcp --json --trace","requiresProtected":false},{"label":"Network validation","command":"npx @platphormnews/platphormctl --include webhooks.platphormnews.com network validate --best-effort --evidence --json --trace","requiresProtected":false},{"label":"Generate degraded docs","command":"npx @platphormnews/platphormctl docs degraded generate --from-route-map <route-map.json> --json --trace","requiresProtected":false},{"label":"Protected validation","command":"PLATPHORM_API_KEY=... npx @platphormnews/platphormctl --include webhooks.platphormnews.com network validate --protected --best-effort --evidence --json --trace","requiresProtected":true},{"label":"platphormctl site inspect webhooks","command":"platphormctl site inspect webhooks","requiresProtected":false},{"label":"platphormctl mcp validate webhooks","command":"platphormctl mcp validate webhooks","requiresProtected":false},{"label":"platphormctl policy inspect webhooks","command":"platphormctl policy inspect webhooks","requiresProtected":false},{"label":"platphormctl webhooks events","command":"platphormctl webhooks events","requiresProtected":false},{"label":"platphormctl webhooks endpoints","command":"platphormctl webhooks endpoints","requiresProtected":false},{"label":"platphormctl webhooks send --event webhook.test --payload payload.json --dry-run","command":"platphormctl webhooks send --event webhook.test --payload payload.json --dry-run","requiresProtected":false},{"label":"platphormctl webhooks verify-signature --payload payload.json --signature <sig>","command":"platphormctl webhooks verify-signature --payload payload.json --signature <sig>","requiresProtected":false},{"label":"platphormctl webhooks validate-contract --contract contract.json --payload payload.json","command":"platphormctl webhooks validate-contract --contract contract.json --payload payload.json","requiresProtected":false},{"label":"platphormctl harness run webhooks-contract-flow --dry-run","command":"platphormctl harness run webhooks-contract-flow --dry-run","requiresProtected":false},{"label":"platphormctl harness run spec-evals-browserops-loop --target https://webhooks.platphormnews.com --dry-run","command":"platphormctl harness run spec-evals-browserops-loop --target https://webhooks.platphormnews.com --dry-run","requiresProtected":false},{"label":"npx @platphormnews/platphormctl --include webhooks.platphormnews.com network validate --best-effort --evidence --json --trace","command":"npx @platphormnews/platphormctl --include webhooks.platphormnews.com network validate --best-effort --evidence --json --trace","requiresProtected":false}]},"updatedAt":"2026-05-25T16:19:24.309Z"}