Docs
Tool Reference

System Tools

Game lifecycle and turn management

Game lifecycle tools — saving, loading, and advancing turns. (8 tools)

end_turn

Destructive

End the current turn.

Details
Make sure you've moved all units, set production, and chosen research
    before ending the turn.

    All 5 reflection parameters are required and must be non-empty.
    These form the per-turn diary — your persistent memory across sessions:
        tactical: What happened this turn — combat, movements, improvements.
        strategic: Current standing vs rivals — yields, city count, victory path.
        tooling: Tool issues or observations. Write "No issues" if none.
        planning: Concrete actions for the next 5-10 turns.
        hypothesis: Predictions — enemy behavior, resource needs, timelines.

    agent_model: Your model identifier (e.g. "claude-opus-4-6", "gpt-5",
        "o3"). This is recorded in the game diary and used for ELO rankings
        across games. Always pass your exact model ID string every turn.

    IMPORTANT: Reflections are recorded BEFORE the AI processes its turn.
    Anything that surfaces after end_turn (diplomacy proposals, AI movements,
    events reported in the turn result) belongs in the NEXT turn's diary.
    If end_turn is blocked and you call it again after resolving the blocker,
    the diary entry from the first call is kept — do not repeat reflections.
ParameterTypeDefaultDescription
tacticalstring""Tactical
strategicstring""Strategic
toolingstring""Tooling
planningstring""Planning
hypothesisstring""Hypothesis
agent_modelstring""Agent Model

kill_game

Destructive

Kill the Civ 6 game process and wait for Steam to deregister.

Details
Only kills Civ 6 processes. Waits ~10 seconds for Steam to deregister
    so the game can be relaunched cleanly.

No parameters

launch_game

Destructive

Launch Civ 6 via Steam.

Details
Starts the game and waits for the process to appear (~15-30 seconds).
    The game will be at the main menu after launch — use load_save or
    restart_and_load to load a specific save.

    NOTE: FireTuner connection is NOT available at the main menu.
    Only in-game MCP tools work after a save is loaded.

No parameters

load_save

Destructive

Load a save file by index from the most recent list_saves() result.

Details
Args:
        save_index: Index number from list_saves output (1-based)

    The game will reload entirely. Wait ~10 seconds after calling this,
    then use get_game_overview to verify the loaded state.
ParameterTypeDefaultDescription
save_index*integerSave Index

Navigate the main menu to load a save via OCR-guided clicking.

Details
Args:
        save_name: Autosave name (e.g. "AutoSave_0221"). If not provided,
                   loads the most recent autosave.

    Requires the game to be running and at the main menu. Uses macOS Vision
    OCR to find and click menu elements. Takes 30-90 seconds.

    After loading, wait ~10 seconds then call get_game_overview to verify.

    Requires pyobjc: uv pip install 'civ6-mcp[launcher]'
ParameterTypeDefaultDescription
save_namestringnullSave Name

quicksave

Destructive

Quicksave the current game.

Details
Creates a quicksave that can be loaded later with load_save.

No parameters

restart_and_load

Destructive

Full game recovery: kill, relaunch, and load a save.

Details
Args:
        save_name: Autosave name (e.g. "AutoSave_0221"). If not provided,
                   loads the most recent autosave.

    This is the recommended tool for recovering from game hangs (e.g. AI turn
    processing stuck in infinite loop). Takes 60-120 seconds total:
    1. Kills the game process
    2. Waits for Steam to deregister (~10s)
    3. Relaunches via Steam (~15-30s for process start + main menu)
    4. Navigates menus via OCR to load the save (~30-60s)

    After completion, wait ~10 seconds then call get_game_overview to verify.
ParameterTypeDefaultDescription
save_namestringnullSave Name

run_lua

Destructive

Run arbitrary Lua code in the game. Advanced escape hatch.

Details
Args:
        code: Lua code to execute. Use print() for output, end with print("---END---").
        context: "gamecore" for simulation state, "ingame" for UI commands (default: gamecore)

    The code runs in the game's Lua environment with full access to the
    Civ 6 API. Always use print() for output (not return).
ParameterTypeDefaultDescription
code*stringCode
contextstring"gamecore"Context