
Leakguard Mcp
io.github.doazvjettuPublished by GitHub account doazvjettuv0.1.1Updated Oct 25, 2026
Static analyzer flagging lookahead bias & data leakage in ML/trading code before backtest.
Overview
A local MCP server that statically analyzes Python time-series and trading code to flag lookahead bias and data leakage before a backtest runs.
- What you can do
- Analyze code strings, single files, or glob-matched paths for leakage patterns and return findings with severity and fix snippets. List the ten built-in rules and explain any rule's rationale and fix patterns. Findings are heuristic, tiered as error or warning, and meant to let the agent self-correct in the same turn.
- When to use it
- Useful when an AI agent writes feature engineering, forecasting, or quant strategy code in Python and you want leakage caught before running a backtest. Also handy as a pre-commit or CI check via the bundled CLI.
- Requirements
- Local Python 3.11+ process installed from PyPI (leakguard-mcp) or from source, with uv or pip. Runs over stdio and is configured in the MCP settings of a client such as Claude Code or Cursor. No API keys, accounts, or network calls.
Installation
In SourceWeft
- Open Leakguard Mcp in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
leakguard-mcp
[PyPI] [Python] [License: MIT] [release] [MCP registry] [glama]
Squawk for backtests. A local-first MCP server that static-analyzes agent-generated Python code and flags lookahead bias & data leakage before the backtest runs.
Works for any time-series ML code — quant trading (crypto, equities, forex, futures),
demand forecasting, energy, weather, IoT sensors — wherever a wrong .shift() or a
global normalization silently poisons your results.
- Pure source analysis (libcst) — your code never leaves the machine, no API calls.
- Heuristic, not a proof: severity tiers (🔴 error / 🟡 warning), like an aviation squawk.
- Framework-agnostic: pandas / numpy / polars, any stack.
- MCP-native (stdio): works directly inside Claude Code, Cursor, and any MCP-compatible agent.
- All 10 rules ship free — no license, no tiers, no phone-home.
[leakguard flagging three lookahead leaks in a strategy file]
Why this exists
AI agents (Claude Code, Cursor) write feature engineering and strategy code faster than humans can review it. But they introduce lookahead bias at scale — subtle time-boundary errors that backtest perfectly and fail catastrophically in live trading or production:
leakguard catches these in the same agent loop — before the backtest runs:
The agent reads the finding + fix snippet and self-corrects in one turn. No human review needed.
Install
Requirements
- Python 3.11+
- uv (recommended) or pip
From PyPI
From source
Setup with Claude Code
Add to your MCP config (~/.claude/claude_desktop_config.json or .claude/settings.json
in your project):
Or if installed via uv:
Restart Claude Code. leakguard's tools are now available to the agent.
Setup with Cursor
Add the same block under mcpServers in your Cursor MCP settings file.
MCP Tools
CLI
The same scanner is available as a CLI — handy for a pre-commit hook or CI step (exits non-zero when leakage is found):
It prints each finding with its severity, line/col, and a concrete fix snippet — the same output shown in the demo above.
Rules
All 10 rules active, no tiers:
Each finding includes a concrete fix snippet so the calling agent can self-correct immediately.
Benchmark
Measured on two labeled corpora, 49 snippets total.
Reproduce with uv run python -m benchmark.run.
Honesty note: the trading corpus was written by the tool's author — treat its numbers as regression fixtures, not independent validation. The general-ML corpus is one arm's length removed in domain (author-composed reproductions of widely documented leakage anti-patterns, not a downloaded public dataset). The corpus deliberately includes adversarial snippets the scanner is known to miss; they are counted against it.
Trading corpus — 39 snippets (23 leaky, 16 clean + hard negatives):
General-ML corpus — 10 snippets (LG003/LG004/LG010): Precision 88%, Recall 100% (TP 7 / FP 1 / FN 0).
Combined: Precision 90.4%, Recall 100% (TP 47 / FP 5 / FN 0).
Recall is 100% on this corpus — every adversarial miss exposed has since been fixed
(constant propagation, hand-rolled normalization, cv=<int>, drop-based selection).
Leak shapes not yet in the corpus are still missed — see Known Limitations below.
Known false positives (clean code that gets flagged)
- LG001: a forward-return label built with a negative shift and used only as
y— pure AST cannot distinguish a target column from a feature. - LG003: fit inside a helper defined above the split call site — line-order heuristic confuses definition order with execution order.
- LG004: shuffled splits on genuinely non-temporal data — no datetime-index inference yet.
- LG009: resampling for reporting/plotting rather than features — intent is invisible to static analysis.
Known false negatives (leak shapes not yet covered)
- LG004:
cross_val_score(...)withcvomitted (defaults to KFold). - LG005: taint through
df.loc[:, 'col'] = ...ordf.assign(col=...). - All rules: values flowing through function calls, dicts, or non-constant variables — no cross-function dataflow.
These sets are pinned in tests/test_benchmark.py: any new miss or silent fix fails the
suite until docs and corpus are updated to match.
Develop
The scanner core lives in leakguard/core/ (pure, no MCP imports); server.py and
cli.py are thin wrappers. Each rule has a fixture pair under tests/fixtures/.
Limitations (v1)
- Heuristic static analysis — catches ~90% of common patterns, not 100%.
- Single-file only — no cross-module taint tracking.
- Python only (pandas / numpy / polars).
- No runtime execution — cannot catch patterns that only emerge at runtime.
Contributions welcome: new corpus snippets (especially real bugs you've hit) strengthen the benchmark more than new rules do.
Source: README.md at commit 17e278e
Tools
0Version history
1- v0.1.1LatestSep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts