@mhalder/qdrant-mcp-server 3.2.0 → 3.3.0
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/.dagger/.gitattributes +1 -0
- package/.dagger/package.json +6 -0
- package/.dagger/src/index.ts +83 -0
- package/.dagger/tsconfig.json +13 -0
- package/.dagger/yarn.lock +8 -0
- package/.github/workflows/ci.yml +17 -27
- package/.github/workflows/release.yml +16 -19
- package/CHANGELOG.md +13 -0
- package/README.md +11 -9
- package/build/code/chunker/tree-sitter-chunker.d.ts.map +1 -1
- package/build/code/chunker/tree-sitter-chunker.js +15 -3
- package/build/code/chunker/tree-sitter-chunker.js.map +1 -1
- package/build/code/indexer.d.ts +1 -0
- package/build/code/indexer.d.ts.map +1 -1
- package/build/code/indexer.js +24 -4
- package/build/code/indexer.js.map +1 -1
- package/build/embeddings/cohere.d.ts +1 -0
- package/build/embeddings/cohere.d.ts.map +1 -1
- package/build/embeddings/cohere.js +8 -1
- package/build/embeddings/cohere.js.map +1 -1
- package/build/embeddings/cohere.test.js +11 -0
- package/build/embeddings/cohere.test.js.map +1 -1
- package/build/embeddings/factory.d.ts.map +1 -1
- package/build/embeddings/factory.js +2 -0
- package/build/embeddings/factory.js.map +1 -1
- package/build/embeddings/factory.test.js +12 -1
- package/build/embeddings/factory.test.js.map +1 -1
- package/build/embeddings/ollama.d.ts +1 -0
- package/build/embeddings/ollama.d.ts.map +1 -1
- package/build/embeddings/ollama.js +8 -1
- package/build/embeddings/ollama.js.map +1 -1
- package/build/embeddings/ollama.test.js +11 -0
- package/build/embeddings/ollama.test.js.map +1 -1
- package/build/embeddings/openai.d.ts +1 -0
- package/build/embeddings/openai.d.ts.map +1 -1
- package/build/embeddings/openai.js +8 -1
- package/build/embeddings/openai.js.map +1 -1
- package/build/embeddings/openai.test.js +11 -0
- package/build/embeddings/openai.test.js.map +1 -1
- package/build/embeddings/voyage.d.ts +1 -0
- package/build/embeddings/voyage.d.ts.map +1 -1
- package/build/embeddings/voyage.js +8 -1
- package/build/embeddings/voyage.js.map +1 -1
- package/build/embeddings/voyage.test.js +11 -0
- package/build/embeddings/voyage.test.js.map +1 -1
- package/build/git/indexer.d.ts +1 -0
- package/build/git/indexer.d.ts.map +1 -1
- package/build/git/indexer.js +16 -3
- package/build/git/indexer.js.map +1 -1
- package/build/git/indexer.test.js +15 -9
- package/build/git/indexer.test.js.map +1 -1
- package/build/index.js +35 -26
- package/build/index.js.map +1 -1
- package/build/index.test.js +105 -91
- package/build/index.test.js.map +1 -1
- package/build/logger.d.ts +4 -0
- package/build/logger.d.ts.map +1 -0
- package/build/logger.js +24 -0
- package/build/logger.js.map +1 -0
- package/build/qdrant/client.d.ts +1 -0
- package/build/qdrant/client.d.ts.map +1 -1
- package/build/qdrant/client.js +10 -0
- package/build/qdrant/client.js.map +1 -1
- package/build/qdrant/client.test.js +11 -0
- package/build/qdrant/client.test.js.map +1 -1
- package/build/tools/code.d.ts.map +1 -1
- package/build/tools/code.js +44 -13
- package/build/tools/code.js.map +1 -1
- package/build/tools/collection.d.ts.map +1 -1
- package/build/tools/collection.js +15 -8
- package/build/tools/collection.js.map +1 -1
- package/build/tools/document.d.ts.map +1 -1
- package/build/tools/document.js +9 -4
- package/build/tools/document.js.map +1 -1
- package/build/tools/federated.d.ts.map +1 -1
- package/build/tools/federated.js +9 -4
- package/build/tools/federated.js.map +1 -1
- package/build/tools/federated.test.js +11 -0
- package/build/tools/federated.test.js.map +1 -1
- package/build/tools/git-history.d.ts.map +1 -1
- package/build/tools/git-history.js +44 -12
- package/build/tools/git-history.js.map +1 -1
- package/build/tools/logging.d.ts +16 -0
- package/build/tools/logging.d.ts.map +1 -0
- package/build/tools/logging.js +68 -0
- package/build/tools/logging.js.map +1 -0
- package/build/tools/logging.test.d.ts +2 -0
- package/build/tools/logging.test.d.ts.map +1 -0
- package/build/tools/logging.test.js +139 -0
- package/build/tools/logging.test.js.map +1 -0
- package/build/tools/schemas.d.ts +32 -19
- package/build/tools/schemas.d.ts.map +1 -1
- package/build/tools/schemas.js +9 -3
- package/build/tools/schemas.js.map +1 -1
- package/build/tools/search.d.ts.map +1 -1
- package/build/tools/search.js +13 -4
- package/build/tools/search.js.map +1 -1
- package/dagger.json +8 -0
- package/mise.toml +2 -0
- package/package.json +14 -13
- package/src/code/chunker/tree-sitter-chunker.ts +41 -9
- package/src/code/indexer.ts +41 -6
- package/src/embeddings/cohere.test.ts +12 -0
- package/src/embeddings/cohere.ts +10 -2
- package/src/embeddings/factory.test.ts +13 -1
- package/src/embeddings/factory.ts +3 -0
- package/src/embeddings/ollama.test.ts +12 -0
- package/src/embeddings/ollama.ts +10 -2
- package/src/embeddings/openai.test.ts +12 -0
- package/src/embeddings/openai.ts +10 -2
- package/src/embeddings/voyage.test.ts +12 -0
- package/src/embeddings/voyage.ts +10 -2
- package/src/git/indexer.test.ts +22 -16
- package/src/git/indexer.ts +30 -4
- package/src/index.test.ts +128 -106
- package/src/index.ts +59 -38
- package/src/logger.ts +33 -0
- package/src/qdrant/client.test.ts +12 -0
- package/src/qdrant/client.ts +22 -0
- package/src/tools/code.ts +107 -62
- package/src/tools/collection.ts +39 -22
- package/src/tools/document.ts +52 -22
- package/src/tools/federated.test.ts +12 -0
- package/src/tools/federated.ts +143 -125
- package/src/tools/git-history.ts +117 -60
- package/src/tools/logging.test.ts +206 -0
- package/src/tools/logging.ts +85 -0
- package/src/tools/schemas.ts +9 -3
- package/src/tools/search.ts +93 -71
- package/tests/code/chunker/tree-sitter-chunker.test.ts +13 -1
- package/tests/code/indexer.test.ts +12 -0
- package/tests/code/integration.test.ts +14 -1
package/build/index.js
CHANGED
|
@@ -7,6 +7,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
|
|
|
7
7
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
8
8
|
import Bottleneck from "bottleneck";
|
|
9
9
|
import express from "express";
|
|
10
|
+
import logger from "./logger.js";
|
|
10
11
|
import { DEFAULT_BATCH_SIZE, DEFAULT_CHUNK_OVERLAP, DEFAULT_CHUNK_SIZE, DEFAULT_CODE_EXTENSIONS, DEFAULT_IGNORE_PATTERNS, DEFAULT_SEARCH_LIMIT, } from "./code/config.js";
|
|
11
12
|
import { CodeIndexer } from "./code/indexer.js";
|
|
12
13
|
import { DEFAULT_GIT_CONFIG, GitHistoryIndexer } from "./git/index.js";
|
|
@@ -29,7 +30,7 @@ const PROMPTS_CONFIG_FILE = process.env.PROMPTS_CONFIG_FILE || join(__dirname, "
|
|
|
29
30
|
// Validate HTTP_PORT when HTTP mode is selected
|
|
30
31
|
if (TRANSPORT_MODE === "http") {
|
|
31
32
|
if (Number.isNaN(HTTP_PORT) || HTTP_PORT < 1 || HTTP_PORT > 65535) {
|
|
32
|
-
|
|
33
|
+
logger.fatal({ port: process.env.HTTP_PORT }, "Invalid HTTP_PORT. Must be a number between 1 and 65535");
|
|
33
34
|
process.exit(1);
|
|
34
35
|
}
|
|
35
36
|
}
|
|
@@ -51,11 +52,11 @@ if (EMBEDDING_PROVIDER !== "ollama") {
|
|
|
51
52
|
requiredKeyName = "VOYAGE_API_KEY";
|
|
52
53
|
break;
|
|
53
54
|
default:
|
|
54
|
-
|
|
55
|
+
logger.fatal({ provider: EMBEDDING_PROVIDER }, "Unknown embedding provider. Supported providers: openai, cohere, voyage, ollama");
|
|
55
56
|
process.exit(1);
|
|
56
57
|
}
|
|
57
58
|
if (!apiKey) {
|
|
58
|
-
|
|
59
|
+
logger.fatal({ provider: EMBEDDING_PROVIDER, requiredKey: requiredKeyName }, `${requiredKeyName} is required for ${EMBEDDING_PROVIDER} provider`);
|
|
59
60
|
process.exit(1);
|
|
60
61
|
}
|
|
61
62
|
}
|
|
@@ -88,14 +89,14 @@ async function checkOllamaAvailability() {
|
|
|
88
89
|
`Please ensure the model is available on your Ollama instance:\n` +
|
|
89
90
|
` ollama pull ${modelName}`;
|
|
90
91
|
}
|
|
91
|
-
|
|
92
|
+
logger.fatal({ model: modelName }, errorMessage);
|
|
92
93
|
process.exit(1);
|
|
93
94
|
}
|
|
94
95
|
}
|
|
95
96
|
catch (error) {
|
|
96
97
|
const errorMessage = error instanceof Error
|
|
97
|
-
?
|
|
98
|
-
: `
|
|
98
|
+
? error.message
|
|
99
|
+
: `Ollama is not running at ${baseUrl}`;
|
|
99
100
|
let helpText = "";
|
|
100
101
|
if (isLocalhost) {
|
|
101
102
|
helpText =
|
|
@@ -113,14 +114,20 @@ async function checkOllamaAvailability() {
|
|
|
113
114
|
` - The URL is accessible from this machine\n` +
|
|
114
115
|
` - The embedding model is available (e.g., nomic-embed-text)`;
|
|
115
116
|
}
|
|
116
|
-
|
|
117
|
+
logger.fatal({ baseUrl, err: error }, `${errorMessage}\n${helpText}`);
|
|
117
118
|
process.exit(1);
|
|
118
119
|
}
|
|
119
120
|
}
|
|
120
121
|
}
|
|
121
122
|
// Initialize clients
|
|
122
123
|
const qdrant = new QdrantManager(QDRANT_URL, QDRANT_API_KEY);
|
|
124
|
+
logger.info({ url: QDRANT_URL }, "Qdrant client initialized");
|
|
123
125
|
const embeddings = EmbeddingProviderFactory.createFromEnv();
|
|
126
|
+
logger.info({
|
|
127
|
+
provider: EMBEDDING_PROVIDER,
|
|
128
|
+
model: embeddings.getModel(),
|
|
129
|
+
dimensions: embeddings.getDimensions(),
|
|
130
|
+
}, "Embedding provider initialized");
|
|
124
131
|
// Initialize code indexer
|
|
125
132
|
const codeConfig = {
|
|
126
133
|
chunkSize: parseInt(process.env.CODE_CHUNK_SIZE || String(DEFAULT_CHUNK_SIZE), 10),
|
|
@@ -133,6 +140,7 @@ const codeConfig = {
|
|
|
133
140
|
enableHybridSearch: process.env.CODE_ENABLE_HYBRID === "true",
|
|
134
141
|
};
|
|
135
142
|
const codeIndexer = new CodeIndexer(qdrant, embeddings, codeConfig);
|
|
143
|
+
logger.debug({ codeConfig }, "Code indexer configured");
|
|
136
144
|
// Initialize git history indexer
|
|
137
145
|
const gitConfig = {
|
|
138
146
|
maxCommits: parseInt(process.env.GIT_MAX_COMMITS || String(DEFAULT_GIT_CONFIG.maxCommits), 10),
|
|
@@ -149,15 +157,16 @@ const gitConfig = {
|
|
|
149
157
|
enableHybridSearch: process.env.GIT_ENABLE_HYBRID !== "false",
|
|
150
158
|
};
|
|
151
159
|
const gitHistoryIndexer = new GitHistoryIndexer(qdrant, embeddings, gitConfig);
|
|
160
|
+
logger.debug({ gitConfig }, "Git history indexer configured");
|
|
152
161
|
// Load prompts configuration if file exists
|
|
153
162
|
let promptsConfig = null;
|
|
154
163
|
if (existsSync(PROMPTS_CONFIG_FILE)) {
|
|
155
164
|
try {
|
|
156
165
|
promptsConfig = loadPromptsConfig(PROMPTS_CONFIG_FILE);
|
|
157
|
-
|
|
166
|
+
logger.info({ count: promptsConfig.prompts.length, file: PROMPTS_CONFIG_FILE }, "Loaded prompts config");
|
|
158
167
|
}
|
|
159
168
|
catch (error) {
|
|
160
|
-
|
|
169
|
+
logger.fatal({ file: PROMPTS_CONFIG_FILE, err: error }, "Failed to load prompts configuration");
|
|
161
170
|
process.exit(1);
|
|
162
171
|
}
|
|
163
172
|
}
|
|
@@ -182,7 +191,7 @@ function createAndConfigureServer() {
|
|
|
182
191
|
return server;
|
|
183
192
|
}
|
|
184
193
|
catch (error) {
|
|
185
|
-
|
|
194
|
+
logger.error({ err: error }, "Failed to configure MCP server");
|
|
186
195
|
throw error;
|
|
187
196
|
}
|
|
188
197
|
}
|
|
@@ -193,7 +202,7 @@ async function startStdioServer() {
|
|
|
193
202
|
await checkOllamaAvailability();
|
|
194
203
|
const transport = new StdioServerTransport();
|
|
195
204
|
await server.connect(transport);
|
|
196
|
-
|
|
205
|
+
logger.info("Qdrant MCP server running on stdio");
|
|
197
206
|
}
|
|
198
207
|
// Constants for HTTP server configuration
|
|
199
208
|
const RATE_LIMIT_MAX_REQUESTS = 100; // Max requests per window
|
|
@@ -204,7 +213,7 @@ const REQUEST_TIMEOUT_MS = parseInt(process.env.HTTP_REQUEST_TIMEOUT_MS || "3000
|
|
|
204
213
|
const SHUTDOWN_GRACE_PERIOD_MS = 10 * 1000; // 10 seconds
|
|
205
214
|
// Validate REQUEST_TIMEOUT_MS
|
|
206
215
|
if (Number.isNaN(REQUEST_TIMEOUT_MS) || REQUEST_TIMEOUT_MS <= 0) {
|
|
207
|
-
|
|
216
|
+
logger.fatal({ value: process.env.HTTP_REQUEST_TIMEOUT_MS }, "Invalid HTTP_REQUEST_TIMEOUT_MS. Must be a positive integer");
|
|
208
217
|
process.exit(1);
|
|
209
218
|
}
|
|
210
219
|
// Start server with HTTP transport
|
|
@@ -247,7 +256,7 @@ async function startHttpServer() {
|
|
|
247
256
|
ipLastAccess.delete(ip);
|
|
248
257
|
});
|
|
249
258
|
if (keysToDelete.length > 0) {
|
|
250
|
-
|
|
259
|
+
logger.debug({ count: keysToDelete.length }, "Cleaned up inactive rate limiters");
|
|
251
260
|
}
|
|
252
261
|
}, RATE_LIMITER_CLEANUP_INTERVAL_MS);
|
|
253
262
|
// Rate limiting middleware
|
|
@@ -264,10 +273,10 @@ async function startHttpServer() {
|
|
|
264
273
|
catch (error) {
|
|
265
274
|
// Differentiate between rate limit errors and unexpected errors
|
|
266
275
|
if (error instanceof Bottleneck.BottleneckError) {
|
|
267
|
-
|
|
276
|
+
logger.warn({ clientIp }, "Rate limit exceeded");
|
|
268
277
|
}
|
|
269
278
|
else {
|
|
270
|
-
|
|
279
|
+
logger.error({ clientIp, err: error }, "Unexpected rate limiting error");
|
|
271
280
|
}
|
|
272
281
|
sendErrorResponse(res, -32000, "Too many requests", 429);
|
|
273
282
|
}
|
|
@@ -302,7 +311,7 @@ async function startHttpServer() {
|
|
|
302
311
|
const timeoutId = setTimeout(() => {
|
|
303
312
|
sendErrorResponse(res, -32000, "Request timeout", 504);
|
|
304
313
|
cleanup().catch((err) => {
|
|
305
|
-
|
|
314
|
+
logger.error({ err }, "Error during timeout cleanup");
|
|
306
315
|
});
|
|
307
316
|
}, REQUEST_TIMEOUT_MS);
|
|
308
317
|
try {
|
|
@@ -316,29 +325,29 @@ async function startHttpServer() {
|
|
|
316
325
|
const cleanupHandler = () => {
|
|
317
326
|
clearTimeout(timeoutId);
|
|
318
327
|
cleanup().catch((err) => {
|
|
319
|
-
|
|
328
|
+
logger.error({ err }, "Error during response cleanup");
|
|
320
329
|
});
|
|
321
330
|
};
|
|
322
331
|
res.on("finish", cleanupHandler);
|
|
323
332
|
res.on("close", cleanupHandler);
|
|
324
333
|
res.on("error", (err) => {
|
|
325
|
-
|
|
334
|
+
logger.error({ err }, "Response stream error");
|
|
326
335
|
cleanupHandler();
|
|
327
336
|
});
|
|
328
337
|
}
|
|
329
338
|
catch (error) {
|
|
330
339
|
clearTimeout(timeoutId);
|
|
331
|
-
|
|
340
|
+
logger.error({ err: error }, "Error handling MCP request");
|
|
332
341
|
sendErrorResponse(res, -32603, "Internal server error");
|
|
333
342
|
await cleanup();
|
|
334
343
|
}
|
|
335
344
|
});
|
|
336
345
|
const httpServer = app
|
|
337
346
|
.listen(HTTP_PORT, () => {
|
|
338
|
-
|
|
347
|
+
logger.info({ port: HTTP_PORT }, "Qdrant MCP server running on HTTP");
|
|
339
348
|
})
|
|
340
349
|
.on("error", (error) => {
|
|
341
|
-
|
|
350
|
+
logger.fatal({ err: error }, "HTTP server error");
|
|
342
351
|
process.exit(1);
|
|
343
352
|
});
|
|
344
353
|
// Graceful shutdown handling
|
|
@@ -347,17 +356,17 @@ async function startHttpServer() {
|
|
|
347
356
|
if (isShuttingDown)
|
|
348
357
|
return;
|
|
349
358
|
isShuttingDown = true;
|
|
350
|
-
|
|
359
|
+
logger.info("Shutdown signal received, closing HTTP server gracefully");
|
|
351
360
|
// Clear the cleanup interval to allow graceful shutdown
|
|
352
361
|
clearInterval(cleanupIntervalId);
|
|
353
362
|
// Force shutdown after grace period
|
|
354
363
|
const forceTimeout = setTimeout(() => {
|
|
355
|
-
|
|
364
|
+
logger.warn("Forcing shutdown after timeout");
|
|
356
365
|
process.exit(1);
|
|
357
366
|
}, SHUTDOWN_GRACE_PERIOD_MS);
|
|
358
367
|
httpServer.close(() => {
|
|
359
368
|
clearTimeout(forceTimeout);
|
|
360
|
-
|
|
369
|
+
logger.info("HTTP server closed");
|
|
361
370
|
process.exit(0);
|
|
362
371
|
});
|
|
363
372
|
};
|
|
@@ -373,12 +382,12 @@ async function main() {
|
|
|
373
382
|
await startStdioServer();
|
|
374
383
|
}
|
|
375
384
|
else {
|
|
376
|
-
|
|
385
|
+
logger.fatal({ mode: TRANSPORT_MODE }, "Invalid TRANSPORT_MODE. Supported modes: stdio, http");
|
|
377
386
|
process.exit(1);
|
|
378
387
|
}
|
|
379
388
|
}
|
|
380
389
|
main().catch((error) => {
|
|
381
|
-
|
|
390
|
+
logger.fatal({ err: error }, "Fatal error");
|
|
382
391
|
process.exit(1);
|
|
383
392
|
});
|
|
384
393
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/build/index.test.js
CHANGED
|
@@ -1,235 +1,249 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from
|
|
2
|
-
vi.mock(
|
|
3
|
-
vi.mock(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { describe, it, expect, vi } from "vitest";
|
|
2
|
+
vi.mock("./qdrant/client.js");
|
|
3
|
+
vi.mock("./embeddings/openai.js");
|
|
4
|
+
vi.mock("./logger.js", () => ({
|
|
5
|
+
default: {
|
|
6
|
+
info: vi.fn(),
|
|
7
|
+
warn: vi.fn(),
|
|
8
|
+
error: vi.fn(),
|
|
9
|
+
debug: vi.fn(),
|
|
10
|
+
fatal: vi.fn(),
|
|
11
|
+
trace: vi.fn(),
|
|
12
|
+
child: vi.fn().mockReturnThis(),
|
|
13
|
+
},
|
|
14
|
+
}));
|
|
15
|
+
describe("MCP Server Tool Schemas", () => {
|
|
16
|
+
describe("CreateCollectionSchema", () => {
|
|
17
|
+
it("should validate correct collection creation input", async () => {
|
|
18
|
+
const { z } = await import("zod");
|
|
8
19
|
const CreateCollectionSchema = z.object({
|
|
9
20
|
name: z.string(),
|
|
10
|
-
distance: z.enum([
|
|
21
|
+
distance: z.enum(["Cosine", "Euclid", "Dot"]).optional(),
|
|
11
22
|
});
|
|
12
|
-
const validInput = { name:
|
|
23
|
+
const validInput = { name: "test-collection" };
|
|
13
24
|
expect(() => CreateCollectionSchema.parse(validInput)).not.toThrow();
|
|
14
|
-
const validInputWithDistance = {
|
|
25
|
+
const validInputWithDistance = {
|
|
26
|
+
name: "test-collection",
|
|
27
|
+
distance: "Cosine",
|
|
28
|
+
};
|
|
15
29
|
expect(() => CreateCollectionSchema.parse(validInputWithDistance)).not.toThrow();
|
|
16
30
|
});
|
|
17
|
-
it(
|
|
18
|
-
const { z } = await import(
|
|
31
|
+
it("should reject invalid distance metric", async () => {
|
|
32
|
+
const { z } = await import("zod");
|
|
19
33
|
const CreateCollectionSchema = z.object({
|
|
20
34
|
name: z.string(),
|
|
21
|
-
distance: z.enum([
|
|
35
|
+
distance: z.enum(["Cosine", "Euclid", "Dot"]).optional(),
|
|
22
36
|
});
|
|
23
|
-
const invalidInput = { name:
|
|
37
|
+
const invalidInput = { name: "test", distance: "Invalid" };
|
|
24
38
|
expect(() => CreateCollectionSchema.parse(invalidInput)).toThrow();
|
|
25
39
|
});
|
|
26
|
-
it(
|
|
27
|
-
const { z } = await import(
|
|
40
|
+
it("should require name field", async () => {
|
|
41
|
+
const { z } = await import("zod");
|
|
28
42
|
const CreateCollectionSchema = z.object({
|
|
29
43
|
name: z.string(),
|
|
30
|
-
distance: z.enum([
|
|
44
|
+
distance: z.enum(["Cosine", "Euclid", "Dot"]).optional(),
|
|
31
45
|
});
|
|
32
|
-
const invalidInput = { distance:
|
|
46
|
+
const invalidInput = { distance: "Cosine" };
|
|
33
47
|
expect(() => CreateCollectionSchema.parse(invalidInput)).toThrow();
|
|
34
48
|
});
|
|
35
49
|
});
|
|
36
|
-
describe(
|
|
37
|
-
it(
|
|
38
|
-
const { z } = await import(
|
|
50
|
+
describe("AddDocumentsSchema", () => {
|
|
51
|
+
it("should validate correct document addition input", async () => {
|
|
52
|
+
const { z } = await import("zod");
|
|
39
53
|
const AddDocumentsSchema = z.object({
|
|
40
54
|
collection: z.string(),
|
|
41
55
|
documents: z.array(z.object({
|
|
42
56
|
id: z.union([z.string(), z.number()]),
|
|
43
57
|
text: z.string(),
|
|
44
|
-
metadata: z.record(z.any()).optional(),
|
|
58
|
+
metadata: z.record(z.string(), z.any()).optional(),
|
|
45
59
|
})),
|
|
46
60
|
});
|
|
47
61
|
const validInput = {
|
|
48
|
-
collection:
|
|
62
|
+
collection: "test-collection",
|
|
49
63
|
documents: [
|
|
50
|
-
{ id: 1, text:
|
|
51
|
-
{ id:
|
|
64
|
+
{ id: 1, text: "test document" },
|
|
65
|
+
{ id: "doc-2", text: "another document", metadata: { type: "test" } },
|
|
52
66
|
],
|
|
53
67
|
};
|
|
54
68
|
expect(() => AddDocumentsSchema.parse(validInput)).not.toThrow();
|
|
55
69
|
});
|
|
56
|
-
it(
|
|
57
|
-
const { z } = await import(
|
|
70
|
+
it("should accept both string and number IDs", async () => {
|
|
71
|
+
const { z } = await import("zod");
|
|
58
72
|
const AddDocumentsSchema = z.object({
|
|
59
73
|
collection: z.string(),
|
|
60
74
|
documents: z.array(z.object({
|
|
61
75
|
id: z.union([z.string(), z.number()]),
|
|
62
76
|
text: z.string(),
|
|
63
|
-
metadata: z.record(z.any()).optional(),
|
|
77
|
+
metadata: z.record(z.string(), z.any()).optional(),
|
|
64
78
|
})),
|
|
65
79
|
});
|
|
66
80
|
const stringIdInput = {
|
|
67
|
-
collection:
|
|
68
|
-
documents: [{ id:
|
|
81
|
+
collection: "test",
|
|
82
|
+
documents: [{ id: "string-id", text: "test" }],
|
|
69
83
|
};
|
|
70
84
|
expect(() => AddDocumentsSchema.parse(stringIdInput)).not.toThrow();
|
|
71
85
|
const numberIdInput = {
|
|
72
|
-
collection:
|
|
73
|
-
documents: [{ id: 123, text:
|
|
86
|
+
collection: "test",
|
|
87
|
+
documents: [{ id: 123, text: "test" }],
|
|
74
88
|
};
|
|
75
89
|
expect(() => AddDocumentsSchema.parse(numberIdInput)).not.toThrow();
|
|
76
90
|
});
|
|
77
|
-
it(
|
|
78
|
-
const { z } = await import(
|
|
91
|
+
it("should require text field in documents", async () => {
|
|
92
|
+
const { z } = await import("zod");
|
|
79
93
|
const AddDocumentsSchema = z.object({
|
|
80
94
|
collection: z.string(),
|
|
81
95
|
documents: z.array(z.object({
|
|
82
96
|
id: z.union([z.string(), z.number()]),
|
|
83
97
|
text: z.string(),
|
|
84
|
-
metadata: z.record(z.any()).optional(),
|
|
98
|
+
metadata: z.record(z.string(), z.any()).optional(),
|
|
85
99
|
})),
|
|
86
100
|
});
|
|
87
101
|
const invalidInput = {
|
|
88
|
-
collection:
|
|
102
|
+
collection: "test",
|
|
89
103
|
documents: [{ id: 1, metadata: {} }],
|
|
90
104
|
};
|
|
91
105
|
expect(() => AddDocumentsSchema.parse(invalidInput)).toThrow();
|
|
92
106
|
});
|
|
93
107
|
});
|
|
94
|
-
describe(
|
|
95
|
-
it(
|
|
96
|
-
const { z } = await import(
|
|
108
|
+
describe("SemanticSearchSchema", () => {
|
|
109
|
+
it("should validate correct search input", async () => {
|
|
110
|
+
const { z } = await import("zod");
|
|
97
111
|
const SemanticSearchSchema = z.object({
|
|
98
112
|
collection: z.string(),
|
|
99
113
|
query: z.string(),
|
|
100
114
|
limit: z.number().optional(),
|
|
101
|
-
filter: z.record(z.any()).optional(),
|
|
115
|
+
filter: z.record(z.string(), z.any()).optional(),
|
|
102
116
|
});
|
|
103
117
|
const validInput = {
|
|
104
|
-
collection:
|
|
105
|
-
query:
|
|
118
|
+
collection: "test-collection",
|
|
119
|
+
query: "search query",
|
|
106
120
|
limit: 10,
|
|
107
|
-
filter: { category:
|
|
121
|
+
filter: { category: "test" },
|
|
108
122
|
};
|
|
109
123
|
expect(() => SemanticSearchSchema.parse(validInput)).not.toThrow();
|
|
110
124
|
});
|
|
111
|
-
it(
|
|
112
|
-
const { z } = await import(
|
|
125
|
+
it("should work with minimal input", async () => {
|
|
126
|
+
const { z } = await import("zod");
|
|
113
127
|
const SemanticSearchSchema = z.object({
|
|
114
128
|
collection: z.string(),
|
|
115
129
|
query: z.string(),
|
|
116
130
|
limit: z.number().optional(),
|
|
117
|
-
filter: z.record(z.any()).optional(),
|
|
131
|
+
filter: z.record(z.string(), z.any()).optional(),
|
|
118
132
|
});
|
|
119
133
|
const minimalInput = {
|
|
120
|
-
collection:
|
|
121
|
-
query:
|
|
134
|
+
collection: "test",
|
|
135
|
+
query: "search",
|
|
122
136
|
};
|
|
123
137
|
expect(() => SemanticSearchSchema.parse(minimalInput)).not.toThrow();
|
|
124
138
|
});
|
|
125
|
-
it(
|
|
126
|
-
const { z } = await import(
|
|
139
|
+
it("should require collection and query", async () => {
|
|
140
|
+
const { z } = await import("zod");
|
|
127
141
|
const SemanticSearchSchema = z.object({
|
|
128
142
|
collection: z.string(),
|
|
129
143
|
query: z.string(),
|
|
130
144
|
limit: z.number().optional(),
|
|
131
|
-
filter: z.record(z.any()).optional(),
|
|
145
|
+
filter: z.record(z.string(), z.any()).optional(),
|
|
132
146
|
});
|
|
133
|
-
const missingQuery = { collection:
|
|
147
|
+
const missingQuery = { collection: "test", limit: 5 };
|
|
134
148
|
expect(() => SemanticSearchSchema.parse(missingQuery)).toThrow();
|
|
135
|
-
const missingCollection = { query:
|
|
149
|
+
const missingCollection = { query: "test", limit: 5 };
|
|
136
150
|
expect(() => SemanticSearchSchema.parse(missingCollection)).toThrow();
|
|
137
151
|
});
|
|
138
152
|
});
|
|
139
|
-
describe(
|
|
140
|
-
it(
|
|
141
|
-
const { z } = await import(
|
|
153
|
+
describe("DeleteCollectionSchema", () => {
|
|
154
|
+
it("should validate correct delete input", async () => {
|
|
155
|
+
const { z } = await import("zod");
|
|
142
156
|
const DeleteCollectionSchema = z.object({
|
|
143
157
|
name: z.string(),
|
|
144
158
|
});
|
|
145
|
-
const validInput = { name:
|
|
159
|
+
const validInput = { name: "test-collection" };
|
|
146
160
|
expect(() => DeleteCollectionSchema.parse(validInput)).not.toThrow();
|
|
147
161
|
});
|
|
148
|
-
it(
|
|
149
|
-
const { z } = await import(
|
|
162
|
+
it("should require name field", async () => {
|
|
163
|
+
const { z } = await import("zod");
|
|
150
164
|
const DeleteCollectionSchema = z.object({
|
|
151
165
|
name: z.string(),
|
|
152
166
|
});
|
|
153
167
|
expect(() => DeleteCollectionSchema.parse({})).toThrow();
|
|
154
168
|
});
|
|
155
169
|
});
|
|
156
|
-
describe(
|
|
157
|
-
it(
|
|
158
|
-
const { z } = await import(
|
|
170
|
+
describe("GetCollectionInfoSchema", () => {
|
|
171
|
+
it("should validate correct input", async () => {
|
|
172
|
+
const { z } = await import("zod");
|
|
159
173
|
const GetCollectionInfoSchema = z.object({
|
|
160
174
|
name: z.string(),
|
|
161
175
|
});
|
|
162
|
-
const validInput = { name:
|
|
176
|
+
const validInput = { name: "test-collection" };
|
|
163
177
|
expect(() => GetCollectionInfoSchema.parse(validInput)).not.toThrow();
|
|
164
178
|
});
|
|
165
179
|
});
|
|
166
|
-
describe(
|
|
167
|
-
it(
|
|
168
|
-
const { z } = await import(
|
|
180
|
+
describe("DeleteDocumentsSchema", () => {
|
|
181
|
+
it("should validate correct delete documents input", async () => {
|
|
182
|
+
const { z } = await import("zod");
|
|
169
183
|
const DeleteDocumentsSchema = z.object({
|
|
170
184
|
collection: z.string(),
|
|
171
185
|
ids: z.array(z.union([z.string(), z.number()])),
|
|
172
186
|
});
|
|
173
187
|
const validInput = {
|
|
174
|
-
collection:
|
|
175
|
-
ids: [1,
|
|
188
|
+
collection: "test-collection",
|
|
189
|
+
ids: [1, "doc-2", 3],
|
|
176
190
|
};
|
|
177
191
|
expect(() => DeleteDocumentsSchema.parse(validInput)).not.toThrow();
|
|
178
192
|
});
|
|
179
|
-
it(
|
|
180
|
-
const { z } = await import(
|
|
193
|
+
it("should accept string and number IDs", async () => {
|
|
194
|
+
const { z } = await import("zod");
|
|
181
195
|
const DeleteDocumentsSchema = z.object({
|
|
182
196
|
collection: z.string(),
|
|
183
197
|
ids: z.array(z.union([z.string(), z.number()])),
|
|
184
198
|
});
|
|
185
|
-
const stringIds = { collection:
|
|
199
|
+
const stringIds = { collection: "test", ids: ["a", "b", "c"] };
|
|
186
200
|
expect(() => DeleteDocumentsSchema.parse(stringIds)).not.toThrow();
|
|
187
|
-
const numberIds = { collection:
|
|
201
|
+
const numberIds = { collection: "test", ids: [1, 2, 3] };
|
|
188
202
|
expect(() => DeleteDocumentsSchema.parse(numberIds)).not.toThrow();
|
|
189
|
-
const mixedIds = { collection:
|
|
203
|
+
const mixedIds = { collection: "test", ids: [1, "b", 3] };
|
|
190
204
|
expect(() => DeleteDocumentsSchema.parse(mixedIds)).not.toThrow();
|
|
191
205
|
});
|
|
192
|
-
it(
|
|
193
|
-
const { z } = await import(
|
|
206
|
+
it("should require both collection and ids", async () => {
|
|
207
|
+
const { z } = await import("zod");
|
|
194
208
|
const DeleteDocumentsSchema = z.object({
|
|
195
209
|
collection: z.string(),
|
|
196
210
|
ids: z.array(z.union([z.string(), z.number()])),
|
|
197
211
|
});
|
|
198
|
-
const missingIds = { collection:
|
|
212
|
+
const missingIds = { collection: "test" };
|
|
199
213
|
expect(() => DeleteDocumentsSchema.parse(missingIds)).toThrow();
|
|
200
214
|
const missingCollection = { ids: [1, 2, 3] };
|
|
201
215
|
expect(() => DeleteDocumentsSchema.parse(missingCollection)).toThrow();
|
|
202
216
|
});
|
|
203
217
|
});
|
|
204
218
|
});
|
|
205
|
-
describe(
|
|
206
|
-
it(
|
|
207
|
-
const collectionsUri =
|
|
219
|
+
describe("MCP Server Resource URIs", () => {
|
|
220
|
+
it("should match collections URI pattern", () => {
|
|
221
|
+
const collectionsUri = "qdrant://collections";
|
|
208
222
|
expect(collectionsUri).toMatch(/^qdrant:\/\/collections$/);
|
|
209
223
|
});
|
|
210
|
-
it(
|
|
211
|
-
const collectionUri =
|
|
224
|
+
it("should match collection detail URI pattern", () => {
|
|
225
|
+
const collectionUri = "qdrant://collection/my-collection";
|
|
212
226
|
const match = collectionUri.match(/^qdrant:\/\/collection\/(.+)$/);
|
|
213
227
|
expect(match).not.toBeNull();
|
|
214
|
-
expect(match[1]).toBe(
|
|
228
|
+
expect(match[1]).toBe("my-collection");
|
|
215
229
|
});
|
|
216
|
-
it(
|
|
230
|
+
it("should extract collection name from URI", () => {
|
|
217
231
|
const testCases = [
|
|
218
|
-
{ uri:
|
|
219
|
-
{ uri:
|
|
220
|
-
{ uri:
|
|
232
|
+
{ uri: "qdrant://collection/test", expected: "test" },
|
|
233
|
+
{ uri: "qdrant://collection/my-docs", expected: "my-docs" },
|
|
234
|
+
{ uri: "qdrant://collection/collection-123", expected: "collection-123" },
|
|
221
235
|
];
|
|
222
236
|
testCases.forEach(({ uri, expected }) => {
|
|
223
237
|
const match = uri.match(/^qdrant:\/\/collection\/(.+)$/);
|
|
224
238
|
expect(match[1]).toBe(expected);
|
|
225
239
|
});
|
|
226
240
|
});
|
|
227
|
-
it(
|
|
241
|
+
it("should not match invalid URIs", () => {
|
|
228
242
|
const invalidUris = [
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
243
|
+
"qdrant://invalid",
|
|
244
|
+
"http://collections",
|
|
245
|
+
"qdrant://collection/",
|
|
246
|
+
"qdrant:collections",
|
|
233
247
|
];
|
|
234
248
|
invalidUris.forEach((uri) => {
|
|
235
249
|
const collectionsMatch = uri.match(/^qdrant:\/\/collections$/);
|