@mhalder/qdrant-mcp-server 3.1.1 → 3.2.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.
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Federated and contextual search tools registration
3
+ *
4
+ * Provides advanced search capabilities:
5
+ * - contextual_search: Combined git + code search for a single repository
6
+ * - federated_search: Search across multiple indexed repositories
7
+ */
8
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ import type { CodeIndexer } from "../code/indexer.js";
10
+ import type { CodeSearchResult } from "../code/types.js";
11
+ import type { GitHistoryIndexer } from "../git/indexer.js";
12
+ import type { GitSearchResult } from "../git/types.js";
13
+ export interface FederatedToolDependencies {
14
+ codeIndexer: CodeIndexer;
15
+ gitHistoryIndexer: GitHistoryIndexer;
16
+ }
17
+ /**
18
+ * Links a code chunk to commits that modified the file
19
+ */
20
+ export interface CodeCommitCorrelation {
21
+ codeResult: CodeSearchResult;
22
+ relatedCommits: Array<{
23
+ shortHash: string;
24
+ subject: string;
25
+ author: string;
26
+ date: string;
27
+ }>;
28
+ }
29
+ /**
30
+ * Combined code + git search results with correlations
31
+ */
32
+ export interface ContextualSearchResult {
33
+ codeResults: CodeSearchResult[];
34
+ gitResults: GitSearchResult[];
35
+ correlations: CodeCommitCorrelation[];
36
+ metadata: {
37
+ path: string;
38
+ query: string;
39
+ codeResultCount: number;
40
+ gitResultCount: number;
41
+ correlationCount: number;
42
+ };
43
+ }
44
+ /**
45
+ * Result with repository attribution
46
+ */
47
+ export type FederatedResult = (CodeSearchResult & {
48
+ resultType: "code";
49
+ repoPath: string;
50
+ }) | (GitSearchResult & {
51
+ resultType: "git";
52
+ repoPath: string;
53
+ });
54
+ /**
55
+ * Federated search response with results and metadata
56
+ */
57
+ export interface FederatedSearchResponse {
58
+ results: FederatedResult[];
59
+ metadata: {
60
+ query: string;
61
+ searchType: "code" | "git" | "both";
62
+ repositoriesSearched: string[];
63
+ totalResults: number;
64
+ };
65
+ }
66
+ /**
67
+ * Build correlations between code results and git history
68
+ * Links code chunks to commits that modified the same file
69
+ */
70
+ export declare function buildCorrelations(codeResults: CodeSearchResult[], gitResults: GitSearchResult[]): CodeCommitCorrelation[];
71
+ /**
72
+ * Check if two paths refer to the same file by comparing path segments from the end.
73
+ * This handles relative vs absolute paths while avoiding false positives.
74
+ *
75
+ * Examples:
76
+ * - "app/models/user.ts" vs "models/user.ts" → true (suffix match)
77
+ * - "app/models/user.ts" vs "lib/user.ts" → false (different parent dir)
78
+ * - "src/user.ts" vs "user.ts" → true (suffix match)
79
+ */
80
+ export declare function pathsMatch(path1: string, path2: string): boolean;
81
+ /**
82
+ * Normalize scores to [0, 1] range using min-max normalization
83
+ */
84
+ export declare function normalizeScores<T extends {
85
+ score: number;
86
+ }>(results: T[]): T[];
87
+ /**
88
+ * Calculate Reciprocal Rank Fusion score
89
+ * RRF formula: sum(1 / (k + rank)) where k=60 prevents high ranks from dominating
90
+ */
91
+ export declare function calculateRRFScore(ranks: number[]): number;
92
+ /**
93
+ * Register federated search tools on the MCP server
94
+ */
95
+ export declare function registerFederatedTools(server: McpServer, deps: FederatedToolDependencies): void;
96
+ //# sourceMappingURL=federated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"federated.d.ts","sourceRoot":"","sources":["../../src/tools/federated.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAOvD,MAAM,WAAW,yBAAyB;IACxC,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,cAAc,EAAE,KAAK,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,YAAY,EAAE,qBAAqB,EAAE,CAAC;IACtC,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,MAAM,CAAC;QACxB,cAAc,EAAE,MAAM,CAAC;QACvB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,CAAC,gBAAgB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7D,CAAC,eAAe,GAAG;IAAE,UAAU,EAAE,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAEhE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;QACpC,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,gBAAgB,EAAE,EAC/B,UAAU,EAAE,eAAe,EAAE,GAC5B,qBAAqB,EAAE,CAgCzB;AASD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAgBhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EACzD,OAAO,EAAE,CAAC,EAAE,GACX,CAAC,EAAE,CAiBL;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAGzD;AAmND;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,yBAAyB,GAC9B,IAAI,CAwKN"}
@@ -0,0 +1,375 @@
1
+ /**
2
+ * Federated and contextual search tools registration
3
+ *
4
+ * Provides advanced search capabilities:
5
+ * - contextual_search: Combined git + code search for a single repository
6
+ * - federated_search: Search across multiple indexed repositories
7
+ */
8
+ import * as schemas from "./schemas.js";
9
+ // ============================================================================
10
+ // Helper Functions
11
+ // ============================================================================
12
+ /**
13
+ * Build correlations between code results and git history
14
+ * Links code chunks to commits that modified the same file
15
+ */
16
+ export function buildCorrelations(codeResults, gitResults) {
17
+ const correlations = [];
18
+ for (const codeResult of codeResults) {
19
+ const relatedCommits = [];
20
+ // Find commits that modified this file
21
+ for (const gitResult of gitResults) {
22
+ // Check if any file in the commit matches the code result's file path
23
+ const matchesFile = gitResult.files.some((file) => pathsMatch(codeResult.filePath, file));
24
+ if (matchesFile) {
25
+ relatedCommits.push({
26
+ shortHash: gitResult.shortHash,
27
+ subject: gitResult.subject,
28
+ author: gitResult.author,
29
+ date: gitResult.date,
30
+ });
31
+ }
32
+ }
33
+ if (relatedCommits.length > 0) {
34
+ correlations.push({
35
+ codeResult,
36
+ relatedCommits,
37
+ });
38
+ }
39
+ }
40
+ return correlations;
41
+ }
42
+ /**
43
+ * Normalize a file path for comparison
44
+ */
45
+ function normalizePath(path) {
46
+ return path.replace(/\\/g, "/").toLowerCase();
47
+ }
48
+ /**
49
+ * Check if two paths refer to the same file by comparing path segments from the end.
50
+ * This handles relative vs absolute paths while avoiding false positives.
51
+ *
52
+ * Examples:
53
+ * - "app/models/user.ts" vs "models/user.ts" → true (suffix match)
54
+ * - "app/models/user.ts" vs "lib/user.ts" → false (different parent dir)
55
+ * - "src/user.ts" vs "user.ts" → true (suffix match)
56
+ */
57
+ export function pathsMatch(path1, path2) {
58
+ const segments1 = normalizePath(path1).split("/").filter(Boolean);
59
+ const segments2 = normalizePath(path2).split("/").filter(Boolean);
60
+ // Compare from the end - shorter path must be a suffix of longer path
61
+ const shorter = segments1.length <= segments2.length ? segments1 : segments2;
62
+ const longer = segments1.length <= segments2.length ? segments2 : segments1;
63
+ const offset = longer.length - shorter.length;
64
+ for (let i = 0; i < shorter.length; i++) {
65
+ if (shorter[i] !== longer[offset + i]) {
66
+ return false;
67
+ }
68
+ }
69
+ return shorter.length > 0;
70
+ }
71
+ /**
72
+ * Normalize scores to [0, 1] range using min-max normalization
73
+ */
74
+ export function normalizeScores(results) {
75
+ if (results.length === 0)
76
+ return [];
77
+ if (results.length === 1)
78
+ return results.map((r) => ({ ...r, score: 1 }));
79
+ const scores = results.map((r) => r.score);
80
+ const minScore = Math.min(...scores);
81
+ const maxScore = Math.max(...scores);
82
+ // If all scores are identical, normalize to 1
83
+ if (maxScore === minScore) {
84
+ return results.map((r) => ({ ...r, score: 1 }));
85
+ }
86
+ return results.map((r) => ({
87
+ ...r,
88
+ score: (r.score - minScore) / (maxScore - minScore),
89
+ }));
90
+ }
91
+ /**
92
+ * Calculate Reciprocal Rank Fusion score
93
+ * RRF formula: sum(1 / (k + rank)) where k=60 prevents high ranks from dominating
94
+ */
95
+ export function calculateRRFScore(ranks) {
96
+ const k = 60;
97
+ return ranks.reduce((sum, rank) => sum + 1 / (k + rank), 0);
98
+ }
99
+ // ============================================================================
100
+ // Tool Implementations
101
+ // ============================================================================
102
+ /**
103
+ * Perform contextual search across code and git history
104
+ */
105
+ async function performContextualSearch(codeIndexer, gitHistoryIndexer, params) {
106
+ const { path, query, codeLimit = 5, gitLimit = 5, correlate = true } = params;
107
+ // Validate both indexes exist
108
+ const [codeStatus, gitStatus] = await Promise.all([
109
+ codeIndexer.getIndexStatus(path),
110
+ gitHistoryIndexer.getIndexStatus(path),
111
+ ]);
112
+ if (codeStatus.status !== "indexed") {
113
+ throw new Error(`Code index not found for "${path}". Run index_codebase first.`);
114
+ }
115
+ if (gitStatus.status !== "indexed") {
116
+ throw new Error(`Git history index not found for "${path}". Run index_git_history first.`);
117
+ }
118
+ // Execute searches in parallel
119
+ const [codeResults, gitResults] = await Promise.all([
120
+ codeIndexer.searchCode(path, query, { limit: codeLimit }),
121
+ gitHistoryIndexer.searchHistory(path, query, { limit: gitLimit }),
122
+ ]);
123
+ // Build correlations if requested
124
+ const correlations = correlate
125
+ ? buildCorrelations(codeResults, gitResults)
126
+ : [];
127
+ return {
128
+ codeResults,
129
+ gitResults,
130
+ correlations,
131
+ metadata: {
132
+ path,
133
+ query,
134
+ codeResultCount: codeResults.length,
135
+ gitResultCount: gitResults.length,
136
+ correlationCount: correlations.length,
137
+ },
138
+ };
139
+ }
140
+ /**
141
+ * Perform federated search across multiple repositories
142
+ */
143
+ async function performFederatedSearch(codeIndexer, gitHistoryIndexer, params) {
144
+ const { paths, query, searchType = "both", limit = 20 } = params;
145
+ // Fail-fast validation: check all paths are indexed
146
+ const validationPromises = paths.map(async (path) => {
147
+ const errors = [];
148
+ if (searchType === "code" || searchType === "both") {
149
+ const codeStatus = await codeIndexer.getIndexStatus(path);
150
+ if (codeStatus.status !== "indexed") {
151
+ errors.push(`Code index not found for "${path}"`);
152
+ }
153
+ }
154
+ if (searchType === "git" || searchType === "both") {
155
+ const gitStatus = await gitHistoryIndexer.getIndexStatus(path);
156
+ if (gitStatus.status !== "indexed") {
157
+ errors.push(`Git history index not found for "${path}"`);
158
+ }
159
+ }
160
+ return { path, errors };
161
+ });
162
+ const validationResults = await Promise.all(validationPromises);
163
+ const allErrors = validationResults.flatMap((v) => v.errors);
164
+ if (allErrors.length > 0) {
165
+ throw new Error(`Index validation failed:\n${allErrors.join("\n")}`);
166
+ }
167
+ // Parallel search across all repositories
168
+ const searchPromises = [];
169
+ for (const path of paths) {
170
+ if (searchType === "code" || searchType === "both") {
171
+ searchPromises.push(codeIndexer
172
+ .searchCode(path, query, { limit: Math.ceil(limit / paths.length) })
173
+ .then((results) => results.map((r) => ({
174
+ ...r,
175
+ resultType: "code",
176
+ repoPath: path,
177
+ }))));
178
+ }
179
+ if (searchType === "git" || searchType === "both") {
180
+ searchPromises.push(gitHistoryIndexer
181
+ .searchHistory(path, query, {
182
+ limit: Math.ceil(limit / paths.length),
183
+ })
184
+ .then((results) => results.map((r) => ({
185
+ ...r,
186
+ resultType: "git",
187
+ repoPath: path,
188
+ }))));
189
+ }
190
+ }
191
+ const searchResults = await Promise.all(searchPromises);
192
+ const allResults = searchResults.flat();
193
+ // Normalize scores per result type to ensure fair comparison
194
+ const codeResults = allResults.filter((r) => r.resultType === "code");
195
+ const gitResults = allResults.filter((r) => r.resultType === "git");
196
+ const normalizedCode = normalizeScores(codeResults);
197
+ const normalizedGit = normalizeScores(gitResults);
198
+ const normalizedResults = [...normalizedCode, ...normalizedGit];
199
+ // Apply RRF ranking
200
+ // Rank within each repo+type group for fair cross-repo interleaving
201
+ // This ensures top results from each repo get similar RRF scores
202
+ const groupedResults = new Map();
203
+ for (const result of normalizedResults) {
204
+ const key = `${result.repoPath}:${result.resultType}`;
205
+ if (!groupedResults.has(key)) {
206
+ groupedResults.set(key, []);
207
+ }
208
+ groupedResults.get(key).push(result);
209
+ }
210
+ // Sort each group by score and create rank lookup
211
+ const rankLookup = new Map();
212
+ for (const group of groupedResults.values()) {
213
+ group.sort((a, b) => b.score - a.score);
214
+ group.forEach((result, index) => {
215
+ rankLookup.set(result, index + 1);
216
+ });
217
+ }
218
+ // Calculate RRF scores based on per-repo ranks
219
+ const rankedResults = normalizedResults.map((result) => {
220
+ const rank = rankLookup.get(result) ?? 1;
221
+ return {
222
+ result,
223
+ rank,
224
+ rrfScore: calculateRRFScore([rank]),
225
+ };
226
+ });
227
+ // Sort by RRF score (higher is better)
228
+ rankedResults.sort((a, b) => b.rrfScore - a.rrfScore);
229
+ // Return top results up to limit
230
+ const topResults = rankedResults.slice(0, limit).map((r) => r.result);
231
+ return {
232
+ results: topResults,
233
+ metadata: {
234
+ query,
235
+ searchType,
236
+ repositoriesSearched: paths,
237
+ totalResults: topResults.length,
238
+ },
239
+ };
240
+ }
241
+ // ============================================================================
242
+ // Tool Registration
243
+ // ============================================================================
244
+ /**
245
+ * Register federated search tools on the MCP server
246
+ */
247
+ export function registerFederatedTools(server, deps) {
248
+ const { codeIndexer, gitHistoryIndexer } = deps;
249
+ // contextual_search
250
+ server.registerTool("contextual_search", {
251
+ title: "Contextual Search",
252
+ description: "Combined semantic search across code and git history for a single repository. " +
253
+ "Returns code chunks, relevant commits, and correlations showing which commits " +
254
+ "modified which files. Useful for understanding code evolution and finding related changes.",
255
+ inputSchema: schemas.ContextualSearchSchema,
256
+ }, async ({ path, query, codeLimit, gitLimit, correlate }) => {
257
+ try {
258
+ const result = await performContextualSearch(codeIndexer, gitHistoryIndexer, { path, query, codeLimit, gitLimit, correlate });
259
+ // Format output
260
+ const sections = [];
261
+ // Code results section
262
+ if (result.codeResults.length > 0) {
263
+ sections.push("## Code Results\n");
264
+ result.codeResults.forEach((r, idx) => {
265
+ sections.push(`### ${idx + 1}. ${r.filePath}:${r.startLine}-${r.endLine} (score: ${r.score.toFixed(3)})\n` +
266
+ `Language: ${r.language}\n` +
267
+ "```" +
268
+ r.language +
269
+ "\n" +
270
+ r.content +
271
+ "\n```\n");
272
+ });
273
+ }
274
+ // Git results section
275
+ if (result.gitResults.length > 0) {
276
+ sections.push("\n## Git History Results\n");
277
+ result.gitResults.forEach((r, idx) => {
278
+ sections.push(`### ${idx + 1}. ${r.shortHash} - ${r.subject} (score: ${r.score.toFixed(3)})\n` +
279
+ `Author: ${r.author} | Date: ${r.date} | Type: ${r.commitType}\n` +
280
+ `Files: ${r.files.slice(0, 5).join(", ")}${r.files.length > 5 ? ` (+${r.files.length - 5} more)` : ""}\n`);
281
+ });
282
+ }
283
+ // Correlations section
284
+ if (result.correlations.length > 0) {
285
+ sections.push("\n## Correlations (Code ↔ Commits)\n");
286
+ result.correlations.forEach((c) => {
287
+ const commits = c.relatedCommits
288
+ .slice(0, 3)
289
+ .map((commit) => ` - ${commit.shortHash}: ${commit.subject}`)
290
+ .join("\n");
291
+ sections.push(`**${c.codeResult.filePath}:${c.codeResult.startLine}** modified by:\n${commits}\n`);
292
+ });
293
+ }
294
+ // Summary
295
+ const summary = `\n---\nFound ${result.metadata.codeResultCount} code result(s), ` +
296
+ `${result.metadata.gitResultCount} git result(s), ` +
297
+ `${result.metadata.correlationCount} correlation(s).`;
298
+ sections.push(summary);
299
+ return {
300
+ content: [{ type: "text", text: sections.join("\n") }],
301
+ };
302
+ }
303
+ catch (error) {
304
+ return {
305
+ content: [
306
+ {
307
+ type: "text",
308
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`,
309
+ },
310
+ ],
311
+ isError: true,
312
+ };
313
+ }
314
+ });
315
+ // federated_search
316
+ server.registerTool("federated_search", {
317
+ title: "Federated Search",
318
+ description: "Search across multiple indexed repositories simultaneously. " +
319
+ "Combines and ranks results using Reciprocal Rank Fusion (RRF) for fair cross-repository comparison. " +
320
+ "Supports code-only, git-only, or combined search modes.",
321
+ inputSchema: schemas.FederatedSearchSchema,
322
+ }, async ({ paths, query, searchType, limit }) => {
323
+ try {
324
+ const response = await performFederatedSearch(codeIndexer, gitHistoryIndexer, { paths, query, searchType, limit });
325
+ if (response.results.length === 0) {
326
+ return {
327
+ content: [
328
+ {
329
+ type: "text",
330
+ text: `No results found for query "${query}" across ${paths.length} repository(ies).`,
331
+ },
332
+ ],
333
+ };
334
+ }
335
+ // Format results
336
+ const sections = [
337
+ `# Federated Search Results\n` +
338
+ `Query: "${query}" | Type: ${response.metadata.searchType} | ` +
339
+ `Repositories: ${response.metadata.repositoriesSearched.length}\n`,
340
+ ];
341
+ response.results.forEach((r, idx) => {
342
+ if (r.resultType === "code") {
343
+ sections.push(`## ${idx + 1}. [CODE] ${r.filePath}:${r.startLine}-${r.endLine}\n` +
344
+ `Repository: ${r.repoPath} | Language: ${r.language} | Score: ${r.score.toFixed(3)}\n` +
345
+ "```" +
346
+ r.language +
347
+ "\n" +
348
+ r.content +
349
+ "\n```\n");
350
+ }
351
+ else {
352
+ sections.push(`## ${idx + 1}. [GIT] ${r.shortHash} - ${r.subject}\n` +
353
+ `Repository: ${r.repoPath} | Author: ${r.author} | Date: ${r.date} | Score: ${r.score.toFixed(3)}\n` +
354
+ `Type: ${r.commitType} | Files: ${r.files.slice(0, 3).join(", ")}${r.files.length > 3 ? ` (+${r.files.length - 3} more)` : ""}\n`);
355
+ }
356
+ });
357
+ sections.push(`\n---\nTotal: ${response.metadata.totalResults} result(s) from ${response.metadata.repositoriesSearched.length} repository(ies).`);
358
+ return {
359
+ content: [{ type: "text", text: sections.join("\n") }],
360
+ };
361
+ }
362
+ catch (error) {
363
+ return {
364
+ content: [
365
+ {
366
+ type: "text",
367
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`,
368
+ },
369
+ ],
370
+ isError: true,
371
+ };
372
+ }
373
+ });
374
+ }
375
+ //# sourceMappingURL=federated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"federated.js","sourceRoot":"","sources":["../../src/tools/federated.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=federated.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"federated.test.d.ts","sourceRoot":"","sources":["../../src/tools/federated.test.ts"],"names":[],"mappings":""}