funifier-mcp 0.2.4 → 0.2.8

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 (44) hide show
  1. package/.cursor/rules/funifier.mdc +2 -2
  2. package/.github/copilot-instructions.md +1 -1
  3. package/AGENTS.md +3 -3
  4. package/README.md +109 -190
  5. package/dist/cli/init.js +1 -1
  6. package/dist/cli/init.js.map +1 -1
  7. package/dist/cli/prompts.d.ts +1 -1
  8. package/dist/cli/prompts.d.ts.map +1 -1
  9. package/dist/cli/prompts.js +57 -2
  10. package/dist/cli/prompts.js.map +1 -1
  11. package/dist/cli/search.d.ts +2 -0
  12. package/dist/cli/search.d.ts.map +1 -0
  13. package/dist/cli/search.js +93 -0
  14. package/dist/cli/search.js.map +1 -0
  15. package/dist/core/lexical.d.ts +22 -0
  16. package/dist/core/lexical.d.ts.map +1 -0
  17. package/dist/core/lexical.js +79 -0
  18. package/dist/core/lexical.js.map +1 -0
  19. package/dist/mcp/bundle.js +88 -81
  20. package/dist/mcp/index.js +9 -3
  21. package/dist/mcp/index.js.map +1 -1
  22. package/dist/mcp/tools/database.d.ts.map +1 -1
  23. package/dist/mcp/tools/database.js +33 -21
  24. package/dist/mcp/tools/database.js.map +1 -1
  25. package/dist/mcp/tools/database.test.d.ts +2 -0
  26. package/dist/mcp/tools/database.test.d.ts.map +1 -0
  27. package/dist/mcp/tools/database.test.js +96 -0
  28. package/dist/mcp/tools/database.test.js.map +1 -0
  29. package/package.json +2 -2
  30. package/skills/funifier-create-action/SKILL.md +1 -1
  31. package/skills/funifier-create-aggregate/SKILL.md +1 -1
  32. package/skills/funifier-create-challenge/SKILL.md +1 -1
  33. package/skills/funifier-create-custom-page/SKILL.md +1 -1
  34. package/skills/funifier-create-leaderboard/SKILL.md +1 -1
  35. package/skills/funifier-create-level/SKILL.md +1 -1
  36. package/skills/funifier-create-point/SKILL.md +1 -1
  37. package/skills/funifier-create-quiz/SKILL.md +1 -1
  38. package/skills/funifier-create-scheduler/SKILL.md +1 -1
  39. package/skills/funifier-create-trigger/SKILL.md +1 -1
  40. package/skills/funifier-create-virtual-good/SKILL.md +1 -1
  41. package/skills/funifier-debug/SKILL.md +1 -1
  42. package/skills/funifier-help/SKILL.md +1 -1
  43. package/skills/funifier-implement-frontend/SKILL.md +1 -1
  44. package/skills/funifier-index/SKILL.md +1 -1
package/dist/mcp/index.js CHANGED
@@ -14,6 +14,11 @@ async function main() {
14
14
  await runInit();
15
15
  return;
16
16
  }
