funifier-mcp 0.2.28 → 0.3.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/.cursor/rules/funifier.mdc +7 -7
- package/.github/copilot-instructions.md +10 -8
- package/AGENTS.md +8 -4
- package/README.md +6 -12
- package/datasource-funifier-docs/.coverage.json +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +13 -9
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/init.test.js +28 -9
- package/dist/cli/init.test.js.map +1 -1
- package/dist/cli/prompts.d.ts +1 -0
- package/dist/cli/prompts.d.ts.map +1 -1
- package/dist/cli/prompts.js +8 -0
- package/dist/cli/prompts.js.map +1 -1
- package/dist/cli/search.js +3 -3
- package/dist/cli/search.js.map +1 -1
- package/dist/cli/search.test.js +9 -9
- package/dist/cli/search.test.js.map +1 -1
- package/dist/mcp/bundle.js +85 -84
- package/dist/mcp/check-update.d.ts +7 -0
- package/dist/mcp/check-update.d.ts.map +1 -1
- package/dist/mcp/check-update.js +18 -1
- package/dist/mcp/check-update.js.map +1 -1
- package/dist/mcp/check-update.test.js +13 -0
- package/dist/mcp/check-update.test.js.map +1 -1
- package/dist/mcp/resources/documentation.d.ts.map +1 -1
- package/dist/mcp/resources/documentation.js +2 -1
- package/dist/mcp/resources/documentation.js.map +1 -1
- package/dist/mcp/tools/docs-flow.test.d.ts +2 -0
- package/dist/mcp/tools/docs-flow.test.d.ts.map +1 -0
- package/dist/mcp/tools/docs-flow.test.js +91 -0
- package/dist/mcp/tools/docs-flow.test.js.map +1 -0
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +2 -0
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/read-doc.d.ts +3 -0
- package/dist/mcp/tools/read-doc.d.ts.map +1 -0
- package/dist/mcp/tools/read-doc.js +97 -0
- package/dist/mcp/tools/read-doc.js.map +1 -0
- package/dist/mcp/tools/read-doc.test.d.ts +2 -0
- package/dist/mcp/tools/read-doc.test.d.ts.map +1 -0
- package/dist/mcp/tools/read-doc.test.js +92 -0
- package/dist/mcp/tools/read-doc.test.js.map +1 -0
- package/dist/mcp/tools/search-docs.js +3 -3
- package/dist/mcp/tools/search-docs.js.map +1 -1
- package/dist/mcp/tools/search-docs.test.d.ts +2 -0
- package/dist/mcp/tools/search-docs.test.d.ts.map +1 -0
- package/dist/mcp/tools/search-docs.test.js +100 -0
- package/dist/mcp/tools/search-docs.test.js.map +1 -0
- package/package.json +1 -1
- package/skills/funifier/SKILL.md +5 -3
- package/skills/funifier/references/configure-security.md +7 -7
- package/skills/funifier/references/create-action.md +7 -7
- package/skills/funifier/references/create-aggregate.md +8 -8
- package/skills/funifier/references/create-challenge.md +8 -8
- package/skills/funifier/references/create-competition.md +6 -6
- package/skills/funifier/references/create-crossword.md +1 -1
- package/skills/funifier/references/create-custom-object.md +7 -7
- package/skills/funifier/references/create-custom-page.md +8 -8
- package/skills/funifier/references/create-folder.md +6 -6
- package/skills/funifier/references/create-lastmile.md +1 -1
- package/skills/funifier/references/create-leaderboard.md +8 -8
- package/skills/funifier/references/create-level.md +7 -7
- package/skills/funifier/references/create-notification.md +7 -7
- package/skills/funifier/references/create-point.md +7 -7
- package/skills/funifier/references/create-quiz.md +7 -7
- package/skills/funifier/references/create-scheduler.md +10 -10
- package/skills/funifier/references/create-story.md +1 -1
- package/skills/funifier/references/create-swap.md +6 -6
- package/skills/funifier/references/create-trigger.md +14 -14
- package/skills/funifier/references/create-virtual-good.md +7 -7
- package/skills/funifier/references/create-webhook.md +7 -7
- package/skills/funifier/references/create-websocket.md +8 -8
- package/skills/funifier/references/create-widget.md +7 -7
- package/skills/funifier/references/debug.md +16 -16
- package/skills/funifier/references/help.md +8 -8
- package/skills/funifier/references/implement-frontend.md +15 -15
- package/skills/funifier/references/import-csv.md +7 -7
- package/skills/funifier/references/manage-player.md +6 -6
- package/skills/funifier/references/manage-team.md +6 -6
- package/skills/funifier/references/upload-file.md +6 -6
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const vitest_1 = require("vitest");
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const os = __importStar(require("os"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const search_docs_1 = require("./search-docs");
|
|
41
|
+
const lexical_1 = require("../../core/lexical");
|
|
42
|
+
// Package-style layout: docsPath is the knowledge/ dir; the index sits one level up,
|
|
43
|
+
// exactly where the tool resolves it (path.join(docsPath, "..", ".search-index.json")).
|
|
44
|
+
let root;
|
|
45
|
+
let docsPath;
|
|
46
|
+
function invokeWith(dp) {
|
|
47
|
+
const handlers = {};
|
|
48
|
+
const server = {
|
|
49
|
+
registerTool: (name, _config, handler) => {
|
|
50
|
+
handlers[name] = handler;
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
(0, search_docs_1.registerSearchDocsTool)(server, dp);
|
|
54
|
+
return (args) => handlers["funifier_search_docs"](args);
|
|
55
|
+
}
|
|
56
|
+
(0, vitest_1.beforeAll)(() => {
|
|
57
|
+
root = fs.mkdtempSync(path.join(os.tmpdir(), "funifier-searchdocs-"));
|
|
58
|
+
docsPath = path.join(root, "knowledge");
|
|
59
|
+
fs.mkdirSync(docsPath, { recursive: true });
|
|
60
|
+
// Index keys carry the knowledge/ prefix, like the real build output, so the
|
|
61
|
+
// tool's strip of `^knowledge/` and `.md` is exercised.
|
|
62
|
+
const files = new Map([
|
|
63
|
+
[
|
|
64
|
+
"knowledge/modules/trigger.md",
|
|
65
|
+
"# Trigger\n\n## Groovy event\n\nTrigger fires on before_win events with a groovy script.",
|
|
66
|
+
],
|
|
67
|
+
["knowledge/modules/quiz.md", "# Quiz\n\nQuestions and answers for players."],
|
|
68
|
+
]);
|
|
69
|
+
fs.writeFileSync(path.join(root, ".search-index.json"), JSON.stringify((0, lexical_1.buildIndex)(files)));
|
|
70
|
+
});
|
|
71
|
+
(0, vitest_1.afterAll)(() => {
|
|
72
|
+
fs.rmSync(root, { recursive: true, force: true });
|
|
73
|
+
});
|
|
74
|
+
(0, vitest_1.describe)("funifier_search_docs", () => {
|
|
75
|
+
(0, vitest_1.it)("loads the index next to docsPath and ranks matching docs", () => {
|
|
76
|
+
const result = invokeWith(docsPath)({ query: "trigger groovy event before_win" });
|
|
77
|
+
(0, vitest_1.expect)(result.isError).toBeUndefined();
|
|
78
|
+
(0, vitest_1.expect)(result.content[0].text).toContain("modules/trigger");
|
|
79
|
+
});
|
|
80
|
+
(0, vitest_1.it)("returns paths stripped of knowledge/ and .md, pointing at funifier_read_doc (not a resource URI)", () => {
|
|
81
|
+
const text = invokeWith(docsPath)({ query: "trigger groovy event before_win" }).content[0].text;
|
|
82
|
+
(0, vitest_1.expect)(text).toContain("funifier_read_doc path=");
|
|
83
|
+
(0, vitest_1.expect)(text).not.toContain("funifier://docs/");
|
|
84
|
+
(0, vitest_1.expect)(text).not.toContain("knowledge/");
|
|
85
|
+
(0, vitest_1.expect)(text).not.toContain(".md");
|
|
86
|
+
});
|
|
87
|
+
(0, vitest_1.it)("returns isError when the search index is missing", () => {
|
|
88
|
+
const emptyRoot = fs.mkdtempSync(path.join(os.tmpdir(), "funifier-noindex-"));
|
|
89
|
+
const result = invokeWith(path.join(emptyRoot, "knowledge"))({ query: "trigger" });
|
|
90
|
+
(0, vitest_1.expect)(result.isError).toBe(true);
|
|
91
|
+
(0, vitest_1.expect)(result.content[0].text).toContain("index not found");
|
|
92
|
+
fs.rmSync(emptyRoot, { recursive: true, force: true });
|
|
93
|
+
});
|
|
94
|
+
(0, vitest_1.it)("reports no matches for an unrelated query", () => {
|
|
95
|
+
const result = invokeWith(docsPath)({ query: "zzzznonexistentterm" });
|
|
96
|
+
(0, vitest_1.expect)(result.isError).toBeUndefined();
|
|
97
|
+
(0, vitest_1.expect)(result.content[0].text).toContain("No documentation found");
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
//# sourceMappingURL=search-docs.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-docs.test.js","sourceRoot":"","sources":["../../../src/mcp/tools/search-docs.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/skills/funifier/SKILL.md
CHANGED
|
@@ -21,11 +21,13 @@ Only proceed directly with MCP tools when no row matches.
|
|
|
21
21
|
3. Read the file listed in the Reference column
|
|
22
22
|
4. Follow the workflow in that file
|
|
23
23
|
|
|
24
|
-
For general questions with no matching task,
|
|
24
|
+
For general questions with no matching task, search the docs with the MCP tool:
|
|
25
25
|
|
|
26
|
-
```bash
|
|
27
|
-
npx funifier-mcp search "<user question>"
|
|
28
26
|
```
|
|
27
|
+
funifier_search_docs "<user question>"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Then read a result with `funifier_read_doc path=<path>`.
|
|
29
31
|
|
|
30
32
|
## Routing Table
|
|
31
33
|
|
|
@@ -6,19 +6,19 @@ Configure Funifier security settings — roles, scopes, app tokens, and auth par
|
|
|
6
6
|
|
|
7
7
|
## Before starting — find relevant docs
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
10
10
|
|
|
11
|
-
```
|
|
12
|
-
|
|
11
|
+
```
|
|
12
|
+
funifier_search_docs "security role scope token auth app permission basic bearer access-control"
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
16
16
|
|
|
17
17
|
## Primary docs for this skill
|
|
18
18
|
|
|
19
|
-
If search returns insufficient results, read directly:
|
|
19
|
+
If search returns insufficient results, read these directly:
|
|
20
20
|
|
|
21
|
-
- `
|
|
21
|
+
- `funifier_read_doc path=modules/security`
|
|
22
22
|
|
|
23
23
|
## Steps
|
|
24
24
|
|
|
@@ -54,7 +54,7 @@ Authorization: Bearer <studio_token>
|
|
|
54
54
|
### 2. Ler a documentação do módulo
|
|
55
55
|
|
|
56
56
|
```
|
|
57
|
-
|
|
57
|
+
funifier_read_doc path=modules/security
|
|
58
58
|
```
|
|
59
59
|
|
|
60
60
|
### 3. Definir roles e apps
|
|
@@ -6,20 +6,20 @@ Create a Funifier action — define trackable player behaviors with attributes
|
|
|
6
6
|
|
|
7
7
|
## Before starting — find relevant docs
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
10
10
|
|
|
11
|
-
```
|
|
12
|
-
|
|
11
|
+
```
|
|
12
|
+
funifier_search_docs "action track player behavior attributes log event"
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
16
16
|
|
|
17
17
|
## Primary docs for this skill
|
|
18
18
|
|
|
19
|
-
If search returns insufficient results, read directly:
|
|
19
|
+
If search returns insufficient results, read these directly:
|
|
20
20
|
|
|
21
|
-
- `
|
|
22
|
-
- `
|
|
21
|
+
- `funifier_read_doc path=modules/action`
|
|
22
|
+
- `funifier_read_doc path=modules/action-log`
|
|
23
23
|
|
|
24
24
|
## Steps
|
|
25
25
|
|
|
@@ -45,21 +45,21 @@ Note que `aggregate` é uma **string** contendo JSON serializado (com `\n` e `\"
|
|
|
45
45
|
|
|
46
46
|
## Before starting — find relevant docs
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
49
49
|
|
|
50
|
-
```
|
|
51
|
-
|
|
50
|
+
```
|
|
51
|
+
funifier_search_docs "aggregate mongodb pipeline report dashboard query prepared"
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
55
55
|
|
|
56
56
|
## Primary docs for this skill
|
|
57
57
|
|
|
58
|
-
If search returns insufficient results, read directly:
|
|
58
|
+
If search returns insufficient results, read these directly:
|
|
59
59
|
|
|
60
|
-
- `
|
|
61
|
-
- `
|
|
62
|
-
- `
|
|
60
|
+
- `funifier_read_doc path=guides/aggregates`
|
|
61
|
+
- `funifier_read_doc path=guides/database-access`
|
|
62
|
+
- `funifier_read_doc path=modules/database`
|
|
63
63
|
|
|
64
64
|
## Steps
|
|
65
65
|
|
|
@@ -6,21 +6,21 @@ Create a Funifier challenge — missions with action rules and point rewards
|
|
|
6
6
|
|
|
7
7
|
## Before starting — find relevant docs
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
10
10
|
|
|
11
|
-
```
|
|
12
|
-
|
|
11
|
+
```
|
|
12
|
+
funifier_search_docs "challenge mission reward rules action points gamification"
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
16
16
|
|
|
17
17
|
## Primary docs for this skill
|
|
18
18
|
|
|
19
|
-
If search returns insufficient results, read directly:
|
|
19
|
+
If search returns insufficient results, read these directly:
|
|
20
20
|
|
|
21
|
-
- `
|
|
22
|
-
- `
|
|
23
|
-
- `
|
|
21
|
+
- `funifier_read_doc path=modules/challenge`
|
|
22
|
+
- `funifier_read_doc path=modules/action`
|
|
23
|
+
- `funifier_read_doc path=modules/point`
|
|
24
24
|
|
|
25
25
|
## Steps
|
|
26
26
|
|
|
@@ -6,19 +6,19 @@ Create a Funifier competition — timed ranking contests with player enrollment,
|
|
|
6
6
|
|
|
7
7
|
## Before starting — find relevant docs
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
10
10
|
|
|
11
|
-
```
|
|
12
|
-
|
|
11
|
+
```
|
|
12
|
+
funifier_search_docs "competition contest ranking tournament enrollment rewards position gt26"
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
16
16
|
|
|
17
17
|
## Primary docs for this skill
|
|
18
18
|
|
|
19
|
-
If search returns insufficient results, read directly:
|
|
19
|
+
If search returns insufficient results, read these directly:
|
|
20
20
|
|
|
21
|
-
- `
|
|
21
|
+
- `funifier_read_doc path=modules/competition`
|
|
22
22
|
|
|
23
23
|
## Steps
|
|
24
24
|
|
|
@@ -6,20 +6,20 @@ Create and manage Funifier custom objects — domain-specific collections with t
|
|
|
6
6
|
|
|
7
7
|
## Before starting — find relevant docs
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
10
10
|
|
|
11
|
-
```
|
|
12
|
-
|
|
11
|
+
```
|
|
12
|
+
funifier_search_docs "custom object collection database crud __c domain entity business"
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
16
16
|
|
|
17
17
|
## Primary docs for this skill
|
|
18
18
|
|
|
19
|
-
If search returns insufficient results, read directly:
|
|
19
|
+
If search returns insufficient results, read these directly:
|
|
20
20
|
|
|
21
|
-
- `
|
|
22
|
-
- `
|
|
21
|
+
- `funifier_read_doc path=modules/custom-object`
|
|
22
|
+
- `funifier_read_doc path=modules/database`
|
|
23
23
|
|
|
24
24
|
## Steps
|
|
25
25
|
|
|
@@ -45,21 +45,21 @@ Note que `aggregate` é uma **string** contendo JSON serializado (com `\n` e `\"
|
|
|
45
45
|
|
|
46
46
|
## Before starting — find relevant docs
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
49
49
|
|
|
50
|
-
```
|
|
51
|
-
|
|
50
|
+
```
|
|
51
|
+
funifier_search_docs "custom page studio dashboard angularjs bootstrap admin crud kpi"
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
55
55
|
|
|
56
56
|
## Primary docs for this skill
|
|
57
57
|
|
|
58
|
-
If search returns insufficient results, read directly:
|
|
58
|
+
If search returns insufficient results, read these directly:
|
|
59
59
|
|
|
60
|
-
- `
|
|
61
|
-
- `
|
|
62
|
-
- `
|
|
60
|
+
- `funifier_read_doc path=modules/studio-page`
|
|
61
|
+
- `funifier_read_doc path=guides/aggregates`
|
|
62
|
+
- `funifier_read_doc path=modules/auth`
|
|
63
63
|
|
|
64
64
|
## Steps
|
|
65
65
|
|
|
@@ -6,19 +6,19 @@ Create a Funifier learning trail (folder) — hierarchical courses with content
|
|
|
6
6
|
|
|
7
7
|
## Before starting — find relevant docs
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
10
10
|
|
|
11
|
-
```
|
|
12
|
-
|
|
11
|
+
```
|
|
12
|
+
funifier_search_docs "folder trail course learning progress content hierarchy unlock training lms"
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
16
16
|
|
|
17
17
|
## Primary docs for this skill
|
|
18
18
|
|
|
19
|
-
If search returns insufficient results, read directly:
|
|
19
|
+
If search returns insufficient results, read these directly:
|
|
20
20
|
|
|
21
|
-
- `
|
|
21
|
+
- `funifier_read_doc path=modules/folder`
|
|
22
22
|
|
|
23
23
|
## Steps
|
|
24
24
|
|
|
@@ -6,21 +6,21 @@ Create a Funifier leaderboard — rankings by points, actions, or attributes
|
|
|
6
6
|
|
|
7
7
|
## Before starting — find relevant docs
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
10
10
|
|
|
11
|
-
```
|
|
12
|
-
|
|
11
|
+
```
|
|
12
|
+
funifier_search_docs "leaderboard ranking score top players classification board"
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
16
16
|
|
|
17
17
|
## Primary docs for this skill
|
|
18
18
|
|
|
19
|
-
If search returns insufficient results, read directly:
|
|
19
|
+
If search returns insufficient results, read these directly:
|
|
20
20
|
|
|
21
|
-
- `
|
|
22
|
-
- `
|
|
23
|
-
- `
|
|
21
|
+
- `funifier_read_doc path=modules/leaderboard`
|
|
22
|
+
- `funifier_read_doc path=modules/point`
|
|
23
|
+
- `funifier_read_doc path=modules/action`
|
|
24
24
|
|
|
25
25
|
## Steps
|
|
26
26
|
|
|
@@ -6,20 +6,20 @@ Create Funifier levels — progression system based on accumulated points
|
|
|
6
6
|
|
|
7
7
|
## Before starting — find relevant docs
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
10
10
|
|
|
11
|
-
```
|
|
12
|
-
|
|
11
|
+
```
|
|
12
|
+
funifier_search_docs "level progression rank tier xp points unlock"
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
16
16
|
|
|
17
17
|
## Primary docs for this skill
|
|
18
18
|
|
|
19
|
-
If search returns insufficient results, read directly:
|
|
19
|
+
If search returns insufficient results, read these directly:
|
|
20
20
|
|
|
21
|
-
- `
|
|
22
|
-
- `
|
|
21
|
+
- `funifier_read_doc path=modules/level`
|
|
22
|
+
- `funifier_read_doc path=modules/point`
|
|
23
23
|
|
|
24
24
|
## Steps
|
|
25
25
|
|
|
@@ -6,19 +6,19 @@ Create a Funifier notification — standalone automated player feedback messages
|
|
|
6
6
|
|
|
7
7
|
## Before starting — find relevant docs
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
10
10
|
|
|
11
|
-
```
|
|
12
|
-
|
|
11
|
+
```
|
|
12
|
+
funifier_search_docs "notification message push feedback alert player event"
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
16
16
|
|
|
17
17
|
## Primary docs for this skill
|
|
18
18
|
|
|
19
|
-
If search returns insufficient results, read directly:
|
|
19
|
+
If search returns insufficient results, read these directly:
|
|
20
20
|
|
|
21
|
-
- `
|
|
21
|
+
- `funifier_read_doc path=modules/notification`
|
|
22
22
|
|
|
23
23
|
## Steps
|
|
24
24
|
|
|
@@ -44,7 +44,7 @@ funifier_list type=notification search=<descricao>
|
|
|
44
44
|
### 2. Ler a documentação do módulo
|
|
45
45
|
|
|
46
46
|
```
|
|
47
|
-
|
|
47
|
+
funifier_read_doc path=modules/notification
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
### 3. Criar a notificação
|
|
@@ -6,20 +6,20 @@ Create a Funifier point category — XP, coins, or custom metrics
|
|
|
6
6
|
|
|
7
7
|
## Before starting — find relevant docs
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
10
10
|
|
|
11
|
-
```
|
|
12
|
-
|
|
11
|
+
```
|
|
12
|
+
funifier_search_docs "point xp coin currency score metric category"
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
16
16
|
|
|
17
17
|
## Primary docs for this skill
|
|
18
18
|
|
|
19
|
-
If search returns insufficient results, read directly:
|
|
19
|
+
If search returns insufficient results, read these directly:
|
|
20
20
|
|
|
21
|
-
- `
|
|
22
|
-
- `
|
|
21
|
+
- `funifier_read_doc path=modules/point`
|
|
22
|
+
- `funifier_read_doc path=modules/achievement`
|
|
23
23
|
|
|
24
24
|
## Steps
|
|
25
25
|
|
|
@@ -6,20 +6,20 @@ Create a Funifier quiz — questionnaires with multiple-choice questions
|
|
|
6
6
|
|
|
7
7
|
## Before starting — find relevant docs
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
10
10
|
|
|
11
|
-
```
|
|
12
|
-
|
|
11
|
+
```
|
|
12
|
+
funifier_search_docs "quiz question answer questionnaire multiple choice survey"
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
16
16
|
|
|
17
17
|
## Primary docs for this skill
|
|
18
18
|
|
|
19
|
-
If search returns insufficient results, read directly:
|
|
19
|
+
If search returns insufficient results, read these directly:
|
|
20
20
|
|
|
21
|
-
- `
|
|
22
|
-
- `
|
|
21
|
+
- `funifier_read_doc path=modules/quiz`
|
|
22
|
+
- `funifier_read_doc path=modules/question`
|
|
23
23
|
|
|
24
24
|
## Steps
|
|
25
25
|
|
|
@@ -45,21 +45,21 @@ Note que `aggregate` é uma **string** contendo JSON serializado (com `\n` e `\"
|
|
|
45
45
|
|
|
46
46
|
## Before starting — find relevant docs
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
49
49
|
|
|
50
|
-
```
|
|
51
|
-
|
|
50
|
+
```
|
|
51
|
+
funifier_search_docs "scheduler cron groovy java scheduled job periodic"
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
55
55
|
|
|
56
56
|
## Primary docs for this skill
|
|
57
57
|
|
|
58
|
-
If search returns insufficient results, read directly:
|
|
58
|
+
If search returns insufficient results, read these directly:
|
|
59
59
|
|
|
60
|
-
- `
|
|
61
|
-
- `
|
|
62
|
-
- `
|
|
60
|
+
- `funifier_read_doc path=modules/scheduler`
|
|
61
|
+
- `funifier_read_doc path=guides/java-managers`
|
|
62
|
+
- `funifier_read_doc path=guides/java-libraries`
|
|
63
63
|
|
|
64
64
|
## Steps
|
|
65
65
|
|
|
@@ -112,8 +112,8 @@ void execute() {
|
|
|
112
112
|
```
|
|
113
113
|
|
|
114
114
|
> Leituras obrigatórias para Groovy avançado:
|
|
115
|
-
> - `
|
|
116
|
-
> - `
|
|
115
|
+
> - `funifier_read_doc path=guides/java-managers`
|
|
116
|
+
> - `funifier_read_doc path=guides/java-libraries`
|
|
117
117
|
|
|
118
118
|
### 4. Montar e salvar o payload
|
|
119
119
|
|
|
@@ -6,19 +6,19 @@ Create a Funifier swap — player-to-player trade offers for items or points wit
|
|
|
6
6
|
|
|
7
7
|
## Before starting — find relevant docs
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
10
10
|
|
|
11
|
-
```
|
|
12
|
-
|
|
11
|
+
```
|
|
12
|
+
funifier_search_docs "swap trade exchange offer counter-offer peer social marketplace"
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
16
16
|
|
|
17
17
|
## Primary docs for this skill
|
|
18
18
|
|
|
19
|
-
If search returns insufficient results, read directly:
|
|
19
|
+
If search returns insufficient results, read these directly:
|
|
20
20
|
|
|
21
|
-
- `
|
|
21
|
+
- `funifier_read_doc path=modules/swap`
|
|
22
22
|
|
|
23
23
|
## Steps
|
|
24
24
|
|