funifier-mcp 0.2.7 → 0.2.9
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/datasource-funifier-docs/.search-index.json +16205 -0
- package/datasource-funifier-docs/.skills-map.json +71 -0
- package/dist/cli/init.js +1 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/prompts.d.ts +1 -1
- package/dist/cli/prompts.d.ts.map +1 -1
- package/dist/cli/prompts.js +57 -2
- package/dist/cli/prompts.js.map +1 -1
- package/dist/core/api-client.d.ts.map +1 -1
- package/dist/core/api-client.js +6 -7
- package/dist/core/api-client.js.map +1 -1
- package/dist/mcp/bundle.js +71 -67
- package/dist/mcp/tools/database.d.ts.map +1 -1
- package/dist/mcp/tools/database.js +33 -21
- package/dist/mcp/tools/database.js.map +1 -1
- package/dist/mcp/tools/database.test.d.ts +2 -0
- package/dist/mcp/tools/database.test.d.ts.map +1 -0
- package/dist/mcp/tools/database.test.js +96 -0
- package/dist/mcp/tools/database.test.js.map +1 -0
- package/package.json +2 -2
|
@@ -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,
|
|
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:
|
|
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
|
|
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
|
|
84
|
-
const header = `Aggregate result (${
|
|
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":";;AAIA,
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/mcp/tools/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -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.
|
|
3
|
+
"version": "0.2.9",
|
|
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",
|
|
@@ -67,4 +67,4 @@
|
|
|
67
67
|
"engines": {
|
|
68
68
|
"node": ">=18"
|
|
69
69
|
}
|
|
70
|
-
}
|
|
70
|
+
}
|