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.
- package/README.md +2 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +3 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +8 -8
- package/dist/tools/core/ai-tools.d.ts.map +1 -0
- package/dist/tools/{ai-tools.js → core/ai-tools.js} +4 -4
- package/dist/tools/meilisearch/document-tools.d.ts.map +1 -0
- package/dist/tools/{document-tools.js → meilisearch/document-tools.js} +9 -9
- package/dist/tools/meilisearch/index-tools.d.ts.map +1 -0
- package/dist/tools/{index-tools.js → meilisearch/index-tools.js} +8 -8
- package/dist/tools/meilisearch/search-tools.d.ts.map +1 -0
- package/dist/tools/{search-tools.js → meilisearch/search-tools.js} +68 -69
- package/dist/tools/meilisearch/settings-tools.d.ts.map +1 -0
- package/dist/tools/meilisearch/settings-tools.js +798 -0
- package/dist/tools/meilisearch/system-tools.d.ts.map +1 -0
- package/dist/tools/{system-tools.js → meilisearch/system-tools.js} +12 -32
- package/dist/tools/meilisearch/task-tools.d.ts.map +1 -0
- package/dist/tools/{task-tools.js → meilisearch/task-tools.js} +8 -8
- package/dist/tools/meilisearch/vector-tools.d.ts.map +1 -0
- package/dist/tools/{vector-tools.js → meilisearch/vector-tools.js} +8 -8
- package/dist/types/enums.d.ts +5 -0
- package/dist/types/enums.d.ts.map +1 -0
- package/dist/types/enums.js +5 -0
- package/dist/utils/ai-handler.d.ts +2 -1
- package/dist/utils/ai-handler.d.ts.map +1 -1
- package/dist/utils/ai-handler.js +11 -8
- package/dist/utils/response-handler.js +30 -1
- package/package.json +4 -4
- package/dist/tools/ai-tools.d.ts.map +0 -1
- package/dist/tools/document-tools.d.ts.map +0 -1
- package/dist/tools/index-tools.d.ts.map +0 -1
- package/dist/tools/search-tools.d.ts.map +0 -1
- package/dist/tools/settings-tools.d.ts.map +0 -1
- package/dist/tools/settings-tools.js +0 -309
- package/dist/tools/system-tools.d.ts.map +0 -1
- package/dist/tools/task-tools.d.ts.map +0 -1
- package/dist/tools/vector-tools.d.ts.map +0 -1
- /package/dist/tools/{ai-tools.d.ts → core/ai-tools.d.ts} +0 -0
- /package/dist/tools/{document-tools.d.ts → meilisearch/document-tools.d.ts} +0 -0
- /package/dist/tools/{index-tools.d.ts → meilisearch/index-tools.d.ts} +0 -0
- /package/dist/tools/{search-tools.d.ts → meilisearch/search-tools.d.ts} +0 -0
- /package/dist/tools/{settings-tools.d.ts → meilisearch/settings-tools.d.ts} +0 -0
- /package/dist/tools/{system-tools.d.ts → meilisearch/system-tools.d.ts} +0 -0
- /package/dist/tools/{task-tools.d.ts → meilisearch/task-tools.d.ts} +0 -0
- /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
|
|
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
|
|
309
|
+
#### global-search
|
|
310
310
|
|
|
311
311
|
- **Description**: Search for a term across all available Meilisearch indexes and return combined results.
|
|
312
312
|
- **Parameters**:
|
package/dist/client.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
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 || {},
|
package/dist/server.d.ts.map
CHANGED
|
@@ -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;
|
|
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 "
|
|
2
|
+
import { AIService } from "../../utils/ai-handler.js";
|
|
3
3
|
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
4
|
-
import { createErrorResponse } from "
|
|
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(([
|
|
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 "
|
|
3
|
-
import { createErrorResponse } from "
|
|
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 "
|
|
3
|
-
import { createErrorResponse } from "
|
|
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 "
|
|
3
|
-
import { createErrorResponse } from "
|
|
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
|
-
|
|
94
|
-
.
|
|
95
|
-
.describe("JSON array of search queries, each with indexUid and q fields"),
|
|
96
|
-
}, async ({
|
|
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
|
-
//
|
|
99
|
-
|
|
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: "
|
|
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
|
|
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
|
|
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
|
|
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"}
|