funifier-mcp 0.3.18 → 0.3.20
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/.cursor/rules/funifier.mdc +2 -1
- package/.github/copilot-instructions.md +2 -1
- package/AGENTS.md +2 -1
- package/CHANGELOG.md +78 -0
- package/README.md +1 -1
- package/datasource-funifier-docs/.coverage.json +4 -1
- package/datasource-funifier-docs/.search-index.json +949 -605
- package/datasource-funifier-docs/.skills-map.json +5 -0
- package/datasource-funifier-docs/.validation.json +12 -7
- package/datasource-funifier-docs/knowledge/guides/aggregates.md +13 -6
- package/datasource-funifier-docs/knowledge/guides/trigger-examples.md +6 -6
- package/datasource-funifier-docs/knowledge/guides/triggers-guide.md +74 -11
- package/datasource-funifier-docs/knowledge/index.md +2 -2
- package/datasource-funifier-docs/knowledge/modules/trigger.md +29 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +3 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/core/api-client.d.ts +2 -0
- package/dist/core/api-client.d.ts.map +1 -1
- package/dist/core/api-client.js +98 -47
- package/dist/core/api-client.js.map +1 -1
- package/dist/core/api-client.test.js +27 -0
- package/dist/core/api-client.test.js.map +1 -1
- package/dist/core/constants.d.ts +4 -0
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +8 -0
- package/dist/core/constants.js.map +1 -1
- package/dist/core/logger.d.ts +9 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +50 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/mcp/api-holder.test.d.ts +2 -0
- package/dist/mcp/api-holder.test.d.ts.map +1 -0
- package/dist/mcp/api-holder.test.js +45 -0
- package/dist/mcp/api-holder.test.js.map +1 -0
- package/dist/mcp/bundle.js +114 -111
- package/dist/mcp/check-update.d.ts +9 -0
- package/dist/mcp/check-update.d.ts.map +1 -1
- package/dist/mcp/check-update.js +35 -9
- package/dist/mcp/check-update.js.map +1 -1
- package/dist/mcp/check-update.test.js +36 -6
- package/dist/mcp/check-update.test.js.map +1 -1
- package/dist/mcp/doc-path.d.ts +11 -0
- package/dist/mcp/doc-path.d.ts.map +1 -0
- package/dist/mcp/doc-path.js +66 -0
- package/dist/mcp/doc-path.js.map +1 -0
- package/dist/mcp/doc-path.test.d.ts +2 -0
- package/dist/mcp/doc-path.test.d.ts.map +1 -0
- package/dist/mcp/doc-path.test.js +77 -0
- package/dist/mcp/doc-path.test.js.map +1 -0
- package/dist/mcp/index.js +19 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/resources/documentation.d.ts.map +1 -1
- package/dist/mcp/resources/documentation.js +7 -3
- package/dist/mcp/resources/documentation.js.map +1 -1
- package/dist/mcp/tools/_backup.d.ts.map +1 -1
- package/dist/mcp/tools/_backup.js +5 -3
- package/dist/mcp/tools/_backup.js.map +1 -1
- package/dist/mcp/tools/_char-guard.d.ts +2 -1
- package/dist/mcp/tools/_char-guard.d.ts.map +1 -1
- package/dist/mcp/tools/_char-guard.js +10 -3
- package/dist/mcp/tools/_char-guard.js.map +1 -1
- package/dist/mcp/tools/_fetch-current.d.ts +2 -1
- package/dist/mcp/tools/_fetch-current.d.ts.map +1 -1
- package/dist/mcp/tools/_fetch-current.js +2 -74
- package/dist/mcp/tools/_fetch-current.js.map +1 -1
- package/dist/mcp/tools/_registry.d.ts +183 -0
- package/dist/mcp/tools/_registry.d.ts.map +1 -0
- package/dist/mcp/tools/_registry.js +88 -0
- package/dist/mcp/tools/_registry.js.map +1 -0
- package/dist/mcp/tools/_registry.test.d.ts +2 -0
- package/dist/mcp/tools/_registry.test.d.ts.map +1 -0
- package/dist/mcp/tools/_registry.test.js +103 -0
- package/dist/mcp/tools/_registry.test.js.map +1 -0
- package/dist/mcp/tools/database.d.ts +4 -0
- package/dist/mcp/tools/database.d.ts.map +1 -1
- package/dist/mcp/tools/database.js +23 -4
- package/dist/mcp/tools/database.js.map +1 -1
- package/dist/mcp/tools/database.test.js +19 -0
- package/dist/mcp/tools/database.test.js.map +1 -1
- package/dist/mcp/tools/delete.d.ts.map +1 -1
- package/dist/mcp/tools/delete.js +3 -98
- package/dist/mcp/tools/delete.js.map +1 -1
- package/dist/mcp/tools/execute.d.ts.map +1 -1
- package/dist/mcp/tools/execute.js +36 -4
- package/dist/mcp/tools/execute.js.map +1 -1
- package/dist/mcp/tools/execute.test.d.ts +2 -0
- package/dist/mcp/tools/execute.test.d.ts.map +1 -0
- package/dist/mcp/tools/execute.test.js +87 -0
- package/dist/mcp/tools/execute.test.js.map +1 -0
- package/dist/mcp/tools/get.d.ts.map +1 -1
- package/dist/mcp/tools/get.js +4 -93
- package/dist/mcp/tools/get.js.map +1 -1
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +42 -1
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/list.d.ts.map +1 -1
- package/dist/mcp/tools/list.js +3 -91
- package/dist/mcp/tools/list.js.map +1 -1
- package/dist/mcp/tools/logs.d.ts.map +1 -1
- package/dist/mcp/tools/logs.js +5 -3
- package/dist/mcp/tools/logs.js.map +1 -1
- package/dist/mcp/tools/read-doc.d.ts.map +1 -1
- package/dist/mcp/tools/read-doc.js +10 -28
- package/dist/mcp/tools/read-doc.js.map +1 -1
- package/dist/mcp/tools/save.d.ts.map +1 -1
- package/dist/mcp/tools/save.js +4 -81
- package/dist/mcp/tools/save.js.map +1 -1
- package/package.json +3 -2
- package/skills/funifier/SKILL.md +2 -1
- package/skills/funifier/references/audit-permissions.md +8 -0
- package/skills/funifier/references/configure-security.md +6 -0
- package/skills/funifier/references/create-action.md +7 -0
- package/skills/funifier/references/create-aggregate.md +99 -79
- package/skills/funifier/references/create-audit.md +8 -0
- package/skills/funifier/references/create-challenge.md +7 -0
- package/skills/funifier/references/create-competition.md +7 -0
- package/skills/funifier/references/create-crossword.md +6 -0
- package/skills/funifier/references/create-custom-object.md +6 -0
- package/skills/funifier/references/create-custom-page.md +6 -0
- package/skills/funifier/references/create-folder.md +7 -0
- package/skills/funifier/references/create-lastmile.md +6 -0
- package/skills/funifier/references/create-leaderboard.md +6 -0
- package/skills/funifier/references/create-level.md +7 -0
- package/skills/funifier/references/create-lottery.md +7 -0
- package/skills/funifier/references/create-mystery.md +6 -0
- package/skills/funifier/references/create-notification.md +6 -0
- package/skills/funifier/references/create-point.md +7 -0
- package/skills/funifier/references/create-quiz.md +7 -0
- package/skills/funifier/references/create-scheduler.md +6 -0
- package/skills/funifier/references/create-story.md +6 -0
- package/skills/funifier/references/create-swap.md +6 -0
- package/skills/funifier/references/create-trigger.md +28 -8
- package/skills/funifier/references/create-virtual-good.md +6 -0
- package/skills/funifier/references/create-webhook.md +6 -0
- package/skills/funifier/references/create-websocket.md +6 -0
- package/skills/funifier/references/create-widget.md +6 -0
- package/skills/funifier/references/date-handling.md +6 -0
- package/skills/funifier/references/help.md +6 -0
- package/skills/funifier/references/implement-frontend.md +7 -0
- package/skills/funifier/references/import-csv.md +6 -0
- package/skills/funifier/references/manage-indexes.md +6 -0
- package/skills/funifier/references/manage-player.md +7 -0
- package/skills/funifier/references/manage-team.md +6 -0
- package/skills/funifier/references/query-aggregate.md +111 -0
- package/skills/funifier/references/upload-file.md +6 -0
package/dist/mcp/tools/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerTools = registerTools;
|
|
4
4
|
const check_update_1 = require("../check-update");
|
|
5
|
+
const logger_1 = require("../../core/logger");
|
|
5
6
|
const connect_1 = require("./connect");
|
|
6
7
|
const list_1 = require("./list");
|
|
7
8
|
const get_1 = require("./get");
|
|
@@ -38,8 +39,48 @@ function decorateWithUpdateNotice(server) {
|
|
|
38
39
|
return original(...args);
|
|
39
40
|
});
|
|
40
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Wraps every tool handler to emit one structured stderr log line per call with
|
|
44
|
+
* the tool name, duration, and outcome (ok | error | threw). This is the only
|
|
45
|
+
* observability surface for "which tool failed?" / "how slow was it?" — without
|
|
46
|
+
* it, failures are invisible because stdout is reserved for the MCP protocol.
|
|
47
|
+
*/
|
|
48
|
+
function decorateWithTiming(server) {
|
|
49
|
+
const original = server.registerTool.bind(server);
|
|
50
|
+
server.registerTool = ((...args) => {
|
|
51
|
+
const tool = typeof args[0] === "string" ? args[0] : "unknown";
|
|
52
|
+
const handler = args[args.length - 1];
|
|
53
|
+
if (typeof handler === "function") {
|
|
54
|
+
args[args.length - 1] = async (...handlerArgs) => {
|
|
55
|
+
const startedAt = Date.now();
|
|
56
|
+
try {
|
|
57
|
+
const result = await handler(...handlerArgs);
|
|
58
|
+
logger_1.logger.info("tool call", {
|
|
59
|
+
tool,
|
|
60
|
+
durationMs: Date.now() - startedAt,
|
|
61
|
+
outcome: result?.isError ? "error" : "ok",
|
|
62
|
+
});
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
logger_1.logger.error("tool threw", {
|
|
67
|
+
tool,
|
|
68
|
+
durationMs: Date.now() - startedAt,
|
|
69
|
+
outcome: "threw",
|
|
70
|
+
error: err?.message ?? String(err),
|
|
71
|
+
});
|
|
72
|
+
throw err;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return original(...args);
|
|
77
|
+
});
|
|
78
|
+
}
|
|
41
79
|
function registerTools(server, apiHolder, docsPath) {
|
|
42
|
-
//
|
|
80
|
+
// Decorators run before the tools register so their handlers get wrapped.
|
|
81
|
+
// Timing is applied first so it becomes the OUTERMOST wrapper, measuring the
|
|
82
|
+
// full handler including the update-notice decoration.
|
|
83
|
+
decorateWithTiming(server);
|
|
43
84
|
decorateWithUpdateNotice(server);
|
|
44
85
|
(0, connect_1.registerConnectTool)(server, apiHolder);
|
|
45
86
|
(0, list_1.registerListTool)(server, apiHolder);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AA4K1C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QAkEvE"}
|
package/dist/mcp/tools/list.js
CHANGED
|
@@ -3,28 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.registerListTool = registerListTool;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const _char_guard_1 = require("./_char-guard");
|
|
6
|
-
const
|
|
7
|
-
"trigger",
|
|
8
|
-
"scheduler",
|
|
9
|
-
"aggregate",
|
|
10
|
-
"websocket",
|
|
11
|
-
"widget",
|
|
12
|
-
"custom-page",
|
|
13
|
-
"public-endpoint",
|
|
14
|
-
"challenge-aggregate",
|
|
15
|
-
"auth-module",
|
|
16
|
-
"ai-knowledge",
|
|
17
|
-
"audit",
|
|
18
|
-
"action",
|
|
19
|
-
"challenge",
|
|
20
|
-
"point",
|
|
21
|
-
"level",
|
|
22
|
-
"leaderboard",
|
|
23
|
-
"quiz",
|
|
24
|
-
"virtual-good-catalog",
|
|
25
|
-
"virtual-good-item",
|
|
26
|
-
"role",
|
|
27
|
-
];
|
|
6
|
+
const _registry_1 = require("./_registry");
|
|
28
7
|
/**
|
|
29
8
|
* Returns a summary view of items: only _id, name/title, and key identifying fields.
|
|
30
9
|
* Scripts and large fields are excluded to keep token usage low.
|
|
@@ -199,7 +178,7 @@ function registerListTool(server, apiHolder) {
|
|
|
199
178
|
"Use 'limit' and 'offset' to paginate. " +
|
|
200
179
|
"Use funifier_get to retrieve full details of a specific resource.",
|
|
201
180
|
inputSchema: {
|
|
202
|
-
type: zod_1.z.enum(
|
|
181
|
+
type: zod_1.z.enum(_registry_1.PUBLIC_LIST_TYPES).describe("The resource type to list"),
|
|
203
182
|
search: zod_1.z
|
|
204
183
|
.string()
|
|
205
184
|
.optional()
|
|
@@ -222,74 +201,7 @@ function registerListTool(server, apiHolder) {
|
|
|
222
201
|
}, async ({ type, search, limit, offset }) => {
|
|
223
202
|
try {
|
|
224
203
|
const api = apiHolder.requireClient();
|
|
225
|
-
let results;
|
|
226
|
-
switch (type) {
|
|
227
|
-
case "trigger":
|
|
228
|
-
results = await api.listTriggers();
|
|
229
|
-
break;
|
|
230
|
-
case "scheduler":
|
|
231
|
-
results = await api.listSchedulers();
|
|
232
|
-
break;
|
|
233
|
-
case "aggregate":
|
|
234
|
-
results = await api.listAggregates();
|
|
235
|
-
break;
|
|
236
|
-
case "websocket":
|
|
237
|
-
results = await api.listWebsockets();
|
|
238
|
-
break;
|
|
239
|
-
case "widget":
|
|
240
|
-
results = await api.listWidgets();
|
|
241
|
-
break;
|
|
242
|
-
case "custom-page":
|
|
243
|
-
results = await api.listCustomPages();
|
|
244
|
-
break;
|
|
245
|
-
case "public-endpoint":
|
|
246
|
-
results = await api.listPublicEndpoints();
|
|
247
|
-
break;
|
|
248
|
-
case "challenge-aggregate":
|
|
249
|
-
results = await api.listChallengeAggregates();
|
|
250
|
-
break;
|
|
251
|
-
case "auth-module":
|
|
252
|
-
results = await api.listAuthModules();
|
|
253
|
-
break;
|
|
254
|
-
case "ai-knowledge":
|
|
255
|
-
results = await api.listAiKnowledge();
|
|
256
|
-
break;
|
|
257
|
-
case "audit":
|
|
258
|
-
results = await api.listAudits();
|
|
259
|
-
break;
|
|
260
|
-
case "action":
|
|
261
|
-
results = await api.listActions();
|
|
262
|
-
break;
|
|
263
|
-
case "challenge":
|
|
264
|
-
results = await api.listChallenges();
|
|
265
|
-
break;
|
|
266
|
-
case "point":
|
|
267
|
-
results = await api.listPoints();
|
|
268
|
-
break;
|
|
269
|
-
case "level":
|
|
270
|
-
results = await api.listLevels();
|
|
271
|
-
break;
|
|
272
|
-
case "leaderboard":
|
|
273
|
-
results = await api.listLeaderboards();
|
|
274
|
-
break;
|
|
275
|
-
case "quiz":
|
|
276
|
-
results = await api.listQuizzes();
|
|
277
|
-
break;
|
|
278
|
-
case "virtual-good-catalog":
|
|
279
|
-
results = await api.listVirtualGoodCatalogs();
|
|
280
|
-
break;
|
|
281
|
-
case "virtual-good-item":
|
|
282
|
-
results = await api.listVirtualGoodItems();
|
|
283
|
-
break;
|
|
284
|
-
case "role":
|
|
285
|
-
results = await api.listRoles();
|
|
286
|
-
break;
|
|
287
|
-
default:
|
|
288
|
-
return {
|
|
289
|
-
content: [{ type: "text", text: `Unknown resource type: ${type}` }],
|
|
290
|
-
isError: true,
|
|
291
|
-
};
|
|
292
|
-
}
|
|
204
|
+
let results = await (0, _registry_1.listResource)(api, type);
|
|
293
205
|
if (search) {
|
|
294
206
|
results = filterItems(results, search);
|
|
295
207
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/mcp/tools/list.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/mcp/tools/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/logs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/logs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QA4DvE"}
|
package/dist/mcp/tools/logs.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerLogsTool = registerLogsTool;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
|
+
const _char_guard_1 = require("./_char-guard");
|
|
5
6
|
function registerLogsTool(server, apiHolder) {
|
|
6
7
|
server.registerTool("funifier_logs", {
|
|
7
8
|
title: "Get Funifier Execution Logs",
|
|
@@ -40,9 +41,10 @@ function registerLogsTool(server, apiHolder) {
|
|
|
40
41
|
isError: true,
|
|
41
42
|
};
|
|
42
43
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
// Log output (`out`) is script-generated and may echo end-user data, so
|
|
45
|
+
// guard the size and mark it untrusted.
|
|
46
|
+
const entries = Array.isArray(logs) ? logs : [logs];
|
|
47
|
+
return (0, _char_guard_1.applyCharGuard)(entries, `Found ${entries.length} log entry(ies) for ${type} ${id}:`, undefined, true);
|
|
46
48
|
}
|
|
47
49
|
catch (error) {
|
|
48
50
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/mcp/tools/logs.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/mcp/tools/logs.ts"],"names":[],"mappings":";;AAKA,4CA4DC;AAjED,6BAAwB;AAGxB,+CAA+C;AAE/C,SAAgB,gBAAgB,CAAC,MAAiB,EAAE,SAAoB;IACtE,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EAAE,4MAA4M;QACzN,WAAW,EAAE;YACX,IAAI,EAAE,OAAC;iBACJ,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;iBAC9B,QAAQ,CAAC,mCAAmC,CAAC;YAChD,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;SAC3C;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;SACpB;KACF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;YACtC,IAAI,IAAS,CAAC;YAEd,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,SAAS;oBACZ,IAAI,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;oBACpC,MAAM;gBACR,KAAK,WAAW;oBACd,IAAI,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;oBACtC,MAAM;gBACR;oBACE,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,oCAAoC,IAAI,uCAAuC;6BACtF;yBACF;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;YACN,CAAC;YAED,wEAAwE;YACxE,wCAAwC;YACxC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACpD,OAAO,IAAA,4BAAc,EAAC,OAAO,EAAE,SAAS,OAAO,CAAC,MAAM,uBAAuB,IAAI,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAC/G,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,0BAA0B,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE;qBAC/D;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-doc.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/read-doc.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"read-doc.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/read-doc.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,QA8CtE"}
|
|
@@ -35,20 +35,9 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.registerReadDocTool = registerReadDocTool;
|
|
37
37
|
const fs = __importStar(require("fs"));
|
|
38
|
-
const path = __importStar(require("path"));
|
|
39
38
|
const zod_1 = require("zod");
|
|
40
|
-
|
|
41
|
-
// "modules/trigger", "funifier://docs/modules/trigger", or "knowledge/modules/trigger.md".
|
|
42
|
-
function normalizeDocPath(input) {
|
|
43
|
-
return input
|
|
44
|
-
.trim()
|
|
45
|
-
.replace(/^funifier:\/\/docs\//, "")
|
|
46
|
-
.replace(/^\/+/, "")
|
|
47
|
-
.replace(/^knowledge\//, "")
|
|
48
|
-
.replace(/\.md$/, "");
|
|
49
|
-
}
|
|
39
|
+
const doc_path_1 = require("../doc-path");
|
|
50
40
|
function registerReadDocTool(server, docsPath) {
|
|
51
|
-
const root = path.resolve(docsPath);
|
|
52
41
|
server.registerTool("funifier_read_doc", {
|
|
53
42
|
title: "Read Funifier Documentation",
|
|
54
43
|
description: "Read the full markdown of a Funifier documentation file by path. " +
|
|
@@ -66,31 +55,24 @@ function registerReadDocTool(server, docsPath) {
|
|
|
66
55
|
openWorldHint: false,
|
|
67
56
|
},
|
|
68
57
|
}, ({ path: docPath }) => {
|
|
69
|
-
const
|
|
70
|
-
if (!
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
const filePath = path.resolve(root, `${normalized}.md`);
|
|
77
|
-
if (filePath !== root && !filePath.startsWith(root + path.sep)) {
|
|
78
|
-
return {
|
|
79
|
-
content: [{ type: "text", text: `Invalid doc path: ${docPath}` }],
|
|
80
|
-
isError: true,
|
|
81
|
-
};
|
|
58
|
+
const resolved = (0, doc_path_1.resolveDocPath)(docsPath, docPath);
|
|
59
|
+
if (!resolved.ok) {
|
|
60
|
+
const text = resolved.reason === "empty"
|
|
61
|
+
? "Provide a doc path, e.g. funifier_read_doc path=modules/trigger"
|
|
62
|
+
: `Invalid doc path: ${docPath}`;
|
|
63
|
+
return { content: [{ type: "text", text }], isError: true };
|
|
82
64
|
}
|
|
83
|
-
if (!fs.existsSync(filePath)) {
|
|
65
|
+
if (!fs.existsSync(resolved.filePath)) {
|
|
84
66
|
return {
|
|
85
67
|
content: [{
|
|
86
68
|
type: "text",
|
|
87
|
-
text: `Documentation not found: ${normalized}. Use funifier_search_docs to find valid paths.`,
|
|
69
|
+
text: `Documentation not found: ${resolved.normalized}. Use funifier_search_docs to find valid paths.`,
|
|
88
70
|
}],
|
|
89
71
|
isError: true,
|
|
90
72
|
};
|
|
91
73
|
}
|
|
92
74
|
return {
|
|
93
|
-
content: [{ type: "text", text: fs.readFileSync(filePath, "utf-8") }],
|
|
75
|
+
content: [{ type: "text", text: fs.readFileSync(resolved.filePath, "utf-8") }],
|
|
94
76
|
};
|
|
95
77
|
});
|
|
96
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-doc.js","sourceRoot":"","sources":["../../../src/mcp/tools/read-doc.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"read-doc.js","sourceRoot":"","sources":["../../../src/mcp/tools/read-doc.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,kDA8CC;AAnDD,uCAAyB;AACzB,6BAAwB;AAExB,0CAA6C;AAE7C,SAAgB,mBAAmB,CAAC,MAAiB,EAAE,QAAgB;IACrE,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EACT,mEAAmE;YACnE,iEAAiE;YACjE,+FAA+F;QACjG,WAAW,EAAE;YACX,IAAI,EAAE,OAAC;iBACJ,MAAM,EAAE;iBACR,QAAQ,CAAC,8FAA8F,CAAC;SAC5G;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,MAAM,QAAQ,GAAG,IAAA,yBAAc,EAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GACR,QAAQ,CAAC,MAAM,KAAK,OAAO;gBACzB,CAAC,CAAC,iEAAiE;gBACnE,CAAC,CAAC,qBAAqB,OAAO,EAAE,CAAC;YACrC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtC,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,4BAA4B,QAAQ,CAAC,UAAU,iDAAiD;qBACvG,CAAC;gBACF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC;SAC/E,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/save.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/save.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AA4G1C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QAsEvE"}
|
package/dist/mcp/tools/save.js
CHANGED
|
@@ -38,32 +38,7 @@ const zod_1 = require("zod");
|
|
|
38
38
|
const fs = __importStar(require("fs"));
|
|
39
39
|
const _fetch_current_1 = require("./_fetch-current");
|
|
40
40
|
const _merge_1 = require("./_merge");
|
|
41
|
-
const
|
|
42
|
-
"trigger",
|
|
43
|
-
"scheduler",
|
|
44
|
-
"aggregate",
|
|
45
|
-
"websocket",
|
|
46
|
-
"widget",
|
|
47
|
-
"custom-page",
|
|
48
|
-
"public-endpoint",
|
|
49
|
-
"challenge-aggregate",
|
|
50
|
-
"auth-module",
|
|
51
|
-
"ai-knowledge",
|
|
52
|
-
"audit",
|
|
53
|
-
"action",
|
|
54
|
-
"challenge",
|
|
55
|
-
"point",
|
|
56
|
-
"level",
|
|
57
|
-
"leaderboard",
|
|
58
|
-
"quiz",
|
|
59
|
-
"virtual-good-catalog",
|
|
60
|
-
"virtual-good-item",
|
|
61
|
-
"folder",
|
|
62
|
-
"folder-content",
|
|
63
|
-
"folder-content-type",
|
|
64
|
-
"folder-log",
|
|
65
|
-
];
|
|
66
|
-
const GROOVY_TYPES = new Set(["trigger", "scheduler", "aggregate", "websocket", "public-endpoint", "auth-module"]);
|
|
41
|
+
const _registry_1 = require("./_registry");
|
|
67
42
|
const COMPANION_FIELDS = {
|
|
68
43
|
html: ".html",
|
|
69
44
|
css: ".css",
|
|
@@ -72,7 +47,7 @@ const COMPANION_FIELDS = {
|
|
|
72
47
|
};
|
|
73
48
|
function mergeCompanions(jsonPath, type, doc) {
|
|
74
49
|
const base = jsonPath.replace(/\.json$/, "");
|
|
75
|
-
const scriptExt =
|
|
50
|
+
const scriptExt = (0, _registry_1.isGroovyType)(type) ? ".script.groovy" : ".script.js";
|
|
76
51
|
const fields = { ...COMPANION_FIELDS, script: scriptExt };
|
|
77
52
|
const merged = { ...doc };
|
|
78
53
|
for (const [field, ext] of Object.entries(fields)) {
|
|
@@ -163,64 +138,12 @@ function sanitizeChallenge(data) {
|
|
|
163
138
|
}
|
|
164
139
|
return d;
|
|
165
140
|
}
|
|
166
|
-
async function dispatchSave(api, type, data) {
|
|
167
|
-
switch (type) {
|
|
168
|
-
case "trigger":
|
|
169
|
-
return await api.saveTrigger(data);
|
|
170
|
-
case "scheduler":
|
|
171
|
-
return await api.saveScheduler(data);
|
|
172
|
-
case "aggregate":
|
|
173
|
-
return await api.saveAggregate(data);
|
|
174
|
-
case "websocket":
|
|
175
|
-
return await api.saveWebsocket(data, !data._id);
|
|
176
|
-
case "widget":
|
|
177
|
-
return await api.saveWidget(data);
|
|
178
|
-
case "custom-page":
|
|
179
|
-
return await api.saveCustomPage(data);
|
|
180
|
-
case "public-endpoint":
|
|
181
|
-
return await api.savePublicEndpoint(data);
|
|
182
|
-
case "challenge-aggregate":
|
|
183
|
-
return await api.saveChallengeAggregate(data);
|
|
184
|
-
case "auth-module":
|
|
185
|
-
return await api.saveAuthModule(data, !data._id);
|
|
186
|
-
case "ai-knowledge":
|
|
187
|
-
return await api.saveAiKnowledge(data);
|
|
188
|
-
case "audit":
|
|
189
|
-
return await api.saveAudit(data);
|
|
190
|
-
case "action":
|
|
191
|
-
return await api.saveAction(data);
|
|
192
|
-
case "challenge":
|
|
193
|
-
return await api.saveChallenge(data);
|
|
194
|
-
case "point":
|
|
195
|
-
return await api.savePoint(data);
|
|
196
|
-
case "level":
|
|
197
|
-
return await api.saveLevel(data);
|
|
198
|
-
case "leaderboard":
|
|
199
|
-
return await api.saveLeaderboard(data);
|
|
200
|
-
case "quiz":
|
|
201
|
-
return await api.saveQuiz(data);
|
|
202
|
-
case "virtual-good-catalog":
|
|
203
|
-
return await api.saveVirtualGoodCatalog(data);
|
|
204
|
-
case "virtual-good-item":
|
|
205
|
-
return await api.saveVirtualGoodItem(data);
|
|
206
|
-
case "folder":
|
|
207
|
-
return await api.saveFolder(data);
|
|
208
|
-
case "folder-content":
|
|
209
|
-
return await api.saveFolderContent(data);
|
|
210
|
-
case "folder-content-type":
|
|
211
|
-
return await api.saveFolderContentType(data);
|
|
212
|
-
case "folder-log":
|
|
213
|
-
return await api.saveFolderLog(data);
|
|
214
|
-
default:
|
|
215
|
-
throw new Error(`Unknown resource type: ${type}`);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
141
|
function registerSaveTool(server, apiHolder) {
|
|
219
142
|
server.registerTool("funifier_save", {
|
|
220
143
|
title: "Save Funifier Resource",
|
|
221
144
|
description: "Create or update a Funifier resource. On update (when `_id` is present in the payload), the current resource is fetched and any fields missing from the payload are preserved — you only need to send the fields you want to change. To clear a field, send it explicitly as `null`. Array and object fields are replaced wholesale when present in the payload.",
|
|
222
145
|
inputSchema: {
|
|
223
|
-
type: zod_1.z.enum(
|
|
146
|
+
type: zod_1.z.enum(_registry_1.SAVE_TYPES).describe("The resource type"),
|
|
224
147
|
payload: zod_1.z.string().optional().describe("JSON string of the resource payload. On update, send only the fields you want to change (plus `_id`). Use `file` instead when the payload is too large to pass inline."),
|
|
225
148
|
file: zod_1.z.string().optional().describe("Path to a JSON file containing the resource payload. Use this when the payload is too large to pass inline (e.g. a file previously written by funifier_get)."),
|
|
226
149
|
},
|
|
@@ -252,7 +175,7 @@ function registerSaveTool(server, apiHolder) {
|
|
|
252
175
|
}
|
|
253
176
|
// if current is null: _id is user-defined for a new resource — create as-is
|
|
254
177
|
}
|
|
255
|
-
const result = await
|
|
178
|
+
const result = await (0, _registry_1.saveResource)(api, type, toSave);
|
|
256
179
|
// Funifier sometimes returns 200/201 with an error body
|
|
257
180
|
if (result?.status === "ERROR" || result?.status === "error" ||
|
|
258
181
|
result?.errorCode != null || result?.errorMessage != null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save.js","sourceRoot":"","sources":["../../../src/mcp/tools/save.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"save.js","sourceRoot":"","sources":["../../../src/mcp/tools/save.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "funifier-mcp",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.20",
|
|
4
4
|
"description": "Funifier AI toolkit — MCP server, API client, and Claude Code skills for the Funifier gamification platform",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
".github/copilot-instructions.md",
|
|
17
17
|
".cursor/rules/funifier.mdc",
|
|
18
18
|
"README.md",
|
|
19
|
+
"CHANGELOG.md",
|
|
19
20
|
"LICENSE"
|
|
20
21
|
],
|
|
21
22
|
"repository": {
|
|
@@ -72,4 +73,4 @@
|
|
|
72
73
|
"engines": {
|
|
73
74
|
"node": ">=18"
|
|
74
75
|
}
|
|
75
|
-
}
|
|
76
|
+
}
|
package/skills/funifier/SKILL.md
CHANGED
|
@@ -35,7 +35,8 @@ Then read a result with `funifier_read_doc path=<path>`.
|
|
|
35
35
|
|-------------|-----------|
|
|
36
36
|
| Create a Funifier trigger — guided workflow from entity/event selection to Groovy code generation | `references/create-trigger.md` |
|
|
37
37
|
| Create a Funifier scheduler — guided workflow from naming and cron expression to Groovy code generation | `references/create-scheduler.md` |
|
|
38
|
-
|
|
|
38
|
+
| Run an ad-hoc MongoDB aggregate (one-off query) on a Funifier collection via POST /v3/database/{collection}/aggregate — for reports and exploration, without saving a resource | `references/query-aggregate.md` |
|
|
39
|
+
| Create/edit a Funifier prepared aggregate — a saved pipeline with _id, $param placeholders, optional Groovy script, cache and execution via POST /v3/find/{id}; for reusable dashboards and parametrized reports | `references/create-aggregate.md` |
|
|
39
40
|
| Create, edit, or query Date fields safely via REST, funifier_database, triggers, schedulers, aggregate, and prepared aggregate; use whenever a payload or filter contains dates | `references/date-handling.md` |
|
|
40
41
|
| Create a Funifier challenge — missions with action rules and point rewards | `references/create-challenge.md` |
|
|
41
42
|
| Create a Funifier action — define trackable player behaviors with attributes | `references/create-action.md` |
|
|
@@ -87,3 +87,11 @@ Apresente os findings agrupados por severidade (`missing` primeiro). Para cada `
|
|
|
87
87
|
Para `excess`: adverta que o token pode ser necessário a consumidores fora deste manifest antes de sugerir remoção.
|
|
88
88
|
|
|
89
89
|
Para `danger`: explique o risco e sugira remoção ou restrição do scope afetado como ação separada.
|
|
90
|
+
|
|
91
|
+
## Verified References
|
|
92
|
+
|
|
93
|
+
| Claim | Status | Evidence |
|
|
94
|
+
|-------|--------|----------|
|
|
95
|
+
| SecurityFilter.doFilter evaluates (method, path) by computing verb (GET→read, POST/PUT→write, DELETE→delete) and entity_full (path after /v3/ with slash→underscore), then matching scope tokens in order: {verb}_all, exact {verb}_{entity_full}, fallback {verb}_{prefix}_all minus-1 and minus-2 trailing segments | ✓ verified | Class:src/main/java/com/funifier/rest/v3/filter/SecurityFilter.java:SecurityFilter |
|
|
96
|
+
| DatabaseRest requires the literal 'database' scope keyword on ALL /v3/database handlers including GET operations — grammar tokens such as read_all alone are insufficient; this is enforced within SecurityFilter.doFilter before requests reach DatabaseRest handlers | ✓ verified | Method:src/main/java/com/funifier/rest/v3/filter/SecurityFilter.java:SecurityFilter.doFilter#3 |
|
|
97
|
+
| Bearer tokens embed the player's role scope string at login time; role scope changes only affect sessions created after the change — existing live Bearer tokens carry the scope at their issuance time | ✓ verified | Class:src/main/java/com/funifier/rest/v3/filter/SecurityFilter.java:SecurityFilter |
|
|
@@ -112,3 +112,9 @@ funifier_permissions action=restore_backup backup_path=<path retornado por list_
|
|
|
112
112
|
O restore valida que o `serverUrl` do snapshot coincide com a conexão atual — não aplique backup de outro tenant. O próprio restore também gera um snapshot prévio, permitindo desfazer o rollback.
|
|
113
113
|
|
|
114
114
|
Variáveis opcionais: `FUNIFIER_PROJECT_ROOT` (diretório do projeto; definida nos configs gerados pelo `init`) e `FUNIFIER_BACKUP_ROOT` (substitui `.funifier/backups/` por outro diretório). Snapshots não expiram automaticamente — remova arquivos antigos manualmente quando necessário.
|
|
115
|
+
|
|
116
|
+
## Verified References
|
|
117
|
+
|
|
118
|
+
| Claim | Status | Evidence |
|
|
119
|
+
|-------|--------|----------|
|
|
120
|
+
|
|
@@ -91,3 +91,10 @@ funifier_list type=action search=<_id>
|
|
|
91
91
|
```
|
|
92
92
|
|
|
93
93
|
Do NOT use `funifier_logs` — that is only for triggers and schedulers.
|
|
94
|
+
|
|
95
|
+
## Verified References
|
|
96
|
+
|
|
97
|
+
| Claim | Status | Evidence |
|
|
98
|
+
|-------|--------|----------|
|
|
99
|
+
| ActionLog is the entity class recording each player action event with fields actionId, userId, attributes, time, and id | ✓ verified | Class:src/main/java/com/funifier/engine/action/ActionLog.java:ActionLog |
|
|
100
|
+
| ActionManager handles action registration and dispatching in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/action/ActionManager.java:ActionManager |
|