17
+ if (subcommand === "search") {
18
+ const { default: runSearch } = require("../cli/search");
19
+ runSearch();
20
+ return;
21
+ }
17
22
  if (subcommand === "--version" || subcommand === "-v") {
18
23
  // eslint-disable-next-line @typescript-eslint/no-var-requires
19
24
  const pkg = require("../../package.json");
@@ -21,9 +26,10 @@ async function main() {
21
26
  return;
22
27
  }
23
28
  if (subcommand === "--help" || subcommand === "-h") {
24
- console.log("Usage: funifier-mcp Start the MCP server (stdio)");
25
- console.log(" funifier-mcp init Interactive setup for AI platforms");
26
- console.log(" funifier-mcp --version Print version");
29
+ console.log("Usage: funifier-mcp Start the MCP server (stdio)");
30
+ console.log(" funifier-mcp init Interactive setup for AI platforms");
31
+ console.log(' funifier-mcp search "<query>" Search Funifier documentation');
32
+ console.log(" funifier-mcp --version Print version");
27
33
  return;
28
34
  }
29
35
  // Create the API holder (manages connection state)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";;;AAEA,oEAAoE;AACpE,wEAAiF;AACjF,6CAAyC;AACzC,mCAAwC;AACxC,6DAA8D;AAC9D,mDAAsD;AAEtD,KAAK,UAAU,IAAI;IACjB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QACpD,MAAM,OAAO,EAAE,CAAC;QAChB,OAAO;IACT,CAAC;IACD,IAAI,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACtD,8DAA8D;QAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IACD,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,mDAAmD;IACnD,MAAM,SAAS,GAAG,IAAI,sBAAS,EAAE,CAAC;IAElC,oEAAoE;IACpE,MAAM,aAAa,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;IAEjD,wBAAwB;IACxB,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC;QAC3B,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,6CAA6C;IAC7C,IAAA,qBAAa,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,IAAA,iCAAiB,EAAC,MAAM,CAAC,CAAC;IAC1B,IAAA,2BAAe,EAAC,MAAM,CAAC,CAAC;IAExB,6BAA6B;IAC7B,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CACX,wFAAwF,CACzF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;IAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";;;AAEA,oEAAoE;AACpE,wEAAiF;AACjF,6CAAyC;AACzC,mCAAwC;AACxC,6DAA8D;AAC9D,mDAAsD;AAEtD,KAAK,UAAU,IAAI;IACjB,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;QACpD,MAAM,OAAO,EAAE,CAAC;QAChB,OAAO;IACT,CAAC;IACD,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;QACxD,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IACD,IAAI,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACtD,8DAA8D;QAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO;IACT,CAAC;IACD,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,gFAAgF,CAAC,CAAC;QAC9F,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;QACzF,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO;IACT,CAAC;IAED,mDAAmD;IACnD,MAAM,SAAS,GAAG,IAAI,sBAAS,EAAE,CAAC;IAElC,oEAAoE;IACpE,MAAM,aAAa,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;IAEjD,wBAAwB;IACxB,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC;QAC3B,IAAI,EAAE,qBAAqB;QAC3B,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,6CAA6C;IAC7C,IAAA,qBAAa,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,IAAA,iCAAiB,EAAC,MAAM,CAAC,CAAC;IAC1B,IAAA,2BAAe,EAAC,MAAM,CAAC,CAAC;IAExB,6BAA6B;IAC7B,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO,CAAC,KAAK,CACX,wFAAwF,CACzF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAC;IAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/database.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QA0M3E"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/database.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QA0N3E"}
@@ -3,6 +3,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerDatabaseTool = registerDatabaseTool;
4
4
  const zod_1 = require("zod");
5
5
  function registerDatabaseTool(server, apiHolder) {
6
+ const MAX_RESPONSE_CHARS = 50000;
7
+ function applyCharGuard(docs, header) {
8
+ const full = JSON.stringify(docs, null, 2);
9
+ if (full.length <= MAX_RESPONSE_CHARS) {
10
+ return { content: [{ type: "text", text: header + "\n\n" + full }] };
11
+ }
12
+ const kept = [];
13
+ let size = 0;
14
+ for (const doc of docs) {
15
+ const s = JSON.stringify(doc, null, 2);
16
+ if (size + s.length > MAX_RESPONSE_CHARS && kept.length > 0)
17
+ break;
18
+ kept.push(doc);
19
+ size += s.length;
20
+ }
21
+ const truncatedJson = JSON.stringify(kept, null, 2);
22
+ const warning = `\n\n⚠ Result truncated: showing ${kept.length} of ${docs.length} document(s) (response exceeded 50k chars). Use a smaller limit, add query filters, or increase offset to paginate.`;
23
+ return {
24
+ content: [{ type: "text", text: header + "\n\n" + truncatedJson + warning }],
25
+ };
26
+ }
6
27
  server.tool("funifier_database", "Query or aggregate any Funifier database collection. Use action='query' for simple queries with filters, or action='aggregate' for MongoDB aggregate pipelines. Use action='collections' to list all available collections.", {
7
28
  action: zod_1.z
8
29
  .enum(["query", "aggregate", "collections", "insert", "update", "delete", "bulk"])
@@ -28,13 +49,17 @@ function registerDatabaseTool(server, apiHolder) {
28
49
  limit: zod_1.z
29
50
  .number()
30
51
  .optional()
31
- .describe("For action='query': Maximum number of documents to return. Default: 20."),
52
+ .describe("For action='query': Maximum number of documents to return. Default: 10."),
53
+ offset: zod_1.z
54
+ .number()
55
+ .optional()
56
+ .describe("For action='query': Number of documents to skip for pagination. Default: 0."),
32
57
  data: zod_1.z
33
58
  .string()
34
59
  .optional()
35
60
  .describe("For insert/update/bulk: JSON string of document(s). For insert: single object. " +
36
61
  "For update: object with _id field. For bulk: array of objects."),
37
- }, async ({ action, collection, query, pipeline, sort, limit, data }) => {
62
+ }, async ({ action, collection, query, pipeline, sort, limit, offset, data }) => {
38
63
  try {
39
64
  const api = apiHolder.requireClient();
40
65
  if (action === "collections") {
@@ -59,17 +84,11 @@ function registerDatabaseTool(server, apiHolder) {
59
84
  const sortObj = sort ? JSON.parse(sort) : undefined;
60
85
  const results = await api.queryCollection(collection, queryFilter, {
61
86
  sort: sortObj,
62
- limit: limit || 20,
87
+ limit: limit ?? 10,
88
+ skip: offset ?? 0,
63
89
  });
64
90
  const header = `Found ${results.length} document(s) in '${collection}':`;
65
- return {
66
- content: [
67
- {
68
- type: "text",
69
- text: header + "\n\n" + JSON.stringify(results, null, 2),
70
- },
71
- ],
72
- };
91
+ return applyCharGuard(results, header);
73
92
  }
74
93
  if (action === "aggregate") {
75
94
  if (!pipeline) {
@@ -80,16 +99,9 @@ function registerDatabaseTool(server, apiHolder) {
80
99
  }
81
100
  const pipelineArr = JSON.parse(pipeline);
82
101
  const results = await api.aggregateCollection(collection, pipelineArr);
83
- const count = Array.isArray(results) ? results.length : "N/A";
84
- const header = `Aggregate result (${count} documents) from '${collection}':`;
85
- return {
86
- content: [
87
- {
88
- type: "text",
89
- text: header + "\n\n" + JSON.stringify(results, null, 2),
90
- },
91
- ],
92
- };
102
+ const docs = Array.isArray(results) ? results : [results];
103
+ const header = `Aggregate result (${docs.length} document(s)) from '${collection}':`;
104
+ return applyCharGuard(docs, header);
93
105
  }
94
106
  if (action === "insert") {
95
107
  if (!data) {
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/mcp/tools/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/mcp/tools/database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=database.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.test.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/database.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const database_1 = require("./database");
5
+ const MAX_CHARS = 50000;
6
+ function makeHarness(fakeApi) {
7
+ const handlers = {};
8
+ const server = {
9
+ tool: (_name, _desc, _schema, handler) => {
10
+ handlers[_name] = handler;
11
+ },
12
+ };
13
+ const apiHolder = { requireClient: () => fakeApi };
14
+ (0, database_1.registerDatabaseTool)(server, apiHolder);
15
+ return (args) => handlers["funifier_database"](args);
16
+ }
17
+ (0, vitest_1.describe)("funifier_database query char guard", () => {
18
+ (0, vitest_1.it)("returns full result when under 50k chars", async () => {
19
+ const docs = [{ _id: "1", name: "small" }];
20
+ const fakeApi = { queryCollection: async () => docs };
21
+ const invoke = makeHarness(fakeApi);
22
+ const result = await invoke({ action: "query", collection: "test", limit: 10 });
23
+ (0, vitest_1.expect)(result.isError).toBeUndefined();
24
+ (0, vitest_1.expect)(result.content[0].text).toContain('"_id": "1"');
25
+ (0, vitest_1.expect)(result.content[0].text).not.toContain("truncated");
26
+ });
27
+ (0, vitest_1.it)("truncates and warns when result exceeds 50k chars", async () => {
28
+ const bigValue = "x".repeat(30000);
29
+ const docs = [
30
+ { _id: "1", payload: bigValue },
31
+ { _id: "2", payload: bigValue },
32
+ ];
33
+ const fakeApi = { queryCollection: async () => docs };
34
+ const invoke = makeHarness(fakeApi);
35
+ const result = await invoke({ action: "query", collection: "scheduler", limit: 10 });
36
+ (0, vitest_1.expect)(result.isError).toBeUndefined();
37
+ const text = result.content[0].text;
38
+ (0, vitest_1.expect)(text).toContain("truncated");
39
+ (0, vitest_1.expect)(text).toContain("showing 1");
40
+ (0, vitest_1.expect)(text.length).toBeLessThan(MAX_CHARS + 500);
41
+ });
42
+ (0, vitest_1.it)("returns first doc even if single doc exceeds 50k chars", async () => {
43
+ const bigValue = "x".repeat(60000);
44
+ const docs = [{ _id: "1", payload: bigValue }];
45
+ const fakeApi = { queryCollection: async () => docs };
46
+ const invoke = makeHarness(fakeApi);
47
+ const result = await invoke({ action: "query", collection: "scheduler", limit: 1 });
48
+ (0, vitest_1.expect)(result.isError).toBeUndefined();
49
+ (0, vitest_1.expect)(result.content[0].text).toContain('"_id": "1"');
50
+ (0, vitest_1.expect)(result.content[0].text).toContain("truncated");
51
+ });
52
+ });
53
+ (0, vitest_1.describe)("funifier_database aggregate char guard", () => {
54
+ (0, vitest_1.it)("truncates and warns when aggregate result exceeds 50k chars", async () => {
55
+ const bigValue = "x".repeat(30000);
56
+ const docs = [{ _id: "1", data: bigValue }, { _id: "2", data: bigValue }];
57
+ const fakeApi = { aggregateCollection: async () => docs };
58
+ const invoke = makeHarness(fakeApi);
59
+ const result = await invoke({
60
+ action: "aggregate",
61
+ collection: "scheduler",
62
+ pipeline: "[]",
63
+ });
64
+ (0, vitest_1.expect)(result.isError).toBeUndefined();
65
+ (0, vitest_1.expect)(result.content[0].text).toContain("truncated");
66
+ });
67
+ });
68
+ (0, vitest_1.describe)("funifier_database offset", () => {
69
+ (0, vitest_1.it)("passes offset as skip to queryCollection", async () => {
70
+ let capturedOptions = null;
71
+ const fakeApi = {
72
+ queryCollection: async (_col, _q, opts) => {
73
+ capturedOptions = opts;
74
+ return [];
75
+ },
76
+ };
77
+ const invoke = makeHarness(fakeApi);
78
+ await invoke({ action: "query", collection: "test", limit: 5, offset: 20 });
79
+ (0, vitest_1.expect)(capturedOptions.skip).toBe(20);
80
+ (0, vitest_1.expect)(capturedOptions.limit).toBe(5);
81
+ });
82
+ (0, vitest_1.it)("defaults offset to 0 when not provided", async () => {
83
+ let capturedOptions = null;
84
+ const fakeApi = {
85
+ queryCollection: async (_col, _q, opts) => {
86
+ capturedOptions = opts;
87
+ return [];
88
+ },
89
+ };
90
+ const invoke = makeHarness(fakeApi);
91
+ await invoke({ action: "query", collection: "test" });
92
+ (0, vitest_1.expect)(capturedOptions.skip).toBe(0);
93
+ (0, vitest_1.expect)(capturedOptions.limit).toBe(10);
94
+ });
95
+ });
96
+ //# sourceMappingURL=database.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.test.js","sourceRoot":"","sources":["../../../src/mcp/tools/database.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.4",
3
+ "version": "0.2.8",
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",
@@ -34,7 +34,7 @@
34
34
  "build": "tsc",
35
35
  "bundle": "npm run build && esbuild dist/mcp/index.js --bundle --outfile=dist/mcp/bundle.js --format=cjs --platform=node --minify",
36
36
  "dev": "tsc --watch",
37
- "prepublishOnly": "npm run bundle",
37
+ "prepublishOnly": "npm run build:skills && npm run bundle",
38
38
  "test": "vitest run",
39
39
  "test:watch": "vitest watch",
40
40
  "build:skills": "tsx scripts/build-skills.ts",
@@ -34,7 +34,7 @@ Só então prossiga com a implementação.
34
34
  Run lexical search to load only what you need:
35
35
 
36
36
  ```bash
37
- npx tsx scripts/search-docs.ts "action track player behavior attributes log event" --skill funifier-create-action
37
+ npx funifier-mcp search "action track player behavior attributes log event" --skill funifier-create-action
38
38
  ```
39
39
 
40
40
  Read only files returned with score > 0.5 (this threshold is printed in the search output).
@@ -73,7 +73,7 @@ Note que `aggregate` é uma **string** contendo JSON serializado (com `\n` e `\"
73
73
  Run lexical search to load only what you need:
74
74
 
75
75
  ```bash
76
- npx tsx scripts/search-docs.ts "aggregate mongodb pipeline report dashboard query prepared" --skill funifier-create-aggregate
76
+ npx funifier-mcp search "aggregate mongodb pipeline report dashboard query prepared" --skill funifier-create-aggregate
77
77
  ```
78
78
 
79
79
  Read only files returned with score > 0.5 (this threshold is printed in the search output).
@@ -34,7 +34,7 @@ Só então prossiga com a implementação.
34
34
  Run lexical search to load only what you need:
35
35
 
36
36
  ```bash
37
- npx tsx scripts/search-docs.ts "challenge mission reward rules action points gamification" --skill funifier-create-challenge
37
+ npx funifier-mcp search "challenge mission reward rules action points gamification" --skill funifier-create-challenge
38
38
  ```
39
39
 
40
40
  Read only files returned with score > 0.5 (this threshold is printed in the search output).
@@ -73,7 +73,7 @@ Note que `aggregate` é uma **string** contendo JSON serializado (com `\n` e `\"
73
73
  Run lexical search to load only what you need:
74
74
 
75
75
  ```bash
76
- npx tsx scripts/search-docs.ts "custom page studio dashboard angularjs bootstrap admin crud kpi" --skill funifier-create-custom-page
76
+ npx funifier-mcp search "custom page studio dashboard angularjs bootstrap admin crud kpi" --skill funifier-create-custom-page
77
77
  ```
78
78
 
79
79
  Read only files returned with score > 0.5 (this threshold is printed in the search output).
@@ -34,7 +34,7 @@ Só então prossiga com a implementação.
34
34
  Run lexical search to load only what you need:
35
35
 
36
36
  ```bash
37
- npx tsx scripts/search-docs.ts "leaderboard ranking score top players classification board" --skill funifier-create-leaderboard
37
+ npx funifier-mcp search "leaderboard ranking score top players classification board" --skill funifier-create-leaderboard
38
38
  ```
39
39
 
40
40
  Read only files returned with score > 0.5 (this threshold is printed in the search output).
@@ -34,7 +34,7 @@ Só então prossiga com a implementação.
34
34
  Run lexical search to load only what you need:
35
35
 
36
36
  ```bash
37
- npx tsx scripts/search-docs.ts "level progression rank tier xp points unlock" --skill funifier-create-level
37
+ npx funifier-mcp search "level progression rank tier xp points unlock" --skill funifier-create-level
38
38
  ```
39
39
 
40
40
  Read only files returned with score > 0.5 (this threshold is printed in the search output).
@@ -34,7 +34,7 @@ Só então prossiga com a implementação.
34
34
  Run lexical search to load only what you need:
35
35
 
36
36
  ```bash
37
- npx tsx scripts/search-docs.ts "point xp coin currency score metric category" --skill funifier-create-point
37
+ npx funifier-mcp search "point xp coin currency score metric category" --skill funifier-create-point
38
38
  ```
39
39
 
40
40
  Read only files returned with score > 0.5 (this threshold is printed in the search output).
@@ -34,7 +34,7 @@ Só então prossiga com a implementação.
34
34
  Run lexical search to load only what you need:
35
35
 
36
36
  ```bash
37
- npx tsx scripts/search-docs.ts "quiz question answer questionnaire multiple choice survey" --skill funifier-create-quiz
37
+ npx funifier-mcp search "quiz question answer questionnaire multiple choice survey" --skill funifier-create-quiz
38
38
  ```
39
39
 
40
40
  Read only files returned with score > 0.5 (this threshold is printed in the search output).
@@ -73,7 +73,7 @@ Note que `aggregate` é uma **string** contendo JSON serializado (com `\n` e `\"
73
73
  Run lexical search to load only what you need:
74
74
 
75
75
  ```bash
76
- npx tsx scripts/search-docs.ts "scheduler cron groovy java scheduled job periodic" --skill funifier-create-scheduler
76
+ npx funifier-mcp search "scheduler cron groovy java scheduled job periodic" --skill funifier-create-scheduler
77
77
  ```
78
78
 
79
79
  Read only files returned with score > 0.5 (this threshold is printed in the search output).
@@ -73,7 +73,7 @@ Note que `aggregate` é uma **string** contendo JSON serializado (com `\n` e `\"
73
73
  Run lexical search to load only what you need:
74
74
 
75
75
  ```bash
76
- npx tsx scripts/search-docs.ts "trigger event groovy java before_create after_win entity script" --skill funifier-create-trigger
76
+ npx funifier-mcp search "trigger event groovy java before_create after_win entity script" --skill funifier-create-trigger
77
77
  ```
78
78
 
79
79
  Read only files returned with score > 0.5 (this threshold is printed in the search output).
@@ -34,7 +34,7 @@ Só então prossiga com a implementação.
34
34
  Run lexical search to load only what you need:
35
35
 
36
36
  ```bash
37
- npx tsx scripts/search-docs.ts "virtual good item catalog store purchase marketplace shop" --skill funifier-create-virtual-good
37
+ npx funifier-mcp search "virtual good item catalog store purchase marketplace shop" --skill funifier-create-virtual-good
38
38
  ```
39
39
 
40
40
  Read only files returned with score > 0.5 (this threshold is printed in the search output).
@@ -34,7 +34,7 @@ Só então prossiga com a implementação.
34
34
  Run lexical search to load only what you need:
35
35
 
36
36
  ```bash
37
- npx tsx scripts/search-docs.ts "debug error log exception timeout groovy stack trace fix" --skill funifier-debug
37
+ npx funifier-mcp search "debug error log exception timeout groovy stack trace fix" --skill funifier-debug
38
38
  ```
39
39
 
40
40
  Read only files returned with score > 0.5 (this threshold is printed in the search output).
@@ -34,7 +34,7 @@ Só então prossiga com a implementação.
34
34
  Run lexical search to load only what you need:
35
35
 
36
36
  ```bash
37
- npx tsx scripts/search-docs.ts "help documentation guide module question how what funifier" --skill funifier-help
37
+ npx funifier-mcp search "help documentation guide module question how what funifier" --skill funifier-help
38
38
  ```
39
39
 
40
40
  Read only files returned with score > 0.5 (this threshold is printed in the search output).
@@ -34,7 +34,7 @@ Só então prossiga com a implementação.
34
34
  Run lexical search to load only what you need:
35
35
 
36
36
  ```bash
37
- npx tsx scripts/search-docs.ts "frontend api authentication fetch jwt token javascript react angular" --skill funifier-implement-frontend
37
+ npx funifier-mcp search "frontend api authentication fetch jwt token javascript react angular" --skill funifier-implement-frontend
38
38
  ```
39
39
 
40
40
  Read only files returned with score > 0.5 (this threshold is printed in the search output).
@@ -12,7 +12,7 @@ description: Entry point for all Funifier skills — routes to the right skill f
12
12
  3. For general questions with no matching skill, run lexical search:
13
13
 
14
14
  ```bash
15
- npx tsx scripts/search-docs.ts "<user question>"
15
+ npx funifier-mcp search "<user question>"
16
16
  ```
17
17
 
18
18
  ## Available Skills