@nithin554/code-crawler 0.0.0 → 0.1.2

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 (42) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +221 -45
  3. package/dist/config.d.ts +13 -0
  4. package/dist/config.js +32 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/crawler.d.ts +46 -0
  7. package/dist/crawler.js +303 -0
  8. package/dist/crawler.js.map +1 -0
  9. package/dist/graph/queries.d.ts +111 -0
  10. package/dist/graph/queries.js +265 -0
  11. package/dist/graph/queries.js.map +1 -0
  12. package/dist/graph/schema.d.ts +63 -0
  13. package/dist/graph/schema.js +54 -0
  14. package/dist/graph/schema.js.map +1 -0
  15. package/dist/graph/store.d.ts +66 -0
  16. package/dist/graph/store.js +251 -0
  17. package/dist/graph/store.js.map +1 -0
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.js +133 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/parser/language.d.ts +111 -0
  22. package/dist/parser/language.js +13 -0
  23. package/dist/parser/language.js.map +1 -0
  24. package/dist/parser/languages/index.d.ts +5 -0
  25. package/dist/parser/languages/index.js +31 -0
  26. package/dist/parser/languages/index.js.map +1 -0
  27. package/dist/parser/languages/java.d.ts +10 -0
  28. package/dist/parser/languages/java.js +334 -0
  29. package/dist/parser/languages/java.js.map +1 -0
  30. package/dist/parser/treeSitter.d.ts +28 -0
  31. package/dist/parser/treeSitter.js +114 -0
  32. package/dist/parser/treeSitter.js.map +1 -0
  33. package/dist/resolver/javaResolver.d.ts +20 -0
  34. package/dist/resolver/javaResolver.js +253 -0
  35. package/dist/resolver/javaResolver.js.map +1 -0
  36. package/dist/resolver/types.d.ts +45 -0
  37. package/dist/resolver/types.js +80 -0
  38. package/dist/resolver/types.js.map +1 -0
  39. package/dist/server.d.ts +15 -0
  40. package/dist/server.js +282 -0
  41. package/dist/server.js.map +1 -0
  42. package/package.json +44 -7
