← WebMCP Directory

Tool tree

notasprint.vercel.app

Media & PersonalTools verified
Website
Design racing circuits for Formula 1, Formula E and MotoGP together with an AI agent in the same live workspace. WebMCP-native.
Explore capabilities
    get_circuitAnswer

    Read the live circuit as the designer sees it: motorsport and vehicle model, origin (reference, custom seed or original), every turn with position (metres, +x east, +y south), radius, sector, apex/entry speed, braking drop, approach, overtaking score and lock state, sector summaries, scores, warnings, brief status, latest simulation, design inspirations and the Reference Library. The lap runs Turn 1 → N from start/finish. Call it first and again after the human edits something.

    View tool JSON
    {
      "name": "get_circuit",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read the live circuit as the designer sees it: motorsport and vehicle model, origin (reference, custom seed or original), every turn with position (metres, +x east, +y south), radius, sector, apex/entry speed, braking drop, approach, overtaking score and lock state, sector summaries, scores, warnings, brief status, latest simulation, design inspirations and the Reference Library. The lap runs Turn 1 → N from start/finish. Call it first and again after the human edits something.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    analyze_circuitAction

    Deterministic design analysis with explanations: how each score is built, the strong overtaking opportunities and the best candidates to become one, sector character, geometry warnings, each brief constraint's PASS / NEAR LIMIT / FAIL, the latest simulation's full findings and per-turn signals, and each design inspiration's traits and effect. Use it to decide what to change and to verify a change achieved the goal.

    View tool JSON
    {
      "name": "analyze_circuit",
      "kind": "act",
      "impl": "imperative",
      "description": "Deterministic design analysis with explanations: how each score is built, the strong overtaking opportunities and the best candidates to become one, sector character, geometry warnings, each brief constraint's PASS / NEAR LIMIT / FAIL, the latest simulation's full findings and per-turn signals, and each design inspiration's traits and effect. Use it to decide what to change and to verify a change achieved the goal.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    }
    apply_design_moveAction

    Apply one motorsport design move to a turn. Moves: tighten_turn (smaller radius, slower apex), open_turn (larger radius, faster), create_overtaking_zone (turn becomes a heavy braking zone with a long approach — the classic overtaking spot), add_chicane_after / add_esses_after / add_hairpin_after (insert new turns on the straight after this turn), remove_turn (delete, straightening the track). Respects locked turns. Returns a receipt and the new circuit state.

    View tool JSON
    {
      "name": "apply_design_move",
      "kind": "act",
      "impl": "imperative",
      "description": "Apply one motorsport design move to a turn. Moves: tighten_turn (smaller radius, slower apex), open_turn (larger radius, faster), create_overtaking_zone (turn becomes a heavy braking zone with a long approach — the classic overtaking spot), add_chicane_after / add_esses_after / add_hairpin_after (insert new turns on the straight after this turn), remove_turn (delete, straightening the track). Respects locked turns. Returns a receipt and the new circuit state.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "move": {
            "type": "string",
            "enum": [
              "tighten_turn",
              "open_turn",
              "create_overtaking_zone",
              "add_chicane_after",
              "add_esses_after",
              "add_hairpin_after",
              "remove_turn"
            ]
          },
          "turn": {
            "type": "integer",
            "description": "Turn number (1-based)."
          },
          "intensity": {
            "type": "string",
            "enum": [
              "subtle",
              "moderate",
              "strong"
            ],
            "description": "How far to push the change. Default moderate."
          },
          "reason": {
            "type": "string",
            "description": "One short sentence shown to the designer, e.g. 'Braking zone for overtaking into Turn 3'."
          }
        },
        "required": [
          "move",
          "turn"
        ]
      }
    }
    reshape_sectorAction

    Reshape a whole sector, respecting locked turns. Give either an intent — faster (open radii, remove kinks at strong), more_technical (tighten radii and insert a chicane on the sector's longest straight; esses too at strong), more_overtaking (turn the best candidate into a heavy braking zone) — or a design inspiration (high-speed, street-technical, flowing-technical), which applies that archetype's whole set of characteristics to the sector. The tool decides the geometry; you decide the intent.

    View tool JSON
    {
      "name": "reshape_sector",
      "kind": "act",
      "impl": "imperative",
      "description": "Reshape a whole sector, respecting locked turns. Give either an intent — faster (open radii, remove kinks at strong), more_technical (tighten radii and insert a chicane on the sector's longest straight; esses too at strong), more_overtaking (turn the best candidate into a heavy braking zone) — or a design inspiration (high-speed, street-technical, flowing-technical), which applies that archetype's whole set of characteristics to the sector. The tool decides the geometry; you decide the intent.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sector": {
            "type": "integer",
            "enum": [
              1,
              2,
              3
            ]
          },
          "intent": {
            "type": "string",
            "enum": [
              "faster",
              "more_technical",
              "more_overtaking"
            ],
            "description": "Single-axis change. Omit when giving an inspiration."
          },
          "inspiration": {
            "type": "string",
            "enum": [
              "high-speed",
              "street-technical",
              "flowing-technical"
            ],
            "description": "Design inspiration to apply to the sector (takes precedence over intent). Phrases like 'Monza-style' resolve to the matching id."
          },
          "intensity": {
            "type": "string",
            "enum": [
              "subtle",
              "moderate",
              "strong"
            ],
            "description": "How far to push the change. Default moderate."
          },
          "reason": {
            "type": "string",
            "description": "One short sentence shown to the designer."
          }
        },
        "required": [
          "sector"
        ]
      }
    }
    apply_design_inspirationAction

    Apply a design inspiration to the whole circuit or one sector, designing around locked turns. high-speed: open radii, drop shallow kinks, make the corner after the longest approach a heavy braking zone. street-technical: tighten radii and insert a tight chicane on the longest straight. flowing-technical: pull radii into a 70–140 m rhythm band and insert linked esses. The start/finish straight is kept. Returns a receipt and the new state.

    View tool JSON
    {
      "name": "apply_design_inspiration",
      "kind": "act",
      "impl": "imperative",
      "description": "Apply a design inspiration to the whole circuit or one sector, designing around locked turns. high-speed: open radii, drop shallow kinks, make the corner after the longest approach a heavy braking zone. street-technical: tighten radii and insert a tight chicane on the longest straight. flowing-technical: pull radii into a 70–140 m rhythm band and insert linked esses. The start/finish straight is kept. Returns a receipt and the new state.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "inspiration": {
            "type": "string",
            "enum": [
              "high-speed",
              "street-technical",
              "flowing-technical"
            ],
            "description": "Design inspiration to apply: a set of characteristics, never a real-world layout. Phrases like 'Monza-style' resolve to the matching id."
          },
          "sector": {
            "type": "integer",
            "enum": [
              1,
              2,
              3
            ],
            "description": "Limit the change to one sector. Omit for the whole circuit."
          },
          "intensity": {
            "type": "string",
            "enum": [
              "subtle",
              "moderate",
              "strong"
            ],
            "description": "How far to push the change. Default moderate."
          },
          "reason": {
            "type": "string",
            "description": "One short sentence shown to the designer, e.g. 'High-speed character for Sector 2'."
          }
        },
        "required": [
          "inspiration"
        ]
      }
    }
    edit_turnsAction

    Precisely edit one or more turns: position (metres), corner radius (metres, ≥8) or name. Fails for locked turns. Use for fine placement after design moves, or to shorten/lengthen straights by moving turns.

    View tool JSON
    {
      "name": "edit_turns",
      "kind": "act",
      "impl": "imperative",
      "description": "Precisely edit one or more turns: position (metres), corner radius (metres, ≥8) or name. Fails for locked turns. Use for fine placement after design moves, or to shorten/lengthen straights by moving turns.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "edits": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "properties": {
                "turn": {
                  "type": "integer"
                },
                "x": {
                  "type": "number"
                },
                "y": {
                  "type": "number"
                },
                "radius": {
                  "type": "number",
                  "description": "Corner radius in metres"
                },
                "name": {
                  "type": "string"
                }
              },
              "required": [
                "turn"
              ]
            }
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "edits"
        ]
      }
    }
    set_turn_locksAction

    Lock or unlock turns. Locked turns are protected design decisions: no tool may move, resize or delete them. Use when the designer asks to keep a turn exactly as it is.

    View tool JSON
    {
      "name": "set_turn_locks",
      "kind": "act",
      "impl": "imperative",
      "description": "Lock or unlock turns. Locked turns are protected design decisions: no tool may move, resize or delete them. Use when the designer asks to keep a turn exactly as it is.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "turns": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "minItems": 1
          },
          "locked": {
            "type": "boolean"
          }
        },
        "required": [
          "turns",
          "locked"
        ]
      }
    }
    load_reference_circuitAction

    Replace the live circuit with a layout from the Reference Library (Formula 1: monza, monaco, suzuka; Formula E: monaco-fe, berlin-tempelhof, tokyo; MotoGP: mugello, assen, phillip-island; silver-fields is the NotASprint original). Sets the motorsport to the reference's series and clears undo history; saved snapshots stay. get_circuit lists each reference's location and character.

    View tool JSON
    {
      "name": "load_reference_circuit",
      "kind": "act",
      "impl": "imperative",
      "description": "Replace the live circuit with a layout from the Reference Library (Formula 1: monza, monaco, suzuka; Formula E: monaco-fe, berlin-tempelhof, tokyo; MotoGP: mugello, assen, phillip-island; silver-fields is the NotASprint original). Sets the motorsport to the reference's series and clears undo history; saved snapshots stay. get_circuit lists each reference's location and character.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "circuit_id": {
            "type": "string",
            "enum": [
              "silver-fields",
              "monza",
              "monaco",
              "suzuka",
              "monaco-fe",
              "berlin-tempelhof",
              "tokyo",
              "mugello",
              "assen",
              "phillip-island"
            ],
            "description": "Reference id from the Reference Library."
          }
        },
        "required": [
          "circuit_id"
        ]
      }
    }
    create_custom_circuitAction

    Generate a fresh circuit concept for a motorsport and make it the live circuit. Formula 1: larger scale, long straights into heavy braking. Formula E: compact, technical, stop-start. MotoGP: flowing wide arcs and sustained corner sequences. Each seed gives a different layout; the same seed reproduces one. Clears undo history; saved snapshots stay.

    View tool JSON
    {
      "name": "create_custom_circuit",
      "kind": "act",
      "impl": "imperative",
      "description": "Generate a fresh circuit concept for a motorsport and make it the live circuit. Formula 1: larger scale, long straights into heavy braking. Formula E: compact, technical, stop-start. MotoGP: flowing wide arcs and sustained corner sequences. Each seed gives a different layout; the same seed reproduces one. Clears undo history; saved snapshots stay.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "motorsport": {
            "type": "string",
            "enum": [
              "f1",
              "fe",
              "motogp"
            ],
            "description": "f1, fe or motogp. Phrases like 'Formula E' or 'bikes' also resolve."
          },
          "seed": {
            "type": "integer",
            "description": "Omit for a new concept; repeat a seed to get the same layout again."
          }
        },
        "required": [
          "motorsport"
        ]
      }
    }
    undo_changesAction

    Undo the last N changes (yours or the designer's).

    View tool JSON
    {
      "name": "undo_changes",
      "kind": "act",
      "impl": "imperative",
      "description": "Undo the last N changes (yours or the designer's).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "steps": {
            "type": "integer",
            "minimum": 1,
            "default": 1
          }
        }
      }
    }
    run_simulationAction

    Run a hypothetical race-flow simulation on the live circuit and store it as the latest run: per-turn arrivals, held-up vehicles, passes, simulated contacts and closing speeds; sector notes; ranked findings (bunching, packed trains, contact-prone corners, speed-differential braking zones, paper-only overtaking zones); before/after against the previous run. Deterministic for a seed. A point-mass signal for comparing design changes, not a real-world or safety prediction.

    View tool JSON
    {
      "name": "run_simulation",
      "kind": "act",
      "impl": "imperative",
      "description": "Run a hypothetical race-flow simulation on the live circuit and store it as the latest run: per-turn arrivals, held-up vehicles, passes, simulated contacts and closing speeds; sector notes; ranked findings (bunching, packed trains, contact-prone corners, speed-differential braking zones, paper-only overtaking zones); before/after against the previous run. Deterministic for a seed. A point-mass signal for comparing design changes, not a real-world or safety prediction.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "cars": {
            "type": "integer",
            "minimum": 2,
            "maximum": 24,
            "description": "Default 12."
          },
          "laps": {
            "type": "integer",
            "minimum": 1,
            "maximum": 20,
            "description": "Default 5."
          },
          "variance": {
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "description": "Driver skill and lap-to-lap spread. Default 0.5."
          },
          "aggression": {
            "type": "number",
            "minimum": 0,
            "maximum": 1,
            "description": "Willingness to attempt marginal passes. Default 0.5."
          },
          "seed": {
            "type": "integer",
            "description": "Keep the same seed to compare a redesign against the previous run."
          }
        }
      }
    }
    set_design_briefAction

    Set, change or clear the design brief: measurable constraints evaluated continuously against the live circuit and returned with every write (PASS / NEAR LIMIT / FAIL). Pass a field to set it, null to remove that constraint, clear:true to remove all. preserve_turns lists turns that must stay locked; it does not lock them — the designer or set_turn_locks does.

    View tool JSON
    {
      "name": "set_design_brief",
      "kind": "act",
      "impl": "imperative",
      "description": "Set, change or clear the design brief: measurable constraints evaluated continuously against the live circuit and returned with every write (PASS / NEAR LIMIT / FAIL). Pass a field to set it, null to remove that constraint, clear:true to remove all. preserve_turns lists turns that must stay locked; it does not lock them — the designer or set_turn_locks does.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "min_length_m": {
            "type": [
              "number",
              "null"
            ]
          },
          "max_length_m": {
            "type": [
              "number",
              "null"
            ]
          },
          "max_turns": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Real corners; kinks are not counted."
          },
          "min_overtaking_zones": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Turns with overtaking score ≥ 70."
          },
          "min_straight_m": {
            "type": [
              "number",
              "null"
            ],
            "description": "Longest straight."
          },
          "profile": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "high-speed",
              "street-technical",
              "flowing-technical",
              null
            ],
            "description": "Target design inspiration; checked against its score bands."
          },
          "preserve_turns": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer"
            },
            "description": "Turn numbers (current numbering) that must stay locked."
          },
          "clear": {
            "type": "boolean"
          }
        }
      }
    }
    design_versionsAction

    Named design milestones, separate from undo. list: all versions with their metrics. save: snapshot the current circuit, analysis, brief and latest simulation under a name. restore: make a version the live circuit (undoable). compare: design metrics, sector character, brief status and simulation totals of a version against the current design (default) or another version; the comparison is also shown to the designer as an overlay.

    View tool JSON
    {
      "name": "design_versions",
      "kind": "act",
      "impl": "imperative",
      "description": "Named design milestones, separate from undo. list: all versions with their metrics. save: snapshot the current circuit, analysis, brief and latest simulation under a name. restore: make a version the live circuit (undoable). compare: design metrics, sector character, brief status and simulation totals of a version against the current design (default) or another version; the comparison is also shown to the designer as an overlay.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "list",
              "save",
              "restore",
              "compare"
            ]
          },
          "name": {
            "type": "string",
            "description": "save: milestone name, e.g. 'Simulation optimised'."
          },
          "version_id": {
            "type": "string",
            "description": "restore / compare: e.g. 'v2'."
          },
          "compare_to": {
            "type": "string",
            "description": "compare: another version id; default 'current'."
          }
        },
        "required": [
          "action"
        ]
      }
    }
    export_circuitAction

    Export the current circuit and save a file to the designer's device. json: definition plus analysis (also returned inline). svg / png / png-transparent: a drawing in one of four styles — technical (grid, turn numbers, sectors, braking zones), presentation (name and headline metrics), minimal (circuit only), analysis (presentation plus scores, sectors and overtaking zones). Does not change the circuit.

    View tool JSON
    {
      "name": "export_circuit",
      "kind": "act",
      "impl": "imperative",
      "description": "Export the current circuit and save a file to the designer's device. json: definition plus analysis (also returned inline). svg / png / png-transparent: a drawing in one of four styles — technical (grid, turn numbers, sectors, braking zones), presentation (name and headline metrics), minimal (circuit only), analysis (presentation plus scores, sectors and overtaking zones). Does not change the circuit.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "svg",
              "png",
              "png-transparent",
              "json"
            ],
            "default": "json"
          },
          "style": {
            "type": "string",
            "enum": [
              "technical",
              "presentation",
              "minimal",
              "analysis"
            ],
            "default": "technical"
          }
        }
      }
    }