funifier-mcp 0.3.18 → 0.3.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/.cursor/rules/funifier.mdc +2 -1
  2. package/.github/copilot-instructions.md +2 -1
  3. package/AGENTS.md +2 -1
  4. package/CHANGELOG.md +78 -0
  5. package/README.md +1 -1
  6. package/datasource-funifier-docs/.coverage.json +4 -1
  7. package/datasource-funifier-docs/.search-index.json +949 -605
  8. package/datasource-funifier-docs/.skills-map.json +5 -0
  9. package/datasource-funifier-docs/.validation.json +12 -7
  10. package/datasource-funifier-docs/knowledge/guides/aggregates.md +13 -6
  11. package/datasource-funifier-docs/knowledge/guides/trigger-examples.md +6 -6
  12. package/datasource-funifier-docs/knowledge/guides/triggers-guide.md +74 -11
  13. package/datasource-funifier-docs/knowledge/index.md +2 -2
  14. package/datasource-funifier-docs/knowledge/modules/trigger.md +29 -1
  15. package/dist/cli/init.d.ts.map +1 -1
  16. package/dist/cli/init.js +3 -1
  17. package/dist/cli/init.js.map +1 -1
  18. package/dist/core/api-client.d.ts +2 -0
  19. package/dist/core/api-client.d.ts.map +1 -1
  20. package/dist/core/api-client.js +98 -47
  21. package/dist/core/api-client.js.map +1 -1
  22. package/dist/core/api-client.test.js +27 -0
  23. package/dist/core/api-client.test.js.map +1 -1
  24. package/dist/core/constants.d.ts +4 -0
  25. package/dist/core/constants.d.ts.map +1 -1
  26. package/dist/core/constants.js +8 -0
  27. package/dist/core/constants.js.map +1 -1
  28. package/dist/core/logger.d.ts +9 -0
  29. package/dist/core/logger.d.ts.map +1 -0
  30. package/dist/core/logger.js +50 -0
  31. package/dist/core/logger.js.map +1 -0
  32. package/dist/mcp/api-holder.test.d.ts +2 -0
  33. package/dist/mcp/api-holder.test.d.ts.map +1 -0
  34. package/dist/mcp/api-holder.test.js +45 -0
  35. package/dist/mcp/api-holder.test.js.map +1 -0
  36. package/dist/mcp/bundle.js +114 -111
  37. package/dist/mcp/check-update.d.ts +9 -0
  38. package/dist/mcp/check-update.d.ts.map +1 -1
  39. package/dist/mcp/check-update.js +35 -9
  40. package/dist/mcp/check-update.js.map +1 -1
  41. package/dist/mcp/check-update.test.js +36 -6
  42. package/dist/mcp/check-update.test.js.map +1 -1
  43. package/dist/mcp/doc-path.d.ts +11 -0
  44. package/dist/mcp/doc-path.d.ts.map +1 -0
  45. package/dist/mcp/doc-path.js +66 -0
  46. package/dist/mcp/doc-path.js.map +1 -0
  47. package/dist/mcp/doc-path.test.d.ts +2 -0
  48. package/dist/mcp/doc-path.test.d.ts.map +1 -0
  49. package/dist/mcp/doc-path.test.js +77 -0
  50. package/dist/mcp/doc-path.test.js.map +1 -0
  51. package/dist/mcp/index.js +19 -0
  52. package/dist/mcp/index.js.map +1 -1
  53. package/dist/mcp/resources/documentation.d.ts.map +1 -1
  54. package/dist/mcp/resources/documentation.js +7 -3
  55. package/dist/mcp/resources/documentation.js.map +1 -1
  56. package/dist/mcp/tools/_backup.d.ts.map +1 -1
  57. package/dist/mcp/tools/_backup.js +5 -3
  58. package/dist/mcp/tools/_backup.js.map +1 -1
  59. package/dist/mcp/tools/_char-guard.d.ts +2 -1
  60. package/dist/mcp/tools/_char-guard.d.ts.map +1 -1
  61. package/dist/mcp/tools/_char-guard.js +10 -3
  62. package/dist/mcp/tools/_char-guard.js.map +1 -1
  63. package/dist/mcp/tools/_fetch-current.d.ts +2 -1
  64. package/dist/mcp/tools/_fetch-current.d.ts.map +1 -1
  65. package/dist/mcp/tools/_fetch-current.js +2 -74
  66. package/dist/mcp/tools/_fetch-current.js.map +1 -1
  67. package/dist/mcp/tools/_registry.d.ts +183 -0
  68. package/dist/mcp/tools/_registry.d.ts.map +1 -0
  69. package/dist/mcp/tools/_registry.js +88 -0
  70. package/dist/mcp/tools/_registry.js.map +1 -0
  71. package/dist/mcp/tools/_registry.test.d.ts +2 -0
  72. package/dist/mcp/tools/_registry.test.d.ts.map +1 -0
  73. package/dist/mcp/tools/_registry.test.js +103 -0
  74. package/dist/mcp/tools/_registry.test.js.map +1 -0
  75. package/dist/mcp/tools/database.d.ts +4 -0
  76. package/dist/mcp/tools/database.d.ts.map +1 -1
  77. package/dist/mcp/tools/database.js +23 -4
  78. package/dist/mcp/tools/database.js.map +1 -1
  79. package/dist/mcp/tools/database.test.js +19 -0
  80. package/dist/mcp/tools/database.test.js.map +1 -1
  81. package/dist/mcp/tools/delete.d.ts.map +1 -1
  82. package/dist/mcp/tools/delete.js +3 -98
  83. package/dist/mcp/tools/delete.js.map +1 -1
  84. package/dist/mcp/tools/execute.d.ts.map +1 -1
  85. package/dist/mcp/tools/execute.js +36 -4
  86. package/dist/mcp/tools/execute.js.map +1 -1
  87. package/dist/mcp/tools/execute.test.d.ts +2 -0
  88. package/dist/mcp/tools/execute.test.d.ts.map +1 -0
  89. package/dist/mcp/tools/execute.test.js +87 -0
  90. package/dist/mcp/tools/execute.test.js.map +1 -0
  91. package/dist/mcp/tools/get.d.ts.map +1 -1
  92. package/dist/mcp/tools/get.js +4 -93
  93. package/dist/mcp/tools/get.js.map +1 -1
  94. package/dist/mcp/tools/index.d.ts.map +1 -1
  95. package/dist/mcp/tools/index.js +42 -1
  96. package/dist/mcp/tools/index.js.map +1 -1
  97. package/dist/mcp/tools/list.d.ts.map +1 -1
  98. package/dist/mcp/tools/list.js +3 -91
  99. package/dist/mcp/tools/list.js.map +1 -1
  100. package/dist/mcp/tools/logs.d.ts.map +1 -1
  101. package/dist/mcp/tools/logs.js +5 -3
  102. package/dist/mcp/tools/logs.js.map +1 -1
  103. package/dist/mcp/tools/read-doc.d.ts.map +1 -1
  104. package/dist/mcp/tools/read-doc.js +10 -28
  105. package/dist/mcp/tools/read-doc.js.map +1 -1
  106. package/dist/mcp/tools/save.d.ts.map +1 -1
  107. package/dist/mcp/tools/save.js +4 -81
  108. package/dist/mcp/tools/save.js.map +1 -1
  109. package/package.json +3 -2
  110. package/skills/funifier/SKILL.md +2 -1
  111. package/skills/funifier/references/audit-permissions.md +8 -0
  112. package/skills/funifier/references/configure-security.md +6 -0
  113. package/skills/funifier/references/create-action.md +7 -0
  114. package/skills/funifier/references/create-aggregate.md +99 -79
  115. package/skills/funifier/references/create-audit.md +8 -0
  116. package/skills/funifier/references/create-challenge.md +7 -0
  117. package/skills/funifier/references/create-competition.md +7 -0
  118. package/skills/funifier/references/create-crossword.md +6 -0
  119. package/skills/funifier/references/create-custom-object.md +6 -0
  120. package/skills/funifier/references/create-custom-page.md +6 -0
  121. package/skills/funifier/references/create-folder.md +7 -0
  122. package/skills/funifier/references/create-lastmile.md +6 -0
  123. package/skills/funifier/references/create-leaderboard.md +6 -0
  124. package/skills/funifier/references/create-level.md +7 -0
  125. package/skills/funifier/references/create-lottery.md +7 -0
  126. package/skills/funifier/references/create-mystery.md +6 -0
  127. package/skills/funifier/references/create-notification.md +6 -0
  128. package/skills/funifier/references/create-point.md +7 -0
  129. package/skills/funifier/references/create-quiz.md +7 -0
  130. package/skills/funifier/references/create-scheduler.md +6 -0
  131. package/skills/funifier/references/create-story.md +6 -0
  132. package/skills/funifier/references/create-swap.md +6 -0
  133. package/skills/funifier/references/create-trigger.md +28 -8
  134. package/skills/funifier/references/create-virtual-good.md +6 -0
  135. package/skills/funifier/references/create-webhook.md +6 -0
  136. package/skills/funifier/references/create-websocket.md +6 -0
  137. package/skills/funifier/references/create-widget.md +6 -0
  138. package/skills/funifier/references/date-handling.md +6 -0
  139. package/skills/funifier/references/help.md +6 -0
  140. package/skills/funifier/references/implement-frontend.md +7 -0
  141. package/skills/funifier/references/import-csv.md +6 -0
  142. package/skills/funifier/references/manage-indexes.md +6 -0
  143. package/skills/funifier/references/manage-player.md +7 -0
  144. package/skills/funifier/references/manage-team.md +6 -0
  145. package/skills/funifier/references/query-aggregate.md +111 -0
  146. package/skills/funifier/references/upload-file.md +6 -0
