Skip to main content
Glama
wasomma

fpv-sim-mcp

by wasomma

Sweep a seed range

sweep_seeds
Read-only

Run multiple consecutive simulation seeds under one configuration to compare aggregate win rates, time-to-fix/kill distributions, and stalemate reasons; identifies notable seeds for deeper review.

Instructions

Run count consecutive seeds (start_seed .. start_seed+count-1) under one configuration and return aggregate statistics only: win rates by team including STALEMATE, time-to-fix and time-to-kill distributions (mean/median/p10/p90), duration distribution, stalemate reasons, and notable seeds worth drilling into with run_engagement. Aggregation is computed server-side; per-run event logs are not returned. Max count 1000.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
modeNoEngagement plan. "orbit" (default): one FPV per side holds a forward orbit while the DF nodes build the fix. "tactical": each side pushes a package of one-way strike sorties into a shared objective (OBJ TANTO), its GCS emitting sortie by sortie, while a reserved hunter-killer launches on the fix; can end in the STALEMATE reason packages_expended. Same terrain, sensors and fix math either way; the same seed gives the same emplacement in both modes.
countYesNumber of consecutive seeds to run.
start_seedYesDeterministic engagement seed. The same seed always replays the identical engagement. Featured orbit seeds: 20260719 (standard BLUFOR win), 66 (fast BLUFOR win), 57 (deliberate BLUFOR win), 41 (OPFOR win), 59 (close race, OPFOR). Featured tactical seeds: 12 (standard BLUFOR win), 26 (fast BLUFOR win), 5 (final-push BLUFOR win), 18 (close race, BLUFOR), 41 (OPFOR win), 14 (stalemate).
config_overridesNoOptional partial CONFIG overrides. Call get_config_schema for the parameter table.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv0.3.0
    • addedInput schema / properties / config_overrides / properties / DRONE / properties / EDGE_MARGIN_M
      Added value: +{
      +  "description": "Commanded steering points are confined this far inside the AO edge, so flight turns back ahead of the boundary. Unit: m. Default 150, range [50, 500].",
      +  "maximum": 500,
      +  "minimum": 50,
      +  "type": "number"
      +}
    • addedInput schema / properties / config_overrides / properties / DRONE / properties / SEARCH_CEP_MULT
      Added value: +{
      +  "description": "Maximum search radius as a multiple of the current fix CEP (floored at ACQ_RANGE_M). Unit: multiplier. Default 2, range [1, 5].",
      +  "maximum": 5,
      +  "minimum": 1,
      +  "type": "number"
      +}
    • addedInput schema / properties / config_overrides / properties / DRONE / properties / SEARCH_MAX_R_M
      Added value: +{
      +  "description": "Absolute cap on the search radius; a completed no-joy pattern re-sweeps from the center. Unit: m. Default 650, range [200, 2000].",
      +  "maximum": 2000,
      +  "minimum": 200,
      +  "type": "number"
      +}
    • addedInput schema / properties / config_overrides / properties / DRONE / properties / SEARCH_MPS
      Added value: +{
      +  "description": "Visual-search airspeed over the fix area when nothing is acquired at the fix point. Unit: m/s. Default 24, range [5, 60].",
      +  "maximum": 60,
      +  "minimum": 5,
      +  "type": "number"
      +}
    • addedInput schema / properties / config_overrides / properties / DRONE / properties / SEARCH_RING_M
      Added value: +{
      +  "description": "Ring spacing per revolution of the expanding search orbit; keep it under ACQ_RANGE_M so successive rings overlap visually. Unit: m. Default 170, range [40, 600].",
      +  "maximum": 600,
      +  "minimum": 40,
      +  "type": "number"
      +}
    • removedInput schema / properties / config_overrides / properties / DRONE / properties / TERMINAL_SEARCH_GROW
      Removed value: -{
      -  "description": "Expanding-search radius growth when nothing is acquired at the fix point. Unit: m/s. Default 22, range [5, 60].",
      -  "maximum": 60,
      -  "minimum": 5,
      -  "type": "number"
      -}
  2. Changed3 schema fields changedv0.2.3
    • addedInput schema / properties / config_overrides / properties / TACTICAL
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "AIM_SIGMA_M": {
      +      "description": "1-sigma scatter of strike aim points about the objective center. Unit: m. Default 90, range [10, 400].",
      +      "maximum": 400,
      +      "minimum": 10,
      +      "type": "number"
      +    },
      +    "LAUNCH_INTERVAL_S": {
      +      "description": "Nominal spacing between strike launches. Unit: s. Default 90, range [10, 600].",
      +      "maximum": 600,
      +      "minimum": 10,
      +      "type": "number"
      +    },
      +    "LAUNCH_JITTER_S": {
      +      "description": "+/- uniform jitter on the launch spacing, drawn per sortie at reset. Unit: s. Default 20, range [0, 120].",
      +      "maximum": 120,
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "OBJ_RADIUS_M": {
      +      "description": "Objective radius; strike aim points are scattered inside it. Unit: m. Default 260, range [60, 800].",
      +      "maximum": 800,
      +      "minimum": 60,
      +      "type": "number"
      +    },
      +    "OBJ_X": {
      +      "description": "Contested objective easting (nominal; jittered per seed like the emplacements). Unit: m. Default 1830, range [400, 3600].",
      +      "maximum": 3600,
      +      "minimum": 400,
      +      "type": "number"
      +    },
      +    "OBJ_Y": {
      +      "description": "Contested objective northing (nominal; jittered per seed like the emplacements). Unit: m. Default 1975, range [400, 3600].",
      +      "maximum": 3600,
      +      "minimum": 400,
      +      "type": "number"
      +    },
      +    "PILOTS": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "BLUFOR": {
      +          "description": "Pilot stations at this side's GCS = max FPVs airborne at once, one C2 link each (floored at 1 by the engine). Unit: count. Default 2, range [1, 6].",
      +          "maximum": 6,
      +          "minimum": 1,
      +          "type": "integer"
      +        },
      +        "OPFOR": {
      +          "description": "Pilot stations at this side's GCS = max FPVs airborne at once, one C2 link each (floored at 1 by the engine). Unit: count. Default 2, range [1, 6].",
      +          "maximum": 6,
      +          "minimum": 1,
      +          "type": "integer"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "RESERVE_HUNTER": {
      +      "description": "Hold one extra FPV back as the dedicated GCS hunter-killer. false: the next unflown strike airframe is retasked when the fix commits (and there is no final push once the package is expended). Boolean. Default true.",
      +      "type": "boolean"
      +    },
      +    "SORTIES": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "BLUFOR": {
      +          "description": "Strike airframes in this side's package (one-way; expended on impact). Unit: count. Default 5, range [1, 12].",
      +          "maximum": 12,
      +          "minimum": 1,
      +          "type": "integer"
      +        },
      +        "OPFOR": {
      +          "description": "Strike airframes in this side's package (one-way; expended on impact). Unit: count. Default 5, range [1, 12].",
      +          "maximum": 12,
      +          "minimum": 1,
      +          "type": "integer"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "STRIKE_TERMINAL_M": {
      +      "description": "A strike sortie hands from autonomous transit to manual terminal control this far from its aim point (manual control keys the uplink continuously). Unit: m. Default 380, range [100, 1500].",
      +      "maximum": 1500,
      +      "minimum": 100,
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / mode
      Added value: +{
      +  "description": "Engagement plan. \"orbit\" (default): one FPV per side holds a forward orbit while the DF nodes build the fix. \"tactical\": each side pushes a package of one-way strike sorties into a shared objective (OBJ TANTO), its GCS emitting sortie by sortie, while a reserved hunter-killer launches on the fix; can end in the STALEMATE reason packages_expended. Same terrain, sensors and fix math either way; the same seed gives the same emplacement in both modes.",
      +  "enum": [
      +    "orbit",
      +    "tactical"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / start_seed / description
      Previous value: -"Deterministic engagement seed. The same seed always replays the identical engagement. Featured seeds: 20260719 (standard BLUFOR win), 66 (fast BLUFOR win), 57 (deliberate BLUFOR win), 41 (OPFOR win), 59 (close race, OPFOR)."New value: +"Deterministic engagement seed. The same seed always replays the identical engagement. Featured orbit seeds: 20260719 (standard BLUFOR win), 66 (fast BLUFOR win), 57 (deliberate BLUFOR win), 41 (OPFOR win), 59 (close race, OPFOR). Featured tactical seeds: 12 (standard BLUFOR win), 26 (fast BLUFOR win), 5 (final-push BLUFOR win), 18 (close race, BLUFOR), 41 (OPFOR win), 14 (stalemate)."
  3. First observedv0.2.0

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true, so the description carries behavioral disclosure. It adds valuable details: aggregation is computed server-side, per-run event logs are not returned, and max count is 1000. No contradiction with annotations.

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?

Two dense sentences plus a short max-count clause, with the operation and scope front-loaded. No filler; every sentence contributes to selection or invocation.

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?

For a batch-analysis tool with no output schema, the description enumerates the return aggregates in detail and clarifies the no-logs constraint. It is sufficient for an agent to decide and call correctly, though it doesn't describe error handling or exact output structure, which is acceptable given the schema richness elsewhere.

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 baseline is 3. The description adds the seed-range formula and restates max count, but parameter-level meaning is already well documented in the schema, including mode explanations and featured seed examples.

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 states a specific verb ('Run'), resource ('count consecutive seeds'), scope ('under one configuration'), and output ('aggregate statistics only'). It enumerates the exact statistics returned and explicitly notes that per-run event logs are not returned, which differentiates it from run_engagement without needing to open that tool.

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

Usage Guidelines4/5

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

The description gives clear context: run a batch of seeds and get only aggregate statistics. It routes to run_engagement for notable seeds and states that per-run logs are absent, implying when to switch. It doesn't explicitly cover compare_configs, describe_model, or get_config_schema, but the primary use case is well defined.

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