@thijshakkenberg/valkyrie-mom-mcp 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/.claude-plugin/plugin.json +2 -2
  2. package/.mcp.json +1 -1
  3. package/README.md +25 -12
  4. package/agents/scenario-designer.md +5 -3
  5. package/dist/catalogs/catalog-store.js +2 -2
  6. package/dist/catalogs/catalog-store.js.map +1 -1
  7. package/dist/catalogs/data/tile-geometry.d.ts +17 -6
  8. package/dist/catalogs/data/tile-geometry.d.ts.map +1 -1
  9. package/dist/catalogs/data/tile-geometry.js +183 -180
  10. package/dist/catalogs/data/tile-geometry.js.map +1 -1
  11. package/dist/io/image.d.ts +15 -0
  12. package/dist/io/image.d.ts.map +1 -0
  13. package/dist/io/image.js +179 -0
  14. package/dist/io/image.js.map +1 -0
  15. package/dist/io/localization-io.d.ts +9 -5
  16. package/dist/io/localization-io.d.ts.map +1 -1
  17. package/dist/io/localization-io.js +60 -21
  18. package/dist/io/localization-io.js.map +1 -1
  19. package/dist/io/package-builder.d.ts.map +1 -1
  20. package/dist/io/package-builder.js +7 -3
  21. package/dist/io/package-builder.js.map +1 -1
  22. package/dist/map/layout.d.ts +91 -0
  23. package/dist/map/layout.d.ts.map +1 -0
  24. package/dist/map/layout.js +253 -0
  25. package/dist/map/layout.js.map +1 -0
  26. package/dist/map/render.d.ts +15 -0
  27. package/dist/map/render.d.ts.map +1 -0
  28. package/dist/map/render.js +191 -0
  29. package/dist/map/render.js.map +1 -0
  30. package/dist/model/component-types.d.ts +18 -1
  31. package/dist/model/component-types.d.ts.map +1 -1
  32. package/dist/model/component-types.js +30 -1
  33. package/dist/model/component-types.js.map +1 -1
  34. package/dist/model/field-schema.d.ts +20 -0
  35. package/dist/model/field-schema.d.ts.map +1 -0
  36. package/dist/model/field-schema.js +61 -0
  37. package/dist/model/field-schema.js.map +1 -0
  38. package/dist/model/format-features.d.ts +20 -0
  39. package/dist/model/format-features.d.ts.map +1 -0
  40. package/dist/model/format-features.js +46 -0
  41. package/dist/model/format-features.js.map +1 -0
  42. package/dist/model/scenario-model.d.ts.map +1 -1
  43. package/dist/model/scenario-model.js +15 -0
  44. package/dist/model/scenario-model.js.map +1 -1
  45. package/dist/resources/format-docs.d.ts +3 -3
  46. package/dist/resources/format-docs.d.ts.map +1 -1
  47. package/dist/resources/format-docs.js +87 -32
  48. package/dist/resources/format-docs.js.map +1 -1
  49. package/dist/server.d.ts.map +1 -1
  50. package/dist/server.js +78 -17
  51. package/dist/server.js.map +1 -1
  52. package/dist/tools/lifecycle.d.ts +16 -0
  53. package/dist/tools/lifecycle.d.ts.map +1 -1
  54. package/dist/tools/lifecycle.js +27 -0
  55. package/dist/tools/lifecycle.js.map +1 -1
  56. package/dist/tools/map.d.ts +11 -7
  57. package/dist/tools/map.d.ts.map +1 -1
  58. package/dist/tools/map.js +92 -52
  59. package/dist/tools/map.js.map +1 -1
  60. package/dist/tools/upsert.d.ts +3 -0
  61. package/dist/tools/upsert.d.ts.map +1 -1
  62. package/dist/tools/upsert.js +90 -21
  63. package/dist/tools/upsert.js.map +1 -1
  64. package/dist/validation/rules/catalog-references.d.ts +1 -0
  65. package/dist/validation/rules/catalog-references.d.ts.map +1 -1
  66. package/dist/validation/rules/catalog-references.js +17 -0
  67. package/dist/validation/rules/catalog-references.js.map +1 -1
  68. package/dist/validation/rules/cross-references.d.ts +1 -0
  69. package/dist/validation/rules/cross-references.d.ts.map +1 -1
  70. package/dist/validation/rules/cross-references.js +32 -1
  71. package/dist/validation/rules/cross-references.js.map +1 -1
  72. package/dist/validation/rules/custom-images.d.ts +10 -0
  73. package/dist/validation/rules/custom-images.d.ts.map +1 -0
  74. package/dist/validation/rules/custom-images.js +46 -0
  75. package/dist/validation/rules/custom-images.js.map +1 -0
  76. package/dist/validation/rules/event-flow.d.ts +5 -7
  77. package/dist/validation/rules/event-flow.d.ts.map +1 -1
  78. package/dist/validation/rules/event-flow.js +49 -70
  79. package/dist/validation/rules/event-flow.js.map +1 -1
  80. package/dist/validation/rules/event-graph.d.ts.map +1 -1
  81. package/dist/validation/rules/event-graph.js +4 -1
  82. package/dist/validation/rules/event-graph.js.map +1 -1
  83. package/dist/validation/rules/event-semantics.d.ts +18 -0
  84. package/dist/validation/rules/event-semantics.d.ts.map +1 -0
  85. package/dist/validation/rules/event-semantics.js +72 -0
  86. package/dist/validation/rules/event-semantics.js.map +1 -0
  87. package/dist/validation/rules/field-schema.d.ts +10 -0
  88. package/dist/validation/rules/field-schema.d.ts.map +1 -0
  89. package/dist/validation/rules/field-schema.js +47 -0
  90. package/dist/validation/rules/field-schema.js.map +1 -0
  91. package/dist/validation/rules/format-rules.d.ts +2 -1
  92. package/dist/validation/rules/format-rules.d.ts.map +1 -1
  93. package/dist/validation/rules/format-rules.js +17 -3
  94. package/dist/validation/rules/format-rules.js.map +1 -1
  95. package/dist/validation/rules/game-flow.d.ts +29 -0
  96. package/dist/validation/rules/game-flow.d.ts.map +1 -0
  97. package/dist/validation/rules/game-flow.js +201 -0
  98. package/dist/validation/rules/game-flow.js.map +1 -0
  99. package/dist/validation/rules/mythos-structure.d.ts +1 -1
  100. package/dist/validation/rules/mythos-structure.js +4 -4
  101. package/dist/validation/rules/mythos-structure.js.map +1 -1
  102. package/dist/validation/rules/required-fields.d.ts +1 -1
  103. package/dist/validation/rules/required-fields.js +3 -3
  104. package/dist/validation/rules/required-fields.js.map +1 -1
  105. package/dist/validation/rules/tile-connectivity.d.ts +10 -3
  106. package/dist/validation/rules/tile-connectivity.d.ts.map +1 -1
  107. package/dist/validation/rules/tile-connectivity.js +66 -108
  108. package/dist/validation/rules/tile-connectivity.js.map +1 -1
  109. package/dist/validation/rules/token-event-wiring.d.ts +1 -0
  110. package/dist/validation/rules/token-event-wiring.d.ts.map +1 -1
  111. package/dist/validation/rules/token-event-wiring.js +5 -1
  112. package/dist/validation/rules/token-event-wiring.js.map +1 -1
  113. package/dist/validation/rules/triggers.d.ts +15 -0
  114. package/dist/validation/rules/triggers.d.ts.map +1 -0
  115. package/dist/validation/rules/triggers.js +62 -0
  116. package/dist/validation/rules/triggers.js.map +1 -0
  117. package/dist/validation/validator.d.ts.map +1 -1
  118. package/dist/validation/validator.js +12 -1
  119. package/dist/validation/validator.js.map +1 -1
  120. package/package.json +1 -1
  121. package/skills/custom-monsters/SKILL.md +98 -149
  122. package/skills/event-patterns/SKILL.md +47 -40
  123. package/skills/items-and-distribution/SKILL.md +15 -5
  124. package/skills/scenario/SKILL.md +7 -4
  125. package/skills/tile-placement/SKILL.md +77 -16
  126. package/skills/ui-and-puzzles/SKILL.md +17 -25
  127. package/skills/variables-and-mythos/SKILL.md +50 -56
  128. package/src/catalogs/catalog-store.ts +2 -2
  129. package/src/catalogs/data/tile-geometry.ts +198 -182
  130. package/src/io/image.ts +173 -0
  131. package/src/io/localization-io.ts +59 -23
  132. package/src/io/package-builder.ts +6 -3
  133. package/src/map/layout.ts +308 -0
  134. package/src/map/render.ts +202 -0
  135. package/src/model/component-types.ts +35 -1
  136. package/src/model/field-schema.ts +65 -0
  137. package/src/model/format-features.ts +49 -0
  138. package/src/model/scenario-model.ts +12 -0
  139. package/src/resources/format-docs.ts +87 -32
  140. package/src/server.ts +97 -17
  141. package/src/tools/lifecycle.ts +38 -0
  142. package/src/tools/map.ts +104 -63
  143. package/src/tools/upsert.ts +98 -25
  144. package/src/validation/rules/catalog-references.ts +16 -0
  145. package/src/validation/rules/cross-references.ts +31 -1
  146. package/src/validation/rules/custom-images.ts +48 -0
  147. package/src/validation/rules/event-flow.ts +45 -75
  148. package/src/validation/rules/event-graph.ts +4 -1
  149. package/src/validation/rules/event-semantics.ts +79 -0
  150. package/src/validation/rules/field-schema.ts +54 -0
  151. package/src/validation/rules/format-rules.ts +17 -3
  152. package/src/validation/rules/game-flow.ts +198 -0
  153. package/src/validation/rules/mythos-structure.ts +4 -4
  154. package/src/validation/rules/required-fields.ts +3 -3
  155. package/src/validation/rules/tile-connectivity.ts +63 -126
  156. package/src/validation/rules/token-event-wiring.ts +4 -1
  157. package/src/validation/rules/triggers.ts +68 -0
  158. package/src/validation/validator.ts +12 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "valkyrie-mom",