@@ -27,7 +27,8 @@ Then read a result with `funifier_read_doc path=<path>`.
27
27
  |-----------|-------------|
28
28
  | `skills/funifier/references/create-trigger.md` | Create a Funifier trigger — guided workflow from entity/event selection to Groovy code generation |
29
29
  | `skills/funifier/references/create-scheduler.md` | Create a Funifier scheduler — guided workflow from naming and cron expression to Groovy code generation |
30
- | `skills/funifier/references/create-aggregate.md` | Create a Funifier prepared aggregate guided workflow for building MongoDB aggregate pipelines for reports and dashboards |
30
+ | `skills/funifier/references/query-aggregate.md` | Run an ad-hoc MongoDB aggregate (one-off query) on a Funifier collection via POST /v3/database/{collection}/aggregate for reports and exploration, without saving a resource |
31
+ | `skills/funifier/references/create-aggregate.md` | Create/edit a Funifier prepared aggregate — a saved pipeline with _id, $param placeholders, optional Groovy script, cache and execution via POST /v3/find/{id}; for reusable dashboards and parametrized reports |
31
32
  | `skills/funifier/references/date-handling.md` | Create, edit, or query Date fields safely via REST, funifier_database, triggers, schedulers, aggregate, and prepared aggregate; use whenever a payload or filter contains dates |
