# Plainrouter (com.plainrouter/mcp): tool descriptions scored

- tools/list taken: 2026-11-02 (UTC)
- From: [Official MCP Registry](https://registry.modelcontextprotocol.io/v0/servers/com.plainrouter%2Fmcp/versions/latest)
- Connected to: https://plainrouter.com/mcp
- Homepage: https://plainrouter.com/
- Scoring rules: v2
- Tools: 44
- Average: 50.3 / 100 (Cloudy)
- Near-identical pairs: 6

This page shows how Plainrouter (com.plainrouter/mcp)'s tool descriptions scored, the issues found and the names of its tools and parameters. The descriptions are the server's own: read them where the copy came from.

Forecall asked the URL this server lists in the official MCP Registry for its tools/list once, on the date above, without calling any tool. The server may have changed since.

## Across the server

- Major: 44 tools. Above 40, models choose less accurately.
- Minor: The server's instructions are 2855 characters. Claude Code reads only the first 2,048 by default (Codex 0.154.0 reads them whole). Put what the server is for first.

## Tools

- `dry_run_actions`: 30 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: actions, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].rationale, actions[].idempotency_key, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].rationale, actions[].idempotency_key, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].rationale, actions[].idempotency_key, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].rationale, actions[].idempotency_key, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].rationale, actions[].idempotency_key, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].rationale, actions[].idempotency_key, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].rationale, actions[].idempotency_key, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].params.staged_asset_id, actions[].params.asset_type, actions[].params.filename, actions[].params.content_sha256, actions[].params.mime_type, actions[].params.size_bytes, actions[].rationale, actions[].idempotency_key, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].params.asset_id, actions[].params.status, actions[].params.name_suffix, actions[].rationale, actions[].idempotency_key, rationale, idempotency_key, evidence, evidence[].fields_used, evidence[].action_index, target_source, account_id, workspace_id.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Says nothing about what it returns.
- `actions.rules.list`: 32 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: page, per_page.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Says nothing about what it returns.
- `launch.plans.create`: 34 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: name, platform_ad_account_id, platform, campaign_ref, campaign_spec, ad_set_ref, ad_set_spec, budget_type, budget_amount_minor, currency, copy, copy.primary_text, copy.headline, copy.description, copy.cta, landing_page, utm_policy_name, naming_policy_name, creative_ids, creative_overrides, creative_overrides[].copy, creative_overrides[].copy.primary_text, creative_overrides[].copy.headline, creative_overrides[].copy.description, creative_overrides[].copy.cta, creative_overrides[].landing_page.
  - Minor: String arguments with no constraint or example: copy.primary_text, copy.headline, copy.description, creative_overrides[].copy.primary_text, creative_overrides[].copy.headline, creative_overrides[].copy.description.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Required identifiers whose description does not say where the value comes from: platform_ad_account_id. Name the tool or the place that returns it, or models look it up first.
- `launch.plans.update`: 35 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: name, platform_ad_account_id, platform, campaign_ref, campaign_spec, ad_set_ref, ad_set_spec, budget_type, budget_amount_minor, currency, copy, copy.primary_text, copy.headline, copy.description, copy.cta, landing_page, utm_policy_name, naming_policy_name, creative_ids, creative_overrides, creative_overrides[].copy, creative_overrides[].copy.primary_text, creative_overrides[].copy.headline, creative_overrides[].copy.description, creative_overrides[].copy.cta, creative_overrides[].landing_page.
  - Minor: String arguments with no constraint or example: copy.primary_text, copy.headline, copy.description, creative_overrides[].copy.primary_text, creative_overrides[].copy.headline, creative_overrides[].copy.description.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Required identifiers whose description does not say where the value comes from: plan_id. Name the tool or the place that returns it, or models look it up first.
- `launch.creatives.index`: 39 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: page.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Says nothing about what it returns.
- `list_workspaces`: 40 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: No `required` list, so every argument is optional.
  - Minor: Says nothing about what it returns.
- `submit_feedback`: 40 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Major: Arguments without a description: kind, message.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Says nothing about what it returns.
- `get_event_volume`: 42 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: level, lookback.
  - Minor: No `required` list, so every argument is optional.
  - Minor: Says nothing about what it returns.
- `get_trial_proof`: 42 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: level, lookback.
  - Minor: No `required` list, so every argument is optional.
  - Minor: Says nothing about what it returns.
- `propose-actions`: 43 / 100
  - Major: Arguments without a description: actions, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].rationale, actions[].idempotency_key, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].rationale, actions[].idempotency_key, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].rationale, actions[].idempotency_key, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].rationale, actions[].idempotency_key, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].rationale, actions[].idempotency_key, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].rationale, actions[].idempotency_key, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].rationale, actions[].idempotency_key, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].params.staged_asset_id, actions[].params.asset_type, actions[].params.filename, actions[].params.content_sha256, actions[].params.mime_type, actions[].params.size_bytes, actions[].rationale, actions[].idempotency_key, actions[].type, actions[].target_entity, actions[].target_entity.type, actions[].target_entity.id, actions[].target_entity.name, actions[].params, actions[].params.asset_id, actions[].params.status, actions[].params.name_suffix, actions[].rationale, actions[].idempotency_key, rationale, idempotency_key, evidence, evidence[].fields_used, evidence[].action_index, target_source, account_id, workspace_id.
  - Minor: Says nothing about what it returns.
