@mhalder/qdrant-mcp-server 3.3.3 → 3.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/.github/workflows/ci.yml +0 -2
  2. package/.github/workflows/claude-code-review.yml +1 -1
  3. package/CHANGELOG.md +6 -0
  4. package/README.md +1 -1
  5. package/biome.json +3 -2
  6. package/build/code/chunker/tree-sitter-chunker.d.ts.map +1 -1
  7. package/build/code/chunker/tree-sitter-chunker.js +2 -12
  8. package/build/code/chunker/tree-sitter-chunker.js.map +1 -1
  9. package/build/code/indexer.d.ts.map +1 -1
  10. package/build/code/indexer.js +12 -18
  11. package/build/code/indexer.js.map +1 -1
  12. package/build/code/scanner.js +1 -1
  13. package/build/code/scanner.js.map +1 -1
  14. package/build/embeddings/cohere.d.ts +1 -1
  15. package/build/embeddings/cohere.d.ts.map +1 -1
  16. package/build/embeddings/cohere.js +2 -2
  17. package/build/embeddings/cohere.js.map +1 -1
  18. package/build/embeddings/cohere.test.js +1 -5
  19. package/build/embeddings/cohere.test.js.map +1 -1
  20. package/build/embeddings/factory.d.ts +1 -1
  21. package/build/embeddings/factory.d.ts.map +1 -1
  22. package/build/embeddings/factory.js +7 -9
  23. package/build/embeddings/factory.js.map +1 -1
  24. package/build/embeddings/factory.test.js +3 -3
  25. package/build/embeddings/factory.test.js.map +1 -1
  26. package/build/embeddings/ollama.d.ts +1 -1
  27. package/build/embeddings/ollama.d.ts.map +1 -1
  28. package/build/embeddings/ollama.js +6 -8
  29. package/build/embeddings/ollama.js.map +1 -1
  30. package/build/embeddings/ollama.test.js +2 -6
  31. package/build/embeddings/ollama.test.js.map +1 -1
  32. package/build/embeddings/openai.d.ts +1 -1
  33. package/build/embeddings/openai.d.ts.map +1 -1
  34. package/build/embeddings/openai.js +4 -7
  35. package/build/embeddings/openai.js.map +1 -1
  36. package/build/embeddings/openai.test.js +3 -12
  37. package/build/embeddings/openai.test.js.map +1 -1
  38. package/build/embeddings/sparse.test.js +12 -2
  39. package/build/embeddings/sparse.test.js.map +1 -1
  40. package/build/embeddings/voyage.d.ts +1 -1
  41. package/build/embeddings/voyage.d.ts.map +1 -1
  42. package/build/embeddings/voyage.js +2 -3
  43. package/build/embeddings/voyage.js.map +1 -1
  44. package/build/embeddings/voyage.test.js +2 -6
  45. package/build/embeddings/voyage.test.js.map +1 -1
  46. package/build/git/chunker.d.ts.map +1 -1
  47. package/build/git/chunker.js +2 -2
  48. package/build/git/chunker.js.map +1 -1
  49. package/build/git/chunker.test.js +1 -1
  50. package/build/git/chunker.test.js.map +1 -1
  51. package/build/git/extractor.d.ts.map +1 -1
  52. package/build/git/extractor.integration.test.js +9 -5
  53. package/build/git/extractor.integration.test.js.map +1 -1
  54. package/build/git/extractor.js +1 -1
  55. package/build/git/extractor.js.map +1 -1
  56. package/build/git/extractor.test.js +2 -2
  57. package/build/git/extractor.test.js.map +1 -1
  58. package/build/git/index.d.ts +4 -4
  59. package/build/git/index.d.ts.map +1 -1
  60. package/build/git/index.js +3 -3
  61. package/build/git/index.js.map +1 -1
  62. package/build/git/indexer.d.ts.map +1 -1
  63. package/build/git/indexer.js +9 -21
  64. package/build/git/indexer.js.map +1 -1
  65. package/build/git/indexer.test.js +4 -8
  66. package/build/git/indexer.test.js.map +1 -1
  67. package/build/git/sync/synchronizer.d.ts.map +1 -1
  68. package/build/git/sync/synchronizer.js.map +1 -1
  69. package/build/git/sync/synchronizer.test.js +4 -2
  70. package/build/git/sync/synchronizer.test.js.map +1 -1
  71. package/build/index.js +5 -9
  72. package/build/index.js.map +1 -1
  73. package/build/index.test.js +3 -3
  74. package/build/index.test.js.map +1 -1
  75. package/build/logger.d.ts.map +1 -1
  76. package/build/logger.js +1 -9
  77. package/build/logger.js.map +1 -1
  78. package/build/prompts/register.d.ts.map +1 -1
  79. package/build/prompts/register.js.map +1 -1
  80. package/build/qdrant/client.d.ts.map +1 -1
  81. package/build/qdrant/client.js.map +1 -1
  82. package/build/qdrant/client.test.js +10 -34
  83. package/build/qdrant/client.test.js.map +1 -1
  84. package/build/resources/index.d.ts +1 -1
  85. package/build/resources/index.d.ts.map +1 -1
  86. package/build/resources/index.js +1 -1
  87. package/build/resources/index.js.map +1 -1
  88. package/build/tools/code.d.ts.map +1 -1
  89. package/build/tools/code.js +3 -9
  90. package/build/tools/code.js.map +1 -1
  91. package/build/tools/collection.d.ts.map +1 -1
  92. package/build/tools/collection.js +1 -3
  93. package/build/tools/collection.js.map +1 -1
  94. package/build/tools/document.d.ts.map +1 -1
  95. package/build/tools/document.js +1 -1
  96. package/build/tools/document.js.map +1 -1
  97. package/build/tools/federated.d.ts.map +1 -1
  98. package/build/tools/federated.js +15 -6
  99. package/build/tools/federated.js.map +1 -1
  100. package/build/tools/federated.test.js +18 -22
  101. package/build/tools/federated.test.js.map +1 -1
  102. package/build/tools/git-history.d.ts.map +1 -1
  103. package/build/tools/git-history.js +3 -7
  104. package/build/tools/git-history.js.map +1 -1
  105. package/build/tools/index.d.ts.map +1 -1
  106. package/build/tools/index.js.map +1 -1
  107. package/build/tools/logging.d.ts.map +1 -1
  108. package/build/tools/logging.js +1 -3
  109. package/build/tools/logging.js.map +1 -1
  110. package/build/tools/logging.test.js +1 -1
  111. package/build/tools/logging.test.js.map +1 -1
  112. package/build/tools/schemas.d.ts.map +1 -1
  113. package/build/tools/schemas.js +17 -64
  114. package/build/tools/schemas.js.map +1 -1
  115. package/build/tools/search.d.ts.map +1 -1
  116. package/build/tools/search.js +1 -1
  117. package/build/tools/search.js.map +1 -1
  118. package/commitlint.config.js +12 -23
  119. package/package.json +1 -1
  120. package/scripts/verify-providers.js +12 -32
  121. package/src/code/chunker/tree-sitter-chunker.ts +9 -35
  122. package/src/code/indexer.ts +45 -107
  123. package/src/code/scanner.ts +1 -1
  124. package/src/embeddings/cohere.test.ts +17 -45
  125. package/src/embeddings/cohere.ts +10 -17
  126. package/src/embeddings/factory.test.ts +18 -18
  127. package/src/embeddings/factory.ts +18 -25
  128. package/src/embeddings/ollama.test.ts +38 -67
  129. package/src/embeddings/ollama.ts +15 -27
  130. package/src/embeddings/openai.test.ts +17 -53
  131. package/src/embeddings/openai.ts +11 -22
  132. package/src/embeddings/sparse.test.ts +12 -2
  133. package/src/embeddings/voyage.test.ts +39 -80
  134. package/src/embeddings/voyage.ts +9 -13
  135. package/src/git/chunker.test.ts +1 -1
  136. package/src/git/chunker.ts +6 -22
  137. package/src/git/extractor.integration.test.ts +12 -16
  138. package/src/git/extractor.test.ts +21 -35
  139. package/src/git/extractor.ts +14 -36
  140. package/src/git/index.ts +9 -10
  141. package/src/git/indexer.test.ts +29 -57
  142. package/src/git/indexer.ts +38 -86
  143. package/src/git/sync/synchronizer.test.ts +6 -9
  144. package/src/git/sync/synchronizer.ts +2 -5
  145. package/src/index.test.ts +7 -9
  146. package/src/index.ts +34 -80
  147. package/src/logger.ts +3 -14
  148. package/src/prompts/register.ts +3 -10
  149. package/src/qdrant/client.test.ts +63 -169
  150. package/src/qdrant/client.ts +19 -45
  151. package/src/resources/index.ts +4 -10
  152. package/src/tools/code.ts +43 -66
  153. package/src/tools/collection.ts +19 -38
  154. package/src/tools/document.ts +10 -19
  155. package/src/tools/federated.test.ts +34 -57
  156. package/src/tools/federated.ts +88 -108
  157. package/src/tools/git-history.ts +32 -60
  158. package/src/tools/index.ts +1 -4
  159. package/src/tools/logging.test.ts +10 -10
  160. package/src/tools/logging.ts +8 -18
  161. package/src/tools/schemas.ts +23 -78
  162. package/src/tools/search.ts +77 -94
  163. package/tests/code/chunker/tree-sitter-chunker.test.ts +6 -19
  164. package/tests/code/indexer.test.ts +100 -192
  165. package/tests/code/integration.test.ts +61 -117
  166. package/tests/code/scanner.test.ts +12 -39
  167. package/tests/code/sync/snapshot.test.ts +4 -14
  168. package/tests/code/sync/synchronizer.test.ts +10 -40
