mcp-meilisearch 1.3.8 → 1.3.10

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 (46) hide show
  1. package/README.md +2 -2
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +3 -1
  4. package/dist/server.d.ts.map +1 -1
  5. package/dist/server.js +8 -8
  6. package/dist/tools/core/ai-tools.d.ts.map +1 -0
  7. package/dist/tools/{ai-tools.js → core/ai-tools.js} +4 -4
  8. package/dist/tools/meilisearch/document-tools.d.ts.map +1 -0
  9. package/dist/tools/{document-tools.js → meilisearch/document-tools.js} +9 -9
  10. package/dist/tools/meilisearch/index-tools.d.ts.map +1 -0
  11. package/dist/tools/{index-tools.js → meilisearch/index-tools.js} +8 -8
  12. package/dist/tools/meilisearch/search-tools.d.ts.map +1 -0
  13. package/dist/tools/{search-tools.js → meilisearch/search-tools.js} +68 -69
  14. package/dist/tools/meilisearch/settings-tools.d.ts.map +1 -0
  15. package/dist/tools/meilisearch/settings-tools.js +798 -0
  16. package/dist/tools/meilisearch/system-tools.d.ts.map +1 -0
  17. package/dist/tools/{system-tools.js → meilisearch/system-tools.js} +12 -32
  18. package/dist/tools/meilisearch/task-tools.d.ts.map +1 -0
  19. package/dist/tools/{task-tools.js → meilisearch/task-tools.js} +8 -8
  20. package/dist/tools/meilisearch/vector-tools.d.ts.map +1 -0
  21. package/dist/tools/{vector-tools.js → meilisearch/vector-tools.js} +8 -8
  22. package/dist/types/enums.d.ts +5 -0
  23. package/dist/types/enums.d.ts.map +1 -0
  24. package/dist/types/enums.js +5 -0
  25. package/dist/utils/ai-handler.d.ts +2 -1
  26. package/dist/utils/ai-handler.d.ts.map +1 -1
  27. package/dist/utils/ai-handler.js +11 -8
  28. package/dist/utils/response-handler.js +30 -1
  29. package/package.json +4 -4
  30. package/dist/tools/ai-tools.d.ts.map +0 -1
  31. package/dist/tools/document-tools.d.ts.map +0 -1
  32. package/dist/tools/index-tools.d.ts.map +0 -1
  33. package/dist/tools/search-tools.d.ts.map +0 -1
  34. package/dist/tools/settings-tools.d.ts.map +0 -1
  35. package/dist/tools/settings-tools.js +0 -309
  36. package/dist/tools/system-tools.d.ts.map +0 -1
  37. package/dist/tools/task-tools.d.ts.map +0 -1
  38. package/dist/tools/vector-tools.d.ts.map +0 -1
  39. /package/dist/tools/{ai-tools.d.ts → core/ai-tools.d.ts} +0 -0
  40. /package/dist/tools/{document-tools.d.ts → meilisearch/document-tools.d.ts} +0 -0
  41. /package/dist/tools/{index-tools.d.ts → meilisearch/index-tools.d.ts} +0 -0
  42. /package/dist/tools/{search-tools.d.ts → meilisearch/search-tools.d.ts} +0 -0
  43. /package/dist/tools/{settings-tools.d.ts → meilisearch/settings-tools.d.ts} +0 -0
  44. /package/dist/tools/{system-tools.d.ts → meilisearch/system-tools.d.ts} +0 -0
  45. /package/dist/tools/{task-tools.d.ts → meilisearch/task-tools.d.ts} +0 -0
  46. /package/dist/tools/{vector-tools.d.ts → meilisearch/vector-tools.d.ts} +0 -0
package/README.md CHANGED
@@ -92,7 +92,7 @@ const client = new MCPClient("mcp-meilisearch-client");
92
92
 
93
93
  await client.connectToServer("http://localhost:4995/mcp");
94
94
 
