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.
Files changed (81) hide show
  1. package/.cursor/rules/funifier.mdc +7 -7
  2. package/.github/copilot-instructions.md +10 -8
  3. package/AGENTS.md +8 -4
  4. package/README.md +6 -12
  5. package/datasource-funifier-docs/.coverage.json +1 -1
  6. package/dist/cli/init.d.ts.map +1 -1
  7. package/dist/cli/init.js +13 -9
  8. package/dist/cli/init.js.map +1 -1
  9. package/dist/cli/init.test.js +28 -9
  10. package/dist/cli/init.test.js.map +1 -1
  11. package/dist/cli/prompts.d.ts +1 -0
  12. package/dist/cli/prompts.d.ts.map +1 -1
  13. package/dist/cli/prompts.js +8 -0
  14. package/dist/cli/prompts.js.map +1 -1
  15. package/dist/cli/search.js +3 -3
  16. package/dist/cli/search.js.map +1 -1
  17. package/dist/cli/search.test.js +9 -9
  18. package/dist/cli/search.test.js.map +1 -1
  19. package/dist/mcp/bundle.js +85 -84
  20. package/dist/mcp/check-update.d.ts +7 -0
  21. package/dist/mcp/check-update.d.ts.map +1 -1
  22. package/dist/mcp/check-update.js +18 -1
  23. package/dist/mcp/check-update.js.map +1 -1
  24. package/dist/mcp/check-update.test.js +13 -0
  25. package/dist/mcp/check-update.test.js.map +1 -1
  26. package/dist/mcp/resources/documentation.d.ts.map +1 -1
  27. package/dist/mcp/resources/documentation.js +2 -1
  28. package/dist/mcp/resources/documentation.js.map +1 -1
  29. package/dist/mcp/tools/docs-flow.test.d.ts +2 -0
  30. package/dist/mcp/tools/docs-flow.test.d.ts.map +1 -0
  31. package/dist/mcp/tools/docs-flow.test.js +91 -0
  32. package/dist/mcp/tools/docs-flow.test.js.map +1 -0
  33. package/dist/mcp/tools/index.d.ts.map +1 -1
  34. package/dist/mcp/tools/index.js +2 -0
  35. package/dist/mcp/tools/index.js.map +1 -1
  36. package/dist/mcp/tools/read-doc.d.ts +3 -0
  37. package/dist/mcp/tools/read-doc.d.ts.map +1 -0
  38. package/dist/mcp/tools/read-doc.js +97 -0
  39. package/dist/mcp/tools/read-doc.js.map +1 -0
  40. package/dist/mcp/tools/read-doc.test.d.ts +2 -0
  41. package/dist/mcp/tools/read-doc.test.d.ts.map +1 -0
  42. package/dist/mcp/tools/read-doc.test.js +92 -0
  43. package/dist/mcp/tools/read-doc.test.js.map +1 -0
  44. package/dist/mcp/tools/search-docs.js +3 -3
  45. package/dist/mcp/tools/search-docs.js.map +1 -1
  46. package/dist/mcp/tools/search-docs.test.d.ts +2 -0
  47. package/dist/mcp/tools/search-docs.test.d.ts.map +1 -0
  48. package/dist/mcp/tools/search-docs.test.js +100 -0
  49. package/dist/mcp/tools/search-docs.test.js.map +1 -0
  50. package/package.json +1 -1
  51. package/skills/funifier/SKILL.md +5 -3
  52. package/skills/funifier/references/configure-security.md +7 -7
  53. package/skills/funifier/references/create-action.md +7 -7
  54. package/skills/funifier/references/create-aggregate.md +8 -8
  55. package/skills/funifier/references/create-challenge.md +8 -8
  56. package/skills/funifier/references/create-competition.md +6 -6
  57. package/skills/funifier/references/create-crossword.md +1 -1
  58. package/skills/funifier/references/create-custom-object.md +7 -7
  59. package/skills/funifier/references/create-custom-page.md +8 -8
  60. package/skills/funifier/references/create-folder.md +6 -6
  61. package/skills/funifier/references/create-lastmile.md +1 -1
  62. package/skills/funifier/references/create-leaderboard.md +8 -8
  63. package/skills/funifier/references/create-level.md +7 -7
  64. package/skills/funifier/references/create-notification.md +7 -7
  65. package/skills/funifier/references/create-point.md +7 -7
  66. package/skills/funifier/references/create-quiz.md +7 -7
  67. package/skills/funifier/references/create-scheduler.md +10 -10
  68. package/skills/funifier/references/create-story.md +1 -1
  69. package/skills/funifier/references/create-swap.md +6 -6
  70. package/skills/funifier/references/create-trigger.md +14 -14
  71. package/skills/funifier/references/create-virtual-good.md +7 -7
  72. package/skills/funifier/references/create-webhook.md +7 -7
  73. package/skills/funifier/references/create-websocket.md +8 -8
  74. package/skills/funifier/references/create-widget.md +7 -7
  75. package/skills/funifier/references/debug.md +16 -16
  76. package/skills/funifier/references/help.md +8 -8
  77. package/skills/funifier/references/implement-frontend.md +15 -15
  78. package/skills/funifier/references/import-csv.md +7 -7
  79. package/skills/funifier/references/manage-player.md +6 -6
  80. package/skills/funifier/references/manage-team.md +6 -6
  81. 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "funifier-mcp",