- `get_signal_health`: 44 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Says nothing about what it returns.
- `list_actions`: 44 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: limit, status, page.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The description mentions none of its 3 or more arguments.
- `actions.rules.show`: 46 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Says nothing about what it returns.
  - Minor: Required identifiers whose description does not say where the value comes from: rule_id. Name the tool or the place that returns it, or models look it up first.
- `actions.rules.update`: 46 / 100
  - Minor: Arguments without a description: name, definition.target_level, definition.action, definition.cost_comparison.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Says nothing about what it returns.
  - Minor: Required identifiers whose description does not say where the value comes from: rule_id. Name the tool or the place that returns it, or models look it up first.
- `get_action_policy`: 47 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: No `required` list, so every argument is optional.
  - Minor: Says nothing about what it returns.
- `get-creative-library`: 48 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The description mentions none of its 3 or more arguments.
- `actions.rules.create`: 50 / 100
  - Minor: Arguments without a description: name, definition.target_level, definition.action, definition.cost_comparison, platform_ad_account_id.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Says nothing about what it returns.
  - Minor: Required identifiers whose description does not say where the value comes from: platform_ad_account_id. Name the tool or the place that returns it, or models look it up first.
- `get_action_batch`: 50 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: limit, batch_id.
  - Minor: String arguments with no constraint or example: batch_id.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Required identifiers whose description does not say where the value comes from: batch_id. Name the tool or the place that returns it, or models look it up first.
- `launch.creatives.show`: 50 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Says nothing about what it returns.
  - Minor: Required identifiers whose description does not say where the value comes from: creative_id. Name the tool or the place that returns it, or models look it up first.
- `launch.creatives.status`: 50 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Says nothing about what it returns.
  - Minor: Required identifiers whose description does not say where the value comes from: creative_id. Name the tool or the place that returns it, or models look it up first.
- `launch.plans.list`: 50 / 100
  - Minor: Arguments without a description: page, per_page.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The description mentions none of its 3 or more arguments.
- `get_account_inventory`: 51 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Says nothing about what it returns.
  - Minor: Required identifiers whose description does not say where the value comes from: account_id. Name the tool or the place that returns it, or models look it up first.
- `get_action_decision_receipt`: 51 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: action_id.
  - Minor: String arguments with no constraint or example: action_id.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Required identifiers whose description does not say where the value comes from: action_id. Name the tool or the place that returns it, or models look it up first.
- `launch.plans.show`: 51 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: limit.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Required identifiers whose description does not say where the value comes from: plan_id. Name the tool or the place that returns it, or models look it up first.
- `launch.plans.validate`: 51 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Required identifiers whose description does not say where the value comes from: plan_id. Name the tool or the place that returns it, or models look it up first.
- `upload-asset`: 51 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Says nothing about what it returns.
- `get_account_state`: 54 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: No `required` list, so every argument is optional.
- `get_install_instructions`: 54 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: No `required` list, so every argument is optional.
- `duplicate-ad-with-creative`: 55 / 100
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Says nothing about what it returns.
- `revoke_grant`: 55 / 100
  - Minor: Says nothing about what it returns.
  - Minor: Required identifiers whose description does not say where the value comes from: grant_id. Name the tool or the place that returns it, or models look it up first.
- `verify_signal_ingestion`: 55 / 100
  - Minor: No `required` list, so every argument is optional.
  - Minor: Says nothing about what it returns.
- `get_action`: 56 / 100
  - Minor: Arguments without a description: action_id.
  - Minor: String arguments with no constraint or example: action_id.
  - Minor: The description mentions none of its 3 or more arguments.
  - Major: The name is made of generic words only.
  - Minor: Required identifiers whose description does not say where the value comes from: action_id. Name the tool or the place that returns it, or models look it up first.
- `get_consent_rates`: 57 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: No `required` list, so every argument is optional.
- `get_inventory_metrics`: 57 / 100
  - Minor: The description mentions none of its 3 or more arguments.
  - Minor: Required identifiers whose description does not say where the value comes from: account_id. Name the tool or the place that returns it, or models look it up first.
- `get_performance`: 57 / 100
  - Minor: No `required` list, so every argument is optional.
- `get_signal_quality`: 57 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The description mentions none of its 3 or more arguments.
- `launch.creatives.store`: 57 / 100
- `launch.plans.copy`: 58 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Required identifiers whose description does not say where the value comes from: plan_id. Name the tool or the place that returns it, or models look it up first.
- `get_conversion_journeys`: 61 / 100
  - Minor: No `required` list, so every argument is optional.
- `get_cookie_scan`: 62 / 100
  - Minor: Arguments without a description: limit.
  - Minor: No `required` list, so every argument is optional.
  - Minor: The description mentions none of its 3 or more arguments.
- `launch.creatives.store-from-url`: 62 / 100
- `launch.plans.execute`: 63 / 100
- `get_cac_by_channel`: 67 / 100
  - Minor: No `required` list, so every argument is optional.
  - Minor: The description mentions none of its 3 or more arguments.
- `get_arrivals_comparison`: 70 / 100
  - Minor: No `required` list, so every argument is optional.

Is your server listed here and you would rather it were not? Email support@forecall.dev, and we will take it off within 7 days.

[All scored servers](https://forecall.dev/en/servers)
