mcp-meilisearch 1.4.5 → 1.4.6

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/dist/server.d.ts CHANGED
@@ -12,6 +12,8 @@ export declare const defaultOptions: {
12
12
  mcpEndpoint: string;
13
13
  sessionTimeout: number;
14
14
  sessionCleanupInterval: number;
15
+ meilisearchHost: string | undefined;
16
+ meilisearchApiKey: string | undefined;
15
17
  };
16
18
  /**
17
19
  * Implementation of an MCP server for Meilisearch
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAOvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAInD,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUpE;;GAEG;AACH,UAAU,cAAc;IACtB,SAAS,EAAE,SAAS,CAAC;CACtB;AASD,eAAO,MAAM,cAAc;;;;;CAK1B,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAoB;IAE3D,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,QAAQ,CAAuC;IAEvD;;;;OAIG;gBACS,MAAM,EAAE,SAAS,EAAE,MAAM,GAAE,OAAO,CAAC,aAAa,CAAM;IAOlE;;;;;OAKG;IACG,iBAAiB,CACrB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,WAAW,GAAE,MAAmC,GAC/C,OAAO,CAAC,IAAI,CAAC;IA+ChB;;;;OAIG;IACG,gBAAgB,CACpB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,IAAI,CAAC;IA+BhB;;;;;OAKG;IACG,iBAAiB,CACrB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,GAAG,GACR,OAAO,CAAC,IAAI,CAAC;IA+BhB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAqBhB;;;;;OAKG;YACW,uBAAuB;IAuCrC;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAWvC;;OAEG;YACW,gBAAgB;IAmB9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAO7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;CA2B/B;AA+DD;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GACrB,YAAW,MAAM,GAAG,OAAgB,EACpC,SAAS,OAAO,CAAC,aAAa,CAAC,KAC9B,OAAO,CAAC,cAAc,CAcxB,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAOvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAInD,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUpE;;GAEG;AACH,UAAU,cAAc;IACtB,SAAS,EAAE,SAAS,CAAC;CACtB;AASD,eAAO,MAAM,cAAc;;;;;;;CAO1B,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAoB;IAE3D,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,QAAQ,CAAuC;IAEvD;;;;OAIG;gBACS,MAAM,EAAE,SAAS,EAAE,MAAM,GAAE,OAAO,CAAC,aAAa,CAAM;IAOlE;;;;;OAKG;IACG,iBAAiB,CACrB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,WAAW,GAAE,MAAmC,GAC/C,OAAO,CAAC,IAAI,CAAC;IA+ChB;;;;OAIG;IACG,gBAAgB,CACpB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,GAClB,OAAO,CAAC,IAAI,CAAC;IA+BhB;;;;;OAKG;IACG,iBAAiB,CACrB,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,GAAG,GACR,OAAO,CAAC,IAAI,CAAC;IA+BhB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAqBhB;;;;;OAKG;YACW,uBAAuB;IAuCrC;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAWvC;;OAEG;YACW,gBAAgB;IAmB9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAO7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;CA2B/B;AA+DD;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GACrB,YAAW,MAAM,GAAG,OAAgB,EACpC,SAAS,OAAO,CAAC,aAAa,CAAC,KAC9B,OAAO,CAAC,cAAc,CAcxB,CAAC"}
package/dist/server.js CHANGED
@@ -17,6 +17,8 @@ export const defaultOptions = {
17
17
  mcpEndpoint: "/mcp",
18
18
  sessionTimeout: 3600000,
19
19
  sessionCleanupInterval: 60000,
20
+ meilisearchHost: process.env.MEILISEARCH_HOST,
21
+ meilisearchApiKey: process.env.MEILISEARCH_API_KEY,
20
22
  };
21
23
  /**
22
24
  * Implementation of an MCP server for Meilisearch
package/dist/stdio.js CHANGED
@@ -1,5 +1,2 @@
1
1
  import { mcpMeilisearchServer } from "./index.js";
2
- mcpMeilisearchServer({
3
- transport: "stdio",
4
- meilisearchHost: process.env.MEILISEARCH_HOST,
5
- });
2
+ await mcpMeilisearchServer({ transport: "stdio" });
@@ -2,7 +2,7 @@ import { AiProviderNameOptions } from "../types/options.js";
2
2
  interface AITool {
3
3
  name: string;
4
4
  description: string;
5
- parameters: Record<string, any>;
5
+ parameters: Record<string, unknown>;
6
6
  }
7
7
  interface AIToolResponse {
8
8
  toolName?: string;
@@ -17,13 +17,13 @@ interface AIToolResponse {
17
17
  * to use based on the user's query
18
18
  */
