{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_8r3ckc6yvuxd","handle":"plainrouter","url":"https://wellknown.network/agents/plainrouter","links":{"self":"https://wellknown.network/agents/plainrouter/record.json","html":"https://wellknown.network/agents/plainrouter","markdown":"https://wellknown.network/agents/plainrouter/record.md","api":"https://wellknown.network/api/v1/agents/plainrouter","status":"https://wellknown.network/api/v1/agents/plainrouter/status","claim":"https://wellknown.network/agents/plainrouter/claim","claimApi":"https://wellknown.network/api/v1/claims","badge":"https://wellknown.network/agents/plainrouter/badge.svg","openapi":"https://wellknown.network/openapi.json"},"ard":{"identifier":"urn:air:plainrouter.com:server:plainrouter","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"PlainRouter","summary":"Inspect an approved ad account and first-party signal health, then propose policy-gated actions.","description":"Inspect an approved ad account and first-party signal health, then propose policy-gated actions.","publisher":{"name":"com.plainrouter","url":null},"homepage":"https://plainrouter.com","repository":null,"version":"0.3.2","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://plainrouter.com/mcp","type":"mcp_streamable_http","auth":null,"probeable":true},{"url":"https://plainrouter.com/mcp/sandbox","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-08-27T14:04:14.270721Z","publishedAt":"2026-08-27T14:04:14.270721Z","registryName":"com.plainrouter/mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"security.identity","name":"Identity & Access","confidence":1,"provenance":"derived"},{"slug":"content.marketing","name":"Marketing","confidence":0.569,"provenance":"derived"},{"slug":"documents.conversion","name":"Document Conversion","confidence":0.554,"provenance":"derived"},{"slug":"code.execution","name":"Code Execution","confidence":0.51,"provenance":"derived"}],"categories":["code","content","documents","security"]},"observed":{"status":"live","statusReason":"Responded 3h ago.","lastOkAt":"2026-09-05T22:26:25.699Z","lastProbedAt":"2026-09-05T22:26:25.699Z","statusComputedAt":"2026-09-05T22:26:44.517Z","reliability30d":{"probes":2,"successRate":1,"p50Ms":272},"latestObservations":[{"at":"2026-09-05T22:26:25.699Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":267,"error":null,"detail":{"tools":[{"name":"get_account_state","description":"Synthetic twin of the production tool. Returns an invented advertising account in the real response shape, marked \"sandbox\": true. Requires no account, API key,"},{"name":"get_signal_health","description":"Synthetic twin of the production tool. Returns invented Signal health in the real response shape, marked \"sandbox\": true. Requires no account, API key, or OAuth"},{"name":"get_performance","description":"Synthetic twin of the production tool. Returns invented reconciliation evidence in the real response shape, marked \"sandbox\": true. Requires no account, API key"},{"name":"validate_sandbox_event","description":"Validate a synthetic, identity-free conversion event against the PlainRouter schema. Requires no account, API key, or OAuth flow. Nothing is stored and nothing "}],"toolCount":4,"serverName":"PlainRouter Sandbox","capabilities":["tools","resources","io.modelcontextprotocol/ui","extensions"],"serverVersion":"0.3.2","protocolVersion":"2025-06-18"}},{"at":"2026-09-05T22:26:25.221Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":276,"error":null,"detail":{"tools":[{"name":"get_account_state","description":"Return the authorized advertising account, workspace, connection, Signal destination, and currently available read-only capabilities."},{"name":"get_signal_health","description":"Diagnostic view of first-party event flow, Meta delivery outcomes, match quality, and reconciliation gaps from PlainRouter stored measurements. Not admissible e"},{"name":"get_performance","description":"Admissible proposal evidence comparing Meta-reported conversions with gateway-verified accepted conversions from stored daily reconciliation reports."},{"name":"verify_signal_ingestion","description":"Verify server-side Signal ingestion by writing one idempotent, identity-free modeled event for the authorized workspace. This confirms ledger receipt but does n"},{"name":"propose-actions","description":"Propose a batch of budget, status, upload, or creative-duplication actions for the approved ad account. Every proposal passes the workspace policy gate; suggest"},{"name":"get-creative-library","description":"Return Meta image and video assets with the ads and last-30-day performance historically associated with each asset."},{"name":"upload-asset","description":"Stage a JPEG/PNG image and submit a canonical upload action through the policy and approval gate."},{"name":"duplicate-ad-with-creative","description":"Submit a canonical proposal to duplicate a source Meta ad with a different creative asset. Approved copies are always created PAUSED."},{"name":"launcher.draft_batch","description":"Create a Launch draft batch from already-synced Drive assets in the workspace and ad account bound to the execution token."},{"name":"launcher.batch_status","description":"Read the bounded status projection of one Launch batch in the workspace and ad account bound to the execution token."},{"name":"launcher.preview_batch","description":"Run the authoritative Launch gate preview checkpoint over one batch in the workspace and ad account bound to the execution token."},{"name":"launcher.execute_batch","description":"Enter execution for one Launch batch in the workspace and ad account bound to the execution token; every mutation is proposed through Actions."},{"name":"show_spend_cap_approval","description":"Render the static spend-cap approval preview card. Reads and writes nothing."}],"toolCount":13,"serverName":"PlainRouter","capabilities":["tools","resources","io.modelcontextprotocol/ui","extensions"],"serverVersion":"0.3.2","protocolVersion":"2025-06-18"}}],"tools":[{"name":"get_account_state","description":"Synthetic twin of the production tool. Returns an invented advertising account in the real response shape, marked \"sandbox\": true. Requires no account, API key,"},{"name":"get_signal_health","description":"Synthetic twin of the production tool. Returns invented Signal health in the real response shape, marked \"sandbox\": true. Requires no account, API key, or OAuth"},{"name":"get_performance","description":"Synthetic twin of the production tool. Returns invented reconciliation evidence in the real response shape, marked \"sandbox\": true. Requires no account, API key"},{"name":"validate_sandbox_event","description":"Validate a synthetic, identity-free conversion event against the PlainRouter schema. Requires no account, API key, or OAuth flow. Nothing is stored and nothing "}],"package":null},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"com.plainrouter/mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/com.plainrouter%2Fmcp","firstSeenAt":"2026-09-05T20:18:54.684Z","fetchedAt":"2026-09-05T20:18:54.684Z","normalizedAt":"2026-09-05T20:18:54.684Z"}]},"firstSeenAt":"2026-09-05T20:18:54.684Z","updatedAt":"2026-09-05T22:26:56.685Z"}