funifier-mcp 0.3.1 → 0.3.5

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 (47) hide show
  1. package/.cursor/rules/funifier.mdc +1 -0
  2. package/.github/copilot-instructions.md +1 -0
  3. package/AGENTS.md +1 -0
  4. package/datasource-funifier-docs/.coverage.json +3 -2
  5. package/dist/core/api-client.d.ts +3 -0
  6. package/dist/core/api-client.d.ts.map +1 -1
  7. package/dist/core/api-client.js +29 -0
  8. package/dist/core/api-client.js.map +1 -1
  9. package/dist/core/constants.d.ts +2 -0
  10. package/dist/core/constants.d.ts.map +1 -1
  11. package/dist/core/constants.js +3 -0
  12. package/dist/core/constants.js.map +1 -1
  13. package/dist/mcp/bundle.js +103 -90
  14. package/dist/mcp/resources/documentation.d.ts.map +1 -1
  15. package/dist/mcp/resources/documentation.js +33 -15
  16. package/dist/mcp/resources/documentation.js.map +1 -1
  17. package/dist/mcp/resources/documentation.test.d.ts +2 -0
  18. package/dist/mcp/resources/documentation.test.d.ts.map +1 -0
  19. package/dist/mcp/resources/documentation.test.js +99 -0
  20. package/dist/mcp/resources/documentation.test.js.map +1 -0
  21. package/dist/mcp/tools/index-manager.d.ts +4 -0
  22. package/dist/mcp/tools/index-manager.d.ts.map +1 -0
  23. package/dist/mcp/tools/index-manager.js +137 -0
  24. package/dist/mcp/tools/index-manager.js.map +1 -0
  25. package/dist/mcp/tools/index-manager.test.d.ts +2 -0
  26. package/dist/mcp/tools/index-manager.test.d.ts.map +1 -0
  27. package/dist/mcp/tools/index-manager.test.js +130 -0
  28. package/dist/mcp/tools/index-manager.test.js.map +1 -0
  29. package/dist/mcp/tools/index.d.ts.map +1 -1
  30. package/dist/mcp/tools/index.js +4 -0
  31. package/dist/mcp/tools/index.js.map +1 -1
  32. package/dist/mcp/tools/list-tools.d.ts +3 -0
  33. package/dist/mcp/tools/list-tools.d.ts.map +1 -0
  34. package/dist/mcp/tools/list-tools.js +132 -0
  35. package/dist/mcp/tools/list-tools.js.map +1 -0
  36. package/dist/mcp/tools/list-tools.test.d.ts +2 -0
  37. package/dist/mcp/tools/list-tools.test.d.ts.map +1 -0
  38. package/dist/mcp/tools/list-tools.test.js +72 -0
  39. package/dist/mcp/tools/list-tools.test.js.map +1 -0
  40. package/dist/mcp/tools/search-docs.d.ts.map +1 -1
  41. package/dist/mcp/tools/search-docs.js +6 -1
  42. package/dist/mcp/tools/search-docs.js.map +1 -1
  43. package/dist/mcp/tools/search-docs.test.js +5 -2
  44. package/dist/mcp/tools/search-docs.test.js.map +1 -1
  45. package/package.json +2 -2
  46. package/skills/funifier/SKILL.md +18 -3
  47. package/skills/funifier/references/manage-indexes.md +77 -0