3
- "version": "1.0.1",
3
+ "version": "2.0.0",
4
4
  "description": "AI-assisted Mansions of Madness scenario editor for Valkyrie",
5
5
  "author": {
6
6
  "name": "Thijs Hakkenberg"
@@ -10,7 +10,7 @@
10
10
  "mcpServers": {
11
11
  "valkyrie-mom": {
12
12
  "command": "npx",
13
- "args": ["-y", "@thijshakkenberg/valkyrie-mom-mcp"]
13
+ "args": ["-y", "@thijshakkenberg/valkyrie-mom-mcp@latest"]
14
14
  }
15
15
  }
16
16
  }
package/.mcp.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "mcpServers": {
3
3
  "valkyrie-mom": {
4
4
  "command": "npx",
5
- "args": ["-y", "@thijshakkenberg/valkyrie-mom-mcp"]
5
+ "args": ["-y", "@thijshakkenberg/valkyrie-mom-mcp@latest"]
6
6
  }
7
7
  }
8
8
  }
package/README.md CHANGED
@@ -20,7 +20,7 @@ claude plugin install valkyrie-mom
20
20
  ```
21
21
 
22
22
  This gives you:
23
- - **MCP server** with 20 tools for scenario editing (auto-started)
23
+ - **MCP server** with 25 tools for scenario editing (auto-started)
24
24
  - **7 skills**: `/scenario`, `/event-patterns`, `/tile-placement`, `/variables-and-mythos`, `/custom-monsters`, `/ui-and-puzzles`, `/items-and-distribution`
25
25
  - **Scenario designer agent** for autonomous scenario creation
26
26
  - **5 MCP resources** for format documentation
@@ -85,6 +85,7 @@ npx tsx src/index.ts # Run MCP server via stdio
85
85
  | `get_scenario_state` | Get current scenario component/localization summary |
86
86
  | `validate_scenario` | Run all validation rules |
87
87
  | `build_scenario` | Save and build `.valkyrie` package |
88
+ | `set_quest_config` | Set difficulty, play time, investigator count, cover image |
88
89
 
89
90
  ### Components
90
91
  | Tool | Description |
@@ -96,15 +97,19 @@ npx tsx src/index.ts # Run MCP server via stdio
96
97
  | `upsert_item` | Create or update an item |
97
98
  | `upsert_puzzle` | Create or update a puzzle |
98
99
  | `upsert_ui` | Create or update a UI element |
100
+ | `upsert_custom_monster` | Create or update a custom monster |
101
+ | `upsert_mplace` | Create or update a monster placement |
102
+ | `upsert_activation` | Create or update a custom monster activation |
99
103
  | `delete_component` | Delete a component with cascade reference cleanup |
100
104
  | `set_localization` | Set localization key-value pairs |
101
105
 
102
106
  ### Map
103
107
  | Tool | Description |
104
108
  |------|-------------|
105
- | `get_map_ascii` | Render tile layout as ASCII art |
106
- | `suggest_tile_layout` | Suggest coordinates for linear, L-shape, or hub-spoke layouts |
107
- | `place_tile_relative` | Compute position relative to an existing tile |
109
+ | `get_map_ascii` | Describe the board: tile areas, doors and where they lead (with explore-token spots), tokens and their tile, ASCII sketch |
110
+ | `render_map` | Render the board as a PNG with the real tile artwork (from Valkyrie's imported data) or a schematic, tokens numbered |
111
+ | `suggest_tile_layout` | Suggest coordinates for large (7x7) tiles in linear, L-shape, or hub-spoke layouts |
112
+ | `place_tile_relative` | Position and rotation for a new tile against an existing one, with a door lined up |
108
113
 
109
114
  ### Reference
110
115
  | Tool | Description |
@@ -160,25 +165,33 @@ Built scenarios are ZIP archives with a `.valkyrie` extension.
160
165
 
161
166
  ## Validation Rules
162
167
 
163
- The server validates scenarios against 12 rule categories:
168
+ The server validates scenarios against 18 rule categories, checked against Valkyrie 3.28 (quest format 21):
164
169
 
165
170
  1. **Unique names** - No duplicate component names
166
- 2. **Required fields** - Tiles have `side`, displayed events have `buttons`
167
- 3. **Cross-references** - All referenced components exist
171
+ 2. **Required fields** - Tiles have `side` or `customImage`, displayed events have `buttons`
172
+ 3. **Cross-references** - All referenced components exist; `remove` #keywords are valid
168
173
  4. **Event graph** - `EventStart` trigger exists, no unreachable/dead-end events
169
- 5. **Event flow** - Buttons vs event-ref consistency, silent event rules
174
+ 5. **Event flow** - No endless loops of hidden events
170
175
  6. **Localization completeness** - Event text, button labels, quest metadata
171
- 7. **Format rules** - Valid format version, type=MoM, tile rotations
176
+ 7. **Format rules** - Valid format version (4-21) and high enough for the features used, type=MoM, tile rotations
172
177
  8. **Catalog references** - Tile sides, monster names, items match game content
173
- 9. **Tile connectivity** - Tiles are spatially connected
178
+ 9. **Tile connectivity** - Tiles don't overlap, touch at least one other tile, and share a lined-up door or open edge (door data measured from the tile artwork)
174
179
  10. **Mythos structure** - Proper mythos trigger configuration
175
180
  11. **Investigator token** - TokenInvestigators setup and removal
176
181
  12. **Explore token** - Explore tokens linked to tile reveal events
182
+ 13. **Field schema** - Only fields Valkyrie reads for each component type; valid `tokensize` and boolean values
183
+ 14. **Event semantics** - How Valkyrie actually runs events: unreachable event2+ on hidden events, `conditions` ignored next to `vartests`, trailing logical operators, spawns wrongly placed in `add`
184
+ 15. **Custom images** - Referenced image files exist in the scenario folder
185
+ 16. **Token placement** - Tokens and monster placements sit on a tile
186
+ 17. **Triggers** - Every trigger is one Valkyrie fires (no token triggers)
187
+ 18. **Game flow** - The game can reach an ending from its triggers; defeat condition, mythos, items and start marker set up correctly
188
+
189
+ `build_scenario` refuses to package a scenario while any rule reports an error.
177
190
 
178
191
  ## Development
179
192
 
180
193
  ```bash