3
- "version": "0.2.28",
3
+ "version": "0.3.1",
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",
@@ -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, run lexical search:
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
- Run lexical search to load only what you need:
9
+ Use the `funifier_search_docs` MCP tool to load only what you need:
10
10
 
11
- ```bash
12
- npx funifier-mcp search "security role scope token auth app permission basic bearer access-control" --skill funifier-configure-security
11
+ ```
12
+ funifier_search_docs "security role scope token auth app permission basic bearer access-control"
13
13
  ```
14
14
 
15
- Read only files returned with score > 0.5 (this threshold is printed in the search output).
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
- - `datasource-funifier-docs/knowledge/modules/security.md`
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
- datasource-funifier-docs/knowledge/modules/security.md
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
- Run lexical search to load only what you need:
9
+ Use the `funifier_search_docs` MCP tool to load only what you need:
10
10
 
11
- ```bash
12
- npx funifier-mcp search "action track player behavior attributes log event" --skill funifier-create-action
11
+ ```
12
+ funifier_search_docs "action track player behavior attributes log event"
13
13
  ```
14
14
 
15
- Read only files returned with score > 0.5 (this threshold is printed in the search output).
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
- - `datasource-funifier-docs/knowledge/modules/action.md`
22
- - `datasource-funifier-docs/knowledge/modules/action-log.md`
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
- Run lexical search to load only what you need:
48
+ Use the `funifier_search_docs` MCP tool to load only what you need:
49
49
 
50
- ```bash
51
- npx funifier-mcp search "aggregate mongodb pipeline report dashboard query prepared" --skill funifier-create-aggregate
50
+ ```
51
+ funifier_search_docs "aggregate mongodb pipeline report dashboard query prepared"
52
52
  ```
53
53
 
54
- Read only files returned with score > 0.5 (this threshold is printed in the search output).
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
- - `datasource-funifier-docs/knowledge/guides/aggregates.md`
61
- - `datasource-funifier-docs/knowledge/guides/database-access.md`
62
- - `datasource-funifier-docs/knowledge/modules/database.md`
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
- Run lexical search to load only what you need:
9
+ Use the `funifier_search_docs` MCP tool to load only what you need:
10
10
 
11
- ```bash
12
- npx funifier-mcp search "challenge mission reward rules action points gamification" --skill funifier-create-challenge
11
+ ```
12
+ funifier_search_docs "challenge mission reward rules action points gamification"
13
13
  ```
14
14
 
15
- Read only files returned with score > 0.5 (this threshold is printed in the search output).
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
- - `datasource-funifier-docs/knowledge/modules/challenge.md`
22
- - `datasource-funifier-docs/knowledge/modules/action.md`
23
- - `datasource-funifier-docs/knowledge/modules/point.md`
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
- Run lexical search to load only what you need:
9
+ Use the `funifier_search_docs` MCP tool to load only what you need:
10
10
 