32
33
  | `skills/funifier/references/create-challenge.md` | Create a Funifier challenge — missions with action rules and point rewards |
33
34
  | `skills/funifier/references/create-action.md` | Create a Funifier action — define trackable player behaviors with attributes |
@@ -20,7 +20,8 @@ Detailed guided workflows live in `skills/funifier/references/`:
20
20
  |-----------|-------------|
21
21
  | `skills/funifier/references/create-trigger.md` | Create a Funifier trigger — guided workflow from entity/event selection to Groovy code generation |
22
22
  | `skills/funifier/references/create-scheduler.md` | Create a Funifier scheduler — guided workflow from naming and cron expression to Groovy code generation |
23
- | `skills/funifier/references/create-aggregate.md` | Create a Funifier prepared aggregate guided workflow for building MongoDB aggregate pipelines for reports and dashboards |
23
+ | `skills/funifier/references/query-aggregate.md` | Run an ad-hoc MongoDB aggregate (one-off query) on a Funifier collection via POST /v3/database/{collection}/aggregate for reports and exploration, without saving a resource |
24
+ | `skills/funifier/references/create-aggregate.md` | Create/edit a Funifier prepared aggregate — a saved pipeline with _id, $param placeholders, optional Groovy script, cache and execution via POST /v3/find/{id}; for reusable dashboards and parametrized reports |
24
25
  | `skills/funifier/references/date-handling.md` | Create, edit, or query Date fields safely via REST, funifier_database, triggers, schedulers, aggregate, and prepared aggregate; use whenever a payload or filter contains dates |
25
26
  | `skills/funifier/references/create-challenge.md` | Create a Funifier challenge — missions with action rules and point rewards |
26
27
  | `skills/funifier/references/create-action.md` | Create a Funifier action — define trackable player behaviors with attributes |
