@keeeeeeeks/cryptoloom-mcp-server 0.1.0 → 0.1.1
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/dist/index.js +146 -11
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,8 +1,52 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
2
3
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
4
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
5
|
import { z } from "zod";
|
|
5
6
|
const BASE_URL = process.env.CRYPTOLOOM_API_URL ?? "https://web-mu-silk.vercel.app";
|
|
7
|
+
const workIdResolutionCache = new Map();
|
|
8
|
+
const inkSessionStateCache = new Map();
|
|
9
|
+
function normalizeWorkId(input) {
|
|
10
|
+
const trimmed = input.trim();
|
|
11
|
+
try {
|
|
12
|
+
const parsed = JSON.parse(trimmed);
|
|
13
|
+
if (typeof parsed === "string" && parsed.trim().length > 0) {
|
|
14
|
+
return parsed.trim();
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
catch { }
|
|
18
|
+
if (trimmed.length >= 2 && trimmed.startsWith('"') && trimmed.endsWith('"')) {
|
|
19
|
+
const inner = trimmed.slice(1, -1).trim();
|
|
20
|
+
if (inner.length > 0)
|
|
21
|
+
return inner;
|
|
22
|
+
}
|
|
23
|
+
return trimmed;
|
|
24
|
+
}
|
|
25
|
+
async function resolvePlayableWorkId(input) {
|
|
26
|
+
const normalized = normalizeWorkId(input);
|
|
27
|
+
if (workIdResolutionCache.has(normalized)) {
|
|
28
|
+
return workIdResolutionCache.get(normalized);
|
|
29
|
+
}
|
|
30
|
+
const res = await api("/api/works");
|
|
31
|
+
if (!res.ok) {
|
|
32
|
+
workIdResolutionCache.set(normalized, normalized);
|
|
33
|
+
return normalized;
|
|
34
|
+
}
|
|
35
|
+
const data = (await res.json());
|
|
36
|
+
const works = Array.isArray(data.works) ? data.works : [];
|
|
37
|
+
const byStoryId = works.find((w) => normalizeWorkId(w.storyId ?? "") === normalized);
|
|
38
|
+
if (byStoryId?.storyId) {
|
|
39
|
+
workIdResolutionCache.set(normalized, byStoryId.storyId);
|
|
40
|
+
return byStoryId.storyId;
|
|
41
|
+
}
|
|
42
|
+
const byDbId = works.find((w) => normalizeWorkId(w.id ?? "") === normalized);
|
|
43
|
+
if (byDbId?.storyId) {
|
|
44
|
+
workIdResolutionCache.set(normalized, byDbId.storyId);
|
|
45
|
+
return byDbId.storyId;
|
|
46
|
+
}
|
|
47
|
+
workIdResolutionCache.set(normalized, normalized);
|
|
48
|
+
return normalized;
|
|
49
|
+
}
|
|
6
50
|
async function api(path, options = {}) {
|
|
7
51
|
const url = `${BASE_URL}${path}`;
|
|
8
52
|
return fetch(url, {
|
|
@@ -20,38 +64,127 @@ const server = new McpServer({
|
|
|
20
64
|
server.tool("cryptoloom_list_works", "List all playable interactive fiction works on Cryptoloom with their IDs, formats, and prices", {}, async () => {
|
|
21
65
|
const res = await api("/api/works");
|
|
22
66
|
const data = await res.json();
|
|
23
|
-
|
|
67
|
+
const works = Array.isArray(data.works)
|
|
68
|
+
? (data.works).map((work) => ({
|
|
69
|
+
...work,
|
|
70
|
+
playableWorkId: typeof work.storyId === "string" && work.storyId.length > 0
|
|
71
|
+
? work.storyId
|
|
72
|
+
: work.id,
|
|
73
|
+
}))
|
|
74
|
+
: [];
|
|
75
|
+
return {
|
|
76
|
+
content: [
|
|
77
|
+
{
|
|
78
|
+
type: "text",
|
|
79
|
+
text: JSON.stringify({
|
|
80
|
+
works,
|
|
81
|
+
usageHint: "For cryptoloom_start_game and other gameplay tools, use playableWorkId (storyId), not the database id.",
|
|
82
|
+
}, null, 2),
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
};
|
|
24
86
|
});
|
|
25
87
|
server.tool("cryptoloom_get_work", "Get details for a specific work including description, format, pricing, and remix info", { workId: z.string().describe("Work ID (e.g., 'minutes', 'the-intake', 'dead-air')") }, async ({ workId }) => {
|
|
26
|
-
const
|
|
88
|
+
const normalizedWorkId = normalizeWorkId(workId);
|
|
89
|
+
const res = await api(`/api/works/${encodeURIComponent(normalizedWorkId)}`);
|
|
27
90
|
if (!res.ok)
|
|
28
91
|
return { content: [{ type: "text", text: `Error: ${res.status} — work not found` }] };
|
|
29
92
|
const data = await res.json();
|
|
30
93
|
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
31
94
|
});
|
|
32
|
-
server.tool("cryptoloom_start_game", "Start a new game session for a work. Returns the opening text and either choices (Ink) or a sessionId (Glulx parser)", { workId: z.string().describe("Work ID to play") }, async ({ workId }) => {
|
|
33
|
-
const
|
|
95
|
+
server.tool("cryptoloom_start_game", "Start a new game session for a work. Returns the opening text and either choices plus an MCP session branch handle (Ink) or a sessionId (Glulx parser)", { workId: z.string().describe("Work ID to play") }, async ({ workId }) => {
|
|
96
|
+
const resolvedWorkId = await resolvePlayableWorkId(workId);
|
|
97
|
+
const res = await api(`/api/works/${encodeURIComponent(resolvedWorkId)}/play`, {
|
|
98
|
+
method: "POST",
|
|
99
|
+
body: JSON.stringify({}),
|
|
100
|
+
});
|
|
34
101
|
if (!res.ok) {
|
|
35
102
|
const err = await res.json();
|
|
36
103
|
return { content: [{ type: "text", text: `Error: ${err.error}` }] };
|
|
37
104
|
}
|
|
38
105
|
const data = await res.json();
|
|
106
|
+
if (data.format === "ink" && typeof data.state === "string") {
|
|
107
|
+
const mcpSessionBranchId = randomUUID();
|
|
108
|
+
inkSessionStateCache.set(mcpSessionBranchId, {
|
|
109
|
+
state: data.state,
|
|
110
|
+
workId: resolvedWorkId,
|
|
111
|
+
});
|
|
112
|
+
return {
|
|
113
|
+
content: [
|
|
114
|
+
{
|
|
115
|
+
type: "text",
|
|
116
|
+
text: JSON.stringify({ ...data, mcpSessionBranchId }, null, 2),
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
};
|
|
120
|
+
}
|
|
39
121
|
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
40
122
|
});
|
|
41
|
-
server.tool("cryptoloom_make_choice", "Make a choice in an Ink (choice-based) game.
|
|
123
|
+
server.tool("cryptoloom_make_choice", "Make a choice in an Ink (choice-based) game. Prefer `mcpSessionBranchId` from cryptoloom_start_game; use raw `state` only as a stateless fallback.", {
|
|
42
124
|
workId: z.string().describe("Work ID"),
|
|
43
|
-
|
|
125
|
+
mcpSessionBranchId: z.string().optional().describe("Preferred: MCP session branch handle returned by cryptoloom_start_game for Ink games"),
|
|
126
|
+
state: z.string().optional().describe("Fallback only: serialized game state from the previous response"),
|
|
44
127
|
choiceIndex: z.number().int().min(0).describe("Index of the choice to make (0-based)"),
|
|
45
|
-
}, async ({ workId, state, choiceIndex }) => {
|
|
46
|
-
const
|
|
128
|
+
}, async ({ workId, state, mcpSessionBranchId, choiceIndex }) => {
|
|
129
|
+
const normalizedWorkId = normalizeWorkId(workId);
|
|
130
|
+
let normalizedState = typeof state === "string" ? state.trim() : "";
|
|
131
|
+
if (normalizedState.length === 0 ||
|
|
132
|
+
normalizedState === "undefined" ||
|
|
133
|
+
normalizedState === "null") {
|
|
134
|
+
if (typeof mcpSessionBranchId === "string") {
|
|
135
|
+
const cached = inkSessionStateCache.get(mcpSessionBranchId.trim());
|
|
136
|
+
if (cached) {
|
|
137
|
+
normalizedState = cached.state;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (normalizedState.length === 0 || normalizedState === "undefined" || normalizedState === "null") {
|
|
142
|
+
return {
|
|
143
|
+
content: [
|
|
144
|
+
{
|
|
145
|
+
type: "text",
|
|
146
|
+
text: "Error: Missing valid state. Prefer passing `mcpSessionBranchId` from cryptoloom_start_game for Ink games. Raw `state` is only a stateless fallback.",
|
|
147
|
+
},
|
|
148
|
+
],
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
const resolvedWorkId = await resolvePlayableWorkId(normalizedWorkId);
|
|
152
|
+
if (typeof mcpSessionBranchId === "string") {
|
|
153
|
+
const cached = inkSessionStateCache.get(mcpSessionBranchId.trim());
|
|
154
|
+
if (cached && cached.workId !== resolvedWorkId) {
|
|
155
|
+
return {
|
|
156
|
+
content: [
|
|
157
|
+
{
|
|
158
|
+
type: "text",
|
|
159
|
+
text: "Error: mcpSessionBranchId was created for a different workId.",
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
const res = await api(`/api/works/${encodeURIComponent(resolvedWorkId)}/play/choice`, {
|
|
47
166
|
method: "POST",
|
|
48
|
-
body: JSON.stringify({ state, choiceIndex }),
|
|
167
|
+
body: JSON.stringify({ state: normalizedState, choiceIndex }),
|
|
49
168
|
});
|
|
50
169
|
if (!res.ok) {
|
|
51
170
|
const err = await res.json();
|
|
52
171
|
return { content: [{ type: "text", text: `Error: ${err.error}` }] };
|
|
53
172
|
}
|
|
54
173
|
const data = await res.json();
|
|
174
|
+
if (typeof mcpSessionBranchId === "string" && typeof data.state === "string") {
|
|
175
|
+
inkSessionStateCache.set(mcpSessionBranchId.trim(), {
|
|
176
|
+
state: data.state,
|
|
177
|
+
workId: resolvedWorkId,
|
|
178
|
+
});
|
|
179
|
+
return {
|
|
180
|
+
content: [
|
|
181
|
+
{
|
|
182
|
+
type: "text",
|
|
183
|
+
text: JSON.stringify({ ...data, mcpSessionBranchId: mcpSessionBranchId.trim() }, null, 2),
|
|
184
|
+
},
|
|
185
|
+
],
|
|
186
|
+
};
|
|
187
|
+
}
|
|
55
188
|
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
56
189
|
});
|
|
57
190
|
server.tool("cryptoloom_send_command", "Send a text command to a Glulx (parser-based) game. Provide the sessionId from the start response.", {
|
|
@@ -59,7 +192,8 @@ server.tool("cryptoloom_send_command", "Send a text command to a Glulx (parser-b
|
|
|
59
192
|
sessionId: z.string().describe("Session ID from the start_game response"),
|
|
60
193
|
command: z.string().max(256).describe("Parser command (e.g., 'look', 'go north', 'take key')"),
|
|
61
194
|
}, async ({ workId, sessionId, command }) => {
|
|
62
|
-
const
|
|
195
|
+
const resolvedWorkId = await resolvePlayableWorkId(workId);
|
|
196
|
+
const res = await api(`/api/works/${encodeURIComponent(resolvedWorkId)}/play/command`, {
|
|
63
197
|
method: "POST",
|
|
64
198
|
body: JSON.stringify({ sessionId, command }),
|
|
65
199
|
});
|
|
@@ -71,7 +205,8 @@ server.tool("cryptoloom_send_command", "Send a text command to a Glulx (parser-b
|
|
|
71
205
|
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
|
|
72
206
|
});
|
|
73
207
|
server.tool("cryptoloom_get_remix_contract", "Get the remix contract for a work — required variables, forbidden spoilers, and split configuration", { workId: z.string().describe("Work ID") }, async ({ workId }) => {
|
|
74
|
-
const
|
|
208
|
+
const resolvedWorkId = await resolvePlayableWorkId(workId);
|
|
209
|
+
const res = await api(`/api/works/${encodeURIComponent(resolvedWorkId)}/remix`, { method: "POST" });
|
|
75
210
|
if (!res.ok) {
|
|
76
211
|
const err = await res.json();
|
|
77
212
|
return { content: [{ type: "text", text: `Error: ${err.error}` }] };
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,gCAAgC,CAAC;AAEpF,KAAK,UAAU,GAAG,CAAC,IAAY,EAAE,UAAuB,EAAE;IACxD,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC;IACjC,OAAO,KAAK,CAAC,GAAG,EAAE;QAChB,GAAG,OAAO;QACV,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,GAAG,OAAO,CAAC,OAAO;SACnB;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,+FAA+F,EAC/F,EAAE,EACF,KAAK,IAAI,EAAE;IACT,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,gCAAgC,CAAC;AAEpF,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAkB,CAAC;AACxD,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAA6C,CAAC;AAElF,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3D,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IAEV,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IACrC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAID,KAAK,UAAU,qBAAqB,CAAC,KAAa;IAChD,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,OAAO,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC;IAChD,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,qBAAqB,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAClD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA6B,CAAC;IAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC;IACrF,IAAI,SAAS,EAAE,OAAO,EAAE,CAAC;QACvB,qBAAqB,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QACzD,OAAO,SAAS,CAAC,OAAO,CAAC;IAC3B,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC;IAC7E,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,qBAAqB,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,qBAAqB,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAClD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,IAAY,EAAE,UAAuB,EAAE;IACxD,MAAM,GAAG,GAAG,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC;IACjC,OAAO,KAAK,CAAC,GAAG,EAAE;QAChB,GAAG,OAAO;QACV,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,GAAG,OAAO,CAAC,OAAO;SACnB;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,+FAA+F,EAC/F,EAAE,EACF,KAAK,IAAI,EAAE;IACT,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAE9B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAE,IAA8B,CAAC,KAAK,CAAC;QAChE,CAAC,CAAC,CAAE,IAAkD,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzE,GAAG,IAAI;YACP,cAAc,EACZ,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;gBACzD,CAAC,CAAC,IAAI,CAAC,OAAO;gBACd,CAAC,CAAC,IAAI,CAAC,EAAE;SACd,CAAC,CAAC;QACL,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,KAAK;oBACL,SAAS,EACP,wGAAwG;iBAC3G,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,wFAAwF,EACxF,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC,EAAE,EACtF,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IACnB,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,cAAc,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC5E,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,CAAC,MAAM,mBAAmB,EAAE,CAAC,EAAE,CAAC;IACnG,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9E,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,wJAAwJ,EACxJ,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,EAClD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IACnB,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,cAAc,kBAAkB,CAAC,cAAc,CAAC,OAAO,EAAE;QAC7E,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;KACzB,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;IACtE,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAE9B,IAAK,IAA4C,CAAC,MAAM,KAAK,KAAK,IAAI,OAAQ,IAA2B,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC7H,MAAM,kBAAkB,GAAG,UAAU,EAAE,CAAC;QACxC,oBAAoB,CAAC,GAAG,CAAC,kBAAkB,EAAE;YAC3C,KAAK,EAAG,IAA0B,CAAC,KAAK;YACxC,MAAM,EAAE,cAAc;SACvB,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC/D;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9E,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,oJAAoJ,EACpJ;IACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;IACtC,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sFAAsF,CAAC;IAC1I,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;IACxG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACvF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,EAAE,EAAE;IAC3D,MAAM,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEjD,IAAI,eAAe,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,IACE,eAAe,CAAC,MAAM,KAAK,CAAC;QAC5B,eAAe,KAAK,WAAW;QAC/B,eAAe,KAAK,MAAM,EAC1B,CAAC;QACD,IAAI,OAAO,kBAAkB,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;YACnE,IAAI,MAAM,EAAE,CAAC;gBACX,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,eAAe,KAAK,WAAW,IAAI,eAAe,KAAK,MAAM,EAAE,CAAC;QAClG,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,qJAAqJ;iBAC5J;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;IAErE,IAAI,OAAO,kBAAkB,KAAK,QAAQ,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;QACnE,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;YAC/C,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,+DAA+D;qBACtE;iBACF;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,cAAc,kBAAkB,CAAC,cAAc,CAAC,cAAc,EAAE;QACpF,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;KAC9D,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;IACtE,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAE9B,IAAI,OAAO,kBAAkB,KAAK,QAAQ,IAAI,OAAQ,IAA2B,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrG,oBAAoB,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,EAAE,EAAE;YAClD,KAAK,EAAG,IAA0B,CAAC,KAAK;YACxC,MAAM,EAAE,cAAc;SACvB,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC1F;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9E,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,oGAAoG,EACpG;IACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACzE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,uDAAuD,CAAC;CAC/F,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE;IACvC,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,cAAc,kBAAkB,CAAC,cAAc,CAAC,eAAe,EAAE;QACrF,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;KAC7C,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;IACtE,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9E,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,+BAA+B,EAC/B,qGAAqG,EACrG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,EAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IACnB,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,cAAc,kBAAkB,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACpG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;IACtE,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC9E,CAAC,CACF,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;IACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@keeeeeeeks/cryptoloom-mcp-server",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "MCP server for Cryptoloom interactive fiction platform
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "MCP server for Cryptoloom interactive fiction platform \u2014 enables AI agents to discover, play, and verify text-based games",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|