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.
- package/.cursor/rules/funifier.mdc +2 -1
- package/.github/copilot-instructions.md +2 -1
- package/AGENTS.md +2 -1
- package/CHANGELOG.md +78 -0
- package/README.md +1 -1
- package/datasource-funifier-docs/.coverage.json +4 -1
- package/datasource-funifier-docs/.search-index.json +949 -605
- package/datasource-funifier-docs/.skills-map.json +5 -0
- package/datasource-funifier-docs/.validation.json +12 -7
- package/datasource-funifier-docs/knowledge/guides/aggregates.md +13 -6
- package/datasource-funifier-docs/knowledge/guides/trigger-examples.md +6 -6
- package/datasource-funifier-docs/knowledge/guides/triggers-guide.md +74 -11
- package/datasource-funifier-docs/knowledge/index.md +2 -2
- package/datasource-funifier-docs/knowledge/modules/trigger.md +29 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +3 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/core/api-client.d.ts +2 -0
- package/dist/core/api-client.d.ts.map +1 -1
- package/dist/core/api-client.js +98 -47
- package/dist/core/api-client.js.map +1 -1
- package/dist/core/api-client.test.js +27 -0
- package/dist/core/api-client.test.js.map +1 -1
- package/dist/core/constants.d.ts +4 -0
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +8 -0
- package/dist/core/constants.js.map +1 -1
- package/dist/core/logger.d.ts +9 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +50 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/mcp/api-holder.test.d.ts +2 -0
- package/dist/mcp/api-holder.test.d.ts.map +1 -0
- package/dist/mcp/api-holder.test.js +45 -0
- package/dist/mcp/api-holder.test.js.map +1 -0
- package/dist/mcp/bundle.js +114 -111
- package/dist/mcp/check-update.d.ts +9 -0
- package/dist/mcp/check-update.d.ts.map +1 -1
- package/dist/mcp/check-update.js +35 -9
- package/dist/mcp/check-update.js.map +1 -1
- package/dist/mcp/check-update.test.js +36 -6
- package/dist/mcp/check-update.test.js.map +1 -1
- package/dist/mcp/doc-path.d.ts +11 -0
- package/dist/mcp/doc-path.d.ts.map +1 -0
- package/dist/mcp/doc-path.js +66 -0
- package/dist/mcp/doc-path.js.map +1 -0
- package/dist/mcp/doc-path.test.d.ts +2 -0
- package/dist/mcp/doc-path.test.d.ts.map +1 -0
- package/dist/mcp/doc-path.test.js +77 -0
- package/dist/mcp/doc-path.test.js.map +1 -0
- package/dist/mcp/index.js +19 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/resources/documentation.d.ts.map +1 -1
- package/dist/mcp/resources/documentation.js +7 -3
- package/dist/mcp/resources/documentation.js.map +1 -1
- package/dist/mcp/tools/_backup.d.ts.map +1 -1
- package/dist/mcp/tools/_backup.js +5 -3
- package/dist/mcp/tools/_backup.js.map +1 -1
- package/dist/mcp/tools/_char-guard.d.ts +2 -1
- package/dist/mcp/tools/_char-guard.d.ts.map +1 -1
- package/dist/mcp/tools/_char-guard.js +10 -3
- package/dist/mcp/tools/_char-guard.js.map +1 -1
- package/dist/mcp/tools/_fetch-current.d.ts +2 -1
- package/dist/mcp/tools/_fetch-current.d.ts.map +1 -1
- package/dist/mcp/tools/_fetch-current.js +2 -74
- package/dist/mcp/tools/_fetch-current.js.map +1 -1
- package/dist/mcp/tools/_registry.d.ts +183 -0
- package/dist/mcp/tools/_registry.d.ts.map +1 -0
- package/dist/mcp/tools/_registry.js +88 -0
- package/dist/mcp/tools/_registry.js.map +1 -0
- package/dist/mcp/tools/_registry.test.d.ts +2 -0
- package/dist/mcp/tools/_registry.test.d.ts.map +1 -0
- package/dist/mcp/tools/_registry.test.js +103 -0
- package/dist/mcp/tools/_registry.test.js.map +1 -0
- package/dist/mcp/tools/database.d.ts +4 -0
- package/dist/mcp/tools/database.d.ts.map +1 -1
- package/dist/mcp/tools/database.js +23 -4
- package/dist/mcp/tools/database.js.map +1 -1
- package/dist/mcp/tools/database.test.js +19 -0
- package/dist/mcp/tools/database.test.js.map +1 -1
- package/dist/mcp/tools/delete.d.ts.map +1 -1
- package/dist/mcp/tools/delete.js +3 -98
- package/dist/mcp/tools/delete.js.map +1 -1
- package/dist/mcp/tools/execute.d.ts.map +1 -1
- package/dist/mcp/tools/execute.js +36 -4
- package/dist/mcp/tools/execute.js.map +1 -1
- package/dist/mcp/tools/execute.test.d.ts +2 -0
- package/dist/mcp/tools/execute.test.d.ts.map +1 -0
- package/dist/mcp/tools/execute.test.js +87 -0
- package/dist/mcp/tools/execute.test.js.map +1 -0
- package/dist/mcp/tools/get.d.ts.map +1 -1
- package/dist/mcp/tools/get.js +4 -93
- package/dist/mcp/tools/get.js.map +1 -1
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +42 -1
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/list.d.ts.map +1 -1
- package/dist/mcp/tools/list.js +3 -91
- package/dist/mcp/tools/list.js.map +1 -1
- package/dist/mcp/tools/logs.d.ts.map +1 -1
- package/dist/mcp/tools/logs.js +5 -3
- package/dist/mcp/tools/logs.js.map +1 -1
- package/dist/mcp/tools/read-doc.d.ts.map +1 -1
- package/dist/mcp/tools/read-doc.js +10 -28
- package/dist/mcp/tools/read-doc.js.map +1 -1
- package/dist/mcp/tools/save.d.ts.map +1 -1
- package/dist/mcp/tools/save.js +4 -81
- package/dist/mcp/tools/save.js.map +1 -1
- package/package.json +3 -2
- package/skills/funifier/SKILL.md +2 -1
- package/skills/funifier/references/audit-permissions.md +8 -0
- package/skills/funifier/references/configure-security.md +6 -0
- package/skills/funifier/references/create-action.md +7 -0
- package/skills/funifier/references/create-aggregate.md +99 -79
- package/skills/funifier/references/create-audit.md +8 -0
- package/skills/funifier/references/create-challenge.md +7 -0
- package/skills/funifier/references/create-competition.md +7 -0
- package/skills/funifier/references/create-crossword.md +6 -0
- package/skills/funifier/references/create-custom-object.md +6 -0
- package/skills/funifier/references/create-custom-page.md +6 -0
- package/skills/funifier/references/create-folder.md +7 -0
- package/skills/funifier/references/create-lastmile.md +6 -0
- package/skills/funifier/references/create-leaderboard.md +6 -0
- package/skills/funifier/references/create-level.md +7 -0
- package/skills/funifier/references/create-lottery.md +7 -0
- package/skills/funifier/references/create-mystery.md +6 -0
- package/skills/funifier/references/create-notification.md +6 -0
- package/skills/funifier/references/create-point.md +7 -0
- package/skills/funifier/references/create-quiz.md +7 -0
- package/skills/funifier/references/create-scheduler.md +6 -0
- package/skills/funifier/references/create-story.md +6 -0
- package/skills/funifier/references/create-swap.md +6 -0
- package/skills/funifier/references/create-trigger.md +28 -8
- package/skills/funifier/references/create-virtual-good.md +6 -0
- package/skills/funifier/references/create-webhook.md +6 -0
- package/skills/funifier/references/create-websocket.md +6 -0
- package/skills/funifier/references/create-widget.md +6 -0
- package/skills/funifier/references/date-handling.md +6 -0
- package/skills/funifier/references/help.md +6 -0
- package/skills/funifier/references/implement-frontend.md +7 -0
- package/skills/funifier/references/import-csv.md +6 -0
- package/skills/funifier/references/manage-indexes.md +6 -0
- package/skills/funifier/references/manage-player.md +7 -0
- package/skills/funifier/references/manage-team.md +6 -0
- package/skills/funifier/references/query-aggregate.md +111 -0
- 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/
|
|
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/
|
|
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/
|
|
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 —
|
|
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-
|
|
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",
|