mcp-code-context 3.6.3 → 3.7.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/CHANGELOG.md +149 -278
- package/INSTRUCTIONS.md +23 -9
- package/README.md +217 -97
- package/SECURITY.md +55 -21
- package/dist/src/core/cacheManager.d.ts +4 -5
- package/dist/src/core/cacheManager.js +49 -33
- package/dist/src/core/cacheManager.js.map +1 -1
- package/dist/src/core/engine.d.ts +1 -1
- package/dist/src/core/engine.js +3 -3
- package/dist/src/core/engine.js.map +1 -1
- package/dist/src/core/indexManager.d.ts +58 -0
- package/dist/src/core/indexManager.js +252 -0
- package/dist/src/core/indexManager.js.map +1 -0
- package/dist/src/core/indexManagerQueries.d.ts +14 -0
- package/dist/src/core/indexManagerQueries.js +95 -0
- package/dist/src/core/indexManagerQueries.js.map +1 -0
- package/dist/src/core/sessionManager.d.ts +117 -0
- package/dist/src/core/sessionManager.js +231 -0
- package/dist/src/core/sessionManager.js.map +1 -0
- package/dist/src/core/validator.d.ts +1 -1
- package/dist/src/core/validator.js +18 -10
- package/dist/src/core/validator.js.map +1 -1
- package/dist/src/index.d.ts +1 -13
- package/dist/src/index.js +25 -999
- package/dist/src/index.js.map +1 -1
- package/dist/src/operations/astTransform.d.ts +38 -0
- package/dist/src/operations/astTransform.js +239 -0
- package/dist/src/operations/astTransform.js.map +1 -0
- package/dist/src/operations/compress.d.ts +5 -3
- package/dist/src/operations/compress.js +73 -7
- package/dist/src/operations/compress.js.map +1 -1
- package/dist/src/operations/confirmationStore.d.ts +35 -8
- package/dist/src/operations/confirmationStore.js +112 -14
- package/dist/src/operations/confirmationStore.js.map +1 -1
- package/dist/src/operations/impactAnalysis.d.ts +9 -0
- package/dist/src/operations/impactAnalysis.js +61 -0
- package/dist/src/operations/impactAnalysis.js.map +1 -0
- package/dist/src/operations/pendingStore.d.ts +51 -0
- package/dist/src/operations/pendingStore.js +201 -0
- package/dist/src/operations/pendingStore.js.map +1 -0
- package/dist/src/operations/pendingStoreInit.d.ts +6 -0
- package/dist/src/operations/pendingStoreInit.js +42 -0
- package/dist/src/operations/pendingStoreInit.js.map +1 -0
- package/dist/src/operations/read.d.ts +6 -92
- package/dist/src/operations/read.js +4 -449
- package/dist/src/operations/read.js.map +1 -1
- package/dist/src/operations/readCore.d.ts +33 -0
- package/dist/src/operations/readCore.js +142 -0
- package/dist/src/operations/readCore.js.map +1 -0
- package/dist/src/operations/rename.d.ts +13 -0
- package/dist/src/operations/rename.js +130 -0
- package/dist/src/operations/rename.js.map +1 -0
- package/dist/src/operations/searchOperation.d.ts +16 -0
- package/dist/src/operations/searchOperation.js +113 -0
- package/dist/src/operations/searchOperation.js.map +1 -0
- package/dist/src/operations/symbolQuery.d.ts +38 -0
- package/dist/src/operations/symbolQuery.js +194 -0
- package/dist/src/operations/symbolQuery.js.map +1 -0
- package/dist/src/operations/write.d.ts +11 -14
- package/dist/src/operations/write.js +6 -125
- package/dist/src/operations/write.js.map +1 -1
- package/dist/src/parsers/base.d.ts +1 -1
- package/dist/src/parsers/base.js +1 -1
- package/dist/src/parsers/csharp.d.ts +12 -0
- package/dist/src/parsers/csharp.js +67 -0
- package/dist/src/parsers/csharp.js.map +1 -0
- package/dist/src/parsers/dartTreeSitter.d.ts +1 -1
- package/dist/src/parsers/dartTreeSitter.js +1 -1
- package/dist/src/parsers/go.d.ts +11 -0
- package/dist/src/parsers/go.js +74 -0
- package/dist/src/parsers/go.js.map +1 -0
- package/dist/src/parsers/java.d.ts +12 -0
- package/dist/src/parsers/java.js +62 -0
- package/dist/src/parsers/java.js.map +1 -0
- package/dist/src/parsers/kotlin.d.ts +12 -0
- package/dist/src/parsers/kotlin.js +75 -0
- package/dist/src/parsers/kotlin.js.map +1 -0
- package/dist/src/parsers/php.d.ts +1 -1
- package/dist/src/parsers/php.js +1 -1
- package/dist/src/parsers/python.d.ts +1 -1
- package/dist/src/parsers/python.js +1 -1
- package/dist/src/parsers/registry.d.ts +1 -1
- package/dist/src/parsers/registry.js +63 -2
- package/dist/src/parsers/registry.js.map +1 -1
- package/dist/src/parsers/ruby.d.ts +12 -0
- package/dist/src/parsers/ruby.js +73 -0
- package/dist/src/parsers/ruby.js.map +1 -0
- package/dist/src/parsers/rust.d.ts +12 -0
- package/dist/src/parsers/rust.js +66 -0
- package/dist/src/parsers/rust.js.map +1 -0
- package/dist/src/parsers/typescript.d.ts +1 -1
- package/dist/src/parsers/typescript.js +28 -38
- package/dist/src/parsers/typescript.js.map +1 -1
- package/dist/src/tools/adminHandlers.d.ts +67 -0
- package/dist/src/tools/adminHandlers.js +129 -0
- package/dist/src/tools/adminHandlers.js.map +1 -0
- package/dist/src/tools/context.d.ts +9 -0
- package/dist/src/tools/context.js +21 -0
- package/dist/src/tools/context.js.map +1 -0
- package/dist/src/tools/handlers.d.ts +4 -0
- package/dist/src/tools/handlers.js +5 -0
- package/dist/src/tools/handlers.js.map +1 -0
- package/dist/src/tools/pipeline.d.ts +6 -0
- package/dist/src/tools/pipeline.js +100 -0
- package/dist/src/tools/pipeline.js.map +1 -0
- package/dist/src/tools/readHandlers.d.ts +55 -0
- package/dist/src/tools/readHandlers.js +220 -0
- package/dist/src/tools/readHandlers.js.map +1 -0
- package/dist/src/tools/toolDefinitions.d.ts +1037 -0
- package/dist/src/tools/toolDefinitions.js +13 -0
- package/dist/src/tools/toolDefinitions.js.map +1 -0
- package/dist/src/tools/toolDefinitionsAdmin.d.ts +89 -0
- package/dist/src/tools/toolDefinitionsAdmin.js +99 -0
- package/dist/src/tools/toolDefinitionsAdmin.js.map +1 -0
- package/dist/src/tools/toolDefinitionsCore.d.ts +949 -0
- package/dist/src/tools/toolDefinitionsCore.js +267 -0
- package/dist/src/tools/toolDefinitionsCore.js.map +1 -0
- package/dist/src/tools/writeHandlers.d.ts +37 -0
- package/dist/src/tools/writeHandlers.js +199 -0
- package/dist/src/tools/writeHandlers.js.map +1 -0
- package/dist/src/utils/appDir.d.ts +19 -0
- package/dist/src/utils/appDir.js +50 -0
- package/dist/src/utils/appDir.js.map +1 -0
- package/dist/src/utils/auditLogWriter.d.ts +9 -0
- package/dist/src/utils/auditLogWriter.js +49 -0
- package/dist/src/utils/auditLogWriter.js.map +1 -0
- package/dist/src/utils/auditLogger.d.ts +1 -10
- package/dist/src/utils/auditLogger.js +14 -109
- package/dist/src/utils/auditLogger.js.map +1 -1
- package/dist/src/utils/auditQuery.d.ts +23 -0
- package/dist/src/utils/auditQuery.js +67 -0
- package/dist/src/utils/auditQuery.js.map +1 -0
- package/dist/src/utils/backupManager.d.ts +2 -2
- package/dist/src/utils/backupManager.js +29 -12
- package/dist/src/utils/backupManager.js.map +1 -1
- package/dist/src/utils/constants.d.ts +1 -1
- package/dist/src/utils/constants.js +8 -1
- package/dist/src/utils/constants.js.map +1 -1
- package/dist/src/utils/diff.d.ts +12 -1
- package/dist/src/utils/diff.js +41 -1
- package/dist/src/utils/diff.js.map +1 -1
- package/dist/src/utils/fileLock.d.ts +7 -2
- package/dist/src/utils/fileLock.js +14 -11
- package/dist/src/utils/fileLock.js.map +1 -1
- package/dist/src/utils/fileWalker.d.ts +1 -1
- package/dist/src/utils/fileWalker.js +1 -1
- package/dist/src/utils/fileWatcher.d.ts +1 -1
- package/dist/src/utils/fileWatcher.js +1 -1
- package/dist/src/utils/fuzzySearch.d.ts +1 -1
- package/dist/src/utils/fuzzySearch.js +1 -1
- package/dist/src/utils/logger.d.ts +1 -1
- package/dist/src/utils/logger.js +2 -2
- package/dist/src/utils/logger.js.map +1 -1
- package/dist/src/utils/rateLimiter.d.ts +9 -1
- package/dist/src/utils/rateLimiter.js +12 -1
- package/dist/src/utils/rateLimiter.js.map +1 -1
- package/dist/src/utils/regexValidator.d.ts +12 -0
- package/dist/src/utils/regexValidator.js +48 -0
- package/dist/src/utils/regexValidator.js.map +1 -0
- package/dist/src/utils/safeRegex.d.ts +2 -92
- package/dist/src/utils/safeRegex.js +41 -222
- package/dist/src/utils/safeRegex.js.map +1 -1
- package/dist/src/utils/safeRegexApi.d.ts +56 -0
- package/dist/src/utils/safeRegexApi.js +99 -0
- package/dist/src/utils/safeRegexApi.js.map +1 -0
- package/dist/src/utils/safeRegexPool.d.ts +7 -0
- package/dist/src/utils/safeRegexPool.js +102 -0
- package/dist/src/utils/safeRegexPool.js.map +1 -0
- package/dist/src/utils/searchTools.js +6 -6
- package/dist/src/utils/searchTools.js.map +1 -1
- package/dist/src/utils/streaming.d.ts +4 -3
- package/dist/src/utils/streaming.js +1 -1
- package/dist/src/utils/streaming.js.map +1 -1
- package/dist/src/utils/telemetry.d.ts +1 -1
- package/dist/src/utils/telemetry.js +1 -1
- package/dist/src/utils/toctou.d.ts +7 -0
- package/dist/src/utils/toctou.js +24 -0
- package/dist/src/utils/toctou.js.map +1 -0
- package/llms.txt +173 -21
- package/package.json +2 -2
- package/scripts/replace-version.js +0 -59
|
@@ -6,11 +6,11 @@ import { spawn } from 'child_process';
|
|
|
6
6
|
import { createInterface } from 'readline';
|
|
7
7
|
import { logger } from './logger.js';
|
|
8
8
|
const SEARCH_TOOLS = [
|
|
9
|
-
{ name: 'rg', args: (pattern, dir) => ['--json', pattern, dir] },
|
|
10
|
-
{ name: 'ugrep', args: (pattern, dir) => ['--json', pattern, dir] },
|
|
11
|
-
{ name: 'ag', args: (pattern, dir) => ['--json', pattern, dir] },
|
|
9
|
+
{ name: 'rg', args: (pattern, dir) => ['--json', '--', pattern, dir] },
|
|
10
|
+
{ name: 'ugrep', args: (pattern, dir) => ['--json', '--', pattern, dir] },
|
|
11
|
+
{ name: 'ag', args: (pattern, dir) => ['--json', '--', pattern, dir] },
|
|
12
12
|
{ name: 'findstr', args: (pattern, dir) => ['/S', '/N', pattern, `${dir}\\*`] },
|
|
13
|
-
{ name: 'grep', args: (pattern, dir) => ['-rn', pattern, dir] },
|
|
13
|
+
{ name: 'grep', args: (pattern, dir) => ['-rn', '--', pattern, dir] },
|
|
14
14
|
];
|
|
15
15
|
async function detectTool() {
|
|
16
16
|
for (const tool of SEARCH_TOOLS) {
|
|
@@ -26,7 +26,7 @@ async function detectTool() {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
catch {
|
|
29
|
-
continue;
|
|
29
|
+
continue; // Binary not installed — try next search tool
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
return null;
|
|
@@ -72,7 +72,7 @@ export async function searchWithNativeTool(pattern, dir, maxResults = 10, timeou
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
catch {
|
|
75
|
-
continue;
|
|
75
|
+
continue; // Non-match JSON line from search tool output (summary, begin/end markers)
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchTools.js","sourceRoot":"","sources":["../../../src/utils/searchTools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAQrC,MAAM,YAAY,GAAG;IACnB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,OAAe,EAAE,GAAW,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"searchTools.js","sourceRoot":"","sources":["../../../src/utils/searchTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* File Streaming - v3.
|
|
2
|
+
* File Streaming - v3.7.1
|
|
3
3
|
* Stream large files in chunks to avoid memory exhaustion
|
|
4
4
|
*/
|
|
5
|
+
import type { BaseParser, SymbolInfo } from "../parsers/base.js";
|
|
5
6
|
export interface StreamOptions {
|
|
6
7
|
chunkSize?: number;
|
|
7
8
|
maxSize?: number;
|
|
@@ -28,9 +29,9 @@ export declare function streamLines(filePath: string, callback: (line: string, l
|
|
|
28
29
|
/**
|
|
29
30
|
* Stream and parse large file with AST (chunked)
|
|
30
31
|
*/
|
|
31
|
-
export declare function streamParseFile(filePath: string, parser:
|
|
32
|
+
export declare function streamParseFile(filePath: string, parser: BaseParser, options?: StreamOptions): Promise<{
|
|
32
33
|
success: boolean;
|
|
33
|
-
symbols?:
|
|
34
|
+
symbols?: SymbolInfo[];
|
|
34
35
|
error?: string;
|
|
35
36
|
}>;
|
|
36
37
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../../src/utils/streaming.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../../src/utils/streaming.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TOCTOU helpers — verify file integrity between Phase 1 and Phase 2
|
|
3
|
+
*/
|
|
4
|
+
import { SecurityValidator } from "../core/validator.js";
|
|
5
|
+
import type { ConfirmationStore } from "../operations/confirmationStore.js";
|
|
6
|
+
export declare function verifyFileUnchanged(validator: SecurityValidator, filePath: string, expectedHash: string | undefined): Promise<string>;
|
|
7
|
+
export declare function assertNoPendingWriteConflict(confirmationStore: ConfirmationStore, filePath: string): void;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TOCTOU helpers — verify file integrity between Phase 1 and Phase 2
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "node:fs/promises";
|
|
5
|
+
import * as crypto from "node:crypto";
|
|
6
|
+
export async function verifyFileUnchanged(validator, filePath, expectedHash) {
|
|
7
|
+
const validation = await validator.validateFilePath(filePath);
|
|
8
|
+
if (!validation.valid)
|
|
9
|
+
throw new Error(validation.error);
|
|
10
|
+
if (expectedHash) {
|
|
11
|
+
const currentContent = await fs.readFile(validation.resolvedPath, "utf-8");
|
|
12
|
+
const currentHash = crypto.createHash("sha256").update(currentContent).digest("hex");
|
|
13
|
+
if (currentHash !== expectedHash) {
|
|
14
|
+
throw new Error(`File "${filePath}" was modified by another process after Phase 1. Please repeat the operation to prevent data loss.`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return validation.resolvedPath;
|
|
18
|
+
}
|
|
19
|
+
export function assertNoPendingWriteConflict(confirmationStore, filePath) {
|
|
20
|
+
if (confirmationStore.hasConflictingPending(filePath)) {
|
|
21
|
+
throw new Error(`A pending write exists for "${filePath}". Complete or cancel Phase 2 before reading to avoid stale content.`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=toctou.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toctou.js","sourceRoot":"","sources":["../../../src/utils/toctou.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAItC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAA4B,EAC5B,QAAgB,EAChB,YAAgC;IAEhC,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC9D,IAAI,CAAC,UAAU,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAEzD,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAa,EAAE,OAAO,CAAC,CAAC;QAC5E,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrF,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,SAAS,QAAQ,oGAAoG,CACtH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC,YAAa,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,iBAAoC,EACpC,QAAgB;IAEhB,IAAI,iBAAiB,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CACb,+BAA+B,QAAQ,sEAAsE,CAC9G,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/llms.txt
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
# mcp-code-context v3.
|
|
1
|
+
# mcp-code-context v3.7.1
|
|
2
2
|
|
|
3
|
-
> A Model Context Protocol (MCP) server with **Tree-sitter WASM parsers** for 100% AST accuracy. Zero native dependencies. Production-ready with middleware pipeline.
|
|
3
|
+
> A Model Context Protocol (MCP) server with **Tree-sitter WASM parsers** for 100% AST accuracy. Zero native dependencies. Production-ready with middleware pipeline, session-scoped state, and crash recovery.
|
|
4
4
|
|
|
5
|
-
## What's New in v3.
|
|
5
|
+
## What's New in v3.7.1
|
|
6
|
+
|
|
7
|
+
🚀 **CRITICAL FIXES - Production Readiness Release**:
|
|
8
|
+
- ✅ **Session-scoped state**: Each MCP client gets isolated locks, confirmation store, rate limiter (no state leakage)
|
|
9
|
+
- ✅ **Crash recovery**: SQLite-backed pending operations store - survive restarts
|
|
10
|
+
- ✅ **Expanded ReDoS protection**: 15+ patterns (was 6) - better security
|
|
11
|
+
- ✅ **Auto-persist before eviction**: CacheManager now persists before LRU eviction
|
|
12
|
+
- ✅ **Higher file limits**: MAX_FILES_REPO_MAP = 2000 (was 500)
|
|
13
|
+
- ✅ **Multi-client tests**: New integration tests for concurrent MCP clients
|
|
14
|
+
|
|
15
|
+
## What's New in v3.7.1 (Previously Added)
|
|
6
16
|
|
|
7
|
-
🚀 **LLM Agent Experience Release**:
|
|
8
17
|
- ✅ 4 new tools: `search_symbols`, `explain_symbol`, `batch_read`, `get_rate_limit_status`
|
|
9
18
|
- ✅ `diffFormat` parameter on all write tools (`unified`, `compact`, `summary`, `none`)
|
|
10
19
|
- ✅ Phase 2 no longer requires `newContent`/`code` — server stores content from Phase 1
|
|
@@ -138,15 +147,17 @@ This MCP server solves two problems:
|
|
|
138
147
|
- `steps` (optional): Number of versions to go back (1-5, default: 1).
|
|
139
148
|
**What it does:** Reverts the file to the state it was in before the last 1-5 modifications.
|
|
140
149
|
|
|
141
|
-
### Write Tools (v3.
|
|
150
|
+
### Write Tools (v3.7.1 Two-Phase Workflow)
|
|
142
151
|
|
|
143
152
|
All write tools follow a **Two-Phase Workflow**:
|
|
144
153
|
1. **Phase 1 (Preview)**: Call without a token to get a unified `diff` and a `confirmationToken`.
|
|
145
154
|
2. **Phase 2 (Apply)**: Call with `confirmationToken` and `confirm: true` to apply the changes.
|
|
146
155
|
|
|
147
|
-
**Important Notes (v3.
|
|
156
|
+
**Important Notes (v3.7.1):**
|
|
148
157
|
- ✅ **Windows CRLF Support**: Fully resolved. All operations work correctly on Windows files with CRLF line endings.
|
|
149
158
|
- ✅ **Parameter Brace Handling**: Methods with braces in parameters (e.g., `{int? cart}`) are now handled correctly.
|
|
159
|
+
- ✅ **Session-scoped state**: Each MCP client gets isolated state (locks, confirmation store, rate limiter).
|
|
160
|
+
- ✅ **Crash recovery**: Pending operations survive server restarts via SQLite.
|
|
150
161
|
|
|
151
162
|
#### 7. `write_file_surgical`
|
|
152
163
|
**Purpose:** Replace the full source code of a named symbol in a file.
|
|
@@ -223,51 +234,164 @@ All write tools follow a **Two-Phase Workflow**:
|
|
|
223
234
|
|
|
224
235
|
**Best used when:** Cleaning up deprecated functions or unused code.
|
|
225
236
|
|
|
226
|
-
##
|
|
237
|
+
## New Tools (v3.7.1)
|
|
227
238
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
239
|
+
#### 11. `get_session_stats`
|
|
240
|
+
**Purpose:** Get statistics for the current MCP client session.
|
|
241
|
+
|
|
242
|
+
**Input:** None.
|
|
243
|
+
|
|
244
|
+
**Returns:**
|
|
245
|
+
- `pendingOperations`: Count of pending operations for this session
|
|
246
|
+
- `locksHeld`: Number of file locks currently held
|
|
247
|
+
- `rateLimiterTokens`: Current token balance for this session
|
|
248
|
+
|
|
249
|
+
**Best used when:** Diagnosing session-specific issues or understanding your client's resource usage.
|
|
250
|
+
|
|
251
|
+
#### 12. `clear_session_cache`
|
|
252
|
+
**Purpose:** Clear the cache for the current MCP client session only.
|
|
253
|
+
|
|
254
|
+
**Input:** None.
|
|
255
|
+
|
|
256
|
+
**Returns:** `cacheEntriesCleared` - Number of cache entries removed.
|
|
257
|
+
|
|
258
|
+
**Best used when:** You want to reset your client's cache without affecting other MCP clients.
|
|
259
|
+
|
|
260
|
+
#### 13. `list_pending_operations`
|
|
261
|
+
**Purpose:** List all pending operations (for recovery after crash).
|
|
262
|
+
|
|
263
|
+
**Input:** None.
|
|
264
|
+
|
|
265
|
+
**Returns:** Array of pending operations with tokens, file paths, and timestamps.
|
|
266
|
+
|
|
267
|
+
**Best used when:** Recovering work after a server crash.
|
|
234
268
|
|
|
235
|
-
|
|
269
|
+
## Previously Added Tools (v3.7.1)
|
|
236
270
|
|
|
237
|
-
####
|
|
271
|
+
#### 14. `parse_file`
|
|
238
272
|
**Purpose:** Parse a file using Tree-sitter and extract all symbols.
|
|
239
273
|
**Input:** `filePath` (required), `projectRoot` (required).
|
|
240
274
|
**Returns:** JSON array of all symbols with type, name, `startLine`, and `endLine`.
|
|
241
275
|
|
|
242
|
-
####
|
|
276
|
+
#### 15. `clean_backups`
|
|
243
277
|
**Purpose:** Remove all backup files for a project.
|
|
244
278
|
**Input:** `projectRoot` (required).
|
|
245
279
|
|
|
246
|
-
####
|
|
280
|
+
#### 16. `get_server_stats`
|
|
247
281
|
**Purpose:** Get server telemetry, audit statistics, and health metrics.
|
|
248
282
|
**Input:** None.
|
|
249
283
|
**Returns:** Pending confirmations, rate limiter token balance, operation costs, and operational metrics.
|
|
250
284
|
|
|
251
|
-
####
|
|
285
|
+
#### 17. `search_symbols`
|
|
252
286
|
**Purpose:** Search symbols by name across the repo using AST (not text search).
|
|
253
287
|
**Input:** `rootDir` (required), `projectRoot` (required), `query` (required), `types` (optional), `fuzzy` (optional), `fileExtensions` (optional), `maxResults` (optional).
|
|
254
288
|
**Returns:** Matching symbols with file path, line numbers, and type.
|
|
255
289
|
|
|
256
|
-
####
|
|
290
|
+
#### 18. `explain_symbol`
|
|
257
291
|
**Purpose:** Get signature, location, and callers of a symbol in one call.
|
|
258
292
|
**Input:** `filePath` (required), `projectRoot` (required), `symbolName` (required), `className` (optional), `rootDir` (optional).
|
|
259
293
|
**Returns:** Symbol definition + list of files that call it. Replaces `read_file_surgical` + `analyze_impact` in one round-trip.
|
|
260
294
|
|
|
261
|
-
####
|
|
295
|
+
#### 19. `batch_read`
|
|
262
296
|
**Purpose:** Read N symbols from N files in a single call.
|
|
263
297
|
**Input:** `reads` (required): array of `{filePath, symbolName, className?}`. `projectRoot` (required).
|
|
264
298
|
**Returns:** All requested symbols in one response. Eliminates N round-trips.
|
|
265
299
|
|
|
266
|
-
####
|
|
300
|
+
#### 20. `get_rate_limit_status`
|
|
267
301
|
**Purpose:** Get current token balance and operation costs.
|
|
268
302
|
**Input:** None.
|
|
269
303
|
**Returns:** `tokensAvailable`, `maxTokens`, `refillRate`, and `canAfford` map per operation. Lets autonomous agents plan their budget.
|
|
270
304
|
|
|
305
|
+
## Recommended Workflow
|
|
306
|
+
|
|
307
|
+
1. **Start with `get_semantic_repo_map`** to understand the project structure.
|
|
308
|
+
2. **Use `read_file_surgical`** with a symbol name. Use suggestions if the symbol is missing.
|
|
309
|
+
3. **Before modifying, run `analyze_impact`** to know the blast radius.
|
|
310
|
+
4. **Phase 1: Preview Edit** → Call write tools to get a `diff` and `confirmationToken`.
|
|
311
|
+
5. **Phase 2: Apply Edit** → Verify the diff, then call with the token and `confirm: true`.
|
|
312
|
+
6. **Recovery** → Use `rollback_file` if needed.
|
|
313
|
+
|
|
314
|
+
## Session State Configuration (v3.7.1+)
|
|
315
|
+
|
|
316
|
+
### Critical: Session-Scoped State
|
|
317
|
+
|
|
318
|
+
The server now uses **session-scoped state** for each MCP client connection. This means:
|
|
319
|
+
|
|
320
|
+
1. **No state leakage**: Each agent (Amazon Q, Kiro, Cursor, etc.) gets isolated locks, confirmation store, and rate limiter.
|
|
321
|
+
2. **Crash recovery**: Pending operations survive server restarts via SQLite.
|
|
322
|
+
3. **Session tools**: Use `get_session_stats`, `clear_session_cache`, and `list_pending_operations` for session-aware operations.
|
|
323
|
+
|
|
324
|
+
### IDE-Specific Configuration
|
|
325
|
+
|
|
326
|
+
Each IDE/agent has a specific location for MCP configuration:
|
|
327
|
+
|
|
328
|
+
#### Amazon Q
|
|
329
|
+
Add to `.amazonq/rules/1-mcp-code-context-instructions.md`:
|
|
330
|
+
```json
|
|
331
|
+
{
|
|
332
|
+
"mcpServers": {
|
|
333
|
+
"mcp-code-context": {
|
|
334
|
+
"command": "npx",
|
|
335
|
+
"args": ["-y", "mcp-code-context"]
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
#### Kiro
|
|
342
|
+
Add to `.kiro/settings/mcp.json`:
|
|
343
|
+
```json
|
|
344
|
+
{
|
|
345
|
+
"mcpServers": {
|
|
346
|
+
"mcp-code-context": {
|
|
347
|
+
"command": "npx",
|
|
348
|
+
"args": ["-y", "mcp-code-context"]
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
#### Cursor
|
|
355
|
+
Add to `.cursor/mcp.json`:
|
|
356
|
+
```json
|
|
357
|
+
{
|
|
358
|
+
"mcpServers": {
|
|
359
|
+
"mcp-code-context": {
|
|
360
|
+
"command": "npx",
|
|
361
|
+
"args": ["-y", "mcp-code-context"]
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
#### Windsurf
|
|
368
|
+
Add to Windsurf MCP settings:
|
|
369
|
+
```json
|
|
370
|
+
{
|
|
371
|
+
"mcpServers": {
|
|
372
|
+
"mcp-code-context": {
|
|
373
|
+
"command": "npx",
|
|
374
|
+
"args": ["-y", "mcp-code-context"]
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
#### Antigravity
|
|
381
|
+
Add to `.antigravity/mcp.json`:
|
|
382
|
+
```json
|
|
383
|
+
{
|
|
384
|
+
"mcpServers": {
|
|
385
|
+
"mcp-code-context": {
|
|
386
|
+
"command": "npx",
|
|
387
|
+
"args": ["-y", "mcp-code-context"]
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
No additional configuration is needed beyond adding the MCP server definition. Session isolation is automatic.
|
|
394
|
+
|
|
271
395
|
## Technical Details
|
|
272
396
|
|
|
273
397
|
- **Transport:** stdio (JSON-RPC over stdin/stdout)
|
|
@@ -277,4 +401,32 @@ All write tools follow a **Two-Phase Workflow**:
|
|
|
277
401
|
- **Supported languages:** TypeScript, JavaScript (all variants), PHP, Dart, Python
|
|
278
402
|
- **Security:** projectRoot boundary, safe regex, rate limiting, file locking, audit logging, telemetry
|
|
279
403
|
- **Write safety:** Two-phase confirmation (dry-run + token), atomic writes, syntax validation
|
|
404
|
+
- **State management:** Session-scoped (per-MCP-client) with SQLite persistence for pending operations
|
|
405
|
+
- **Cache:** sql.js@1.14.1 (WASM SQLite, zero native deps)
|
|
280
406
|
- **Portability:** 100% WASM - no native dependencies, works on all platforms
|
|
407
|
+
- **Tests:** 82 passing (unit + integration + performance + stress)
|
|
408
|
+
|
|
409
|
+
## Support This Project
|
|
410
|
+
|
|
411
|
+
### PayPal
|
|
412
|
+
[paypal.me/achatainga](https://paypal.me/achatainga)
|
|
413
|
+
|
|
414
|
+
### Ko-fi
|
|
415
|
+
[ko-fi.com/achatainga](https://ko-fi.com/achatainga)
|
|
416
|
+
|
|
417
|
+
### Binance (USDT)
|
|
418
|
+
- **TRC20/ERC20**: `0xa68d53f7853ce0175eb96aaad4a30c068ca96444`
|
|
419
|
+
- **Binance Pay ID**: `367669339`
|
|
420
|
+
|
|
421
|
+
### Hire Me
|
|
422
|
+
- 💼 **Available for**: Freelance contracts
|
|
423
|
+
- 🌐 **Location**: Caracas, Venezuela (Remote)
|
|
424
|
+
- 💻 **Skills**: TypeScript, Node.js, MCP, AI/LLM integrations
|
|
425
|
+
- 💵 **Rate**: $50-75/hour
|
|
426
|
+
- 📧 **Contact**: a.chataing.a@gmail.com
|
|
427
|
+
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
**Version**: 3.7.1
|
|
431
|
+
**Last Updated**: June 8, 2026
|
|
432
|
+
**Status**: Production-ready with session-scoped state and crash recovery
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-code-context",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.7.1",
|
|
4
4
|
"description": "Powerful MCP server with Tree-sitter WASM parsers for 100% AST accuracy. Zero native dependencies. Production-ready with persistent caching, structured logging, file watching, fuzzy search, rate limiting, file locking, and ReDoS protection. Supports TypeScript, JavaScript, PHP, Dart, and Python.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
11
|
"build": "tsc",
|
|
12
|
-
"test": "npm run build && npm run build:tests && node dist-tests/tests/test-security.js && node dist-tests/tests/test-file-lock.js && node dist-tests/tests/test-rate-limiter.js && node dist-tests/tests/test-v3.4.js && node dist-tests/tests/test-backup-manager.js && node dist-tests/tests/test-wasm-parsers.js",
|
|
12
|
+
"test": "npm run build && npm run build:tests && node dist-tests/tests/test-security.js && node dist-tests/tests/test-file-lock.js && node dist-tests/tests/test-rate-limiter.js && node dist-tests/tests/test-v3.4.js && node dist-tests/tests/test-backup-manager.js && node dist-tests/tests/test-index-manager.js && node dist-tests/tests/test-wasm-parsers.js",
|
|
13
13
|
"test:ui": "vitest --ui",
|
|
14
14
|
"test:run": "vitest run",
|
|
15
15
|
"test:coverage": "vitest run --coverage",
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Universal Version Replacer - v1.0.0
|
|
6
|
-
* Usage: node scripts/replace-version.js <oldVersion> <newVersion>
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
const [,, oldVersion, newVersion] = process.argv;
|
|
10
|
-
|
|
11
|
-
if (!oldVersion || !newVersion) {
|
|
12
|
-
console.error('Usage: node scripts/replace-version.js <oldVersion> <newVersion>');
|
|
13
|
-
console.error('Example: node scripts/replace-version.js 3.4.0 3.4.1');
|
|
14
|
-
process.exit(1);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const root = process.cwd();
|
|
18
|
-
const oldRegex = new RegExp(oldVersion.replace(/\./g, '\\.'), 'g');
|
|
19
|
-
|
|
20
|
-
console.log(`🚀 Starting global replace: ${oldVersion} -> ${newVersion}`);
|
|
21
|
-
|
|
22
|
-
function walk(dir) {
|
|
23
|
-
const files = fs.readdirSync(dir);
|
|
24
|
-
for (const file of files) {
|
|
25
|
-
const fullPath = path.join(dir, file);
|
|
26
|
-
|
|
27
|
-
// Safety boundaries
|
|
28
|
-
if (fullPath.includes('.git') ||
|
|
29
|
-
fullPath.includes('node_modules') ||
|
|
30
|
-
fullPath.includes('scripts') ||
|
|
31
|
-
file === 'stderr.txt' ||
|
|
32
|
-
file === 'stdout.txt') continue;
|
|
33
|
-
|
|
34
|
-
const stat = fs.statSync(fullPath);
|
|
35
|
-
if (stat.isDirectory()) {
|
|
36
|
-
walk(fullPath);
|
|
37
|
-
} else {
|
|
38
|
-
// Process only relevant text files
|
|
39
|
-
const ext = path.extname(file).toLowerCase();
|
|
40
|
-
const textExtensions = ['.ts', '.js', '.json', '.md', '.txt', '.d.ts', '.map'];
|
|
41
|
-
|
|
42
|
-
if (textExtensions.includes(ext) || file.endsWith('.d.ts')) {
|
|
43
|
-
try {
|
|
44
|
-
const content = fs.readFileSync(fullPath, 'utf8');
|
|
45
|
-
if (content.includes(oldVersion)) {
|
|
46
|
-
const updated = content.replace(oldRegex, newVersion);
|
|
47
|
-
fs.writeFileSync(fullPath, updated, 'utf8');
|
|
48
|
-
console.log(`✅ Updated: ${fullPath}`);
|
|
49
|
-
}
|
|
50
|
-
} catch (err) {
|
|
51
|
-
console.warn(`⚠️ Skipped ${fullPath}: ${err.message}`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
walk(root);
|
|
59
|
-
console.log('✨ Version update complete.');
|