11
- ```bash
12
- npx funifier-mcp search "competition contest ranking tournament enrollment rewards position gt26" --skill funifier-create-competition
11
+ ```
12
+ funifier_search_docs "competition contest ranking tournament enrollment rewards position gt26"
13
13
  ```
14
14
 
15
- Read only files returned with score > 0.5 (this threshold is printed in the search output).
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
- - `datasource-funifier-docs/knowledge/modules/competition.md`
21
+ - `funifier_read_doc path=modules/competition`
22
22
 
23
23
  ## Steps
24
24
 
@@ -542,7 +542,7 @@ funifier_list type=crossword search=<titulo>
542
542
  ### 2. Ler a documentação do módulo
543
543
 
544
544
  ```
545
- datasource-funifier-docs/knowledge/modules/crossword.md
545
+ funifier_read_doc path=modules/crossword
546
546
  ```
547
547
 
548
548
  ### 3. Criar o crossword
@@ -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
- Run lexical search to load only what you need:
9
+ Use the `funifier_search_docs` MCP tool to load only what you need:
10
10
 
11
- ```bash
12
- npx funifier-mcp search "custom object collection database crud __c domain entity business" --skill funifier-create-custom-object
11
+ ```
12
+ funifier_search_docs "custom object collection database crud __c domain entity business"
13
13
  ```
14
14
 
15
- Read only files returned with score > 0.5 (this threshold is printed in the search output).
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
- - `datasource-funifier-docs/knowledge/modules/custom-object.md`
22
- - `datasource-funifier-docs/knowledge/modules/database.md`
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
- Run lexical search to load only what you need:
48
+ Use the `funifier_search_docs` MCP tool to load only what you need:
49
49
 
50
- ```bash
51
- npx funifier-mcp search "custom page studio dashboard angularjs bootstrap admin crud kpi" --skill funifier-create-custom-page
50
+ ```
51
+ funifier_search_docs "custom page studio dashboard angularjs bootstrap admin crud kpi"
52
52
  ```
53
53
 
54
- Read only files returned with score > 0.5 (this threshold is printed in the search output).
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
- - `datasource-funifier-docs/knowledge/modules/studio-page.md`
61
- - `datasource-funifier-docs/knowledge/guides/aggregates.md`
62
- - `datasource-funifier-docs/knowledge/modules/auth.md`
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
- Run lexical search to load only what you need:
9
+ Use the `funifier_search_docs` MCP tool to load only what you need:
10
10
 
11
- ```bash
12
- npx funifier-mcp search "folder trail course learning progress content hierarchy unlock training lms" --skill funifier-create-folder
11
+ ```
12
+ funifier_search_docs "folder trail course learning progress content hierarchy unlock training lms"
13
13
  ```
14
14
 
15
- Read only files returned with score > 0.5 (this threshold is printed in the search output).
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
- - `datasource-funifier-docs/knowledge/modules/folder.md`
21
+ - `funifier_read_doc path=modules/folder`
22
22
 
23
23
  ## Steps
24
24
 
@@ -616,7 +616,7 @@ funifier_list type=lastmile search=<descricao>
616
616
  ### 3. Ler a documentação do módulo
617
617
 
618
618
  ```
619
- datasource-funifier-docs/knowledge/modules/lastmile.md
619
+ funifier_read_doc path=modules/lastmile
620
620
  ```
621
621
 
622
622
  ### 4. Criar o lastmile
@@ -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
- Run lexical search to load only what you need:
9
+ Use the `funifier_search_docs` MCP tool to load only what you need:
10
10
 
11
- ```bash
12
- npx funifier-mcp search "leaderboard ranking score top players classification board" --skill funifier-create-leaderboard
11
+ ```
12
+ funifier_search_docs "leaderboard ranking score top players classification board"
13
13
  ```
14
14
 
15
- Read only files returned with score > 0.5 (this threshold is printed in the search output).
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
- - `datasource-funifier-docs/knowledge/modules/leaderboard.md`
22
- - `datasource-funifier-docs/knowledge/modules/point.md`
23
- - `datasource-funifier-docs/knowledge/modules/action.md`
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
- Run lexical search to load only what you need:
9
+ Use the `funifier_search_docs` MCP tool to load only what you need:
10
10
 
11
- ```bash
12
- npx funifier-mcp search "level progression rank tier xp points unlock" --skill funifier-create-level
11
+ ```
12
+ funifier_search_docs "level progression rank tier xp points unlock"
13
13
  ```
