Skip to main content
Glama
krmisystems

fantasy-football-manager

prepare_action

Validate a fantasy football action and save a proposal without executing it. Checks player eligibility, roster rules, and user limits, returning a proposal ID for later execution.

Instructions

Validate a synthetic action and save a proposal without executing it.

Requires fresh, complete synthetic data, unpaused automation, and review or automatic mode for every action component. Checks action-specific player eligibility, locks, projections, roster rules, and user limits before saving the proposal. Returns proposal_id, normalized payload, mode, requires_confirmation, scope, and the bound snapshot and configuration revisions. Each call creates a new proposal and audit record. Use execute_demo_action with that exact proposal_id for execution. Use the ESPN companion for browser draft proposals or HTTP lineup, acquisition, drop, and IR proposals.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
actionYesSynthetic action: draft_pick, set_lineup, waiver_claim, free_agent_add, or drop_player. Trades are unsupported.
payloadYesExact action data. Picks and drops use player_id. Lineups use a complete lineup slot-to-player map. Adds use player_id, optional drop_id, and bid (default 0).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.1.2
    • changedInput schema / properties / payload / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "description": "Payload for draft_pick or drop_player.",
      -    "properties": {
      -      "player_id": {
      -        "description": "Exact player ID from the saved snapshot.",
      -        "title": "Player Id",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "player_id"
      -    ],
      -    "title": "PickPayload",
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "Payload for set_lineup.",
      -    "properties": {
      -      "lineup": {
      -        "additionalProperties": {
      -          "type": "string"
      -        },
      -        "description": "Every starter slot mapped to a unique active-roster player ID, using slot keys such as QB1, RB1, and FLEX1.",
      -        "title": "Lineup",
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "lineup"
      -    ],
      -    "title": "LineupPayload",
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "description": "Payload for waiver_claim or free_agent_add.",
      -    "properties": {
      -      "bid": {
      -        "default": 0,
      -        "description": "Nonnegative integer FAAB bid, subject to user budget limits. free_agent_add requires zero.",
      -        "minimum": 0,
      -        "title": "Bid",
      -        "type": "integer"
      -      },
      -      "drop_id": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null,
      -        "description": "Optional active-roster player ID to drop. A full roster requires an allowed drop.",
      -        "title": "Drop Id"
      -      },
      -      "player_id": {
      -        "description": "Exact unrostered player ID to acquire from the saved snapshot.",
      -        "title": "Player Id",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "player_id"
      -    ],
      -    "title": "AddPayload",
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "Payload for draft_pick or drop_player.",
      +    "properties": {
      +      "player_id": {
      +        "description": "Exact player ID from the saved snapshot.",
      +        "title": "Player Id",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "player_id"
      +    ],
      +    "title": "PickPayload",
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "Payload for set_lineup.",
      +    "properties": {
      +      "lineup": {
      +        "additionalProperties": {
      +          "type": "string"
      +        },
      +        "description": "Every starter slot mapped to a unique active-roster player ID, using slot keys such as QB1, RB1, and FLEX1.",
      +        "title": "Lineup",
      +        "type": "object"
      +      },
      +      "repair_player_id": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Repair Player Id"
      +      }
      +    },
      +    "required": [
      +      "lineup"
      +    ],
      +    "title": "LineupPayload",
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "Payload for waiver_claim or free_agent_add.",
      +    "properties": {
      +      "bid": {
      +        "default": 0,
      +        "description": "Nonnegative integer FAAB bid, subject to user budget limits. free_agent_add requires zero.",
      +        "minimum": 0,
      +        "title": "Bid",
      +        "type": "integer"
      +      },
      +      "drop_id": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Optional active-roster player ID to drop. A full roster requires an allowed drop.",
      +        "title": "Drop Id"
      +      },
      +      "player_id": {
      +        "description": "Exact unrostered player ID to acquire from the saved snapshot.",
      +        "title": "Player Id",
      +        "type": "string"
      +      },
      +      "repair_player_id": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Repair Player Id"
      +      }
      +    },
      +    "required": [
      +      "player_id"
      +    ],
      +    "title": "AddPayload",
      +    "type": "object"
      +  }
      +]
  2. Changed7 schema fields changedv0.1.1
    • addedInput schema / properties / action / description
      Added value: +"Synthetic action: draft_pick, set_lineup, waiver_claim, free_agent_add, or drop_player. Trades are unsupported."
    • addedInput schema / properties / action / enum
      Added value: +[
      +  "draft_pick",
      +  "set_lineup",
      +  "waiver_claim",
      +  "free_agent_add",
      +  "drop_player"
      +]
    • removedInput schema / properties / payload / additionalProperties
      Removed value: -true
    • addedInput schema / properties / payload / anyOf
      Added value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "Payload for draft_pick or drop_player.",
      +    "properties": {
      +      "player_id": {
      +        "description": "Exact player ID from the saved snapshot.",
      +        "title": "Player Id",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "player_id"
      +    ],
      +    "title": "PickPayload",
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "Payload for set_lineup.",
      +    "properties": {
      +      "lineup": {
      +        "additionalProperties": {
      +          "type": "string"
      +        },
      +        "description": "Every starter slot mapped to a unique active-roster player ID, using slot keys such as QB1, RB1, and FLEX1.",
      +        "title": "Lineup",
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "lineup"
      +    ],
      +    "title": "LineupPayload",
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "Payload for waiver_claim or free_agent_add.",
      +    "properties": {
      +      "bid": {
      +        "default": 0,
      +        "description": "Nonnegative integer FAAB bid, subject to user budget limits. free_agent_add requires zero.",
      +        "minimum": 0,
      +        "title": "Bid",
      +        "type": "integer"
      +      },
      +      "drop_id": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Optional active-roster player ID to drop. A full roster requires an allowed drop.",
      +        "title": "Drop Id"
      +      },
      +      "player_id": {
      +        "description": "Exact unrostered player ID to acquire from the saved snapshot.",
      +        "title": "Player Id",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "player_id"
      +    ],
      +    "title": "AddPayload",
      +    "type": "object"
      +  }
      +]
    • addedInput schema / properties / payload / description
      Added value: +"Exact action data. Picks and drops use player_id. Lineups use a complete lineup slot-to-player map. Adds use player_id, optional drop_id, and bid (default 0)."
    • addedInput schema / properties / payload / examples
      Added value: +[
      +  {
      +    "player_id": "demo-rb-001"
      +  }
      +]
    • removedInput schema / properties / payload / type
      Removed value: -"object"
  3. First observedv0.1.0