181
- npm test # Run all tests (1096 tests across 36 files)
194
+ npm test # Run all tests (1067 tests across 44 files)
182
195
  npm run test:watch # Watch mode
183
196
  npm run lint # Type check
184
197
  npm run build # Compile to dist/
@@ -193,7 +206,7 @@ agents/ Scenario designer agent
193
206
  src/
194
207
  io/ INI parser/writer, localization CSV, ZIP packager
195
208
  model/ ScenarioModel, LocalizationStore, component types
196
- validation/ 12 rules + orchestrator
209
+ validation/ 15 rules + orchestrator
197
210
  rules/ Individual validation rule implementations
198
211
  tools/ MCP tool implementations
199
212
  resources/ Format documentation resources
@@ -71,7 +71,9 @@ Use these skills for detailed pattern guidance:
71
71
  - Silent events with `event1` MUST have `buttons>=1`
72
72
  - Use `randomevents=true` for random encounter pools
73
73
  - End scenarios with `operations=$end,=,1`
74
- - Include both victory and defeat paths
74
+ - Include both victory and defeat paths: victory via `trigger=Defeated<SpawnName>` or the final objective, defeat via `trigger=Eliminated`
75
+ - Wire tokens to their events with the token's own `event1` (never `trigger=<TokenName>`); give every item an explicit `starting`
76
+ - `build_scenario` refuses while `validate_scenario` reports errors: fix them rather than forcing
75
77
  - Use vartests for branching: button1=FAIL, button2=PASS