package/AGENTS.md CHANGED
@@ -59,7 +59,8 @@ Before any `funifier_*` MCP tool call or Funifier task, find the matching row an
59
59
  |-----------|-------------|
60
60
  | `skills/funifier/references/create-trigger.md` | Create a Funifier trigger — guided workflow from entity/event selection to Groovy code generation |
61
61
  | `skills/funifier/references/create-scheduler.md` | Create a Funifier scheduler — guided workflow from naming and cron expression to Groovy code generation |
62
- | `skills/funifier/references/create-aggregate.md` | Create a Funifier prepared aggregate guided workflow for building MongoDB aggregate pipelines for reports and dashboards |
62
+ | `skills/funifier/references/query-aggregate.md` | Run an ad-hoc MongoDB aggregate (one-off query) on a Funifier collection via POST /v3/database/{collection}/aggregate for reports and exploration, without saving a resource |
63
+ | `skills/funifier/references/create-aggregate.md` | Create/edit a Funifier prepared aggregate — a saved pipeline with _id, $param placeholders, optional Groovy script, cache and execution via POST /v3/find/{id}; for reusable dashboards and parametrized reports |
63
64
  | `skills/funifier/references/date-handling.md` | Create, edit, or query Date fields safely via REST, funifier_database, triggers, schedulers, aggregate, and prepared aggregate; use whenever a payload or filter contains dates |
64
65
  | `skills/funifier/references/create-challenge.md` | Create a Funifier challenge — missions with action rules and point rewards |
65
66
  | `skills/funifier/references/create-action.md` | Create a Funifier action — define trackable player behaviors with attributes |
