mcp-code-context 3.6.2 → 3.7.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/CHANGELOG.md +140 -268
- package/INSTRUCTIONS.md +31 -12
- package/README.md +223 -107
- 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 -445
- 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 +199 -31
- 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.0
|
|
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,23 +1,28 @@
|
|
|
1
|
-
# mcp-code-context v3.
|
|
1
|
+
# mcp-code-context v3.7.0
|
|
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.0
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- ✅
|
|
9
|
-
- ✅
|
|
10
|
-
- ✅
|
|
11
|
-
- ✅
|
|
12
|
-
- ✅
|
|
13
|
-
- ✅
|
|
14
|
-
- ✅ Critical bug fix: `extractSymbol` API mismatch resolved
|
|
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
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- ✅
|
|
19
|
-
- ✅
|
|
20
|
-
- ✅
|
|
15
|
+
## What's New in v3.7.0 (Previously Added)
|
|
16
|
+
|
|
17
|
+
- ✅ 4 new tools: `search_symbols`, `explain_symbol`, `batch_read`, `get_rate_limit_status`
|
|
18
|
+
- ✅ `diffFormat` parameter on all write tools (`unified`, `compact`, `summary`, `none`)
|
|
19
|
+
- ✅ Phase 2 no longer requires `newContent`/`code` — server stores content from Phase 1
|
|
20
|
+
- ✅ `aroundPattern` now includes match line number in output
|
|
21
|
+
- ✅ `get_server_stats` includes rate limiter token balance and operation costs
|
|
22
|
+
- ✅ `get_cache_stats` includes hit rate percentage
|
|
23
|
+
- ✅ `get_file_watcher_status` includes list of watched paths
|
|
24
|
+
- ✅ `read_file_lines` clamps `endLine` to file length instead of erroring
|
|
25
|
+
- ✅ CVE fix: `@modelcontextprotocol/sdk` updated from 1.12.0 to 1.29.0
|
|
21
26
|
|
|
22
27
|
## What This Tool Does
|
|
23
28
|
|
|
@@ -142,15 +147,17 @@ This MCP server solves two problems:
|
|
|
142
147
|
- `steps` (optional): Number of versions to go back (1-5, default: 1).
|
|
143
148
|
**What it does:** Reverts the file to the state it was in before the last 1-5 modifications.
|
|
144
149
|
|
|
145
|
-
### Write Tools (v3.
|
|
150
|
+
### Write Tools (v3.7.0 Two-Phase Workflow)
|
|
146
151
|
|
|
147
152
|
All write tools follow a **Two-Phase Workflow**:
|
|
148
153
|
1. **Phase 1 (Preview)**: Call without a token to get a unified `diff` and a `confirmationToken`.
|
|
149
154
|
2. **Phase 2 (Apply)**: Call with `confirmationToken` and `confirm: true` to apply the changes.
|
|
150
155
|
|
|
151
|
-
**Important Notes (v3.
|
|
156
|
+
**Important Notes (v3.7.0):**
|
|
152
157
|
- ✅ **Windows CRLF Support**: Fully resolved. All operations work correctly on Windows files with CRLF line endings.
|
|
153
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.
|
|
154
161
|
|
|
155
162
|
#### 7. `write_file_surgical`
|
|
156
163
|
**Purpose:** Replace the full source code of a named symbol in a file.
|
|
@@ -227,30 +234,163 @@ All write tools follow a **Two-Phase Workflow**:
|
|
|
227
234
|
|
|
228
235
|
**Best used when:** Cleaning up deprecated functions or unused code.
|
|
229
236
|
|
|
230
|
-
##
|
|
237
|
+
## New Tools (v3.7.0)
|
|
231
238
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
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.
|
|
238
268
|
|
|
239
|
-
|
|
269
|
+
## Previously Added Tools (v3.7.0)
|
|
240
270
|
|
|
241
|
-
####
|
|
271
|
+
#### 14. `parse_file`
|
|
242
272
|
**Purpose:** Parse a file using Tree-sitter and extract all symbols.
|
|
243
273
|
**Input:** `filePath` (required), `projectRoot` (required).
|
|
244
|
-
**Returns:** JSON array of all symbols with type and
|
|
274
|
+
**Returns:** JSON array of all symbols with type, name, `startLine`, and `endLine`.
|
|
245
275
|
|
|
246
|
-
####
|
|
276
|
+
#### 15. `clean_backups`
|
|
247
277
|
**Purpose:** Remove all backup files for a project.
|
|
248
278
|
**Input:** `projectRoot` (required).
|
|
249
279
|
|
|
250
|
-
####
|
|
280
|
+
#### 16. `get_server_stats`
|
|
251
281
|
**Purpose:** Get server telemetry, audit statistics, and health metrics.
|
|
252
282
|
**Input:** None.
|
|
253
|
-
**Returns:** Pending confirmations
|
|
283
|
+
**Returns:** Pending confirmations, rate limiter token balance, operation costs, and operational metrics.
|
|
284
|
+
|
|
285
|
+
#### 17. `search_symbols`
|
|
286
|
+
**Purpose:** Search symbols by name across the repo using AST (not text search).
|
|
287
|
+
**Input:** `rootDir` (required), `projectRoot` (required), `query` (required), `types` (optional), `fuzzy` (optional), `fileExtensions` (optional), `maxResults` (optional).
|
|
288
|
+
**Returns:** Matching symbols with file path, line numbers, and type.
|
|
289
|
+
|
|
290
|
+
#### 18. `explain_symbol`
|
|
291
|
+
**Purpose:** Get signature, location, and callers of a symbol in one call.
|
|
292
|
+
**Input:** `filePath` (required), `projectRoot` (required), `symbolName` (required), `className` (optional), `rootDir` (optional).
|
|
293
|
+
**Returns:** Symbol definition + list of files that call it. Replaces `read_file_surgical` + `analyze_impact` in one round-trip.
|
|
294
|
+
|
|
295
|
+
#### 19. `batch_read`
|
|
296
|
+
**Purpose:** Read N symbols from N files in a single call.
|
|
297
|
+
**Input:** `reads` (required): array of `{filePath, symbolName, className?}`. `projectRoot` (required).
|
|
298
|
+
**Returns:** All requested symbols in one response. Eliminates N round-trips.
|
|
299
|
+
|
|
300
|
+
#### 20. `get_rate_limit_status`
|
|
301
|
+
**Purpose:** Get current token balance and operation costs.
|
|
302
|
+
**Input:** None.
|
|
303
|
+
**Returns:** `tokensAvailable`, `maxTokens`, `refillRate`, and `canAfford` map per operation. Lets autonomous agents plan their budget.
|
|
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.0+)
|
|
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.
|
|
254
394
|
|
|
255
395
|
## Technical Details
|
|
256
396
|
|
|
@@ -261,4 +401,32 @@ All write tools follow a **Two-Phase Workflow**:
|
|
|
261
401
|
- **Supported languages:** TypeScript, JavaScript (all variants), PHP, Dart, Python
|
|
262
402
|
- **Security:** projectRoot boundary, safe regex, rate limiting, file locking, audit logging, telemetry
|
|
263
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)
|
|
264
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.0
|
|
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.0",
|
|
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.');
|