@@ -1 +1 @@
1
- {"version":3,"file":"documentation.d.ts","sourceRoot":"","sources":["../../../src/mcp/resources/documentation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAGtF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAkI3D"}
1
+ {"version":3,"file":"documentation.d.ts","sourceRoot":"","sources":["../../../src/mcp/resources/documentation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AAwCtF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAmH3D"}
@@ -7,22 +7,40 @@ exports.registerResources = registerResources;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
10
+ // Resolve docsPath using: explicit env var → bundled package paths → cwd fallback.
11
+ // Emits a console.error for each invalid/stale path so the failure is visible in MCP logs.
12
+ function resolveDocsPath() {
13
+ const envPath = process.env.FUNIFIER_DOCS_PATH;
14
+ if (envPath) {
15
+ if (fs_1.default.existsSync(envPath))
16
+ return envPath;
17
+ console.error(`[funifier-mcp] FUNIFIER_DOCS_PATH="${envPath}" does not exist. ` +
18
+ `Falling back to auto-resolution. Run 'funifier-mcp init' to update the config.`);
19
+ }
20
+ // Auto-resolve from __dirname:
21
+ // bundle (dist/mcp/bundle.js) → __dirname is dist/mcp/ → 2 levels up to package root
22
+ // compiled (dist/mcp/resources/*.js) → __dirname is dist/mcp/resources/ → 3 levels up
23
+ const candidates = [
24
+ path_1.default.join(__dirname, "..", "..", "datasource-funifier-docs", "knowledge"),
25
+ path_1.default.join(__dirname, "..", "..", "..", "datasource-funifier-docs", "knowledge"),
26
+ path_1.default.join(__dirname, "..", "..", "doc", "knowledge"),
27
+ path_1.default.join(__dirname, "..", "..", "..", "doc", "knowledge"),
28
+ ];
29
+ for (const candidate of candidates) {
30
+ if (fs_1.default.existsSync(candidate))
31
+ return candidate;
32
+ }
33
+ // Last resort: backward-compat with old init that copied docs to the project root.
34
+ const cwdFallback = path_1.default.join(process.cwd(), "datasource-funifier-docs", "knowledge");
35
+ if (!fs_1.default.existsSync(cwdFallback)) {
36
+ console.error(`[funifier-mcp] Documentation directory not found. Tried: ${[...candidates, cwdFallback].join(", ")}. ` +
37
+ `Tools funifier_search_docs and funifier_read_doc will not work. ` +
38
+ `Set FUNIFIER_DOCS_PATH or run 'funifier-mcp init' to fix.`);
39
+ }
40
+ return cwdFallback;
41
+ }
10
42
  function registerResources(server) {
11
- // Resolve docs. Source of truth is datasource-funifier-docs/knowledge/, resolved relative to
12
- // this file (the project root in dev, node_modules/funifier-mcp/ when installed as a package).
13
- // When running from compiled dist/mcp/resources/documentation.js: __dirname is dist/mcp/resources/ (3 levels up)
14
- // When running from esbuild bundle dist/mcp/bundle.js: __dirname is dist/mcp/ (2 levels up)
15
- // Try both paths for datasource-funifier-docs, then fall back to legacy doc/knowledge for published package.
16
- const threeUp = path_1.default.join(__dirname, "..", "..", "..", "datasource-funifier-docs", "knowledge");
17
- const twoUp = path_1.default.join(__dirname, "..", "..", "datasource-funifier-docs", "knowledge");
18
- const legacyThreeUp = path_1.default.join(__dirname, "..", "..", "..", "doc", "knowledge");
19
- const legacyTwoUp = path_1.default.join(__dirname, "..", "..", "doc", "knowledge");
20
- const bundledDocsPath = fs_1.default.existsSync(twoUp) ? twoUp
21
- : fs_1.default.existsSync(threeUp) ? threeUp
22
- : fs_1.default.existsSync(legacyTwoUp) ? legacyTwoUp
23
- : legacyThreeUp;
24
- const docsPath = process.env.FUNIFIER_DOCS_PATH ||
25
- (fs_1.default.existsSync(bundledDocsPath) ? bundledDocsPath : path_1.default.join(process.cwd(), "datasource-funifier-docs", "knowledge"));
43
+ const docsPath = resolveDocsPath();
26
44
  const docCache = new Map();
27
45
  const docMetaCache = new Map();
28
46
  function readCached(filePath) {
@@ -1 +1 @@
1
- {"version":3,"file":"documentation.js","sourceRoot":"","sources":["../../../src/mcp/resources/documentation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"documentation.js","sourceRoot":"","sources":["../../../src/mcp/resources/documentation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=documentation.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentation.test.d.ts","sourceRoot":"","sources":["../../../src/mcp/resources/documentation.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,99 @@
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
+ function makeStubServer() {
41
+ return {
42
+ resource: () => { },
43
+ };
44
+ }
45
+ // Re-import registerResources fresh each time so resolveDocsPath() re-evaluates env vars.
46
+ async function importRegisterResources() {
47
+ vitest_1.vi.resetModules();
48
+ const mod = await import("./documentation.js");
49
+ return mod.registerResources;
50
+ }
51
+ (0, vitest_1.describe)("registerResources — docsPath resolution", () => {
52
+ const originalEnv = process.env.FUNIFIER_DOCS_PATH;
53
+ let tmpDir;
54
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
55
+ let errSpy;
56
+ (0, vitest_1.beforeEach)(() => {
57
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "funifier-doctest-"));
58
+ errSpy = vitest_1.vi.spyOn(console, "error").mockImplementation(() => { });
59
+ });
60
+ (0, vitest_1.afterEach)(() => {
61
+ fs.rmSync(tmpDir, { recursive: true, force: true });
62
+ if (originalEnv === undefined) {
63
+ delete process.env.FUNIFIER_DOCS_PATH;
64
+ }
65
+ else {
66
+ process.env.FUNIFIER_DOCS_PATH = originalEnv;
67
+ }
68
+ vitest_1.vi.restoreAllMocks();
69
+ });
70
+ (0, vitest_1.it)("uses FUNIFIER_DOCS_PATH when it points to an existing directory", async () => {
71
+ const docsDir = path.join(tmpDir, "knowledge");
72
+ fs.mkdirSync(docsDir, { recursive: true });
73
+ process.env.FUNIFIER_DOCS_PATH = docsDir;
74
+ const registerResources = await importRegisterResources();
75
+ const returned = registerResources(makeStubServer());
76
+ (0, vitest_1.expect)(returned).toBe(docsDir);
77
+ (0, vitest_1.expect)(errSpy).not.toHaveBeenCalled();
78
+ });
79
+ (0, vitest_1.it)("emits console.error and falls back when FUNIFIER_DOCS_PATH does not exist", async () => {
80
+ const stalePath = path.join(tmpDir, "this-does-not-exist", "knowledge");
81
+ process.env.FUNIFIER_DOCS_PATH = stalePath;
82
+ const registerResources = await importRegisterResources();
83
+ registerResources(makeStubServer());
84
+ const firstCall = errSpy.mock.calls[0]?.[0];
85
+ (0, vitest_1.expect)(firstCall).toBeDefined();
86
+ (0, vitest_1.expect)(firstCall).toContain(stalePath);
87
+ (0, vitest_1.expect)(firstCall).toContain("does not exist");
88
+ (0, vitest_1.expect)(firstCall).toContain("funifier-mcp init");
89
+ });
90
+ (0, vitest_1.it)("falls back away from stale FUNIFIER_DOCS_PATH and does not return the stale path", async () => {
91
+ const stalePath = path.join(tmpDir, "ghost", "knowledge");
92
+ process.env.FUNIFIER_DOCS_PATH = stalePath;
93
+ const registerResources = await importRegisterResources();
94
+ const returned = registerResources(makeStubServer());
95
+ (0, vitest_1.expect)(returned).not.toBe(stalePath);
96
+ (0, vitest_1.expect)(errSpy.mock.calls.some((c) => c[0].includes(stalePath))).toBe(true);
97
+ });
98
+ });
99
+ //# sourceMappingURL=documentation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentation.test.js","sourceRoot":"","sources":["../../../src/mcp/resources/documentation.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { ApiHolder } from "../api-holder";
3
+ export declare function registerIndexTool(server: McpServer, apiHolder: ApiHolder): void;
4
+ //# sourceMappingURL=index-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-manager.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,QAsJxE"}
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerIndexTool = registerIndexTool;
4
+ const zod_1 = require("zod");
5
+ function registerIndexTool(server, apiHolder) {
6
+ server.registerTool("funifier_index", {
7
+ title: "Funifier MongoDB Index Manager",
8
+ description: "Manage MongoDB indexes on Funifier database collections. " +
9
+ "Use 'list' to inspect existing indexes before creating new ones — avoid duplicates. " +
10
+ "Use 'create' to add a single-field or compound index. " +
11
+ "Use 'drop' to remove an index by its name (get the name from 'list'). " +
12
+ "Requires the API connection to have 'database' in its scope.",
13
+ inputSchema: {
14
+ action: zod_1.z
15
+ .enum(["list", "create", "drop"])
16
+ .describe("'list' — GET /database/{collection}/index, returns all index definitions. " +
17
+ "'create' — POST /database/{collection}/index with the 'keys' field spec; returns updated index list. " +
18
+ "'drop' — DELETE /database/{collection}/index/{name}; requires 'name' (the index name from 'list')."),
19
+ collection: zod_1.z
20
+ .string()
21
+ .describe("Collection name (e.g. 'player', 'action_log', 'videos__c'). Required for all actions."),
22
+ keys: zod_1.z
23
+ .string()
24
+ .optional()
25
+ .describe("For action='create' only. JSON object mapping field names to sort direction: " +
26
+ "1 = ascending, -1 = descending. " +
27
+ "Single-field: '{\"email\": 1}'. " +
28
+ "Compound: '{\"team\": 1, \"score\": -1}'. " +
29
+ "MongoDB names the index automatically (e.g. 'email_1', 'team_1_score_-1')."),
30
+ name: zod_1.z
31
+ .string()
32
+ .optional()
33
+ .describe("For action='drop' only. Exact index name as returned by 'list' (e.g. 'email_1'). " +
34
+ "The '_id_' index cannot be dropped."),
35
+ },
36
+ annotations: {
37
+ readOnlyHint: false,
38
+ destructiveHint: true,
39
+ idempotentHint: false,
40
+ openWorldHint: true,
41
+ },
42
+ }, async ({ action, collection, keys, name }) => {
43
+ try {
44
+ const api = apiHolder.requireClient();
45
+ if (action === "list") {
46
+ const indexes = await api.listIndexes(collection);
47
+ if (indexes.length === 0) {
48
+ return {
49
+ content: [{ type: "text", text: `No indexes found on '${collection}' (or collection does not exist).` }],
50
+ };
51
+ }
52
+ return {
53
+ content: [{
54
+ type: "text",
55
+ text: `Indexes on '${collection}' (${indexes.length}):\n\n${JSON.stringify(indexes, null, 2)}`,
56
+ }],
57
+ };
58
+ }
59
+ if (action === "create") {
60
+ if (!keys) {
61
+ return {
62
+ content: [{ type: "text", text: "Error: 'keys' is required for action='create'. Example: '{\"email\": 1}'" }],
63
+ isError: true,
64
+ };
65
+ }
66
+ let spec;
67
+ try {
68
+ spec = JSON.parse(keys);
69
+ }
70
+ catch {
71
+ return {
72
+ content: [{ type: "text", text: `Error: 'keys' is not valid JSON: ${keys}` }],
73
+ isError: true,
74
+ };
75
+ }
76
+ const fieldNames = Object.keys(spec);
77
+ if (fieldNames.length === 0) {
78
+ return {
79
+ content: [{ type: "text", text: "Error: 'keys' must contain at least one field." }],
80
+ isError: true,
81
+ };
82
+ }
83
+ const invalidDirections = fieldNames.filter((f) => spec[f] !== 1 && spec[f] !== -1);
84
+ if (invalidDirections.length > 0) {
85
+ return {
86
+ content: [{
87
+ type: "text",
88
+ text: `Error: direction must be 1 (ascending) or -1 (descending). Invalid: ${JSON.stringify(Object.fromEntries(invalidDirections.map((f) => [f, spec[f]])))}`,
89
+ }],
90
+ isError: true,
91
+ };
92
+ }
93
+ const indexes = await api.createIndex(collection, spec);
94
+ const indexName = fieldNames.map((f) => `${f}_${spec[f]}`).join("_");
95
+ return {
96
+ content: [{
97
+ type: "text",
98
+ text: `Index created on '${collection}' (expected name: '${indexName}').\n\n` +
99
+ `Current indexes (${indexes.length}):\n\n${JSON.stringify(indexes, null, 2)}`,
100
+ }],
101
+ };
102
+ }
103
+ if (action === "drop") {
104
+ if (!name) {
105
+ return {
106
+ content: [{ type: "text", text: "Error: 'name' is required for action='drop'. Use action='list' to see index names." }],
107
+ isError: true,
108
+ };
109
+ }
110
+ if (name === "_id_") {
111
+ return {
112
+ content: [{ type: "text", text: "Error: the '_id_' index cannot be dropped." }],
113
+ isError: true,
114
+ };
115
+ }
116
+ const result = await api.dropIndex(collection, name);
117
+ return {
118
+ content: [{
119
+ type: "text",
120
+ text: `Index '${name}' dropped from '${collection}'.\n\n${JSON.stringify(result, null, 2)}`,
121
+ }],
122
+ };
123
+ }
124
+ return {
125
+ content: [{ type: "text", text: `Unknown action: ${action}` }],
126
+ isError: true,
127
+ };
128
+ }
129
+ catch (error) {
130
+ return {
131
+ content: [{ type: "text", text: `Error in funifier_index ${action} on '${collection}': ${error.message}` }],
132
+ isError: true,
133
+ };
134
+ }
135
+ });
136
+ }
137
+ //# sourceMappingURL=index-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-manager.js","sourceRoot":"","sources":["../../../src/mcp/tools/index-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-manager.test.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index-manager.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const index_manager_1 = require("./index-manager");
5
+ const SAMPLE_INDEXES = [
6
+ { name: "_id_", key: { _id: 1 }, unique: true },
7
+ { name: "email_1", key: { email: 1 } },
8
+ ];
9
+ function makeServer() {
10
+ let handler;
11
+ const server = {
12
+ registerTool: (_name, _config, h) => { handler = h; },
13
+ };
14
+ (0, index_manager_1.registerIndexTool)(server, makeApiHolder());
15
+ return {
16
+ server,
17
+ invoke: (args) => handler(args),
18
+ };
19
+ }
20
+ function makeApiHolder(overrides = {}) {
21
+ const api = { ...fakeApi(), ...overrides };
22
+ return {
23
+ requireClient: () => api,
24
+ };
25
+ }
26
+ function fakeApi() {
27
+ return {
28
+ listIndexes: vitest_1.vi.fn().mockResolvedValue(SAMPLE_INDEXES),
29
+ createIndex: vitest_1.vi.fn().mockResolvedValue([...SAMPLE_INDEXES, { name: "score_-1", key: { score: -1 } }]),
30
+ dropIndex: vitest_1.vi.fn().mockResolvedValue({ ok: 1 }),
31
+ };
32
+ }
33
+ // Rebuild the handler pointing at a custom apiHolder
34
+ function makeInvoke(overrides = {}) {
35
+ const api = { ...fakeApi(), ...overrides };
36
+ const holder = { requireClient: () => api };
37
+ let handler;
38
+ const server = {
39
+ registerTool: (_name, _config, h) => { handler = h; },
40
+ };
41
+ (0, index_manager_1.registerIndexTool)(server, holder);
42
+ return { invoke: (args) => handler(args), api };
43
+ }
44
+ (0, vitest_1.describe)("funifier_index", () => {
45
+ (0, vitest_1.describe)("action=list", () => {
46
+ (0, vitest_1.it)("returns formatted index list", async () => {
47
+ const { invoke } = makeInvoke();
48
+ const result = await invoke({ action: "list", collection: "player" });
49
+ (0, vitest_1.expect)(result.isError).toBeUndefined();
50
+ (0, vitest_1.expect)(result.content[0].text).toContain("email_1");
51
+ (0, vitest_1.expect)(result.content[0].text).toContain("2");
52
+ });
53
+ (0, vitest_1.it)("returns a message when no indexes found", async () => {
54
+ const { invoke } = makeInvoke({ listIndexes: vitest_1.vi.fn().mockResolvedValue([]) });
55
+ const result = await invoke({ action: "list", collection: "empty_collection" });
56
+ (0, vitest_1.expect)(result.isError).toBeUndefined();
57
+ (0, vitest_1.expect)(result.content[0].text).toContain("No indexes found");
58
+ });
59
+ });
60
+ (0, vitest_1.describe)("action=create", () => {
61
+ (0, vitest_1.it)("creates a single-field ascending index", async () => {
62
+ const { invoke, api } = makeInvoke();
63
+ const result = await invoke({ action: "create", collection: "player", keys: '{"email": 1}' });
64
+ (0, vitest_1.expect)(result.isError).toBeUndefined();
65
+ (0, vitest_1.expect)(api.createIndex).toHaveBeenCalledWith("player", { email: 1 });
66
+ (0, vitest_1.expect)(result.content[0].text).toContain("email_1");
67
+ });
68
+ (0, vitest_1.it)("creates a compound index", async () => {
69
+ const { invoke, api } = makeInvoke();
70
+ await invoke({ action: "create", collection: "action_log", keys: '{"player": 1, "time": -1}' });
71
+ (0, vitest_1.expect)(api.createIndex).toHaveBeenCalledWith("action_log", { player: 1, time: -1 });
72
+ });
73
+ (0, vitest_1.it)("returns isError when keys is missing", async () => {
74
+ const { invoke } = makeInvoke();
75
+ const result = await invoke({ action: "create", collection: "player" });
76
+ (0, vitest_1.expect)(result.isError).toBe(true);
77
+ (0, vitest_1.expect)(result.content[0].text).toContain("'keys' is required");
78
+ });
79
+ (0, vitest_1.it)("returns isError when keys is invalid JSON", async () => {
80
+ const { invoke } = makeInvoke();
81
+ const result = await invoke({ action: "create", collection: "player", keys: "not-json" });
82
+ (0, vitest_1.expect)(result.isError).toBe(true);
83
+ (0, vitest_1.expect)(result.content[0].text).toContain("not valid JSON");
84
+ });
85
+ (0, vitest_1.it)("returns isError when direction is not 1 or -1", async () => {
86
+ const { invoke } = makeInvoke();
87
+ const result = await invoke({ action: "create", collection: "player", keys: '{"email": 2}' });
88
+ (0, vitest_1.expect)(result.isError).toBe(true);
89
+ (0, vitest_1.expect)(result.content[0].text).toContain("direction must be");
90
+ });
91
+ (0, vitest_1.it)("returns isError when keys object is empty", async () => {
92
+ const { invoke } = makeInvoke();
93
+ const result = await invoke({ action: "create", collection: "player", keys: "{}" });
94
+ (0, vitest_1.expect)(result.isError).toBe(true);
95
+ (0, vitest_1.expect)(result.content[0].text).toContain("at least one field");
96
+ });
97
+ });
98
+ (0, vitest_1.describe)("action=drop", () => {
99
+ (0, vitest_1.it)("drops an index by name", async () => {
100
+ const { invoke, api } = makeInvoke();
101
+ const result = await invoke({ action: "drop", collection: "player", name: "email_1" });
102
+ (0, vitest_1.expect)(result.isError).toBeUndefined();
103
+ (0, vitest_1.expect)(api.dropIndex).toHaveBeenCalledWith("player", "email_1");
104
+ (0, vitest_1.expect)(result.content[0].text).toContain("email_1");
105
+ });
106
+ (0, vitest_1.it)("returns isError when name is missing", async () => {
107
+ const { invoke } = makeInvoke();
108
+ const result = await invoke({ action: "drop", collection: "player" });
109
+ (0, vitest_1.expect)(result.isError).toBe(true);
110
+ (0, vitest_1.expect)(result.content[0].text).toContain("'name' is required");
111
+ });
112
+ (0, vitest_1.it)("refuses to drop the _id_ index", async () => {
113
+ const { invoke } = makeInvoke();
114
+ const result = await invoke({ action: "drop", collection: "player", name: "_id_" });
115
+ (0, vitest_1.expect)(result.isError).toBe(true);
116
+ (0, vitest_1.expect)(result.content[0].text).toContain("cannot be dropped");
117
+ });
118
+ });
119
+ (0, vitest_1.describe)("error handling", () => {
120
+ (0, vitest_1.it)("returns isError when the API throws", async () => {
121
+ const { invoke } = makeInvoke({
122
+ createIndex: vitest_1.vi.fn().mockRejectedValue(new Error("connection refused")),
123
+ });
124
+ const result = await invoke({ action: "create", collection: "player", keys: '{"email": 1}' });
125
+ (0, vitest_1.expect)(result.isError).toBe(true);
126
+ (0, vitest_1.expect)(result.content[0].text).toContain("connection refused");
127
+ });
128
+ });
129
+ });
130
+ //# sourceMappingURL=index-manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-manager.test.js","sourceRoot":"","sources":["../../../src/mcp/tools/index-manager.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAqC1C,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,QAetF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAuC1C,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,QAiBtF"}
@@ -11,6 +11,8 @@ const execute_1 = require("./execute");
11
11
  const logs_1 = require("./logs");
12
12
  const database_1 = require("./database");
13
13
  const folder_1 = require("./folder");
14
+ const index_manager_1 = require("./index-manager");
15
+ const list_tools_1 = require("./list-tools");
14
16
  const search_docs_1 = require("./search-docs");
15
17
  const read_doc_1 = require("./read-doc");
16
18
  /**
@@ -46,7 +48,9 @@ function registerTools(server, apiHolder, docsPath) {
46
48
  (0, execute_1.registerExecuteTool)(server, apiHolder);
47
49
  (0, logs_1.registerLogsTool)(server, apiHolder);
48
50
  (0, database_1.registerDatabaseTool)(server, apiHolder);
51
+ (0, index_manager_1.registerIndexTool)(server, apiHolder);
49
52
  (0, folder_1.registerFolderTool)(server, apiHolder);
53
+ (0, list_tools_1.registerListToolsTool)(server);
50
54
  (0, search_docs_1.registerSearchDocsTool)(server, docsPath);
51
55
  (0, read_doc_1.registerReadDocTool)(server, docsPath);
52
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":";;AAsCA,sCAeC;AAnDD,kDAAsD;AACtD,uCAAgD;AAChD,iCAA0C;AAC1C,+BAAwC;AACxC,iCAA0C;AAC1C,qCAA8C;AAC9C,uCAAgD;AAChD,iCAA0C;AAC1C,yCAAkD;AAClD,qCAA8C;AAC9C,+CAAuD;AACvD,yCAAiD;AAEjD;;;;GAIG;AACH,SAAS,wBAAwB,CAAC,MAAiB;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAA4B,CAAC;IAC7E,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,IAAW,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtC,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,WAAkB,EAAE,EAAE;gBACtD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;gBAC7C,MAAM,MAAM,GAAG,IAAA,kCAAmB,GAAE,CAAC;gBACrC,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBACzD,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3B,CAAC,CAA+B,CAAC;AACnC,CAAC;AAED,SAAgB,aAAa,CAAC,MAAiB,EAAE,SAAoB,EAAE,QAAgB;IACrF,2EAA2E;IAC3E,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAA,6BAAmB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,IAAA,uBAAgB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,IAAA,qBAAe,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnC,IAAA,uBAAgB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,IAAA,2BAAkB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,IAAA,6BAAmB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,IAAA,uBAAgB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,IAAA,+BAAoB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACxC,IAAA,2BAAkB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,IAAA,oCAAsB,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzC,IAAA,8BAAmB,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":";;AAwCA,sCAiBC;AAvDD,kDAAsD;AACtD,uCAAgD;AAChD,iCAA0C;AAC1C,+BAAwC;AACxC,iCAA0C;AAC1C,qCAA8C;AAC9C,uCAAgD;AAChD,iCAA0C;AAC1C,yCAAkD;AAClD,qCAA8C;AAC9C,mDAAoD;AACpD,6CAAqD;AACrD,+CAAuD;AACvD,yCAAiD;AAEjD;;;;GAIG;AACH,SAAS,wBAAwB,CAAC,MAAiB;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAA4B,CAAC;IAC7E,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC,GAAG,IAAW,EAAE,EAAE;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtC,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,WAAkB,EAAE,EAAE;gBACtD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;gBAC7C,MAAM,MAAM,GAAG,IAAA,kCAAmB,GAAE,CAAC;gBACrC,IAAI,MAAM,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;gBACzD,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3B,CAAC,CAA+B,CAAC;AACnC,CAAC;AAED,SAAgB,aAAa,CAAC,MAAiB,EAAE,SAAoB,EAAE,QAAgB;IACrF,2EAA2E;IAC3E,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAA,6BAAmB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,IAAA,uBAAgB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,IAAA,qBAAe,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnC,IAAA,uBAAgB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,IAAA,2BAAkB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,IAAA,6BAAmB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACvC,IAAA,uBAAgB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACpC,IAAA,+BAAoB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACxC,IAAA,iCAAiB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACrC,IAAA,2BAAkB,EAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,IAAA,kCAAqB,EAAC,MAAM,CAAC,CAAC;IAC9B,IAAA,oCAAsB,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzC,IAAA,8BAAmB,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerListToolsTool(server: McpServer): void;
3
+ //# sourceMappingURL=list-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA+HpE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QAqBtD"}