package/CHANGELOG.md ADDED
@@ -0,0 +1,78 @@
1
+ # Changelog
2
+
3
+ All notable changes to `funifier-mcp` are documented here. Format loosely follows
4
+ [Keep a Changelog](https://keepachangelog.com/); versions follow semver.
5
+
6
+ ## [0.3.20]
7
+
8
+ Documentation of trigger flow-interruption (strict mode) in the Funifier knowledge base.
9
+
10
+ ### Documentation
11
+ - **Document `TriggerManager.executeStrict` (strict mode).** `DatabaseRest.insert/update/delete`
12
+ run `before_create`/`before_update`/`before_delete` triggers on database collections
13
+ (`/v3/database/{collection}`) in strict mode: an exception in the script aborts the
14
+ operation (document not written/removed; API responds **HTTP 500** with
15
+ `{ "message", "statusCode": 500 }`). Every other path (player/action/swap/quiz/bulk/`after_*`)
16
+ still uses plain `execute()`, which swallows exceptions and persists the document.
17
+ - **Mode A (strict `throw`) vs Mode B (`after_create` + delete).** Rewrote
18
+ `guides/triggers-guide.md` §8 and updated `guides/trigger-examples.md` and
19
+ `modules/trigger.md` (new §2.5.1 `execute` vs `executeStrict`) to distinguish the two
20
+ rejection patterns and when each applies.
21
+ - **Version-dependent feature + detection probe.** Strict mode was added in a recent Engine
22
+ update and is not on every instance; docs and the `funifier-create-trigger` skill now
23
+ include a disposable-trigger probe to detect support before relying on it.
24
+
25
+ ## [0.3.19]
26
+
27
+ Implementation of the prioritized improvements from the MCP implementation review
28
+ (`.specs/features/mcp-implementation-review/review-report.md`).
29
+
30
+ ### Security
31
+ - **Stop leaking credentials in logs (P0/S1).** API errors are now logged through a
32
+ sanitizer that emits only the message + status; the raw axios error (which carries
33
+ `Authorization: Basic …` and the request body) is never written to stderr.
34
+ - **Close path traversal in the docs resource (P0/S2).** `funifier://docs/{+path}` now
35
+ shares the same root-confinement guard as `funifier_read_doc` via `src/mcp/doc-path.ts`,
36
+ blocking `../` escapes.
37
+ - **Restrict file permissions (P1/S3).** `funifier.json` and backup snapshots are written
38
+ with mode `0600` and the backup directory with `0700` (both hold plaintext secrets).
39
+ - **Mark untrusted API data (P2/S6).** `funifier_database` query/aggregate and
40
+ `funifier_logs` responses are prefixed with a delimiter telling the agent to treat
41
+ end-user-influenced data as data, never as instructions.
42
+
43
+ ### Reliability
44
+ - **Request timeout + retry (P0/P3).** The axios client now aborts after 30s and retries
45
+ idempotent GETs (network error / timeout / 5xx) with exponential backoff.
46
+ - **Graceful shutdown (P2/M1).** The server closes the transport on `SIGTERM`/`SIGINT`.
47
+
48
+ ### Performance / token usage
49
+ - **Aggregate result cap (P1).** Ad-hoc aggregate pipelines without an explicit `$limit`
50
+ get a `$limit:1000` backstop, and prepared-aggregate `run` results pass through the
51
+ response size guard.
52
+
53
+ ### Maintainability
54
+ - **Resource-type registry (P1/A1).** `src/mcp/tools/_registry.ts` is now the single
55
+ source of truth mapping each resource type to its api-client methods and tool exposure,
56
+ replacing the duplicated switch/dispatch blocks in `save`/`delete`/`get`/`list`/
57
+ `_fetch-current`. A consistency test freezes per-tool membership and verifies every
58
+ registered method exists on the client.
59
+ - **Structured logging (P1/O1).** A minimal JSON-lines stderr logger (`src/core/logger.ts`)
60
+ records one line per tool call (tool, duration, outcome) and the reason whenever a list
61
+ call returns `[]` due to an error.
62
+
63
+ ### Update notifications
64
+ - The in-session update notice now links to this changelog, and scales its tone with
65
+ severity: routine patch/minor updates get a quiet one-liner, while major bumps
66
+ (including pre-1.0 minor bumps, per semver convention) warn about breaking changes
67
+ and tell the user to review the changelog before updating.
68
+
69
+ ### Tests
70
+ - Added coverage for the doc-path guard, retry policy, aggregate cap, resource registry
71
+ dispatch/consistency, `ApiHolder`, and severity-aware update notices. Suite: 471 tests passing.
72
+
73
+ ### Deferred (documented, not changed)
74
+ - Replacing the global `Range: items=0-1000` header with per-call pagination on the
75
+ generic list tool (platform-wide behavior change — needs a deliberate decision).
76
+ - True GET-by-id in `fetchCurrentById` (most Funifier resources expose only list endpoints).
77
+ - Automatic backup retention/expiry (auto-deleting snapshots is destructive; left manual).
78
+ - Server-side aggregate stage denylist (`$out`/`$merge`) — pending confirmation of backend behavior.
package/README.md CHANGED
@@ -7,7 +7,7 @@ Funifier AI toolkit — API client, MCP server, and AI assistant skills for the
7
7
  | Component | Description |
8
8
  |-----------|-------------|
9
9
  | **API Client** | Pure Node.js client for the Funifier REST API (80+ methods, 18 resource types) |
10
- | **MCP Server** | Model Context Protocol server — 11 tools, 3 prompts, documentation resources |
10
+ | **MCP Server** | Model Context Protocol server — 14 tools, 3 prompts, documentation resources |
11
11
  | **Skills** | 32 guided workflows for Claude Code, Codex, OpenCode, Copilot, Continue, and Cursor |
12
12
  | **CLI** | `npx funifier-mcp@latest init` — interactive setup for AI platforms |
13
13
 
@@ -1,10 +1,11 @@
1
1
  {
2
- "generatedAt": "2026-06-12T16:15:00.000Z",
2
+ "generatedAt": "2026-06-22T14:54:00.000Z",
3
3
  "docsRoot": "datasource-funifier-docs/",
4
4
  "docs": {
5
5
  "knowledge/guides/aggregates.md": {
6
6
  "status": "grouped",
7
7
  "skillIds": [
8
+ "funifier-query-aggregate",
8
9
  "funifier-create-aggregate",
9
10
  "funifier-date-handling",
10
11
  "funifier-create-custom-page",
@@ -15,6 +16,7 @@
15
16
  "knowledge/guides/database-access.md": {
16
17
  "status": "grouped",
17
18
  "skillIds": [
19
+ "funifier-query-aggregate",
18
20
  "funifier-create-aggregate",
19
21
  "funifier-date-handling",
20
22
  "funifier-implement-frontend"
@@ -148,6 +150,7 @@
148
150
  "knowledge/modules/database.md": {
149
151
  "status": "grouped",
150
152
  "skillIds": [
153
+ "funifier-query-aggregate",
151
154
  "funifier-create-aggregate",
152
155
  "funifier-date-handling",
153
156
  "funifier-create-audit",