@hayhandsome/code-index-mcp 0.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.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -0
  3. package/dist/cache/CacheManager.d.ts +19 -0
  4. package/dist/cache/CacheManager.js +51 -0
  5. package/dist/cache/CacheManager.js.map +1 -0
  6. package/dist/cli.d.ts +2 -0
  7. package/dist/cli.js +13 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/config/loader.d.ts +4 -0
  10. package/dist/config/loader.js +159 -0
  11. package/dist/config/loader.js.map +1 -0
  12. package/dist/config/types.d.ts +41 -0
  13. package/dist/config/types.js +13 -0
  14. package/dist/config/types.js.map +1 -0
  15. package/dist/embedders/factory.d.ts +3 -0
  16. package/dist/embedders/factory.js +16 -0
  17. package/dist/embedders/factory.js.map +1 -0
  18. package/dist/embedders/ollama.d.ts +7 -0
  19. package/dist/embedders/ollama.js +41 -0
  20. package/dist/embedders/ollama.js.map +1 -0
  21. package/dist/embedders/openai.d.ts +8 -0
  22. package/dist/embedders/openai.js +39 -0
  23. package/dist/embedders/openai.js.map +1 -0
  24. package/dist/embedders/openaiCompatible.d.ts +8 -0
  25. package/dist/embedders/openaiCompatible.js +45 -0
  26. package/dist/embedders/openaiCompatible.js.map +1 -0
  27. package/dist/embedders/types.d.ts +6 -0
  28. package/dist/embedders/types.js +2 -0
  29. package/dist/embedders/types.js.map +1 -0
  30. package/dist/ignore/IgnoreManager.d.ts +10 -0
  31. package/dist/ignore/IgnoreManager.js +46 -0
  32. package/dist/ignore/IgnoreManager.js.map +1 -0
  33. package/dist/index.d.ts +37 -0
  34. package/dist/index.js +21 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/indexer/SyncService.d.ts +23 -0
  37. package/dist/indexer/SyncService.js +179 -0
  38. package/dist/indexer/SyncService.js.map +1 -0
  39. package/dist/mcp/tools.d.ts +7 -0
  40. package/dist/mcp/tools.js +115 -0
  41. package/dist/mcp/tools.js.map +1 -0
  42. package/dist/parser/CodeParser.d.ts +8 -0
  43. package/dist/parser/CodeParser.js +71 -0
  44. package/dist/parser/CodeParser.js.map +1 -0
  45. package/dist/parser/types.d.ts +13 -0
  46. package/dist/parser/types.js +2 -0
  47. package/dist/parser/types.js.map +1 -0
  48. package/dist/scanner/fileScanner.d.ts +2 -0
  49. package/dist/scanner/fileScanner.js +42 -0
  50. package/dist/scanner/fileScanner.js.map +1 -0
  51. package/dist/scanner/supportedExtensions.d.ts +3 -0
  52. package/dist/scanner/supportedExtensions.js +48 -0
  53. package/dist/scanner/supportedExtensions.js.map +1 -0
  54. package/dist/search/SearchService.d.ts +7 -0
  55. package/dist/search/SearchService.js +23 -0
  56. package/dist/search/SearchService.js.map +1 -0
  57. package/dist/vector-store/QdrantStore.d.ts +15 -0
  58. package/dist/vector-store/QdrantStore.js +120 -0
  59. package/dist/vector-store/QdrantStore.js.map +1 -0
  60. package/dist/vector-store/types.d.ts +21 -0
  61. package/dist/vector-store/types.js +2 -0
  62. package/dist/vector-store/types.js.map +1 -0
  63. package/package.json +33 -0
