Recce recce-mcp-e2e
Use when MCP server code is modified and needs full E2E verification against a real dbt project. Triggers after changes to recce/mcp_server.py, MCP tool handlers, single-env logic, or error classification. Also use before merging MCP PRs.
install
source · Clone the upstream repo
git clone https://github.com/DataRecce/recce
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/DataRecce/recce "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/recce-mcp-e2e" ~/.claude/skills/datarecce-recce-recce-mcp-e2e && rm -rf "$T"
manifest:
.claude/skills/recce-mcp-e2e/SKILL.mdsource content
MCP E2E Verification
Full-stack verification of all 8 MCP tools against a real dbt project.
When to Use
- After modifying
orrecce/mcp_server.py
handlers_tool_* - After changing single-env logic or error classification
- Before merging any MCP-related PR
- Not for: unit test changes only, frontend-only changes, docs-only changes
Usage
Invoke as
/recce-mcp-e2e or /recce-mcp-e2e <project_path>.
- With argument: use the given path as the dbt project directory
- Without argument: ask the user for the dbt project path
The project directory must contain
target/manifest.json and target-base/manifest.json.
Process
- Resolve project path from argument or user input
- Validate
andtarget/
exist withtarget-base/manifest.json - Detect recce source — find the repo root containing
. Ifrecce/mcp_server.py
is also installed (recce-nightly
), setpip show recce recce-nightlyPYTHONPATH=<RECCE_REPO_ROOT>:$PYTHONPATH - Generate
in the project directory fromtest_mcp_e2e.py
(in this skill directory). Replacetest_mcp_e2e_template.py
with the resolved absolute path.PROJECT_DIR_PLACEHOLDER - Execute with appropriate PYTHONPATH prefix
- Report results — all 13 checks must show PASS. Expected output:
=== FULL MODE (8 tools) === PASS lineage_diff: PASS ... === SINGLE-ENV MODE === PASS row_count_diff (_warning): PASS ... ALL PASS - Clean up — delete
test_mcp_e2e.py
Quick Reference
| Test Suite | Checks | What's Verified |
|---|---|---|
| Full mode (8 tools) | lineage_diff, schema_diff, row_count_diff, query, query_diff, profile_diff, list_checks, run_check | Non-empty results from each tool |
| Single-env _warning (3) | row_count_diff, query_diff, profile_diff | field present with |
| Single-env no _warning (2) | lineage_diff, schema_diff | field NOT present |
Additional manual checks (not in script):
| Check | Command/Action |
|---|---|
| --help | shows Prerequisites section |
| Server modes | Non-server mode: returns only lineage_diff + schema_diff |
Common Mistakes
| Problem | Fix |
|---|---|
| recce-nightly conflict — use |
| lineage_diff returns empty | Use (default filters out unchanged) |
| list_checks returns empty | Preset checks from must be loaded via — script handles this |
FileNotFoundError on exit | Cosmetic thread error in event collector — does not affect results |
| Single-env test uses target-base | By design — needs both, flag simulates the mode |