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.
- package/LICENSE +21 -0
- package/README.md +721 -0
- package/assets/languages.json +219 -0
- package/assets/queries/_javascript/highlights.scm +36 -0
- package/assets/queries/_javascript/locals.scm +14 -0
- package/assets/queries/_javascript/tags.scm +88 -0
- package/assets/queries/_jsx/highlights.scm +43 -0
- package/assets/queries/_jsx/indents.scm +6 -0
- package/assets/queries/_jsx/textobjects.scm +7 -0
- package/assets/queries/_typescript/highlights.scm +148 -0
- package/assets/queries/_typescript/indents.scm +5 -0
- package/assets/queries/_typescript/locals.scm +34 -0
- package/assets/queries/_typescript/tags.scm +23 -0
- package/assets/queries/_typescript/textobjects.scm +12 -0
- package/assets/queries/c/highlights.scm +167 -0
- package/assets/queries/c/indents.scm +51 -0
- package/assets/queries/c/injections.scm +2 -0
- package/assets/queries/c/locals.scm +38 -0
- package/assets/queries/c/rainbows.scm +29 -0
- package/assets/queries/c/tags.scm +9 -0
- package/assets/queries/c/textobjects.scm +27 -0
- package/assets/queries/c_sharp/highlights.scm +208 -0
- package/assets/queries/c_sharp/injections.scm +2 -0
- package/assets/queries/c_sharp/tags.scm +21 -0
- package/assets/queries/c_sharp/textobjects.scm +20 -0
- package/assets/queries/cpp/highlights.scm +177 -0
- package/assets/queries/cpp/indents.scm +3 -0
- package/assets/queries/cpp/injections.scm +4 -0
- package/assets/queries/cpp/rainbows.scm +49 -0
- package/assets/queries/cpp/tags.scm +12 -0
- package/assets/queries/cpp/textobjects.scm +7 -0
- package/assets/queries/ecma/highlights.scm +288 -0
- package/assets/queries/ecma/indents.scm +28 -0
- package/assets/queries/ecma/injections.scm +100 -0
- package/assets/queries/ecma/locals.scm +26 -0
- package/assets/queries/ecma/rainbows.scm +28 -0
- package/assets/queries/ecma/textobjects.scm +45 -0
- package/assets/queries/go/highlights.scm +236 -0
- package/assets/queries/go/indents.scm +40 -0
- package/assets/queries/go/injections.scm +92 -0
- package/assets/queries/go/locals.scm +25 -0
- package/assets/queries/go/rainbows.scm +33 -0
- package/assets/queries/go/tags.scm +30 -0
- package/assets/queries/go/textobjects.scm +33 -0
- package/assets/queries/html/highlights.scm +47 -0
- package/assets/queries/html/injections.scm +10 -0
- package/assets/queries/html/rainbows.scm +13 -0
- package/assets/queries/html/textobjects.scm +9 -0
- package/assets/queries/java/highlights.scm +227 -0
- package/assets/queries/java/indents.scm +35 -0
- package/assets/queries/java/injections.scm +2 -0
- package/assets/queries/java/rainbows.scm +35 -0
- package/assets/queries/java/tags.scm +27 -0
- package/assets/queries/java/textobjects.scm +44 -0
- package/assets/queries/javascript/highlights.scm +3 -0
- package/assets/queries/javascript/indents.scm +3 -0
- package/assets/queries/javascript/injections.scm +3 -0
- package/assets/queries/javascript/locals.scm +3 -0
- package/assets/queries/javascript/rainbows.scm +1 -0
- package/assets/queries/javascript/tags.scm +3 -0
- package/assets/queries/javascript/textobjects.scm +3 -0
- package/assets/queries/jsx/highlights.scm +3 -0
- package/assets/queries/jsx/indents.scm +3 -0
- package/assets/queries/jsx/injections.scm +3 -0
- package/assets/queries/jsx/locals.scm +3 -0
- package/assets/queries/jsx/rainbows.scm +9 -0
- package/assets/queries/jsx/tags.scm +3 -0
- package/assets/queries/jsx/textobjects.scm +3 -0
- package/assets/queries/kotlin/folds.scm +17 -0
- package/assets/queries/kotlin/highlights.scm +330 -0
- package/assets/queries/kotlin/indents.scm +44 -0
- package/assets/queries/kotlin/injections.scm +42 -0
- package/assets/queries/kotlin/locals.scm +23 -0
- package/assets/queries/kotlin/tags.scm +12 -0
- package/assets/queries/kotlin/textobjects.scm +45 -0
- package/assets/queries/ocaml/highlights.scm +151 -0
- package/assets/queries/ocaml/indents.scm +12 -0
- package/assets/queries/ocaml/injections.scm +2 -0
- package/assets/queries/ocaml/locals.scm +24 -0
- package/assets/queries/php/highlights.scm +319 -0
- package/assets/queries/php/indents.scm +18 -0
- package/assets/queries/php/injections.scm +25 -0
- package/assets/queries/php/rainbows.scm +15 -0
- package/assets/queries/php/tags.scm +26 -0
- package/assets/queries/php/textobjects.scm +52 -0
- package/assets/queries/python/highlights.scm +308 -0
- package/assets/queries/python/indents.scm +84 -0
- package/assets/queries/python/injections.scm +14 -0
- package/assets/queries/python/locals.scm +50 -0
- package/assets/queries/python/rainbows.scm +30 -0
- package/assets/queries/python/tags.scm +14 -0
- package/assets/queries/python/textobjects.scm +35 -0
- package/assets/queries/ruby/highlights.scm +191 -0
- package/assets/queries/ruby/indents.scm +24 -0
- package/assets/queries/ruby/injections.scm +35 -0
- package/assets/queries/ruby/locals.scm +20 -0
- package/assets/queries/ruby/rainbows.scm +28 -0
- package/assets/queries/ruby/tags.scm +64 -0
- package/assets/queries/ruby/textobjects.scm +56 -0
- package/assets/queries/rust/highlights.scm +514 -0
- package/assets/queries/rust/indents.scm +148 -0
- package/assets/queries/rust/injections.scm +170 -0
- package/assets/queries/rust/locals.scm +28 -0
- package/assets/queries/rust/rainbows.scm +60 -0
- package/assets/queries/rust/tags.scm +26 -0
- package/assets/queries/rust/textobjects.scm +85 -0
- package/assets/queries/scala/highlights.scm +267 -0
- package/assets/queries/scala/indents.scm +22 -0
- package/assets/queries/scala/injections.scm +16 -0
- package/assets/queries/scala/locals.scm +14 -0
- package/assets/queries/scala/textobjects.scm +65 -0
- package/assets/queries/svelte/folds.scm +13 -0
- package/assets/queries/svelte/highlights.scm +38 -0
- package/assets/queries/svelte/indents.scm +24 -0
- package/assets/queries/svelte/injections.scm +46 -0
- package/assets/queries/svelte/locals.scm +1 -0
- package/assets/queries/swift/highlights.scm +200 -0
- package/assets/queries/swift/indents.scm +100 -0
- package/assets/queries/swift/injections.scm +10 -0
- package/assets/queries/swift/locals.scm +19 -0
- package/assets/queries/swift/rainbows.scm +60 -0
- package/assets/queries/swift/textobjects.scm +23 -0
- package/assets/queries/tsx/highlights.scm +3 -0
- package/assets/queries/tsx/indents.scm +3 -0
- package/assets/queries/tsx/injections.scm +3 -0
- package/assets/queries/tsx/locals.scm +3 -0
- package/assets/queries/tsx/rainbows.scm +2 -0
- package/assets/queries/tsx/tags.scm +3 -0
- package/assets/queries/tsx/textobjects.scm +3 -0
- package/assets/queries/typescript/highlights.scm +3 -0
- package/assets/queries/typescript/indents.scm +3 -0
- package/assets/queries/typescript/injections.scm +3 -0
- package/assets/queries/typescript/locals.scm +3 -0
- package/assets/queries/typescript/rainbows.scm +19 -0
- package/assets/queries/typescript/tags.scm +3 -0
- package/assets/queries/typescript/textobjects.scm +3 -0
- package/assets/wasm/tree-sitter-c.wasm +0 -0
- package/assets/wasm/tree-sitter-c_sharp.wasm +0 -0
- package/assets/wasm/tree-sitter-cpp.wasm +0 -0
- package/assets/wasm/tree-sitter-go.wasm +0 -0
- package/assets/wasm/tree-sitter-html.wasm +0 -0
- package/assets/wasm/tree-sitter-java.wasm +0 -0
- package/assets/wasm/tree-sitter-javascript.wasm +0 -0
- package/assets/wasm/tree-sitter-kotlin.wasm +0 -0
- package/assets/wasm/tree-sitter-ocaml.wasm +0 -0
- package/assets/wasm/tree-sitter-php.wasm +0 -0
- package/assets/wasm/tree-sitter-python.wasm +0 -0
- package/assets/wasm/tree-sitter-ruby.wasm +0 -0
- package/assets/wasm/tree-sitter-rust.wasm +0 -0
- package/assets/wasm/tree-sitter-scala.wasm +0 -0
- package/assets/wasm/tree-sitter-svelte.wasm +0 -0
- package/assets/wasm/tree-sitter-swift.wasm +0 -0
- package/assets/wasm/tree-sitter-tsx.wasm +0 -0
- package/assets/wasm/tree-sitter-typescript.wasm +0 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +4 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli/adapter.d.ts +7 -0
- package/dist/cli/adapter.d.ts.map +1 -0
- package/dist/cli/adapter.js +39 -0
- package/dist/cli/adapter.js.map +1 -0
- package/dist/cli/commands/index.d.ts +24 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +13 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/serve.command.d.ts +21 -0
- package/dist/cli/commands/serve.command.d.ts.map +1 -0
- package/dist/cli/commands/serve.command.js +62 -0
- package/dist/cli/commands/serve.command.js.map +1 -0
- package/dist/cli/commands/version.command.d.ts +2 -0
- package/dist/cli/commands/version.command.d.ts.map +1 -0
- package/dist/cli/commands/version.command.js +12 -0
- package/dist/cli/commands/version.command.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +15 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/parser.d.ts +7 -0
- package/dist/cli/parser.d.ts.map +1 -0
- package/dist/cli/parser.js +99 -0
- package/dist/cli/parser.js.map +1 -0
- package/dist/config/index.d.ts +24 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +38 -0
- package/dist/config/index.js.map +1 -0
- package/dist/core/ast/index.d.ts +82 -0
- package/dist/core/ast/index.d.ts.map +1 -0
- package/dist/core/ast/index.js +204 -0
- package/dist/core/ast/index.js.map +1 -0
- package/dist/core/ast/types.d.ts +152 -0
- package/dist/core/ast/types.d.ts.map +1 -0
- package/dist/core/ast/types.js +5 -0
- package/dist/core/ast/types.js.map +1 -0
- package/dist/core/constants.d.ts +17 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +49 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/embeddings/callgraph.d.ts +98 -0
- package/dist/core/embeddings/callgraph.d.ts.map +1 -0
- package/dist/core/embeddings/callgraph.js +415 -0
- package/dist/core/embeddings/callgraph.js.map +1 -0
- package/dist/core/embeddings/chunker.d.ts +37 -0
- package/dist/core/embeddings/chunker.d.ts.map +1 -0
- package/dist/core/embeddings/chunker.js +298 -0
- package/dist/core/embeddings/chunker.js.map +1 -0
- package/dist/core/embeddings/client.d.ts +30 -0
- package/dist/core/embeddings/client.d.ts.map +1 -0
- package/dist/core/embeddings/client.js +65 -0
- package/dist/core/embeddings/client.js.map +1 -0
- package/dist/core/embeddings/crossfile.d.ts +58 -0
- package/dist/core/embeddings/crossfile.d.ts.map +1 -0
- package/dist/core/embeddings/crossfile.js +202 -0
- package/dist/core/embeddings/crossfile.js.map +1 -0
- package/dist/core/embeddings/enricher.d.ts +53 -0
- package/dist/core/embeddings/enricher.d.ts.map +1 -0
- package/dist/core/embeddings/enricher.js +308 -0
- package/dist/core/embeddings/enricher.js.map +1 -0
- package/dist/core/embeddings/index.d.ts +13 -0
- package/dist/core/embeddings/index.d.ts.map +1 -0
- package/dist/core/embeddings/index.js +20 -0
- package/dist/core/embeddings/index.js.map +1 -0
- package/dist/core/embeddings/reranker.d.ts +41 -0
- package/dist/core/embeddings/reranker.d.ts.map +1 -0
- package/dist/core/embeddings/reranker.js +117 -0
- package/dist/core/embeddings/reranker.js.map +1 -0
- package/dist/core/embeddings/store.d.ts +93 -0
- package/dist/core/embeddings/store.d.ts.map +1 -0
- package/dist/core/embeddings/store.js +304 -0
- package/dist/core/embeddings/store.js.map +1 -0
- package/dist/core/embeddings/types.d.ts +77 -0
- package/dist/core/embeddings/types.d.ts.map +1 -0
- package/dist/core/embeddings/types.js +5 -0
- package/dist/core/embeddings/types.js.map +1 -0
- package/dist/core/embeddings/watcher.d.ts +130 -0
- package/dist/core/embeddings/watcher.d.ts.map +1 -0
- package/dist/core/embeddings/watcher.js +448 -0
- package/dist/core/embeddings/watcher.js.map +1 -0
- package/dist/core/fallback/index.d.ts +26 -0
- package/dist/core/fallback/index.d.ts.map +1 -0
- package/dist/core/fallback/index.js +76 -0
- package/dist/core/fallback/index.js.map +1 -0
- package/dist/core/parser/index.d.ts +64 -0
- package/dist/core/parser/index.d.ts.map +1 -0
- package/dist/core/parser/index.js +205 -0
- package/dist/core/parser/index.js.map +1 -0
- package/dist/core/parser/languages.d.ts +26 -0
- package/dist/core/parser/languages.d.ts.map +1 -0
- package/dist/core/parser/languages.js +101 -0
- package/dist/core/parser/languages.js.map +1 -0
- package/dist/core/queries/helpers.d.ts +72 -0
- package/dist/core/queries/helpers.d.ts.map +1 -0
- package/dist/core/queries/helpers.js +101 -0
- package/dist/core/queries/helpers.js.map +1 -0
- package/dist/core/queries/index.d.ts +144 -0
- package/dist/core/queries/index.d.ts.map +1 -0
- package/dist/core/queries/index.js +396 -0
- package/dist/core/queries/index.js.map +1 -0
- package/dist/core/queries/loader.d.ts +46 -0
- package/dist/core/queries/loader.d.ts.map +1 -0
- package/dist/core/queries/loader.js +216 -0
- package/dist/core/queries/loader.js.map +1 -0
- package/dist/core/queries/patterns.d.ts +10 -0
- package/dist/core/queries/patterns.d.ts.map +1 -0
- package/dist/core/queries/patterns.js +112 -0
- package/dist/core/queries/patterns.js.map +1 -0
- package/dist/core/symbols/index.d.ts +70 -0
- package/dist/core/symbols/index.d.ts.map +1 -0
- package/dist/core/symbols/index.js +359 -0
- package/dist/core/symbols/index.js.map +1 -0
- package/dist/core/unified/index.d.ts +118 -0
- package/dist/core/unified/index.d.ts.map +1 -0
- package/dist/core/unified/index.js +428 -0
- package/dist/core/unified/index.js.map +1 -0
- package/dist/core/utils/assets.d.ts +34 -0
- package/dist/core/utils/assets.d.ts.map +1 -0
- package/dist/core/utils/assets.js +85 -0
- package/dist/core/utils/assets.js.map +1 -0
- package/dist/core/utils/cache.d.ts +43 -0
- package/dist/core/utils/cache.d.ts.map +1 -0
- package/dist/core/utils/cache.js +60 -0
- package/dist/core/utils/cache.js.map +1 -0
- package/dist/core/utils/index.d.ts +7 -0
- package/dist/core/utils/index.d.ts.map +1 -0
- package/dist/core/utils/index.js +10 -0
- package/dist/core/utils/index.js.map +1 -0
- package/dist/core/utils/tsconfig.d.ts +34 -0
- package/dist/core/utils/tsconfig.d.ts.map +1 -0
- package/dist/core/utils/tsconfig.js +173 -0
- package/dist/core/utils/tsconfig.js.map +1 -0
- package/dist/features/analyze-file/index.d.ts +15 -0
- package/dist/features/analyze-file/index.d.ts.map +1 -0
- package/dist/features/analyze-file/index.js +164 -0
- package/dist/features/analyze-file/index.js.map +1 -0
- package/dist/features/get-call-graph/index.d.ts +24 -0
- package/dist/features/get-call-graph/index.d.ts.map +1 -0
- package/dist/features/get-call-graph/index.js +246 -0
- package/dist/features/get-call-graph/index.js.map +1 -0
- package/dist/features/get-index-status/index.d.ts +20 -0
- package/dist/features/get-index-status/index.d.ts.map +1 -0
- package/dist/features/get-index-status/index.js +90 -0
- package/dist/features/get-index-status/index.js.map +1 -0
- package/dist/features/index-codebase/index.d.ts +24 -0
- package/dist/features/index-codebase/index.d.ts.map +1 -0
- package/dist/features/index-codebase/index.js +283 -0
- package/dist/features/index-codebase/index.js.map +1 -0
- package/dist/features/index.d.ts +15 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/index.js +28 -0
- package/dist/features/index.js.map +1 -0
- package/dist/features/info/index.d.ts +19 -0
- package/dist/features/info/index.d.ts.map +1 -0
- package/dist/features/info/index.js +41 -0
- package/dist/features/info/index.js.map +1 -0
- package/dist/features/list-symbols/index.d.ts +22 -0
- package/dist/features/list-symbols/index.d.ts.map +1 -0
- package/dist/features/list-symbols/index.js +74 -0
- package/dist/features/list-symbols/index.js.map +1 -0
- package/dist/features/parse-ast/index.d.ts +12 -0
- package/dist/features/parse-ast/index.d.ts.map +1 -0
- package/dist/features/parse-ast/index.js +71 -0
- package/dist/features/parse-ast/index.js.map +1 -0
- package/dist/features/query-code/index.d.ts +23 -0
- package/dist/features/query-code/index.d.ts.map +1 -0
- package/dist/features/query-code/index.js +96 -0
- package/dist/features/query-code/index.js.map +1 -0
- package/dist/features/search-code/index.d.ts +39 -0
- package/dist/features/search-code/index.d.ts.map +1 -0
- package/dist/features/search-code/index.js +258 -0
- package/dist/features/search-code/index.js.map +1 -0
- package/dist/features/types.d.ts +14 -0
- package/dist/features/types.d.ts.map +1 -0
- package/dist/features/types.js +2 -0
- package/dist/features/types.js.map +1 -0
- package/dist/features/update-index/index.d.ts +24 -0
- package/dist/features/update-index/index.d.ts.map +1 -0
- package/dist/features/update-index/index.js +358 -0
- package/dist/features/update-index/index.js.map +1 -0
- package/dist/features/utils/content.d.ts +30 -0
- package/dist/features/utils/content.d.ts.map +1 -0
- package/dist/features/utils/content.js +49 -0
- package/dist/features/utils/content.js.map +1 -0
- package/dist/features/utils/index.d.ts +6 -0
- package/dist/features/utils/index.d.ts.map +1 -0
- package/dist/features/utils/index.js +8 -0
- package/dist/features/utils/index.js.map +1 -0
- package/dist/features/utils/result.d.ts +37 -0
- package/dist/features/utils/result.d.ts.map +1 -0
- package/dist/features/utils/result.js +53 -0
- package/dist/features/utils/result.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +9 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +188 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/resources/index.d.ts +3 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +17 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +24 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/adapter.d.ts +4 -0
- package/dist/tools/adapter.d.ts.map +1 -0
- package/dist/tools/adapter.js +28 -0
- package/dist/tools/adapter.js.map +1 -0
- package/dist/tools/index.d.ts +5 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types/index.d.ts +20 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/colors.d.ts +24 -0
- package/dist/utils/colors.d.ts.map +1 -0
- package/dist/utils/colors.js +30 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +57 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/spinner.d.ts +11 -0
- package/dist/utils/spinner.d.ts.map +1 -0
- package/dist/utils/spinner.js +36 -0
- package/dist/utils/spinner.js.map +1 -0
- 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
|
+
[](https://github.com/kvnpetit/structured-repo-context-mcp/actions/workflows/ci.yml)
|
|
10
|
+
[](https://codecov.io/gh/kvnpetit/structured-repo-context-mcp)
|
|
11
|
+
[](https://www.npmjs.com/package/src-mcp)
|
|
12
|
+
[](https://www.npmjs.com/package/src-mcp)
|
|
13
|
+
[](https://opensource.org/licenses/MIT)
|
|
14
|
+
[](https://modelcontextprotocol.io)
|
|
15
|
+
[](https://www.typescriptlang.org/)
|
|
16
|
+
[](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>
|