76
78
 
77
79
  ### Difficulty Balance
@@ -81,7 +83,7 @@ Use these skills for detailed pattern guidance:
81
83
  - Mythos scaling formula: `deadlyRound = 20 - #heroes`, `majorRound = deadlyRound / 2`
82
84
  - Initialize mythos variables in EventStart chain
83
85
  - Use `>=` not `==` for round checks to avoid missed triggers
84
- - Use one-shot flags (`conditions`) for events that should fire once
86
+ - Use one-shot flags in `vartests` (e.g. `VarOperation:fired,==,0` plus `operations: fired,=,1`) for events that should fire once
85
87
 
86
88
  ### Narrative Style
87
89
  - Use italics `<i>text</i>` for atmospheric descriptions
@@ -111,4 +113,4 @@ Use these skills for detailed pattern guidance:
111
113
 
112
114
  ## Available MCP Tools
113
115
 
114
- All tools from the `valkyrie-mom` MCP server are available. Use `get_map_ascii` frequently to verify spatial layout. Run `validate_scenario` after major changes. Use `search_game_content` to find valid catalog entries for tiles, monsters, and items.
116
+ All tools from the `valkyrie-mom` MCP server are available. Place tiles with `place_tile_relative`, put tokens on the spots `get_map_ascii` lists, and check the board with `render_map` (tiles hang east and south from their position, so floors have negative y). Run `validate_scenario` after major changes. Use `search_game_content` to find valid catalog entries for tiles, monsters, and items.
@@ -32,8 +32,8 @@ export class CatalogStore {
32
32
  if (entry.type === 'tile') {
33
33
  const geo = TILE_GEOMETRY[entry.id];
34
34
  if (geo) {
35
- entry.grid = geo.grid;
36
- entry.edges = geo.edges;
35
+ entry.size = `${geo.width}x${geo.height} units`;
36
+ entry.openings = geo.openings;
37
37
  entry.desc = geo.desc;
38
38
  }
39
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"catalog-store.js","sourceRoot":"","sources":["../../src/catalogs/catalog-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog-store.js","sourceRoot":"","sources":["../../src/catalogs/catalog-store.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,21 @@
1
+ export interface TileOpening {
2
+ from: number;
3
+ to: number;
4
+ /** door: a doorway about one unit wide; open: an open edge (streets, yards) */
5
+ kind: 'door' | 'open';
6
+ }
1
7
  export interface TileGeometry {
2
- grid: [number, number];
3
- edges: {
4
- N: string;
5
- E: string;
6
- S: string;
7
- W: string;
8
+ width: number;
9
+ height: number;
10
+ /** Image name in Valkyrie's import/img folder, without the .dds extension */
11
+ image: string;
12
+ /** true when the image ships with Valkyrie rather than being imported from the FFG app */
13
+ bundled?: boolean;
14
+ openings: {
15
+ N: TileOpening[];
16
+ E: TileOpening[];
17
+ S: TileOpening[];
18
+ W: TileOpening[];
8
19
  };
9
20
  desc: string;
10
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tile-geometry.d.ts","sourceRoot":"","sources":["../../../src/catalogs/data/tile-geometry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvB,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAqLtD,CAAC"}
1
+ {"version":3,"file":"tile-geometry.d.ts","sourceRoot":"","sources":["../../../src/catalogs/data/tile-geometry.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,+EAA+E;IAC/E,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,0FAA0F;IAC1F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE;QAAE,CAAC,EAAE,WAAW,EAAE,CAAC;QAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QAAC,CAAC,EAAE,WAAW,EAAE,CAAA;KAAE,CAAC;IACrF,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAqLtD,CAAC"}