@mhalder/qdrant-mcp-server 1.1.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/.env.example +92 -0
- package/.github/workflows/ci.yml +61 -0
- package/.github/workflows/claude-code-review.yml +57 -0
- package/.github/workflows/claude.yml +50 -0
- package/.github/workflows/release.yml +52 -0
- package/.husky/commit-msg +1 -0
- package/.husky/pre-commit +1 -0
- package/.releaserc.json +59 -0
- package/.yamlfmt +4 -0
- package/CHANGELOG.md +73 -0
- package/CONTRIBUTING.md +176 -0
- package/LICENSE +21 -0
- package/README.md +714 -0
- package/build/embeddings/base.d.ts +23 -0
- package/build/embeddings/base.d.ts.map +1 -0
- package/build/embeddings/base.js +2 -0
- package/build/embeddings/base.js.map +1 -0
- package/build/embeddings/cohere.d.ts +17 -0
- package/build/embeddings/cohere.d.ts.map +1 -0
- package/build/embeddings/cohere.js +102 -0
- package/build/embeddings/cohere.js.map +1 -0
- package/build/embeddings/cohere.test.d.ts +2 -0
- package/build/embeddings/cohere.test.d.ts.map +1 -0
- package/build/embeddings/cohere.test.js +279 -0
- package/build/embeddings/cohere.test.js.map +1 -0
- package/build/embeddings/factory.d.ts +10 -0
- package/build/embeddings/factory.d.ts.map +1 -0
- package/build/embeddings/factory.js +98 -0
- package/build/embeddings/factory.js.map +1 -0
- package/build/embeddings/factory.test.d.ts +2 -0
- package/build/embeddings/factory.test.d.ts.map +1 -0
- package/build/embeddings/factory.test.js +329 -0
- package/build/embeddings/factory.test.js.map +1 -0
- package/build/embeddings/ollama.d.ts +18 -0
- package/build/embeddings/ollama.d.ts.map +1 -0
- package/build/embeddings/ollama.js +135 -0
- package/build/embeddings/ollama.js.map +1 -0
- package/build/embeddings/ollama.test.d.ts +2 -0
- package/build/embeddings/ollama.test.d.ts.map +1 -0
- package/build/embeddings/ollama.test.js +399 -0
- package/build/embeddings/ollama.test.js.map +1 -0
- package/build/embeddings/openai.d.ts +16 -0
- package/build/embeddings/openai.d.ts.map +1 -0
- package/build/embeddings/openai.js +108 -0
- package/build/embeddings/openai.js.map +1 -0
- package/build/embeddings/openai.test.d.ts +2 -0
- package/build/embeddings/openai.test.d.ts.map +1 -0
- package/build/embeddings/openai.test.js +283 -0
- package/build/embeddings/openai.test.js.map +1 -0
- package/build/embeddings/voyage.d.ts +19 -0
- package/build/embeddings/voyage.d.ts.map +1 -0
- package/build/embeddings/voyage.js +113 -0
- package/build/embeddings/voyage.js.map +1 -0
- package/build/embeddings/voyage.test.d.ts +2 -0
- package/build/embeddings/voyage.test.d.ts.map +1 -0
- package/build/embeddings/voyage.test.js +371 -0
- package/build/embeddings/voyage.test.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +534 -0
- package/build/index.js.map +1 -0
- package/build/index.test.d.ts +2 -0
- package/build/index.test.d.ts.map +1 -0
- package/build/index.test.js +241 -0
- package/build/index.test.js.map +1 -0
- package/build/qdrant/client.d.ts +37 -0
- package/build/qdrant/client.d.ts.map +1 -0
- package/build/qdrant/client.js +142 -0
- package/build/qdrant/client.js.map +1 -0
- package/build/qdrant/client.test.d.ts +2 -0
- package/build/qdrant/client.test.d.ts.map +1 -0
- package/build/qdrant/client.test.js +340 -0
- package/build/qdrant/client.test.js.map +1 -0
- package/commitlint.config.js +25 -0
- package/docker-compose.yml +22 -0
- package/docs/test_report.md +259 -0
- package/examples/README.md +315 -0
- package/examples/basic/README.md +111 -0
- package/examples/filters/README.md +262 -0
- package/examples/knowledge-base/README.md +207 -0
- package/examples/rate-limiting/README.md +376 -0
- package/package.json +59 -0
- package/scripts/verify-providers.js +238 -0
- package/src/embeddings/base.ts +25 -0
- package/src/embeddings/cohere.test.ts +408 -0
- package/src/embeddings/cohere.ts +152 -0
- package/src/embeddings/factory.test.ts +453 -0
- package/src/embeddings/factory.ts +163 -0
- package/src/embeddings/ollama.test.ts +543 -0
- package/src/embeddings/ollama.ts +196 -0
- package/src/embeddings/openai.test.ts +402 -0
- package/src/embeddings/openai.ts +158 -0
- package/src/embeddings/voyage.test.ts +520 -0
- package/src/embeddings/voyage.ts +168 -0
- package/src/index.test.ts +304 -0
- package/src/index.ts +614 -0
- package/src/qdrant/client.test.ts +456 -0
- package/src/qdrant/client.ts +195 -0
- package/tsconfig.json +19 -0
- package/vitest.config.ts +37 -0
package/build/index.js
ADDED
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
+
import { QdrantManager } from "./qdrant/client.js";
|
|
6
|
+
import { EmbeddingProviderFactory } from "./embeddings/factory.js";
|
|
7
|
+
import { z } from "zod";
|
|
8
|
+
import { readFileSync } from "fs";
|
|
9
|
+
import { fileURLToPath } from "url";
|
|
10
|
+
import { dirname, join } from "path";
|
|
11
|
+
// Read package.json for version
|
|
12
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
const pkg = JSON.parse(readFileSync(join(__dirname, "../package.json"), "utf-8"));
|
|
14
|
+
// Validate environment variables
|
|
15
|
+
const QDRANT_URL = process.env.QDRANT_URL || "http://localhost:6333";
|
|
16
|
+
const EMBEDDING_PROVIDER = (process.env.EMBEDDING_PROVIDER || "ollama").toLowerCase();
|
|
17
|
+
// Check for required API keys based on provider
|
|
18
|
+
if (EMBEDDING_PROVIDER !== "ollama") {
|
|
19
|
+
let apiKey;
|
|
20
|
+
let requiredKeyName;
|
|
21
|
+
switch (EMBEDDING_PROVIDER) {
|
|
22
|
+
case "openai":
|
|
23
|
+
apiKey = process.env.OPENAI_API_KEY;
|
|
24
|
+
requiredKeyName = "OPENAI_API_KEY";
|
|
25
|
+
break;
|
|
26
|
+
case "cohere":
|
|
27
|
+
apiKey = process.env.COHERE_API_KEY;
|
|
28
|
+
requiredKeyName = "COHERE_API_KEY";
|
|
29
|
+
break;
|
|
30
|
+
case "voyage":
|
|
31
|
+
apiKey = process.env.VOYAGE_API_KEY;
|
|
32
|
+
requiredKeyName = "VOYAGE_API_KEY";
|
|
33
|
+
break;
|
|
34
|
+
default:
|
|
35
|
+
console.error(`Error: Unknown embedding provider "${EMBEDDING_PROVIDER}". Supported providers: openai, cohere, voyage, ollama.`);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
if (!apiKey) {
|
|
39
|
+
console.error(`Error: ${requiredKeyName} is required for ${EMBEDDING_PROVIDER} provider.`);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Check if Ollama is running when using Ollama provider
|
|
44
|
+
async function checkOllamaAvailability() {
|
|
45
|
+
if (EMBEDDING_PROVIDER === "ollama") {
|
|
46
|
+
const baseUrl = process.env.EMBEDDING_BASE_URL || "http://localhost:11434";
|
|
47
|
+
const isLocalhost = baseUrl.includes("localhost") || baseUrl.includes("127.0.0.1");
|
|
48
|
+
try {
|
|
49
|
+
const response = await fetch(`${baseUrl}/api/version`);
|
|
50
|
+
if (!response.ok) {
|
|
51
|
+
throw new Error(`Ollama returned status ${response.status}`);
|
|
52
|
+
}
|
|
53
|
+
// Check if the required embedding model exists
|
|
54
|
+
const tagsResponse = await fetch(`${baseUrl}/api/tags`);
|
|
55
|
+
const { models } = await tagsResponse.json();
|
|
56
|
+
const modelName = process.env.EMBEDDING_MODEL || "nomic-embed-text";
|
|
57
|
+
const modelExists = models.some((m) => m.name === modelName || m.name.startsWith(`${modelName}:`));
|
|
58
|
+
if (!modelExists) {
|
|
59
|
+
let errorMessage = `Error: Model '${modelName}' not found in Ollama.\n`;
|
|
60
|
+
if (isLocalhost) {
|
|
61
|
+
errorMessage +=
|
|
62
|
+
`Pull it with:\n` +
|
|
63
|
+
` - Using Docker: docker exec ollama ollama pull ${modelName}\n` +
|
|
64
|
+
` - Or locally: ollama pull ${modelName}`;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
errorMessage +=
|
|
68
|
+
`Please ensure the model is available on your Ollama instance:\n` +
|
|
69
|
+
` ollama pull ${modelName}`;
|
|
70
|
+
}
|
|
71
|
+
console.error(errorMessage);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
const errorMessage = error instanceof Error
|
|
77
|
+
? `Error: ${error.message}`
|
|
78
|
+
: `Error: Ollama is not running at ${baseUrl}.\n`;
|
|
79
|
+
let helpText = "";
|
|
80
|
+
if (isLocalhost) {
|
|
81
|
+
helpText =
|
|
82
|
+
`Please start Ollama:\n` +
|
|
83
|
+
` - Using Docker: docker compose up -d\n` +
|
|
84
|
+
` - Or install locally: curl -fsSL https://ollama.ai/install.sh | sh\n` +
|
|
85
|
+
`\nThen pull the embedding model:\n` +
|
|
86
|
+
` ollama pull nomic-embed-text`;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
helpText =
|
|
90
|
+
`Please ensure:\n` +
|
|
91
|
+
` - Ollama is running at the specified URL\n` +
|
|
92
|
+
` - The URL is accessible from this machine\n` +
|
|
93
|
+
` - The embedding model is available (e.g., nomic-embed-text)`;
|
|
94
|
+
}
|
|
95
|
+
console.error(`${errorMessage}\n${helpText}`);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Initialize clients
|
|
101
|
+
const qdrant = new QdrantManager(QDRANT_URL);
|
|
102
|
+
const embeddings = EmbeddingProviderFactory.createFromEnv();
|
|
103
|
+
// Create MCP server
|
|
104
|
+
const server = new Server({
|
|
105
|
+
name: pkg.name,
|
|
106
|
+
version: pkg.version,
|
|
107
|
+
}, {
|
|
108
|
+
capabilities: {
|
|
109
|
+
tools: {},
|
|
110
|
+
resources: {},
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
// Tool schemas
|
|
114
|
+
const CreateCollectionSchema = z.object({
|
|
115
|
+
name: z.string().describe("Name of the collection"),
|
|
116
|
+
distance: z
|
|
117
|
+
.enum(["Cosine", "Euclid", "Dot"])
|
|
118
|
+
.optional()
|
|
119
|
+
.describe("Distance metric (default: Cosine)"),
|
|
120
|
+
});
|
|
121
|
+
const AddDocumentsSchema = z.object({
|
|
122
|
+
collection: z.string().describe("Name of the collection"),
|
|
123
|
+
documents: z
|
|
124
|
+
.array(z.object({
|
|
125
|
+
id: z
|
|
126
|
+
.union([z.string(), z.number()])
|
|
127
|
+
.describe("Unique identifier for the document"),
|
|
128
|
+
text: z.string().describe("Text content to embed and store"),
|
|
129
|
+
metadata: z
|
|
130
|
+
.record(z.any())
|
|
131
|
+
.optional()
|
|
132
|
+
.describe("Optional metadata to store with the document"),
|
|
133
|
+
}))
|
|
134
|
+
.describe("Array of documents to add"),
|
|
135
|
+
});
|
|
136
|
+
const SemanticSearchSchema = z.object({
|
|
137
|
+
collection: z.string().describe("Name of the collection to search"),
|
|
138
|
+
query: z.string().describe("Search query text"),
|
|
139
|
+
limit: z
|
|
140
|
+
.number()
|
|
141
|
+
.optional()
|
|
142
|
+
.describe("Maximum number of results (default: 5)"),
|
|
143
|
+
filter: z.record(z.any()).optional().describe("Optional metadata filter"),
|
|
144
|
+
});
|
|
145
|
+
const DeleteCollectionSchema = z.object({
|
|
146
|
+
name: z.string().describe("Name of the collection to delete"),
|
|
147
|
+
});
|
|
148
|
+
const GetCollectionInfoSchema = z.object({
|
|
149
|
+
name: z.string().describe("Name of the collection"),
|
|
150
|
+
});
|
|
151
|
+
const DeleteDocumentsSchema = z.object({
|
|
152
|
+
collection: z.string().describe("Name of the collection"),
|
|
153
|
+
ids: z
|
|
154
|
+
.array(z.union([z.string(), z.number()]))
|
|
155
|
+
.describe("Array of document IDs to delete"),
|
|
156
|
+
});
|
|
157
|
+
// List available tools
|
|
158
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
159
|
+
return {
|
|
160
|
+
tools: [
|
|
161
|
+
{
|
|
162
|
+
name: "create_collection",
|
|
163
|
+
description: "Create a new vector collection in Qdrant. The collection will be configured with the embedding provider's dimensions automatically.",
|
|
164
|
+
inputSchema: {
|
|
165
|
+
type: "object",
|
|
166
|
+
properties: {
|
|
167
|
+
name: {
|
|
168
|
+
type: "string",
|
|
169
|
+
description: "Name of the collection",
|
|
170
|
+
},
|
|
171
|
+
distance: {
|
|
172
|
+
type: "string",
|
|
173
|
+
enum: ["Cosine", "Euclid", "Dot"],
|
|
174
|
+
description: "Distance metric (default: Cosine)",
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
required: ["name"],
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
name: "add_documents",
|
|
182
|
+
description: "Add documents to a collection. Documents will be automatically embedded using the configured embedding provider.",
|
|
183
|
+
inputSchema: {
|
|
184
|
+
type: "object",
|
|
185
|
+
properties: {
|
|
186
|
+
collection: {
|
|
187
|
+
type: "string",
|
|
188
|
+
description: "Name of the collection",
|
|
189
|
+
},
|
|
190
|
+
documents: {
|
|
191
|
+
type: "array",
|
|
192
|
+
description: "Array of documents to add",
|
|
193
|
+
items: {
|
|
194
|
+
type: "object",
|
|
195
|
+
properties: {
|
|
196
|
+
id: {
|
|
197
|
+
type: ["string", "number"],
|
|
198
|
+
description: "Unique identifier for the document",
|
|
199
|
+
},
|
|
200
|
+
text: {
|
|
201
|
+
type: "string",
|
|
202
|
+
description: "Text content to embed and store",
|
|
203
|
+
},
|
|
204
|
+
metadata: {
|
|
205
|
+
type: "object",
|
|
206
|
+
description: "Optional metadata to store with the document",
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
required: ["id", "text"],
|
|
210
|
+
},
|
|
211
|
+
},
|
|
212
|
+
},
|
|
213
|
+
required: ["collection", "documents"],
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
name: "semantic_search",
|
|
218
|
+
description: "Search for documents using natural language queries. Returns the most semantically similar documents.",
|
|
219
|
+
inputSchema: {
|
|
220
|
+
type: "object",
|
|
221
|
+
properties: {
|
|
222
|
+
collection: {
|
|
223
|
+
type: "string",
|
|
224
|
+
description: "Name of the collection to search",
|
|
225
|
+
},
|
|
226
|
+
query: {
|
|
227
|
+
type: "string",
|
|
228
|
+
description: "Search query text",
|
|
229
|
+
},
|
|
230
|
+
limit: {
|
|
231
|
+
type: "number",
|
|
232
|
+
description: "Maximum number of results (default: 5)",
|
|
233
|
+
},
|
|
234
|
+
filter: {
|
|
235
|
+
type: "object",
|
|
236
|
+
description: "Optional metadata filter",
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
required: ["collection", "query"],
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
name: "list_collections",
|
|
244
|
+
description: "List all available collections in Qdrant.",
|
|
245
|
+
inputSchema: {
|
|
246
|
+
type: "object",
|
|
247
|
+
properties: {},
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
name: "delete_collection",
|
|
252
|
+
description: "Delete a collection and all its documents.",
|
|
253
|
+
inputSchema: {
|
|
254
|
+
type: "object",
|
|
255
|
+
properties: {
|
|
256
|
+
name: {
|
|
257
|
+
type: "string",
|
|
258
|
+
description: "Name of the collection to delete",
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
required: ["name"],
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
name: "get_collection_info",
|
|
266
|
+
description: "Get detailed information about a collection including vector size, point count, and distance metric.",
|
|
267
|
+
inputSchema: {
|
|
268
|
+
type: "object",
|
|
269
|
+
properties: {
|
|
270
|
+
name: {
|
|
271
|
+
type: "string",
|
|
272
|
+
description: "Name of the collection",
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
required: ["name"],
|
|
276
|
+
},
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
name: "delete_documents",
|
|
280
|
+
description: "Delete specific documents from a collection by their IDs.",
|
|
281
|
+
inputSchema: {
|
|
282
|
+
type: "object",
|
|
283
|
+
properties: {
|
|
284
|
+
collection: {
|
|
285
|
+
type: "string",
|
|
286
|
+
description: "Name of the collection",
|
|
287
|
+
},
|
|
288
|
+
ids: {
|
|
289
|
+
type: "array",
|
|
290
|
+
description: "Array of document IDs to delete",
|
|
291
|
+
items: {
|
|
292
|
+
type: ["string", "number"],
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
required: ["collection", "ids"],
|
|
297
|
+
},
|
|
298
|
+
},
|
|
299
|
+
],
|
|
300
|
+
};
|
|
301
|
+
});
|
|
302
|
+
// Handle tool calls
|
|
303
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
304
|
+
const { name, arguments: args } = request.params;
|
|
305
|
+
try {
|
|
306
|
+
switch (name) {
|
|
307
|
+
case "create_collection": {
|
|
308
|
+
const { name, distance } = CreateCollectionSchema.parse(args);
|
|
309
|
+
const vectorSize = embeddings.getDimensions();
|
|
310
|
+
await qdrant.createCollection(name, vectorSize, distance);
|
|
311
|
+
return {
|
|
312
|
+
content: [
|
|
313
|
+
{
|
|
314
|
+
type: "text",
|
|
315
|
+
text: `Collection "${name}" created successfully with ${vectorSize} dimensions and ${distance || "Cosine"} distance metric.`,
|
|
316
|
+
},
|
|
317
|
+
],
|
|
318
|
+
};
|
|
319
|
+
}
|
|
320
|
+
case "add_documents": {
|
|
321
|
+
const { collection, documents } = AddDocumentsSchema.parse(args);
|
|
322
|
+
// Check if collection exists
|
|
323
|
+
const exists = await qdrant.collectionExists(collection);
|
|
324
|
+
if (!exists) {
|
|
325
|
+
return {
|
|
326
|
+
content: [
|
|
327
|
+
{
|
|
328
|
+
type: "text",
|
|
329
|
+
text: `Error: Collection "${collection}" does not exist. Create it first using create_collection.`,
|
|
330
|
+
},
|
|
331
|
+
],
|
|
332
|
+
isError: true,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
// Generate embeddings for all documents
|
|
336
|
+
const texts = documents.map((doc) => doc.text);
|
|
337
|
+
const embeddingResults = await embeddings.embedBatch(texts);
|
|
338
|
+
// Prepare points for insertion
|
|
339
|
+
const points = documents.map((doc, index) => ({
|
|
340
|
+
id: doc.id,
|
|
341
|
+
vector: embeddingResults[index].embedding,
|
|
342
|
+
payload: {
|
|
343
|
+
text: doc.text,
|
|
344
|
+
...doc.metadata,
|
|
345
|
+
},
|
|
346
|
+
}));
|
|
347
|
+
await qdrant.addPoints(collection, points);
|
|
348
|
+
return {
|
|
349
|
+
content: [
|
|
350
|
+
{
|
|
351
|
+
type: "text",
|
|
352
|
+
text: `Successfully added ${documents.length} document(s) to collection "${collection}".`,
|
|
353
|
+
},
|
|
354
|
+
],
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
case "semantic_search": {
|
|
358
|
+
const { collection, query, limit, filter } = SemanticSearchSchema.parse(args);
|
|
359
|
+
// Check if collection exists
|
|
360
|
+
const exists = await qdrant.collectionExists(collection);
|
|
361
|
+
if (!exists) {
|
|
362
|
+
return {
|
|
363
|
+
content: [
|
|
364
|
+
{
|
|
365
|
+
type: "text",
|
|
366
|
+
text: `Error: Collection "${collection}" does not exist.`,
|
|
367
|
+
},
|
|
368
|
+
],
|
|
369
|
+
isError: true,
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
// Generate embedding for query
|
|
373
|
+
const { embedding } = await embeddings.embed(query);
|
|
374
|
+
// Search
|
|
375
|
+
const results = await qdrant.search(collection, embedding, limit || 5, filter);
|
|
376
|
+
return {
|
|
377
|
+
content: [
|
|
378
|
+
{
|
|
379
|
+
type: "text",
|
|
380
|
+
text: JSON.stringify(results, null, 2),
|
|
381
|
+
},
|
|
382
|
+
],
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
case "list_collections": {
|
|
386
|
+
const collections = await qdrant.listCollections();
|
|
387
|
+
return {
|
|
388
|
+
content: [
|
|
389
|
+
{
|
|
390
|
+
type: "text",
|
|
391
|
+
text: JSON.stringify(collections, null, 2),
|
|
392
|
+
},
|
|
393
|
+
],
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
case "delete_collection": {
|
|
397
|
+
const { name } = DeleteCollectionSchema.parse(args);
|
|
398
|
+
await qdrant.deleteCollection(name);
|
|
399
|
+
return {
|
|
400
|
+
content: [
|
|
401
|
+
{
|
|
402
|
+
type: "text",
|
|
403
|
+
text: `Collection "${name}" deleted successfully.`,
|
|
404
|
+
},
|
|
405
|
+
],
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
case "get_collection_info": {
|
|
409
|
+
const { name } = GetCollectionInfoSchema.parse(args);
|
|
410
|
+
const info = await qdrant.getCollectionInfo(name);
|
|
411
|
+
return {
|
|
412
|
+
content: [
|
|
413
|
+
{
|
|
414
|
+
type: "text",
|
|
415
|
+
text: JSON.stringify(info, null, 2),
|
|
416
|
+
},
|
|
417
|
+
],
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
case "delete_documents": {
|
|
421
|
+
const { collection, ids } = DeleteDocumentsSchema.parse(args);
|
|
422
|
+
await qdrant.deletePoints(collection, ids);
|
|
423
|
+
return {
|
|
424
|
+
content: [
|
|
425
|
+
{
|
|
426
|
+
type: "text",
|
|
427
|
+
text: `Successfully deleted ${ids.length} document(s) from collection "${collection}".`,
|
|
428
|
+
},
|
|
429
|
+
],
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
default:
|
|
433
|
+
return {
|
|
434
|
+
content: [
|
|
435
|
+
{
|
|
436
|
+
type: "text",
|
|
437
|
+
text: `Unknown tool: ${name}`,
|
|
438
|
+
},
|
|
439
|
+
],
|
|
440
|
+
isError: true,
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
catch (error) {
|
|
445
|
+
// Enhanced error details for debugging
|
|
446
|
+
const errorDetails = error instanceof Error ? error.message : JSON.stringify(error, null, 2);
|
|
447
|
+
console.error("Tool execution error:", {
|
|
448
|
+
tool: name,
|
|
449
|
+
error: errorDetails,
|
|
450
|
+
stack: error?.stack,
|
|
451
|
+
data: error?.data,
|
|
452
|
+
});
|
|
453
|
+
return {
|
|
454
|
+
content: [
|
|
455
|
+
{
|
|
456
|
+
type: "text",
|
|
457
|
+
text: `Error: ${errorDetails}`,
|
|
458
|
+
},
|
|
459
|
+
],
|
|
460
|
+
isError: true,
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
});
|
|
464
|
+
// List available resources
|
|
465
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => {
|
|
466
|
+
const collections = await qdrant.listCollections();
|
|
467
|
+
return {
|
|
468
|
+
resources: [
|
|
469
|
+
{
|
|
470
|
+
uri: "qdrant://collections",
|
|
471
|
+
name: "All Collections",
|
|
472
|
+
description: "List of all vector collections in Qdrant",
|
|
473
|
+
mimeType: "application/json",
|
|
474
|
+
},
|
|
475
|
+
...collections.map((name) => ({
|
|
476
|
+
uri: `qdrant://collection/${name}`,
|
|
477
|
+
name: `Collection: ${name}`,
|
|
478
|
+
description: `Details and statistics for collection "${name}"`,
|
|
479
|
+
mimeType: "application/json",
|
|
480
|
+
})),
|
|
481
|
+
],
|
|
482
|
+
};
|
|
483
|
+
});
|
|
484
|
+
// Read resource content
|
|
485
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
486
|
+
const { uri } = request.params;
|
|
487
|
+
if (uri === "qdrant://collections") {
|
|
488
|
+
const collections = await qdrant.listCollections();
|
|
489
|
+
return {
|
|
490
|
+
contents: [
|
|
491
|
+
{
|
|
492
|
+
uri,
|
|
493
|
+
mimeType: "application/json",
|
|
494
|
+
text: JSON.stringify(collections, null, 2),
|
|
495
|
+
},
|
|
496
|
+
],
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
const collectionMatch = uri.match(/^qdrant:\/\/collection\/(.+)$/);
|
|
500
|
+
if (collectionMatch) {
|
|
501
|
+
const name = collectionMatch[1];
|
|
502
|
+
const info = await qdrant.getCollectionInfo(name);
|
|
503
|
+
return {
|
|
504
|
+
contents: [
|
|
505
|
+
{
|
|
506
|
+
uri,
|
|
507
|
+
mimeType: "application/json",
|
|
508
|
+
text: JSON.stringify(info, null, 2),
|
|
509
|
+
},
|
|
510
|
+
],
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
return {
|
|
514
|
+
contents: [
|
|
515
|
+
{
|
|
516
|
+
uri,
|
|
517
|
+
mimeType: "text/plain",
|
|
518
|
+
text: `Unknown resource: ${uri}`,
|
|
519
|
+
},
|
|
520
|
+
],
|
|
521
|
+
};
|
|
522
|
+
});
|
|
523
|
+
// Start server
|
|
524
|
+
async function main() {
|
|
525
|
+
await checkOllamaAvailability();
|
|
526
|
+
const transport = new StdioServerTransport();
|
|
527
|
+
await server.connect(transport);
|
|
528
|
+
console.error("Qdrant MCP server running on stdio");
|
|
529
|
+
}
|
|
530
|
+
main().catch((error) => {
|
|
531
|
+
console.error("Fatal error:", error);
|
|
532
|
+
process.exit(1);
|
|
533
|
+
});
|
|
534
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,gCAAgC;AAChC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,CAC1D,CAAC;AAEF,iCAAiC;AACjC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,uBAAuB,CAAC;AACrE,MAAM,kBAAkB,GAAG,CACzB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,QAAQ,CAC3C,CAAC,WAAW,EAAE,CAAC;AAEhB,gDAAgD;AAChD,IAAI,kBAAkB,KAAK,QAAQ,EAAE,CAAC;IACpC,IAAI,MAA0B,CAAC;IAC/B,IAAI,eAAuB,CAAC;IAE5B,QAAQ,kBAAkB,EAAE,CAAC;QAC3B,KAAK,QAAQ;YACX,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YACpC,eAAe,GAAG,gBAAgB,CAAC;YACnC,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YACpC,eAAe,GAAG,gBAAgB,CAAC;YACnC,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;YACpC,eAAe,GAAG,gBAAgB,CAAC;YACnC,MAAM;QACR;YACE,OAAO,CAAC,KAAK,CACX,sCAAsC,kBAAkB,yDAAyD,CAClH,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CACX,UAAU,eAAe,oBAAoB,kBAAkB,YAAY,CAC5E,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,wDAAwD;AACxD,KAAK,UAAU,uBAAuB;IACpC,IAAI,kBAAkB,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,wBAAwB,CAAC;QAC3E,MAAM,WAAW,GACf,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEjE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,cAAc,CAAC,CAAC;YACvD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/D,CAAC;YAED,+CAA+C;YAC/C,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,WAAW,CAAC,CAAC;YACxD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,kBAAkB,CAAC;YACpE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAC7B,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,GAAG,CAAC,CACvE,CAAC;YAEF,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,IAAI,YAAY,GAAG,iBAAiB,SAAS,0BAA0B,CAAC;gBAExE,IAAI,WAAW,EAAE,CAAC;oBAChB,YAAY;wBACV,iBAAiB;4BACjB,oDAAoD,SAAS,IAAI;4BACjE,+BAA+B,SAAS,EAAE,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACN,YAAY;wBACV,iEAAiE;4BACjE,iBAAiB,SAAS,EAAE,CAAC;gBACjC,CAAC;gBAED,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK;gBACpB,CAAC,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE;gBAC3B,CAAC,CAAC,mCAAmC,OAAO,KAAK,CAAC;YAEtD,IAAI,QAAQ,GAAG,EAAE,CAAC;YAClB,IAAI,WAAW,EAAE,CAAC;gBAChB,QAAQ;oBACN,wBAAwB;wBACxB,0CAA0C;wBAC1C,wEAAwE;wBACxE,oCAAoC;wBACpC,gCAAgC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,QAAQ;oBACN,kBAAkB;wBAClB,8CAA8C;wBAC9C,+CAA+C;wBAC/C,+DAA+D,CAAC;YACpE,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,QAAQ,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;AACH,CAAC;AAED,qBAAqB;AACrB,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC;AAC7C,MAAM,UAAU,GAAG,wBAAwB,CAAC,aAAa,EAAE,CAAC;AAE5D,oBAAoB;AACpB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,GAAG,CAAC,IAAI;IACd,OAAO,EAAE,GAAG,CAAC,OAAO;CACrB,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;KACd;CACF,CACF,CAAC;AAEF,eAAe;AACf,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACnD,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;SACjC,QAAQ,EAAE;SACV,QAAQ,CAAC,mCAAmC,CAAC;CACjD,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACzD,SAAS,EAAE,CAAC;SACT,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC;aACF,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;aAC/B,QAAQ,CAAC,oCAAoC,CAAC;QACjD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QAC5D,QAAQ,EAAE,CAAC;aACR,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;aACf,QAAQ,EAAE;aACV,QAAQ,CAAC,8CAA8C,CAAC;KAC5D,CAAC,CACH;SACA,QAAQ,CAAC,2BAA2B,CAAC;CACzC,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACnE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC/C,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,wCAAwC,CAAC;IACrD,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAC1E,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;CACpD,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACzD,GAAG,EAAE,CAAC;SACH,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;SACxC,QAAQ,CAAC,iCAAiC,CAAC;CAC/C,CAAC,CAAC;AAEH,uBAAuB;AACvB,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;IAC1D,OAAO;QACL,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EACT,qIAAqI;gBACvI,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,wBAAwB;yBACtC;wBACD,QAAQ,EAAE;4BACR,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC;4BACjC,WAAW,EAAE,mCAAmC;yBACjD;qBACF;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;aACF;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,WAAW,EACT,kHAAkH;gBACpH,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,UAAU,EAAE;4BACV,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,wBAAwB;yBACtC;wBACD,SAAS,EAAE;4BACT,IAAI,EAAE,OAAO;4BACb,WAAW,EAAE,2BAA2B;4BACxC,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;gCACd,UAAU,EAAE;oCACV,EAAE,EAAE;wCACF,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;wCAC1B,WAAW,EAAE,oCAAoC;qCAClD;oCACD,IAAI,EAAE;wCACJ,IAAI,EAAE,QAAQ;wCACd,WAAW,EAAE,iCAAiC;qCAC/C;oCACD,QAAQ,EAAE;wCACR,IAAI,EAAE,QAAQ;wCACd,WAAW,EAAE,8CAA8C;qCAC5D;iCACF;gCACD,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;6BACzB;yBACF;qBACF;oBACD,QAAQ,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;iBACtC;aACF;YACD;gBACE,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EACT,uGAAuG;gBACzG,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,UAAU,EAAE;4BACV,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,kCAAkC;yBAChD;wBACD,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,mBAAmB;yBACjC;wBACD,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,wCAAwC;yBACtD;wBACD,MAAM,EAAE;4BACN,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,0BAA0B;yBACxC;qBACF;oBACD,QAAQ,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC;iBAClC;aACF;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EAAE,2CAA2C;gBACxD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;iBACf;aACF;YACD;gBACE,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,4CAA4C;gBACzD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,kCAAkC;yBAChD;qBACF;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;aACF;YACD;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,WAAW,EACT,sGAAsG;gBACxG,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE;4BACJ,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,wBAAwB;yBACtC;qBACF;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;aACF;YACD;gBACE,IAAI,EAAE,kBAAkB;gBACxB,WAAW,EACT,2DAA2D;gBAC7D,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,UAAU,EAAE;4BACV,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,wBAAwB;yBACtC;wBACD,GAAG,EAAE;4BACH,IAAI,EAAE,OAAO;4BACb,WAAW,EAAE,iCAAiC;4BAC9C,KAAK,EAAE;gCACL,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;6BAC3B;yBACF;qBACF;oBACD,QAAQ,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC;iBAChC;aACF;SACF;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,oBAAoB;AACpB,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAEjD,IAAI,CAAC;QACH,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9D,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC;gBAC9C,MAAM,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAC1D,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,eAAe,IAAI,+BAA+B,UAAU,mBAAmB,QAAQ,IAAI,QAAQ,mBAAmB;yBAC7H;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEjE,6BAA6B;gBAC7B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;gBACzD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,sBAAsB,UAAU,4DAA4D;6BACnG;yBACF;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBAED,wCAAwC;gBACxC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC/C,MAAM,gBAAgB,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAE5D,+BAA+B;gBAC/B,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;oBAC5C,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,SAAS;oBACzC,OAAO,EAAE;wBACP,IAAI,EAAE,GAAG,CAAC,IAAI;wBACd,GAAG,GAAG,CAAC,QAAQ;qBAChB;iBACF,CAAC,CAAC,CAAC;gBAEJ,MAAM,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;gBAE3C,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,sBAAsB,SAAS,CAAC,MAAM,+BAA+B,UAAU,IAAI;yBAC1F;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GACxC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEnC,6BAA6B;gBAC7B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;gBACzD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,sBAAsB,UAAU,mBAAmB;6BAC1D;yBACF;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBAED,+BAA+B;gBAC/B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAEpD,SAAS;gBACT,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CACjC,UAAU,EACV,SAAS,EACT,KAAK,IAAI,CAAC,EACV,MAAM,CACP,CAAC;gBAEF,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;yBACvC;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;gBACnD,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;yBAC3C;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,mBAAmB,CAAC,CAAC,CAAC;gBACzB,MAAM,EAAE,IAAI,EAAE,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpD,MAAM,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBACpC,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,eAAe,IAAI,yBAAyB;yBACnD;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,qBAAqB,CAAC,CAAC,CAAC;gBAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAClD,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;yBACpC;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,kBAAkB,CAAC,CAAC,CAAC;gBACxB,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9D,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;gBAC3C,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,wBAAwB,GAAG,CAAC,MAAM,iCAAiC,UAAU,IAAI;yBACxF;qBACF;iBACF,CAAC;YACJ,CAAC;YAED;gBACE,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,iBAAiB,IAAI,EAAE;yBAC9B;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;QACN,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,uCAAuC;QACvC,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAE1E,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE;YACrC,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,YAAY;YACnB,KAAK,EAAE,KAAK,EAAE,KAAK;YACnB,IAAI,EAAE,KAAK,EAAE,IAAI;SAClB,CAAC,CAAC;QAEH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,UAAU,YAAY,EAAE;iBAC/B;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,2BAA2B;AAC3B,MAAM,CAAC,iBAAiB,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE;IAC9D,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;IAEnD,OAAO;QACL,SAAS,EAAE;YACT;gBACE,GAAG,EAAE,sBAAsB;gBAC3B,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EAAE,0CAA0C;gBACvD,QAAQ,EAAE,kBAAkB;aAC7B;YACD,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC5B,GAAG,EAAE,uBAAuB,IAAI,EAAE;gBAClC,IAAI,EAAE,eAAe,IAAI,EAAE;gBAC3B,WAAW,EAAE,0CAA0C,IAAI,GAAG;gBAC9D,QAAQ,EAAE,kBAAkB;aAC7B,CAAC,CAAC;SACJ;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,wBAAwB;AACxB,MAAM,CAAC,iBAAiB,CAAC,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IACpE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAE/B,IAAI,GAAG,KAAK,sBAAsB,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,eAAe,EAAE,CAAC;QACnD,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG;oBACH,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;iBAC3C;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnE,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAClD,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG;oBACH,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;iBACpC;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE;YACR;gBACE,GAAG;gBACH,QAAQ,EAAE,YAAY;gBACtB,IAAI,EAAE,qBAAqB,GAAG,EAAE;aACjC;SACF;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,eAAe;AACf,KAAK,UAAU,IAAI;IACjB,MAAM,uBAAuB,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACtD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
|