funifier-mcp 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/README.md +351 -0
- package/dist/core/api-client.d.ts +131 -0
- package/dist/core/api-client.d.ts.map +1 -0
- package/dist/core/api-client.js +796 -0
- package/dist/core/api-client.js.map +1 -0
- package/dist/core/config.d.ts +11 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +37 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/constants.d.ts +51 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +57 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +26 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/types/Action.d.ts +13 -0
- package/dist/core/types/Action.d.ts.map +1 -0
- package/dist/core/types/Action.js +3 -0
- package/dist/core/types/Action.js.map +1 -0
- package/dist/core/types/Aggregate.d.ts +11 -0
- package/dist/core/types/Aggregate.d.ts.map +1 -0
- package/dist/core/types/Aggregate.js +3 -0
- package/dist/core/types/Aggregate.js.map +1 -0
- package/dist/core/types/AiKnowledge.d.ts +10 -0
- package/dist/core/types/AiKnowledge.d.ts.map +1 -0
- package/dist/core/types/AiKnowledge.js +3 -0
- package/dist/core/types/AiKnowledge.js.map +1 -0
- package/dist/core/types/AuthModule.d.ts +12 -0
- package/dist/core/types/AuthModule.d.ts.map +1 -0
- package/dist/core/types/AuthModule.js +3 -0
- package/dist/core/types/AuthModule.js.map +1 -0
- package/dist/core/types/Challenge.d.ts +26 -0
- package/dist/core/types/Challenge.d.ts.map +1 -0
- package/dist/core/types/Challenge.js +3 -0
- package/dist/core/types/Challenge.js.map +1 -0
- package/dist/core/types/ChallengeAggregate.d.ts +13 -0
- package/dist/core/types/ChallengeAggregate.d.ts.map +1 -0
- package/dist/core/types/ChallengeAggregate.js +3 -0
- package/dist/core/types/ChallengeAggregate.js.map +1 -0
- package/dist/core/types/CustomPage.d.ts +15 -0
- package/dist/core/types/CustomPage.d.ts.map +1 -0
- package/dist/core/types/CustomPage.js +3 -0
- package/dist/core/types/CustomPage.js.map +1 -0
- package/dist/core/types/Leaderboard.d.ts +33 -0
- package/dist/core/types/Leaderboard.d.ts.map +1 -0
- package/dist/core/types/Leaderboard.js +3 -0
- package/dist/core/types/Leaderboard.js.map +1 -0
- package/dist/core/types/Level.d.ts +17 -0
- package/dist/core/types/Level.d.ts.map +1 -0
- package/dist/core/types/Level.js +3 -0
- package/dist/core/types/Level.js.map +1 -0
- package/dist/core/types/Point.d.ts +8 -0
- package/dist/core/types/Point.d.ts.map +1 -0
- package/dist/core/types/Point.js +3 -0
- package/dist/core/types/Point.js.map +1 -0
- package/dist/core/types/PublicEndpoint.d.ts +14 -0
- package/dist/core/types/PublicEndpoint.d.ts.map +1 -0
- package/dist/core/types/PublicEndpoint.js +3 -0
- package/dist/core/types/PublicEndpoint.js.map +1 -0
- package/dist/core/types/Quiz.d.ts +33 -0
- package/dist/core/types/Quiz.d.ts.map +1 -0
- package/dist/core/types/Quiz.js +3 -0
- package/dist/core/types/Quiz.js.map +1 -0
- package/dist/core/types/Scheduler.d.ts +15 -0
- package/dist/core/types/Scheduler.d.ts.map +1 -0
- package/dist/core/types/Scheduler.js +3 -0
- package/dist/core/types/Scheduler.js.map +1 -0
- package/dist/core/types/Trigger.d.ts +14 -0
- package/dist/core/types/Trigger.d.ts.map +1 -0
- package/dist/core/types/Trigger.js +3 -0
- package/dist/core/types/Trigger.js.map +1 -0
- package/dist/core/types/VirtualGood.d.ts +21 -0
- package/dist/core/types/VirtualGood.d.ts.map +1 -0
- package/dist/core/types/VirtualGood.js +3 -0
- package/dist/core/types/VirtualGood.js.map +1 -0
- package/dist/core/types/Websocket.d.ts +10 -0
- package/dist/core/types/Websocket.d.ts.map +1 -0
- package/dist/core/types/Websocket.js +3 -0
- package/dist/core/types/Websocket.js.map +1 -0
- package/dist/core/types/Widget.d.ts +15 -0
- package/dist/core/types/Widget.d.ts.map +1 -0
- package/dist/core/types/Widget.js +3 -0
- package/dist/core/types/Widget.js.map +1 -0
- package/dist/core/types/index.d.ts +18 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/index.js +34 -0
- package/dist/core/types/index.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/api-holder.d.ts +40 -0
- package/dist/mcp/api-holder.d.ts.map +1 -0
- package/dist/mcp/api-holder.js +72 -0
- package/dist/mcp/api-holder.js.map +1 -0
- package/dist/mcp/bundle.js +99 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +36 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/prompts/templates.d.ts +3 -0
- package/dist/mcp/prompts/templates.d.ts.map +1 -0
- package/dist/mcp/prompts/templates.js +83 -0
- package/dist/mcp/prompts/templates.js.map +1 -0
- package/dist/mcp/resources/documentation.d.ts +3 -0
- package/dist/mcp/resources/documentation.d.ts.map +1 -0
- package/dist/mcp/resources/documentation.js +79 -0
- package/dist/mcp/resources/documentation.js.map +1 -0
- package/dist/mcp/tools/_fetch-current.d.ts +3 -0
- package/dist/mcp/tools/_fetch-current.d.ts.map +1 -0
- package/dist/mcp/tools/_fetch-current.js +67 -0
- package/dist/mcp/tools/_fetch-current.js.map +1 -0
- package/dist/mcp/tools/_merge.d.ts +2 -0
- package/dist/mcp/tools/_merge.d.ts.map +1 -0
- package/dist/mcp/tools/_merge.js +7 -0
- package/dist/mcp/tools/_merge.js.map +1 -0
- package/dist/mcp/tools/connect.d.ts +4 -0
- package/dist/mcp/tools/connect.d.ts.map +1 -0
- package/dist/mcp/tools/connect.js +44 -0
- package/dist/mcp/tools/connect.js.map +1 -0
- package/dist/mcp/tools/database.d.ts +4 -0
- package/dist/mcp/tools/database.d.ts.map +1 -0
- package/dist/mcp/tools/database.js +189 -0
- package/dist/mcp/tools/database.js.map +1 -0
- package/dist/mcp/tools/delete.d.ts +4 -0
- package/dist/mcp/tools/delete.d.ts.map +1 -0
- package/dist/mcp/tools/delete.js +97 -0
- package/dist/mcp/tools/delete.js.map +1 -0
- package/dist/mcp/tools/execute.d.ts +4 -0
- package/dist/mcp/tools/execute.d.ts.map +1 -0
- package/dist/mcp/tools/execute.js +84 -0
- package/dist/mcp/tools/execute.js.map +1 -0
- package/dist/mcp/tools/get.d.ts +4 -0
- package/dist/mcp/tools/get.d.ts.map +1 -0
- package/dist/mcp/tools/get.js +123 -0
- package/dist/mcp/tools/get.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +4 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +22 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/list.d.ts +4 -0
- package/dist/mcp/tools/list.d.ts.map +1 -0
- package/dist/mcp/tools/list.js +261 -0
- package/dist/mcp/tools/list.js.map +1 -0
- package/dist/mcp/tools/logs.d.ts +4 -0
- package/dist/mcp/tools/logs.d.ts.map +1 -0
- package/dist/mcp/tools/logs.js +50 -0
- package/dist/mcp/tools/logs.js.map +1 -0
- package/dist/mcp/tools/save.d.ts +4 -0
- package/dist/mcp/tools/save.d.ts.map +1 -0
- package/dist/mcp/tools/save.js +106 -0
- package/dist/mcp/tools/save.js.map +1 -0
- package/dist/mcp/tools/save.test.d.ts +2 -0
- package/dist/mcp/tools/save.test.d.ts.map +1 -0
- package/dist/mcp/tools/save.test.js +198 -0
- package/dist/mcp/tools/save.test.js.map +1 -0
- package/package.json +65 -0
- package/skills/funifier-create-action/SKILL.md +86 -0
- package/skills/funifier-create-aggregate/SKILL.md +87 -0
- package/skills/funifier-create-challenge/SKILL.md +87 -0
- package/skills/funifier-create-custom-page/SKILL.md +87 -0
- package/skills/funifier-create-leaderboard/SKILL.md +87 -0
- package/skills/funifier-create-level/SKILL.md +86 -0
- package/skills/funifier-create-point/SKILL.md +86 -0
- package/skills/funifier-create-quiz/SKILL.md +86 -0
- package/skills/funifier-create-scheduler/SKILL.md +87 -0
- package/skills/funifier-create-trigger/SKILL.md +88 -0
- package/skills/funifier-create-virtual-good/SKILL.md +86 -0
- package/skills/funifier-debug/SKILL.md +90 -0
- package/skills/funifier-help/SKILL.md +85 -0
- package/skills/funifier-implement-frontend/SKILL.md +89 -0
- package/skills/funifier-index/SKILL.md +50 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerDeleteTool = registerDeleteTool;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const RESOURCE_TYPES = [
|
|
6
|
+
"trigger",
|
|
7
|
+
"scheduler",
|
|
8
|
+
"aggregate",
|
|
9
|
+
"websocket",
|
|
10
|
+
"widget",
|
|
11
|
+
"custom-page",
|
|
12
|
+
"public-endpoint",
|
|
13
|
+
"challenge-aggregate",
|
|
14
|
+
"auth-module",
|
|
15
|
+
"ai-knowledge",
|
|
16
|
+
"action",
|
|
17
|
+
"challenge",
|
|
18
|
+
"point",
|
|
19
|
+
"level",
|
|
20
|
+
"leaderboard",
|
|
21
|
+
"quiz",
|
|
22
|
+
];
|
|
23
|
+
function registerDeleteTool(server, apiHolder) {
|
|
24
|
+
server.tool("funifier_delete", "Delete a Funifier resource by type and ID", {
|
|
25
|
+
type: zod_1.z.enum(RESOURCE_TYPES).describe("The resource type"),
|
|
26
|
+
id: zod_1.z.string().describe("The resource ID to delete"),
|
|
27
|
+
}, async ({ type, id }) => {
|
|
28
|
+
try {
|
|
29
|
+
const api = apiHolder.requireClient();
|
|
30
|
+
switch (type) {
|
|
31
|
+
case "trigger":
|
|
32
|
+
await api.deleteTrigger(id);
|
|
33
|
+
break;
|
|
34
|
+
case "scheduler":
|
|
35
|
+
await api.deleteScheduler(id);
|
|
36
|
+
break;
|
|
37
|
+
case "aggregate":
|
|
38
|
+
await api.deleteAggregate(id);
|
|
39
|
+
break;
|
|
40
|
+
case "websocket":
|
|
41
|
+
await api.deleteWebsocket(id);
|
|
42
|
+
break;
|
|
43
|
+
case "widget":
|
|
44
|
+
await api.deleteWidget(id);
|
|
45
|
+
break;
|
|
46
|
+
case "custom-page":
|
|
47
|
+
await api.deleteCustomPage(id);
|
|
48
|
+
break;
|
|
49
|
+
case "public-endpoint":
|
|
50
|
+
await api.deletePublicEndpoint(id);
|
|
51
|
+
break;
|
|
52
|
+
case "challenge-aggregate":
|
|
53
|
+
await api.deleteChallengeAggregate(id);
|
|
54
|
+
break;
|
|
55
|
+
case "auth-module":
|
|
56
|
+
await api.deleteAuthModule(id);
|
|
57
|
+
break;
|
|
58
|
+
case "ai-knowledge":
|
|
59
|
+
await api.deleteAiKnowledge(id);
|
|
60
|
+
break;
|
|
61
|
+
case "action":
|
|
62
|
+
await api.deleteAction(id);
|
|
63
|
+
break;
|
|
64
|
+
case "challenge":
|
|
65
|
+
await api.deleteChallenge(id);
|
|
66
|
+
break;
|
|
67
|
+
case "point":
|
|
68
|
+
await api.deletePoint(id);
|
|
69
|
+
break;
|
|
70
|
+
case "level":
|
|
71
|
+
await api.deleteLevel(id);
|
|
72
|
+
break;
|
|
73
|
+
case "leaderboard":
|
|
74
|
+
await api.deleteLeaderboard(id);
|
|
75
|
+
break;
|
|
76
|
+
case "quiz":
|
|
77
|
+
await api.deleteQuiz(id);
|
|
78
|
+
break;
|
|
79
|
+
default:
|
|
80
|
+
return {
|
|
81
|
+
content: [{ type: "text", text: `Unknown resource type: ${type}` }],
|
|
82
|
+
isError: true,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
content: [{ type: "text", text: `Successfully deleted ${type} with id ${id}` }],
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
return {
|
|
91
|
+
content: [{ type: "text", text: `Error deleting ${type} ${id}: ${error.message}` }],
|
|
92
|
+
isError: true,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/mcp/tools/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/execute.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QA4F1E"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerExecuteTool = registerExecuteTool;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
function registerExecuteTool(server, apiHolder) {
|
|
6
|
+
server.tool("funifier_execute", "Execute a Funifier resource (scheduler, aggregate, or public-endpoint)", {
|
|
7
|
+
type: zod_1.z
|
|
8
|
+
.enum(["scheduler", "aggregate", "public-endpoint"])
|
|
9
|
+
.describe("The resource type to execute"),
|
|
10
|
+
id: zod_1.z.string().describe("The resource ID to execute"),
|
|
11
|
+
params: zod_1.z
|
|
12
|
+
.string()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe("Optional JSON string of execution parameters"),
|
|
15
|
+
}, async ({ type, id, params }) => {
|
|
16
|
+
try {
|
|
17
|
+
const api = apiHolder.requireClient();
|
|
18
|
+
let result;
|
|
19
|
+
switch (type) {
|
|
20
|
+
case "scheduler":
|
|
21
|
+
result = await api.executeScheduler(id);
|
|
22
|
+
break;
|
|
23
|
+
case "aggregate": {
|
|
24
|
+
const aggregateParams = params ? JSON.parse(params) : {};
|
|
25
|
+
result = await api.executeAggregate(id, aggregateParams);
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
case "public-endpoint": {
|
|
29
|
+
if (!params) {
|
|
30
|
+
return {
|
|
31
|
+
content: [
|
|
32
|
+
{
|
|
33
|
+
type: "text",
|
|
34
|
+
text: "public-endpoint execution requires params with apiKey, method, and payload",
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
isError: true,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const endpointParams = JSON.parse(params);
|
|
41
|
+
const { apiKey, method, payload } = endpointParams;
|
|
42
|
+
if (!apiKey || !method) {
|
|
43
|
+
return {
|
|
44
|
+
content: [
|
|
45
|
+
{
|
|
46
|
+
type: "text",
|
|
47
|
+
text: "public-endpoint params must include apiKey and method",
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
isError: true,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
result = await api.executePublicEndpoint(apiKey, id, payload || {}, method);
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
default:
|
|
57
|
+
return {
|
|
58
|
+
content: [
|
|
59
|
+
{
|
|
60
|
+
type: "text",
|
|
61
|
+
text: `Execute is not supported for type: ${type}. Supported types: scheduler, aggregate, public-endpoint`,
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
isError: true,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
return {
|
|
73
|
+
content: [
|
|
74
|
+
{
|
|
75
|
+
type: "text",
|
|
76
|
+
text: `Error executing ${type} ${id}: ${error.message}`,
|
|
77
|
+
},
|
|
78
|
+
],
|
|
79
|
+
isError: true,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=execute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/mcp/tools/execute.ts"],"names":[],"mappings":";;AAIA,kDA4FC;AAhGD,6BAAwB;AAIxB,SAAgB,mBAAmB,CAAC,MAAiB,EAAE,SAAoB;IACzE,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,wEAAwE,EACxE;QACE,IAAI,EAAE,OAAC;aACJ,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,iBAAiB,CAAC,CAAC;aACnD,QAAQ,CAAC,8BAA8B,CAAC;QAC3C,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACrD,MAAM,EAAE,OAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,8CAA8C,CAAC;KAC5D,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;YACtC,IAAI,MAAW,CAAC;YAEhB,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,WAAW;oBACd,MAAM,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;oBACxC,MAAM;gBAER,KAAK,WAAW,CAAC,CAAC,CAAC;oBACjB,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzD,MAAM,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;oBACzD,MAAM;gBACR,CAAC;gBAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;oBACvB,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,OAAO;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,4EAA4E;iCACnF;6BACF;4BACD,OAAO,EAAE,IAAI;yBACd,CAAC;oBACJ,CAAC;oBACD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC1C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC;oBACnD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;wBACvB,OAAO;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,uDAAuD;iCAC9D;6BACF;4BACD,OAAO,EAAE,IAAI;yBACd,CAAC;oBACJ,CAAC;oBACD,MAAM,GAAG,MAAM,GAAG,CAAC,qBAAqB,CACtC,MAAM,EACN,EAAE,EACF,OAAO,IAAI,EAAE,EACb,MAAM,CACP,CAAC;oBACF,MAAM;gBACR,CAAC;gBAED;oBACE,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,sCAAsC,IAAI,0DAA0D;6BAC3G;yBACF;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;YACN,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,mBAAmB,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE;qBACxD;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAmC1C,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QA4FtE"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerGetTool = registerGetTool;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const RESOURCE_TYPES = [
|
|
6
|
+
"trigger",
|
|
7
|
+
"scheduler",
|
|
8
|
+
"aggregate",
|
|
9
|
+
"websocket",
|
|
10
|
+
"widget",
|
|
11
|
+
"custom-page",
|
|
12
|
+
"public-endpoint",
|
|
13
|
+
"challenge-aggregate",
|
|
14
|
+
"auth-module",
|
|
15
|
+
"ai-knowledge",
|
|
16
|
+
"action",
|
|
17
|
+
"challenge",
|
|
18
|
+
"point",
|
|
19
|
+
"level",
|
|
20
|
+
"leaderboard",
|
|
21
|
+
"quiz",
|
|
22
|
+
"virtual-good-catalog",
|
|
23
|
+
"virtual-good-item",
|
|
24
|
+
];
|
|
25
|
+
function findItem(items, idOrName) {
|
|
26
|
+
const byId = items.find((i) => i._id === idOrName);
|
|
27
|
+
if (byId)
|
|
28
|
+
return byId;
|
|
29
|
+
const query = idOrName.toLowerCase();
|
|
30
|
+
const byName = items.find((i) => {
|
|
31
|
+
const name = (i.name || i.title || "").toLowerCase();
|
|
32
|
+
return name === query || name.includes(query);
|
|
33
|
+
});
|
|
34
|
+
return byName || null;
|
|
35
|
+
}
|
|
36
|
+
function registerGetTool(server, apiHolder) {
|
|
37
|
+
server.tool("funifier_get", "Get a specific Funifier resource with full details (including scripts/code). Search by ID or name/title.", {
|
|
38
|
+
type: zod_1.z.enum(RESOURCE_TYPES).describe("The resource type"),
|
|
39
|
+
id: zod_1.z.string().describe("The resource ID or name/title to search for"),
|
|
40
|
+
}, async ({ type, id }) => {
|
|
41
|
+
try {
|
|
42
|
+
const api = apiHolder.requireClient();
|
|
43
|
+
let items;
|
|
44
|
+
switch (type) {
|
|
45
|
+
case "trigger":
|
|
46
|
+
items = await api.listTriggers();
|
|
47
|
+
break;
|
|
48
|
+
case "scheduler":
|
|
49
|
+
items = await api.listSchedulers();
|
|
50
|
+
break;
|
|
51
|
+
case "aggregate":
|
|
52
|
+
items = await api.listAggregates();
|
|
53
|
+
break;
|
|
54
|
+
case "websocket":
|
|
55
|
+
items = await api.listWebsockets();
|
|
56
|
+
break;
|
|
57
|
+
case "widget":
|
|
58
|
+
items = await api.listWidgets();
|
|
59
|
+
break;
|
|
60
|
+
case "custom-page":
|
|
61
|
+
items = await api.listCustomPages();
|
|
62
|
+
break;
|
|
63
|
+
case "public-endpoint":
|
|
64
|
+
items = await api.listPublicEndpoints();
|
|
65
|
+
break;
|
|
66
|
+
case "challenge-aggregate":
|
|
67
|
+
items = await api.listChallengeAggregates();
|
|
68
|
+
break;
|
|
69
|
+
case "auth-module":
|
|
70
|
+
items = await api.listAuthModules();
|
|
71
|
+
break;
|
|
72
|
+
case "ai-knowledge":
|
|
73
|
+
items = await api.listAiKnowledge();
|
|
74
|
+
break;
|
|
75
|
+
case "action":
|
|
76
|
+
items = await api.listActions();
|
|
77
|
+
break;
|
|
78
|
+
case "challenge":
|
|
79
|
+
items = await api.listChallenges();
|
|
80
|
+
break;
|
|
81
|
+
case "point":
|
|
82
|
+
items = await api.listPoints();
|
|
83
|
+
break;
|
|
84
|
+
case "level":
|
|
85
|
+
items = await api.listLevels();
|
|
86
|
+
break;
|
|
87
|
+
case "leaderboard":
|
|
88
|
+
items = await api.listLeaderboards();
|
|
89
|
+
break;
|
|
90
|
+
case "quiz":
|
|
91
|
+
items = await api.listQuizzes();
|
|
92
|
+
break;
|
|
93
|
+
case "virtual-good-catalog":
|
|
94
|
+
items = await api.listVirtualGoodCatalogs();
|
|
95
|
+
break;
|
|
96
|
+
case "virtual-good-item":
|
|
97
|
+
items = await api.listVirtualGoodItems();
|
|
98
|
+
break;
|
|
99
|
+
default:
|
|
100
|
+
return {
|
|
101
|
+
content: [{ type: "text", text: `Unknown resource type: ${type}` }],
|
|
102
|
+
isError: true,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
const item = findItem(items, id);
|
|
106
|
+
if (!item) {
|
|
107
|
+
return {
|
|
108
|
+
content: [{ type: "text", text: `Resource not found: ${type} with id or name "${id}"` }],
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
content: [{ type: "text", text: JSON.stringify(item, null, 2) }],
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
return {
|
|
117
|
+
content: [{ type: "text", text: `Error getting ${type} ${id}: ${error.message}` }],
|
|
118
|
+
isError: true,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/mcp/tools/get.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAU1C,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QASpE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerTools = registerTools;
|
|
4
|
+
const connect_1 = require("./connect");
|
|
5
|
+
const list_1 = require("./list");
|
|
6
|
+
const get_1 = require("./get");
|
|
7
|
+
const save_1 = require("./save");
|
|
8
|
+
const delete_1 = require("./delete");
|
|
9
|
+
const execute_1 = require("./execute");
|
|
10
|
+
const logs_1 = require("./logs");
|
|
11
|
+
const database_1 = require("./database");
|
|
12
|
+
function registerTools(server, apiHolder) {
|
|
13
|
+
(0, connect_1.registerConnectTool)(server, apiHolder);
|
|
14
|
+
(0, list_1.registerListTool)(server, apiHolder);
|
|
15
|
+
(0, get_1.registerGetTool)(server, apiHolder);
|
|
16
|
+
(0, save_1.registerSaveTool)(server, apiHolder);
|
|
17
|
+
(0, delete_1.registerDeleteTool)(server, apiHolder);
|
|
18
|
+
(0, execute_1.registerExecuteTool)(server, apiHolder);
|
|
19
|
+
(0, logs_1.registerLogsTool)(server, apiHolder);
|
|
20
|
+
(0, database_1.registerDatabaseTool)(server, apiHolder);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":";;AAWA,sCASC;AAlBD,uCAAgD;AAChD,iCAA0C;AAC1C,+BAAwC;AACxC,iCAA0C;AAC1C,qCAA8C;AAC9C,uCAAgD;AAChD,iCAA0C;AAC1C,yCAAkD;AAElD,SAAgB,aAAa,CAAC,MAAiB,EAAE,SAAoB;IACnE,IAAA,6BAAmB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,IAAA,uBAAgB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,IAAA,qBAAe,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnC,IAAA,uBAAgB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,IAAA,2BAAkB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,IAAA,6BAAmB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,IAAA,uBAAgB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,IAAA,+BAAoB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +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;AAqK1C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QAyGvE"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerListTool = registerListTool;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const RESOURCE_TYPES = [
|
|
6
|
+
"trigger",
|
|
7
|
+
"scheduler",
|
|
8
|
+
"aggregate",
|
|
9
|
+
"websocket",
|
|
10
|
+
"widget",
|
|
11
|
+
"custom-page",
|
|
12
|
+
"public-endpoint",
|
|
13
|
+
"challenge-aggregate",
|
|
14
|
+
"auth-module",
|
|
15
|
+
"ai-knowledge",
|
|
16
|
+
"action",
|
|
17
|
+
"challenge",
|
|
18
|
+
"point",
|
|
19
|
+
"level",
|
|
20
|
+
"leaderboard",
|
|
21
|
+
"quiz",
|
|
22
|
+
"virtual-good-catalog",
|
|
23
|
+
"virtual-good-item",
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Returns a summary view of items: only _id, name/title, and key identifying fields.
|
|
27
|
+
* Scripts and large fields are excluded to keep token usage low.
|
|
28
|
+
*/
|
|
29
|
+
function summarizeItems(items, type) {
|
|
30
|
+
return items.map((item) => {
|
|
31
|
+
switch (type) {
|
|
32
|
+
case "trigger":
|
|
33
|
+
return {
|
|
34
|
+
_id: item._id,
|
|
35
|
+
name: item.name,
|
|
36
|
+
entity: item.entity,
|
|
37
|
+
event: item.event,
|
|
38
|
+
description: item.description || "",
|
|
39
|
+
status: item.status,
|
|
40
|
+
};
|
|
41
|
+
case "scheduler":
|
|
42
|
+
return {
|
|
43
|
+
_id: item._id,
|
|
44
|
+
name: item.name,
|
|
45
|
+
cron: item.cron,
|
|
46
|
+
active: item.active,
|
|
47
|
+
description: item.description || "",
|
|
48
|
+
status: item.status,
|
|
49
|
+
};
|
|
50
|
+
case "aggregate":
|
|
51
|
+
return {
|
|
52
|
+
_id: item._id,
|
|
53
|
+
title: item.title,
|
|
54
|
+
collection: item.collection,
|
|
55
|
+
description: item.description || "",
|
|
56
|
+
};
|
|
57
|
+
case "websocket":
|
|
58
|
+
return {
|
|
59
|
+
_id: item._id,
|
|
60
|
+
title: item.title,
|
|
61
|
+
description: item.description || "",
|
|
62
|
+
status: item.status,
|
|
63
|
+
};
|
|
64
|
+
case "widget":
|
|
65
|
+
return {
|
|
66
|
+
_id: item._id,
|
|
67
|
+
title: item.title,
|
|
68
|
+
description: item.description || "",
|
|
69
|
+
};
|
|
70
|
+
case "custom-page":
|
|
71
|
+
return {
|
|
72
|
+
_id: item._id,
|
|
73
|
+
title: item.title,
|
|
74
|
+
description: item.description || "",
|
|
75
|
+
};
|
|
76
|
+
case "public-endpoint":
|
|
77
|
+
return {
|
|
78
|
+
_id: item._id,
|
|
79
|
+
title: item.title,
|
|
80
|
+
description: item.description || "",
|
|
81
|
+
};
|
|
82
|
+
case "action":
|
|
83
|
+
return {
|
|
84
|
+
_id: item._id,
|
|
85
|
+
action: item.action,
|
|
86
|
+
active: item.active,
|
|
87
|
+
attributes: item.attributes?.length || 0,
|
|
88
|
+
};
|
|
89
|
+
case "challenge":
|
|
90
|
+
return {
|
|
91
|
+
_id: item._id,
|
|
92
|
+
challenge: item.challenge,
|
|
93
|
+
description: item.description || "",
|
|
94
|
+
rules: item.rules?.length || 0,
|
|
95
|
+
};
|
|
96
|
+
case "point":
|
|
97
|
+
return {
|
|
98
|
+
_id: item._id,
|
|
99
|
+
category: item.category,
|
|
100
|
+
shortName: item.shortName,
|
|
101
|
+
};
|
|
102
|
+
case "level":
|
|
103
|
+
return {
|
|
104
|
+
_id: item._id,
|
|
105
|
+
level: item.level,
|
|
106
|
+
position: item.position,
|
|
107
|
+
minPoints: item.minPoints,
|
|
108
|
+
};
|
|
109
|
+
case "leaderboard":
|
|
110
|
+
return {
|
|
111
|
+
_id: item._id,
|
|
112
|
+
title: item.title,
|
|
113
|
+
description: item.description || "",
|
|
114
|
+
};
|
|
115
|
+
case "quiz":
|
|
116
|
+
return {
|
|
117
|
+
_id: item._id,
|
|
118
|
+
title: item.title,
|
|
119
|
+
grade: item.grade,
|
|
120
|
+
};
|
|
121
|
+
case "virtual-good-catalog":
|
|
122
|
+
return {
|
|
123
|
+
_id: item._id,
|
|
124
|
+
catalog: item.catalog,
|
|
125
|
+
};
|
|
126
|
+
case "virtual-good-item":
|
|
127
|
+
return {
|
|
128
|
+
_id: item._id,
|
|
129
|
+
name: item.name,
|
|
130
|
+
catalogId: item.catalogId,
|
|
131
|
+
active: item.active,
|
|
132
|
+
amount: item.amount,
|
|
133
|
+
};
|
|
134
|
+
default:
|
|
135
|
+
return {
|
|
136
|
+
_id: item._id,
|
|
137
|
+
name: item.name || item.title || "",
|
|
138
|
+
description: item.description || "",
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Filters items by a search query matching against name, title, description,
|
|
145
|
+
* entity, event, collection, and _id fields (case-insensitive).
|
|
146
|
+
*/
|
|
147
|
+
function filterItems(items, query) {
|
|
148
|
+
const q = query.toLowerCase();
|
|
149
|
+
return items.filter((item) => {
|
|
150
|
+
const searchable = [
|
|
151
|
+
item._id,
|
|
152
|
+
item.name,
|
|
153
|
+
item.title,
|
|
154
|
+
item.description,
|
|
155
|
+
item.entity,
|
|
156
|
+
item.event,
|
|
157
|
+
item.collection,
|
|
158
|
+
]
|
|
159
|
+
.filter(Boolean)
|
|
160
|
+
.join(" ")
|
|
161
|
+
.toLowerCase();
|
|
162
|
+
return searchable.includes(q);
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
function registerListTool(server, apiHolder) {
|
|
166
|
+
server.tool("funifier_list", "List Funifier resources of a given type. Returns a summary (no scripts/code). Use the optional 'search' parameter to filter by name, entity, collection, etc. Use funifier_get to retrieve full details of a specific resource.", {
|
|
167
|
+
type: zod_1.z.enum(RESOURCE_TYPES).describe("The resource type to list"),
|
|
168
|
+
search: zod_1.z
|
|
169
|
+
.string()
|
|
170
|
+
.optional()
|
|
171
|
+
.describe("Optional search query to filter results by name, title, description, entity, event, collection, or ID (case-insensitive)"),
|
|
172
|
+
}, async ({ type, search }) => {
|
|
173
|
+
try {
|
|
174
|
+
const api = apiHolder.requireClient();
|
|
175
|
+
let results;
|
|
176
|
+
switch (type) {
|
|
177
|
+
case "trigger":
|
|
178
|
+
results = await api.listTriggers();
|
|
179
|
+
break;
|
|
180
|
+
case "scheduler":
|
|
181
|
+
results = await api.listSchedulers();
|
|
182
|
+
break;
|
|
183
|
+
case "aggregate":
|
|
184
|
+
results = await api.listAggregates();
|
|
185
|
+
break;
|
|
186
|
+
case "websocket":
|
|
187
|
+
results = await api.listWebsockets();
|
|
188
|
+
break;
|
|
189
|
+
case "widget":
|
|
190
|
+
results = await api.listWidgets();
|
|
191
|
+
break;
|
|
192
|
+
case "custom-page":
|
|
193
|
+
results = await api.listCustomPages();
|
|
194
|
+
break;
|
|
195
|
+
case "public-endpoint":
|
|
196
|
+
results = await api.listPublicEndpoints();
|
|
197
|
+
break;
|
|
198
|
+
case "challenge-aggregate":
|
|
199
|
+
results = await api.listChallengeAggregates();
|
|
200
|
+
break;
|
|
201
|
+
case "auth-module":
|
|
202
|
+
results = await api.listAuthModules();
|
|
203
|
+
break;
|
|
204
|
+
case "ai-knowledge":
|
|
205
|
+
results = await api.listAiKnowledge();
|
|
206
|
+
break;
|
|
207
|
+
case "action":
|
|
208
|
+
results = await api.listActions();
|
|
209
|
+
break;
|
|
210
|
+
case "challenge":
|
|
211
|
+
results = await api.listChallenges();
|
|
212
|
+
break;
|
|
213
|
+
case "point":
|
|
214
|
+
results = await api.listPoints();
|
|
215
|
+
break;
|
|
216
|
+
case "level":
|
|
217
|
+
results = await api.listLevels();
|
|
218
|
+
break;
|
|
219
|
+
case "leaderboard":
|
|
220
|
+
results = await api.listLeaderboards();
|
|
221
|
+
break;
|
|
222
|
+
case "quiz":
|
|
223
|
+
results = await api.listQuizzes();
|
|
224
|
+
break;
|
|
225
|
+
case "virtual-good-catalog":
|
|
226
|
+
results = await api.listVirtualGoodCatalogs();
|
|
227
|
+
break;
|
|
228
|
+
case "virtual-good-item":
|
|
229
|
+
results = await api.listVirtualGoodItems();
|
|
230
|
+
break;
|
|
231
|
+
default:
|
|
232
|
+
return {
|
|
233
|
+
content: [{ type: "text", text: `Unknown resource type: ${type}` }],
|
|
234
|
+
isError: true,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
if (search) {
|
|
238
|
+
results = filterItems(results, search);
|
|
239
|
+
}
|
|
240
|
+
const summary = summarizeItems(results, type);
|
|
241
|
+
const header = search
|
|
242
|
+
? `Found ${summary.length} ${type}(s) matching "${search}":`
|
|
243
|
+
: `Found ${summary.length} ${type}(s):`;
|
|
244
|
+
return {
|
|
245
|
+
content: [
|
|
246
|
+
{
|
|
247
|
+
type: "text",
|
|
248
|
+
text: header + "\n\n" + JSON.stringify(summary, null, 2),
|
|
249
|
+
},
|
|
250
|
+
],
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
return {
|
|
255
|
+
content: [{ type: "text", text: `Error listing ${type}: ${error.message}` }],
|
|
256
|
+
isError: true,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/mcp/tools/list.ts"],"names":[],"mappings":"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"}
|