# MythxEngine (mcpb · mythxengine-0.3.0.mcpb)

Tabletop RPG engine over MCP: dice, combat, stress, clocks, world generation, four bundled worlds

- Trust score: 40/100 (low)
- Change this week: +6
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- mcpb · `mythxengine-0.3.0.mcpb`: 40/100 (this document), [markdown](https://verifymcp.io/servers/protolabsai-mythxengine/https-github-com-protolabsai-mythx-mcp-releases-download-v0-3-0-mythxengine-0-3.md), [page](https://verifymcp.io/servers/protolabsai-mythxengine/https-github-com-protolabsai-mythx-mcp-releases-download-v0-3-0-mythxengine-0-3)
- npm · `@mythxengine/mcp-server`: 73/100, [markdown](https://verifymcp.io/servers/protolabsai-mythxengine/mythxengine-mcp-server.md), [page](https://verifymcp.io/servers/protolabsai-mythxengine/mythxengine-mcp-server)

## Channel facts

- Registry: `mcpb`
- Package: `https://github.com/protoLabsAI/mythx-mcp/releases/download/v0.3.0/mythxengine-0.3.0.mcpb`
- Version: `0.3.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 13/100
  - Malware scan not yet available for this package.
  - CVE data not yet available for this package.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (96 of 100), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 21 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 42/100
  - 0% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 12305 tokens (~75/item across 164 items; 158 tools + 6 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 99% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

- Download bundle: `https://github.com/protoLabsAI/mythx-mcp/releases/download/v0.3.0/mythxengine-0.3.0.mcpb`

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 40, +4)

- [functional improvement] Stability: unverified → 0.23

### 2026-08-02 (score 36, −3)

- [functional regression] Dependency health: partial → unverified

### 2026-08-01 (score 39, +12)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Schema quality: unverified → good

### 2026-07-31 (score 27, −8)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 35, +5)

- [functional improvement] Schema quality: unverified → 0

### 2026-07-28 (score 30, −4)

- [functional regression] Schema quality: 0 → unverified
- [functional improvement] Maintenance: unverified → pass

### 2026-07-27 (score 34)

First indexed and scored.

## MCP tools (158)

### `roll_dice` (~88 tokens)

Roll dice using standard notation (e.g., '2d6+3', 'd20', '4d6'). Optionally use session RNG for determinism.

Input parameters:

- `expression` (string, required): Dice expression like '2d6+3', 'd20', '1d8-1'
- `sessionId` (string): Optional session ID to use session RNG for determinism

### `roll_test` (~289 tokens)

Perform a skill or ability test for a character. Rolls d20 + ability + skill + modifiers vs difficulty. Supports advantage/disadvantage. Returns an envelope with `outcome` (five-tier) and a one-line `summary` as the headline; mechanical detail is in `result`, follow-up moves in `suggested_next`.

Input parameters:

- `ability` (string): Ability to use (optional, defaults to skill's ability or WIT)
- `advantageSources` (array): Sources granting advantage (e.g., 'flanking', 'high ground')
- `autoTickClockIds` (array): Clock IDs to automatically tick on partial/failure outcomes
- `characterId` (string, required): Character performing the test
- `difficulty` (string): Difficulty level: easy (DC 8), standard (DC 12, default), hard (DC 16), extreme (DC 20). For an exact custom DC, use roll_custom_test instead.
- `disadvantageSources` (array): Sources granting disadvantage (e.g., 'darkness', 'wounded')
- `effectLevel` (string): Effect level (impact): limited, standard (default), great
- `modifiers` (array): Additional modifiers
- `position` (string): Position (risk level): controlled, risky (default), desperate
- `sessionId` (string, required): Session ID
- `skill` (string): Skill to use (optional)

### `roll_custom_test` (~96 tokens)

Perform a custom test defined in the world pack rules (e.g., panic check, sanity roll). Returns success/failure, any table rolls, and effects to apply.

Input parameters:

- `characterId` (string, required): Character performing the test
- `modifiers` (number): Additional modifiers
- `sessionId` (string, required): Session ID
- `testId` (string, required): Custom test ID (e.g., 'panic', 'sanity_check')

### `get_character` (~35 tokens)

Get a character's full details

Input parameters:

- `characterId` (string, required): Character ID
- `sessionId` (string, required): Session ID

### `create_character` (~183 tokens)

Create a new character in the session

Input parameters:

- `abilities` (object): Ability modifiers (-5 to +5)
- `archetypeId` (string): Archetype ID (optional)
- `armor` (string|null): Armor name
- `background` (string): Character background
- `gear` (array): Other equipment
- `hp` (number): Starting HP
- `id` (string): Unique character ID (auto-generated from the name when omitted)
- `initializeStress` (boolean): Initialize stress tracker for FitD-style mechanics
- `maxStress` (number): Maximum stress before trauma (default: 9)
- `name` (string, required): Character name
- `personality` (array): Personality traits
- `sessionId` (string, required): Session ID
- `weapons` (array): Weapons in format 'Name (damage)' e.g. 'Sword (d8)'

### `heal_character` (~97 tokens)

Restore HP to a character. Capped at max HP. Use for any HP recovery (rest, spell, potion narration, GM fiat).

Input parameters:

- `amount` (integer, required): Amount of HP to restore. Capped at the character's max HP.
- `characterId` (string, required): Character to heal
- `reason` (string): Optional narrative reason (e.g. 'rest', 'spell')
- `sessionId` (string, required): Session ID

### `damage_character` (~111 tokens)

Deal damage to a character (narrative/environmental, not from combat resolution). Floors HP at 0 and reports defeat. For combat attacks, use `attack`. For combat-target damage, use `apply_damage`.

Input parameters:

- `amount` (integer, required): Amount of HP to subtract. Floored at 0.
- `characterId` (string, required): Character to damage
- `reason` (string): Optional narrative reason (e.g. 'trap', 'falling')
- `sessionId` (string, required): Session ID

### `apply_condition` (~96 tokens)

Add a condition to a character (narrative/exploration). For combat, use `add_combat_condition` instead so combat effects (advantage/disadvantage, modifiers) are picked up.

Input parameters:

- `characterId` (string, required): Character receiving the condition
- `condition` (object, required): Condition to apply. duration is rounds (number), 'permanent', or 'until_rest'.
- `sessionId` (string, required): Session ID

### `remove_condition` (~83 tokens)

Remove a condition from a character. Accepts the condition id OR its display name (case-insensitive). No-op if the condition isn't on the character.

Input parameters:

- `characterId` (string, required): Character losing the condition
- `condition` (string, required): Condition to remove — accepts the condition id OR display name (case-insensitive).
- `sessionId` (string, required): Session ID

### `list_characters` (~26 tokens)

List all characters in a session

Input parameters:

- `sessionId` (string, required): Session ID

### `delete_character` (~37 tokens)

Delete a character from the session

Input parameters:

- `characterId` (string, required): Character ID to delete
- `sessionId` (string, required): Session ID

### `list_sessions` (~35 tokens)

List all game sessions. Optionally filter by world pack ID.

Input parameters:

- `worldPackId` (string): Filter by world pack ID

### `create_session` (~75 tokens)

Create a new game session, optionally associated with a world pack.

Input parameters:

- `name` (string, required): Session name
- `seed` (number): RNG seed for determinism
- `sessionId` (string, required): Unique session ID
- `worldPackId` (string, required): World pack ID (required - every session must belong to a world)

### `load_session` (~33 tokens)

Load an existing game session by ID. Returns session state summary.

Input parameters:

- `sessionId` (string, required): Session ID to load

### `add_note` (~47 tokens)

Add a timestamped note to the session

Input parameters:

- `content` (string, required): Note content
- `sessionId` (string, required): Session ID
- `tags` (array): Tags for the note

### `search_notes` (~51 tokens)

Search session notes by keyword or tags

Input parameters:

- `query` (string, required): Search query (searches content)
- `sessionId` (string, required): Session ID
- `tags` (array): Filter by tags (optional)

### `delete_session` (~28 tokens)

Delete a session and all its data

Input parameters:

- `sessionId` (string, required): Session ID to delete

### `set_play_mode` (~79 tokens)

Set the play mode for a session. 'interactive' prompts the player for decisions, 'auto' plays all characters autonomously. Persists across context compaction.

Input parameters:

- `mode` (string, required): Play mode: 'interactive' prompts the player for actions, 'auto' plays all characters autonomously
- `sessionId` (string, required): Session ID

### `update_pacing_state` (~119 tokens)

Update narrative pacing state after each beat. Track tension level, phase transitions, and spotlight rotation to maintain balanced storytelling.

Input parameters:

- `incrementBeat` (boolean): Increment the scene beat count (call after each narrative beat)
- `phase` (string): Shift the narrative phase (omit to keep current phase)
- `sessionId` (string, required): Session ID
- `spotlightPlayerId` (string): Record that this player received spotlight this beat
- `tensionDelta` (number): Adjust tension level by this amount (positive = more tension, negative = less)

### `add_npc` (~166 tokens)

Register a fabricated NPC on the session. Returns a stable `npcId` to use in `generate_portrait` and `showDialogue`. Use BEFORE introducing any NPC that isn't already in the world pack — without this the NPC has no identity and their portrait can't be tracked across turns.

Input parameters:

- `attitude` (string): Initial disposition toward the player
- `description` (string, required): Short physical + role description (1-2 sentences)
- `motivation` (string): What this NPC wants or fears (free-form, optional)
- `name` (string, required): NPC display name
- `narrativeRole` (string): Story role this NPC plays
- `personality` (string): One-line personality summary (e.g. 'gruff but fair')
- `sessionId` (string, required): Session ID

### `start_combat` (~139 tokens)

Initialize combat with characters and enemies. Returns an envelope with `outcome: 'combat_started'` and a one-line `summary` as the headline; combatant lists in `result`, combat state in `state_delta`. Always follow with `roll_initiative` (also surfaced in `suggested_next.next_action`).

Input parameters:

- `characterIds` (array, required): Character IDs participating in combat
- `enemies` (array): Inline enemy definitions — creates enemies automatically. Use this instead of pre-creating enemies with create_character.
- `enemyIds` (array): IDs of enemies already in the session
- `sessionId` (string, required): Session ID

### `roll_initiative` (~31 tokens)

Roll initiative for all combatants and set turn order

Input parameters:

- `sessionId` (string, required): Session ID

### `attack` (~260 tokens)

Perform an attack against a target. Supports advantage/disadvantage and damage type for resistance/vulnerability. Returns an envelope with `outcome` (five-tier) and a one-line `summary` as the headline; mechanical detail is in `result`, follow-up moves in `suggested_next`.

Input parameters:

- `advantageSources` (array): Sources granting advantage (e.g., 'flanking', 'high ground')
- `attackerId` (string, required): Attacking combatant ID
- `autoTickClockIds` (array): Clock IDs to automatically tick on partial/failure outcomes
- `damageType` (string): Damage type for resistance/vulnerability calculation
- `defenderId` (string, required): Defending combatant ID
- `disadvantageSources` (array): Sources granting disadvantage (e.g., 'darkness', 'cover')
- `effectLevel` (string): Effect level (impact). limited=0.5× damage, standard=1× (default), great=1.5×. Applies to graze damage on partial hits too.
- `position` (string): Position (risk level): controlled, risky (default), desperate
- `sessionId` (string, required): Session ID
- `weaponIndex` (number): Index of weapon to use (default 0)

### `apply_damage` (~59 tokens)

Apply damage directly to a combatant (bypassing attack roll)

Input parameters:

- `amount` (number, required): Damage amount (must be >= 0)
- `sessionId` (string, required): Session ID
- `targetId` (string, required): Target combatant ID

### `add_combat_condition` (~58 tokens)

Add a condition to a combatant. Supports advantage/disadvantage and resistance/vulnerability effects.

Input parameters:

- `condition` (object, required)
- `sessionId` (string, required): Session ID
- `targetId` (string, required): Target combatant ID

### `next_turn` (~26 tokens)

Advance to the next turn in combat

Input parameters:

- `sessionId` (string, required): Session ID

### `end_combat` (~33 tokens)

End the current combat

Input parameters:

- `outcome` (string, required): Combat outcome
- `sessionId` (string, required): Session ID

### `get_combat_state` (~26 tokens)

Get the current combat state

Input parameters:

- `sessionId` (string, required): Session ID

### `get_time` (~25 tokens)

Returns current game time for session

Input parameters:

- `sessionId` (string, required): Session ID

### `advance_time` (~34 tokens)

Advances time by N minutes

Input parameters:

- `minutes` (number, required): Minutes to advance
- `sessionId` (string, required): Session ID

### `set_time` (~64 tokens)

Sets game time (for initialization/GM override)

Input parameters:

- `day` (number): Day number (1+)
- `hour` (number): Hour (0-23)
- `minute` (number): Minute (0-59)
- `sessionId` (string, required): Session ID

### `add_deadline` (~143 tokens)

Add a deadline/countdown to track. Specify either expiresIn (minutes from now) or expiresAt (specific time).

Input parameters:

- `description` (string, required): What happens when deadline expires
- `expiresAt` (object): Specific game time when deadline expires
- `expiresIn` (number): Minutes from now until expiration
- `id` (string, required): Unique deadline ID
- `name` (string, required): Deadline name (e.g., 'Midnight')
- `onExpireFlag` (string): Flag to set when deadline expires
- `sessionId` (string, required): Session ID
- `warnOnApproach` (boolean): Warn when within 1 hour (default: true)

### `remove_deadline` (~37 tokens)

Remove a deadline by ID

Input parameters:

- `deadlineId` (string, required): Deadline ID to remove
- `sessionId` (string, required): Session ID

### `create_player` (~106 tokens)

Add a player (human or AI) to the session

Input parameters:

- `aiPersona` (object): AI persona configuration (for AI players)
- `characterId` (string): Character ID to link (optional)
- `controlType` (string, required): Human or AI controlled
- `id` (string, required): Unique player ID
- `name` (string, required): Display name
- `role` (string, required): Player role (gm, pc, or spectator)
- `sessionId` (string, required): Session ID

### `get_player` (~34 tokens)

Get a player's full details

Input parameters:

- `playerId` (string, required): Player ID
- `sessionId` (string, required): Session ID

### `list_players` (~25 tokens)

List all players in a session

Input parameters:

- `sessionId` (string, required): Session ID

### `update_player` (~107 tokens)

Update a player's status, name, controlType, or AI persona

Input parameters:

- `aiPersona` (object): Update AI persona (for AI players)
- `characterId` (string|null): New character ID (or null to unlink)
- `controlType` (string): Switch between human and AI control
- `name` (string): New display name
- `playerId` (string, required): Player ID
- `sessionId` (string, required): Session ID
- `status` (string): New status

### `delete_player` (~37 tokens)

Remove a player from the session

Input parameters:

- `playerId` (string, required): Player ID to delete
- `sessionId` (string, required): Session ID

### `assign_character` (~47 tokens)

Link a player to a character

Input parameters:

- `characterId` (string, required): Character ID to assign
- `playerId` (string, required): Player ID
- `sessionId` (string, required): Session ID

### `update_companion_state` (~243 tokens)

Update an AI companion's internal state (loyalty, mood, grievances, memories). Call after events that would plausibly affect the companion's attitude toward the party.

Input parameters:

- `characterId` (string, required): The AI companion's character ID
- `fireTrigger` (string): ID of a loyalty trigger that was fired — marks it as fired and applies its effect
- `hiddenAgenda` (string|null): Set or clear the companion's hidden agenda
- `loyaltyDelta` (number): Change to party loyalty (negative = losing trust, positive = gaining trust)
- `moodShift` (string): New mood descriptor for the companion
- `newAdmiration` (string): Something the companion now admires
- `newDisagreement` (string): A new active disagreement
- `newGrievance` (string): A new grievance the companion is holding
- `newMemory` (object): A new memory to record (always marked unresolved)
- `playerLoyaltyDelta` (object): Per-player trust changes keyed by player ID
- `reason` (string): Why the loyalty changed — used in narrative context
- `sessionId` (string, required): Session ID

### `start_turns` (~63 tokens)

Begin turn-based coordination for multi-player gameplay

Input parameters:

- `playerIds` (array): Specific player IDs for turn order (default: all PC players)
- `sessionId` (string, required): Session ID
- `strategy` (string): Turn strategy (default: round_robin)

### `get_current_turn` (~28 tokens)

Get the current turn state and active player

Input parameters:

- `sessionId` (string, required): Session ID

### `advance_turn` (~27 tokens)

Move to the next player in turn order

Input parameters:

- `sessionId` (string, required): Session ID

### `end_turns` (~30 tokens)

End turn-based coordination and return to free-form play

Input parameters:

- `sessionId` (string, required): Session ID

### `request_player_input` (~77 tokens)

Mark a human player as awaiting input for their turn

Input parameters:

- `choices` (array): Optional preset choices
- `context` (string): Additional context (scene, situation)
- `playerId` (string, required): Player ID
- `prompt` (string, required): What we're asking the player to decide
- `sessionId` (string, required): Session ID

### `submit_player_action` (~48 tokens)

Record a human player's chosen action

Input parameters:

- `action` (string, required): The action the player chose
- `playerId` (string, required): Player ID
- `sessionId` (string, required): Session ID

### `get_ai_player_context` (~43 tokens)

Get full context for an AI player to make a decision

Input parameters:

- `playerId` (string, required): AI player ID
- `sessionId` (string, required): Session ID

### `submit_ai_player_action` (~65 tokens)

Record an AI player's decided action

Input parameters:

- `action` (string, required): The action the AI decided on
- `playerId` (string, required): AI player ID
- `reasoning` (string): Brief reasoning for the choice (optional)
- `sessionId` (string, required): Session ID

### `get_stress` (~47 tokens)

Get a character's current stress level, trauma status, and whether they can safely push.

Input parameters:

- `characterId` (string, required): Character ID
- `sessionId` (string, required): Session ID

### `push_roll` (~156 tokens)

Spend 2 stress to add +1d6 bonus to a failed or partial roll. Can trigger trauma if stress exceeds max. Returns an envelope with `outcome` ('pushed' or 'trauma_gained') and a one-line `summary` as the headline; mechanical detail is in `result` (including `previousOutcome` → `newOutcome`, the re-derived outcome tier for the pushed margin), stress/trauma changes in `state_delta`.

Input parameters:

- `characterId` (string, required): Character spending stress to push
- `originalMargin` (number, required): The original margin (roll - difficulty)
- `originalRoll` (number, required): The original roll total to add bonus to
- `sessionId` (string, required): Session ID

### `resist_consequence` (~264 tokens)

Spend stress to reduce a consequence. Roll ability to potentially reduce cost. Minor=1, Moderate=2, Severe=3 base cost. Pass `damage` when the consequence is HP damage — the tool then applies the mechanical effect itself (successful resist halves it, failed resist lands in full; set `alreadyApplied` if the damage already hit HP so it refunds the reduction). Returns an envelope with `outcome` ('reduced', 'absorbed', or 'trauma_gained') and a one-line `summary` as the headline; stress/trauma/HP changes in `state_delta`.

Input parameters:

- `characterId` (string, required): Character resisting the consequence
- `consequence` (string): Description of the consequence being resisted
- `damage` (object): Mechanical damage consequence. When provided the tool applies the resist result to HP itself: a successful resist halves the damage (rounded down — 1 becomes 0), a failed resist lets it land in full.…
- `resistAbility` (string, required): Ability to roll for potential cost reduction
- `sessionId` (string, required): Session ID
- `severity` (string, required): Severity of consequence to resist (affects stress cost)

### `recover_stress` (~87 tokens)

Recover stress during rest. Short rest recovers 2 stress, long rest recovers all stress.

Input parameters:

- `bonuses` (number): Additional recovery from abilities, conditions, or circumstances
- `characterId` (string, required): Character recovering stress
- `restType` (string, required): Type of rest (short=2 stress, long=all stress)
- `sessionId` (string, required): Session ID

### `flashback` (~65 tokens)

Execute a flashback to establish retroactive preparation. Costs 2 stress (default; world-overridable).

Input parameters:

- `characterId` (string, required): Character using flashback
- `description` (string, required): Description of what the character prepared
- `sessionId` (string, required): Session ID

### `quick_research` (~143 tokens)

Fast deterministic world pack lookup. Use for finding monsters, NPCs, locations, items, etc. Automatically detects entity type and does fuzzy name matching. Pure function lookup (~5ms) with no LLM overhead.

Input parameters:

- `entityType` (string): Entity type hint (optional, will auto-detect if not provided)
- `includeSecrets` (boolean): Whether to include GM-only information (default: true)
- `query` (string, required): Search query - can be entity name, ID, or natural language
- `resolveReferences` (boolean): Whether to resolve cross-references (default: true)
- `worldPackId` (string, required): World pack ID to search

### `batch_lookup` (~62 tokens)

Look up multiple entities at once. More efficient than individual lookups. Returns summaries for each entity.

Input parameters:

- `includeSecrets` (boolean)
- `lookups` (array, required): List of entities to look up
- `worldPackId` (string, required): World pack ID

### `lookup_rule` (~166 tokens)

Look up a rulebook entry by id (e.g. '5.6-trauma') for full mechanical detail, or list entries by tag (e.g. 'stress', 'combat') to find a specific entry. Use when you need engine math the system prompt doesn't cover (roll-under, custom tests, conditions catalog, trauma details, damage formula, world-overrides, etc.) — cheap (~1ms, no LLM call).

Input parameters:

- `entryId` (string): Specific entry id, e.g. '5.6-trauma' or '4.1-standard-test'. Returns the full entry.
- `tag` (string): Tag to list matching entries, e.g. 'stress', 'combat', 'world-overrides'. Returns id+summary list to drill into.

### `set_party_location` (~72 tokens)

Update the session's current party location. The locationId must exist in the active world pack. Drives the persistent scene panel in the UI.

Input parameters:

- `locationId` (string, required): Id of the location the party is now at — must exist in the active world pack
- `sessionId` (string, required): Session ID

### `browse_shop` (~135 tokens)

Open a shop interface for the player. Loads items from world pack NPC/location data. Sets the stage to 'shop' so the player can browse, buy, and sell items.

Input parameters:

- `characterId` (string, required): Character who is shopping
- `flavor` (string): Flavor text describing the shop atmosphere
- `locationId` (string): Location ID to find merchants at (alternative to npcId)
- `npcId` (string): NPC ID of the merchant (looked up from world pack)
- `sessionId` (string, required): Session ID
- `shopName` (string): Custom shop name (overrides NPC/location name)

### `buy_item` (~130 tokens)

Purchase an item from a shop. Deducts gold from the character and adds the item to their inventory.

Input parameters:

- `characterId` (string, required): Character who is buying
- `itemCategory` (string): Item category (weapon, armor, consumable, misc)
- `itemDescription` (string): Item description
- `itemId` (string, required): World pack item ID to buy
- `itemName` (string, required): Display name of the item
- `price` (integer, required): Price per unit in gold
- `quantity` (integer): Quantity to buy
- `sessionId` (string, required): Session ID

### `sell_item` (~103 tokens)

Sell an item from the character's inventory for gold. Default sell price is 50% of item value.

Input parameters:

- `characterId` (string, required): Character who is selling
- `inventoryItemId` (string, required): ID of the item in the character's inventory
- `quantity` (integer): Quantity to sell
- `sellPriceOverride` (integer): Override sell price per unit (default: 50% of item value)
- `sessionId` (string, required): Session ID

### `take_rest` (~168 tokens)

Initiate a rest sequence for the party. Recovers HP and stress, advances game time, and optionally clears conditions. Sets the UI stage to 'rest'. Returns an envelope with `outcome` ('short_rest', 'long_rest', or 'camp_rest') and a one-line `summary` as the headline; per-character mechanics in `result.results`, totals in `state_delta`.

Input parameters:

- `flavor` (string): Flavor text for the rest scene
- `location` (string): Where the party is resting
- `restType` (string, required): Type of rest: short (1h, 25% HP, 1 stress), long (8h, 50% HP, 2 stress), camp (12h, full recovery)
- `sessionId` (string, required): Session ID

### `start_dialogue` (~111 tokens)

Start a structured NPC dialogue. Loads NPC data from the world pack, sets the UI to dialogue stage with portrait and response choices.

Input parameters:

- `context` (string): Additional context for the encounter (e.g., 'player just saved them')
- `greeting` (string): Custom greeting text (overrides auto-generated greeting)
- `npcId` (string, required): NPC ID from world pack
- `responses` (array): Custom response choices (overrides role-based defaults)
- `sessionId` (string, required): Session ID

### `advance_dialogue` (~128 tokens)

Continue an NPC dialogue with the next line and response choices. Set endDialogue=true to end the conversation and return to narrative.

Input parameters:

- `endDialogue` (boolean): If true, end the dialogue and return to narrative stage
- `npcId` (string, required): NPC ID (must match current dialogue)
- `npcName` (string, required): NPC display name
- `portrait` (string): Portrait URL or emoji (optional override)
- `responses` (array): New response choices for the player
- `sessionId` (string, required): Session ID
- `text` (string, required): NPC's next dialogue line

### `upgrade_inventory` (~112 tokens)

Convert a character from narrative to itemized inventory mode. Enables full item tracking with stats, equipment slots, gold, and weight/encumbrance.

Input parameters:

- `characterId` (string, required): Character ID to upgrade
- `maxSlots` (integer): Maximum inventory slots
- `maxWeight` (number): Maximum carry weight
- `preserveNarrative` (boolean): Keep narrative equipment as reference (stored in narrative field)
- `sessionId` (string, required): Session ID
- `startingGold` (integer): Starting gold amount

### `list_inventory` (~58 tokens)

List all items in a character's inventory. Shows equipped status, weight, and gold for itemized mode, or simple equipment list for narrative mode.

Input parameters:

- `characterId` (string, required): Character ID
- `sessionId` (string, required): Session ID

### `add_item` (~127 tokens)

Add an item to a character's inventory. Can add from a world pack template (worldPackId + templateId) or create a custom item. Requires itemized inventory mode.

Input parameters:

- `autoEquip` (boolean): Automatically equip if slot is empty
- `characterId` (string, required): Character ID
- `customItem`: Custom item definition
- `quantity` (integer): Quantity to add
- `sessionId` (string, required): Session ID
- `templateId` (string): Item template ID from world pack
- `worldPackId` (string): World pack ID to get template from

### `remove_item` (~89 tokens)

Remove an item from a character's inventory. For stackable items, can remove a specific quantity. Automatically unequips if equipped.

Input parameters:

- `characterId` (string, required): Character ID
- `itemId` (string, required): Item instance ID to remove
- `quantity` (integer): Quantity to remove (for stackable items). Removes all if not specified.
- `sessionId` (string, required): Session ID

### `modify_gold` (~86 tokens)

Add or subtract gold from a character's inventory. Use positive amount to add, negative to subtract. Requires itemized inventory mode.

Input parameters:

- `amount` (integer, required): Amount to add (positive) or subtract (negative)
- `characterId` (string, required): Character ID
- `reason` (string): Reason for the gold change (for logging)
- `sessionId` (string, required): Session ID

### `equip_item` (~92 tokens)

Equip an item from inventory to an equipment slot. Automatically unequips existing item if slot is occupied (unless disabled).

Input parameters:

- `characterId` (string, required): Character ID
- `itemId` (string, required): Item instance ID to equip
- `sessionId` (string, required): Session ID
- `slot` (string, required): Equipment slot to use
- `unequipExisting` (boolean): Automatically unequip existing item in slot

### `unequip_item` (~57 tokens)

Unequip an item from an equipment slot. The item remains in inventory.

Input parameters:

- `characterId` (string, required): Character ID
- `sessionId` (string, required): Session ID
- `slot` (string, required): Equipment slot to unequip from

### `use_item` (~87 tokens)

Use a consumable item. Applies healing or effects, decrements uses, and removes item when depleted.

Input parameters:

- `characterId` (string, required): Character ID using the item
- `itemId` (string, required): Item instance ID to use
- `sessionId` (string, required): Session ID
- `targetCharacterId` (string): Target character ID (for items that affect others). Defaults to self.

### `transfer_item` (~111 tokens)

Transfer an item between characters or to/from party inventory. Automatically unequips if the item is equipped.

Input parameters:

- `fromCharacterId` (string|null, required): Source character ID (null = from party inventory)
- `itemId` (string, required): Item instance ID to transfer
- `quantity` (integer): Quantity to transfer (for stackable items). Transfers all if not specified.
- `sessionId` (string, required): Session ID
- `toCharacterId` (string|null, required): Destination character ID (null = to party inventory)

### `start_situation_clock` (~117 tokens)

Start a situation clock. The clock tracks what happens if PCs don't intervene.

Input parameters:

- `clockId` (string): Optional clock ID if situation has multiple clocks
- `playerVisible` (boolean): Whether players can see this clock on their HUD. Defaults to false — clocks are GM-state and revealing them at start is a spoiler. Leave hidden and call reveal_clock when the fiction surfaces the thr…
- `sessionId` (string, required): Session ID
- `situationId` (string, required): Situation ID containing the clock

### `tick_clock` (~90 tokens)

Manually advance a clock to its next stage. Use for event-based triggers or GM override.

Input parameters:

- `clockId` (string, required): Clock ID to advance
- `reveal` (boolean): Also make the clock player-visible (tick-and-reveal in one call). Defaults to false — ticking does NOT reveal a hidden clock, so hidden doom can advance off-screen.
- `sessionId` (string, required): Session ID

### `get_active_clocks` (~30 tokens)

List all active situation clocks with their current status.

Input parameters:

- `sessionId` (string, required): Session ID

### `pause_clock` (~44 tokens)

Pause an active clock. Time-based triggers will not fire while paused.

Input parameters:

- `clockId` (string, required): Clock ID to pause
- `sessionId` (string, required): Session ID

### `resume_clock` (~35 tokens)

Resume a paused clock.

Input parameters:

- `clockId` (string, required): Clock ID to resume
- `sessionId` (string, required): Session ID

### `reveal_clock` (~76 tokens)

Make a hidden situation clock visible to players on their HUD. Call this exactly when your narration reveals the threat or deadline to the players — not before. Until revealed, clocks are GM-only state and may tick in secret.

Input parameters:

- `clockId` (string, required): Clock ID to reveal to players
- `sessionId` (string, required): Session ID

### `check_clock_triggers` (~35 tokens)

Check if any time-based clock stages have triggered based on current game time.

Input parameters:

- `sessionId` (string, required): Session ID

### `get_available_leads` (~74 tokens)

List leads that are currently available for discovery. Filter by location, NPC, or prominence.

Input parameters:

- `locationId` (string): Filter by location ID
- `npcId` (string): Filter by NPC source ID
- `prominence` (string): Filter by prominence level
- `sessionId` (string, required): Session ID

### `reveal_lead` (~87 tokens)

Mark a lead as discovered by the players.

Input parameters:

- `discoveredByPlayerId` (string): Player ID of the PC who discovered this lead (for asymmetric knowledge)
- `discoveryContext` (string): Additional context about discovery
- `discoveryMethod` (string, required): How it was discovered
- `leadId` (string, required): Lead ID to reveal
- `sessionId` (string, required): Session ID

### `search_leads` (~38 tokens)

Search for leads by keyword across all lead information.

Input parameters:

- `query` (string, required): Search query
- `sessionId` (string, required): Session ID

### `get_discovered_leads` (~29 tokens)

List all leads that players have discovered.

Input parameters:

- `sessionId` (string, required): Session ID

### `suggest_lead_opportunity` (~55 tokens)

Suggest ways to naturally surface leads pointing to a target situation. Supports the Three Clue Rule.

Input parameters:

- `sessionId` (string, required): Session ID
- `targetSituationId` (string, required): Situation ID to find leads for

### `get_relationship` (~41 tokens)

Get an NPC's current attitude and interaction history with the party.

Input parameters:

- `npcId` (string, required): NPC ID
- `sessionId` (string, required): Session ID

### `initialize_relationship` (~91 tokens)

Start tracking a relationship with an NPC.

Input parameters:

- `initialAttitude` (string): Starting attitude (default: neutral)
- `knows` (array): What the NPC knows about the party
- `npcId` (string, required): NPC ID
- `npcName` (string, required): NPC name for display
- `sessionId` (string, required): Session ID
- `wants` (array): What the NPC wants from the party

### `update_relationship` (~196 tokens)

Record an interaction and update NPC relationship. Automatically adjusts attitude based on impact.

Input parameters:

- `actingCharacterId` (string): Character ID of the PC who caused this interaction (tracks per-PC attitudes)
- `addFears` (array): Add fears
- `addKnows` (array): Add to what NPC knows
- `addOwes` (array): Add debts/favors
- `addWants` (array): Add wants
- `attitudeChange` (string): Explicit attitude override (optional)
- `impact` (string, required): How this affected the relationship
- `interaction` (string, required): Description of what happened
- `npcId` (string, required): NPC ID
- `removeFears` (array): Remove fears
- `removeKnows` (array): Remove from knows
- `removeOwes` (array): Remove debts
- `removeWants` (array): Remove wants
- `sessionId` (string, required): Session ID

### `list_relationships` (~37 tokens)

List all tracked NPC relationships.

Input parameters:

- `attitudeFilter` (string): Filter by attitude level
- `sessionId` (string, required): Session ID

### `get_npc_disposition` (~65 tokens)

Quick check: How does this NPC feel about the party?

Input parameters:

- `forCharacterId` (string): Get attitude toward a specific PC (uses per-character tracking if available)
- `npcId` (string, required): NPC ID
- `sessionId` (string, required): Session ID

### `get_gm_guidance` (~90 tokens)

Get context-aware GM advice for common situations: stuck players, action resolution, pacing, tone, or NPC portrayal. Provides principles, suggestions, and relevant tool recommendations based on current session state.

Input parameters:

- `context` (object): Additional context for guidance
- `sessionId` (string, required): Session ID
- `type` (string, required): Type of guidance: stuck, resolution, pacing, tone, npc

### `analyze_scene` (~88 tokens)

Evaluate current scene for pacing issues. Helps identify when to cut or change direction. Based on the Alexandrian principle: 'Cut to the next meaningful choice.'

Input parameters:

- `currentActivity` (string, required): What's happening now
- `minutesInScene` (number, required): Real-time minutes in scene
- `playerEnergy` (string, required): GM's read on player engagement
- `sessionId` (string, required): Session ID

### `suggest_scene_cut` (~87 tokens)

Recommend how to transition to the next meaningful moment. Based on the Alexandrian principle: 'Cut to the next meaningful choice.'

Input parameters:

- `currentLocation` (string, required): Where the scene is taking place
- `includeInterruptions` (boolean): Whether to suggest interruptions
- `partyIntention` (string, required): What the party is trying to do
- `sessionId` (string, required): Session ID

### `frame_scene` (~115 tokens)

Generate an opening description for a new scene. Uses location data and tone to create engaging scene framing.

Input parameters:

- `focusOn` (array): Elements to emphasize (optional)
- `layout` (string): Scene layout type (default: exploration)
- `locationId` (string): Location ID from world pack
- `locationName` (string): Location name if no ID
- `mood` (string): Desired mood (optional)
- `sessionId` (string, required): Session ID
- `timeOfDay` (string): Time context (optional)

### `generate_encounter` (~117 tokens)

Create an encounter matching the specified parameters. Uses available monsters from the world pack.

Input parameters:

- `difficulty` (string, required): How challenging the encounter should be
- `excludeMonsterIds` (array): Exclude these monsters
- `includeMonsterIds` (array): Force specific monsters
- `locationId` (string): Use location-appropriate content
- `sessionId` (string, required): Session ID
- `theme` (string): Theme like 'ambush', 'negotiation', 'chase'
- `type` (string): Type of encounter

### `scale_encounter` (~61 tokens)

Adjust the difficulty of an existing encounter.

Input parameters:

- `encounterId` (string, required): Encounter ID to scale
- `method` (string): How to adjust difficulty
- `sessionId` (string, required): Session ID
- `targetDifficulty` (string, required): New target difficulty

### `get_encounter_suggestions` (~69 tokens)

List encounters that fit the current context.

Input parameters:

- `limit` (number): Max results
- `locationId` (string): Filter by location
- `mood` (string): Desired mood
- `sessionId` (string, required): Session ID
- `situationId` (string): Filter by situation

### `start_investigation` (~89 tokens)

Begin tracking a mystery. Define the truth (GM-only) to enable hypothesis testing.

Input parameters:

- `name` (string, required): Investigation name
- `openQuestions` (array): Initial questions to answer
- `sessionId` (string, required): Session ID
- `situationIds` (array): Related situation IDs
- `truth` (object, required): The truth of the mystery (GM-only, used for hypothesis testing)

### `add_evidence` (~86 tokens)

Record evidence discovered during investigation.

Input parameters:

- `connects` (array): Other evidence IDs this connects to
- `description` (string, required): What was found
- `investigationId` (string, required): Investigation ID
- `isRedHerring` (boolean): GM flag: is this misleading?
- `sessionId` (string, required): Session ID
- `source` (string, required): Where/how it was found

### `add_hypothesis` (~70 tokens)

Record a player theory about the mystery.

Input parameters:

- `investigationId` (string, required): Investigation ID
- `sessionId` (string, required): Session ID
- `statement` (string, required): The hypothesis (e.g., 'The butler did it')
- `supportingEvidence` (array): Evidence IDs that support this

### `test_hypothesis` (~87 tokens)

Record the result of testing a hypothesis. Supports the 'null result' principle.

Input parameters:

- `hypothesisId` (string, required): Hypothesis ID
- `investigationId` (string, required): Investigation ID
- `result` (string, required): Result: supports, refutes, or inconclusive
- `sessionId` (string, required): Session ID
- `test` (string, required): What was done to test it

### `record_null_result` (~76 tokens)

Log a search that found nothing. Critical for hypothesis testing.

Input parameters:

- `investigationId` (string, required): Investigation ID
- `location` (string): Where they searched
- `meaning` (string, required): GM note: why nothing was found
- `search` (string, required): What they searched for
- `sessionId` (string, required): Session ID

### `get_investigation_status` (~46 tokens)

Get the current state of an investigation including evidence, hypotheses, and progress.

Input parameters:

- `investigationId` (string, required): Investigation ID
- `sessionId` (string, required): Session ID

### `suggest_investigation_steps` (~39 tokens)

Get suggestions for moving the investigation forward.

Input parameters:

- `investigationId` (string, required): Investigation ID
- `sessionId` (string, required): Session ID

### `update_investigation_status` (~51 tokens)

Mark an investigation as solved, cold, or abandoned.

Input parameters:

- `investigationId` (string, required): Investigation ID
- `sessionId` (string, required): Session ID
- `status` (string, required): New status

### `create_portable_clue` (~120 tokens)

Create a revelation that can be discovered through multiple sources. The ultimate flexible clue.

Input parameters:

- `gmNotes` (string): GM-only notes
- `information` (string, required): What the clue reveals
- `prerequisites` (object)
- `revealsLeadTo` (string): Situation ID this clue points to
- `sessionId` (string, required): Session ID
- `setsFlags` (array): Flags to set when revealed
- `significance` (string, required): How important this clue is
- `suggestedSources` (array, required): Ways this clue can be discovered

### `get_unrevealed_clues` (~77 tokens)

List clues that haven't been discovered yet. Filter by significance, location, or NPC.

Input parameters:

- `locationId` (string): Filter by location as suggested source
- `npcId` (string): Filter by NPC as suggested source
- `sessionId` (string, required): Session ID
- `significance` (string): Filter by significance

### `reveal_clue` (~52 tokens)

Mark a portable clue as discovered.

Input parameters:

- `clueId` (string, required): Clue ID to reveal
- `sessionId` (string, required): Session ID
- `via` (string, required): How it was revealed (description)

### `suggest_clue_delivery` (~79 tokens)

Get suggestions for how to naturally deliver a clue in the current context.

Input parameters:

- `clueId` (string, required): Clue ID
- `currentActivity` (string): What's happening now
- `currentLocationId` (string): Current location
- `presentNpcIds` (array): NPCs present
- `sessionId` (string, required): Session ID

### `import_leads_as_clues` (~46 tokens)

Convert situation leads into portable clues for flexible delivery.

Input parameters:

- `sessionId` (string, required): Session ID
- `situationId` (string, required): Situation ID to import leads from

### `personalize_content` (~59 tokens)

Connect abstract information to a PC's backstory, making it personally relevant.

Input parameters:

- `characterId` (string, required): PC to connect it to
- `content` (string, required): The information or event to personalize
- `sessionId` (string, required): Session ID

### `treasurify_information` (~63 tokens)

Package information as a valuable discovery - a physical item, document, or reward.

Input parameters:

- `context` (string, required): Current situation for context
- `information` (string, required): The lore or plot point to make valuable
- `sessionId` (string, required): Session ID

### `mystify_content` (~60 tokens)

Break complete information into mysterious fragments, creating revelatory discovery.

Input parameters:

- `fragmentCount` (number, required): How many pieces (2-6)
- `fullRevelation` (string, required): Complete information to fragment
- `sessionId` (string, required): Session ID

### `generate_engagement_hooks` (~68 tokens)

Generate personalized engagement hooks for a situation, location, or theme.

Input parameters:

- `locationId` (string): Location context
- `sessionId` (string, required): Session ID
- `situationId` (string): Situation to generate hooks for
- `theme` (string): Thematic focus (optional)

### `generate_world_seed` (~136 tokens)

Create the foundation for a new world from a campaign seed prompt. Returns a prompt for LLM execution.

Input parameters:

- `campaignSeed` (string, required): The creative prompt for world generation (e.g., 'noir detective in a steampunk city')
- `rulesConfig` (object): Optional rules configuration for custom abilities, mechanics, or tests
- `sessionId` (string, required): Session ID
- `settings` (object): Optional world settings overrides
- `tier` (string): World size: small (6 archetypes, 4 locations), medium (6 archetypes, 6 locations), large (6 archetypes, 10 locations)

### `generate_archetypes` (~76 tokens)

Generate playable character archetypes based on the world seed. Returns a prompt for LLM execution.

Input parameters:

- `count` (number): Number of archetypes to generate (default: from world seed)
- `focusOn` (array): Specific archetype seeds to focus on (by name)
- `sessionId` (string, required): Session ID

### `generate_monsters` (~77 tokens)

Generate monsters based on the world seed. Returns a prompt for LLM execution.

Input parameters:

- `count` (number): Number of monsters to generate
- `focusOn` (array): Specific monster seeds to focus on (by name)
- `sessionId` (string, required): Session ID
- `threatTiers` (array): Filter by threat tiers

### `generate_items` (~62 tokens)

Generate items based on the world seed. Returns a prompt for LLM execution.

Input parameters:

- `count` (number): Number of items to generate
- `kinds` (array): Item kinds to include (at least one required)
- `sessionId` (string, required): Session ID

### `generate_encounters` (~63 tokens)

Generate encounters based on the world seed. Returns a prompt for LLM execution.

Input parameters:

- `count` (number): Number of encounters to generate
- `sessionId` (string, required): Session ID
- `types` (array): Encounter types to include (at least one required)

### `generate_locations` (~69 tokens)

Generate locations based on the world seed. Returns a prompt for LLM execution.

Input parameters:

- `count` (number): Number of locations to generate (default: from world seed)
- `focusOn` (array): Specific location seeds to focus on (by name)
- `sessionId` (string, required): Session ID

### `generate_npcs` (~72 tokens)

Generate NPCs based on the world seed. Returns a prompt for LLM execution.

Input parameters:

- `count` (number): Number of NPCs to generate (default: from world seed)
- `focusOn` (array): Specific NPC seeds to focus on (by name)
- `sessionId` (string, required): Session ID

### `generate_conditions` (~49 tokens)

Generate status effects and conditions based on the world seed. Returns a prompt for LLM execution.

Input parameters:

- `count` (number): Number of conditions to generate
- `sessionId` (string, required): Session ID

### `generate_factions` (~54 tokens)

Generate factions with relationships, resources, and territory based on the world seed. Returns a prompt for LLM execution.

Input parameters:

- `count` (number): Number of factions to generate
- `sessionId` (string, required): Session ID

### `generate_narrative` (~46 tokens)

Generate narrative guidance (opening scenes, plot hooks, conflicts) based on the world seed. Returns a prompt for LLM execution.

Input parameters:

- `sessionId` (string, required): Session ID

### `generate_situations` (~105 tokens)

Generate situations (nodes) based on the world seed using Alexandrian node-based design. Returns a prompt for LLM execution. Can generate all at once or one at a time using count=1 with focusOn for better parallelism.

Input parameters:

- `count` (number): Number of situations to generate (default: from world seed or 5)
- `focusOn` (array): Specific situation seeds to focus on (by name)
- `sessionId` (string, required): Session ID

### `generate_arcs` (~75 tokens)

Generate story arcs that group situations around central tensions. Returns a prompt for LLM execution.

Input parameters:

- `count` (number): Number of arcs to generate (default: from world seed or 2)
- `focusOn` (array): Specific arc seeds to focus on (by name)
- `sessionId` (string, required): Session ID

### `save_generation_result` (~76 tokens)

Save LLM-generated content back to the session. Call this after executing a generation prompt. Accepts JSON or XML formatted results.

Input parameters:

- `result`: The LLM-generated result (JSON object or XML string)
- `sessionId` (string, required): Session ID
- `stepId` (string, required): Step ID from the generation tool response

### `resume_generation` (~55 tokens)

Resume an interrupted world generation session. Analyzes session state to report progress and optionally reset incomplete steps.

Input parameters:

- `reconstruct` (boolean): If true, reset incomplete steps to allow retry
- `sessionId` (string, required): Session ID

### `get_generation_status` (~37 tokens)

Check world generation progress. Shows completed, in-progress, and pending phases with entity counts.

Input parameters:

- `sessionId` (string, required): Session ID

### `batch_generate` (~84 tokens)

After seeding, returns ALL generation prompts at once for parallel LLM execution. Execute each prompt with an LLM, then call save_generation_result for each result. This replaces calling individual generate_* tools one by one.

Input parameters:

- `phases` (array): Specific phases to generate (default: all)
- `sessionId` (string, required): Session ID (must have a saved world seed)

### `assemble_world_pack` (~33 tokens)

Combine all generated content into a complete WorldContentPack and save it.

Input parameters:

- `sessionId` (string, required): Session ID

### `expand_location` (~54 tokens)

Expand a location with additional detail (areas, random encounters, treasure). Returns a prompt for LLM execution.

Input parameters:

- `locationId` (string, required): ID of the location to expand
- `sessionId` (string, required): Session ID

### `expand_archetype` (~61 tokens)

Expand an archetype with additional detail (skill progression, party role, RP hooks). Returns a prompt for LLM execution.

Input parameters:

- `archetypeId` (string, required): ID of the archetype to expand
- `sessionId` (string, required): Session ID

### `expand_npc` (~57 tokens)

Expand an NPC with additional detail (backstory, combat stats, quest hooks). Returns a prompt for LLM execution.

Input parameters:

- `npcId` (string, required): ID of the NPC to expand
- `sessionId` (string, required): Session ID

### `expand_monster` (~55 tokens)

Expand a monster with additional detail (lair, variants, ecology). Returns a prompt for LLM execution.

Input parameters:

- `monsterId` (string, required): ID of the monster to expand
- `sessionId` (string, required): Session ID

### `validate_world_pack` (~52 tokens)

Check a world pack for completeness, consistency, and broken references.

Input parameters:

- `packId` (string): Pack ID (if validating saved pack)
- `sessionId` (string): Session ID (if validating from session)

### `export_world_pack` (~63 tokens)

Export a world pack to JSON and/or markdown format.

Input parameters:

- `format` (string): Export format (default: json)
- `packId` (string): Pack ID (if exporting saved pack)
- `sessionId` (string): Session ID (if exporting from session)

### `list_world_packs` (~16 tokens)

List all saved world packs.

### `load_world_pack` (~29 tokens)

Load a saved world pack by ID.

Input parameters:

- `packId` (string, required): Pack ID to load

### `delete_world_pack` (~27 tokens)

Delete a saved world pack.

Input parameters:

- `packId` (string, required): Pack ID to delete

### `load_world_summary` (~66 tokens)

Load a compact GM reference for a world pack. Returns a token-efficient summary with entity IDs, names, and key stats. Use get_* tools (get_archetype, get_location, etc.) for full entity details.

Input parameters:

- `packId` (string, required): Pack ID to load

### `get_archetype` (~47 tokens)

Get full details for a specific archetype from a world pack.

Input parameters:

- `archetypeId` (string, required): Archetype ID to retrieve
- `packId` (string, required): Pack ID

### `get_location` (~42 tokens)

Get full details for a specific location from a world pack.

Input parameters:

- `locationId` (string, required): Location ID to retrieve
- `packId` (string, required): Pack ID

### `get_npc` (~43 tokens)

Get full details for a specific NPC from a world pack.

Input parameters:

- `npcId` (string, required): NPC ID to retrieve
- `packId` (string, required): Pack ID

### `get_monster` (~43 tokens)

Get full details for a specific monster from a world pack.

Input parameters:

- `monsterId` (string, required): Monster ID to retrieve
- `packId` (string, required): Pack ID

### `get_item` (~42 tokens)

Get full details for a specific item from a world pack.

Input parameters:

- `itemId` (string, required): Item ID to retrieve
- `packId` (string, required): Pack ID

### `get_encounter` (~43 tokens)

Get full details for a specific encounter from a world pack.

Input parameters:

- `encounterId` (string, required): Encounter ID to retrieve
- `packId` (string, required): Pack ID

### `get_condition` (~42 tokens)

Get full details for a specific condition from a world pack.

Input parameters:

- `conditionId` (string, required): Condition ID to retrieve
- `packId` (string, required): Pack ID

### `get_situation` (~53 tokens)

Get full details for a specific situation from a world pack. Includes leads, clock, complications, and outcomes.

Input parameters:

- `packId` (string, required): Pack ID
- `situationId` (string, required): Situation ID to retrieve

### `get_arc` (~52 tokens)

Get full details for a specific story arc from a world pack. Includes structure, situations, and resolution patterns.

Input parameters:

- `arcId` (string, required): Arc ID to retrieve
- `packId` (string, required): Pack ID

### `get_faction` (~44 tokens)

Get full details for a specific faction from a world pack.

Input parameters:

- `factionId` (string, required): Faction ID to retrieve
- `packId` (string, required): Pack ID

### `generate_rulebook` (~45 tokens)

Generate the core rulebook. Returns cached path if exists, or a prompt for LLM execution if generation is needed.

Input parameters:

- `force` (boolean): Force regeneration even if cached

### `save_rulebook_result` (~31 tokens)

Save the generated rulebook content to files.

Input parameters:

- `content` (string, required): The generated rulebook content

### `generate_world_books` (~63 tokens)

Generate book prompts for a world pack. Returns prompts for GM book, player book, bestiary, and campaign setting.

Input parameters:

- `books` (array): Which books to generate (default: all)
- `packId` (string, required): World pack ID to generate books for

### `save_book_result` (~52 tokens)

Save generated book content to a file.

Input parameters:

- `bookType` (string, required): Type of book being saved
- `content` (string, required): The generated book content
- `packId` (string, required): World pack ID

### `generate_appendices` (~51 tokens)

Generate appendices (items, conditions, encounters) for a world pack.

Input parameters:

- `packId` (string, required): World pack ID
- `types` (array): Which appendices to generate (default: all)

### `start_augmentation` (~80 tokens)

Start adding new content to an existing world pack. Returns generation prompts for the requested content types.

Input parameters:

- `locationContext` (string): Location ID or description for contextual content
- `packId` (string, required): World pack ID to augment
- `request` (object, required): Content counts to generate
- `theme` (string): Theme or focus for new content

### `merge_augmentation` (~60 tokens)

Merge newly generated content into an existing world pack.

Input parameters:

- `autoLink` (boolean): Auto-link content (default: true)
- `content` (object, required): New content arrays to merge
- `packId` (string, required): World pack ID to merge into

### `load_skill` (~504 tokens)

Load on-demand skill guidance into your context. Use when the current situation matches a skill's purpose (e.g. about to generate images, entering combat). The skill body is markdown — read it and apply it on this turn. Skill names come from the "Available skills" section of your system prompt.

Available skills:
\- `combat-runner` — Tool-flow playbook for running combat encounters — when combat triggers, the start_combat → roll_initiative → attack → next_turn → end_combat sequence, position/effect calibration, autoTickClockIds, and the diegetic-narration rules for outcomes. Load when the player engages hostile contact, names tactical parameters (position/effect/target), or any combatant rolls into a multi-round encounter.
\- `companion-intelligence` — How to narrate and orchestrate AI-controlled party members — when to call get_ai_player_context, the four playstyle decision rules (tactical, roleplay, cautious, reckless), and the combat orchestration sequence (start_combat → roll_initiative → per-turn get_ai_player_context → submit_ai_player_action). Load when the active session has AI companions in the party.
\- `engine-flows` — Tool-flow playbooks for shop, rest, dialogue, and image generation — when each flow triggers, the exact tool sequence, the response-handling table, and the in-chat narration rules. Load when the player initiates buying/selling, requests a rest, an NPC enters a structured conversation, or you're about to render visuals.
\- `image-generation` — Visual layer guidelines — when to call frame_scene / generate_portrait / generate_item_art, how to write portrait & item descriptions for SDXL, the add_npc → generate_portrait → showDialogue contract for NPCs invented mid-session, and the silent-on-failure rule. Load when about to generate images, introduce an NPC, or reveal a notable item.
\- `player-interaction` — Structured-fork interaction tools — showDialogue / showShop / requestCombatAction / requestConfirmation. The scope of each (real player decisi…

Input parameters:

- `name` (string, required): The skill name to load (the identifier from the skills index). Returns the full skill body as markdown for you to apply on this turn.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/protolabsai-mythxengine/https-github-com-protolabsai-mythx-mcp-releases-download-v0-3-0-mythxengine-0-3#diagnostics

## Score history

- 2026-08-03: 40
- 2026-08-02: 36
- 2026-08-01: 39
- 2026-07-31: 27
- 2026-07-30: 35
- 2026-07-28: 30
- 2026-07-27: 34

## Links

- Repository: https://github.com/protoLabsAI/mythx-mcp
- Website: https://mythxengine.com/
- Changelog RSS feed: https://verifymcp.io/servers/protolabsai-mythxengine/https-github-com-protolabsai-mythx-mcp-releases-download-v0-3-0-mythxengine-0-3/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/protolabsai-mythxengine/https-github-com-protolabsai-mythx-mcp-releases-download-v0-3-0-mythxengine-0-3/changelog.json
- HTML version of this page: https://verifymcp.io/servers/protolabsai-mythxengine/https-github-com-protolabsai-mythx-mcp-releases-download-v0-3-0-mythxengine-0-3
