holonovel 2026.8.22

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.
@@ -0,0 +1,462 @@
1
+ // Parser command dispatch — REQ-196
2
+ // Resolves natural-language commands against world-model current state.
3
+ import { ROOM_DIRECTIONS, resolveThingName, resolveThingInInventory } from "./model.js";
4
+ const DIRECTION_ALIASES = {
5
+ n: "north", s: "south", e: "east", w: "west",
6
+ ne: "northeast", nw: "northwest", se: "southeast", sw: "southwest",
7
+ u: "up", d: "down",
8
+ };
9
+ export function dispatchCommand(raw, ctx) {
10
+ const trimmed = raw.trim();
11
+ const tokens = tokenize(trimmed);
12
+ if (tokens.length === 0)
13
+ return { prefix: "ERROR", code: "INVALID_INPUT", text: "No command provided.", correctiveAction: "Try: look, go <direction>, examine <thing>, take <thing>, inventory, or wait." };
14
+ const verb = tokens[0].toLowerCase();
15
+ const args = tokens.slice(1);
16
+ // Direction aliases as standalone commands
17
+ if (verb in DIRECTION_ALIASES || ROOM_DIRECTIONS.includes(verb)) {
18
+ const dir = DIRECTION_ALIASES[verb] || verb;
19
+ return handleGo(dir, ctx);
20
+ }
21
+ switch (verb) {
22
+ case "look": return handleLook(ctx);
23
+ case "go": return handleGo(args[0] || "", ctx);
24
+ case "walk":
25
+ case "move": return handleGo(args[0] || "", ctx);
26
+ case "north":
27
+ case "south":
28
+ case "east":
29
+ case "west":
30
+ case "northeast":
31
+ case "northwest":
32
+ case "southeast":
33
+ case "southwest":
34
+ case "up":
35
+ case "down":
36
+ case "in":
37
+ case "out": return handleGo(verb, ctx);
38
+ case "take":
39
+ case "get":
40
+ case "pick": {
41
+ if (args[0] === "up" || args[0] === "")
42
+ return handleGo(args[1] || "", ctx);
43
+ return handleTake(args.join(" "), ctx);
44
+ }
45
+ case "drop":
46
+ case "put": {
47
+ // "put X in/on Y" vs "drop X"
48
+ const inIdx = args.findIndex(a => a === "in" || a === "on");
49
+ if (verb === "put" && inIdx > 0) {
50
+ const thingName = args.slice(0, inIdx).join(" ");
51
+ const targetName = args.slice(inIdx + 1).join(" ");
52
+ return handlePut(thingName, targetName, ctx);
53
+ }
54
+ return handleDrop(args.join(" "), ctx);
55
+ }
56
+ case "open": return handleOpen(args.join(" "), ctx);
57
+ case "close": return handleClose(args.join(" "), ctx);
58
+ case "unlock": return handleUnlock(args.join(" "), ctx);
59
+ case "lock": return handleLock(args.join(" "), ctx);
60
+ case "inventory":
61
+ case "i": return handleInventory(ctx);
62
+ case "examine":
63
+ case "x":
64
+ case "look at":
65
+ case "search": {
66
+ return handleExamine(args.join(" "), ctx);
67
+ }
68
+ case "wait": return { prefix: "OK", text: "Time passes." };
69
+ default:
70
+ return {
71
+ prefix: "ERROR",
72
+ code: "NOT_FOUND",
73
+ text: `"${verb}" is not a recognized command.`,
74
+ correctiveAction: `Try: look, go <direction>, take <thing>, drop <thing>, open <door>, close <door>, inventory, examine <thing>, or wait.`,
75
+ };
76
+ }
77
+ }
78
+ function tokenize(input) {
79
+ const tokens = [];
80
+ let i = 0;
81
+ let current = "";
82
+ while (i < input.length) {
83
+ if (input[i] === '"') {
84
+ const end = input.indexOf('"', i + 1);
85
+ if (end === -1) {
86
+ current += input.slice(i);
87
+ i = input.length;
88
+ }
89
+ else {
90
+ tokens.push(input.slice(i + 1, end));
91
+ i = end + 1;
92
+ }
93
+ continue;
94
+ }
95
+ if (input[i] === " ") {
96
+ if (current)
97
+ tokens.push(current);
98
+ current = "";
99
+ i++;
100
+ continue;
101
+ }
102
+ current += input[i];
103
+ i++;
104
+ }
105
+ if (current)
106
+ tokens.push(current);
107
+ return tokens;
108
+ }
109
+ function getRoom(name, ctx) {
110
+ return ctx.world.rooms.get(name.toLowerCase());
111
+ }
112
+ function getRoomThings(roomName, ctx) {
113
+ const things = [];
114
+ const rl = roomName.toLowerCase();
115
+ for (const [, thing] of ctx.world.things) {
116
+ if (!thing.location)
117
+ continue;
118
+ const loc = thing.location.toLowerCase();
119
+ if (loc === rl && thing.locationType === "room") {
120
+ things.push(thing);
121
+ }
122
+ }
123
+ return things;
124
+ }
125
+ function getThingsInContainer(containerName, ctx) {
126
+ const things = [];
127
+ const cl = containerName.toLowerCase();
128
+ for (const [, thing] of ctx.world.things) {
129
+ if (thing.location?.toLowerCase() === cl && thing.locationType === "container") {
130
+ things.push(thing);
131
+ }
132
+ }
133
+ return things;
134
+ }
135
+ function getThingsOnSupporter(supporterName, ctx) {
136
+ const things = [];
137
+ const sl = supporterName.toLowerCase();
138
+ for (const [, thing] of ctx.world.things) {
139
+ if (thing.location?.toLowerCase() === sl && thing.locationType === "supporter") {
140
+ things.push(thing);
141
+ }
142
+ }
143
+ return things;
144
+ }
145
+ function getThing(name, ctx) {
146
+ return ctx.world.things.get(name.toLowerCase());
147
+ }
148
+ function getHeldThing(name, ctx) {
149
+ if (!ctx.inventory.includes(name.toLowerCase()))
150
+ return undefined;
151
+ return ctx.world.things.get(name.toLowerCase());
152
+ }
153
+ function handleLook(ctx) {
154
+ if (!ctx.currentRoom) {
155
+ return { prefix: "ERROR", code: "STATE_CONFLICT", text: "You are nowhere. The world model has not been populated.", correctiveAction: "Use an adventure module or CRUD tools to populate the world model." };
156
+ }
157
+ const room = getRoom(ctx.currentRoom, ctx);
158
+ if (!room) {
159
+ return { prefix: "ERROR", code: "NOT_FOUND", text: `Room '${ctx.currentRoom}' not found.` };
160
+ }
161
+ let text = `${room.name}\n${room.description || "There is nothing special about this place."}`;
162
+ // Visible things
163
+ const roomThings = getRoomThings(ctx.currentRoom, ctx).filter(t => t.locationType === "room");
164
+ const containerThings = getThingsInContainer(ctx.currentRoom, ctx);
165
+ const supporterThings = ctx.world.things.get(ctx.currentRoom.toLowerCase())?.kind === "supporter"
166
+ ? getThingsOnSupporter(ctx.currentRoom, ctx) : [];
167
+ const visibleThings = [...roomThings, ...containerThings, ...supporterThings];
168
+ if (visibleThings.length > 0) {
169
+ const names = visibleThings.map(t => `${t.name}${t.portable ? "" : " (fixed)"}`);
170
+ text += `\n\nYou can see: ${names.join(", ")}.`;
171
+ }
172
+ // Exits
173
+ const exitList = [];
174
+ for (const [dir, target] of room.exits) {
175
+ const door = room.doorRefs.get(dir);
176
+ if (door) {
177
+ const doorThing = getThing(door, ctx);
178
+ if (doorThing) {
179
+ const state = doorThing.open ? "open" : (doorThing.locked ? "closed, locked" : "closed");
180
+ exitList.push(`${dir} (${door} — ${state})`);
181
+ }
182
+ else {
183
+ exitList.push(`${dir}`);
184
+ }
185
+ }
186
+ else {
187
+ exitList.push(`${dir}`);
188
+ }
189
+ }
190
+ if (exitList.length > 0) {
191
+ text += `\n\nExits: ${exitList.join(", ")}.`;
192
+ }
193
+ return { prefix: "OK", text };
194
+ }
195
+ function handleGo(dir, ctx) {
196
+ if (!ctx.currentRoom) {
197
+ return { prefix: "ERROR", code: "STATE_CONFLICT", text: "You are nowhere. The world model has not been populated.", correctiveAction: "Use an adventure module or CRUD tools to populate the world model." };
198
+ }
199
+ if (!dir) {
200
+ return { prefix: "ERROR", code: "INVALID_INPUT", text: "Go where?", correctiveAction: "Try: go north, go south, etc." };
201
+ }
202
+ const direction = dir.toLowerCase();
203
+ if (!ROOM_DIRECTIONS.includes(direction)) {
204
+ return { prefix: "ERROR", code: "INVALID_INPUT", text: `'${dir}' is not a valid direction.`, correctiveAction: `Valid directions: ${ROOM_DIRECTIONS.join(", ")}.` };
205
+ }
206
+ const room = getRoom(ctx.currentRoom, ctx);
207
+ if (!room) {
208
+ return { prefix: "ERROR", code: "NOT_FOUND", text: `Room '${ctx.currentRoom}' not found.` };
209
+ }
210
+ // Check for door blocking
211
+ const doorName = room.doorRefs.get(direction);
212
+ if (doorName) {
213
+ const door = getThing(doorName, ctx);
214
+ if (door) {
215
+ if (!door.open) {
216
+ if (door.locked) {
217
+ return { prefix: "WARNING", text: `The ${door.name} is closed and locked.`, correctiveAction: `Try: unlock ${door.name} with <key>, then open ${door.name}.` };
218
+ }
219
+ return { prefix: "WARNING", text: `The ${door.name} is closed.`, correctiveAction: `Try: open ${door.name}.` };
220
+ }
221
+ }
222
+ }
223
+ // Check for exit
224
+ const target = room.exits.get(direction);
225
+ if (!target) {
226
+ return { prefix: "WARNING", text: `You can't go ${direction} from here.` };
227
+ }
228
+ const targetRoom = getRoom(target, ctx);
229
+ if (!targetRoom) {
230
+ return { prefix: "ERROR", code: "NOT_FOUND", text: `Room '${target}' not found.` };
231
+ }
232
+ // Actually move happens in the caller — the parser just resolves
233
+ return { prefix: "OK", text: `${targetRoom.name}\n${targetRoom.description || "There is nothing special about this place."}` };
234
+ }
235
+ function handleTake(target, ctx) {
236
+ if (!ctx.currentRoom) {
237
+ return { prefix: "ERROR", code: "STATE_CONFLICT", text: "The world model has not been populated.", correctiveAction: "Use an adventure module or CRUD tools to populate the world model." };
238
+ }
239
+ // REQ-200: things are reachable from the room directly, from an open
240
+ // container in the room, or from a supporter in the room.
241
+ const roomThings = getRoomThings(ctx.currentRoom, ctx);
242
+ const reachable = [...roomThings];
243
+ for (const [, thing] of ctx.world.things) {
244
+ if (!thing.location)
245
+ continue;
246
+ const parentName = thing.location;
247
+ const parent = ctx.world.things.get(parentName.toLowerCase());
248
+ if (!parent)
249
+ continue;
250
+ if (parent.location?.toLowerCase() !== ctx.currentRoom.toLowerCase())
251
+ continue;
252
+ if (thing.locationType === "supporter")
253
+ reachable.push(thing);
254
+ else if (thing.locationType === "container" && parent.openable && parent.open)
255
+ reachable.push(thing);
256
+ }
257
+ const matches = resolveThingName(target, reachable, ctx.inventory);
258
+ if (matches.length === 0) {
259
+ return { prefix: "ERROR", code: "NOT_FOUND", text: `You see no '${target}' here.` };
260
+ }
261
+ if (matches.length > 1) {
262
+ const names = matches.map(t => `'${t.name}' (${t.description || t.kind})`);
263
+ return { prefix: "ERROR", code: "AMBIGUOUS", text: `Which do you mean: ${names.join(", ")}?` };
264
+ }
265
+ const thing = matches[0];
266
+ if (!thing.portable) {
267
+ return { prefix: "ERROR", code: "RULE_VIOLATION", text: `The ${thing.name} is fixed.`, correctiveAction: "Fixed objects cannot be taken." };
268
+ }
269
+ // Check if it's inside a closed container
270
+ if (thing.locationType === "container") {
271
+ const container = getThing(thing.location || "", ctx);
272
+ if (container && !container.open && container.openable) {
273
+ return { prefix: "ERROR", code: "RULE_VIOLATION", text: `The ${thing.name} is inside the ${container.name}, which is closed.`, correctiveAction: `Try: open ${container.name} first.` };
274
+ }
275
+ }
276
+ // Move to inventory (caller updates)
277
+ return { prefix: "OK", text: `You take the ${thing.name}.` };
278
+ }
279
+ function handleDrop(target, ctx) {
280
+ if (!ctx.currentRoom) {
281
+ return { prefix: "ERROR", code: "STATE_CONFLICT", text: "The world model has not been populated." };
282
+ }
283
+ if (!target) {
284
+ return { prefix: "ERROR", code: "INVALID_INPUT", text: "Drop what?" };
285
+ }
286
+ const heldThings = [];
287
+ for (const name of ctx.inventory) {
288
+ const t = ctx.world.things.get(name);
289
+ if (t)
290
+ heldThings.push(t);
291
+ }
292
+ const matches = resolveThingInInventory(target, heldThings);
293
+ if (matches.length === 0) {
294
+ return { prefix: "ERROR", code: "NOT_FOUND", text: `You're not carrying '${target}'.` };
295
+ }
296
+ if (matches.length > 1) {
297
+ const names = matches.map(t => `'${t.name}'`);
298
+ return { prefix: "ERROR", code: "AMBIGUOUS", text: `Which do you mean: ${names.join(", ")}?` };
299
+ }
300
+ return { prefix: "OK", text: `You drop the ${matches[0].name}.` };
301
+ }
302
+ function handlePut(thingName, targetName, ctx) {
303
+ if (!ctx.currentRoom)
304
+ return { prefix: "ERROR", code: "STATE_CONFLICT", text: "The world model has not been populated." };
305
+ if (!thingName)
306
+ return { prefix: "ERROR", code: "INVALID_INPUT", text: "Put what where?" };
307
+ const heldThing = getHeldThing(thingName, ctx);
308
+ if (!heldThing && ctx.inventory.includes(thingName.toLowerCase())) {
309
+ return { prefix: "ERROR", code: "NOT_FOUND", text: `You're not carrying '${thingName}'.` };
310
+ }
311
+ const targetThing = getThing(targetName, ctx);
312
+ if (!targetThing) {
313
+ // Try room name
314
+ const room = getRoom(targetName, ctx);
315
+ if (room) {
316
+ return { prefix: "OK", text: `You put the ${thingName} in ${targetName}.` };
317
+ }
318
+ return { prefix: "ERROR", code: "NOT_FOUND", text: `You see no '${targetName}' here.` };
319
+ }
320
+ if (targetThing.kind === "container") {
321
+ if (targetThing.openable && !targetThing.open) {
322
+ return { prefix: "ERROR", code: "RULE_VIOLATION", text: `The ${targetThing.name} is closed.`, correctiveAction: `Try: open ${targetThing.name} first.` };
323
+ }
324
+ }
325
+ return { prefix: "OK", text: `You put the ${thingName} ${targetThing.kind === "supporter" ? "on" : "in"} the ${targetName}.` };
326
+ }
327
+ function handleOpen(target, ctx) {
328
+ if (!ctx.currentRoom)
329
+ return { prefix: "ERROR", code: "STATE_CONFLICT", text: "The world model has not been populated." };
330
+ const thing = getThing(target, ctx);
331
+ if (!thing)
332
+ return { prefix: "ERROR", code: "NOT_FOUND", text: `You see no '${target}' here.` };
333
+ if (!thing.openable)
334
+ return { prefix: "ERROR", code: "RULE_VIOLATION", text: `The ${thing.name} cannot be opened.` };
335
+ if (thing.open)
336
+ return { prefix: "WARNING", text: `The ${thing.name} is already open.` };
337
+ if (thing.locked)
338
+ return { prefix: "WARNING", text: `The ${thing.name} is locked.`, correctiveAction: `Try: unlock ${thing.name} with <key>.` };
339
+ return { prefix: "OK", text: `You open the ${thing.name}.` };
340
+ }
341
+ function handleClose(target, ctx) {
342
+ if (!ctx.currentRoom)
343
+ return { prefix: "ERROR", code: "STATE_CONFLICT", text: "The world model has not been populated." };
344
+ const thing = getThing(target, ctx);
345
+ if (!thing)
346
+ return { prefix: "ERROR", code: "NOT_FOUND", text: `You see no '${target}' here.` };
347
+ if (!thing.openable)
348
+ return { prefix: "ERROR", code: "RULE_VIOLATION", text: `The ${thing.name} cannot be closed.` };
349
+ if (!thing.open)
350
+ return { prefix: "WARNING", text: `The ${thing.name} is already closed.` };
351
+ return { prefix: "OK", text: `You close the ${thing.name}.` };
352
+ }
353
+ function handleUnlock(target, ctx) {
354
+ if (!ctx.currentRoom)
355
+ return { prefix: "ERROR", code: "STATE_CONFLICT", text: "The world model has not been populated." };
356
+ const thing = getThing(target, ctx);
357
+ if (!thing)
358
+ return { prefix: "ERROR", code: "NOT_FOUND", text: `You see no '${target}' here.` };
359
+ if (!thing.lockable)
360
+ return { prefix: "ERROR", code: "RULE_VIOLATION", text: `The ${thing.name} is not lockable.` };
361
+ if (!thing.locked)
362
+ return { prefix: "WARNING", text: `The ${thing.name} is already unlocked.` };
363
+ const args = target.split(" with ");
364
+ const keyName = args[1];
365
+ if (keyName && !ctx.inventory.includes(keyName.toLowerCase())) {
366
+ return { prefix: "WARNING", text: `You need ${keyName} to unlock the ${thing.name}. You're not carrying it.` };
367
+ }
368
+ return { prefix: "OK", text: `You unlock the ${thing.name}.` };
369
+ }
370
+ function handleLock(target, ctx) {
371
+ if (!ctx.currentRoom)
372
+ return { prefix: "ERROR", code: "STATE_CONFLICT", text: "The world model has not been populated." };
373
+ const thing = getThing(target, ctx);
374
+ if (!thing)
375
+ return { prefix: "ERROR", code: "NOT_FOUND", text: `You see no '${target}' here.` };
376
+ if (!thing.lockable)
377
+ return { prefix: "ERROR", code: "RULE_VIOLATION", text: `The ${thing.name} is not lockable.` };
378
+ if (thing.locked)
379
+ return { prefix: "WARNING", text: `The ${thing.name} is already locked.` };
380
+ if (thing.open)
381
+ return { prefix: "WARNING", text: `You must close the ${thing.name} before locking it.` };
382
+ const args = target.split(" with ");
383
+ const keyName = args[1];
384
+ if (keyName && !ctx.inventory.includes(keyName.toLowerCase())) {
385
+ return { prefix: "WARNING", text: `You need ${keyName} to lock the ${thing.name}. You're not carrying it.` };
386
+ }
387
+ return { prefix: "OK", text: `You lock the ${thing.name}.` };
388
+ }
389
+ function handleInventory(ctx) {
390
+ if (ctx.inventory.length === 0) {
391
+ return { prefix: "OK", text: "You are carrying nothing." };
392
+ }
393
+ const items = ctx.inventory.map(i => {
394
+ const thing = ctx.world.things.get(i);
395
+ return thing ? thing.name : i;
396
+ });
397
+ return { prefix: "OK", text: `You are carrying: ${items.join(", ")}.` };
398
+ }
399
+ function handleExamine(target, ctx) {
400
+ if (!ctx.currentRoom)
401
+ return { prefix: "ERROR", code: "STATE_CONFLICT", text: "The world model has not been populated." };
402
+ if (!target)
403
+ return { prefix: "ERROR", code: "INVALID_INPUT", text: "Examine what?" };
404
+ const thing = getThing(target, ctx);
405
+ if (thing) {
406
+ let text = thing.description || `You see nothing special about the ${thing.name}.`;
407
+ // Show container contents if open
408
+ if (thing.kind === "container" && thing.openable && thing.open) {
409
+ const contents = getThingsInContainer(thing.name, ctx);
410
+ if (contents.length > 0) {
411
+ text += `\n\nInside the ${thing.name}: ${contents.map(t => t.name).join(", ")}.`;
412
+ }
413
+ }
414
+ if (thing.kind === "supporter") {
415
+ const contents = getThingsOnSupporter(thing.name, ctx);
416
+ if (contents.length > 0) {
417
+ text += `\n\nOn the ${thing.name}: ${contents.map(t => t.name).join(", ")}.`;
418
+ }
419
+ }
420
+ return { prefix: "OK", text };
421
+ }
422
+ return { prefix: "ERROR", code: "NOT_FOUND", text: `You see no '${target}' here.` };
423
+ }
424
+ export function resolveGoMovement(command, ctx) {
425
+ const result = dispatchCommand(command, ctx);
426
+ if (result.prefix !== "OK" && result.prefix !== "WARNING") {
427
+ return { newRoom: null, result };
428
+ }
429
+ // For go commands, determine the new room
430
+ const trimmed = command.trim();
431
+ const tokens = tokenize(trimmed);
432
+ if (tokens.length === 0)
433
+ return { newRoom: null, result };
434
+ const verb = tokens[0].toLowerCase();
435
+ let dir = "";
436
+ if (verb in DIRECTION_ALIASES)
437
+ dir = DIRECTION_ALIASES[verb];
438
+ else if (ROOM_DIRECTIONS.includes(verb))
439
+ dir = verb;
440
+ else if (verb === "go" || verb === "walk" || verb === "move")
441
+ dir = tokens[1] || "";
442
+ if (!dir)
443
+ return { newRoom: null, result };
444
+ const direction = dir.toLowerCase();
445
+ if (!ROOM_DIRECTIONS.includes(direction))
446
+ return { newRoom: null, result };
447
+ if (!ctx.currentRoom)
448
+ return { newRoom: null, result };
449
+ const room = ctx.world.rooms.get(ctx.currentRoom.toLowerCase());
450
+ if (!room)
451
+ return { newRoom: null, result };
452
+ // Check for door blocking
453
+ const doorName = room.doorRefs.get(direction);
454
+ if (doorName) {
455
+ const door = ctx.world.things.get(doorName.toLowerCase());
456
+ if (door && (!door.open || door.locked))
457
+ return { newRoom: null, result };
458
+ }
459
+ const target = room.exits.get(direction);
460
+ return { newRoom: target || null, result };
461
+ }
462
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/world/parser.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "holonovel",
3
+ "version": "2026.08.22",
4
+ "description": "Holonovel MCP server — world-model base for tabletop RPG play. Provides core scaffold (state management, badge gating, macros, enrichment) and world-model layer (rooms, things, exits, parser commands, kind hierarchy). Consumed by TTRPG servers as a build-time dependency.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "holonovel": "bin/holonovel.js"
9
+ },
10
+ "mcpName": "io.github.flukeatzerocool/holonovel",
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/flukeatzerocool/holonovel.git"
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "bin"
18
+ ],
19
+ "exports": {
20
+ ".": "./dist/index.js",
21
+ "./core": "./dist/core/index.js",
22
+ "./world": "./dist/world/index.js"
23
+ },
24
+ "scripts": {
25
+ "build": "tsc -p tsconfig.build.json",
26
+ "prepublishOnly": "npm run build",
27
+ "start": "tsx src/index.ts",
28
+ "dev": "tsx src/index.ts",
29
+ "typecheck": "tsc --noEmit"
30
+ },
31
+ "keywords": [
32
+ "inform",
33
+ "world-model",
34
+ "interactive-fiction",
35
+ "mcp",
36
+ "holonovel"
37
+ ],
38
+ "author": "Holonovel",
39
+ "license": "MIT",
40
+ "dependencies": {
41
+ "@modelcontextprotocol/sdk": "^1.30.0",
42
+ "zod": "^4.4.3"
43
+ },
44
+ "devDependencies": {
45
+ "@types/node": "^26.1.2",
46
+ "tsx": "^4.23.5",
47
+ "typescript": "^7.0.2"
48
+ }
49
+ }