src-mcp 1.0.1

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 (395) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +721 -0
  3. package/assets/languages.json +219 -0
  4. package/assets/queries/_javascript/highlights.scm +36 -0
  5. package/assets/queries/_javascript/locals.scm +14 -0
  6. package/assets/queries/_javascript/tags.scm +88 -0
  7. package/assets/queries/_jsx/highlights.scm +43 -0
  8. package/assets/queries/_jsx/indents.scm +6 -0
  9. package/assets/queries/_jsx/textobjects.scm +7 -0
  10. package/assets/queries/_typescript/highlights.scm +148 -0
  11. package/assets/queries/_typescript/indents.scm +5 -0
  12. package/assets/queries/_typescript/locals.scm +34 -0
  13. package/assets/queries/_typescript/tags.scm +23 -0
  14. package/assets/queries/_typescript/textobjects.scm +12 -0
  15. package/assets/queries/c/highlights.scm +167 -0
  16. package/assets/queries/c/indents.scm +51 -0
  17. package/assets/queries/c/injections.scm +2 -0
  18. package/assets/queries/c/locals.scm +38 -0
  19. package/assets/queries/c/rainbows.scm +29 -0
  20. package/assets/queries/c/tags.scm +9 -0
  21. package/assets/queries/c/textobjects.scm +27 -0
  22. package/assets/queries/c_sharp/highlights.scm +208 -0
  23. package/assets/queries/c_sharp/injections.scm +2 -0
  24. package/assets/queries/c_sharp/tags.scm +21 -0
  25. package/assets/queries/c_sharp/textobjects.scm +20 -0
  26. package/assets/queries/cpp/highlights.scm +177 -0
  27. package/assets/queries/cpp/indents.scm +3 -0
  28. package/assets/queries/cpp/injections.scm +4 -0
  29. package/assets/queries/cpp/rainbows.scm +49 -0
  30. package/assets/queries/cpp/tags.scm +12 -0
  31. package/assets/queries/cpp/textobjects.scm +7 -0
  32. package/assets/queries/ecma/highlights.scm +288 -0
  33. package/assets/queries/ecma/indents.scm +28 -0
  34. package/assets/queries/ecma/injections.scm +100 -0
  35. package/assets/queries/ecma/locals.scm +26 -0
  36. package/assets/queries/ecma/rainbows.scm +28 -0
  37. package/assets/queries/ecma/textobjects.scm +45 -0
  38. package/assets/queries/go/highlights.scm +236 -0
  39. package/assets/queries/go/indents.scm +40 -0
  40. package/assets/queries/go/injections.scm +92 -0
  41. package/assets/queries/go/locals.scm +25 -0
  42. package/assets/queries/go/rainbows.scm +33 -0
  43. package/assets/queries/go/tags.scm +30 -0
  44. package/assets/queries/go/textobjects.scm +33 -0
  45. package/assets/queries/html/highlights.scm +47 -0
  46. package/assets/queries/html/injections.scm +10 -0
  47. package/assets/queries/html/rainbows.scm +13 -0
  48. package/assets/queries/html/textobjects.scm +9 -0
  49. package/assets/queries/java/highlights.scm +227 -0
  50. package/assets/queries/java/indents.scm +35 -0
  51. package/assets/queries/java/injections.scm +2 -0
  52. package/assets/queries/java/rainbows.scm +35 -0
  53. package/assets/queries/java/tags.scm +27 -0
  54. package/assets/queries/java/textobjects.scm +44 -0
  55. package/assets/queries/javascript/highlights.scm +3 -0
  56. package/assets/queries/javascript/indents.scm +3 -0
  57. package/assets/queries/javascript/injections.scm +3 -0
  58. package/assets/queries/javascript/locals.scm +3 -0
  59. package/assets/queries/javascript/rainbows.scm +1 -0
  60. package/assets/queries/javascript/tags.scm +3 -0
  61. package/assets/queries/javascript/textobjects.scm +3 -0
  62. package/assets/queries/jsx/highlights.scm +3 -0
  63. package/assets/queries/jsx/indents.scm +3 -0
  64. package/assets/queries/jsx/injections.scm +3 -0
  65. package/assets/queries/jsx/locals.scm +3 -0
  66. package/assets/queries/jsx/rainbows.scm +9 -0
  67. package/assets/queries/jsx/tags.scm +3 -0
  68. package/assets/queries/jsx/textobjects.scm +3 -0
  69. package/assets/queries/kotlin/folds.scm +17 -0
  70. package/assets/queries/kotlin/highlights.scm +330 -0
  71. package/assets/queries/kotlin/indents.scm +44 -0
  72. package/assets/queries/kotlin/injections.scm +42 -0
  73. package/assets/queries/kotlin/locals.scm +23 -0
  74. package/assets/queries/kotlin/tags.scm +12 -0
  75. package/assets/queries/kotlin/textobjects.scm +45 -0
  76. package/assets/queries/ocaml/highlights.scm +151 -0
  77. package/assets/queries/ocaml/indents.scm +12 -0
  78. package/assets/queries/ocaml/injections.scm +2 -0
  79. package/assets/queries/ocaml/locals.scm +24 -0
  80. package/assets/queries/php/highlights.scm +319 -0
  81. package/assets/queries/php/indents.scm +18 -0
  82. package/assets/queries/php/injections.scm +25 -0
  83. package/assets/queries/php/rainbows.scm +15 -0
  84. package/assets/queries/php/tags.scm +26 -0
  85. package/assets/queries/php/textobjects.scm +52 -0
  86. package/assets/queries/python/highlights.scm +308 -0
  87. package/assets/queries/python/indents.scm +84 -0
  88. package/assets/queries/python/injections.scm +14 -0
  89. package/assets/queries/python/locals.scm +50 -0
  90. package/assets/queries/python/rainbows.scm +30 -0
  91. package/assets/queries/python/tags.scm +14 -0
  92. package/assets/queries/python/textobjects.scm +35 -0
  93. package/assets/queries/ruby/highlights.scm +191 -0
  94. package/assets/queries/ruby/indents.scm +24 -0
  95. package/assets/queries/ruby/injections.scm +35 -0
  96. package/assets/queries/ruby/locals.scm +20 -0
  97. package/assets/queries/ruby/rainbows.scm +28 -0
  98. package/assets/queries/ruby/tags.scm +64 -0
  99. package/assets/queries/ruby/textobjects.scm +56 -0
  100. package/assets/queries/rust/highlights.scm +514 -0
  101. package/assets/queries/rust/indents.scm +148 -0
  102. package/assets/queries/rust/injections.scm +170 -0
  103. package/assets/queries/rust/locals.scm +28 -0
  104. package/assets/queries/rust/rainbows.scm +60 -0
  105. package/assets/queries/rust/tags.scm +26 -0
  106. package/assets/queries/rust/textobjects.scm +85 -0
  107. package/assets/queries/scala/highlights.scm +267 -0
  108. package/assets/queries/scala/indents.scm +22 -0
  109. package/assets/queries/scala/injections.scm +16 -0
  110. package/assets/queries/scala/locals.scm +14 -0
  111. package/assets/queries/scala/textobjects.scm +65 -0
  112. package/assets/queries/svelte/folds.scm +13 -0
  113. package/assets/queries/svelte/highlights.scm +38 -0
  114. package/assets/queries/svelte/indents.scm +24 -0
  115. package/assets/queries/svelte/injections.scm +46 -0
  116. package/assets/queries/svelte/locals.scm +1 -0
  117. package/assets/queries/swift/highlights.scm +200 -0
  118. package/assets/queries/swift/indents.scm +100 -0
  119. package/assets/queries/swift/injections.scm +10 -0
  120. package/assets/queries/swift/locals.scm +19 -0
  121. package/assets/queries/swift/rainbows.scm +60 -0
  122. package/assets/queries/swift/textobjects.scm +23 -0
  123. package/assets/queries/tsx/highlights.scm +3 -0
  124. package/assets/queries/tsx/indents.scm +3 -0
  125. package/assets/queries/tsx/injections.scm +3 -0
  126. package/assets/queries/tsx/locals.scm +3 -0
  127. package/assets/queries/tsx/rainbows.scm +2 -0
  128. package/assets/queries/tsx/tags.scm +3 -0
  129. package/assets/queries/tsx/textobjects.scm +3 -0
  130. package/assets/queries/typescript/highlights.scm +3 -0
  131. package/assets/queries/typescript/indents.scm +3 -0
  132. package/assets/queries/typescript/injections.scm +3 -0
  133. package/assets/queries/typescript/locals.scm +3 -0
  134. package/assets/queries/typescript/rainbows.scm +19 -0
  135. package/assets/queries/typescript/tags.scm +3 -0
  136. package/assets/queries/typescript/textobjects.scm +3 -0
  137. package/assets/wasm/tree-sitter-c.wasm +0 -0
  138. package/assets/wasm/tree-sitter-c_sharp.wasm +0 -0
  139. package/assets/wasm/tree-sitter-cpp.wasm +0 -0
  140. package/assets/wasm/tree-sitter-go.wasm +0 -0
  141. package/assets/wasm/tree-sitter-html.wasm +0 -0
  142. package/assets/wasm/tree-sitter-java.wasm +0 -0
  143. package/assets/wasm/tree-sitter-javascript.wasm +0 -0
  144. package/assets/wasm/tree-sitter-kotlin.wasm +0 -0
  145. package/assets/wasm/tree-sitter-ocaml.wasm +0 -0
  146. package/assets/wasm/tree-sitter-php.wasm +0 -0
  147. package/assets/wasm/tree-sitter-python.wasm +0 -0
  148. package/assets/wasm/tree-sitter-ruby.wasm +0 -0
  149. package/assets/wasm/tree-sitter-rust.wasm +0 -0
  150. package/assets/wasm/tree-sitter-scala.wasm +0 -0
  151. package/assets/wasm/tree-sitter-svelte.wasm +0 -0
  152. package/assets/wasm/tree-sitter-swift.wasm +0 -0
  153. package/assets/wasm/tree-sitter-tsx.wasm +0 -0
  154. package/assets/wasm/tree-sitter-typescript.wasm +0 -0
  155. package/dist/bin.d.ts +3 -0
  156. package/dist/bin.d.ts.map +1 -0
  157. package/dist/bin.js +4 -0
  158. package/dist/bin.js.map +1 -0
  159. package/dist/cli/adapter.d.ts +7 -0
  160. package/dist/cli/adapter.d.ts.map +1 -0
  161. package/dist/cli/adapter.js +39 -0
  162. package/dist/cli/adapter.js.map +1 -0
  163. package/dist/cli/commands/index.d.ts +24 -0
  164. package/dist/cli/commands/index.d.ts.map +1 -0
  165. package/dist/cli/commands/index.js +13 -0
  166. package/dist/cli/commands/index.js.map +1 -0
  167. package/dist/cli/commands/serve.command.d.ts +21 -0
  168. package/dist/cli/commands/serve.command.d.ts.map +1 -0
  169. package/dist/cli/commands/serve.command.js +62 -0
  170. package/dist/cli/commands/serve.command.js.map +1 -0
  171. package/dist/cli/commands/version.command.d.ts +2 -0
  172. package/dist/cli/commands/version.command.d.ts.map +1 -0
  173. package/dist/cli/commands/version.command.js +12 -0
  174. package/dist/cli/commands/version.command.js.map +1 -0
  175. package/dist/cli/index.d.ts +2 -0
  176. package/dist/cli/index.d.ts.map +1 -0
  177. package/dist/cli/index.js +15 -0
  178. package/dist/cli/index.js.map +1 -0
  179. package/dist/cli/parser.d.ts +7 -0
  180. package/dist/cli/parser.d.ts.map +1 -0
  181. package/dist/cli/parser.js +99 -0
  182. package/dist/cli/parser.js.map +1 -0
  183. package/dist/config/index.d.ts +24 -0
  184. package/dist/config/index.d.ts.map +1 -0
  185. package/dist/config/index.js +38 -0
  186. package/dist/config/index.js.map +1 -0
  187. package/dist/core/ast/index.d.ts +82 -0
  188. package/dist/core/ast/index.d.ts.map +1 -0
  189. package/dist/core/ast/index.js +204 -0
  190. package/dist/core/ast/index.js.map +1 -0
  191. package/dist/core/ast/types.d.ts +152 -0
  192. package/dist/core/ast/types.d.ts.map +1 -0
  193. package/dist/core/ast/types.js +5 -0
  194. package/dist/core/ast/types.js.map +1 -0
  195. package/dist/core/constants.d.ts +17 -0
  196. package/dist/core/constants.d.ts.map +1 -0
  197. package/dist/core/constants.js +49 -0
  198. package/dist/core/constants.js.map +1 -0
  199. package/dist/core/embeddings/callgraph.d.ts +98 -0
  200. package/dist/core/embeddings/callgraph.d.ts.map +1 -0
  201. package/dist/core/embeddings/callgraph.js +415 -0
  202. package/dist/core/embeddings/callgraph.js.map +1 -0
  203. package/dist/core/embeddings/chunker.d.ts +37 -0
  204. package/dist/core/embeddings/chunker.d.ts.map +1 -0
  205. package/dist/core/embeddings/chunker.js +298 -0
  206. package/dist/core/embeddings/chunker.js.map +1 -0
  207. package/dist/core/embeddings/client.d.ts +30 -0
  208. package/dist/core/embeddings/client.d.ts.map +1 -0
  209. package/dist/core/embeddings/client.js +65 -0
  210. package/dist/core/embeddings/client.js.map +1 -0
  211. package/dist/core/embeddings/crossfile.d.ts +58 -0
  212. package/dist/core/embeddings/crossfile.d.ts.map +1 -0
  213. package/dist/core/embeddings/crossfile.js +202 -0
  214. package/dist/core/embeddings/crossfile.js.map +1 -0
  215. package/dist/core/embeddings/enricher.d.ts +53 -0
  216. package/dist/core/embeddings/enricher.d.ts.map +1 -0
  217. package/dist/core/embeddings/enricher.js +308 -0
  218. package/dist/core/embeddings/enricher.js.map +1 -0
  219. package/dist/core/embeddings/index.d.ts +13 -0
  220. package/dist/core/embeddings/index.d.ts.map +1 -0
  221. package/dist/core/embeddings/index.js +20 -0
  222. package/dist/core/embeddings/index.js.map +1 -0
  223. package/dist/core/embeddings/reranker.d.ts +41 -0
  224. package/dist/core/embeddings/reranker.d.ts.map +1 -0
  225. package/dist/core/embeddings/reranker.js +117 -0
  226. package/dist/core/embeddings/reranker.js.map +1 -0
  227. package/dist/core/embeddings/store.d.ts +93 -0
  228. package/dist/core/embeddings/store.d.ts.map +1 -0
  229. package/dist/core/embeddings/store.js +304 -0
  230. package/dist/core/embeddings/store.js.map +1 -0
  231. package/dist/core/embeddings/types.d.ts +77 -0
  232. package/dist/core/embeddings/types.d.ts.map +1 -0
  233. package/dist/core/embeddings/types.js +5 -0
  234. package/dist/core/embeddings/types.js.map +1 -0
  235. package/dist/core/embeddings/watcher.d.ts +130 -0
  236. package/dist/core/embeddings/watcher.d.ts.map +1 -0
  237. package/dist/core/embeddings/watcher.js +448 -0
  238. package/dist/core/embeddings/watcher.js.map +1 -0
  239. package/dist/core/fallback/index.d.ts +26 -0
  240. package/dist/core/fallback/index.d.ts.map +1 -0
  241. package/dist/core/fallback/index.js +76 -0
  242. package/dist/core/fallback/index.js.map +1 -0
  243. package/dist/core/parser/index.d.ts +64 -0
  244. package/dist/core/parser/index.d.ts.map +1 -0
  245. package/dist/core/parser/index.js +205 -0
  246. package/dist/core/parser/index.js.map +1 -0
  247. package/dist/core/parser/languages.d.ts +26 -0
  248. package/dist/core/parser/languages.d.ts.map +1 -0
  249. package/dist/core/parser/languages.js +101 -0
  250. package/dist/core/parser/languages.js.map +1 -0
  251. package/dist/core/queries/helpers.d.ts +72 -0
  252. package/dist/core/queries/helpers.d.ts.map +1 -0
  253. package/dist/core/queries/helpers.js +101 -0
  254. package/dist/core/queries/helpers.js.map +1 -0
  255. package/dist/core/queries/index.d.ts +144 -0
  256. package/dist/core/queries/index.d.ts.map +1 -0
  257. package/dist/core/queries/index.js +396 -0
  258. package/dist/core/queries/index.js.map +1 -0
  259. package/dist/core/queries/loader.d.ts +46 -0
  260. package/dist/core/queries/loader.d.ts.map +1 -0
  261. package/dist/core/queries/loader.js +216 -0
  262. package/dist/core/queries/loader.js.map +1 -0
  263. package/dist/core/queries/patterns.d.ts +10 -0
  264. package/dist/core/queries/patterns.d.ts.map +1 -0
  265. package/dist/core/queries/patterns.js +112 -0
  266. package/dist/core/queries/patterns.js.map +1 -0
  267. package/dist/core/symbols/index.d.ts +70 -0
  268. package/dist/core/symbols/index.d.ts.map +1 -0
  269. package/dist/core/symbols/index.js +359 -0
  270. package/dist/core/symbols/index.js.map +1 -0
  271. package/dist/core/unified/index.d.ts +118 -0
  272. package/dist/core/unified/index.d.ts.map +1 -0
  273. package/dist/core/unified/index.js +428 -0
  274. package/dist/core/unified/index.js.map +1 -0
  275. package/dist/core/utils/assets.d.ts +34 -0
  276. package/dist/core/utils/assets.d.ts.map +1 -0
  277. package/dist/core/utils/assets.js +85 -0
  278. package/dist/core/utils/assets.js.map +1 -0
  279. package/dist/core/utils/cache.d.ts +43 -0
  280. package/dist/core/utils/cache.d.ts.map +1 -0
  281. package/dist/core/utils/cache.js +60 -0
  282. package/dist/core/utils/cache.js.map +1 -0
  283. package/dist/core/utils/index.d.ts +7 -0
  284. package/dist/core/utils/index.d.ts.map +1 -0
  285. package/dist/core/utils/index.js +10 -0
  286. package/dist/core/utils/index.js.map +1 -0
  287. package/dist/core/utils/tsconfig.d.ts +34 -0
  288. package/dist/core/utils/tsconfig.d.ts.map +1 -0
  289. package/dist/core/utils/tsconfig.js +173 -0
  290. package/dist/core/utils/tsconfig.js.map +1 -0
  291. package/dist/features/analyze-file/index.d.ts +15 -0
  292. package/dist/features/analyze-file/index.d.ts.map +1 -0
  293. package/dist/features/analyze-file/index.js +164 -0
  294. package/dist/features/analyze-file/index.js.map +1 -0
  295. package/dist/features/get-call-graph/index.d.ts +24 -0
  296. package/dist/features/get-call-graph/index.d.ts.map +1 -0
  297. package/dist/features/get-call-graph/index.js +246 -0
  298. package/dist/features/get-call-graph/index.js.map +1 -0
  299. package/dist/features/get-index-status/index.d.ts +20 -0
  300. package/dist/features/get-index-status/index.d.ts.map +1 -0
  301. package/dist/features/get-index-status/index.js +90 -0
  302. package/dist/features/get-index-status/index.js.map +1 -0
  303. package/dist/features/index-codebase/index.d.ts +24 -0
  304. package/dist/features/index-codebase/index.d.ts.map +1 -0
  305. package/dist/features/index-codebase/index.js +283 -0
  306. package/dist/features/index-codebase/index.js.map +1 -0
  307. package/dist/features/index.d.ts +15 -0
  308. package/dist/features/index.d.ts.map +1 -0
  309. package/dist/features/index.js +28 -0
  310. package/dist/features/index.js.map +1 -0
  311. package/dist/features/info/index.d.ts +19 -0
  312. package/dist/features/info/index.d.ts.map +1 -0
  313. package/dist/features/info/index.js +41 -0
  314. package/dist/features/info/index.js.map +1 -0
  315. package/dist/features/list-symbols/index.d.ts +22 -0
  316. package/dist/features/list-symbols/index.d.ts.map +1 -0
  317. package/dist/features/list-symbols/index.js +74 -0
  318. package/dist/features/list-symbols/index.js.map +1 -0
  319. package/dist/features/parse-ast/index.d.ts +12 -0
  320. package/dist/features/parse-ast/index.d.ts.map +1 -0
  321. package/dist/features/parse-ast/index.js +71 -0
  322. package/dist/features/parse-ast/index.js.map +1 -0
  323. package/dist/features/query-code/index.d.ts +23 -0
  324. package/dist/features/query-code/index.d.ts.map +1 -0
  325. package/dist/features/query-code/index.js +96 -0
  326. package/dist/features/query-code/index.js.map +1 -0
  327. package/dist/features/search-code/index.d.ts +39 -0
  328. package/dist/features/search-code/index.d.ts.map +1 -0
  329. package/dist/features/search-code/index.js +258 -0
  330. package/dist/features/search-code/index.js.map +1 -0
  331. package/dist/features/types.d.ts +14 -0
  332. package/dist/features/types.d.ts.map +1 -0
  333. package/dist/features/types.js +2 -0
  334. package/dist/features/types.js.map +1 -0
  335. package/dist/features/update-index/index.d.ts +24 -0
  336. package/dist/features/update-index/index.d.ts.map +1 -0
  337. package/dist/features/update-index/index.js +358 -0
  338. package/dist/features/update-index/index.js.map +1 -0
  339. package/dist/features/utils/content.d.ts +30 -0
  340. package/dist/features/utils/content.d.ts.map +1 -0
  341. package/dist/features/utils/content.js +49 -0
  342. package/dist/features/utils/content.js.map +1 -0
  343. package/dist/features/utils/index.d.ts +6 -0
  344. package/dist/features/utils/index.d.ts.map +1 -0
  345. package/dist/features/utils/index.js +8 -0
  346. package/dist/features/utils/index.js.map +1 -0
  347. package/dist/features/utils/result.d.ts +37 -0
  348. package/dist/features/utils/result.d.ts.map +1 -0
  349. package/dist/features/utils/result.js +53 -0
  350. package/dist/features/utils/result.js.map +1 -0
  351. package/dist/index.d.ts +2 -0
  352. package/dist/index.d.ts.map +1 -0
  353. package/dist/index.js +4 -0
  354. package/dist/index.js.map +1 -0
  355. package/dist/prompts/index.d.ts +9 -0
  356. package/dist/prompts/index.d.ts.map +1 -0
  357. package/dist/prompts/index.js +188 -0
  358. package/dist/prompts/index.js.map +1 -0
  359. package/dist/resources/index.d.ts +3 -0
  360. package/dist/resources/index.d.ts.map +1 -0
  361. package/dist/resources/index.js +17 -0
  362. package/dist/resources/index.js.map +1 -0
  363. package/dist/server.d.ts +4 -0
  364. package/dist/server.d.ts.map +1 -0
  365. package/dist/server.js +24 -0
  366. package/dist/server.js.map +1 -0
  367. package/dist/tools/adapter.d.ts +4 -0
  368. package/dist/tools/adapter.d.ts.map +1 -0
  369. package/dist/tools/adapter.js +28 -0
  370. package/dist/tools/adapter.js.map +1 -0
  371. package/dist/tools/index.d.ts +5 -0
  372. package/dist/tools/index.d.ts.map +1 -0
  373. package/dist/tools/index.js +9 -0
  374. package/dist/tools/index.js.map +1 -0
  375. package/dist/types/index.d.ts +20 -0
  376. package/dist/types/index.d.ts.map +1 -0
  377. package/dist/types/index.js +2 -0
  378. package/dist/types/index.js.map +1 -0
  379. package/dist/utils/colors.d.ts +24 -0
  380. package/dist/utils/colors.d.ts.map +1 -0
  381. package/dist/utils/colors.js +30 -0
  382. package/dist/utils/colors.js.map +1 -0
  383. package/dist/utils/index.d.ts +4 -0
  384. package/dist/utils/index.d.ts.map +1 -0
  385. package/dist/utils/index.js +4 -0
  386. package/dist/utils/index.js.map +1 -0
  387. package/dist/utils/logger.d.ts +8 -0
  388. package/dist/utils/logger.d.ts.map +1 -0
  389. package/dist/utils/logger.js +57 -0
  390. package/dist/utils/logger.js.map +1 -0
  391. package/dist/utils/spinner.d.ts +11 -0
  392. package/dist/utils/spinner.d.ts.map +1 -0
  393. package/dist/utils/spinner.js +36 -0
  394. package/dist/utils/spinner.js.map +1 -0
  395. package/package.json +110 -0