package/dist/server.js ADDED
@@ -0,0 +1,282 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { z } from "zod";
3
+ import { NODE_KINDS, EDGE_KINDS } from "./graph/schema.js";
4
+ import { crawlProject } from "./crawler.js";
5
+ import { getCallers, getCallees, tracePath, getSubgraph, searchSymbols, suggestSymbols, } from "./graph/queries.js";
6
+ import { loadConfig } from "./config.js";
7
+ /**
8
+ * MCP server surface for code-crawler.
9
+ *
10
+ * Thin tool handlers: every tool delegates to the graph/queries/crawler layers
11
+ * and formats the result as JSON text. Line numbers are converted from the
12
+ * internal 0-based convention to 1-based for LLM consumption.
13
+ */
14
+ export const SERVER_NAME = "code-crawler";
15
+ export const SERVER_VERSION = "0.1.0";
16
+ export function createServer(store, config) {
17
+ const server = new McpServer({
18
+ name: SERVER_NAME,
19
+ version: SERVER_VERSION,
20
+ });
21
+ const text = (data) => ({
22
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
23
+ });
24
+ const line = (n) => typeof n === "number" ? n + 1 : undefined;
25
+ const ref = (s) => ({
26
+ id: s.id,
27
+ qualifiedName: s.qualifiedName,
28
+ name: s.name,
29
+ kind: s.kind,
30
+ filePath: s.filePath,
31
+ });
32
+ const notFound = (symbol) => {
33
+ const suggestions = suggestSymbols(store, symbol);
34
+ return text({
35
+ error: `symbol "${symbol}" not found in the index`,
36
+ suggestions: suggestions.map(ref),
37
+ hint: "Run crawl_project first, or use search_symbols for fuzzy lookup.",
38
+ });
39
+ };
40
+ // ------------------------------------------------------------------ tools
41
+ server.tool("crawl_project", "Index a project directory into the codebase graph. Idempotent: re-crawling refreshes the index; files that disappeared are removed. Returns counts of files, nodes, edges, and resolved/unresolved call sites.", {
42
+ path: z.string().describe("Absolute path to the project root directory to index."),
43
+ language: z
44
+ .string()
45
+ .optional()
46
+ .describe("Force a parser language (e.g. 'java'). Defaults to file-extension detection."),
47
+ fileFilter: z
48
+ .string()
49
+ .optional()
50
+ .describe("Optional substring filter: only index files whose path contains this string."),
51
+ }, async ({ path: projectPath, language, fileFilter }) => {
52
+ try {
53
+ const result = await crawlProject(store, projectPath, config.excludeDirs, {
54
+ language,
55
+ fileFilter,
56
+ });
57
+ return text({
58
+ ok: true,
59
+ ...result,
60
+ });
61
+ }
62
+ catch (err) {
63
+ return text({ ok: false, error: err.message });
64
+ }
65
+ });
66
+ server.tool("index_status", "Report the current state of the index: node/edge/file counts and the last crawl timestamp.", {}, async () => {
67
+ const stats = store.stats();
68
+ const projectPath = store.getMeta("last_project_path");
69
+ return text({ ok: true, ...stats, projectPath });
70
+ });
71
+ server.tool("search_symbols", "Fuzzy-lookup symbols (classes, methods, fields, files) by name or fully-qualified name. Use this to find the exact symbol id before tracing calls.", {
72
+ query: z.string().describe("Partial name or FQN, e.g. 'OrderService' or 'place'."),
73
+ kind: z
74
+ .enum(NODE_KINDS)
75
+ .optional()
76
+ .describe("Restrict results to a node kind (class, method, field, ...)."),
77
+ limit: z.number().int().min(1).max(200).optional().describe("Max results (default 50)."),
78
+ }, async ({ query, kind, limit }) => {
79
+ const results = searchSymbols(store, query, { kind, limit });
80
+ return text({
81
+ query,
82
+ count: results.length,
83
+ results: results.map(ref),
84
+ });
85
+ });
86
+ server.tool("get_node", "Get metadata and source location for a single symbol by id or qualified name.", {
87
+ qualified_name: z
88
+ .string()
89
+ .describe("Symbol id or qualified name, e.g. 'com.acme.OrderService#place'."),
90
+ }, async ({ qualified_name }) => {
91
+ const node = store.getNode(qualified_name) ?? store.getNodeByQualifiedName(qualified_name);
92
+ if (!node)
93
+ return notFound(qualified_name);
94
+ return text({
95
+ id: node.id,
96
+ kind: node.kind,
97
+ qualifiedName: node.qualifiedName,
98
+ filePath: node.filePath,
99
+ properties: {
100
+ ...node.properties,
101
+ startLine: line(node.properties.startLine),
102
+ endLine: line(node.properties.endLine),
103
+ },
104
+ });
105
+ });
106
+ server.tool("get_callers", "Find every symbol that calls the given symbol, directly or transitively (the call graph above it).", {
107
+ symbol: z.string().describe("Method/constructor id or qualified name."),
108
+ transitive: z.boolean().optional().describe("Include transitive callers (default true)."),
109
+ max_depth: z.number().int().min(1).max(50).optional().describe("Traversal depth cap."),
110
+ limit: z.number().int().min(1).max(500).optional().describe("Max callers returned."),
111
+ }, async ({ symbol, transitive, max_depth, limit }) => {
112
+ const result = getCallers(store, symbol, { transitive, maxDepth: max_depth, limit });
113
+ if (!result)
114
+ return notFound(symbol);
115
+ return text({
116
+ target: ref(result.target),
117
+ callers: result.callers.map((c) => ({
118
+ caller: ref(c.caller),
119
+ depth: c.depth,
120
+ callSiteLine: line(c.callSiteLine),
121
+ })),
122
+ });
123
+ });
124
+ server.tool("get_callees", "Find every symbol the given symbol calls, directly or transitively (the call graph below it).", {
125
+ symbol: z.string().describe("Method/constructor id or qualified name."),
126
+ transitive: z.boolean().optional().describe("Include transitive callees (default true)."),
127
+ max_depth: z.number().int().min(1).max(50).optional().describe("Traversal depth cap."),
128
+ limit: z.number().int().min(1).max(500).optional().describe("Max callees returned."),
129
+ }, async ({ symbol, transitive, max_depth, limit }) => {
130
+ const result = getCallees(store, symbol, { transitive, maxDepth: max_depth, limit });
131
+ if (!result)
132
+ return notFound(symbol);
133
+ return text({
134
+ source: ref(result.source),
135
+ callees: result.callees.map((c) => ({
136
+ callee: ref(c.callee),
137
+ depth: c.depth,
138
+ callSiteLine: line(c.callSiteLine),
139
+ })),
140
+ });
141
+ });
142
+ server.tool("trace_path", "Find static call paths between two symbols. Paths follow CALLS edges; shortest paths are returned first.", {
143
+ source: z.string().describe("Starting symbol id or qualified name."),
144
+ target: z.string().describe("Destination symbol id or qualified name."),
145
+ max_depth: z.number().int().min(1).max(50).optional().describe("Maximum path length."),
146
+ limit: z.number().int().min(1).max(100).optional().describe("Max paths returned (default 10)."),
147
+ }, async ({ source, target, max_depth, limit }) => {
148
+ const paths = tracePath(store, source, target, { maxDepth: max_depth, limit });
149
+ if (!paths)
150
+ return notFound(source);
151
+ return text({
152
+ source,
153
+ target,
154
+ pathCount: paths.length,
155
+ paths: paths.map((p) => ({
156
+ length: p.length,
157
+ path: p.path,
158
+ })),
159
+ });
160
+ });
161
+ server.tool("get_subgraph", "Extract the neighborhood around a symbol across any edge kinds — for visualization and understanding the local shape of the graph.", {
162
+ symbol: z.string().describe("Center symbol id or qualified name."),
163
+ radius: z.number().int().min(1).max(6).optional().describe("Hop radius (default 2)."),
164
+ edge_kinds: z
165
+ .array(z.enum(EDGE_KINDS))
166
+ .optional()
167
+ .describe("Restrict which edge kinds to follow."),
168
+ limit: z.number().int().min(1).max(2000).optional().describe("Max nodes in the subgraph."),
169
+ }, async ({ symbol, radius, edge_kinds, limit }) => {
170
+ const result = getSubgraph(store, symbol, { radius, edgeKinds: edge_kinds, limit });
171
+ if (!result.center)
172
+ return notFound(symbol);
173
+ return text({
174
+ center: ref(result.center),
175
+ nodeCount: result.nodes.length,
176
+ nodes: result.nodes.map(ref),
177
+ edges: result.edges.map((e) => ({
178
+ ...e,
179
+ callSiteLine: line(e.callSiteLine),
180
+ })),
181
+ });
182
+ });
183
+ server.tool("get_schema", "Describe the property-graph model: node kinds, edge kinds, and the id scheme.", {}, async () => {
184
+ return text({
185
+ nodeKinds: NODE_KINDS,
186
+ edgeKinds: EDGE_KINDS,
187
+ idScheme: {
188
+ type: "com.acme.Foo",
189
+ method: "com.acme.Foo#run",
190
+ constructor: "com.acme.Foo#<init>",
191
+ field: "com.acme.Foo$repo",
192
+ import: "__import__:com.acme.Foo",
193
+ unknown: "__unknown__:System.out.println",
194
+ },
195
+ lineNumbers: "1-based in tool output",
196
+ });
197
+ });
198
+ server.tool("clear_index", "Wipe the entire graph database. Use with caution — you must crawl_project again afterwards.", {}, async () => {
199
+ store.clearAll();
200
+ return text({ ok: true, cleared: true });
201
+ });
202
+ // ------------------------------------------------------------- resources
203
+ server.registerResource("graph-schema", "codecrawler://schema", {
204
+ title: "Graph schema",
205
+ description: "Node and edge kinds used by the codebase property graph.",
206
+ }, async () => ({
207
+ contents: [
208
+ {
209
+ uri: "codecrawler://schema",
210
+ text: JSON.stringify({
211
+ nodeKinds: NODE_KINDS,
212
+ edgeKinds: EDGE_KINDS,
213
+ idScheme: {
214
+ type: "com.acme.Foo",
215
+ method: "com.acme.Foo#run",
216
+ constructor: "com.acme.Foo#<init>",
217
+ field: "com.acme.Foo$repo",
218
+ import: "__import__:com.acme.Foo",
219
+ unknown: "__unknown__:System.out.println",
220
+ },
221
+ }, null, 2),
222
+ },
223
+ ],
224
+ }));
225
+ server.registerResource("index-status", "codecrawler://status", {
226
+ title: "Index status",
227
+ description: "Current index summary (nodes, edges, files, last crawl).",
228
+ }, async () => {
229
+ const stats = store.stats();
230
+ return {
231
+ contents: [
232
+ {
233
+ uri: "codecrawler://status",
234
+ text: JSON.stringify({
235
+ ...stats,
236
+ projectPath: store.getMeta("last_project_path"),
237
+ }, null, 2),
238
+ },
239
+ ],
240
+ };
241
+ });
242
+ // --------------------------------------------------------------- prompts
243
+ server.prompt("trace-call-path", "Given two symbols, trace every static call path between them.", {
244
+ from: z.string().describe("Starting symbol"),
245
+ to: z.string().describe("Destination symbol"),
246
+ }, async ({ from, to }) => {
247
+ const paths = tracePath(store, from, to, { limit: 10 });
248
+ if (!paths || paths.length === 0) {
249
+ return {
250
+ messages: [
251
+ {
252
+ role: "assistant",
253
+ content: {
254
+ type: "text",
255
+ text: `No static call path was found from \`${from}\` to \`${to}\`. ` +
256
+ `Use \`search_symbols\` to confirm both symbols exist, and ` +
257
+ `\`get_subgraph\` on each to inspect their neighborhoods.`,
258
+ },
259
+ },
260
+ ],
261
+ };
262
+ }
263
+ return {
264
+ messages: [
265
+ {
266
+ role: "assistant",
267
+ content: {
268
+ type: "text",
269
+ text: `Here are the static call paths from \`${from}\` to \`${to}\`:\n\n` +
270
+ paths
271
+ .map((p, i) => `${i + 1}. ${p.path.join(" -> ")}`)
272
+ .join("\n") +
273
+ `\n\nUse \`get_callers\` or \`get_callees\` on intermediate symbols to explore further.`,
274
+ },
275
+ },
276
+ ],
277
+ };
278
+ });
279
+ return server;
280
+ }
281
+ export { loadConfig };
282
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,47 @@
1
1
  {
2
2
  "name": "@nithin554/code-crawler",
3
- "version": "0.0.0",
4
- "description": "OIDC trusted publishing setup package for @nithin554/code-crawler",
5
- "keywords": [
6
- "oidc",
7
- "trusted-publishing",
8
- "setup"
9
- ]
3
+ "version": "0.1.2",
4
+ "description": "Static call tracing MCP server backed by a SQLite property graph of your codebase",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "homepage": "https://github.com/nithin554/code-crawler#readme",
8
+ "bugs": {
9
+ "url": "https://github.com/nithin554/code-crawler/issues"
10
+ },
11
+ "bin": {
12
+ "codecrawler": "dist/index.js"
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "engines": {
18
+ "node": ">=20"
19
+ },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/nithin554/code-crawler.git"
23
+ },
24
+ "scripts": {
25
+ "build": "tsc -p tsconfig.json",
26
+ "typecheck": "tsc --noEmit",
27
+ "dev": "tsx src/index.ts",
28
+ "serve": "tsx src/index.ts serve",
29
+ "start": "node dist/index.js",
30
+ "test": "vitest run",
31
+ "test:watch": "vitest",
32
+ "prepublishOnly": "npm run typecheck && npm run build"
33
+ },
34
+ "dependencies": {
35
+ "@modelcontextprotocol/sdk": "^1.30.0",
36
+ "better-sqlite3": "^13.0.3",
37
+ "tree-sitter-java": "^0.23.5",
38
+ "web-tree-sitter": "^0.26.12"
39
+ },
40
+ "devDependencies": {
41
+ "@types/better-sqlite3": "^7.6.0",
42
+ "@types/node": "^24.0.0",
43
+ "tsx": "^4.19.0",
44
+ "typescript": "^5.8.0",
45
+ "vitest": "^3.2.0"
46
+ }
10
47
  }