PlainRouter
Inspect an approved ad account and first-party signal health, then propose policy-gated actions.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"mcp": {
"url": "https://plainrouter.com/mcp"
}
}
}Remote endpoints
https://plainrouter.com/mcpstreamable-httphttps://plainrouter.com/mcp/sandboxstreamable-httpWhat it can do
Tool inventory
Tools (4)
🟢get_account_state(account_id)
Synthetic twin of the production tool. Returns an invented advertising account in the real response shape, marked "sandbox": true. Requires no account, API key, or OAuth flow.
Input Schema
{
"type": "object",
"properties": {
"account_id": {
"description": "Advertising account ID. Required when the workspace has more than one active account.",
"minimum": 1,
"type": "integer"
}
}
}🟢get_signal_health(account_id, days, months)
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 flow.
Input Schema
{
"type": "object",
"properties": {
"account_id": {
"description": "Advertising account ID. Required when the workspace has more than one active account.",
"minimum": 1,
"type": "integer"
},
"days": {
"description": "Trailing window in days. One of 7, 30, 90.",
"default": 7,
"enum": [
7,
30,
90
],
"minimum": 7,
"maximum": 90,
"type": "integer"
},
"months": {
"description": "Trailing window of 12 calendar months, in place of days. Offered only where the workspace plan keeps that history and the workspace is set to keep it.",
"enum": [
12
],
"type": "integer"
}
}
}🟢get_performance(account_id, days)
Synthetic twin of the production tool. Returns invented reconciliation evidence in the real response shape, marked "sandbox": true. Requires no account, API key, or OAuth flow.
Input Schema
{
"type": "object",
"properties": {
"account_id": {
"description": "Advertising account ID. Required when the workspace has more than one active account.",
"minimum": 1,
"type": "integer"
},
"days": {
"description": "Number of reporting days to compare, from 1 to 90.",
"default": 7,
"minimum": 1,
"maximum": 90,
"type": "integer"
}
}
}🟢validate_sandbox_event(event_name, event_id, action_source, value_data)
Validate a synthetic, identity-free conversion event against the Plainrouter schema. Requires no account, API key, or OAuth flow. Nothing is stored and nothing is sent to an advertising provider. Use this to confirm the server is reachable and that an event payload is well formed before requesting credentials.
Input Schema
{
"type": "object",
"properties": {
"event_name": {
"description": "Synthetic event name, such as Purchase. Maximum 100 characters.",
"maxLength": 100,
"type": "string"
},
"event_id": {
"description": "Optional synthetic idempotency key. Maximum 128 characters. One is derived when omitted.",
"maxLength": 128,
"type": "string"
},
"action_source": {
"description": "Where the synthetic event originated: website, app, or other.",
"default": "website",
"type": "string"
},
"value_data": {
"description": "Optional synthetic commerce data. Identity-bearing fields are rejected.",
"properties": {
"value": {
"description": "Decimal string such as \"49.90\".",
"type": "string"
},
"currency": {
"description": "Three-letter uppercase ISO 4217 code such as EUR.",
"type": "string"
},
"order_id": {
"description": "Synthetic order reference. Maximum 128 characters.",
"type": "string"
}
},
"type": "object"
}
},
"required": [
"event_name"
]
}Community
Evidence