{"name":"io.github.protoLabsAI/mythxengine","slug":"protolabsai-mythxengine","title":"MythxEngine","description":"Tabletop RPG engine over MCP: dice, combat, stress, clocks, world generation, four bundled worlds","url":"https://mcp.market/server/protolabsai-mythxengine","rating":null,"grade":"A","score":86,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":29,"stars":2,"forks":0,"downloads_week":223,"last_push_at":"2026-08-20T02:07:58.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"mixed","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/protoLabsAI/mythx-mcp","website":"https://mythxengine.com","version":"0.3.0","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@mythxengine/mcp-server","version":"0.3.0","transport":{"type":"stdio"},"environmentVariables":[{"description":"Where sessions and world packs are stored (default: ~/.mythxengine/data)","name":"RPG_MCP_DATA_DIR"}]},{"registryType":"mcpb","identifier":"https://github.com/protoLabsAI/mythx-mcp/releases/download/v0.3.0/mythxengine-0.3.0.mcpb","version":"0.3.0","fileSha256":"75f4b5a77fc63bf2d945f2de1c0349ebcd2196166c41c1a1e02710c22bea75c8","transport":{"type":"stdio"}}],"tools":[{"name":"add_combat_condition","description":"Add a condition to a combatant. Supports advantage/disadvantage and resistance/vulnerability effects.","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_deadline","description":"Add a deadline/countdown to track. Specify either expiresIn (minutes from now) or expiresAt (specific time).","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_note","description":"Add a timestamped note to the session","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_npc","description":"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 \\u2014 without this the NPC has no identity and their portrait can't be tracked across turns.","write_action":false,"price_micros":0,"input_schema":null},{"name":"advance_time","description":"Advances time by N minutes","write_action":false,"price_micros":0,"input_schema":null},{"name":"advance_turn","description":"Move to the next player in turn order","write_action":false,"price_micros":0,"input_schema":null},{"name":"apply_condition","description":"Add a condition to a character (narrative/exploration). For combat, use `add_combat_condition` instead so combat effects (advantage/disadvantage, modifiers) are picked up.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apply_damage","description":"Apply damage directly to a combatant (bypassing attack roll)","write_action":false,"price_micros":0,"input_schema":null},{"name":"assemble_world_pack","description":"Combine all generated content into a complete WorldContentPack and save it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"assign_character","description":"Link a player to a character","write_action":false,"price_micros":0,"input_schema":null},{"name":"attack","description":"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`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"batch_generate","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"check_clock_triggers","description":"Check if any time-based clock stages have triggered based on current game time.","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_character","description":"Create a new character in the session","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_player","description":"Add a player (human or AI) to the session","write_action":true,"price_micros":0,"input_schema":null},{"name":"create_session","description":"Create a new game session, optionally associated with a world pack.","write_action":true,"price_micros":0,"input_schema":null},{"name":"damage_character","description":"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`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"delete_character","description":"Delete a character from the session","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_player","description":"Remove a player from the session","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_session","description":"Delete a session and all its data","write_action":true,"price_micros":0,"input_schema":null},{"name":"end_combat","description":"End the current combat","write_action":false,"price_micros":0,"input_schema":null},{"name":"end_turns","description":"End turn-based coordination and return to free-form play","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_archetypes","description":"Generate playable character archetypes based on the world seed. Returns a prompt for LLM execution.","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_arcs","description":"Generate story arcs that group situations around central tensions. Returns a prompt for LLM execution.","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_conditions","description":"Generate status effects and conditions based on the world seed. Returns a prompt for LLM execution.","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_encounters","description":"Generate encounters based on the world seed. Returns a prompt for LLM execution.","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_factions","description":"Generate factions with relationships, resources, and territory based on the world seed. Returns a prompt for LLM execution.","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_items","description":"Generate items based on the world seed. Returns a prompt for LLM execution.","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_locations","description":"Generate locations based on the world seed. Returns a prompt for LLM execution.","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_monsters","description":"Generate monsters based on the world seed. Returns a prompt for LLM execution.","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_narrative","description":"Generate narrative guidance (opening scenes, plot hooks, conflicts) based on the world seed. Returns a prompt for LLM execution.","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_npcs","description":"Generate NPCs based on the world seed. Returns a prompt for LLM execution.","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_situations","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_world_images","description":"Generate images for world pack entities (all entity types by default). Run after assemble_world_pack to pre-bake character select images.","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_world_seed","description":"Create the foundation for a new world from a campaign seed prompt. Returns a prompt for LLM execution.","write_action":true,"price_micros":0,"input_schema":null},{"name":"get_active_clocks","description":"List all active situation clocks with their current status.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_ai_player_context","description":"Get full context for an AI player to make a decision","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_arc","description":"Get full details for a specific story arc from a world pack. Includes structure, situations, and resolution patterns.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_archetype","description":"Get full details for a specific archetype from a world pack.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_available_leads","description":"List leads that are currently available for discovery. Filter by location, NPC, or prominence.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_character","description":"Get a character's full details","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_combat_state","description":"Get the current combat state","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_condition","description":"Get full details for a specific condition from a world pack.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_current_turn","description":"Get the current turn state and active player","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_discovered_leads","description":"List all leads that players have discovered.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_encounter","description":"Get full details for a specific encounter from a world pack.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_faction","description":"Get full details for a specific faction from a world pack.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_generation_status","description":"Check world generation progress. Shows completed, in-progress, and pending phases with entity counts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_item","description":"Get full details for a specific item from a world pack.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_location","description":"Get full details for a specific location from a world pack.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_monster","description":"Get full details for a specific monster from a world pack.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_npc","description":"Get full details for a specific NPC from a world pack.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_npc_disposition","description":"Quick check: How does this NPC feel about the party?","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_player","description":"Get a player's full details","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_relationship","description":"Get an NPC's current attitude and interaction history with the party.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_situation","description":"Get full details for a specific situation from a world pack. Includes leads, clock, complications, and outcomes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_stress","description":"Get a character's current stress level, trauma status, and whether they can safely push.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_time","description":"Returns current game time for session","write_action":false,"price_micros":0,"input_schema":null},{"name":"heal_character","description":"Restore HP to a character. Capped at max HP. Use for any HP recovery (rest, spell, potion narration, GM fiat).","write_action":false,"price_micros":0,"input_schema":null},{"name":"initialize_relationship","description":"Start tracking a relationship with an NPC.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_characters","description":"List all characters in a session","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_players","description":"List all players in a session","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_relationships","description":"List all tracked NPC relationships.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_sessions","description":"List all game sessions. Optionally filter by world pack ID.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_world_packs","description":"List all saved world packs with their metadata and content counts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"load_session","description":"Load an existing game session by ID. Returns session state summary.","write_action":false,"price_micros":0,"input_schema":null},{"name":"load_skill","description":"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 \\u2014 read it and apply it on this turn. Skill names come from the \"Available skills\" section of your system prompt. Available skills: …","write_action":false,"price_micros":0,"input_schema":null},{"name":"load_world_summary","description":"Load a compact GM reference for a world pack. Returns a token-efficient summary with entity IDs, names, and key stats. Use get_* tools for full entity details.","write_action":false,"price_micros":0,"input_schema":null},{"name":"next_turn","description":"Advance to the next turn in combat","write_action":false,"price_micros":0,"input_schema":null},{"name":"pause_clock","description":"Pause an active clock. Time-based triggers will not fire while paused.","write_action":false,"price_micros":0,"input_schema":null},{"name":"push_roll","description":"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` \\u2192 `newOutcome`, the re-derived outcome tier for the pushed margin), stress/trauma changes in `state_delta`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"recover_stress","description":"Recover stress during rest. Short rest recovers 2 stress, long rest recovers all stress.","write_action":false,"price_micros":0,"input_schema":null},{"name":"remove_condition","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"remove_deadline","description":"Remove a deadline by ID","write_action":true,"price_micros":0,"input_schema":null},{"name":"request_player_input","description":"Mark a human player as awaiting input for their turn","write_action":false,"price_micros":0,"input_schema":null},{"name":"resist_consequence","description":"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 \\u2014 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` ","write_action":false,"price_micros":0,"input_schema":null},{"name":"resume_clock","description":"Resume a paused clock.","write_action":false,"price_micros":0,"input_schema":null},{"name":"resume_generation","description":"Resume an interrupted world generation session. Analyzes session state to report progress and optionally reset incomplete steps.","write_action":false,"price_micros":0,"input_schema":null},{"name":"reveal_clock","description":"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 \\u2014 not before. Until revealed, clocks are GM-only state and may tick in secret.","write_action":false,"price_micros":0,"input_schema":null},{"name":"reveal_lead","description":"Mark a lead as discovered by the players.","write_action":false,"price_micros":0,"input_schema":null},{"name":"roll_custom_test","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"roll_dice","description":"Roll dice using standard notation (e.g., '2d6+3', 'd20', '4d6'). Optionally use session RNG for determinism.","write_action":false,"price_micros":0,"input_schema":null},{"name":"roll_initiative","description":"Roll initiative for all combatants and set turn order","write_action":false,"price_micros":0,"input_schema":null},{"name":"roll_test","description":"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`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"save_generation_result","description":"Save LLM-generated content back to the session. Call this after executing a generation prompt. Accepts JSON or XML formatted results.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_leads","description":"Search for leads by keyword across all lead information.","write_action":false,"price_micros":0,"input_schema":null},{"name":"search_notes","description":"Search session notes by keyword or tags","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_play_mode","description":"Set the play mode for a session. 'interactive' prompts the player for decisions, 'auto' plays all characters autonomously. Persists across context compaction.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_time","description":"Sets game time (for initialization/GM override)","write_action":false,"price_micros":0,"input_schema":null},{"name":"start_combat","description":"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`).","write_action":false,"price_micros":0,"input_schema":null},{"name":"start_situation_clock","description":"Start a situation clock. The clock tracks what happens if PCs don't intervene.","write_action":false,"price_micros":0,"input_schema":null},{"name":"start_turns","description":"Begin turn-based coordination for multi-player gameplay","write_action":false,"price_micros":0,"input_schema":null},{"name":"submit_ai_player_action","description":"Record an AI player's decided action","write_action":true,"price_micros":0,"input_schema":null},{"name":"submit_player_action","description":"Record a human player's chosen action","write_action":true,"price_micros":0,"input_schema":null},{"name":"suggest_lead_opportunity","description":"Suggest ways to naturally surface leads pointing to a target situation. Supports the Three Clue Rule.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tick_clock","description":"Manually advance a clock to its next stage. Use for event-based triggers or GM override.","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_companion_state","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_pacing_state","description":"Update narrative pacing state after each beat. Track tension level, phase transitions, and spotlight rotation to maintain balanced storytelling.","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_player","description":"Update a player's status, name, controlType, or AI persona","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_relationship","description":"Record an interaction and update NPC relationship. Automatically adjusts attitude based on impact.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":86,"grade":"A","scanned_at":"2026-09-26T05:12:18.227Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-26T05:12:18.287Z","components":{"code":{"score":25,"max":25,"notes":["6 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":12,"max":15,"notes":["last push 37 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@mythxengine/mcp-server","version":"0.3.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":4,"publishedAt":"2026-07-12T06:47:00.683Z","repositoryUrl":"git+https://github.com/protoLabsAI/mythx-mcp.git","weeklyDownloads":223}],"repo":{"found":true,"owner":"protoLabsAI","repo":"mythx-mcp","archived":false,"pushedAt":"2026-08-20T02:07:58Z","stars":2,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/237192879?v=4","ownerCreatedAt":"2025-10-10T07:19:51Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/237192879?v=4&s=128","source":"github"},"presence":{"stars":2,"forks":0,"downloadsWeek":223,"license":"MIT","lastPushAt":"2026-08-20T02:07:58.000Z","score":29}}}},"grade_history":[],"reviews":[]}