95
- const result = await client.callTool("search-across-all-indexes", {
95
+ const result = await client.callTool("global-search", {
96
96
  q: "search kiosco antonio",
97
97
  });
98
98
 
@@ -306,7 +306,7 @@ The MCP server exposes various tools that allow you to interact with Meilisearch
306
306
  - **Parameters**:
307
307
  - `searches` (string, required): JSON array of search queries, each with indexUid and q fields.
308
308
 
309
- #### search-across-all-indexes
309
+ #### global-search
310
310
 
311
311
  - **Description**: Search for a term across all available Meilisearch indexes and return combined results.
312
312
  - **Parameters**:
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAQA,qBAAa,SAAS;IACpB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAS;IAE7B;;;OAGG;IACH,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACjC,EAAE,CAAM;IAET,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,oBAAoB,CAEZ;gBAEJ,UAAU,EAAE,MAAM;IAI9B;;;OAGG;IACH,sBAAsB,CACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,KAAK,IAAI;IAKzE;;;;;OAKG;IACG,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAOhE;;;;OAIG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAuBzC,SAAS;IAwBvB,OAAO,CAAC,kBAAkB;IAW1B;;;;;;OAMG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IA2CF;;;;;OAKG;IACG,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IAmCF,OAAO,CAAC,cAAc;IAKtB;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAQA,qBAAa,SAAS;IACpB;;;OAGG;IACH,WAAW,EAAE,OAAO,CAAS;IAE7B;;;OAGG;IACH,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACjC,EAAE,CAAM;IAET,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,SAAS,CAA8C;IAC/D,OAAO,CAAC,oBAAoB,CAEZ;gBAEJ,UAAU,EAAE,MAAM;IAI9B;;;OAGG;IACH,sBAAsB,CACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,KAAK,IAAI;IAKzE;;;;;OAKG;IACG,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAOhE;;;;OAIG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAuBzC,SAAS;IA0BvB,OAAO,CAAC,kBAAkB;IAW1B;;;;;;OAMG;IACG,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IA2CF;;;;;OAKG;IACG,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IAmCF,OAAO,CAAC,cAAc;IAKtB;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAK/B"}
package/dist/client.js CHANGED
@@ -70,7 +70,9 @@ export class MCPClient {
70
70
  this.tools = [];
71
71
  }
72
72
  else if (toolsResult.tools && Array.isArray(toolsResult.tools)) {
73
- this.tools = toolsResult.tools.map((tool) => ({
73
+ this.tools = toolsResult.tools
74
+ .filter(({ annotations }) => annotations?.category !== "core")
75
+ .map((tool) => ({
74
76
  name: tool.name,
75
77
  description: tool.description ?? "",
76
78
  parameters: tool.parameters || {},
@@ -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;AAgBvD,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE;;GAEG;AACH,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,UAAU,cAAc;IACtB,SAAS,EAAE,SAAS,CAAC;CACtB;AAmBD;;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,CAAe;IAC7B,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,QAAQ,CAAuC;IAEvD;;;;OAIG;gBACS,MAAM,EAAE,SAAS,EAAE,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IAOjE;;;;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;IAM3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;CA0B/B;AA+DD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GACrB,WAAW,OAAO,GAAG,MAAM,EAC3B,SAAS,OAAO,CAAC,YAAY,CAAC,KAC7B,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;AAUvD,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUpE;;GAEG;AACH,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,UAAU,cAAc;IACtB,SAAS,EAAE,SAAS,CAAC;CACtB;AAmBD;;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,CAAe;IAC7B,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,QAAQ,CAAuC;IAEvD;;;;OAIG;gBACS,MAAM,EAAE,SAAS,EAAE,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IAOjE;;;;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;IAM3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;CA0B/B;AA+DD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GACrB,WAAW,OAAO,GAAG,MAAM,EAC3B,SAAS,OAAO,CAAC,YAAY,CAAC,KAC7B,OAAO,CAAC,cAAc,CAcxB,CAAC"}
package/dist/server.js CHANGED
@@ -1,15 +1,15 @@
1
1
  import { randomUUID } from "node:crypto";
2
2
  import { InitializeRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
3
- import registerAITools from "./tools/ai-tools.js";
4
- import registerTaskTools from "./tools/task-tools.js";
5
- import registerIndexTools from "./tools/index-tools.js";
6
- import registerSearchTools from "./tools/search-tools.js";
7
- import registerSystemTools from "./tools/system-tools.js";
8
- import registerVectorTools from "./tools/vector-tools.js";
9
- import registerDocumentTools from "./tools/document-tools.js";
10
- import registerSettingsTools from "./tools/settings-tools.js";
3
+ import registerAITools from "./tools/core/ai-tools.js";
11
4
  import { createErrorResponse } from "./utils/error-handler.js";
5
+ import registerTaskTools from "./tools/meilisearch/task-tools.js";
12
6
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
+ import registerIndexTools from "./tools/meilisearch/index-tools.js";
8
+ import registerSearchTools from "./tools/meilisearch/search-tools.js";
9
+ import registerSystemTools from "./tools/meilisearch/system-tools.js";
10
+ import registerVectorTools from "./tools/meilisearch/vector-tools.js";
11
+ import registerDocumentTools from "./tools/meilisearch/document-tools.js";
12
+ import registerSettingsTools from "./tools/meilisearch/settings-tools.js";
13
13
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
14
14
  import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
15
15
  const defaultConfig = {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/core/ai-tools.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAapE;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,SAAS,SAyEhD,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { z } from "zod";
2
- import { AIService } from "../utils/ai-handler.js";
2
+ import { AIService } from "../../utils/ai-handler.js";
3
3
  import { zodToJsonSchema } from "zod-to-json-schema";
4
- import { createErrorResponse } from "../utils/error-handler.js";
4
+ import { createErrorResponse } from "../../utils/error-handler.js";
5
5
  /**
6
6
  * Register AI tools with the MCP server
7
7
  * @param server - The MCP server instance
@@ -13,11 +13,11 @@ export const registerAITools = (server) => {
13
13
  .array(z.string())
14
14
  .optional()
15
15
  .describe("Optional array of specific tool names to consider"),
16
- }, async ({ query, specificTools }) => {
16
+ }, { category: "core" }, async ({ query, specificTools }) => {
17
17
  try {
18
18
  const aiService = AIService.getInstance();
19
19
  const availableTools = Object.entries(server._registeredTools)
20
- .filter(([name]) => name !== "process-ai-query")
20
+ .filter(([_, { annotations }]) => annotations?.category !== "core")
21
21
  .map(([name, { description, inputSchema }]) => {
22
22
  const { definitions } = zodToJsonSchema(inputSchema, "parameters");
23
23
  return {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/meilisearch/document-tools.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiDpE;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,SAAS,SAyQtD,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
- import apiClient from "../utils/api-handler.js";
3
- import { createErrorResponse } from "../utils/error-handler.js";
2
+ import apiClient from "../../utils/api-handler.js";
3
+ import { createErrorResponse } from "../../utils/error-handler.js";
4
4
  /**
5
5
  * Register document management tools with the MCP server
6
6
  *
@@ -26,7 +26,7 @@ export const registerDocumentTools = (server) => {
26
26
  .optional()
27
27
  .describe("Fields to return in the documents"),
28
28
  filter: z.string().optional().describe("Filter query to apply"),
29
- }, async ({ indexUid, limit, offset, fields, filter }) => {
29
+ }, { category: "meilisearch" }, async ({ indexUid, limit, offset, fields, filter }) => {
30
30
  try {
31
31
  const response = await apiClient.get(`/indexes/${indexUid}/documents`, {
32
32
  params: {
@@ -54,7 +54,7 @@ export const registerDocumentTools = (server) => {
54
54
  .array(z.string())
55
55
  .optional()
56
56
  .describe("Fields to return in the document"),
57
- }, async ({ indexUid, documentId, fields }) => {
57
+ }, { category: "meilisearch" }, async ({ indexUid, documentId, fields }) => {
58
58
  try {
59
59
  const response = await apiClient.get(`/indexes/${indexUid}/documents/${documentId}`, {
60
60
  params: {
@@ -79,7 +79,7 @@ export const registerDocumentTools = (server) => {
79
79
  .string()
80
80
  .optional()
81
81
  .describe("Primary key for the documents"),
82
- }, async ({ indexUid, documents, primaryKey }) => {
82
+ }, { category: "meilisearch" }, async ({ indexUid, documents, primaryKey }) => {
83
83
  try {
84
84
  // Parse the documents string to ensure it's valid JSON
85
85
  const parsedDocuments = JSON.parse(documents);
@@ -115,7 +115,7 @@ export const registerDocumentTools = (server) => {
115
115
  .string()
116
116
  .optional()
117
117
  .describe("Primary key for the documents"),
118
- }, async ({ indexUid, documents, primaryKey }) => {
118
+ }, { category: "meilisearch" }, async ({ indexUid, documents, primaryKey }) => {
119
119
  try {
120
120
  // Parse the documents string to ensure it's valid JSON
121
121
  const parsedDocuments = JSON.parse(documents);
@@ -147,7 +147,7 @@ export const registerDocumentTools = (server) => {
147
147
  server.tool("delete-document", "Delete a document by its ID from a Meilisearch index", {
148
148
  indexUid: z.string().describe("Unique identifier of the index"),
149
149
  documentId: z.string().describe("ID of the document to delete"),
150
- }, async ({ indexUid, documentId }) => {
150
+ }, { category: "meilisearch" }, async ({ indexUid, documentId }) => {
151
151
  try {
152
152
  const response = await apiClient.delete(`/indexes/${indexUid}/documents/${documentId}`);
153
153
  return {
@@ -164,7 +164,7 @@ export const registerDocumentTools = (server) => {
164
164
  server.tool("delete-documents", "Delete multiple documents by their IDs from a Meilisearch index", {
165
165
  indexUid: z.string().describe("Unique identifier of the index"),
166
166
  documentIds: z.string().describe("JSON array of document IDs to delete"),
167
- }, async ({ indexUid, documentIds }) => {
167
+ }, { category: "meilisearch" }, async ({ indexUid, documentIds }) => {
168
168
  try {
169
169
  // Parse the document IDs string to ensure it's valid JSON
170
170
  const parsedDocumentIds = JSON.parse(documentIds);
@@ -191,7 +191,7 @@ export const registerDocumentTools = (server) => {
191
191
  // Delete all documents in an index
192
192
  server.tool("delete-all-documents", "Delete all documents in a Meilisearch index", {
193
193
  indexUid: z.string().describe("Unique identifier of the index"),
194
- }, async ({ indexUid }) => {
194
+ }, { category: "meilisearch" }, async ({ indexUid }) => {
195
195
  try {
196
196
  const response = await apiClient.delete(`/indexes/${indexUid}/documents`);
197
197
  return {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/meilisearch/index-tools.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAoCpE;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,SAAS,SAmLnD,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
- import apiClient from "../utils/api-handler.js";
3
- import { createErrorResponse } from "../utils/error-handler.js";
2
+ import apiClient from "../../utils/api-handler.js";
3
+ import { createErrorResponse } from "../../utils/error-handler.js";
4
4
  /**
5
5
  * Register index management tools with the MCP server
6
6
  *
@@ -20,7 +20,7 @@ export const registerIndexTools = (server) => {
20
20
  .min(0)
21
21
  .optional()
22
22
  .describe("Number of indexes to skip"),
23
- }, async ({ limit, offset }) => {
23
+ }, { category: "meilisearch" }, async ({ limit, offset }) => {
24
24
  try {
25
25
  const response = await apiClient.get("/indexes", {
26
26
  params: {
@@ -41,7 +41,7 @@ export const registerIndexTools = (server) => {
41
41
  // Get index information
42
42
  server.tool("get-index", "Get information about a specific Meilisearch index", {
43
43
  indexUid: z.string().describe("Unique identifier of the index"),
44
- }, async ({ indexUid }) => {
44
+ }, { category: "meilisearch" }, async ({ indexUid }) => {
45
45
  try {
46
46
  const response = await apiClient.get(`/indexes/${indexUid}`);
47
47
  return {
@@ -58,7 +58,7 @@ export const registerIndexTools = (server) => {
58
58
  server.tool("create-index", "Create a new Meilisearch index", {
59
59
  indexUid: z.string().describe("Unique identifier for the new index"),
60
60
  primaryKey: z.string().optional().describe("Primary key for the index"),
61
- }, async ({ indexUid, primaryKey }) => {
61
+ }, { category: "meilisearch" }, async ({ indexUid, primaryKey }) => {
62
62
  try {
63
63
  const response = await apiClient.post("/indexes", {
64
64
  uid: indexUid,
@@ -78,7 +78,7 @@ export const registerIndexTools = (server) => {
78
78
  server.tool("update-index", "Update a Meilisearch index (currently only supports updating the primary key)", {
79
79
  indexUid: z.string().describe("Unique identifier of the index"),
80
80
  primaryKey: z.string().describe("New primary key for the index"),
81
- }, async ({ indexUid, primaryKey }) => {
81
+ }, { category: "meilisearch" }, async ({ indexUid, primaryKey }) => {
82
82
  try {
83
83
  const response = await apiClient.patch(`/indexes/${indexUid}`, {
84
84
  primaryKey,
@@ -96,7 +96,7 @@ export const registerIndexTools = (server) => {
96
96
  // Delete an index
97
97
  server.tool("delete-index", "Delete a Meilisearch index", {
98
98
  indexUid: z.string().describe("Unique identifier of the index to delete"),
99
- }, async ({ indexUid }) => {
99
+ }, { category: "meilisearch" }, async ({ indexUid }) => {
100
100
  try {
101
101
  const response = await apiClient.delete(`/indexes/${indexUid}`);
102
102
  return {
@@ -114,7 +114,7 @@ export const registerIndexTools = (server) => {
114
114
  indexes: z
115
115
  .string()
116
116
  .describe('JSON array of index pairs to swap, e.g. [["movies", "movies_new"]]'),
117
- }, async ({ indexes }) => {
117
+ }, { category: "meilisearch" }, async ({ indexes }) => {
118
118
  try {
119
119
  // Parse the indexes string to ensure it's valid JSON
120
120
  const parsedIndexes = JSON.parse(indexes);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/meilisearch/search-tools.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAwFpE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,SAAS,SA6NpD,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -1,6 +1,59 @@
1
1
  import { z } from "zod";
2
- import apiClient from "../utils/api-handler.js";
3
- import { createErrorResponse } from "../utils/error-handler.js";
2
+ import apiClient from "../../utils/api-handler.js";
3
+ import { createErrorResponse } from "../../utils/error-handler.js";
4
+ const SearchParamsSchema = {
5
+ indexUid: z.string().describe("Unique identifier of the index"),
6
+ q: z.string().describe("Search query"),
7
+ limit: z
8
+ .number()
9
+ .min(1)
10
+ .optional()
11
+ .describe("Maximum number of results to return (default: 20)"),
12
+ offset: z
13
+ .number()
14
+ .min(0)
15
+ .optional()
16
+ .describe("Number of results to skip (default: 0)"),
17
+ filter: z.string().optional().describe("Filter query to apply"),
18
+ sort: z
19
+ .array(z.string())
20
+ .optional()
21
+ .describe('Attributes to sort by, e.g. ["price:asc"]'),
22
+ facets: z.array(z.string()).optional().describe("Facets to return"),
23
+ attributesToRetrieve: z
24
+ .array(z.string())
25
+ .optional()
26
+ .default(["*"])
27
+ .describe("Attributes to include in results"),
28
+ attributesToCrop: z
29
+ .array(z.string())
30
+ .optional()
31
+ .describe("Attributes to crop"),
32
+ cropLength: z
33
+ .number()
34
+ .optional()
35
+ .describe("Length at which to crop cropped attributes"),
36
+ attributesToHighlight: z
37
+ .array(z.string())
38
+ .optional()
39
+ .describe("Attributes to highlight"),
40
+ highlightPreTag: z
41
+ .string()
42
+ .optional()
43
+ .describe("Tag to insert before highlighted text"),
44
+ highlightPostTag: z
45
+ .string()
46
+ .optional()
47
+ .describe("Tag to insert after highlighted text"),
48
+ showMatchesPosition: z
49
+ .boolean()
50
+ .optional()
51
+ .describe("Whether to include match positions in results"),
52
+ matchingStrategy: z
53
+ .string()
54
+ .optional()
55
+ .describe("Matching strategy: 'all' or 'last'"),
56
+ };
4
57
  /**
5
58
  * Register search tools with the MCP server
6
59
  *
@@ -8,59 +61,7 @@ import { createErrorResponse } from "../utils/error-handler.js";
8
61
  */
9
62
  export const registerSearchTools = (server) => {
10
63
  // Search in an index
11
- server.tool("search", "Search for documents in a Meilisearch index", {
12
- indexUid: z.string().describe("Unique identifier of the index"),
13
- q: z.string().describe("Search query"),
14
- limit: z
15
- .number()
16
- .min(1)
17
- .optional()
18
- .describe("Maximum number of results to return (default: 20)"),
19
- offset: z
20
- .number()
21
- .min(0)
22
- .optional()
23
- .describe("Number of results to skip (default: 0)"),
24
- filter: z.string().optional().describe("Filter query to apply"),
25
- sort: z
26
- .array(z.string())
27
- .optional()
28
- .describe('Attributes to sort by, e.g. ["price:asc"]'),
29
- facets: z.array(z.string()).optional().describe("Facets to return"),
30
- attributesToRetrieve: z
31
- .array(z.string())
32
- .optional()
33
- .default(["*"])
34
- .describe("Attributes to include in results"),
35
- attributesToCrop: z
36
- .array(z.string())
37
- .optional()
38
- .describe("Attributes to crop"),
39
- cropLength: z
40
- .number()
41
- .optional()
42
- .describe("Length at which to crop cropped attributes"),
43
- attributesToHighlight: z
44
- .array(z.string())
45
- .optional()
46
- .describe("Attributes to highlight"),
47
- highlightPreTag: z
48
- .string()
49
- .optional()
50
- .describe("Tag to insert before highlighted text"),
51
- highlightPostTag: z
52
- .string()
53
- .optional()
54
- .describe("Tag to insert after highlighted text"),
55
- showMatchesPosition: z
56
- .boolean()
57
- .optional()
58
- .describe("Whether to include match positions in results"),
59
- matchingStrategy: z
60
- .string()
61
- .optional()
62
- .describe("Matching strategy: 'all' or 'last'"),
63
- }, async ({ indexUid, q, limit, offset, filter, sort, facets, attributesToRetrieve, attributesToCrop, cropLength, attributesToHighlight, highlightPreTag, highlightPostTag, showMatchesPosition, matchingStrategy, }) => {
64
+ server.tool("search", "Search for documents in a Meilisearch index", SearchParamsSchema, { category: "meilisearch" }, async ({ indexUid, q, limit, offset, filter, sort, facets, attributesToRetrieve, attributesToCrop, cropLength, attributesToHighlight, highlightPreTag, highlightPostTag, showMatchesPosition, matchingStrategy, }) => {
64
65
  try {
65
66
  const response = await apiClient.post(`/indexes/${indexUid}/search`, {
66
67
  q,
@@ -90,22 +91,20 @@ export const registerSearchTools = (server) => {
90
91
  });
91
92
  // Multi-search across multiple indexes
92
93
  server.tool("multi-search", "Perform multiple searches in one request", {
93
- searches: z
94
- .string()
95
- .describe("JSON array of search queries, each with indexUid and q fields"),
96
- }, async ({ searches }) => {
94
+ queries: z
95
+ .array(z.object(SearchParamsSchema))
96
+ .describe("JSON array of search queries, each with indexUid and q fields as required. Other fields of the SearchParams are optional."),
97
+ }, { category: "meilisearch" }, async ({ queries }) => {
97
98
  try {
98
- // Parse the searches string to ensure it's valid JSON
99
- const parsedSearches = JSON.parse(searches);
100
- // Ensure searches is an array
101
- if (!Array.isArray(parsedSearches)) {
99
+ // Ensure queries is an array
100
+ if (!Array.isArray(queries)) {
102
101
  return {
103
102
  isError: true,
104
- content: [{ type: "text", text: "Searches must be a JSON array" }],
103
+ content: [{ type: "text", text: "Queries must be a JSON array" }],
105
104
  };
106
105
  }
107
106
  // Ensure each search has at least indexUid
108
- for (const search of parsedSearches) {
107
+ for (const search of queries) {
109
108
  if (!search.indexUid) {
110
109
  return {
111
110
  isError: true,
@@ -119,7 +118,7 @@ export const registerSearchTools = (server) => {
119
118
  }
120
119
  }
121
120
  const response = await apiClient.post("/multi-search", {
122
- queries: parsedSearches,
121
+ queries,
123
122
  });
124
123
  return {
125
124
  content: [
@@ -131,7 +130,7 @@ export const registerSearchTools = (server) => {
131
130
  return createErrorResponse(error);
132
131
  }
133
132
  });
134
- server.tool("search-across-all-indexes", "Search for a term across all available Meilisearch indexes and return combined results.", {
133
+ server.tool("global-search", "Search for a term across all available Meilisearch indexes and return combined results.", {
135
134
  q: z.string().describe("Search query"),
136
135
  limit: z
137
136
  .number()
@@ -143,7 +142,7 @@ export const registerSearchTools = (server) => {
143
142
  .optional()
144
143
  .default(["*"])
145
144
  .describe("Attributes to include in results"),
146
- }, async ({ q, limit, attributesToRetrieve }) => {
145
+ }, { category: "meilisearch" }, async ({ q, limit, attributesToRetrieve }) => {
147
146
  try {
148
147
  const indexesResponse = await apiClient.get("/indexes", {
149
148
  params: { limit: 1000 },
@@ -202,7 +201,7 @@ export const registerSearchTools = (server) => {
202
201
  .string()
203
202
  .optional()
204
203
  .describe("Filter to apply to the base search"),
205
- }, async ({ indexUid, facetName, facetQuery, filter }) => {
204
+ }, { category: "meilisearch" }, async ({ indexUid, facetName, facetQuery, filter }) => {
206
205
  try {
207
206
  const params = {
208
207
  facetName,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/meilisearch/settings-tools.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE;;;;GAIG;AAEH;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,SAAS,SAgqCtD,CAAC;AAEF,eAAe,qBAAqB,CAAC"}