Skip to main content
Glama
wasomma

fpv-sim-mcp

by wasomma

Run one engagement

run_engagement
Read-only

Run a deterministic force-on-force engagement and get the complete outcome: winner, reason, timeline, fix quality, intercepts, and event log. Choose orbit or tactical mode.

Instructions

Run a single deterministic force-on-force engagement to completion and return the full record: winner (or STALEMATE) with reason, duration, phase timeline, per-team fix quality (CEP breakdown), LOB and intercept counts per DF node, key event timestamps, drone/GCS end states, and the complete event log. Tactical mode adds the objective, sortie tallies and the per-airframe package state. Notional data.

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.
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 / 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
Behavior5/5

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

The description extensively discloses behavior beyond the readOnlyHint annotation: determinism ('same seed always replays the identical engagement'), STALEMATE outcomes and the packages_expended reason, tactical-mode output differences, and the crucial flag that the data is 'Notional data.' No contradiction with readOnlyHint exists — the deterministic run-and-return semantics are consistent with a read-only computation.

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 a single dense paragraph with the core action front-loaded ('Run a single deterministic force-on-force engagement to completion') followed by the return-record enumeration. It runs long due to the output list, but every clause earns its place given there is no output schema to carry that information.

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 no output schema present, the description's detailed enumeration of the return record (winner, reason, duration, phase timeline, CEP breakdown, LOB/intercept counts, timestamps, end states, event log, and tactical-mode additions) serves as the de facto output documentation. Combined with the rich input schema (featured seeds, mode semantics, config defaults), an agent has everything needed to invoke and interpret the result.

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 documents mode, seed, and every nested config_overrides field with units, defaults, and ranges. The description adds only marginal parameter context, e.g., that tactical mode adds objective and sortie-tally outputs. Baseline 3 is appropriate when the schema carries the parameter documentation burden.

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 and resource: 'Run a single deterministic force-on-force engagement to completion' and enumerates the full return record. The 'single' qualifier distinguishes it from the sibling sweep_seeds, and the output enumeration (winner/STALEMATE, phase timeline, CEP breakdown, event log) leaves no ambiguity about scope.

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

Usage Guidelines3/5

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

Provides clear context on what the tool does and how orbit/tactical modes alter behavior, which informs when an agent would call it. However, it never explicitly names alternatives or exclusion conditions — it doesn't say to use sweep_seeds for multi-seed exploration or compare_configs for configuration comparisons. Differentiation from sweep_seeds is only implicit in the word 'single'.

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