19
19
  export declare class AIService {
20
+ private availableTools;
20
21
  private model;
21
22
  private static instance;
22
23
  private static serverInitialized;
23
24
  private provider;
24
25
  private readonly systemPrompt;
25
26
  private client;
26
- private availableTools;
27
27
  /**
28
28
  * Private constructor to prevent direct instantiation
29
29
  * Use getInstance() method instead
@@ -1 +1 @@
1
- {"version":3,"file":"ai-handler.d.ts","sourceRoot":"","sources":["../../src/utils/ai-handler.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,UAAU,MAAM;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACjC;AAmBD,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA0B;IACjD,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;IACrD,OAAO,CAAC,MAAM,CAAgD;IAC9D,OAAO,CAAC,cAAc,CAIb;IAET;;;OAGG;IACH,OAAO;IAEP;;;OAGG;WACW,WAAW,IAAI,SAAS;IAOtC;;;;;;OAMG;IACH,UAAU,CACR,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,qBAAgC,EAC1C,KAAK,CAAC,EAAE,MAAM,GACb,IAAI;IAyBP;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAIxC,iBAAiB,IAAI,OAAO;IAI5B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;;;;OAKG;IACG,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,cAAc,CAAC;YA4BZ,kBAAkB;YAyClB,uBAAuB;CAqCtC"}
1
+ {"version":3,"file":"ai-handler.d.ts","sourceRoot":"","sources":["../../src/utils/ai-handler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAI5D,UAAU,MAAM;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAmBD,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA0B;IACjD,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;IACrD,OAAO,CAAC,MAAM,CAAgD;IAE9D;;;OAGG;IACH,OAAO;IAEP;;;OAGG;WACW,WAAW,IAAI,SAAS;IAOtC;;;;;;OAMG;IACH,UAAU,CACR,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,qBAAgC,EAC1C,KAAK,CAAC,EAAE,MAAM,GACb,IAAI;IAyBP;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAIxC,iBAAiB,IAAI,OAAO;IAI5B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAaxB;;;;;OAKG;IACG,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,cAAc,CAAC;YA4BZ,kBAAkB;YA+DlB,uBAAuB;CAyDtC"}
@@ -1,8 +1,8 @@
1
1
  import { OpenAI } from "openai";
2
2
  import systemPrompt from "../prompts/system.js";
3
3
  import { OPEN_ROUTER_API } from "../types/enums.js";
4
- import { markdownToJson } from "./response-handler.js";
5
4
  import { InferenceClient } from "@huggingface/inference";
5
+ import { markdownToJson, cleanNullValues } from "./response-handler.js";
6
6
  /**
7
7
  * AI Inference Service
8
8
  *
@@ -10,13 +10,13 @@ import { InferenceClient } from "@huggingface/inference";
10
10
  * to use based on the user's query
11
11
  */
12
12
  export class AIService {
13
+ availableTools = [];
13
14
  model = "gpt-3.5-turbo";
14
15
  static instance = null;
15
16
  static serverInitialized = false;
16
17
  provider = "openai";
17
18
  systemPrompt = systemPrompt;
18
19
  client = null;
19
- availableTools = [];
20
20
  /**
21
21
  * Private constructor to prevent direct instantiation
22
22
  * Use getInstance() method instead
@@ -144,6 +144,22 @@ export class AIService {
144
144
  return { error: "No choices returned from OpenAI" };
145
145
  }
146
146
  const message = response.choices[0].message;
147
+ if (message.tool_calls?.length) {
148
+ const toolCall = message.tool_calls[0]?.function;
149
+ if (!toolCall) {
150
+ return { error: "Invalid tool from OpenAI response" };
151
+ }
152
+ const inferenceToolResponse = {
153
+ name: toolCall.name,
154
+ parameters: cleanNullValues(JSON.parse(toolCall.arguments)),
155
+ };
156
+ return {
157
+ error: null,
158
+ toolName: inferenceToolResponse.name,
159
+ parameters: inferenceToolResponse.parameters,
160
+ reasoning: JSON.stringify(inferenceToolResponse, null, 2),
161
+ };
162
+ }
147
163
  if (message.content) {
148
164
  const toolCall = markdownToJson(message.content);
149
165
  if (!toolCall) {
@@ -177,11 +193,26 @@ export class AIService {
177
193
  return { error: "No choices in Hugging Face response" };
178
194
  }
179
195
  const message = response.choices[0].message;
180
- if (message.content) {
181
- const toolCall = markdownToJson(message.content);
196
+ if (message.tool_calls?.length) {
197
+ const toolCall = message.tool_calls[0]?.function;
182
198
  if (!toolCall) {
183
- return { error: `Invalid tool call format in content: ${response}` };
199
+ return { error: "Invalid tool from Hugging Face response" };
184
200
  }
201
+ const inferenceToolResponse = {
202
+ name: toolCall.name,
203
+ parameters: cleanNullValues(JSON.parse(toolCall.arguments)),
204
+ };
205
+ return {
206
+ error: null,
207
+ toolName: inferenceToolResponse.name,
208
+ parameters: inferenceToolResponse.parameters,
209
+ reasoning: JSON.stringify(inferenceToolResponse, null, 2),
210
+ };
211
+ }
212
+ if (message.content) {
213
+ const toolCall = markdownToJson(message.content);
214
+ if (!toolCall)
215
+ return { error: "Invalid tool call format in content" };
185
216
  return {
186
217
  error: null,
187
218
  toolName: toolCall.name,
@@ -7,4 +7,9 @@
7
7
  * @returns A parsed JavaScript object/array, or null if parsing fails.
8
8
  */
9
9
  export declare function markdownToJson<T>(markdownJsonString: string): T | null;
10
+ /**
11
+ * Recursively removes null values from an object, replacing them with undefined
12
+ * This ensures optional parameters are properly handled by JSON schema validation
13
+ */
14
+ export declare function cleanNullValues(obj: Record<string, any>): Record<string, any>;
10
15
  //# sourceMappingURL=response-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"response-handler.d.ts","sourceRoot":"","sources":["../../src/utils/response-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAoCtE"}
1
+ {"version":3,"file":"response-handler.d.ts","sourceRoot":"","sources":["../../src/utils/response-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAoCtE;AAgCD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAsB7E"}
@@ -70,3 +70,29 @@ function parseNestedJsonStrings(obj) {
70
70
  }
71
71
  return obj;
72
72
  }
73
+ /**
74
+ * Recursively removes null values from an object, replacing them with undefined
75
+ * This ensures optional parameters are properly handled by JSON schema validation
76
+ */
77
+ export function cleanNullValues(obj) {
78
+ const result = {};
79
+ for (const [key, value] of Object.entries(obj)) {
80
+ if (value === null) {
81
+ continue;
82
+ }
83
+ else if (typeof value === "object" && value !== null) {
84
+ if (Array.isArray(value)) {
85
+ result[key] = value.map((item) => typeof item === "object" && item !== null
86
+ ? cleanNullValues(item)
87
+ : item);
88
+ }
89
+ else {
90
+ result[key] = cleanNullValues(value);
91
+ }
92
+ }
93
+ else {
94
+ result[key] = value;
95
+ }
96
+ }
97
+ return result;
98
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-meilisearch",
3
- "version": "1.4.5",
3
+ "version": "1.4.6",
4
4
  "description": "Model Context Protocol (MCP) implementation for Meilisearch",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -24,7 +24,7 @@
24
24
  ],
25
25
  "scripts": {
26
26
  "build": "tsc && tsc -p tsconfig.types.json",
27
- "demo": "npm run build & npm run preview --workspace=demo",
27
+ "demo": "npm run build & npm run dev --workspace=demo",
28
28
  "server": "npm run build && node --env-file=.env dist/index.js",
29
29
  "prepublishOnly": "rm -rf dist && npm version patch && npm run build"
30
30
  },
@@ -33,10 +33,10 @@
33
33
  "@modelcontextprotocol/sdk": "^1.11.4",
34
34
  "axios": "^1.9.0",
35
35
  "openai": "^4.100.0",
36
- "zod": "^3.24.4"
36
+ "zod": "^3.25.1"
37
37
  },
38
38
  "devDependencies": {
39
- "@types/node": "^22.15.18",
39
+ "@types/node": "^22.15.19",
40
40
  "typescript": "^5.8.3",
41
41
  "zod-to-json-schema": "^3.24.5"
42
42
  },