mcp-codebase-intelligence 0.2.0 → 0.3.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.
- package/README.md +97 -16
- package/dist/graph/code-graph.d.ts +16 -0
- package/dist/graph/code-graph.js +30 -4
- package/dist/graph/code-graph.js.map +1 -1
- package/dist/graph/schema.js +1 -0
- package/dist/graph/schema.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +61 -60
- package/dist/index.js.map +1 -1
- package/dist/indexer/docstring-extractor.d.ts +7 -0
- package/dist/indexer/docstring-extractor.js +118 -0
- package/dist/indexer/docstring-extractor.js.map +1 -0
- package/dist/indexer/file-watcher.d.ts +2 -2
- package/dist/indexer/file-watcher.js +24 -15
- package/dist/indexer/file-watcher.js.map +1 -1
- package/dist/indexer/lang-cpp.d.ts +3 -0
- package/dist/indexer/lang-cpp.js +469 -0
- package/dist/indexer/lang-cpp.js.map +1 -0
- package/dist/indexer/lang-go.js +4 -0
- package/dist/indexer/lang-go.js.map +1 -1
- package/dist/indexer/lang-java.js +4 -0
- package/dist/indexer/lang-java.js.map +1 -1
- package/dist/indexer/lang-python.js +3 -0
- package/dist/indexer/lang-python.js.map +1 -1
- package/dist/indexer/lang-rust.js +5 -0
- package/dist/indexer/lang-rust.js.map +1 -1
- package/dist/indexer/tree-sitter-indexer.js +5 -0
- package/dist/indexer/tree-sitter-indexer.js.map +1 -1
- package/dist/project-manager.d.ts +63 -0
- package/dist/project-manager.js +479 -0
- package/dist/project-manager.js.map +1 -0
- package/dist/tools/find-symbol.js +2 -1
- package/dist/tools/find-symbol.js.map +1 -1
- package/dist/tools/project-tools.d.ts +38 -0
- package/dist/tools/project-tools.js +72 -0
- package/dist/tools/project-tools.js.map +1 -0
- package/dist/tools/search-codebase.d.ts +39 -0
- package/dist/tools/search-codebase.js +59 -0
- package/dist/tools/search-codebase.js.map +1 -0
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -26,26 +26,31 @@ AI coding assistants are limited by what fits in their context window. When they
|
|
|
26
26
|
|
|
27
27
|
## Quick Start
|
|
28
28
|
|
|
29
|
+
### One-liner (no clone needed)
|
|
30
|
+
|
|
29
31
|
```bash
|
|
30
|
-
#
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
# Add to Claude Code via npx — auto-detects your project from cwd
|
|
33
|
+
claude mcp add codebase-intelligence npx mcp-codebase-intelligence
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Or with an explicit project path:
|
|
34
37
|
|
|
35
|
-
|
|
38
|
+
```bash
|
|
36
39
|
claude mcp add codebase-intelligence \
|
|
37
|
-
|
|
40
|
+
npx mcp-codebase-intelligence \
|
|
38
41
|
-e PROJECT_ROOT=/path/to/your/project
|
|
39
42
|
```
|
|
40
43
|
|
|
41
|
-
|
|
44
|
+
### JSON config (Claude Code, Cursor, VS Code)
|
|
45
|
+
|
|
46
|
+
Add to your MCP config file:
|
|
42
47
|
|
|
43
48
|
```json
|
|
44
49
|
{
|
|
45
50
|
"mcpServers": {
|
|
46
51
|
"codebase-intelligence": {
|
|
47
|
-
"command": "
|
|
48
|
-
"args": ["
|
|
52
|
+
"command": "npx",
|
|
53
|
+
"args": ["mcp-codebase-intelligence"],
|
|
49
54
|
"env": {
|
|
50
55
|
"PROJECT_ROOT": "/path/to/your/project"
|
|
51
56
|
}
|
|
@@ -54,11 +59,68 @@ Or add manually to your MCP config (Claude Code, Cursor, VS Code):
|
|
|
54
59
|
}
|
|
55
60
|
```
|
|
56
61
|
|
|
62
|
+
### From source (for development)
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
git clone https://github.com/g-tiwari/mcp-codebase-intelligence.git
|
|
66
|
+
cd mcp-codebase-intelligence
|
|
67
|
+
npm install && npm run build
|
|
68
|
+
|
|
69
|
+
claude mcp add codebase-intelligence \
|
|
70
|
+
node /path/to/mcp-codebase-intelligence/dist/index.js \
|
|
71
|
+
-e PROJECT_ROOT=/path/to/your/project
|
|
72
|
+
```
|
|
73
|
+
|
|
57
74
|
That's it. The server indexes your codebase on startup and watches for changes.
|
|
58
75
|
|
|
59
76
|
---
|
|
60
77
|
|
|
61
|
-
##
|
|
78
|
+
## Multi-Project Support
|
|
79
|
+
|
|
80
|
+
Work across multiple repos, monorepos, or a mix of both — from a single MCP server.
|
|
81
|
+
|
|
82
|
+
### Auto-detection (zero config)
|
|
83
|
+
|
|
84
|
+
When no config is set, the server auto-detects your project:
|
|
85
|
+
|
|
86
|
+
1. Finds the git root from your current directory
|
|
87
|
+
2. Detects monorepo markers (pnpm, lerna, nx, npm/yarn workspaces, go.work, Cargo workspace)
|
|
88
|
+
3. Indexes accordingly
|
|
89
|
+
|
|
90
|
+
### Multi-repo projects
|
|
91
|
+
|
|
92
|
+
Use `PROJECT_ROOTS` for projects spanning multiple repositories:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
claude mcp add codebase-intelligence \
|
|
96
|
+
npx mcp-codebase-intelligence \
|
|
97
|
+
-e PROJECT_ROOTS="/code/shared-models,/code/api-gateway,/code/android-app"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Config file (power users)
|
|
101
|
+
|
|
102
|
+
Create `.codegraph.json` in your project root (or `~/.codegraph/config.json` for user-level config):
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"projects": {
|
|
107
|
+
"tv-backend": {
|
|
108
|
+
"root": "/code/monorepo",
|
|
109
|
+
"include": ["packages/api-gateway", "packages/shared-models"],
|
|
110
|
+
"roots": ["/code/android-app", "/code/webos-app"]
|
|
111
|
+
},
|
|
112
|
+
"music-service": {
|
|
113
|
+
"roots": ["/code/music-api", "/code/music-models"]
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Then use `list_projects` and `switch_project` tools to navigate between projects.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 17 Tools
|
|
62
124
|
|
|
63
125
|
### Code Navigation
|
|
64
126
|
| Tool | What it does |
|
|
@@ -79,7 +141,7 @@ That's it. The server indexes your codebase on startup and watches for changes.
|
|
|
79
141
|
### Change Analysis
|
|
80
142
|
| Tool | What it does |
|
|
81
143
|
|------|-------------|
|
|
82
|
-
| `semantic_diff` | Feed it
|
|
144
|
+
| `semantic_diff` | Feed it a `git_ref` (e.g. `HEAD~1`). It identifies affected symbols, finds all downstream dependents, and flags breaking changes. |
|
|
83
145
|
| `analyze_change_impact` | Point it at specific lines in a file. It tells you which symbols are affected and who depends on them. |
|
|
84
146
|
|
|
85
147
|
### Architecture & Discovery
|
|
@@ -88,6 +150,13 @@ That's it. The server indexes your codebase on startup and watches for changes.
|
|
|
88
150
|
| `architecture_diagram` | Auto-generate a mermaid diagram of module dependencies, grouped by directory. |
|
|
89
151
|
| `query_codebase` | Ask natural language questions: "find all API endpoints", "what does the orders module do?", "what depends on the database layer?" |
|
|
90
152
|
|
|
153
|
+
### Project Management
|
|
154
|
+
| Tool | What it does |
|
|
155
|
+
|------|-------------|
|
|
156
|
+
| `list_projects` | Show all configured projects, their roots, and index stats. |
|
|
157
|
+
| `switch_project` | Change active project context. All tools operate against the selected project. |
|
|
158
|
+
| `add_project` | Add a new project at runtime. Indexes immediately and persists to config. |
|
|
159
|
+
|
|
91
160
|
### Admin
|
|
92
161
|
| Tool | What it does |
|
|
93
162
|
|------|-------------|
|
|
@@ -96,7 +165,7 @@ That's it. The server indexes your codebase on startup and watches for changes.
|
|
|
96
165
|
|
|
97
166
|
---
|
|
98
167
|
|
|
99
|
-
##
|
|
168
|
+
## 8 Languages
|
|
100
169
|
|
|
101
170
|
| Language | Extensions | Parser |
|
|
102
171
|
|----------|-----------|--------|
|
|
@@ -106,6 +175,8 @@ That's it. The server indexes your codebase on startup and watches for changes.
|
|
|
106
175
|
| Go | `.go` | tree-sitter |
|
|
107
176
|
| Rust | `.rs` | tree-sitter |
|
|
108
177
|
| Java | `.java` | tree-sitter |
|
|
178
|
+
| C | `.c` `.h` | tree-sitter |
|
|
179
|
+
| C++ | `.cpp` `.cc` `.cxx` `.hpp` `.hxx` `.hh` | tree-sitter |
|
|
109
180
|
|
|
110
181
|
All languages get symbol extraction, reference tracking, import/export analysis, and call graphs. TypeScript/JavaScript additionally get LSP-powered go-to-definition, type info, and find-implementations.
|
|
111
182
|
|
|
@@ -147,18 +218,28 @@ Tested on real-world projects: Zod, Express, gin, ripgrep, gson.
|
|
|
147
218
|
npm test
|
|
148
219
|
```
|
|
149
220
|
|
|
150
|
-
|
|
221
|
+
108 tests across 8 test suites covering all language parsers, grammar regression tests, the graph engine, and semantic diff.
|
|
151
222
|
|
|
152
223
|
---
|
|
153
224
|
|
|
154
|
-
##
|
|
225
|
+
## Configuration
|
|
226
|
+
|
|
227
|
+
### Environment Variables
|
|
155
228
|
|
|
156
229
|
| Variable | Description | Default |
|
|
157
230
|
|----------|-------------|---------|
|
|
158
|
-
| `PROJECT_ROOT` | Path to
|
|
159
|
-
| `
|
|
231
|
+
| `PROJECT_ROOT` | Path to a single codebase to index | git root of `cwd()` |
|
|
232
|
+
| `PROJECT_ROOTS` | Comma-separated paths for multi-repo projects | — |
|
|
233
|
+
| `DB_PATH` | Path to SQLite database file | `~/.codegraph/graphs/<project>.db` |
|
|
160
234
|
| `LOG_LEVEL` | Logging verbosity: debug, info, warn, error | `info` |
|
|
161
235
|
|
|
236
|
+
### Config Files
|
|
237
|
+
|
|
238
|
+
| File | Scope | Purpose |
|
|
239
|
+
|------|-------|---------|
|
|
240
|
+
| `.codegraph.json` | Project (check into git) | Define project roots, monorepo scoping |
|
|
241
|
+
| `~/.codegraph/config.json` | User | Personal multi-project setup |
|
|
242
|
+
|
|
162
243
|
---
|
|
163
244
|
|
|
164
245
|
## License
|
|
@@ -10,6 +10,7 @@ export interface SymbolInfo {
|
|
|
10
10
|
parentSymbolId?: number;
|
|
11
11
|
signature?: string;
|
|
12
12
|
isExported: boolean;
|
|
13
|
+
docstring?: string;
|
|
13
14
|
}
|
|
14
15
|
export interface ReferenceInfo {
|
|
15
16
|
fromSymbolId: number;
|
|
@@ -79,6 +80,21 @@ export declare class CodeGraph {
|
|
|
79
80
|
colEnd: number;
|
|
80
81
|
signature: string | null;
|
|
81
82
|
isExported: boolean;
|
|
83
|
+
docstring: string | null;
|
|
84
|
+
}>;
|
|
85
|
+
searchByDocstring(query: string, options?: {
|
|
86
|
+
kind?: string;
|
|
87
|
+
scope?: string;
|
|
88
|
+
limit?: number;
|
|
89
|
+
}): Array<{
|
|
90
|
+
name: string;
|
|
91
|
+
kind: string;
|
|
92
|
+
filePath: string;
|
|
93
|
+
lineStart: number;
|
|
94
|
+
lineEnd: number;
|
|
95
|
+
signature: string | null;
|
|
96
|
+
docstring: string | null;
|
|
97
|
+
isExported: boolean;
|
|
82
98
|
}>;
|
|
83
99
|
getReferences(symbolName: string, depth?: number): Array<{
|
|
84
100
|
fromSymbol: string;
|
package/dist/graph/code-graph.js
CHANGED
|
@@ -18,8 +18,8 @@ export class CodeGraph {
|
|
|
18
18
|
insertFile: this.db.prepare("INSERT INTO files (path, hash) VALUES (?, ?)"),
|
|
19
19
|
deleteSymbols: this.db.prepare("DELETE FROM symbols WHERE file_id = ?"),
|
|
20
20
|
deleteImports: this.db.prepare("DELETE FROM imports WHERE file_id = ?"),
|
|
21
|
-
insertSymbol: this.db.prepare(`INSERT INTO symbols (name, kind, file_id, line_start, line_end, col_start, col_end, parent_symbol_id, signature, is_exported)
|
|
22
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`),
|
|
21
|
+
insertSymbol: this.db.prepare(`INSERT INTO symbols (name, kind, file_id, line_start, line_end, col_start, col_end, parent_symbol_id, signature, is_exported, docstring)
|
|
22
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`),
|
|
23
23
|
updateParent: this.db.prepare("UPDATE symbols SET parent_symbol_id = ? WHERE id = ?"),
|
|
24
24
|
insertRef: this.db.prepare(`INSERT INTO references_ (from_symbol_id, to_symbol_name, to_symbol_bare_name, to_file_id, kind, line, col)
|
|
25
25
|
VALUES (?, ?, ?, ?, ?, ?, ?)`),
|
|
@@ -68,7 +68,7 @@ export class CodeGraph {
|
|
|
68
68
|
this.stmts.deleteImports.run(fileId);
|
|
69
69
|
}
|
|
70
70
|
insertSymbol(fileId, symbol) {
|
|
71
|
-
const result = this.stmts.insertSymbol.run(symbol.name, symbol.kind, fileId, symbol.lineStart, symbol.lineEnd, symbol.colStart, symbol.colEnd, symbol.parentSymbolId ?? null, symbol.signature ?? null, symbol.isExported ? 1 : 0);
|
|
71
|
+
const result = this.stmts.insertSymbol.run(symbol.name, symbol.kind, fileId, symbol.lineStart, symbol.lineEnd, symbol.colStart, symbol.colEnd, symbol.parentSymbolId ?? null, symbol.signature ?? null, symbol.isExported ? 1 : 0, symbol.docstring ?? null);
|
|
72
72
|
return result.lastInsertRowid;
|
|
73
73
|
}
|
|
74
74
|
insertReference(ref) {
|
|
@@ -175,7 +175,8 @@ export class CodeGraph {
|
|
|
175
175
|
const limit = query.limit ?? 50;
|
|
176
176
|
const sql = `
|
|
177
177
|
SELECT s.name, s.kind, f.path as filePath, s.line_start as lineStart, s.line_end as lineEnd,
|
|
178
|
-
s.col_start as colStart, s.col_end as colEnd, s.signature, s.is_exported as isExported
|
|
178
|
+
s.col_start as colStart, s.col_end as colEnd, s.signature, s.is_exported as isExported,
|
|
179
|
+
s.docstring
|
|
179
180
|
FROM symbols s
|
|
180
181
|
JOIN files f ON s.file_id = f.id
|
|
181
182
|
${where}
|
|
@@ -188,6 +189,31 @@ export class CodeGraph {
|
|
|
188
189
|
params.push(query.name ?? "", limit);
|
|
189
190
|
return this.db.prepare(sql).all(...params);
|
|
190
191
|
}
|
|
192
|
+
searchByDocstring(query, options) {
|
|
193
|
+
const conditions = ["s.docstring IS NOT NULL AND s.docstring LIKE ?"];
|
|
194
|
+
const params = [`%${query}%`];
|
|
195
|
+
if (options?.kind) {
|
|
196
|
+
conditions.push("s.kind = ?");
|
|
197
|
+
params.push(options.kind);
|
|
198
|
+
}
|
|
199
|
+
if (options?.scope) {
|
|
200
|
+
conditions.push("f.path LIKE ?");
|
|
201
|
+
params.push(`${options.scope}%`);
|
|
202
|
+
}
|
|
203
|
+
const limit = options?.limit ?? 50;
|
|
204
|
+
const where = `WHERE ${conditions.join(" AND ")}`;
|
|
205
|
+
const sql = `
|
|
206
|
+
SELECT s.name, s.kind, f.path as filePath, s.line_start as lineStart, s.line_end as lineEnd,
|
|
207
|
+
s.signature, s.docstring, s.is_exported as isExported
|
|
208
|
+
FROM symbols s
|
|
209
|
+
JOIN files f ON s.file_id = f.id
|
|
210
|
+
${where}
|
|
211
|
+
ORDER BY s.is_exported DESC, f.path
|
|
212
|
+
LIMIT ?
|
|
213
|
+
`;
|
|
214
|
+
params.push(limit);
|
|
215
|
+
return this.db.prepare(sql).all(...params);
|
|
216
|
+
}
|
|
191
217
|
getReferences(symbolName, depth = 1) {
|
|
192
218
|
if (depth < 1)
|
|
193
219
|
depth = 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-graph.js","sourceRoot":"","sources":["../../src/graph/code-graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"code-graph.js","sourceRoot":"","sources":["../../src/graph/code-graph.ts"],"names":[],"mappings":"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"}
|
package/dist/graph/schema.js
CHANGED
package/dist/graph/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/graph/schema.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEhC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/B,EAAE,CAAC,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/graph/schema.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEhC,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAE/B,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDP,CAAC,CAAC;IAEH,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
-
import path from "path";
|
|
5
|
-
import { initializeDatabase } from "./graph/schema.js";
|
|
6
|
-
import { CodeGraph } from "./graph/code-graph.js";
|
|
7
|
-
import { FileWatcher } from "./indexer/file-watcher.js";
|
|
8
4
|
// Language plugins — imported for side-effect (registration)
|
|
9
5
|
import "./indexer/lang-python.js";
|
|
10
6
|
import "./indexer/lang-go.js";
|
|
11
7
|
import "./indexer/lang-rust.js";
|
|
12
8
|
import "./indexer/lang-java.js";
|
|
9
|
+
import "./indexer/lang-cpp.js";
|
|
13
10
|
import { findSymbolTool, handleFindSymbol } from "./tools/find-symbol.js";
|
|
14
11
|
import { getReferencesTool, handleGetReferences } from "./tools/get-references.js";
|
|
15
12
|
import { getExportsTool, handleGetExports } from "./tools/get-exports.js";
|
|
@@ -24,37 +21,46 @@ import { findImplementationsTool, handleFindImplementations } from "./tools/find
|
|
|
24
21
|
import { semanticDiffTool, handleSemanticDiff } from "./tools/semantic-diff.js";
|
|
25
22
|
import { architectureDiagramTool, handleArchitectureDiagram } from "./tools/architecture-diagram.js";
|
|
26
23
|
import { naturalLanguageQueryTool, handleNaturalLanguageQuery } from "./tools/natural-language-query.js";
|
|
27
|
-
import {
|
|
24
|
+
import { searchCodebaseTool, handleSearchCodebase } from "./tools/search-codebase.js";
|
|
25
|
+
import { listProjectsTool, handleListProjects, switchProjectTool, handleSwitchProject, addProjectTool, handleAddProject, } from "./tools/project-tools.js";
|
|
26
|
+
import { ProjectManager } from "./project-manager.js";
|
|
28
27
|
import { logger } from "./utils/logger.js";
|
|
29
28
|
import { z } from "zod";
|
|
30
|
-
const PROJECT_ROOT = process.env.PROJECT_ROOT || process.cwd();
|
|
31
|
-
const DB_PATH = process.env.DB_PATH || path.join(PROJECT_ROOT, ".codegraph", "index.db");
|
|
32
29
|
async function main() {
|
|
33
|
-
//
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
// Initialize project manager (handles all config resolution)
|
|
31
|
+
const pm = new ProjectManager();
|
|
32
|
+
await pm.initialize();
|
|
33
|
+
const active = pm.active;
|
|
34
|
+
if (!active) {
|
|
35
|
+
logger.error("No valid project roots found. Set PROJECT_ROOT, PROJECT_ROOTS, or create .codegraph.json");
|
|
37
36
|
process.exit(1);
|
|
38
37
|
}
|
|
39
|
-
|
|
40
|
-
logger.error(`PROJECT_ROOT is not a directory: ${PROJECT_ROOT}`);
|
|
41
|
-
process.exit(1);
|
|
42
|
-
}
|
|
43
|
-
logger.info(`Starting mcp-codebase-intelligence for ${PROJECT_ROOT}`);
|
|
44
|
-
// Ensure DB directory exists
|
|
45
|
-
const { mkdirSync } = await import("fs");
|
|
46
|
-
mkdirSync(path.dirname(DB_PATH), { recursive: true });
|
|
47
|
-
// Initialize database and graph
|
|
48
|
-
const db = initializeDatabase(DB_PATH);
|
|
49
|
-
const graph = new CodeGraph(db);
|
|
50
|
-
const watcher = new FileWatcher(PROJECT_ROOT, graph);
|
|
38
|
+
const projectDesc = pm.listProjects().map(p => `${p.name}${p.active ? " (active)" : ""}: ${p.roots.join(", ")}`).join("; ");
|
|
51
39
|
// Create MCP server
|
|
52
40
|
const server = new McpServer({
|
|
53
41
|
name: "codebase-intelligence",
|
|
54
|
-
version: "0.
|
|
55
|
-
description: `Semantic code intelligence
|
|
42
|
+
version: "0.3.0",
|
|
43
|
+
description: `Semantic code intelligence. Projects: ${projectDesc}. Use list_projects to see all projects and switch_project to change context.`,
|
|
56
44
|
});
|
|
57
|
-
//
|
|
45
|
+
// Helper to get active graph/project (throws clear error if none)
|
|
46
|
+
function getActive() {
|
|
47
|
+
const a = pm.active;
|
|
48
|
+
if (!a)
|
|
49
|
+
throw new Error("No active project. Use list_projects and switch_project.");
|
|
50
|
+
return a;
|
|
51
|
+
}
|
|
52
|
+
// --- Project management tools ---
|
|
53
|
+
server.tool(listProjectsTool.name, listProjectsTool.description, {}, () => handleListProjects(pm));
|
|
54
|
+
server.tool(switchProjectTool.name, switchProjectTool.description, {
|
|
55
|
+
project_name: z.string().describe("Name of the project to switch to"),
|
|
56
|
+
}, (args) => handleSwitchProject(pm, args));
|
|
57
|
+
server.tool(addProjectTool.name, addProjectTool.description, {
|
|
58
|
+
project_name: z.string().describe("Name for the new project"),
|
|
59
|
+
root: z.string().optional().describe("Single root path (for a repo or monorepo)"),
|
|
60
|
+
roots: z.string().optional().describe("Comma-separated root paths (for multi-repo projects)"),
|
|
61
|
+
include: z.string().optional().describe("Comma-separated relative paths to include within root (for monorepo scoping)"),
|
|
62
|
+
}, (args) => handleAddProject(pm, args));
|
|
63
|
+
// --- Code navigation tools ---
|
|
58
64
|
server.tool(findSymbolTool.name, findSymbolTool.description, {
|
|
59
65
|
name: z.string().describe("Symbol name to search for (supports partial matching)"),
|
|
60
66
|
kind: z
|
|
@@ -63,26 +69,26 @@ async function main() {
|
|
|
63
69
|
.describe("Optional: filter by symbol kind"),
|
|
64
70
|
scope: z.string().optional().describe("Optional: limit search to files under this path prefix"),
|
|
65
71
|
limit: z.number().optional().describe("Maximum results to return (default: 20)"),
|
|
66
|
-
}, (args) => handleFindSymbol(graph, args));
|
|
72
|
+
}, (args) => handleFindSymbol(getActive().graph, args));
|
|
67
73
|
server.tool(getReferencesTool.name, getReferencesTool.description, {
|
|
68
74
|
symbol_name: z.string().describe("Name of the symbol to find references for"),
|
|
69
75
|
depth: z
|
|
70
76
|
.number()
|
|
71
77
|
.optional()
|
|
72
78
|
.describe("How many levels of transitive references to follow (1 = direct only, default: 1, max: 10)"),
|
|
73
|
-
}, (args) => handleGetReferences(graph, args));
|
|
79
|
+
}, (args) => handleGetReferences(getActive().graph, args));
|
|
74
80
|
server.tool(getExportsTool.name, getExportsTool.description, {
|
|
75
81
|
file_path: z.string().describe("Absolute path to the file to inspect"),
|
|
76
|
-
}, (args) => handleGetExports(graph, args));
|
|
82
|
+
}, (args) => handleGetExports(getActive().graph, args));
|
|
77
83
|
server.tool(getDependenciesTool.name, getDependenciesTool.description, {
|
|
78
84
|
file_path: z.string().describe("Absolute path to the file to inspect"),
|
|
79
85
|
depth: z
|
|
80
86
|
.number()
|
|
81
87
|
.optional()
|
|
82
88
|
.describe("How many levels of transitive dependencies to follow (default: 1, max: 5)"),
|
|
83
|
-
}, (args) => handleGetDependencies(graph, args));
|
|
84
|
-
server.tool(getStatsTool.name, getStatsTool.description, {}, () => handleGetStats(graph,
|
|
85
|
-
server.tool(reindexTool.name, reindexTool.description, {}, async () => handleReindex(watcher));
|
|
89
|
+
}, (args) => handleGetDependencies(getActive().graph, args));
|
|
90
|
+
server.tool(getStatsTool.name, getStatsTool.description, {}, () => handleGetStats(getActive().graph, pm.getPrimaryRoot() || undefined));
|
|
91
|
+
server.tool(reindexTool.name, reindexTool.description, {}, async () => handleReindex(getActive().watcher));
|
|
86
92
|
server.tool(analyzeChangeImpactTool.name, analyzeChangeImpactTool.description, {
|
|
87
93
|
file_path: z.string().describe("Absolute path to the file being modified"),
|
|
88
94
|
line_start: z.number().describe("Starting line number of the change (inclusive)"),
|
|
@@ -91,7 +97,7 @@ async function main() {
|
|
|
91
97
|
.number()
|
|
92
98
|
.optional()
|
|
93
99
|
.describe("How many levels of transitive dependents to follow (1 = direct only, default: 2, max: 10)"),
|
|
94
|
-
}, (args) => handleAnalyzeChangeImpact(graph, args));
|
|
100
|
+
}, (args) => handleAnalyzeChangeImpact(getActive().graph, args));
|
|
95
101
|
server.tool(getCallGraphTool.name, getCallGraphTool.description, {
|
|
96
102
|
function_name: z.string().describe("Name of the function to get the call graph for"),
|
|
97
103
|
direction: z
|
|
@@ -103,52 +109,49 @@ async function main() {
|
|
|
103
109
|
.enum(["tree", "mermaid"])
|
|
104
110
|
.optional()
|
|
105
111
|
.describe("Output format (default: tree)"),
|
|
106
|
-
}, (args) => handleGetCallGraph(graph, args));
|
|
107
|
-
//
|
|
108
|
-
const lspManager = new LspManager(PROJECT_ROOT);
|
|
112
|
+
}, (args) => handleGetCallGraph(getActive().graph, args));
|
|
113
|
+
// --- LSP-powered tools ---
|
|
109
114
|
server.tool(gotoDefinitionTool.name, gotoDefinitionTool.description, {
|
|
110
115
|
file_path: z.string().describe("Absolute path to the file"),
|
|
111
116
|
line: z.number().describe("Line number (1-based)"),
|
|
112
117
|
character: z.number().describe("Column number (0-based)"),
|
|
113
|
-
}, (args) => handleGotoDefinition(lspManager, args));
|
|
118
|
+
}, (args) => handleGotoDefinition(getActive().lspManager, args));
|
|
114
119
|
server.tool(getTypeInfoTool.name, getTypeInfoTool.description, {
|
|
115
120
|
file_path: z.string().describe("Absolute path to the file"),
|
|
116
121
|
line: z.number().describe("Line number (1-based)"),
|
|
117
122
|
character: z.number().describe("Column number (0-based)"),
|
|
118
|
-
}, (args) => handleGetTypeInfo(lspManager, args));
|
|
123
|
+
}, (args) => handleGetTypeInfo(getActive().lspManager, args));
|
|
119
124
|
server.tool(findImplementationsTool.name, findImplementationsTool.description, {
|
|
120
125
|
file_path: z.string().describe("Absolute path to the file containing the interface/abstract method"),
|
|
121
126
|
line: z.number().describe("Line number (1-based)"),
|
|
122
127
|
character: z.number().describe("Column number (0-based)"),
|
|
123
|
-
}, (args) => handleFindImplementations(lspManager, args));
|
|
128
|
+
}, (args) => handleFindImplementations(getActive().lspManager, args));
|
|
129
|
+
// --- Change analysis tools ---
|
|
124
130
|
server.tool(semanticDiffTool.name, semanticDiffTool.description, {
|
|
125
131
|
git_ref: z.string().optional().describe("Git ref to diff against (e.g. 'HEAD~1', 'HEAD~5', 'main', 'staged', 'unstaged'). Preferred over passing raw diff text."),
|
|
126
132
|
diff: z.string().optional().describe("Raw unified diff text. Only use if git_ref is not applicable."),
|
|
127
133
|
depth: z.number().optional().describe("Transitive dependency depth (default: 2, max: 5)"),
|
|
128
|
-
}, (args) => handleSemanticDiff(graph, args,
|
|
134
|
+
}, (args) => handleSemanticDiff(getActive().graph, args, pm.getPrimaryRoot() || undefined));
|
|
135
|
+
// --- Architecture & discovery tools ---
|
|
129
136
|
server.tool(architectureDiagramTool.name, architectureDiagramTool.description, {
|
|
130
137
|
scope: z.string().optional().describe("Optional: limit diagram to files under this path prefix"),
|
|
131
138
|
max_depth: z.number().optional().describe("Maximum directory nesting depth for subgraph grouping (default: 2)"),
|
|
132
139
|
format: z.enum(["mermaid", "text"]).optional().describe("Output format (default: mermaid)"),
|
|
133
|
-
}, (args) => handleArchitectureDiagram(graph, args,
|
|
140
|
+
}, (args) => handleArchitectureDiagram(getActive().graph, args, pm.getPrimaryRoot() || undefined));
|
|
134
141
|
server.tool(naturalLanguageQueryTool.name, naturalLanguageQueryTool.description, {
|
|
135
142
|
query: z.string().describe("Natural language question about the codebase"),
|
|
136
|
-
}, (args) => handleNaturalLanguageQuery(graph, args));
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
}).catch((err) => {
|
|
150
|
-
logger.warn("LSP startup failed (non-fatal)", err);
|
|
151
|
-
});
|
|
143
|
+
}, (args) => handleNaturalLanguageQuery(getActive().graph, args));
|
|
144
|
+
server.tool(searchCodebaseTool.name, searchCodebaseTool.description, {
|
|
145
|
+
query: z.string().describe("Text to search for in docstrings/comments"),
|
|
146
|
+
kind: z
|
|
147
|
+
.enum(["function", "class", "interface", "type", "variable", "method", "enum", "property"])
|
|
148
|
+
.optional()
|
|
149
|
+
.describe("Optional: filter by symbol kind"),
|
|
150
|
+
scope: z.string().optional().describe("Optional: limit search to files under this path prefix"),
|
|
151
|
+
limit: z.number().optional().describe("Maximum results to return (default: 20)"),
|
|
152
|
+
}, (args) => handleSearchCodebase(getActive().graph, args));
|
|
153
|
+
// --- Start indexing and MCP server ---
|
|
154
|
+
await pm.startAll();
|
|
152
155
|
// Start MCP server on stdio
|
|
153
156
|
const transport = new StdioServerTransport();
|
|
154
157
|
await server.connect(transport);
|
|
@@ -156,9 +159,7 @@ async function main() {
|
|
|
156
159
|
// Graceful shutdown
|
|
157
160
|
const shutdown = async () => {
|
|
158
161
|
logger.info("Shutting down...");
|
|
159
|
-
await
|
|
160
|
-
await lspManager.stop();
|
|
161
|
-
db.close();
|
|
162
|
+
await pm.shutdown();
|
|
162
163
|
process.exit(0);
|
|
163
164
|
};
|
|
164
165
|
process.on("SIGINT", shutdown);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import Parser from "tree-sitter";
|
|
2
|
+
export declare function getPrecedingComment(node: Parser.SyntaxNode): string | undefined;
|
|
3
|
+
/**
|
|
4
|
+
* Extract Python docstring — first expression_statement containing a string
|
|
5
|
+
* in the function/class body.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getPythonDocstring(node: Parser.SyntaxNode): string | undefined;
|