Tool reference

Parameters, outputs, and limits for all six Predictive Debugger MCP tools, and how the prediction score is calculated.

The MCP server exposes six tools. Static analysis, dependency mapping and log analysis run locally. Only predict_failures calls a model provider.

Source analysis supports .js, .jsx, .mjs, .cjs, .ts, .tsx, .mts and .cts, including decorators. Vue and Svelte single-file components are excluded. Files above 4 MB are rejected. Use absolute paths unless a parameter says otherwise.

scan_project

Rank a directory’s source files by riskDensity, the concentration of structural risk signals per line. This helps choose where to read first; it does not report confirmed defects.

Parameter Default Purpose
directory Required Directory to scan
limit 50 Maximum results, up to 500
includeTests false Include test files in the ranking
verbose false Include raw metric counts

Results include scanned, returned, orderedBy and ranked files. Paths are relative to the scanned directory. Unreadable files are reported separately so one failure does not discard the rest of the scan.

Tests are excluded by default because mocked awaits and other test structures can rank highly without indicating production risk. Set includeTests: true when reviewing the test suite itself.

analyze_file

Pass file to get AST complexity metrics, riskScore, riskDensity and the signals behind the scores. A parse failure returns parseError and a zero score; that zero is not evidence that the file is safe.

map_dependencies

Find a file’s imports, reverse imports and tests connected through imports. Each relationship has a via chain with paths, import kinds and source lines. These are static file relationships; they do not establish runtime callers or test execution coverage.

Parameter Default Purpose
directory Required Project directory; outside source is excluded
file Required Source file, absolute or relative to directory
depth 1 Import hops in each direction, from 1 to 3
limit 50 Total neighbors across both lists, up to 200
maxFiles 1000 Maximum discovered source files, up to 2,000

The map includes tests and follows ESM imports and re-exports, type import expressions and literal dynamic imports. test: true follows test-path naming conventions. CommonJS requires, import assignments and nonliteral dynamic imports remain unresolved.

Build, vendor and hidden directories are excluded. The index refreshes on every request. Work is bounded by 20,000 directory entries, 64 directory levels, 4 MB per source file, 32 MB of source reads and 10,000 import references. Serialized replies are capped at 32,000 characters.

Field Meaning
unresolved Unresolved outgoing imports from the requested file
coverage.unresolved Unresolved references across the scanned project
issues Read and parse failures, plus scan-limit details
coverage.scanLimited The scan reached a discovery or processing limit
truncated Some reply entries were omitted

A missing relationship in a partial scan is not proof of absence. The tool uses no model calls, but its replies occupy the calling agent’s context. See the local measurements.

analyze_logs

Pass logFile to score log lines by severity and unusual wording, returning the anomalies first. Optional threshold ranges from 0 to 1 and defaults to 0.5. Requires Python 3; see setup.

predict_failures

Combine static analysis with an independent verdict from a supported CLI’s model. Each file requires a model call and uses the provider’s usage allowance.

Parameter Default Purpose
file Required unless files is supplied One source file
files None Non-empty batch of source paths; takes precedence over file
concurrency 4 Concurrent batch predictions, from 1 to 8
provider First installed CLI claude, codex or copilot
model CLI default Model override passed to the provider
calleeContext true Include bounded imported definitions and referenced types
multi false Request all demonstrable findings; experimental
logFile None Log file to include in the combined score
verbose false Include static metrics and the full log breakdown

Use files for a change set. Predictions run concurrently, with duplicate resolved paths removed. The reply contains results in input order and lists individual failures separately. A batch still makes one model call per unique file; lower concurrency if the provider starts rate-limiting.

Reading a verdict

The reply includes pattern, score, line, reason, status and actionable. Use actionable when deciding whether to present a prediction as a defect.

status Meaning
actionable A reported defect has a model score of at least 0.7
uncertain A possible defect falls below the reporting threshold
none No defect reported
unavailable No usable model verdict; this is not a clean result

checked lists the bug categories the model says it considered. It is a self-report, and an empty list means no coverage was reported. Additional findings appear in findings when returned. The reporting threshold was measured on single-finding replies, so multi: true is less well characterized.

Large files send at most 120,000 source characters, selected as whole declarations with original line numbers. The reply discloses truncation; omitted code remains unreviewed. There is no automatic second model pass.

Dependency context

By default, the model also receives bounded supporting definitions from local dependencies. Set calleeContext: false to send only the source file. Third-party packages are never read for this context.

Supported cases include direct ESM imports, declared imported objects, referenced types, imported constructors, named/default binding re-exports and unambiguous export * barrels through at most four files. Local tsconfig.json path mappings support relative config inheritance.

CommonJS exports, namespace re-exports, package-based config inheritance and injected instance methods remain unresolved. Conflicting or unreadable wildcard branches remain unknown. Each collection parses at most 24 dependency files, each no larger than 4 MB. Each requested export has a 128-step traversal limit, including cached paths.

The text budget follows source length, with a 1,000-character minimum and 16,000-character maximum. It includes at most 12 definitions of 3,000 characters each. Oversized imported objects and static class members prioritize the called member, referenced fields and helpers. Retained members stay in source order, and omissions are marked. Dynamic definitions, duplicate overrides, inheritance and decorators retain prefix truncation. This does not establish complete state flow through the program.

Reviewing code an agent just wrote

The server advertises the review routing in MCP instructions and repeats a short reminder in each prediction’s review field. Some clients do not forward server instructions, so the result also carries it.

For changes spanning files, a sub-agent should receive the changed files and intended behavior, review only that scope, and run in the background where the host supports it. The sub-agent rule’s benefit has not been measured. A clean per-file prediction cannot establish that the feature meets its requirements.

list_providers

Takes no parameters. Reports installed supported CLIs and their sign-in checks. Some credential-store checks are provisional; a live CLI call confirms access.

How the score works

riskScore measures accumulated structural signals such as nested loops, long functions and async boundaries. riskDensity adjusts for file length and reduces the influence of signals that accumulate with it. scan_project sorts by density. Both scores use smooth saturation to stay within 0 to 1 without flattening every complex file to the same maximum.

combinedScore is a separate blend used by the prediction pipeline:

Input Weight
Model verdict 0.90 without logs
Static risk 0.10 without logs
Log anomalies, when available 0.15; the other weights are scaled to total 0.85

The model verdict dominates. The actionable gate uses the model’s score, not combinedScore. The implementation is in score.ts and confidence.ts. See benchmark results for measurements and their limits.

Source file in the tool repository: view on GitHub