@mythxengine/mcp-server 0.1.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 (214) hide show
  1. package/LICENSE +21 -0
  2. package/dist/__tests__/assemble.test.d.ts +2 -0
  3. package/dist/__tests__/assemble.test.d.ts.map +1 -0
  4. package/dist/__tests__/assemble.test.js +81 -0
  5. package/dist/__tests__/assemble.test.js.map +1 -0
  6. package/dist/index.d.ts +10 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +38 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/resources/index.d.ts +9 -0
  11. package/dist/resources/index.d.ts.map +1 -0
  12. package/dist/resources/index.js +202 -0
  13. package/dist/resources/index.js.map +1 -0
  14. package/dist/server.d.ts +41 -0
  15. package/dist/server.d.ts.map +1 -0
  16. package/dist/server.js +91 -0
  17. package/dist/server.js.map +1 -0
  18. package/dist/state/manager.d.ts +88 -0
  19. package/dist/state/manager.d.ts.map +1 -0
  20. package/dist/state/manager.js +308 -0
  21. package/dist/state/manager.js.map +1 -0
  22. package/dist/state/rules.d.ts +30 -0
  23. package/dist/state/rules.d.ts.map +1 -0
  24. package/dist/state/rules.js +61 -0
  25. package/dist/state/rules.js.map +1 -0
  26. package/dist/state/worldpacks.d.ts +43 -0
  27. package/dist/state/worldpacks.d.ts.map +1 -0
  28. package/dist/state/worldpacks.js +125 -0
  29. package/dist/state/worldpacks.js.map +1 -0
  30. package/dist/tools/augmentation/augment.d.ts +15 -0
  31. package/dist/tools/augmentation/augment.d.ts.map +1 -0
  32. package/dist/tools/augmentation/augment.js +512 -0
  33. package/dist/tools/augmentation/augment.js.map +1 -0
  34. package/dist/tools/augmentation/index.d.ts +6 -0
  35. package/dist/tools/augmentation/index.d.ts.map +1 -0
  36. package/dist/tools/augmentation/index.js +7 -0
  37. package/dist/tools/augmentation/index.js.map +1 -0
  38. package/dist/tools/characters.d.ts +26 -0
  39. package/dist/tools/characters.d.ts.map +1 -0
  40. package/dist/tools/characters.js +362 -0
  41. package/dist/tools/characters.js.map +1 -0
  42. package/dist/tools/clocks.d.ts +33 -0
  43. package/dist/tools/clocks.d.ts.map +1 -0
  44. package/dist/tools/clocks.js +438 -0
  45. package/dist/tools/clocks.js.map +1 -0
  46. package/dist/tools/combat.d.ts +38 -0
  47. package/dist/tools/combat.d.ts.map +1 -0
  48. package/dist/tools/combat.js +574 -0
  49. package/dist/tools/combat.js.map +1 -0
  50. package/dist/tools/dice.d.ts +9 -0
  51. package/dist/tools/dice.d.ts.map +1 -0
  52. package/dist/tools/dice.js +287 -0
  53. package/dist/tools/dice.js.map +1 -0
  54. package/dist/tools/encounters.d.ts +21 -0
  55. package/dist/tools/encounters.d.ts.map +1 -0
  56. package/dist/tools/encounters.js +521 -0
  57. package/dist/tools/encounters.js.map +1 -0
  58. package/dist/tools/engagement.d.ts +25 -0
  59. package/dist/tools/engagement.d.ts.map +1 -0
  60. package/dist/tools/engagement.js +491 -0
  61. package/dist/tools/engagement.js.map +1 -0
  62. package/dist/tools/expansion/archetype.d.ts +12 -0
  63. package/dist/tools/expansion/archetype.d.ts.map +1 -0
  64. package/dist/tools/expansion/archetype.js +157 -0
  65. package/dist/tools/expansion/archetype.js.map +1 -0
  66. package/dist/tools/expansion/index.d.ts +12 -0
  67. package/dist/tools/expansion/index.d.ts.map +1 -0
  68. package/dist/tools/expansion/index.js +21 -0
  69. package/dist/tools/expansion/index.js.map +1 -0
  70. package/dist/tools/expansion/location.d.ts +12 -0
  71. package/dist/tools/expansion/location.d.ts.map +1 -0
  72. package/dist/tools/expansion/location.js +149 -0
  73. package/dist/tools/expansion/location.js.map +1 -0
  74. package/dist/tools/expansion/monster.d.ts +12 -0
  75. package/dist/tools/expansion/monster.d.ts.map +1 -0
  76. package/dist/tools/expansion/monster.js +157 -0
  77. package/dist/tools/expansion/monster.js.map +1 -0
  78. package/dist/tools/expansion/npc.d.ts +12 -0
  79. package/dist/tools/expansion/npc.d.ts.map +1 -0
  80. package/dist/tools/expansion/npc.js +153 -0
  81. package/dist/tools/expansion/npc.js.map +1 -0
  82. package/dist/tools/generation/archetypes.d.ts +12 -0
  83. package/dist/tools/generation/archetypes.d.ts.map +1 -0
  84. package/dist/tools/generation/archetypes.js +129 -0
  85. package/dist/tools/generation/archetypes.js.map +1 -0
  86. package/dist/tools/generation/arcs.d.ts +13 -0
  87. package/dist/tools/generation/arcs.d.ts.map +1 -0
  88. package/dist/tools/generation/arcs.js +186 -0
  89. package/dist/tools/generation/arcs.js.map +1 -0
  90. package/dist/tools/generation/encounters.d.ts +12 -0
  91. package/dist/tools/generation/encounters.d.ts.map +1 -0
  92. package/dist/tools/generation/encounters.js +169 -0
  93. package/dist/tools/generation/encounters.js.map +1 -0
  94. package/dist/tools/generation/index.d.ts +19 -0
  95. package/dist/tools/generation/index.d.ts.map +1 -0
  96. package/dist/tools/generation/index.js +42 -0
  97. package/dist/tools/generation/index.js.map +1 -0
  98. package/dist/tools/generation/items.d.ts +12 -0
  99. package/dist/tools/generation/items.d.ts.map +1 -0
  100. package/dist/tools/generation/items.js +149 -0
  101. package/dist/tools/generation/items.js.map +1 -0
  102. package/dist/tools/generation/locations.d.ts +12 -0
  103. package/dist/tools/generation/locations.d.ts.map +1 -0
  104. package/dist/tools/generation/locations.js +131 -0
  105. package/dist/tools/generation/locations.js.map +1 -0
  106. package/dist/tools/generation/monsters.d.ts +12 -0
  107. package/dist/tools/generation/monsters.d.ts.map +1 -0
  108. package/dist/tools/generation/monsters.js +154 -0
  109. package/dist/tools/generation/monsters.js.map +1 -0
  110. package/dist/tools/generation/narrative.d.ts +12 -0
  111. package/dist/tools/generation/narrative.d.ts.map +1 -0
  112. package/dist/tools/generation/narrative.js +129 -0
  113. package/dist/tools/generation/narrative.js.map +1 -0
  114. package/dist/tools/generation/npcs.d.ts +12 -0
  115. package/dist/tools/generation/npcs.d.ts.map +1 -0
  116. package/dist/tools/generation/npcs.js +136 -0
  117. package/dist/tools/generation/npcs.js.map +1 -0
  118. package/dist/tools/generation/resume.d.ts +12 -0
  119. package/dist/tools/generation/resume.d.ts.map +1 -0
  120. package/dist/tools/generation/resume.js +288 -0
  121. package/dist/tools/generation/resume.js.map +1 -0
  122. package/dist/tools/generation/rules-prompt.d.ts +23 -0
  123. package/dist/tools/generation/rules-prompt.d.ts.map +1 -0
  124. package/dist/tools/generation/rules-prompt.js +209 -0
  125. package/dist/tools/generation/rules-prompt.js.map +1 -0
  126. package/dist/tools/generation/seed.d.ts +12 -0
  127. package/dist/tools/generation/seed.d.ts.map +1 -0
  128. package/dist/tools/generation/seed.js +171 -0
  129. package/dist/tools/generation/seed.js.map +1 -0
  130. package/dist/tools/generation/situations.d.ts +13 -0
  131. package/dist/tools/generation/situations.d.ts.map +1 -0
  132. package/dist/tools/generation/situations.js +247 -0
  133. package/dist/tools/generation/situations.js.map +1 -0
  134. package/dist/tools/gm-guidance.d.ts +13 -0
  135. package/dist/tools/gm-guidance.d.ts.map +1 -0
  136. package/dist/tools/gm-guidance.js +395 -0
  137. package/dist/tools/gm-guidance.js.map +1 -0
  138. package/dist/tools/index.d.ts +33 -0
  139. package/dist/tools/index.d.ts.map +1 -0
  140. package/dist/tools/index.js +80 -0
  141. package/dist/tools/index.js.map +1 -0
  142. package/dist/tools/investigation.d.ts +41 -0
  143. package/dist/tools/investigation.d.ts.map +1 -0
  144. package/dist/tools/investigation.js +586 -0
  145. package/dist/tools/investigation.js.map +1 -0
  146. package/dist/tools/leads.d.ts +29 -0
  147. package/dist/tools/leads.d.ts.map +1 -0
  148. package/dist/tools/leads.js +460 -0
  149. package/dist/tools/leads.js.map +1 -0
  150. package/dist/tools/players.d.ts +30 -0
  151. package/dist/tools/players.d.ts.map +1 -0
  152. package/dist/tools/players.js +448 -0
  153. package/dist/tools/players.js.map +1 -0
  154. package/dist/tools/portable-clues.d.ts +29 -0
  155. package/dist/tools/portable-clues.d.ts.map +1 -0
  156. package/dist/tools/portable-clues.js +490 -0
  157. package/dist/tools/portable-clues.js.map +1 -0
  158. package/dist/tools/relationships.d.ts +29 -0
  159. package/dist/tools/relationships.d.ts.map +1 -0
  160. package/dist/tools/relationships.js +471 -0
  161. package/dist/tools/relationships.js.map +1 -0
  162. package/dist/tools/scene-framing.d.ts +21 -0
  163. package/dist/tools/scene-framing.d.ts.map +1 -0
  164. package/dist/tools/scene-framing.js +380 -0
  165. package/dist/tools/scene-framing.js.map +1 -0
  166. package/dist/tools/sessions.d.ts +30 -0
  167. package/dist/tools/sessions.d.ts.map +1 -0
  168. package/dist/tools/sessions.js +253 -0
  169. package/dist/tools/sessions.js.map +1 -0
  170. package/dist/tools/time.d.ts +26 -0
  171. package/dist/tools/time.d.ts.map +1 -0
  172. package/dist/tools/time.js +438 -0
  173. package/dist/tools/time.js.map +1 -0
  174. package/dist/tools/turns.d.ts +38 -0
  175. package/dist/tools/turns.d.ts.map +1 -0
  176. package/dist/tools/turns.js +560 -0
  177. package/dist/tools/turns.js.map +1 -0
  178. package/dist/tools/worldpack/assemble.d.ts +20 -0
  179. package/dist/tools/worldpack/assemble.d.ts.map +1 -0
  180. package/dist/tools/worldpack/assemble.js +237 -0
  181. package/dist/tools/worldpack/assemble.js.map +1 -0
  182. package/dist/tools/worldpack/docs-generator.d.ts +18 -0
  183. package/dist/tools/worldpack/docs-generator.d.ts.map +1 -0
  184. package/dist/tools/worldpack/docs-generator.js +264 -0
  185. package/dist/tools/worldpack/docs-generator.js.map +1 -0
  186. package/dist/tools/worldpack/export.d.ts +12 -0
  187. package/dist/tools/worldpack/export.d.ts.map +1 -0
  188. package/dist/tools/worldpack/export.js +209 -0
  189. package/dist/tools/worldpack/export.js.map +1 -0
  190. package/dist/tools/worldpack/index.d.ts +15 -0
  191. package/dist/tools/worldpack/index.d.ts.map +1 -0
  192. package/dist/tools/worldpack/index.js +30 -0
  193. package/dist/tools/worldpack/index.js.map +1 -0
  194. package/dist/tools/worldpack/lookup.d.ts +19 -0
  195. package/dist/tools/worldpack/lookup.d.ts.map +1 -0
  196. package/dist/tools/worldpack/lookup.js +320 -0
  197. package/dist/tools/worldpack/lookup.js.map +1 -0
  198. package/dist/tools/worldpack/manage.d.ts +20 -0
  199. package/dist/tools/worldpack/manage.d.ts.map +1 -0
  200. package/dist/tools/worldpack/manage.js +101 -0
  201. package/dist/tools/worldpack/manage.js.map +1 -0
  202. package/dist/tools/worldpack/save-result.d.ts +12 -0
  203. package/dist/tools/worldpack/save-result.d.ts.map +1 -0
  204. package/dist/tools/worldpack/save-result.js +222 -0
  205. package/dist/tools/worldpack/save-result.js.map +1 -0
  206. package/dist/tools/worldpack/summary.d.ts +13 -0
  207. package/dist/tools/worldpack/summary.d.ts.map +1 -0
  208. package/dist/tools/worldpack/summary.js +180 -0
  209. package/dist/tools/worldpack/summary.js.map +1 -0
  210. package/dist/tools/worldpack/validate.d.ts +12 -0
  211. package/dist/tools/worldpack/validate.d.ts.map +1 -0
  212. package/dist/tools/worldpack/validate.js +388 -0
  213. package/dist/tools/worldpack/validate.js.map +1 -0
  214. package/package.json +59 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Proto Labs AI
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=assemble.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assemble.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/assemble.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,81 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { mergeById } from "../tools/worldpack/assemble.js";
3
+ describe("mergeById", () => {
4
+ it("returns base items when no expansions", () => {
5
+ const base = [
6
+ { id: "a", name: "Alpha" },
7
+ { id: "b", name: "Beta" },
8
+ ];
9
+ const result = mergeById(base, []);
10
+ expect(result).toEqual(base);
11
+ });
12
+ it("adds new items from expansions", () => {
13
+ const base = [{ id: "a", name: "Alpha" }];
14
+ const expanded = [{ id: "b", name: "Beta" }];
15
+ const result = mergeById(base, expanded);
16
+ expect(result).toHaveLength(2);
17
+ expect(result.find((i) => i.id === "b")).toEqual({ id: "b", name: "Beta" });
18
+ });
19
+ it("deep merges matching items by ID", () => {
20
+ const base = [
21
+ { id: "x", name: "Original", value: 1, nested: { a: 10, b: 20 } },
22
+ ];
23
+ const expanded = [
24
+ { id: "x", value: 99, nested: { b: 200 } },
25
+ ];
26
+ const result = mergeById(base, expanded);
27
+ expect(result[0]).toEqual({
28
+ id: "x",
29
+ name: "Original", // preserved
30
+ value: 99, // overwritten
31
+ nested: { a: 10, b: 200 }, // deep merged
32
+ });
33
+ });
34
+ it("does not mutate original arrays", () => {
35
+ const base = [{ id: "a", name: "Original", nested: { a: 1 } }];
36
+ const expanded = [{ id: "a", nested: { b: 2 } }];
37
+ const baseCopy = JSON.parse(JSON.stringify(base));
38
+ mergeById(base, expanded);
39
+ expect(base).toEqual(baseCopy);
40
+ });
41
+ it("handles complex archetype-like expansion", () => {
42
+ const base = [
43
+ {
44
+ id: "fighter",
45
+ name: "Fighter",
46
+ features: ["Attack", "Defend"],
47
+ stats: { hp: 12, armor: 2 },
48
+ },
49
+ ];
50
+ const expanded = [
51
+ {
52
+ id: "fighter",
53
+ name: "Fighter",
54
+ features: ["Attack", "Defend"],
55
+ stats: { hp: 12, armor: 2 },
56
+ skills: ["Cleave", "Shield Bash"],
57
+ },
58
+ ];
59
+ const result = mergeById(base, expanded);
60
+ const fighter = result[0];
61
+ expect(fighter.name).toBe("Fighter");
62
+ expect(fighter.features).toEqual(["Attack", "Defend"]);
63
+ expect(fighter.stats).toEqual({ hp: 12, armor: 2 });
64
+ expect(fighter.skills).toEqual(["Cleave", "Shield Bash"]);
65
+ });
66
+ it("preserves order with base items first", () => {
67
+ const base = [
68
+ { id: "a", value: 1 },
69
+ { id: "b", value: 2 },
70
+ ];
71
+ const expanded = [
72
+ { id: "c", value: 3 },
73
+ { id: "a", value: 100 },
74
+ ];
75
+ const result = mergeById(base, expanded);
76
+ const ids = result.map((i) => i.id);
77
+ expect(ids).toEqual(["a", "b", "c"]);
78
+ expect(result[0].value).toBe(100); // merged value
79
+ });
80
+ });
81
+ //# sourceMappingURL=assemble.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assemble.test.js","sourceRoot":"","sources":["../../src/__tests__/assemble.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * RPG MCP Server
4
+ *
5
+ * A Model Context Protocol server for tabletop RPG game mechanics.
6
+ * Provides tools for dice rolling, character management, combat tracking,
7
+ * and session persistence.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}
package/dist/index.js ADDED
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * RPG MCP Server
4
+ *
5
+ * A Model Context Protocol server for tabletop RPG game mechanics.
6
+ * Provides tools for dice rolling, character management, combat tracking,
7
+ * and session persistence.
8
+ */
9
+ import { createMCPServer, startMCPServer } from "./server.js";
10
+ import { createToolRegistry } from "./tools/index.js";
11
+ import { createResourceHandler } from "./resources/index.js";
12
+ const SERVER_NAME = "rpg-mcp";
13
+ const SERVER_VERSION = "0.1.0";
14
+ async function main() {
15
+ // Create tool registry
16
+ const tools = createToolRegistry();
17
+ // Create resource handler
18
+ const resources = createResourceHandler();
19
+ // Create server
20
+ const server = createMCPServer({
21
+ name: SERVER_NAME,
22
+ version: SERVER_VERSION,
23
+ }, {
24
+ tools,
25
+ resources,
26
+ onError: (error, toolName) => ({
27
+ message: `Error in ${toolName}: ${error.message}`,
28
+ isError: true,
29
+ }),
30
+ });
31
+ // Start server
32
+ await startMCPServer(server, SERVER_NAME);
33
+ }
34
+ main().catch((error) => {
35
+ console.error("Fatal error:", error);
36
+ process.exit(1);
37
+ });
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,WAAW,GAAG,SAAS,CAAC;AAC9B,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B,KAAK,UAAU,IAAI;IACjB,uBAAuB;IACvB,MAAM,KAAK,GAAG,kBAAkB,EAAE,CAAC;IAEnC,0BAA0B;IAC1B,MAAM,SAAS,GAAG,qBAAqB,EAAE,CAAC;IAE1C,gBAAgB;IAChB,MAAM,MAAM,GAAG,eAAe,CAC5B;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,cAAc;KACxB,EACD;QACE,KAAK;QACL,SAAS;QACT,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC7B,OAAO,EAAE,YAAY,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE;YACjD,OAAO,EAAE,IAAI;SACd,CAAC;KACH,CACF,CAAC;IAEF,eAAe;IACf,MAAM,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAC5C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP Resource handlers
3
+ */
4
+ import type { ResourceHandler } from "../server.js";
5
+ /**
6
+ * Create resource handler for session data
7
+ */
8
+ export declare function createResourceHandler(): ResourceHandler;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAiOvD"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * MCP Resource handlers
3
+ */
4
+ import { sessionManager, listSessions } from "../state/manager.js";
5
+ import { worldPackManager, listWorldPacks } from "../state/worldpacks.js";
6
+ /**
7
+ * Create resource handler for session data
8
+ */
9
+ export function createResourceHandler() {
10
+ return {
11
+ async list() {
12
+ const sessionIds = await listSessions();
13
+ const resources = [];
14
+ // Add sessions list resource
15
+ resources.push({
16
+ uri: "rpg://sessions",
17
+ name: "All Sessions",
18
+ mimeType: "application/json",
19
+ });
20
+ // Add world packs list resource
21
+ resources.push({
22
+ uri: "rpg://worlds",
23
+ name: "All World Packs",
24
+ mimeType: "application/json",
25
+ });
26
+ // Add individual world pack resources
27
+ const packIds = await listWorldPacks();
28
+ for (const packId of packIds) {
29
+ const pack = await worldPackManager.get(packId);
30
+ if (pack) {
31
+ resources.push({
32
+ uri: `rpg://worlds/${packId}`,
33
+ name: pack.meta.name,
34
+ mimeType: "application/json",
35
+ });
36
+ }
37
+ }
38
+ // Add individual session resources
39
+ for (const id of sessionIds) {
40
+ const session = await sessionManager.get(id);
41
+ if (session) {
42
+ resources.push({
43
+ uri: `rpg://session/${id}`,
44
+ name: session.metadata.name,
45
+ mimeType: "application/json",
46
+ });
47
+ // Add character resources for this session
48
+ for (const [charId, char] of Object.entries(session.characters)) {
49
+ resources.push({
50
+ uri: `rpg://session/${id}/character/${charId}`,
51
+ name: `${char.name} (${session.metadata.name})`,
52
+ mimeType: "application/json",
53
+ });
54
+ }
55
+ // Add generation resource if generation session exists
56
+ if (session.generation) {
57
+ resources.push({
58
+ uri: `rpg://generation/${id}`,
59
+ name: `Generation State (${session.metadata.name})`,
60
+ mimeType: "application/json",
61
+ });
62
+ }
63
+ }
64
+ }
65
+ return resources;
66
+ },
67
+ async read(uri) {
68
+ const url = new URL(uri);
69
+ if (url.protocol !== "rpg:") {
70
+ throw new Error(`Unknown protocol: ${url.protocol}`);
71
+ }
72
+ const path = url.pathname.replace(/^\/\//, "");
73
+ const parts = path.split("/");
74
+ // rpg://sessions
75
+ if (path === "sessions") {
76
+ const sessionIds = await listSessions();
77
+ const sessions = await Promise.all(sessionIds.map(async (id) => {
78
+ const session = await sessionManager.get(id);
79
+ return session
80
+ ? {
81
+ id: session.metadata.id,
82
+ name: session.metadata.name,
83
+ createdAt: session.metadata.createdAt,
84
+ characterCount: Object.keys(session.characters).length,
85
+ }
86
+ : null;
87
+ }));
88
+ return {
89
+ contents: [
90
+ {
91
+ uri,
92
+ mimeType: "application/json",
93
+ text: JSON.stringify({ sessions: sessions.filter(Boolean) }, null, 2),
94
+ },
95
+ ],
96
+ };
97
+ }
98
+ // rpg://session/:id
99
+ if (parts[0] === "session" && parts.length === 2) {
100
+ const sessionId = parts[1];
101
+ const session = await sessionManager.get(sessionId);
102
+ if (!session) {
103
+ throw new Error(`Session not found: ${sessionId}`);
104
+ }
105
+ return {
106
+ contents: [
107
+ {
108
+ uri,
109
+ mimeType: "application/json",
110
+ text: JSON.stringify(session, null, 2),
111
+ },
112
+ ],
113
+ };
114
+ }
115
+ // rpg://session/:id/character/:charId
116
+ if (parts[0] === "session" && parts[2] === "character" && parts.length === 4) {
117
+ const sessionId = parts[1];
118
+ const characterId = parts[3];
119
+ const session = await sessionManager.get(sessionId);
120
+ if (!session) {
121
+ throw new Error(`Session not found: ${sessionId}`);
122
+ }
123
+ const character = session.characters[characterId];
124
+ if (!character) {
125
+ throw new Error(`Character not found: ${characterId}`);
126
+ }
127
+ return {
128
+ contents: [
129
+ {
130
+ uri,
131
+ mimeType: "application/json",
132
+ text: JSON.stringify(character, null, 2),
133
+ },
134
+ ],
135
+ };
136
+ }
137
+ // rpg://generation/:sessionId
138
+ if (parts[0] === "generation" && parts.length === 2) {
139
+ const sessionId = parts[1];
140
+ const session = await sessionManager.get(sessionId);
141
+ if (!session) {
142
+ throw new Error(`Session not found: ${sessionId}`);
143
+ }
144
+ if (!session.generation) {
145
+ throw new Error(`No generation state for session: ${sessionId}`);
146
+ }
147
+ return {
148
+ contents: [
149
+ {
150
+ uri,
151
+ mimeType: "application/json",
152
+ text: JSON.stringify(session.generation, null, 2),
153
+ },
154
+ ],
155
+ };
156
+ }
157
+ // rpg://worlds
158
+ if (path === "worlds") {
159
+ const packIds = await listWorldPacks();
160
+ const packs = await Promise.all(packIds.map(async (id) => {
161
+ const pack = await worldPackManager.get(id);
162
+ return pack
163
+ ? {
164
+ id: pack.meta.id,
165
+ name: pack.meta.name,
166
+ tagline: pack.meta.tagline,
167
+ contentCounts: pack.meta.contentCounts,
168
+ }
169
+ : null;
170
+ }));
171
+ return {
172
+ contents: [
173
+ {
174
+ uri,
175
+ mimeType: "application/json",
176
+ text: JSON.stringify({ worlds: packs.filter(Boolean) }, null, 2),
177
+ },
178
+ ],
179
+ };
180
+ }
181
+ // rpg://worlds/:packId
182
+ if (parts[0] === "worlds" && parts.length === 2) {
183
+ const packId = parts[1];
184
+ const pack = await worldPackManager.get(packId);
185
+ if (!pack) {
186
+ throw new Error(`World pack not found: ${packId}`);
187
+ }
188
+ return {
189
+ contents: [
190
+ {
191
+ uri,
192
+ mimeType: "application/json",
193
+ text: JSON.stringify(pack, null, 2),
194
+ },
195
+ ],
196
+ };
197
+ }
198
+ throw new Error(`Unknown resource: ${uri}`);
199
+ },
200
+ };
201
+ }
202
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG1E;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,KAAK,CAAC,IAAI;YACR,MAAM,UAAU,GAAG,MAAM,YAAY,EAAE,CAAC;YACxC,MAAM,SAAS,GAA4D,EAAE,CAAC;YAE9E,6BAA6B;YAC7B,SAAS,CAAC,IAAI,CAAC;gBACb,GAAG,EAAE,gBAAgB;gBACrB,IAAI,EAAE,cAAc;gBACpB,QAAQ,EAAE,kBAAkB;aAC7B,CAAC,CAAC;YAEH,gCAAgC;YAChC,SAAS,CAAC,IAAI,CAAC;gBACb,GAAG,EAAE,cAAc;gBACnB,IAAI,EAAE,iBAAiB;gBACvB,QAAQ,EAAE,kBAAkB;aAC7B,CAAC,CAAC;YAEH,sCAAsC;YACtC,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;YACvC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAChD,IAAI,IAAI,EAAE,CAAC;oBACT,SAAS,CAAC,IAAI,CAAC;wBACb,GAAG,EAAE,gBAAgB,MAAM,EAAE;wBAC7B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;wBACpB,QAAQ,EAAE,kBAAkB;qBAC7B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,mCAAmC;YACnC,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;gBAC5B,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC7C,IAAI,OAAO,EAAE,CAAC;oBACZ,SAAS,CAAC,IAAI,CAAC;wBACb,GAAG,EAAE,iBAAiB,EAAE,EAAE;wBAC1B,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;wBAC3B,QAAQ,EAAE,kBAAkB;qBAC7B,CAAC,CAAC;oBAEH,2CAA2C;oBAC3C,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;wBAChE,SAAS,CAAC,IAAI,CAAC;4BACb,GAAG,EAAE,iBAAiB,EAAE,cAAc,MAAM,EAAE;4BAC9C,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC,IAAI,GAAG;4BAC/C,QAAQ,EAAE,kBAAkB;yBAC7B,CAAC,CAAC;oBACL,CAAC;oBAED,uDAAuD;oBACvD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;wBACvB,SAAS,CAAC,IAAI,CAAC;4BACb,GAAG,EAAE,oBAAoB,EAAE,EAAE;4BAC7B,IAAI,EAAE,qBAAqB,OAAO,CAAC,QAAQ,CAAC,IAAI,GAAG;4BACnD,QAAQ,EAAE,kBAAkB;yBAC7B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,GAAW;YACpB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;YAEzB,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAE9B,iBAAiB;YACjB,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;gBACxB,MAAM,UAAU,GAAG,MAAM,YAAY,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;oBAC1B,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAC7C,OAAO,OAAO;wBACZ,CAAC,CAAC;4BACE,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;4BACvB,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI;4BAC3B,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS;4BACrC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM;yBACvD;wBACH,CAAC,CAAC,IAAI,CAAC;gBACX,CAAC,CAAC,CACH,CAAC;gBAEF,OAAO;oBACL,QAAQ,EAAE;wBACR;4BACE,GAAG;4BACH,QAAQ,EAAE,kBAAkB;4BAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;yBACtE;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,oBAAoB;YACpB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAEpD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;gBACrD,CAAC;gBAED,OAAO;oBACL,QAAQ,EAAE;wBACR;4BACE,GAAG;4BACH,QAAQ,EAAE,kBAAkB;4BAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;yBACvC;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,sCAAsC;YACtC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7E,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAE7B,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACpD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;gBACrD,CAAC;gBAED,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;gBAClD,IAAI,CAAC,SAAS,EAAE,CAAC;oBACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC;gBACzD,CAAC;gBAED,OAAO;oBACL,QAAQ,EAAE;wBACR;4BACE,GAAG;4BACH,QAAQ,EAAE,kBAAkB;4BAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;yBACzC;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,8BAA8B;YAC9B,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,YAAY,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAEpD,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,EAAE,CAAC,CAAC;gBACrD,CAAC;gBAED,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;oBACxB,MAAM,IAAI,KAAK,CAAC,oCAAoC,SAAS,EAAE,CAAC,CAAC;gBACnE,CAAC;gBAED,OAAO;oBACL,QAAQ,EAAE;wBACR;4BACE,GAAG;4BACH,QAAQ,EAAE,kBAAkB;4BAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;yBAClD;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,eAAe;YACf,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;gBACvC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;oBACvB,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAC5C,OAAO,IAAI;wBACT,CAAC,CAAC;4BACE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;4BAChB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;4BACpB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO;4BAC1B,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa;yBACvC;wBACH,CAAC,CAAC,IAAI,CAAC;gBACX,CAAC,CAAC,CACH,CAAC;gBAEF,OAAO;oBACL,QAAQ,EAAE;wBACR;4BACE,GAAG;4BACH,QAAQ,EAAE,kBAAkB;4BAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;yBACjE;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,uBAAuB;YACvB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACxB,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAEhD,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;gBACrD,CAAC;gBAED,OAAO;oBACL,QAAQ,EAAE;wBACR;4BACE,GAAG;4BACH,QAAQ,EAAE,kBAAkB;4BAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;yBACpC;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;QAC9C,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * MCP Server factory
3
+ * Adapted from rogue-borg shared-mcp-server
4
+ */
5
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
6
+ import type { MCPToolRegistry } from "@mythxengine/types";
7
+ export interface MCPServerConfig {
8
+ name: string;
9
+ version: string;
10
+ }
11
+ export interface ResourceHandler {
12
+ list: () => Promise<Array<{
13
+ uri: string;
14
+ name: string;
15
+ mimeType?: string;
16
+ }>>;
17
+ read: (uri: string) => Promise<{
18
+ contents: Array<{
19
+ uri: string;
20
+ mimeType: string;
21
+ text: string;
22
+ }>;
23
+ }>;
24
+ }
25
+ export interface MCPServerOptions {
26
+ tools: MCPToolRegistry;
27
+ resources?: ResourceHandler;
28
+ onError?: (error: Error, toolName: string) => {
29
+ message: string;
30
+ isError: boolean;
31
+ };
32
+ }
33
+ /**
34
+ * Create an MCP server with the given tools
35
+ */
36
+ export declare function createMCPServer(config: MCPServerConfig, options: MCPServerOptions): Server;
37
+ /**
38
+ * Start the MCP server with stdio transport
39
+ */
40
+ export declare function startMCPServer(server: Server, serverName: string): Promise<void>;
41
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAQnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAC7E,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,QAAQ,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CACtG;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,eAAe,CAAC;IACvB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;CACrF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAuFR;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAItF"}
package/dist/server.js ADDED
@@ -0,0 +1,91 @@
1
+ /**
2
+ * MCP Server factory
3
+ * Adapted from rogue-borg shared-mcp-server
4
+ */
5
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
6
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
7
+ import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
8
+ /**
9
+ * Create an MCP server with the given tools
10
+ */
11
+ export function createMCPServer(config, options) {
12
+ const server = new Server({
13
+ name: config.name,
14
+ version: config.version,
15
+ }, {
16
+ capabilities: {
17
+ tools: {
18
+ listChanged: false,
19
+ },
20
+ resources: options.resources ? {} : undefined,
21
+ },
22
+ });
23
+ // List tools handler
24
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
25
+ tools: Array.from(options.tools.values()).map((tool) => ({
26
+ name: tool.name,
27
+ description: tool.description,
28
+ inputSchema: tool.inputSchema,
29
+ })),
30
+ }));
31
+ // Call tool handler
32
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
33
+ const toolName = request.params.name;
34
+ const tool = options.tools.get(toolName);
35
+ if (!tool) {
36
+ throw new Error(`Unknown tool: ${toolName}`);
37
+ }
38
+ try {
39
+ const args = request.params.arguments || {};
40
+ const result = await tool.handler(args);
41
+ // If result already has content field, return as-is
42
+ if (result && typeof result === "object" && "content" in result) {
43
+ return result;
44
+ }
45
+ // Wrap result in standard MCP format
46
+ return {
47
+ content: [
48
+ {
49
+ type: "text",
50
+ text: typeof result === "string" ? result : JSON.stringify(result, null, 2),
51
+ },
52
+ ],
53
+ };
54
+ }
55
+ catch (error) {
56
+ const errorMessage = error instanceof Error ? error.message : String(error);
57
+ if (options.onError) {
58
+ const customError = options.onError(error instanceof Error ? error : new Error(String(error)), toolName);
59
+ return {
60
+ content: [{ type: "text", text: customError.message }],
61
+ isError: customError.isError,
62
+ };
63
+ }
64
+ return {
65
+ content: [{ type: "text", text: `Error: ${errorMessage}` }],
66
+ isError: true,
67
+ };
68
+ }
69
+ });
70
+ // Resource handlers (if provided)
71
+ if (options.resources) {
72
+ server.setRequestHandler(ListResourcesRequestSchema, async () => {
73
+ const resources = await options.resources.list();
74
+ return { resources };
75
+ });
76
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
77
+ const result = await options.resources.read(request.params.uri);
78
+ return result;
79
+ });
80
+ }
81
+ return server;
82
+ }
83
+ /**
84
+ * Start the MCP server with stdio transport
85
+ */
86
+ export async function startMCPServer(server, serverName) {
87
+ const transport = new StdioServerTransport();
88
+ await server.connect(transport);
89
+ console.error(`${serverName} MCP Server running on stdio`);
90
+ }
91
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * File-based session state persistence
3
+ * Adapted from rogue-borg shared-mcp-state
4
+ */
5
+ import type { SessionState, GenerationManifest, ManifestStep } from "@mythxengine/types";
6
+ /**
7
+ * Get the generation directory for a session
8
+ */
9
+ export declare function getGenerationDir(sessionId: string): string;
10
+ /**
11
+ * Ensure the generation directory exists
12
+ */
13
+ export declare function ensureGenerationDir(sessionId: string): Promise<string>;
14
+ /**
15
+ * Write a step file atomically (temp file + rename)
16
+ */
17
+ export declare function writeStepFile(sessionId: string, filename: string, data: unknown): Promise<void>;
18
+ /**
19
+ * Read a step file
20
+ */
21
+ export declare function readStepFile(sessionId: string, filename: string): Promise<unknown | null>;
22
+ /**
23
+ * Read the generation manifest with validation
24
+ */
25
+ export declare function readManifest(sessionId: string): Promise<GenerationManifest | null>;
26
+ /**
27
+ * Write the generation manifest atomically
28
+ */
29
+ export declare function writeManifest(sessionId: string, manifest: GenerationManifest): Promise<void>;
30
+ /**
31
+ * Create initial manifest for a new generation session
32
+ */
33
+ export declare function createManifest(sessionId: string, campaignSeed: string, tier: "small" | "medium" | "large", settings?: GenerationManifest["settings"], rulesConfig?: unknown): GenerationManifest;
34
+ /**
35
+ * Add a step to the manifest
36
+ */
37
+ export declare function addManifestStep(manifest: GenerationManifest, type: string, file?: string): ManifestStep;
38
+ /**
39
+ * Find a step in the manifest by type
40
+ */
41
+ export declare function findManifestStep(manifest: GenerationManifest, type: string): ManifestStep | undefined;
42
+ /**
43
+ * Update a step's status in the manifest
44
+ * @returns true if step was found and updated, false otherwise
45
+ */
46
+ export declare function updateManifestStep(manifest: GenerationManifest, type: string, updates: Partial<ManifestStep>): boolean;
47
+ /**
48
+ * List all step files in the generation directory
49
+ */
50
+ export declare function listStepFiles(sessionId: string): Promise<string[]>;
51
+ /**
52
+ * List all expansion files in the generation directory
53
+ */
54
+ export declare function listExpansionFiles(sessionId: string): Promise<string[]>;
55
+ /**
56
+ * Load a session from disk
57
+ */
58
+ export declare function loadSession(sessionId: string): Promise<SessionState | null>;
59
+ /**
60
+ * Save a session to disk
61
+ */
62
+ export declare function saveSession(state: SessionState): Promise<void>;
63
+ /**
64
+ * Get or create a session
65
+ */
66
+ export declare function getOrCreateSession(sessionId: string, name?: string): Promise<SessionState>;
67
+ /**
68
+ * Delete a session
69
+ */
70
+ export declare function deleteSession(sessionId: string): Promise<void>;
71
+ /**
72
+ * List all sessions
73
+ */
74
+ export declare function listSessions(): Promise<string[]>;
75
+ /**
76
+ * Session state manager class for convenient access
77
+ */
78
+ export declare class SessionManager {
79
+ private cache;
80
+ get(sessionId: string): Promise<SessionState | null>;
81
+ getOrCreate(sessionId: string, name?: string): Promise<SessionState>;
82
+ save(state: SessionState): Promise<void>;
83
+ delete(sessionId: string): Promise<void>;
84
+ list(): Promise<string[]>;
85
+ clearCache(): void;
86
+ }
87
+ export declare const sessionManager: SessionManager;
88
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/state/manager.ts"],"names":[],"mappings":"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"}