package/src/index.ts CHANGED
@@ -8,7 +8,6 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
8
8
  import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
9
9
  import Bottleneck from "bottleneck";
10
10
  import express from "express";
11
- import logger from "./logger.js";
12
11
  import {
13
12
  DEFAULT_BATCH_SIZE,
14
13
  DEFAULT_CHUNK_OVERLAP,
@@ -19,9 +18,10 @@ import {
19
18
  } from "./code/config.js";
20
19
  import { CodeIndexer } from "./code/indexer.js";
21
20
  import type { CodeConfig } from "./code/types.js";
21
+ import { EmbeddingProviderFactory } from "./embeddings/factory.js";
22
22
  import { DEFAULT_GIT_CONFIG, GitHistoryIndexer } from "./git/index.js";
23
23
  import type { GitConfig } from "./git/types.js";
24
- import { EmbeddingProviderFactory } from "./embeddings/factory.js";
24
+ import logger from "./logger.js";
25
25
  import { loadPromptsConfig, type PromptsConfig } from "./prompts/index.js";
26
26
  import { registerAllPrompts } from "./prompts/register.js";
27
27
  import { QdrantManager } from "./qdrant/client.js";
@@ -30,27 +30,22 @@ import { registerAllTools } from "./tools/index.js";
30
30
 
31
31
  // Read package.json for version
32
32
  const __dirname = dirname(fileURLToPath(import.meta.url));
33
- const pkg = JSON.parse(
34
- readFileSync(join(__dirname, "../package.json"), "utf-8"),
35
- );
33
+ const pkg = JSON.parse(readFileSync(join(__dirname, "../package.json"), "utf-8"));
36
34
 
37
35
  // Validate environment variables
38
36
  const QDRANT_URL = process.env.QDRANT_URL || "http://localhost:6333";
39
37
  const QDRANT_API_KEY = process.env.QDRANT_API_KEY;
40
- const EMBEDDING_PROVIDER = (
41
- process.env.EMBEDDING_PROVIDER || "ollama"
42
- ).toLowerCase();
38
+ const EMBEDDING_PROVIDER = (process.env.EMBEDDING_PROVIDER || "ollama").toLowerCase();
43
39
  const TRANSPORT_MODE = (process.env.TRANSPORT_MODE || "stdio").toLowerCase();
44
40
  const HTTP_PORT = parseInt(process.env.HTTP_PORT || "3000", 10);
45
- const PROMPTS_CONFIG_FILE =
46
- process.env.PROMPTS_CONFIG_FILE || join(__dirname, "../prompts.json");
41
+ const PROMPTS_CONFIG_FILE = process.env.PROMPTS_CONFIG_FILE || join(__dirname, "../prompts.json");
47
42
 
48
43
  // Validate HTTP_PORT when HTTP mode is selected
49
44
  if (TRANSPORT_MODE === "http") {
50
45
  if (Number.isNaN(HTTP_PORT) || HTTP_PORT < 1 || HTTP_PORT > 65535) {
51
46
  logger.fatal(
52
47
  { port: process.env.HTTP_PORT },
53
- "Invalid HTTP_PORT. Must be a number between 1 and 65535",
48
+ "Invalid HTTP_PORT. Must be a number between 1 and 65535"
54
49
  );
55
50
  process.exit(1);
56
51
  }
@@ -77,7 +72,7 @@ if (EMBEDDING_PROVIDER !== "ollama") {
77
72
  default:
78
73
  logger.fatal(
79
74
  { provider: EMBEDDING_PROVIDER },
80
- "Unknown embedding provider. Supported providers: openai, cohere, voyage, ollama",
75
+ "Unknown embedding provider. Supported providers: openai, cohere, voyage, ollama"
81
76
  );
82
77
  process.exit(1);
83
78
  }
@@ -85,7 +80,7 @@ if (EMBEDDING_PROVIDER !== "ollama") {
85
80
  if (!apiKey) {
86
81
  logger.fatal(
87
82
  { provider: EMBEDDING_PROVIDER, requiredKey: requiredKeyName },
88
- `${requiredKeyName} is required for ${EMBEDDING_PROVIDER} provider`,
83
+ `${requiredKeyName} is required for ${EMBEDDING_PROVIDER} provider`
89
84
  );
90
85
  process.exit(1);
91
86
  }
@@ -95,8 +90,7 @@ if (EMBEDDING_PROVIDER !== "ollama") {
95
90
  async function checkOllamaAvailability() {
96
91
  if (EMBEDDING_PROVIDER === "ollama") {
97
92
  const baseUrl = process.env.EMBEDDING_BASE_URL || "http://localhost:11434";
98
- const isLocalhost =
99
- baseUrl.includes("localhost") || baseUrl.includes("127.0.0.1");
93
+ const isLocalhost = baseUrl.includes("localhost") || baseUrl.includes("127.0.0.1");
100
94
 
101
95
  try {
102
96
  const response = await fetch(`${baseUrl}/api/version`);
@@ -109,7 +103,7 @@ async function checkOllamaAvailability() {
109
103
  const { models } = await tagsResponse.json();
110
104
  const modelName = process.env.EMBEDDING_MODEL || "nomic-embed-text";
111
105
  const modelExists = models.some(
112
- (m: any) => m.name === modelName || m.name.startsWith(`${modelName}:`),
106
+ (m: any) => m.name === modelName || m.name.startsWith(`${modelName}:`)
113
107
  );
114
108
 
115
109
  if (!modelExists) {
@@ -132,9 +126,7 @@ async function checkOllamaAvailability() {
132
126
  }
133
127
  } catch (error) {
134
128
  const errorMessage =
135
- error instanceof Error
136
- ? error.message
137
- : `Ollama is not running at ${baseUrl}`;
129
+ error instanceof Error ? error.message : `Ollama is not running at ${baseUrl}`;
138
130
 
139
131
  let helpText = "";
140
132
  if (isLocalhost) {
@@ -170,30 +162,18 @@ logger.info(
170
162
  model: embeddings.getModel(),
171
163
  dimensions: embeddings.getDimensions(),
172
164
  },
173
- "Embedding provider initialized",
165
+ "Embedding provider initialized"
174
166
  );
175
167
 
176
168
  // Initialize code indexer
177
169
  const codeConfig: CodeConfig = {
178
- chunkSize: parseInt(
179
- process.env.CODE_CHUNK_SIZE || String(DEFAULT_CHUNK_SIZE),
180
- 10,
181
- ),
182
- chunkOverlap: parseInt(
183
- process.env.CODE_CHUNK_OVERLAP || String(DEFAULT_CHUNK_OVERLAP),
184
- 10,
185
- ),
170
+ chunkSize: parseInt(process.env.CODE_CHUNK_SIZE || String(DEFAULT_CHUNK_SIZE), 10),
171
+ chunkOverlap: parseInt(process.env.CODE_CHUNK_OVERLAP || String(DEFAULT_CHUNK_OVERLAP), 10),
186
172
  enableASTChunking: process.env.CODE_ENABLE_AST !== "false",
187
173
  supportedExtensions: DEFAULT_CODE_EXTENSIONS,
188
174
  ignorePatterns: DEFAULT_IGNORE_PATTERNS,
189
- batchSize: parseInt(
190
- process.env.CODE_BATCH_SIZE || String(DEFAULT_BATCH_SIZE),
191
- 10,
192
- ),
193
- defaultSearchLimit: parseInt(
194
- process.env.CODE_SEARCH_LIMIT || String(DEFAULT_SEARCH_LIMIT),
195
- 10,
196
- ),
175
+ batchSize: parseInt(process.env.CODE_BATCH_SIZE || String(DEFAULT_BATCH_SIZE), 10),
176
+ defaultSearchLimit: parseInt(process.env.CODE_SEARCH_LIMIT || String(DEFAULT_SEARCH_LIMIT), 10),
197
177
  enableHybridSearch: process.env.CODE_ENABLE_HYBRID === "true",
198
178
  };
199
179
 
@@ -202,37 +182,26 @@ logger.debug({ codeConfig }, "Code indexer configured");
202
182
 
203
183
  // Initialize git history indexer
204
184
  const gitConfig: GitConfig = {
205
- maxCommits: parseInt(
206
- process.env.GIT_MAX_COMMITS || String(DEFAULT_GIT_CONFIG.maxCommits),
207
- 10,
208
- ),
185
+ maxCommits: parseInt(process.env.GIT_MAX_COMMITS || String(DEFAULT_GIT_CONFIG.maxCommits), 10),
209
186
  includeFileList: process.env.GIT_INCLUDE_FILES !== "false",
210
187
  includeDiff: process.env.GIT_INCLUDE_DIFF !== "false",
211
188
  maxDiffSize: parseInt(
212
189
  process.env.GIT_MAX_DIFF_SIZE || String(DEFAULT_GIT_CONFIG.maxDiffSize),
213
- 10,
214
- ),
215
- gitTimeout: parseInt(
216
- process.env.GIT_TIMEOUT || String(DEFAULT_GIT_CONFIG.gitTimeout),
217
- 10,
190
+ 10
218
191
  ),
192
+ gitTimeout: parseInt(process.env.GIT_TIMEOUT || String(DEFAULT_GIT_CONFIG.gitTimeout), 10),
219
193
  maxChunkSize: parseInt(
220
194
  process.env.GIT_MAX_CHUNK_SIZE || String(DEFAULT_GIT_CONFIG.maxChunkSize),
221
- 10,
222
- ),
223
- batchSize: parseInt(
224
- process.env.GIT_BATCH_SIZE || String(DEFAULT_GIT_CONFIG.batchSize),
225
- 10,
195
+ 10
226
196
  ),
197
+ batchSize: parseInt(process.env.GIT_BATCH_SIZE || String(DEFAULT_GIT_CONFIG.batchSize), 10),
227
198
  batchRetryAttempts: parseInt(
228
- process.env.GIT_BATCH_RETRY_ATTEMPTS ||
229
- String(DEFAULT_GIT_CONFIG.batchRetryAttempts),
230
- 10,
199
+ process.env.GIT_BATCH_RETRY_ATTEMPTS || String(DEFAULT_GIT_CONFIG.batchRetryAttempts),
200
+ 10
231
201
  ),
232
202
  defaultSearchLimit: parseInt(
233
- process.env.GIT_SEARCH_LIMIT ||
234
- String(DEFAULT_GIT_CONFIG.defaultSearchLimit),
235
- 10,
203
+ process.env.GIT_SEARCH_LIMIT || String(DEFAULT_GIT_CONFIG.defaultSearchLimit),
204
+ 10
236
205
  ),
237
206
  enableHybridSearch: process.env.GIT_ENABLE_HYBRID !== "false",
238
207
  };
@@ -247,13 +216,10 @@ if (existsSync(PROMPTS_CONFIG_FILE)) {
247
216
  promptsConfig = loadPromptsConfig(PROMPTS_CONFIG_FILE);
248
217
  logger.info(
249
218
  { count: promptsConfig.prompts.length, file: PROMPTS_CONFIG_FILE },
250
- "Loaded prompts config",
219
+ "Loaded prompts config"
251
220
  );
252
221
  } catch (error) {
253
- logger.fatal(
254
- { file: PROMPTS_CONFIG_FILE, err: error },
255
- "Failed to load prompts configuration",
256
- );
222
+ logger.fatal({ file: PROMPTS_CONFIG_FILE, err: error }, "Failed to load prompts configuration");
257
223
  process.exit(1);
258
224
  }
259
225
  }
@@ -303,17 +269,14 @@ const RATE_LIMIT_MAX_REQUESTS = 100; // Max requests per window
303
269
  const RATE_LIMIT_WINDOW_MS = 15 * 60 * 1000; // 15 minutes
304
270
  const RATE_LIMIT_MAX_CONCURRENT = 10; // Max concurrent requests per IP
305
271
  const RATE_LIMITER_CLEANUP_INTERVAL_MS = 60 * 60 * 1000; // 1 hour
306
- const REQUEST_TIMEOUT_MS = parseInt(
307
- process.env.HTTP_REQUEST_TIMEOUT_MS || "300000",
308
- 10,
309
- );
272
+ const REQUEST_TIMEOUT_MS = parseInt(process.env.HTTP_REQUEST_TIMEOUT_MS || "300000", 10);
310
273
  const SHUTDOWN_GRACE_PERIOD_MS = 10 * 1000; // 10 seconds
311
274
 
312
275
  // Validate REQUEST_TIMEOUT_MS
313
276
  if (Number.isNaN(REQUEST_TIMEOUT_MS) || REQUEST_TIMEOUT_MS <= 0) {
314
277
  logger.fatal(
315
278
  { value: process.env.HTTP_REQUEST_TIMEOUT_MS },
316
- "Invalid HTTP_REQUEST_TIMEOUT_MS. Must be a positive integer",
279
+ "Invalid HTTP_REQUEST_TIMEOUT_MS. Must be a positive integer"
317
280
  );
318
281
  process.exit(1);
319
282
  }
@@ -341,7 +304,7 @@ async function startHttpServer() {
341
304
  res: express.Response,
342
305
  code: number,
343
306
  message: string,
344
- httpStatus: number = 500,
307
+ httpStatus: number = 500
345
308
  ) => {
346
309
  if (!res.headersSent) {
347
310
  res.status(httpStatus).json({
@@ -372,10 +335,7 @@ async function startHttpServer() {
372
335
  });
373
336
 
374
337
  if (keysToDelete.length > 0) {
375
- logger.debug(
376
- { count: keysToDelete.length },
377
- "Cleaned up inactive rate limiters",
378
- );
338
+ logger.debug({ count: keysToDelete.length }, "Cleaned up inactive rate limiters");
379
339
  }
380
340
  }, RATE_LIMITER_CLEANUP_INTERVAL_MS);
381
341
 
@@ -383,7 +343,7 @@ async function startHttpServer() {
383
343
  const rateLimitMiddleware = async (
384
344
  req: express.Request,
385
345
  res: express.Response,
386
- next: express.NextFunction,
346
+ next: express.NextFunction
387
347
  ) => {
388
348
  const clientIp = req.ip || req.socket.remoteAddress || "unknown";
389
349
 
@@ -400,10 +360,7 @@ async function startHttpServer() {
400
360
  if (error instanceof Bottleneck.BottleneckError) {
401
361
  logger.warn({ clientIp }, "Rate limit exceeded");
402
362
  } else {
403
- logger.error(
404
- { clientIp, err: error },
405
- "Unexpected rate limiting error",
406
- );
363
+ logger.error({ clientIp, err: error }, "Unexpected rate limiting error");
407
364
  }
408
365
  sendErrorResponse(res, -32000, "Too many requests", 429);
409
366
  }
@@ -522,10 +479,7 @@ async function main() {
522
479
  } else if (TRANSPORT_MODE === "stdio") {
523
480
  await startStdioServer();
524
481
  } else {
525
- logger.fatal(
526
- { mode: TRANSPORT_MODE },
527
- "Invalid TRANSPORT_MODE. Supported modes: stdio, http",
528
- );
482
+ logger.fatal({ mode: TRANSPORT_MODE }, "Invalid TRANSPORT_MODE. Supported modes: stdio, http");
529
483
  process.exit(1);
530
484
  }
531
485
  }
package/src/logger.ts CHANGED
@@ -1,14 +1,6 @@
1
1
  import pino from "pino";
2
2
 
3
- const VALID_LEVELS = [
4
- "fatal",
5
- "error",
6
- "warn",
7
- "info",
8
- "debug",
9
- "trace",
10
- "silent",
11
- ];
3
+ const VALID_LEVELS = ["fatal", "error", "warn", "info", "debug", "trace", "silent"];
12
4
 
13
5
  function resolveLogLevel(): string {
14
6
  const level = process.env.LOG_LEVEL?.toLowerCase();
@@ -20,14 +12,11 @@ function resolveLogLevel(): string {
20
12
 
21
13
  // Write warning directly to stderr since logger isn't initialized yet
22
14
  process.stderr.write(
23
- `WARNING: Invalid LOG_LEVEL "${process.env.LOG_LEVEL}". Valid levels: ${VALID_LEVELS.join(", ")}. Falling back to "info".\n`,
15
+ `WARNING: Invalid LOG_LEVEL "${process.env.LOG_LEVEL}". Valid levels: ${VALID_LEVELS.join(", ")}. Falling back to "info".\n`
24
16
  );
25
17
  return "info";
26
18
  }
27
19
 
28
- const logger = pino(
29
- { level: resolveLogLevel(), name: "qdrant-mcp" },
30
- pino.destination(2),
31
- );
20
+ const logger = pino({ level: resolveLogLevel(), name: "qdrant-mcp" }, pino.destination(2));
32
21
 
33
22
  export default logger;
@@ -24,10 +24,7 @@ function buildArgsSchema(args: PromptArgument[]): Record<string, z.ZodTypeAny> {
24
24
  /**
25
25
  * Register all prompts from configuration on the server
26
26
  */
27
- export function registerAllPrompts(
28
- server: McpServer,
29
- config: PromptsConfig | null,
30
- ): void {
27
+ export function registerAllPrompts(server: McpServer, config: PromptsConfig | null): void {
31
28
  if (!config) {
32
29
  return; // No prompts = no prompts capability
33
30
  }
@@ -48,11 +45,7 @@ export function registerAllPrompts(
48
45
  validateArguments(argsRecord, prompt.arguments);
49
46
 
50
47
  // Render template
51
- const rendered = renderTemplate(
52
- prompt.template,
53
- argsRecord,
54
- prompt.arguments,
55
- );
48
+ const rendered = renderTemplate(prompt.template, argsRecord, prompt.arguments);
56
49
 
57
50
  return {
58
51
  messages: [
@@ -65,7 +58,7 @@ export function registerAllPrompts(
65
58
  },
66
59
  ],
67
60
  };
68
- },
61
+ }
69
62
  );
70
63
  }
71
64
  }