@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.
- package/LICENSE +21 -0
- package/dist/__tests__/assemble.test.d.ts +2 -0
- package/dist/__tests__/assemble.test.d.ts.map +1 -0
- package/dist/__tests__/assemble.test.js +81 -0
- package/dist/__tests__/assemble.test.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/index.d.ts +9 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +202 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/server.d.ts +41 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +91 -0
- package/dist/server.js.map +1 -0
- package/dist/state/manager.d.ts +88 -0
- package/dist/state/manager.d.ts.map +1 -0
- package/dist/state/manager.js +308 -0
- package/dist/state/manager.js.map +1 -0
- package/dist/state/rules.d.ts +30 -0
- package/dist/state/rules.d.ts.map +1 -0
- package/dist/state/rules.js +61 -0
- package/dist/state/rules.js.map +1 -0
- package/dist/state/worldpacks.d.ts +43 -0
- package/dist/state/worldpacks.d.ts.map +1 -0
- package/dist/state/worldpacks.js +125 -0
- package/dist/state/worldpacks.js.map +1 -0
- package/dist/tools/augmentation/augment.d.ts +15 -0
- package/dist/tools/augmentation/augment.d.ts.map +1 -0
- package/dist/tools/augmentation/augment.js +512 -0
- package/dist/tools/augmentation/augment.js.map +1 -0
- package/dist/tools/augmentation/index.d.ts +6 -0
- package/dist/tools/augmentation/index.d.ts.map +1 -0
- package/dist/tools/augmentation/index.js +7 -0
- package/dist/tools/augmentation/index.js.map +1 -0
- package/dist/tools/characters.d.ts +26 -0
- package/dist/tools/characters.d.ts.map +1 -0
- package/dist/tools/characters.js +362 -0
- package/dist/tools/characters.js.map +1 -0
- package/dist/tools/clocks.d.ts +33 -0
- package/dist/tools/clocks.d.ts.map +1 -0
- package/dist/tools/clocks.js +438 -0
- package/dist/tools/clocks.js.map +1 -0
- package/dist/tools/combat.d.ts +38 -0
- package/dist/tools/combat.d.ts.map +1 -0
- package/dist/tools/combat.js +574 -0
- package/dist/tools/combat.js.map +1 -0
- package/dist/tools/dice.d.ts +9 -0
- package/dist/tools/dice.d.ts.map +1 -0
- package/dist/tools/dice.js +287 -0
- package/dist/tools/dice.js.map +1 -0
- package/dist/tools/encounters.d.ts +21 -0
- package/dist/tools/encounters.d.ts.map +1 -0
- package/dist/tools/encounters.js +521 -0
- package/dist/tools/encounters.js.map +1 -0
- package/dist/tools/engagement.d.ts +25 -0
- package/dist/tools/engagement.d.ts.map +1 -0
- package/dist/tools/engagement.js +491 -0
- package/dist/tools/engagement.js.map +1 -0
- package/dist/tools/expansion/archetype.d.ts +12 -0
- package/dist/tools/expansion/archetype.d.ts.map +1 -0
- package/dist/tools/expansion/archetype.js +157 -0
- package/dist/tools/expansion/archetype.js.map +1 -0
- package/dist/tools/expansion/index.d.ts +12 -0
- package/dist/tools/expansion/index.d.ts.map +1 -0
- package/dist/tools/expansion/index.js +21 -0
- package/dist/tools/expansion/index.js.map +1 -0
- package/dist/tools/expansion/location.d.ts +12 -0
- package/dist/tools/expansion/location.d.ts.map +1 -0
- package/dist/tools/expansion/location.js +149 -0
- package/dist/tools/expansion/location.js.map +1 -0
- package/dist/tools/expansion/monster.d.ts +12 -0
- package/dist/tools/expansion/monster.d.ts.map +1 -0
- package/dist/tools/expansion/monster.js +157 -0
- package/dist/tools/expansion/monster.js.map +1 -0
- package/dist/tools/expansion/npc.d.ts +12 -0
- package/dist/tools/expansion/npc.d.ts.map +1 -0
- package/dist/tools/expansion/npc.js +153 -0
- package/dist/tools/expansion/npc.js.map +1 -0
- package/dist/tools/generation/archetypes.d.ts +12 -0
- package/dist/tools/generation/archetypes.d.ts.map +1 -0
- package/dist/tools/generation/archetypes.js +129 -0
- package/dist/tools/generation/archetypes.js.map +1 -0
- package/dist/tools/generation/arcs.d.ts +13 -0
- package/dist/tools/generation/arcs.d.ts.map +1 -0
- package/dist/tools/generation/arcs.js +186 -0
- package/dist/tools/generation/arcs.js.map +1 -0
- package/dist/tools/generation/encounters.d.ts +12 -0
- package/dist/tools/generation/encounters.d.ts.map +1 -0
- package/dist/tools/generation/encounters.js +169 -0
- package/dist/tools/generation/encounters.js.map +1 -0
- package/dist/tools/generation/index.d.ts +19 -0
- package/dist/tools/generation/index.d.ts.map +1 -0
- package/dist/tools/generation/index.js +42 -0
- package/dist/tools/generation/index.js.map +1 -0
- package/dist/tools/generation/items.d.ts +12 -0
- package/dist/tools/generation/items.d.ts.map +1 -0
- package/dist/tools/generation/items.js +149 -0
- package/dist/tools/generation/items.js.map +1 -0
- package/dist/tools/generation/locations.d.ts +12 -0
- package/dist/tools/generation/locations.d.ts.map +1 -0
- package/dist/tools/generation/locations.js +131 -0
- package/dist/tools/generation/locations.js.map +1 -0
- package/dist/tools/generation/monsters.d.ts +12 -0
- package/dist/tools/generation/monsters.d.ts.map +1 -0
- package/dist/tools/generation/monsters.js +154 -0
- package/dist/tools/generation/monsters.js.map +1 -0
- package/dist/tools/generation/narrative.d.ts +12 -0
- package/dist/tools/generation/narrative.d.ts.map +1 -0
- package/dist/tools/generation/narrative.js +129 -0
- package/dist/tools/generation/narrative.js.map +1 -0
- package/dist/tools/generation/npcs.d.ts +12 -0
- package/dist/tools/generation/npcs.d.ts.map +1 -0
- package/dist/tools/generation/npcs.js +136 -0
- package/dist/tools/generation/npcs.js.map +1 -0
- package/dist/tools/generation/resume.d.ts +12 -0
- package/dist/tools/generation/resume.d.ts.map +1 -0
- package/dist/tools/generation/resume.js +288 -0
- package/dist/tools/generation/resume.js.map +1 -0
- package/dist/tools/generation/rules-prompt.d.ts +23 -0
- package/dist/tools/generation/rules-prompt.d.ts.map +1 -0
- package/dist/tools/generation/rules-prompt.js +209 -0
- package/dist/tools/generation/rules-prompt.js.map +1 -0
- package/dist/tools/generation/seed.d.ts +12 -0
- package/dist/tools/generation/seed.d.ts.map +1 -0
- package/dist/tools/generation/seed.js +171 -0
- package/dist/tools/generation/seed.js.map +1 -0
- package/dist/tools/generation/situations.d.ts +13 -0
- package/dist/tools/generation/situations.d.ts.map +1 -0
- package/dist/tools/generation/situations.js +247 -0
- package/dist/tools/generation/situations.js.map +1 -0
- package/dist/tools/gm-guidance.d.ts +13 -0
- package/dist/tools/gm-guidance.d.ts.map +1 -0
- package/dist/tools/gm-guidance.js +395 -0
- package/dist/tools/gm-guidance.js.map +1 -0
- package/dist/tools/index.d.ts +33 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +80 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/investigation.d.ts +41 -0
- package/dist/tools/investigation.d.ts.map +1 -0
- package/dist/tools/investigation.js +586 -0
- package/dist/tools/investigation.js.map +1 -0
- package/dist/tools/leads.d.ts +29 -0
- package/dist/tools/leads.d.ts.map +1 -0
- package/dist/tools/leads.js +460 -0
- package/dist/tools/leads.js.map +1 -0
- package/dist/tools/players.d.ts +30 -0
- package/dist/tools/players.d.ts.map +1 -0
- package/dist/tools/players.js +448 -0
- package/dist/tools/players.js.map +1 -0
- package/dist/tools/portable-clues.d.ts +29 -0
- package/dist/tools/portable-clues.d.ts.map +1 -0
- package/dist/tools/portable-clues.js +490 -0
- package/dist/tools/portable-clues.js.map +1 -0
- package/dist/tools/relationships.d.ts +29 -0
- package/dist/tools/relationships.d.ts.map +1 -0
- package/dist/tools/relationships.js +471 -0
- package/dist/tools/relationships.js.map +1 -0
- package/dist/tools/scene-framing.d.ts +21 -0
- package/dist/tools/scene-framing.d.ts.map +1 -0
- package/dist/tools/scene-framing.js +380 -0
- package/dist/tools/scene-framing.js.map +1 -0
- package/dist/tools/sessions.d.ts +30 -0
- package/dist/tools/sessions.d.ts.map +1 -0
- package/dist/tools/sessions.js +253 -0
- package/dist/tools/sessions.js.map +1 -0
- package/dist/tools/time.d.ts +26 -0
- package/dist/tools/time.d.ts.map +1 -0
- package/dist/tools/time.js +438 -0
- package/dist/tools/time.js.map +1 -0
- package/dist/tools/turns.d.ts +38 -0
- package/dist/tools/turns.d.ts.map +1 -0
- package/dist/tools/turns.js +560 -0
- package/dist/tools/turns.js.map +1 -0
- package/dist/tools/worldpack/assemble.d.ts +20 -0
- package/dist/tools/worldpack/assemble.d.ts.map +1 -0
- package/dist/tools/worldpack/assemble.js +237 -0
- package/dist/tools/worldpack/assemble.js.map +1 -0
- package/dist/tools/worldpack/docs-generator.d.ts +18 -0
- package/dist/tools/worldpack/docs-generator.d.ts.map +1 -0
- package/dist/tools/worldpack/docs-generator.js +264 -0
- package/dist/tools/worldpack/docs-generator.js.map +1 -0
- package/dist/tools/worldpack/export.d.ts +12 -0
- package/dist/tools/worldpack/export.d.ts.map +1 -0
- package/dist/tools/worldpack/export.js +209 -0
- package/dist/tools/worldpack/export.js.map +1 -0
- package/dist/tools/worldpack/index.d.ts +15 -0
- package/dist/tools/worldpack/index.d.ts.map +1 -0
- package/dist/tools/worldpack/index.js +30 -0
- package/dist/tools/worldpack/index.js.map +1 -0
- package/dist/tools/worldpack/lookup.d.ts +19 -0
- package/dist/tools/worldpack/lookup.d.ts.map +1 -0
- package/dist/tools/worldpack/lookup.js +320 -0
- package/dist/tools/worldpack/lookup.js.map +1 -0
- package/dist/tools/worldpack/manage.d.ts +20 -0
- package/dist/tools/worldpack/manage.d.ts.map +1 -0
- package/dist/tools/worldpack/manage.js +101 -0
- package/dist/tools/worldpack/manage.js.map +1 -0
- package/dist/tools/worldpack/save-result.d.ts +12 -0
- package/dist/tools/worldpack/save-result.d.ts.map +1 -0
- package/dist/tools/worldpack/save-result.js +222 -0
- package/dist/tools/worldpack/save-result.js.map +1 -0
- package/dist/tools/worldpack/summary.d.ts +13 -0
- package/dist/tools/worldpack/summary.d.ts.map +1 -0
- package/dist/tools/worldpack/summary.js +180 -0
- package/dist/tools/worldpack/summary.js.map +1 -0
- package/dist/tools/worldpack/validate.d.ts +12 -0
- package/dist/tools/worldpack/validate.d.ts.map +1 -0
- package/dist/tools/worldpack/validate.js +388 -0
- package/dist/tools/worldpack/validate.js.map +1 -0
- package/package.json +59 -0
|
@@ -0,0 +1,491 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Engagement Hook Generator
|
|
3
|
+
*
|
|
4
|
+
* Tools for "treasure, personal, mystery" engagement encodings.
|
|
5
|
+
* Based on Alexandrian: "Make lore stick via treasure, mystery, personal ties."
|
|
6
|
+
*/
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
import { sessionManager } from "../state/manager.js";
|
|
9
|
+
// Hook types
|
|
10
|
+
const HOOK_TYPES = ["personal", "treasure", "mystery", "threat"];
|
|
11
|
+
// Input schemas
|
|
12
|
+
const PersonalizeContentInput = z.object({
|
|
13
|
+
sessionId: z.string(),
|
|
14
|
+
content: z.string(),
|
|
15
|
+
characterId: z.string(),
|
|
16
|
+
});
|
|
17
|
+
const TreasurifyInformationInput = z.object({
|
|
18
|
+
sessionId: z.string(),
|
|
19
|
+
information: z.string(),
|
|
20
|
+
context: z.string(),
|
|
21
|
+
});
|
|
22
|
+
const MystifyContentInput = z.object({
|
|
23
|
+
sessionId: z.string(),
|
|
24
|
+
fullRevelation: z.string(),
|
|
25
|
+
fragmentCount: z.number().min(2).max(6),
|
|
26
|
+
});
|
|
27
|
+
const GenerateEngagementHooksInput = z.object({
|
|
28
|
+
sessionId: z.string(),
|
|
29
|
+
situationId: z.string().optional(),
|
|
30
|
+
locationId: z.string().optional(),
|
|
31
|
+
theme: z.string().optional(),
|
|
32
|
+
});
|
|
33
|
+
/**
|
|
34
|
+
* Analyze character for personalization hooks
|
|
35
|
+
*/
|
|
36
|
+
function analyzeCharacter(character) {
|
|
37
|
+
const themes = [];
|
|
38
|
+
const keywords = [];
|
|
39
|
+
const connections = [];
|
|
40
|
+
// Parse background for themes
|
|
41
|
+
const background = (character.background || "").toLowerCase();
|
|
42
|
+
// Common RPG themes
|
|
43
|
+
const themePatterns = [
|
|
44
|
+
[/family|parent|child|sibling|orphan/, "family"],
|
|
45
|
+
[/home|village|town|city|birthplace|homeland/, "homeland"],
|
|
46
|
+
[/mentor|teacher|master|train/, "mentorship"],
|
|
47
|
+
[/revenge|vendetta|hunt|enemy|betrayed/, "revenge"],
|
|
48
|
+
[/lost|missing|search|find|seek/, "quest"],
|
|
49
|
+
[/debt|owe|promise|oath|vow/, "obligation"],
|
|
50
|
+
[/crime|guilt|sin|secret|hide/, "guilt"],
|
|
51
|
+
[/faith|god|divine|sacred|temple/, "faith"],
|
|
52
|
+
[/wealth|gold|treasure|rich|poor/, "wealth"],
|
|
53
|
+
[/honor|duty|code|order|law/, "honor"],
|
|
54
|
+
[/magic|arcane|power|gift|curse/, "magic"],
|
|
55
|
+
[/war|battle|soldier|fought|veteran/, "warfare"],
|
|
56
|
+
[/love|heart|beloved|marry|partner/, "love"],
|
|
57
|
+
[/death|dead|grave|mourning|loss/, "death"],
|
|
58
|
+
[/guild|organization|order|brotherhood/, "faction"],
|
|
59
|
+
];
|
|
60
|
+
for (const [pattern, theme] of themePatterns) {
|
|
61
|
+
if (pattern.test(background)) {
|
|
62
|
+
themes.push(theme);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Extract proper nouns (capitalized words) as potential connections
|
|
66
|
+
const propernounPattern = /\b[A-Z][a-z]+(?:\s+[A-Z][a-z]+)*/g;
|
|
67
|
+
const matches = character.background?.match(propernounPattern) || [];
|
|
68
|
+
connections.push(...matches.filter(m => m !== character.name));
|
|
69
|
+
// Personality traits as keywords
|
|
70
|
+
if (character.personality) {
|
|
71
|
+
keywords.push(...character.personality);
|
|
72
|
+
}
|
|
73
|
+
// Flags as keywords
|
|
74
|
+
if (character.flags) {
|
|
75
|
+
keywords.push(...character.flags);
|
|
76
|
+
}
|
|
77
|
+
return { themes, keywords, connections };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* personalize_content tool
|
|
81
|
+
*/
|
|
82
|
+
export const personalizeContentTool = {
|
|
83
|
+
name: "personalize_content",
|
|
84
|
+
description: "Connect abstract information to a PC's backstory, making it personally relevant.",
|
|
85
|
+
inputSchema: {
|
|
86
|
+
type: "object",
|
|
87
|
+
properties: {
|
|
88
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
89
|
+
content: { type: "string", description: "The information or event to personalize" },
|
|
90
|
+
characterId: { type: "string", description: "PC to connect it to" },
|
|
91
|
+
},
|
|
92
|
+
required: ["sessionId", "content", "characterId"],
|
|
93
|
+
},
|
|
94
|
+
handler: async (args) => {
|
|
95
|
+
const input = PersonalizeContentInput.parse(args);
|
|
96
|
+
const session = await sessionManager.get(input.sessionId);
|
|
97
|
+
if (!session) {
|
|
98
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
99
|
+
}
|
|
100
|
+
const character = session.characters[input.characterId];
|
|
101
|
+
if (!character) {
|
|
102
|
+
throw new Error(`Character not found: ${input.characterId}`);
|
|
103
|
+
}
|
|
104
|
+
const analysis = analyzeCharacter(character);
|
|
105
|
+
const suggestions = [];
|
|
106
|
+
// Generate connections based on themes
|
|
107
|
+
if (analysis.themes.includes("family")) {
|
|
108
|
+
suggestions.push({
|
|
109
|
+
connection: "Reminds them of family or home",
|
|
110
|
+
delivery: `"Something about this reminds ${character.name} of home..."`,
|
|
111
|
+
impact: "Emotional investment, protective instinct",
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
if (analysis.themes.includes("revenge")) {
|
|
115
|
+
suggestions.push({
|
|
116
|
+
connection: "Connected to their vendetta",
|
|
117
|
+
delivery: `${character.name} recognizes a symbol or name connected to their past`,
|
|
118
|
+
impact: "Personal stakes, urgency to investigate",
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
if (analysis.themes.includes("guilt")) {
|
|
122
|
+
suggestions.push({
|
|
123
|
+
connection: "Echoes their past mistakes",
|
|
124
|
+
delivery: `This situation mirrors something ${character.name} wishes they'd done differently`,
|
|
125
|
+
impact: "Redemption opportunity, moral weight",
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
if (analysis.themes.includes("faith")) {
|
|
129
|
+
suggestions.push({
|
|
130
|
+
connection: "Religious/philosophical resonance",
|
|
131
|
+
delivery: `${character.name}'s beliefs give them unique insight into this matter`,
|
|
132
|
+
impact: "Expertise moment, faith tested or affirmed",
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
if (analysis.themes.includes("mentorship")) {
|
|
136
|
+
suggestions.push({
|
|
137
|
+
connection: "Recalls their mentor's teachings",
|
|
138
|
+
delivery: `${character.name} remembers their mentor speaking of something like this`,
|
|
139
|
+
impact: "Guidance from the past, legacy connection",
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
// Add generic suggestions if no strong matches
|
|
143
|
+
if (suggestions.length === 0) {
|
|
144
|
+
suggestions.push({
|
|
145
|
+
connection: "Expertise or past experience",
|
|
146
|
+
delivery: `${character.name} has seen something like this before in their travels`,
|
|
147
|
+
impact: "Character gets to show competence",
|
|
148
|
+
});
|
|
149
|
+
suggestions.push({
|
|
150
|
+
connection: "Personal curiosity",
|
|
151
|
+
delivery: `Something about this catches ${character.name}'s attention specifically`,
|
|
152
|
+
impact: "Player agency, character-driven investigation",
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
// Add connections to named entities if found
|
|
156
|
+
for (const namedEntity of analysis.connections.slice(0, 3)) {
|
|
157
|
+
suggestions.push({
|
|
158
|
+
connection: `Connection to ${namedEntity}`,
|
|
159
|
+
delivery: `${character.name} recognizes this is connected to ${namedEntity}`,
|
|
160
|
+
impact: "Backstory integration, world feels personal",
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
return {
|
|
164
|
+
character: {
|
|
165
|
+
name: character.name,
|
|
166
|
+
themes: analysis.themes,
|
|
167
|
+
connections: analysis.connections,
|
|
168
|
+
},
|
|
169
|
+
content: input.content,
|
|
170
|
+
suggestions: suggestions.slice(0, 5),
|
|
171
|
+
tip: "Choose the connection that resonates most with current events. Let the player discover the connection rather than telling them outright.",
|
|
172
|
+
};
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* treasurify_information tool
|
|
177
|
+
*/
|
|
178
|
+
export const treasurifyInformationTool = {
|
|
179
|
+
name: "treasurify_information",
|
|
180
|
+
description: "Package information as a valuable discovery - a physical item, document, or reward.",
|
|
181
|
+
inputSchema: {
|
|
182
|
+
type: "object",
|
|
183
|
+
properties: {
|
|
184
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
185
|
+
information: { type: "string", description: "The lore or plot point to make valuable" },
|
|
186
|
+
context: { type: "string", description: "Current situation for context" },
|
|
187
|
+
},
|
|
188
|
+
required: ["sessionId", "information", "context"],
|
|
189
|
+
},
|
|
190
|
+
handler: async (args) => {
|
|
191
|
+
const input = TreasurifyInformationInput.parse(args);
|
|
192
|
+
const session = await sessionManager.get(input.sessionId);
|
|
193
|
+
if (!session) {
|
|
194
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
195
|
+
}
|
|
196
|
+
// Get world tone for appropriate suggestions
|
|
197
|
+
const tone = (session.worldState?.worldSeed?.settings?.tone) || "neutral";
|
|
198
|
+
const toneIsDark = tone === "dark" || tone === "gritty" || tone === "horror";
|
|
199
|
+
const asItem = [];
|
|
200
|
+
const asDocument = [];
|
|
201
|
+
const asReward = [];
|
|
202
|
+
// Generate item suggestions
|
|
203
|
+
if (toneIsDark) {
|
|
204
|
+
asItem.push("A worn locket containing a portrait with this name scratched into the back", "A bloodstained token inscribed with this information", "A piece of jewelry with this secret engraved inside", "A key with markings that reveal this when examined closely");
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
asItem.push("A finely crafted pendant with this information encoded in its design", "A commemorative medallion bearing this knowledge", "An heirloom ring with this message hidden inside", "A curious compass that points toward this truth when held");
|
|
208
|
+
}
|
|
209
|
+
// Generate document suggestions
|
|
210
|
+
if (toneIsDark) {
|
|
211
|
+
asDocument.push("A torn page from a journal, the handwriting shaky with fear", "A letter never sent, hidden in a dead messenger's boot", "A confession written in blood, or something like it", "A merchant's ledger with damning entries hidden in the margins");
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
asDocument.push("An old letter from a grateful citizen", "A scholarly treatise with this insight highlighted", "A map with annotations revealing this information", "An official decree or proclamation mentioning this");
|
|
215
|
+
}
|
|
216
|
+
// Generate reward suggestions
|
|
217
|
+
asReward.push("A grateful NPC shares this as payment for help rendered", "A dying person's last words reveal this to those who stayed with them", "A merchant offers this valuable tip instead of gold", "Success at a challenge reveals this information as a natural consequence");
|
|
218
|
+
// Context-specific suggestions
|
|
219
|
+
const contextLower = input.context.toLowerCase();
|
|
220
|
+
const specificSuggestions = [];
|
|
221
|
+
if (contextLower.includes("combat") || contextLower.includes("battle")) {
|
|
222
|
+
specificSuggestions.push("Found on the body of a defeated enemy", "Revealed by a dying foe as their last words", "Discovered in the aftermath, as the party catches their breath");
|
|
223
|
+
}
|
|
224
|
+
if (contextLower.includes("tavern") || contextLower.includes("inn")) {
|
|
225
|
+
specificSuggestions.push("Overheard from a drunk patron who quickly passes out", "Left behind by a previous occupant of their room", "Slipped to them by a mysterious stranger who vanishes");
|
|
226
|
+
}
|
|
227
|
+
if (contextLower.includes("search") || contextLower.includes("investigate")) {
|
|
228
|
+
specificSuggestions.push("Hidden in a false bottom of a container", "Scratched into the underside of furniture", "Sewn into the lining of discarded clothing");
|
|
229
|
+
}
|
|
230
|
+
return {
|
|
231
|
+
information: input.information,
|
|
232
|
+
context: input.context,
|
|
233
|
+
asItem: asItem.slice(0, 3),
|
|
234
|
+
asDocument: asDocument.slice(0, 3),
|
|
235
|
+
asReward: asReward.slice(0, 3),
|
|
236
|
+
specificToContext: specificSuggestions,
|
|
237
|
+
tip: "Physical items players can keep create lasting reminders. Documents can be referenced later. Rewards feel earned.",
|
|
238
|
+
};
|
|
239
|
+
},
|
|
240
|
+
};
|
|
241
|
+
/**
|
|
242
|
+
* mystify_content tool
|
|
243
|
+
*/
|
|
244
|
+
export const mystifyContentTool = {
|
|
245
|
+
name: "mystify_content",
|
|
246
|
+
description: "Break complete information into mysterious fragments, creating revelatory discovery.",
|
|
247
|
+
inputSchema: {
|
|
248
|
+
type: "object",
|
|
249
|
+
properties: {
|
|
250
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
251
|
+
fullRevelation: { type: "string", description: "Complete information to fragment" },
|
|
252
|
+
fragmentCount: { type: "number", description: "How many pieces (2-6)" },
|
|
253
|
+
},
|
|
254
|
+
required: ["sessionId", "fullRevelation", "fragmentCount"],
|
|
255
|
+
},
|
|
256
|
+
handler: async (args) => {
|
|
257
|
+
const input = MystifyContentInput.parse(args);
|
|
258
|
+
const session = await sessionManager.get(input.sessionId);
|
|
259
|
+
if (!session) {
|
|
260
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
261
|
+
}
|
|
262
|
+
// Parse the revelation into semantic components
|
|
263
|
+
const revelation = input.fullRevelation;
|
|
264
|
+
const sentences = revelation.split(/[.!?]+/).filter(s => s.trim().length > 0);
|
|
265
|
+
// Generate fragments based on count
|
|
266
|
+
const fragments = [];
|
|
267
|
+
// Strategy: Each fragment reveals some truth but obscures others
|
|
268
|
+
const numFragments = Math.min(input.fragmentCount, Math.max(2, sentences.length));
|
|
269
|
+
// Define fragment patterns
|
|
270
|
+
const fragmentPatterns = [
|
|
271
|
+
{
|
|
272
|
+
pattern: "WHO",
|
|
273
|
+
reveals: "identity of actor",
|
|
274
|
+
hides: "motivation and method",
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
pattern: "WHAT",
|
|
278
|
+
reveals: "the action or event",
|
|
279
|
+
hides: "who did it and why",
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
pattern: "WHERE",
|
|
283
|
+
reveals: "location of importance",
|
|
284
|
+
hides: "what happens there",
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
pattern: "WHEN",
|
|
288
|
+
reveals: "timing or deadline",
|
|
289
|
+
hides: "what will happen",
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
pattern: "WHY",
|
|
293
|
+
reveals: "motivation",
|
|
294
|
+
hides: "identity and method",
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
pattern: "HOW",
|
|
298
|
+
reveals: "method or means",
|
|
299
|
+
hides: "who and why",
|
|
300
|
+
},
|
|
301
|
+
];
|
|
302
|
+
// Select patterns based on fragment count
|
|
303
|
+
const selectedPatterns = fragmentPatterns.slice(0, numFragments);
|
|
304
|
+
for (let i = 0; i < numFragments; i++) {
|
|
305
|
+
const patternInfo = selectedPatterns[i] || fragmentPatterns[i % fragmentPatterns.length];
|
|
306
|
+
fragments.push({
|
|
307
|
+
fragment: `[Fragment ${i + 1}: ${patternInfo.pattern}] - Partial truth about "${revelation.substring(0, 50)}..."`,
|
|
308
|
+
whatItReveals: patternInfo.reveals,
|
|
309
|
+
whatItHides: patternInfo.hides,
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
// Generate discovery methods for each fragment
|
|
313
|
+
const discoveryMethods = [
|
|
314
|
+
"Found on a document or letter",
|
|
315
|
+
"Overheard from an NPC conversation",
|
|
316
|
+
"Discovered through investigation",
|
|
317
|
+
"Revealed by an ally or contact",
|
|
318
|
+
"Witnessed firsthand",
|
|
319
|
+
"Extracted from an enemy",
|
|
320
|
+
].slice(0, numFragments);
|
|
321
|
+
// Suggested order based on dramatic structure
|
|
322
|
+
const suggestedOrder = Array.from({ length: numFragments }, (_, i) => i);
|
|
323
|
+
// Put "WHO" or "WHY" last for maximum reveal impact
|
|
324
|
+
const lastIndex = fragments.findIndex(f => f.whatItReveals.includes("identity") || f.whatItReveals.includes("motivation"));
|
|
325
|
+
if (lastIndex !== -1 && lastIndex !== numFragments - 1) {
|
|
326
|
+
suggestedOrder.splice(suggestedOrder.indexOf(lastIndex), 1);
|
|
327
|
+
suggestedOrder.push(lastIndex);
|
|
328
|
+
}
|
|
329
|
+
return {
|
|
330
|
+
fullRevelation: input.fullRevelation,
|
|
331
|
+
fragmentCount: numFragments,
|
|
332
|
+
fragments: fragments.map((f, i) => ({
|
|
333
|
+
index: i,
|
|
334
|
+
guidance: f.fragment,
|
|
335
|
+
reveals: f.whatItReveals,
|
|
336
|
+
obscures: f.whatItHides,
|
|
337
|
+
suggestedDiscovery: discoveryMethods[i],
|
|
338
|
+
})),
|
|
339
|
+
suggestedOrder,
|
|
340
|
+
dramaTip: "Reveal identity or motivation last for maximum impact. Let players piece it together themselves.",
|
|
341
|
+
threeClueTip: "For each critical fragment, create at least 3 ways it can be discovered.",
|
|
342
|
+
};
|
|
343
|
+
},
|
|
344
|
+
};
|
|
345
|
+
/**
|
|
346
|
+
* generate_engagement_hooks tool
|
|
347
|
+
*/
|
|
348
|
+
export const generateEngagementHooksTool = {
|
|
349
|
+
name: "generate_engagement_hooks",
|
|
350
|
+
description: "Generate personalized engagement hooks for a situation, location, or theme.",
|
|
351
|
+
inputSchema: {
|
|
352
|
+
type: "object",
|
|
353
|
+
properties: {
|
|
354
|
+
sessionId: { type: "string", description: "Session ID" },
|
|
355
|
+
situationId: { type: "string", description: "Situation to generate hooks for" },
|
|
356
|
+
locationId: { type: "string", description: "Location context" },
|
|
357
|
+
theme: { type: "string", description: "Thematic focus (optional)" },
|
|
358
|
+
},
|
|
359
|
+
required: ["sessionId"],
|
|
360
|
+
},
|
|
361
|
+
handler: async (args) => {
|
|
362
|
+
const input = GenerateEngagementHooksInput.parse(args);
|
|
363
|
+
const session = await sessionManager.get(input.sessionId);
|
|
364
|
+
if (!session) {
|
|
365
|
+
throw new Error(`Session not found: ${input.sessionId}`);
|
|
366
|
+
}
|
|
367
|
+
// Gather context
|
|
368
|
+
const characters = Object.values(session.characters);
|
|
369
|
+
const situations = session.generation?.generatedContent?.situations || [];
|
|
370
|
+
const locations = session.generation?.generatedContent?.locations || [];
|
|
371
|
+
const situation = input.situationId ? situations.find(s => s.id === input.situationId) : null;
|
|
372
|
+
const location = input.locationId ? locations.find(l => l.id === input.locationId) : null;
|
|
373
|
+
const hooks = [];
|
|
374
|
+
// Generate PERSONAL hooks for each character
|
|
375
|
+
for (const char of characters.slice(0, 3)) {
|
|
376
|
+
const analysis = analyzeCharacter(char);
|
|
377
|
+
if (analysis.themes.length > 0) {
|
|
378
|
+
const theme = analysis.themes[0];
|
|
379
|
+
hooks.push({
|
|
380
|
+
type: "personal",
|
|
381
|
+
description: `Connection to ${char.name}'s ${theme} theme`,
|
|
382
|
+
delivery: `Reference their backstory when describing the situation`,
|
|
383
|
+
forCharacter: char.name,
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
// Generate TREASURE hooks
|
|
388
|
+
hooks.push({
|
|
389
|
+
type: "treasure",
|
|
390
|
+
description: "Valuable information packaged as physical item",
|
|
391
|
+
delivery: "A letter, journal, or artifact contains crucial plot info",
|
|
392
|
+
});
|
|
393
|
+
hooks.push({
|
|
394
|
+
type: "treasure",
|
|
395
|
+
description: "Reward tied to investigation",
|
|
396
|
+
delivery: "Solving this mystery leads to both answers and material reward",
|
|
397
|
+
});
|
|
398
|
+
// Generate MYSTERY hooks
|
|
399
|
+
if (situation) {
|
|
400
|
+
hooks.push({
|
|
401
|
+
type: "mystery",
|
|
402
|
+
description: `Fragmentary clues about ${situation.name}`,
|
|
403
|
+
delivery: "Break the truth into pieces found in different locations",
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
hooks.push({
|
|
407
|
+
type: "mystery",
|
|
408
|
+
description: "Contradictory information",
|
|
409
|
+
delivery: "Two sources give conflicting accounts - which is true?",
|
|
410
|
+
});
|
|
411
|
+
hooks.push({
|
|
412
|
+
type: "mystery",
|
|
413
|
+
description: "Ominous warning without context",
|
|
414
|
+
delivery: "Someone says 'Don't trust the...' before they're interrupted",
|
|
415
|
+
});
|
|
416
|
+
// Generate THREAT hooks
|
|
417
|
+
hooks.push({
|
|
418
|
+
type: "threat",
|
|
419
|
+
description: "Immediate danger to someone they care about",
|
|
420
|
+
delivery: "An NPC ally is threatened if they don't act",
|
|
421
|
+
});
|
|
422
|
+
hooks.push({
|
|
423
|
+
type: "threat",
|
|
424
|
+
description: "Ticking clock with consequences",
|
|
425
|
+
delivery: "Something terrible happens if they don't resolve this in time",
|
|
426
|
+
});
|
|
427
|
+
// Add theme-specific hooks
|
|
428
|
+
if (input.theme) {
|
|
429
|
+
const themeLower = input.theme.toLowerCase();
|
|
430
|
+
if (themeLower.includes("corruption")) {
|
|
431
|
+
hooks.push({
|
|
432
|
+
type: "mystery",
|
|
433
|
+
description: "The corruption has a source that must be found",
|
|
434
|
+
delivery: "Track the corruption to its origin through symptoms and witnesses",
|
|
435
|
+
});
|
|
436
|
+
}
|
|
437
|
+
if (themeLower.includes("betrayal")) {
|
|
438
|
+
hooks.push({
|
|
439
|
+
type: "personal",
|
|
440
|
+
description: "An ally may not be what they seem",
|
|
441
|
+
delivery: "Small inconsistencies in behavior hint at hidden agenda",
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
if (themeLower.includes("rescue")) {
|
|
445
|
+
hooks.push({
|
|
446
|
+
type: "threat",
|
|
447
|
+
description: "The victim's condition worsens over time",
|
|
448
|
+
delivery: "Each delay has visible consequences when they finally arrive",
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
// Add location-specific hooks
|
|
453
|
+
if (location) {
|
|
454
|
+
hooks.push({
|
|
455
|
+
type: "treasure",
|
|
456
|
+
description: `Secret of ${location.name}`,
|
|
457
|
+
delivery: `Hidden cache or forgotten knowledge in this location`,
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
return {
|
|
461
|
+
context: {
|
|
462
|
+
situationId: input.situationId,
|
|
463
|
+
situationName: situation?.name,
|
|
464
|
+
locationId: input.locationId,
|
|
465
|
+
locationName: location?.name,
|
|
466
|
+
theme: input.theme,
|
|
467
|
+
partySize: characters.length,
|
|
468
|
+
},
|
|
469
|
+
hooks: hooks.slice(0, 10).map(h => ({
|
|
470
|
+
type: h.type,
|
|
471
|
+
description: h.description,
|
|
472
|
+
delivery: h.delivery,
|
|
473
|
+
forCharacter: h.forCharacter,
|
|
474
|
+
})),
|
|
475
|
+
engagementPrinciples: [
|
|
476
|
+
"PERSONAL: Connect to character backstories and goals",
|
|
477
|
+
"TREASURE: Package information as physical discoveries",
|
|
478
|
+
"MYSTERY: Break truth into fragments for piecing together",
|
|
479
|
+
"THREAT: Create urgency through stakes and deadlines",
|
|
480
|
+
],
|
|
481
|
+
tip: "Mix hook types to maintain varied engagement. Personal hooks create investment, treasure makes lore tangible, mystery drives investigation, threat creates urgency.",
|
|
482
|
+
};
|
|
483
|
+
},
|
|
484
|
+
};
|
|
485
|
+
export const engagementTools = [
|
|
486
|
+
personalizeContentTool,
|
|
487
|
+
treasurifyInformationTool,
|
|
488
|
+
mystifyContentTool,
|
|
489
|
+
generateEngagementHooksTool,
|
|
490
|
+
];
|
|
491
|
+
//# sourceMappingURL=engagement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engagement.js","sourceRoot":"","sources":["../../src/tools/engagement.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Archetype Expansion Tool
|
|
3
|
+
*
|
|
4
|
+
* Expands an archetype with additional detail.
|
|
5
|
+
*/
|
|
6
|
+
import type { MCPToolEntry } from "@mythxengine/types";
|
|
7
|
+
/**
|
|
8
|
+
* expand_archetype tool
|
|
9
|
+
*/
|
|
10
|
+
export declare const expandArchetypeTool: MCPToolEntry;
|
|
11
|
+
export declare const expandArchetypeTools: MCPToolEntry[];
|
|
12
|
+
//# sourceMappingURL=archetype.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archetype.d.ts","sourceRoot":"","sources":["../../../src/tools/expansion/archetype.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAavD;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,YA2KjC,CAAC;AAEF,eAAO,MAAM,oBAAoB,gBAAwB,CAAC"}
|