package/README.md ADDED
@@ -0,0 +1,721 @@
1
+ # SRC (Structured Repo Context)
2
+
3
+ > **Transform your codebase into AI-ready context** — MCP server + CLI for semantic code search that makes your code truly understandable for AI assistants
4
+
5
+ **SRC is both:**
6
+ - 🔌 **An MCP Server** — Integrates with Claude Desktop, Cursor, and any MCP-compatible AI assistant
7
+ - 💻 **A Standalone CLI** — Use directly from your terminal for indexing and searching
8
+
9
+ [![CI](https://github.com/kvnpetit/structured-repo-context-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/kvnpetit/structured-repo-context-mcp/actions/workflows/ci.yml)
10
+ [![codecov](https://codecov.io/gh/kvnpetit/structured-repo-context-mcp/branch/main/graph/badge.svg)](https://codecov.io/gh/kvnpetit/structured-repo-context-mcp)
11
+ [![npm version](https://img.shields.io/npm/v/src-mcp.svg)](https://www.npmjs.com/package/src-mcp)
12
+ [![npm downloads](https://img.shields.io/npm/dm/src-mcp.svg)](https://www.npmjs.com/package/src-mcp)
13
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
14
+ [![MCP](https://img.shields.io/badge/MCP-Compatible-blue.svg)](https://modelcontextprotocol.io)
15
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.9-blue.svg)](https://www.typescriptlang.org/)
16
+ [![Ollama](https://img.shields.io/badge/Ollama-Required-orange.svg)](https://ollama.com)
17
+
18
+ ---
19
+
20
+ ## Table of Contents
21
+
22
+ 1. [Overview](#overview)
23
+ 2. [Quick Start](#quick-start)
24
+ 3. [Installation](#installation)
25
+ 4. [MCP Tools Reference](#mcp-tools-reference)
26
+ 5. [CLI Reference](#cli-reference)
27
+ 6. [Configuration](#configuration)
28
+ 7. [Supported Languages](#supported-languages)
29
+ 8. [How It Works](#how-it-works)
30
+ 9. [Comparison](#comparison)
31
+ 10. [Troubleshooting](#troubleshooting)
32
+ 11. [Links](#links)
33
+
34
+ ---
35
+
36
+ ## Overview
37
+
38
+ ### The Problem
39
+
40
+ AI assistants struggle to understand your entire codebase:
41
+
42
+ - They only see small snippets of code at a time
43
+ - Manual copy-pasting of context is tedious and error-prone
44
+ - Keyword search misses semantic relationships between code
45
+ - Code changes get lost in conversation history
46
+
47
+ ### The Solution
48
+
49
+ SRC indexes your codebase into semantic, searchable chunks that LLMs actually understand:
50
+
51
+ | Feature | Description |
52
+ |---------|-------------|
53
+ | **Hybrid Search** | Vector + BM25 + RRF fusion for optimal results |
54
+ | **LLM Re-ranking** | AI-powered relevance optimization |
55
+ | **Call Graph** | Shows who calls what and what calls who |
56
+ | **Cross-file Context** | Resolves imports and path aliases automatically |
57
+ | **Incremental Updates** | SHA-256 hash detection for fast updates |
58
+ | **50+ Languages** | 18 with full AST support via Tree-sitter |
59
+
60
+ ### Use Cases
61
+
62
+ | Scenario | Example Query |
63
+ |----------|---------------|
64
+ | **Code Review** | "Show me all error handling in the payment module" |
65
+ | **Debugging** | "Find where user sessions are created" |
66
+ | **Documentation** | "Explain the authentication flow" |
67
+ | **Refactoring** | "List all deprecated API usages" |
68
+ | **Onboarding** | "How does the routing system work?" |
69
+ | **Security Audit** | "Find all database query locations" |
70
+
71
+ ---
72
+
73
+ ## Quick Start
74
+
75
+ ### 1. Install Ollama
76
+
77
+ SRC requires [Ollama](https://ollama.com) for embeddings and re-ranking:
78
+
79
+ ```bash
80
+ # Install from https://ollama.com, then:
81
+ ollama pull nomic-embed-text
82
+ ollama pull qwen2.5:1.5b
83
+ ```
84
+
85
+ ### 2. Install SRC
86
+
87
+ **Global installation:**
88
+ ```bash
89
+ npm install -g src-mcp
90
+ ```
91
+
92
+ **Or use npx:**
93
+ ```bash
94
+ npx -y src-mcp serve
95
+ ```
96
+
97
+ ### 3. Use as MCP Server (with AI Assistants)
98
+
99
+ Add to your MCP client configuration (e.g., Claude Desktop):
100
+
101
+ **With global installation:**
102
+ ```json
103
+ {
104
+ "mcpServers": {
105
+ "src-mcp": {
106
+ "command": "src-mcp",
107
+ "args": ["serve"]
108
+ }
109
+ }
110
+ }
111
+ ```
112
+
113
+ **With npx:**
114
+ ```json
115
+ {
116
+ "mcpServers": {
117
+ "src-mcp": {
118
+ "command": "npx",
119
+ "args": ["-y", "src-mcp", "serve"]
120
+ }
121
+ }
122
+ }
123
+ ```
124
+
125
+ The server automatically indexes the current directory if no index exists, and watches for file changes.
126
+
127
+ Then in your AI assistant:
128
+ ```
129
+ "Search for authentication logic"
130
+ "Find error handling code with limit 20"
131
+ "Search for UserService in fts mode"
132
+ ```
133
+
134
+ ### 4. Use as CLI (Standalone)
135
+
136
+ ```bash
137
+ # Start server (auto-indexes if needed)
138
+ src-mcp serve
139
+
140
+ # Search for code
141
+ src-mcp search_code --query "authentication"
142
+ src-mcp search_code --query "error handling" --limit 20
143
+ src-mcp search_code --query "UserService" --mode fts
144
+
145
+ # Check index status
146
+ src-mcp get_index_status
147
+ ```
148
+
149
+ ### Key Arguments
150
+
151
+ | Tool | Argument | Default | Description |
152
+ |------|----------|---------|-------------|
153
+ | `search_code` | `--limit` | 10 | Max results |
154
+ | `search_code` | `--mode` | hybrid | `hybrid` / `vector` / `fts` |
155
+ | `search_code` | `--rerank` | true | LLM re-ranking |
156
+ | `index_codebase` | `--concurrency` | 4 | Parallel workers |
157
+ | `index_codebase` | `--force` | false | Re-index if exists |
158
+
159
+ ---
160
+
161
+ ## Installation
162
+
163
+ ### Global Installation
164
+
165
+ ```bash
166
+ npm install -g src-mcp
167
+ ```
168
+
169
+ Then use directly:
170
+
171
+ ```bash
172
+ src-mcp serve
173
+ src-mcp search_code --query "authentication"
174
+ src-mcp help
175
+ ```
176
+
177
+ ### npx (No Installation)
178
+
179
+ ```bash
180
+ npx -y src-mcp serve
181
+ npx -y src-mcp search_code --query "authentication"
182
+ ```
183
+
184
+ ### Local Development
185
+
186
+ ```bash
187
+ git clone https://github.com/kvnpetit/structured-repo-context-mcp.git
188
+ cd structured-repo-context-mcp
189
+ npm install
190
+ npm run dev
191
+ ```
192
+
193
+ ---
194
+
195
+ ## MCP Tools Reference
196
+
197
+ SRC exposes 5 MCP tools that AI assistants can call:
198
+
199
+ ### index_codebase
200
+
201
+ Index a directory with semantic chunking, AST enrichment, and embeddings.
202
+
203
+ | Parameter | Type | Required | Default | Description |
204
+ |-----------|------|----------|---------|-------------|
205
+ | `directory` | string | No | `.` | Path to directory to index |
206
+ | `force` | boolean | No | `false` | Force re-indexing if index exists |
207
+ | `exclude` | string[] | No | `[]` | Additional glob patterns to exclude |
208
+ | `concurrency` | number | No | `4` | Parallel file processing workers |
209
+
210
+ **Example:**
211
+ ```
212
+ "Index the project at /home/user/myapp with concurrency 8"
213
+ ```
214
+
215
+ **Returns:**
216
+ ```json
217
+ {
218
+ "filesIndexed": 150,
219
+ "chunksCreated": 892,
220
+ "languages": { "typescript": 500, "javascript": 200, "json": 192 }
221
+ }
222
+ ```
223
+
224
+ ---
225
+
226
+ ### search_code
227
+
228
+ Hybrid search with vector similarity, BM25 keyword matching, and RRF fusion.
229
+
230
+ | Parameter | Type | Required | Default | Description |
231
+ |-----------|------|----------|---------|-------------|
232
+ | `query` | string | **Yes** | — | Natural language search query |
233
+ | `directory` | string | No | `.` | Path to indexed directory |
234
+ | `limit` | number | No | `10` | Maximum results to return |
235
+ | `threshold` | number | No | — | Distance threshold (0-2, vector mode only) |
236
+ | `mode` | enum | No | `hybrid` | Search mode: `hybrid`, `vector`, or `fts` |
237
+ | `rerank` | boolean | No | `true` | Enable LLM re-ranking |
238
+ | `includeCallContext` | boolean | No | `true` | Include caller/callee information |
239
+
240
+ **Search Modes:**
241
+
242
+ | Mode | Description | Best For |
243
+ |------|-------------|----------|
244
+ | `hybrid` | Vector + BM25 + RRF fusion | General queries (default) |
245
+ | `vector` | Semantic similarity only | Conceptual searches |
246
+ | `fts` | Full-text keyword only | Exact identifiers |
247
+
248
+ **Example:**
249
+ ```
250
+ "Search for 'user authentication' with limit 20"
251
+ ```
252
+
253
+ **Returns:**
254
+ ```json
255
+ {
256
+ "results": [
257
+ {
258
+ "content": "export async function authenticateUser(credentials)...",
259
+ "filePath": "src/auth/login.ts",
260
+ "startLine": 45,
261
+ "endLine": 78,
262
+ "symbolName": "authenticateUser",
263
+ "symbolType": "function",
264
+ "score": 0.92,
265
+ "callers": [{ "name": "handleLogin", "filePath": "src/routes/auth.ts", "line": 23 }],
266
+ "callees": [{ "name": "validatePassword", "filePath": "src/auth/crypto.ts", "line": 12 }]
267
+ }
268
+ ]
269
+ }
270
+ ```
271
+
272
+ ---
273
+
274
+ ### update_index
275
+
276
+ Incrementally update the index by detecting changed files via SHA-256 hash comparison.
277
+
278
+ | Parameter | Type | Required | Default | Description |
279
+ |-----------|------|----------|---------|-------------|
280
+ | `directory` | string | No | `.` | Path to indexed directory |
281
+ | `dryRun` | boolean | No | `false` | Preview changes without updating |
282
+ | `force` | boolean | No | `false` | Force re-index all files |
283
+
284
+ **Example:**
285
+ ```
286
+ "Update the index with dry run to see what changed"
287
+ ```
288
+
289
+ **Returns:**
290
+ ```json
291
+ {
292
+ "added": ["src/new-file.ts"],
293
+ "modified": ["src/auth/login.ts"],
294
+ "deleted": ["src/old-file.ts"],
295
+ "unchanged": 148
296
+ }
297
+ ```
298
+
299
+ ---
300
+
301
+ ### get_index_status
302
+
303
+ Get status of the embedding index for a directory.
304
+
305
+ | Parameter | Type | Required | Default | Description |
306
+ |-----------|------|----------|---------|-------------|
307
+ | `directory` | string | No | `.` | Path to directory |
308
+
309
+ **Example:**
310
+ ```
311
+ "Get the index status for current directory"
312
+ ```
313
+
314
+ **Returns:**
315
+ ```json
316
+ {
317
+ "exists": true,
318
+ "indexPath": "/home/user/myapp/.src-index",
319
+ "totalFiles": 150,
320
+ "totalChunks": 892,
321
+ "languages": { "typescript": 500, "javascript": 200 }
322
+ }
323
+ ```
324
+
325
+ ---
326
+
327
+ ### get_server_info
328
+
329
+ Get server version, capabilities, and configuration.
330
+
331
+ | Parameter | Type | Required | Default | Description |
332
+ |-----------|------|----------|---------|-------------|
333
+ | `format` | enum | No | `text` | Output format: `text` or `json` |
334
+
335
+ **Returns:**
336
+ ```json
337
+ {
338
+ "name": "src-mcp",
339
+ "version": "1.0.0",
340
+ "capabilities": ["indexing", "search", "incremental-update"]
341
+ }
342
+ ```
343
+
344
+ ---
345
+
346
+ ## CLI Reference
347
+
348
+ **Every MCP tool is also a CLI command.** You can use SRC from your terminal without any AI assistant.
349
+
350
+ ### General Usage
351
+
352
+ ```bash
353
+ src-mcp <command> [options]
354
+ src-mcp help # Show all commands
355
+ src-mcp <command> --help # Show command options
356
+ ```
357
+
358
+ Or with npx:
359
+
360
+ ```bash
361
+ npx -y src-mcp <command> [options]
362
+ ```
363
+
364
+ ### Commands
365
+
366
+ ```bash
367
+ # Start MCP server (auto-indexes if needed, watches for changes)
368
+ src-mcp serve
369
+ src-mcp serve --no-watch # Disable file watcher
370
+
371
+ # Index a codebase manually
372
+ src-mcp index_codebase
373
+ src-mcp index_codebase --concurrency 8
374
+ src-mcp index_codebase --force # Re-index even if index exists
375
+
376
+ # Search indexed code
377
+ src-mcp search_code --query "authentication"
378
+ src-mcp search_code --query "error handling" --limit 20 --mode hybrid
379
+ src-mcp search_code --query "UserService" --mode fts # Exact keyword search
380
+
381
+ # Update index incrementally
382
+ src-mcp update_index
383
+ src-mcp update_index --dryRun # Preview changes only
384
+
385
+ # Check index status
386
+ src-mcp get_index_status
387
+
388
+ # Server information
389
+ src-mcp get_server_info --format json
390
+ ```
391
+
392
+ ---
393
+
394
+ ## Configuration
395
+
396
+ ### Environment Variables
397
+
398
+ All settings can be configured via environment variables:
399
+
400
+ | Variable | Description | Default |
401
+ |----------|-------------|---------|
402
+ | `OLLAMA_BASE_URL` | Ollama API endpoint | `http://localhost:11434` |
403
+ | `EMBEDDING_MODEL` | Model for embeddings | `nomic-embed-text` |
404
+ | `EMBEDDING_DIMENSIONS` | Vector dimensions | `768` |
405
+ | `CHUNK_SIZE` | Characters per chunk | `1000` |
406
+ | `CHUNK_OVERLAP` | Overlap between chunks | `200` |
407
+ | `EMBEDDING_BATCH_SIZE` | Batch size for embedding | `10` |
408
+ | `RERANK_MODEL` | Model for re-ranking | `qwen2.5:1.5b` |
409
+ | `LOG_LEVEL` | Log verbosity | `info` |
410
+
411
+ **Example:**
412
+
413
+ ```bash
414
+ OLLAMA_BASE_URL=http://192.168.1.100:11434 src-mcp serve
415
+ ```
416
+
417
+ ### MCP Client Configuration
418
+
419
+ **Claude Desktop** (`claude_desktop_config.json`):
420
+
421
+ **With global installation:**
422
+ ```json
423
+ {
424
+ "mcpServers": {
425
+ "src-mcp": {
426
+ "command": "src-mcp",
427
+ "args": ["serve"]
428
+ }
429
+ }
430
+ }
431
+ ```
432
+
433
+ **With npx:**
434
+ ```json
435
+ {
436
+ "mcpServers": {
437
+ "src-mcp": {
438
+ "command": "npx",
439
+ "args": ["-y", "src-mcp", "serve"]
440
+ }
441
+ }
442
+ }
443
+ ```
444
+
445
+ **With environment variables:**
446
+
447
+ ```json
448
+ {
449
+ "mcpServers": {
450
+ "src-mcp": {
451
+ "command": "src-mcp",
452
+ "args": ["serve"],
453
+ "env": {
454
+ "OLLAMA_BASE_URL": "http://192.168.1.100:11434"
455
+ }
456
+ }
457
+ }
458
+ }
459
+ ```
460
+
461
+ ### Index Storage
462
+
463
+ Indexes are stored in `.src-index/` directory within each indexed project:
464
+
465
+ ```
466
+ my-project/
467
+ ├── src/
468
+ ├── .src-index/ # Created by SRC
469
+ │ ├── lancedb/ # Vector database
470
+ │ ├── callgraph.json # Call graph cache
471
+ │ └── .src-index-hashes.json # File hash cache
472
+ └── ...
473
+ ```
474
+
475
+ Add `.src-index/` to your `.gitignore`:
476
+
477
+ ```gitignore
478
+ .src-index/
479
+ ```
480
+
481
+ ---
482
+
483
+ ## Supported Languages
484
+
485
+ ### Full AST Support (18 languages)
486
+
487
+ These languages have complete support: symbol extraction, semantic chunking at function/class boundaries, call graph analysis, and import resolution.
488
+
489
+ | Category | Language | Extensions |
490
+ |----------|----------|------------|
491
+ | **Web** | JavaScript | `.js` `.jsx` `.mjs` `.cjs` |
492
+ | | TypeScript | `.ts` |
493
+ | | TSX | `.tsx` |
494
+ | | HTML | `.html` `.htm` |
495
+ | | Svelte | `.svelte` |
496
+ | **Systems** | C | `.c` `.h` |
497
+ | | C++ | `.cpp` `.hpp` `.cc` `.cxx` |
498
+ | | Rust | `.rs` |
499
+ | | Go | `.go` |
500
+ | **Enterprise** | Java | `.java` |
501
+ | | C# | `.cs` |
502
+ | | Kotlin | `.kt` `.kts` |
503
+ | | Scala | `.scala` `.sc` |
504
+ | **Scripting** | Python | `.py` `.pyi` `.pyw` |
505
+ | | Ruby | `.rb` `.rake` `.gemspec` |
506
+ | | PHP | `.php` `.phtml` |
507
+ | **Functional** | OCaml | `.ml` `.mli` |
508
+ | | Swift | `.swift` |
509
+
510
+ ### LangChain Fallback (16 languages)
511
+
512
+ These languages use intelligent text splitting with language-aware rules:
513
+
514
+ | Language | Extensions |
515
+ |----------|------------|
516
+ | Markdown | `.md` `.mdx` |
517
+ | LaTeX | `.tex` `.latex` |
518
+ | reStructuredText | `.rst` |
519
+ | Solidity | `.sol` |
520
+ | Protocol Buffers | `.proto` |
521
+ | Lua | `.lua` |
522
+ | Haskell | `.hs` `.lhs` |
523
+ | Elixir | `.ex` `.exs` |
524
+ | PowerShell | `.ps1` `.psm1` |
525
+ | Perl | `.pl` `.pm` |
526
+ | Cobol | `.cob` `.cbl` |
527
+ | Visual Basic | `.vb` `.vbs` |
528
+ | FORTRAN | `.f` `.f90` `.f95` |
529
+ | Assembly | `.asm` `.s` |
530
+
531
+ ### Generic Support (30+ file types)
532
+
533
+ All other text files use configurable chunking:
534
+
535
+ | Category | Extensions |
536
+ |----------|------------|
537
+ | **Config** | `.json` `.yaml` `.yml` `.toml` `.ini` `.env` `.xml` |
538
+ | **Shell** | `.sh` `.bash` `.zsh` `.fish` `.bat` `.cmd` |
539
+ | **Styles** | `.css` `.scss` `.sass` `.less` |
540
+ | **Data** | `.sql` `.graphql` `.gql` |
541
+ | **DevOps** | `Dockerfile` `Makefile` `.tf` `.hcl` |
542
+ | **Other** | `.zig` `.nim` `.dart` `.vue` `.elm` `.clj` |
543
+
544
+ ### Auto-excluded Files
545
+
546
+ Binary files and lock files are automatically excluded:
547
+
548
+ - **Binaries:** `.exe` `.dll` `.so` `.png` `.jpg` `.mp3` `.zip` `.wasm`
549
+ - **Lock files:** `package-lock.json` `yarn.lock` `pnpm-lock.yaml`
550
+ - **Build outputs:** `.pyc` `.class` `.o` `dist/` `node_modules/`
551
+
552
+ ---
553
+
554
+ ## How It Works
555
+
556
+ ### Indexing Pipeline
557
+
558
+ ```
559
+ Source Files → Semantic Chunking → AST Enrichment → Cross-file Context → Embeddings → LanceDB
560
+ ↓ ↓ ↓ ↓
561
+ Split at symbol Extract symbols Resolve imports nomic-embed-text
562
+ boundaries and metadata and aliases 768 dimensions
563
+ ```
564
+
565
+ **Steps:**
566
+
567
+ 1. **Scan** — Find all supported files (respects `.gitignore`)
568
+ 2. **Chunk** — Split code at function/class boundaries (1000 chars, 200 overlap)
569
+ 3. **Enrich** — Add AST metadata (symbols, imports, exports)
570
+ 4. **Resolve** — Resolve cross-file imports and TypeScript path aliases
571
+ 5. **Embed** — Generate vectors via Ollama (nomic-embed-text)
572
+ 6. **Store** — Save to LanceDB with vector and full-text indices
573
+ 7. **Cache** — Store file hashes for incremental updates
574
+
575
+ ### Search Pipeline
576
+
577
+ ```
578
+ Query → Embed Query → Vector Search ─┐
579
+ ├→ RRF Fusion → LLM Re-rank → Add Call Context → Results
580
+ Query → Tokenize ───→ BM25 Search ───┘
581
+ ```
582
+
583
+ **Steps:**
584
+
585
+ 1. **Embed** — Convert query to vector using same model
586
+ 2. **Vector Search** — Find semantically similar chunks (cosine similarity)
587
+ 3. **BM25 Search** — Find keyword matches (term frequency)
588
+ 4. **RRF Fusion** — Combine rankings with Reciprocal Rank Fusion (k=60)
589
+ 5. **Re-rank** — Use LLM to re-order by relevance (qwen2.5:1.5b)
590
+ 6. **Call Context** — Add caller/callee information from call graph
591
+ 7. **Return** — Ranked results with full context
592
+
593
+ ### Technical Specifications
594
+
595
+ | Component | Specification |
596
+ |-----------|---------------|
597
+ | **Embedding Model** | nomic-embed-text (137M params) |
598
+ | **Vector Dimensions** | 768 |
599
+ | **Re-ranking Model** | qwen2.5:1.5b (1.5B params) |
600
+ | **Chunk Size** | 1000 characters |
601
+ | **Chunk Overlap** | 200 characters |
602
+ | **Batch Size** | 10 embeddings per request |
603
+ | **RRF Constant** | k=60 |
604
+ | **Vector Database** | LanceDB (embedded) |
605
+
606
+ ---
607
+
608
+ ## Comparison
609
+
610
+ ### SRC vs Basic Code Search MCPs
611
+
612
+ | Feature | SRC | Basic MCPs |
613
+ |---------|-----|------------|
614
+ | **Search Method** | Hybrid (Vector + BM25 + RRF) | Keyword only or basic embedding |
615
+ | **Re-ranking** | LLM-powered | None |
616
+ | **Call Graph** | Full caller/callee context | None |
617
+ | **Cross-file Context** | Resolves imports & path aliases | None |
618
+ | **Incremental Updates** | SHA-256 hash detection | Full re-index required |
619
+ | **AST Languages** | 18 with Tree-sitter WASM | Few or none |
620
+ | **Total Languages** | 50+ | Limited |
621
+
622
+ ### Key Advantages
623
+
624
+ 1. **Hybrid Search** — Combines semantic understanding with keyword precision
625
+ 2. **LLM Re-ranking** — Catches nuances that pure vector search misses
626
+ 3. **Call Graph** — Understand code relationships, not just content
627
+ 4. **Cross-file Resolution** — Follows imports to provide complete context
628
+ 5. **Incremental Updates** — Only re-index what changed
629
+ 6. **Semantic Chunking** — Splits at symbol boundaries, not arbitrary lines
630
+
631
+ ---
632
+
633
+ ## Troubleshooting
634
+
635
+ ### Ollama Connection Failed
636
+
637
+ ```
638
+ Error: Ollama is not available
639
+ ```
640
+
641
+ **Solution:**
642
+ 1. Ensure Ollama is running: `ollama serve`
643
+ 2. Check the URL: `curl http://localhost:11434/api/tags`
644
+ 3. If using remote Ollama: set `OLLAMA_BASE_URL`
645
+
646
+ ### Model Not Found
647
+
648
+ ```
649
+ Error: model 'nomic-embed-text' not found
650
+ ```
651
+
652
+ **Solution:**
653
+ ```bash
654
+ ollama pull nomic-embed-text
655
+ ollama pull qwen2.5:1.5b
656
+ ```
657
+
658
+ ### Index Already Exists
659
+
660
+ ```
661
+ Error: Index already exists. Use force=true to re-index.
662
+ ```
663
+
664
+ **Solution:**
665
+ - Use `force: true` parameter to re-index
666
+ - Or use `update_index` for incremental updates
667
+
668
+ ### No Results Found
669
+
670
+ **Possible causes:**
671
+ 1. Query too specific — try broader terms
672
+ 2. Wrong directory — check `directory` parameter
673
+ 3. Files excluded — check `.gitignore` patterns
674
+
675
+ ### Slow Indexing
676
+
677
+ **Solutions:**
678
+ 1. Increase concurrency: `--concurrency 8`
679
+ 2. Exclude large directories: `--exclude node_modules --exclude dist`
680
+ 3. Use faster storage (SSD)
681
+
682
+ ---
683
+
684
+ ## Links
685
+
686
+ ### Project
687
+
688
+ - [GitHub Repository](https://github.com/kvnpetit/structured-repo-context-mcp)
689
+ - [npm Package](https://www.npmjs.com/package/src-mcp)
690
+ - [Report Issues](https://github.com/kvnpetit/structured-repo-context-mcp/issues)
691
+ - [Changelog](./CHANGELOG.md)
692
+ - [Architecture Guide](./ARCHITECTURE.md)
693
+
694
+ ### External
695
+
696
+ - [MCP Specification](https://modelcontextprotocol.io/specification)
697
+ - [Ollama](https://ollama.com)
698
+ - [LanceDB](https://lancedb.com)
699
+ - [Tree-sitter](https://tree-sitter.github.io/tree-sitter/)
700
+
701
+ ---
702
+
703
+ ## License
704
+
705
+ [MIT](./LICENSE) © 2026 kvnpetit
706
+
707
+ ---
708
+
709
+ <div align="center">
710
+
711
+ **Ready to supercharge your AI coding experience?**
712
+
713
+ ```bash
714
+ npm install -g src-mcp && src-mcp serve
715
+ # or
716
+ npx -y src-mcp serve
717
+ ```
718
+
719
+ [Report Bug](https://github.com/kvnpetit/structured-repo-context-mcp/issues) · [Request Feature](https://github.com/kvnpetit/structured-repo-context-mcp/issues)
720
+
721
+ </div>