@@ -0,0 +1,3 @@
1
+ export declare const scannerExtensions: string[];
2
+ export declare const fallbackExtensions: string[];
3
+ export declare function shouldUseFallbackChunking(extension: string): boolean;
@@ -0,0 +1,48 @@
1
+ export const scannerExtensions = [
2
+ ".tla",
3
+ ".js",
4
+ ".jsx",
5
+ ".ts",
6
+ ".vue",
7
+ ".tsx",
8
+ ".py",
9
+ ".rs",
10
+ ".go",
11
+ ".c",
12
+ ".h",
13
+ ".cpp",
14
+ ".hpp",
15
+ ".cs",
16
+ ".rb",
17
+ ".java",
18
+ ".php",
19
+ ".swift",
20
+ ".sol",
21
+ ".kt",
22
+ ".kts",
23
+ ".ex",
24
+ ".exs",
25
+ ".el",
26
+ ".html",
27
+ ".htm",
28
+ ".md",
29
+ ".markdown",
30
+ ".json",
31
+ ".css",
32
+ ".rdl",
33
+ ".ml",
34
+ ".mli",
35
+ ".lua",
36
+ ".scala",
37
+ ".toml",
38
+ ".zig",
39
+ ".elm",
40
+ ".ejs",
41
+ ".erb",
42
+ ".vb",
43
+ ];
44
+ export const fallbackExtensions = [".vb", ".scala", ".swift"];
45
+ export function shouldUseFallbackChunking(extension) {
46
+ return fallbackExtensions.includes(extension.toLowerCase());
47
+ }
48
+ //# sourceMappingURL=supportedExtensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supportedExtensions.js","sourceRoot":"","sources":["../../src/scanner/supportedExtensions.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAChC,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;IACL,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,MAAM;IACN,KAAK;IACL,KAAK;IACL,OAAO;IACP,MAAM;IACN,QAAQ;IACR,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,KAAK;IACL,OAAO;IACP,MAAM;IACN,KAAK;IACL,WAAW;IACX,OAAO;IACP,MAAM;IACN,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;CACL,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;AAE7D,MAAM,UAAU,yBAAyB,CAAC,SAAiB;IAC1D,OAAO,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAA;AAC5D,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { SyncService } from "../indexer/SyncService.js";
2
+ import { VectorSearchResult } from "../vector-store/types.js";
3
+ export declare class SearchService {
4
+ private readonly syncService;
5
+ constructor(syncService: SyncService);
6
+ search(workspacePath: string, query: string, directoryPrefix?: string): Promise<VectorSearchResult[]>;
7
+ }
@@ -0,0 +1,23 @@
1
+ import { loadConfig } from "../config/loader.js";
2
+ import { createEmbedderFromConfig } from "../embedders/factory.js";
3
+ import { QdrantStore } from "../vector-store/QdrantStore.js";
4
+ export class SearchService {
5
+ syncService;
6
+ constructor(syncService) {
7
+ this.syncService = syncService;
8
+ }
9
+ async search(workspacePath, query, directoryPrefix) {
10
+ await this.syncService.syncIncremental(workspacePath);
11
+ const { config, secrets } = await loadConfig(workspacePath, { validate: true });
12
+ const embedder = createEmbedderFromConfig(config, secrets);
13
+ const embeddings = await embedder.createEmbeddings([query]);
14
+ const vector = embeddings.embeddings[0];
15
+ if (!vector) {
16
+ throw new Error("Failed to generate query embedding");
17
+ }
18
+ const store = new QdrantStore(workspacePath, config.qdrantUrl, vector.length, secrets.qdrantApiKey);
19
+ await store.initialize();
20
+ return store.search(vector, config.searchMinScore, config.searchMaxResults, directoryPrefix);
21
+ }
22
+ }
23
+ //# sourceMappingURL=SearchService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchService.js","sourceRoot":"","sources":["../../src/search/SearchService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAA;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAG5D,MAAM,OAAO,aAAa;IACI;IAA7B,YAA6B,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAEzD,KAAK,CAAC,MAAM,CACX,aAAqB,EACrB,KAAa,EACb,eAAwB;QAExB,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAA;QAErD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,UAAU,CAAC,aAAa,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/E,MAAM,QAAQ,GAAG,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC1D,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;QAC3D,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QACvC,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;QACtD,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;QACnG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAA;QACxB,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAA;IAC7F,CAAC;CACD"}
@@ -0,0 +1,15 @@
1
+ import { VectorPoint, VectorSearchResult } from "./types.js";
2
+ export declare class QdrantStore {
3
+ private readonly client;
4
+ private readonly collectionName;
5
+ private readonly vectorSize;
6
+ constructor(workspacePath: string, qdrantUrl: string, vectorSize: number, apiKey?: string);
7
+ initialize(): Promise<boolean>;
8
+ upsert(points: VectorPoint[]): Promise<void>;
9
+ search(queryVector: number[], minScore: number, maxResults: number, directoryPrefix?: string): Promise<VectorSearchResult[]>;
10
+ deleteByPaths(paths: string[]): Promise<void>;
11
+ clear(): Promise<void>;
12
+ private createCollection;
13
+ private getCollectionInfo;
14
+ private extractVectorSize;
15
+ }
@@ -0,0 +1,120 @@
1
+ import { QdrantClient } from "@qdrant/js-client-rest";
2
+ import { createHash } from "crypto";
3
+ export class QdrantStore {
4
+ client;
5
+ collectionName;
6
+ vectorSize;
7
+ constructor(workspacePath, qdrantUrl, vectorSize, apiKey) {
8
+ this.client = new QdrantClient({
9
+ url: qdrantUrl,
10
+ apiKey,
11
+ headers: {
12
+ "User-Agent": "code-index-mcp",
13
+ },
14
+ });
15
+ this.vectorSize = vectorSize;
16
+ const hash = createHash("sha256").update(workspacePath).digest("hex");
17
+ this.collectionName = `ws-${hash.substring(0, 16)}`;
18
+ }
19
+ async initialize() {
20
+ const collectionInfo = await this.getCollectionInfo();
21
+ if (!collectionInfo) {
22
+ await this.createCollection();
23
+ return true;
24
+ }
25
+ const existingVectorSize = this.extractVectorSize(collectionInfo);
26
+ if (existingVectorSize !== this.vectorSize) {
27
+ await this.client.deleteCollection(this.collectionName);
28
+ await this.createCollection();
29
+ return true;
30
+ }
31
+ return false;
32
+ }
33
+ async upsert(points) {
34
+ if (points.length === 0) {
35
+ return;
36
+ }
37
+ await this.client.upsert(this.collectionName, {
38
+ points,
39
+ });
40
+ }
41
+ async search(queryVector, minScore, maxResults, directoryPrefix) {
42
+ const result = await this.client.search(this.collectionName, {
43
+ vector: queryVector,
44
+ limit: maxResults,
45
+ score_threshold: minScore,
46
+ with_payload: true,
47
+ });
48
+ const mapped = (result ?? []).map((item) => {
49
+ const payload = (item.payload ?? {});
50
+ return {
51
+ filePath: payload.filePath,
52
+ startLine: payload.startLine,
53
+ endLine: payload.endLine,
54
+ snippet: payload.content,
55
+ score: item.score ?? 0,
56
+ payload,
57
+ };
58
+ });
59
+ if (!directoryPrefix) {
60
+ return mapped;
61
+ }
62
+ return mapped.filter((entry) => entry.filePath.startsWith(directoryPrefix));
63
+ }
64
+ async deleteByPaths(paths) {
65
+ if (paths.length === 0) {
66
+ return;
67
+ }
68
+ await this.client.delete(this.collectionName, {
69
+ filter: {
70
+ must: [
71
+ {
72
+ key: "filePath",
73
+ match: {
74
+ any: paths,
75
+ },
76
+ },
77
+ ],
78
+ },
79
+ });
80
+ }
81
+ async clear() {
82
+ await this.client.deleteCollection(this.collectionName);
83
+ }
84
+ async createCollection() {
85
+ await this.client.createCollection(this.collectionName, {
86
+ vectors: {
87
+ size: this.vectorSize,
88
+ distance: "Cosine",
89
+ on_disk: true,
90
+ },
91
+ hnsw_config: {
92
+ m: 64,
93
+ ef_construct: 512,
94
+ on_disk: true,
95
+ },
96
+ });
97
+ }
98
+ async getCollectionInfo() {
99
+ try {
100
+ return await this.client.getCollection(this.collectionName);
101
+ }
102
+ catch {
103
+ return null;
104
+ }
105
+ }
106
+ extractVectorSize(collectionInfo) {
107
+ const vectorsConfig = collectionInfo.config?.params?.vectors;
108
+ if (typeof vectorsConfig === "number") {
109
+ return vectorsConfig;
110
+ }
111
+ if (vectorsConfig &&
112
+ typeof vectorsConfig === "object" &&
113
+ "size" in vectorsConfig &&
114
+ typeof vectorsConfig.size === "number") {
115
+ return vectorsConfig.size;
116
+ }
117
+ return 0;
118
+ }
119
+ }
120
+ //# sourceMappingURL=QdrantStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QdrantStore.js","sourceRoot":"","sources":["../../src/vector-store/QdrantStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAW,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAGnC,MAAM,OAAO,WAAW;IACN,MAAM,CAAc;IACpB,cAAc,CAAQ;IACtB,UAAU,CAAQ;IAEnC,YACC,aAAqB,EACrB,SAAiB,EACjB,UAAkB,EAClB,MAAe;QAEf,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC;YAC9B,GAAG,EAAE,SAAS;YACd,MAAM;YACN,OAAO,EAAE;gBACR,YAAY,EAAE,gBAAgB;aAC9B;SACD,CAAC,CAAA;QACF,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACrE,IAAI,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;IACpD,CAAC;IAED,KAAK,CAAC,UAAU;QACf,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAA;QACrD,IAAI,CAAC,cAAc,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAA;YAC7B,OAAO,IAAI,CAAA;QACZ,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAA;QACjE,IAAI,kBAAkB,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5C,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YACvD,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAA;YAC7B,OAAO,IAAI,CAAA;QACZ,CAAC;QAED,OAAO,KAAK,CAAA;IACb,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAqB;QACjC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAM;QACP,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;YAC7C,MAAM;SACN,CAAC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CACX,WAAqB,EACrB,QAAgB,EAChB,UAAkB,EAClB,eAAwB;QAExB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;YAC5D,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,UAAU;YACjB,eAAe,EAAE,QAAQ;YACzB,YAAY,EAAE,IAAI;SAClB,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC1C,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAkC,CAAA;YACrE,OAAO;gBACN,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC;gBACtB,OAAO;aACP,CAAA;QACF,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,eAAe,EAAE,CAAC;YACtB,OAAO,MAAM,CAAA;QACd,CAAC;QAED,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAA;IAC5E,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAe;QAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAM;QACP,CAAC;QACD,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;YAC7C,MAAM,EAAE;gBACP,IAAI,EAAE;oBACL;wBACC,GAAG,EAAE,UAAU;wBACf,KAAK,EAAE;4BACN,GAAG,EAAE,KAAK;yBACV;qBACD;iBACD;aACD;SACD,CAAC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACV,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IACxD,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC7B,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,EAAE;YACvD,OAAO,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,UAAU;gBACrB,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,IAAI;aACb;YACD,WAAW,EAAE;gBACZ,CAAC,EAAE,EAAE;gBACL,YAAY,EAAE,GAAG;gBACjB,OAAO,EAAE,IAAI;aACb;SACD,CAAC,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC9B,IAAI,CAAC;YACJ,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC5D,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,IAAI,CAAA;QACZ,CAAC;IACF,CAAC;IAEO,iBAAiB,CAAC,cAAyC;QAClE,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAA;QAC5D,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO,aAAa,CAAA;QACrB,CAAC;QACD,IACC,aAAa;YACb,OAAO,aAAa,KAAK,QAAQ;YACjC,MAAM,IAAI,aAAa;YACvB,OAAO,aAAa,CAAC,IAAI,KAAK,QAAQ,EACrC,CAAC;YACF,OAAO,aAAa,CAAC,IAAI,CAAA;QAC1B,CAAC;QACD,OAAO,CAAC,CAAA;IACT,CAAC;CACD"}
@@ -0,0 +1,21 @@
1
+ export interface VectorPayload extends Record<string, unknown> {
2
+ filePath: string;
3
+ startLine: number;
4
+ endLine: number;
5
+ content: string;
6
+ fileHash: string;
7
+ segmentHash: string;
8
+ }
9
+ export interface VectorPoint {
10
+ id: string;
11
+ vector: number[];
12
+ payload: VectorPayload;
13
+ }
14
+ export interface VectorSearchResult {
15
+ filePath: string;
16
+ startLine: number;
17
+ endLine: number;
18
+ snippet: string;
19
+ score: number;
20
+ payload: VectorPayload;
21
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/vector-store/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@hayhandsome/code-index-mcp",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for code indexing and semantic search",
5
+ "type": "module",
6
+ "bin": {
7
+ "code-index-mcp": "dist/cli.js"
8
+ },
9
+ "main": "dist/index.js",
10
+ "types": "dist/index.d.ts",
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc -p tsconfig.json",
16
+ "prepublishOnly": "npm run build",
17
+ "start": "node dist/cli.js",
18
+ "test": "npm run build && node --test",
19
+ "smoke": "npm run build && node scripts/smoke-test.js"
20
+ },
21
+ "engines": {
22
+ "node": ">=18"
23
+ },
24
+ "dependencies": {
25
+ "@modelcontextprotocol/sdk": "^1.0.0",
26
+ "@qdrant/js-client-rest": "^1.9.0",
27
+ "ignore": "^5.3.2"
28
+ },
29
+ "devDependencies": {
30
+ "@types/node": "^20.11.30",
31
+ "typescript": "^5.6.3"
32
+ }
33
+ }