PlainRouter

Inspect an approved ad account and first-party signal health, then propose policy-gated actions.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
93%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~697Tokens (tool definitions)
~1.4 KBTypical response size
Moderate attention impact (0.54% of 128k context)

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-http
https://plainrouter.com/mcp/sandboxstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools
verifiedversion not recorded15 tools
verifiedversion not recorded4 tools
verifiedversion not recorded10 tools