| name | mimir-dm |
| description | This skill should be used when the user asks to "create a D&D campaign", "make a new module", "add an NPC", "create an encounter", "search for monsters", "find D&D items", "search for spells", "list campaigns", "set up a dungeon crawl", "create a mystery adventure", "add loot to characters", "search for traps", "manage character inventory", "build an adventure", "populate a dungeon", "give items to players", "create a villain", "add treasure", "write session notes", "create campaign document", "add world lore", "campaign-level document", "upload a map", "place tokens", "level up character", "set ability scores", "set currency", "search races", "search classes", "search backgrounds", "search feats", "search conditions", "delete module", "delete character", "delete document", "create campaign", "export campaign", "import campaign", "homebrew item", "homebrew monster", "homebrew spell", "create custom monster", "create custom item", "create custom spell", "clone monster", "clone item", "clone spell", or mentions "Mimir campaign", "D&D 5e authoring", or "dungeon master tools". Provides MCP tools for campaign management, module creation, NPC authoring, character management, map/token placement, document management, homebrew content creation, and catalog searching. |
Mimir DM - D&D 5e Campaign Management
Getting Started
Orient yourself, then make sure a campaign is active before using any module, character, or document tools:
- Check the current selection with
get_active_campaign (never errors; tells you if one is already active)
- List campaigns with
list_campaigns (or create one with create_campaign, which auto-activates it)
- Set the active campaign with
set_active_campaign
All subsequent operations require an active campaign. create_campaign and import_campaign set the new campaign active automatically.
Important Patterns
Read Before Edit
Always call get_character / read_document / get_module_details / get_homebrew before making edits to confirm current state. Never edit blind.
Catalog Exact-Match
Search tools return partial matches. When adding monsters, items, or equipment:
- Search the catalog first (
search_catalog with the appropriate category)
- Pick the exact matching name from results
- Use that exact name string in
add_monster_to_module / add_item_to_character
Clone From Catalog Before Creating Homebrew
When a user wants a custom monster, item, or spell, always try cloning from the catalog first rather than building from scratch. A cloned entry preserves correct 5etools JSON structure and only needs targeted edits.
- Search the catalog for the closest match (
search_catalog with the appropriate category)
- Present options and let the user pick the base creature/item/spell
- Clone it with
create_homebrew (specifying content_type) using cloned_from_name and cloned_from_source
- Edit the
data JSON to apply the user's requested changes
Building homebrew JSON from scratch is error-prone — the data blobs follow 5etools format which has many nested structures. Cloning and modifying is almost always safer.
Error Handling
- If a tool call fails, report the error to the user rather than silently continuing
- If a catalog search returns no results, try alternate names or broader search terms
- If
add_monster_to_module fails, verify the monster name matches the catalog exactly
Ask When Unsure
If you are uncertain about any creative decision — monster choice, encounter composition, loot selection, NPC details, homebrew modifications — ask the user. Present 2-3 options with brief rationale and let them choose. It is always better to ask than to guess wrong and have to undo work.
Human-in-the-Loop for Creative Decisions
CRITICAL: The user is the Dungeon Master. You are their assistant, not a co-author. Never make narrative, creative, or design decisions without explicit user approval. Always present options and let the user choose. Execute mechanically once they have decided.
For the full guidelines on what requires approval vs what you can do autonomously, see references/dm-assistant-guidelines.md.
Core Workflows
Campaign Management
list_campaigns — List all campaigns
get_active_campaign — Report which campaign is active (never errors; call first to orient)
create_campaign — Create a new campaign (name, description); auto-activates it
get_campaign_details — View active campaign details
update_campaign — Update campaign name or description
set_active_campaign — Set the working campaign
get_campaign_sources — View enabled source books
export_campaign — Export campaign to archive file
import_campaign — Import a campaign archive
preview_archive — Preview archive contents before importing
delete_campaign — Delete a campaign (irreversible)
Create Campaign-Level Documents
Campaign-level documents are not tied to any module — use them for world lore, session notes, or campaign-wide references.
- Set the active campaign
- Create a document with
create_document (title, document_type) — omit module_id
- List campaign documents with
list_documents — omit module_id
Create and Populate a Module
- Set the active campaign
- Create the module with
create_module (name, type, description)
- Add narrative documents with
create_document (module_id, backstory, read_aloud, dm_notes, description, custom)
- Search the catalog with
search_catalog(category: "monster") to find exact names
- Add monsters with
add_monster_to_module (include count and notes)
- Search items with
search_catalog(category: "item"); note module-level loot tracking is not yet implemented, so record intended treasure in a dm_notes document or hand it to an NPC/PC with add_item_to_character
- Search spells with
search_catalog(category: "spell") if the module involves spellcasting NPCs or traps
Create and Equip an NPC
- Create the character with
create_character (name, character_type: "npc", race_name)
- Set role and location with
edit_character (npc_role, npc_location)
- Set ability scores with
edit_character using the named integer params strength, dexterity, constitution, intelligence, wisdom, charisma (there is no ability_scores array — an array is silently ignored)
- Set currency with
edit_character using the named integer params cp, sp, ep, gp, pp (no currency array)
- Equip with
add_item_to_character (item_name, equipped: true, attuned: true if applicable)
- Verify with
get_character
Create a Full PC
- Search
search_catalog with category: "race", "class", "background" to find exact names
- Create with
create_character (name, character_type: "pc", race_name, class_name)
- Set ability scores and currency with
edit_character using named params (strength…charisma, cp…pp) — ability scores cannot be set at creation
- Set race/background with
edit_character (race_name, race_source, background_name, background_source)
- Add equipment with
add_item_to_character
Level Up a Character
- Read the character with
get_character to check current level and class
- Level up with
level_up_character (character_id, class_name, hp_method: "average"|"roll"|"manual")
- Optionally include subclass_name, asi_type ("asi"|"feat"), asi_ability1/asi_increase1, feat_name
Populate an Encounter
- Search monsters by name, CR range, or type with
search_catalog(category: "monster")
- Add each monster to the module with
add_monster_to_module (specify count)
- Search spells with
search_catalog(category: "spell") if encounter involves spellcasters
- Record treasure in a
dm_notes document, or grant it to a character with add_item_to_character (module-level loot tracking is not yet implemented)
Upload and Populate a Map
- Upload a UVTT map file with
create_map (module_id, name, file_path)
- Add the monster to the module first with
add_monster_to_module to get a module_monster_id
- Place it with
add_token_to_map (map_id, module_monster_id, grid_x, grid_y, label) — coordinates are integer grid cells and default to (0,0)
- Place NPCs the same way with
add_token_to_map (map_id, module_npc_id, grid_x, grid_y, label)
- Review with
get_map to see all token placements
- Remove misplaced tokens with
remove_token
Manage Character Inventory
get_character_inventory — view full inventory
add_item_to_character — add items (set equipped, attuned flags)
update_character_inventory — change quantity, equipped, or attuned status
remove_item_from_character — remove items by inventory ID
Manage Character Spells
list_character_spells — list all known spells, optionally filtered by class or prepared status
add_character_spell — add a catalog or homebrew spell to a character's known spells (set prepared: true to add it already prepared)
remove_character_spell — remove a spell by name, optionally scoped to a specific class
Set a spell's prepared state with the prepared flag when calling add_character_spell. Use spell_source: "HB" when adding homebrew spells, and verify the homebrew spell exists in the campaign with list_homebrew(content_type: "spell") before adding it to a character.
Review Module Structure
Use get_module_details to see the full structure before editing — it returns the module's documents and monsters in one call. (Module-level item/loot tracking is not implemented, so no items are returned.)
Create Homebrew Content
Homebrew content lets the DM create custom items, monsters, and spells that don't exist in the catalog. The recommended workflow is clone and edit, not build from scratch.
Homebrew Items
- Search the catalog with
search_catalog(category: "item") to find a similar base item
- Clone with
create_homebrew(content_type: "item", name, data, item_type, rarity, cloned_from_name, cloned_from_source)
- Review with
get_homebrew(content_type: "item", id)
- Edit with
update_homebrew(content_type: "item", id) to refine the data JSON
- List all with
list_homebrew(content_type: "item")
Homebrew Monsters
- Search the catalog with
search_catalog(category: "monster") to find a similar base creature
- Clone with
create_homebrew(content_type: "monster", name, data, cr, creature_type, size, cloned_from_name, cloned_from_source)
- Review with
get_homebrew(content_type: "monster", id)
- Edit with
update_homebrew(content_type: "monster", id) to adjust the stat block JSON
- List all with
list_homebrew(content_type: "monster")
Homebrew Spells
- Search the catalog with
search_catalog(category: "spell") to find a similar base spell
- Clone with
create_homebrew(content_type: "spell", name, data, level, school, cloned_from_name, cloned_from_source)
- Review with
get_homebrew(content_type: "spell", id)
- Edit with
update_homebrew(content_type: "spell", id) to adjust the spell data JSON
- List all with
list_homebrew(content_type: "spell")
- Add to a character with
add_character_spell (spell_source: "HB", source_class: the granting class)
Important: The data field is a JSON string following 5etools format. Always clone from catalog to get the correct structure, then make targeted edits. If you must build from scratch, validate the JSON is well-formed before saving.
Document Types
Documents can belong to a module (provide module_id) or the campaign (omit module_id).
Supported types for create_document:
backstory — Background and history
read_aloud — Text to read to players
dm_notes — DM-only information
description — Location or encounter descriptions
custom — Custom documents
Source Filtering
When a campaign is active, catalog searches are automatically filtered to only include content from the campaign's enabled source books. This ensures monsters, items, and spells match the campaign's allowed content.
Additional Tips
- Assign NPCs roles and locations for organization
- Documents support markdown formatting for rich content
- Use
list_characters with location or faction filters to find NPCs by area
- For exact parameter names (ability scores, currency, etc.), see references/tool-parameter-reference.md
- When deleting homebrew content, check if any modules or characters reference it first
- Homebrew monsters appear with source "HB" in module monster lists
- Homebrew spells added to characters appear with source "HB" on the character sheet and in spell card PDF exports