Skip to main content
Glama

Player comparisons are in the DraftCall app

compare_players
Read-onlyIdempotent

Returns NO comparison. Head-to-head player comparisons and start or sit verdicts are available only in the free DraftCall app for iPhone and Android, and this tool answers every call with the download links and nothing else: no stats, no higher scorer, no pick. For facts about one player, use get_player.

Input Schema

NameRequiredDescriptionDefault
player_aNoIgnored. Kept so older clients still validate.
player_bNoIgnored. Kept so older clients still validate.
scoring_formatNoIgnored.

Output Schema

NameRequiredDescriptionDefault
urlYesThe draftcall.io page these figures came from. This is the citation to use.
messageYes
availableYesAlways false. This server does not compare players.
refreshed_atYesWhen this dataset was last refreshed, as an ISO 8601 timestamp.
stats_seasonYesThe completed NFL season every figure in this result describes.
app_store_urlYes
google_play_urlYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed20 schema fields changed
    • changedInput schema / properties / player_a / description
      Previous value: -"First player name, e.g. \"Bijan Robinson\"."New value: +"Ignored. Kept so older clients still validate."
    • changedInput schema / properties / player_b / description
      Previous value: -"Second player name, e.g. \"Jahmyr Gibbs\"."New value: +"Ignored. Kept so older clients still validate."
    • removedInput schema / properties / scoring_format / default
      Removed value: -"half_ppr"
    • changedInput schema / properties / scoring_format / description
      Previous value: -"Scoring format. ppr awards 1 point per reception, half_ppr 0.5, standard 0. Defaults to half_ppr, the most common league setting."New value: +"Ignored."
    • removedInput schema / properties / scoring_format / enum
      Removed value: -[
      -  "ppr",
      -  "half_ppr",
      -  "standard"
      -]
    • removedInput schema / required
      Removed value: -[
      -  "player_a",
      -  "player_b"
      -]
    • addedOutput schema / properties / app_store_url
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / available
      Added value: +{
      +  "description": "Always false. This server does not compare players.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / google_play_url
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / higher_ppg
      Removed value: -{
      -  "description": "Name of the higher scorer, or null when the two are level.",
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • addedOutput schema / properties / message
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / player_a
      Removed value: -{
      -  "properties": {
      -    "byeWeek": {
      -      "type": [
      -        "integer",
      -        "null"
      -      ]
      -    },
      -    "efficiency": {
      -      "description": "Per-game and per-target rates. Each is null where its inputs do not apply.",
      -      "type": "object"
      -    },
      -    "gamesPlayed": {
      -      "type": "integer"
      -    },
      -    "name": {
      -      "type": "string"
      -    },
      -    "position": {
      -      "description": "QB, RB, WR, TE, K or DEF.",
      -      "type": "string"
      -    },
      -    "ppg": {
      -      "description": "Points per game in each scoring format.",
      -      "properties": {
      -        "half_ppr": {
      -          "type": "number"
      -        },
      -        "ppr": {
      -          "type": "number"
      -        },
      -        "standard": {
      -          "type": "number"
      -        }
      -      },
      -      "required": [
      -        "ppr",
      -        "half_ppr",
      -        "standard"
      -      ],
      -      "type": "object"
      -    },
      -    "rank": {
      -      "description": "Rank within the position, by points per game.",
      -      "type": "integer"
      -    },
      -    "slug": {
      -      "description": "URL segment for this player on draftcall.io.",
      -      "type": "string"
      -    },
      -    "stats": {
      -      "description": "Season totals for the fields that apply to the position.",
      -      "type": "object"
      -    },
      -    "team": {
      -      "description": "Team abbreviation.",
      -      "type": "string"
      -    },
      -    "url": {
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "rank",
      -    "name",
      -    "position",
      -    "team",
      -    "ppg",
      -    "gamesPlayed"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / properties / player_b
      Removed value: -{
      -  "properties": {
      -    "byeWeek": {
      -      "type": [
      -        "integer",
      -        "null"
      -      ]
      -    },
      -    "efficiency": {
      -      "description": "Per-game and per-target rates. Each is null where its inputs do not apply.",
      -      "type": "object"
      -    },
      -    "gamesPlayed": {
      -      "type": "integer"
      -    },
      -    "name": {
      -      "type": "string"
      -    },
      -    "position": {
      -      "description": "QB, RB, WR, TE, K or DEF.",
      -      "type": "string"
      -    },
      -    "ppg": {
      -      "description": "Points per game in each scoring format.",
      -      "properties": {
      -        "half_ppr": {
      -          "type": "number"
      -        },
      -        "ppr": {
      -          "type": "number"
      -        },
      -        "standard": {
      -          "type": "number"
      -        }
      -      },
      -      "required": [
      -        "ppr",
      -        "half_ppr",
      -        "standard"
      -      ],
      -      "type": "object"
      -    },
      -    "rank": {
      -      "description": "Rank within the position, by points per game.",
      -      "type": "integer"
      -    },
      -    "slug": {
      -      "description": "URL segment for this player on draftcall.io.",
      -      "type": "string"
      -    },
      -    "stats": {
      -      "description": "Season totals for the fields that apply to the position.",
      -      "type": "object"
      -    },
      -    "team": {
      -      "description": "Team abbreviation.",
      -      "type": "string"
      -    },
      -    "url": {
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "rank",
      -    "name",
      -    "position",
      -    "team",
      -    "ppg",
      -    "gamesPlayed"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / properties / ppg_margin
      Removed value: -{
      -  "type": "number"
      -}
    • removedOutput schema / properties / same_tier
      Removed value: -{
      -  "description": "True only when both play the same position and land in the same tier.",
      -  "type": "boolean"
      -}
    • removedOutput schema / properties / scoring_format
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / shared_bye
      Removed value: -{
      -  "type": "boolean"
      -}
    • removedOutput schema / properties / tier_a
      Removed value: -{
      -  "description": "The tier this player sits in at his position, or null when he is outside the ranked pool.",
      -  "properties": {
      -    "label": {
      -      "type": "string"
      -    },
      -    "tier": {
      -      "type": "integer"
      -    }
      -  },
      -  "type": [
      -    "object",
      -    "null"
      -  ]
      -}
    • removedOutput schema / properties / tier_b
      Removed value: -{
      -  "description": "The tier this player sits in at his position, or null when he is outside the ranked pool.",
      -  "properties": {
      -    "label": {
      -      "type": "string"
      -    },
      -    "tier": {
      -      "type": "integer"
      -    }
      -  },
      -  "type": [
      -    "object",
      -    "null"
      -  ]
      -}
    • changedOutput schema / required
      Previous value: -[
      -  "scoring_format",
      -  "player_a",
      -  "player_b",
      -  "higher_ppg",
      -  "ppg_margin",
      -  "shared_bye",
      -  "same_tier",
      -  "url",
      -  "stats_season",
      -  "refreshed_at"
      -]New value: +[
      +  "available",
      +  "message",
      +  "app_store_url",
      +  "google_play_url",
      +  "url",
      +  "stats_season",
      +  "refreshed_at"
      +]
  2. First observed

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds real behavioral value beyond them: it discloses that parameters are inert and that the response body contains only download links, with no stats or scoring. It does not restate anything the annotations contradict.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical fact — 'Returns NO comparison' — is front-loaded, followed by the explanation and the alternative in one compact block. No sentence is wasted; each clause (what it returns, what it doesn't, where the real data lives) earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and all three parameters documented at 100% coverage, the description needn't explain return values or parameter formats. It fully discharges its remaining duty: telling the agent this tool cannot fulfill comparison requests and where to go instead.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter is explicitly marked 'Ignored', so the schema already carries the semantics. The description reinforces this ('answers every call with... nothing else') but adds no format or syntax detail beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description immediately and unambiguously states what happens on every call: it returns NO comparison and answers with download links only. It distinguishes itself from the sibling get_player by naming it, so an agent knows this tool is a dead end for comparison data and must not expect stats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the condition under which this tool is useful (never, for the actual data) and explicitly routes the agent to an alternative: 'For facts about one player, use get_player.' The exclusion is explicit rather than inferred, which is exactly the routing an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.