TDQS

A4.3/5.0
Behavior4/5

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

Annotations are sparse (all hints false), so the description carries the burden. It discloses that each call creates a new proposal and audit record (non-idempotent), which aligns with idempotentHint=false. It also explains validation checks and prerequisites, adding behavioral context beyond the annotations. It doesn't mention error handling or failure modes, but the core side effects are clearly stated.

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

Conciseness4/5

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

The description is front-loaded with the core purpose, then lists conditions, checks, returns, side effects, and alternatives. Each sentence adds information and there is minimal fluff. It is slightly longer than strictly necessary but well-organized and efficient.

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

Completeness4/5

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

Given the tool's complexity (two parameters but a payload with three variants) and the presence of an output schema, the description covers prerequisites, validations, return contents, side effects, and usage alternatives. It doesn't explicitly address error scenarios or edge cases, but an agent has enough information to invoke it correctly and know what to expect.

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%, so the schema already fully documents the action enum and each payload variant. The description adds context about validations and data requirements but doesn't add per-parameter semantics beyond what the schema provides. Baseline 3 is appropriate since the schema carries the heavy lifting.

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?

States a specific verb ('Validate'), a resource ('synthetic action'), and an explicit non-goal ('without executing it'). It clearly distinguishes itself from siblings by naming execute_demo_action as the execution counterpart and the ESPN companion for browser/HTTP proposals, so an agent can immediately tell what this tool is and is not for.

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?

Provides explicit prerequisites ('fresh, complete synthetic data, unpaused automation, review or automatic mode'), names the execution alternative ('Use execute_demo_action with that exact proposal_id'), and states when to prefer a different tool ('Use the ESPN companion for browser draft proposals or HTTP...'). This leaves no ambiguity about when to invoke this tool.

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