14
14
 
15
- Read only files returned with score > 0.5 (this threshold is printed in the search output).
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
- - `datasource-funifier-docs/knowledge/modules/level.md`
22
- - `datasource-funifier-docs/knowledge/modules/point.md`
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
- Run lexical search to load only what you need:
9
+ Use the `funifier_search_docs` MCP tool to load only what you need:
10
10
 
11
- ```bash
12
- npx funifier-mcp search "notification message push feedback alert player event" --skill funifier-create-notification
11
+ ```
12
+ funifier_search_docs "notification message push feedback alert player event"
13
13
  ```
14
14
 
15
- Read only files returned with score > 0.5 (this threshold is printed in the search output).
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
- - `datasource-funifier-docs/knowledge/modules/notification.md`
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
- datasource-funifier-docs/knowledge/modules/notification.md
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
- Run lexical search to load only what you need:
9
+ Use the `funifier_search_docs` MCP tool to load only what you need:
10
10
 
11
- ```bash
12
- npx funifier-mcp search "point xp coin currency score metric category" --skill funifier-create-point
11
+ ```
12
+ funifier_search_docs "point xp coin currency score metric category"
13
13
  ```
14
14
 
15
- Read only files returned with score > 0.5 (this threshold is printed in the search output).
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
- - `datasource-funifier-docs/knowledge/modules/point.md`
22
- - `datasource-funifier-docs/knowledge/modules/achievement.md`
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
- Run lexical search to load only what you need:
9
+ Use the `funifier_search_docs` MCP tool to load only what you need:
10
10
 
11
- ```bash
12
- npx funifier-mcp search "quiz question answer questionnaire multiple choice survey" --skill funifier-create-quiz
11
+ ```
12
+ funifier_search_docs "quiz question answer questionnaire multiple choice survey"
13
13
  ```
14
14
 
15
- Read only files returned with score > 0.5 (this threshold is printed in the search output).
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
- - `datasource-funifier-docs/knowledge/modules/quiz.md`
22
- - `datasource-funifier-docs/knowledge/modules/question.md`
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
- Run lexical search to load only what you need:
48
+ Use the `funifier_search_docs` MCP tool to load only what you need:
49
49
 
50
- ```bash
51
- npx funifier-mcp search "scheduler cron groovy java scheduled job periodic" --skill funifier-create-scheduler
50
+ ```
51
+ funifier_search_docs "scheduler cron groovy java scheduled job periodic"
52
52
  ```
53
53
 
54
- Read only files returned with score > 0.5 (this threshold is printed in the search output).
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
- - `datasource-funifier-docs/knowledge/modules/scheduler.md`
61
- - `datasource-funifier-docs/knowledge/guides/java-managers.md`
62
- - `datasource-funifier-docs/knowledge/guides/java-libraries.md`
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
- > - `datasource-funifier-docs/knowledge/guides/java-managers.md`
116
- > - `datasource-funifier-docs/knowledge/guides/java-libraries.md`
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
 
@@ -603,7 +603,7 @@ funifier_list type=story search=<titulo>
603
603
  ### 2. Ler a documentação do módulo
604
604
 
605
605
  ```
606
- datasource-funifier-docs/knowledge/modules/story.md
606
+ funifier_read_doc path=modules/story
607
607
  ```
608
608
 
609
609
  ### 3. Criar a história
@@ -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
- Run lexical search to load only what you need:
9
+ Use the `funifier_search_docs` MCP tool to load only what you need:
10
10
 
11
- ```bash
12
- npx funifier-mcp search "swap trade exchange offer counter-offer peer social marketplace" --skill funifier-create-swap
11
+ ```
12
+ funifier_search_docs "swap trade exchange offer counter-offer peer social marketplace"
13
13
  ```
14
14
 
15
- Read only files returned with score > 0.5 (this threshold is printed in the search output).
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
- - `datasource-funifier-docs/knowledge/modules/swap.md`
21
+ - `funifier_read_doc path=modules/swap`
22
22
 
23
23
  ## Steps
24
24