Skip to main content
Glama
iishanmakkar

dc-mcp

by iishanmakkar

Agentic Data Cleaner

Your AI assistant is great at reasoning. It is terrible at spreadsheets. This fixes that.

MIT license Python 3.11+ MCP Streamable HTTP Live on Render 89 tests

Live now, no install: site — https://dc-mcp-self.vercel.app · connector — https://dc-mcp-26zy.onrender.com/mcp · install guide — https://dc-mcp-26zy.onrender.com/install


You know the file. Exported from some system, opened once, never cleaned: " Alice ", N/A where a date should be, two identical rows, a cabin column that is 77% empty. You paste it to your AI and it confidently invents the missing ages.

Agentic Data Cleaner puts a deterministic cleaning engine inside your AI agent: 10 MCP tools that scan, fix what's safe, hold what isn't, and hand back the file plus an audit report and a replay script. The model reasons. The engine cleans. Neither improvises.

Before / after

You paste this:

name,joined,salary
"  Alice ",2024-01-05,50000
Bob,N/A,62000
"  Alice ",2024-01-05,50000

You get back this (team_cleaned.csv), plus the report and the replay script:

name,joined,salary
Alice,2024-01-05,50000
Bob,,62000
Alice,2024-01-05,50000

Whitespace trimmed, N/A nulled, and the duplicate row held under needs_your_decision until you approve its removal — the engine never deletes or invents data on its own. More real runs in examples.

Related MCP server: data-quality-loop

Numbers

Honest measurements from this repo's own verification runs (consumer laptop, single process):

Dataset

Rows × cols

Missing cells

Safe steps

Time

Titanic (Kaggle train.csv)

891 × 12

866

4

~2 s

Ames housing (mirror)

2,051 × 81

11,040

36

~12 s

IBM HR attrition (Kaggle)

1,470 × 35

0

6

~4 s

Iris

150 × 5

0

0 held 2*

<1 s

* Iris genuinely contains one exact-duplicate pair (rows 101/142) — correctly held for approval, not auto-deleted.

Coverage, all green: 89-test suite · 54 input→output format combos (csv, tsv, txt, psv, json, jsonl, xlsx, xlsm, parquet in; csv, tsv, xlsx, json, jsonl, parquet out) · 5 real datasets · replay script reproduces the MCP result cell-for-cell. Memory is the real constraint (~10× file size while cleaning); size caps are enforced before parsing.

How it works

The agent stops guessing and starts calling:

1. SCAN    -> what is wrong? (findings with severity + evidence, changes nothing)
2. PLAN    -> what is the fix? (per-problem action, risk level, auto or needs-you)
3. APPLY   -> safe fixes run; deleting rows/columns, filling values, masking PII wait for approve_ids
4. EXPORT  -> cleaned file + audit report + replay script, time-limited links, auto-deleted in ~1 h

Originals are never modified. Working copies die after about an hour or on demand.

Install

Zero setup — point any MCP client at the hosted server. No API key needed.

Muse

Add a connector with URL https://dc-mcp-26zy.onrender.com/mcp. Example prompts that work immediately:

  • "Clean this customer spreadsheet: fix the whitespace, the N/A placeholders and the date formats, and give me the cleaned file."

  • "Scan this CSV and tell me everything that's wrong with it before you change anything."

  • "Remove the duplicate rows from this export, and show me which ones you'd remove first."

Claude Desktop / Cursor / VS Code

{ "mcpServers": { "agentic-data-cleaner": { "url": "https://dc-mcp-26zy.onrender.com/mcp" } } }

Claude Desktop: same shape in claude_desktop_config.json. Cursor: .cursor/mcp.json. VS Code: MCP extension config.

Opencode

opencode.json:

{ "mcp": { "agentic-data-cleaner": { "type": "remote", "url": "https://dc-mcp-26zy.onrender.com/mcp" } } }

Restart opencode afterwards (config loads once at startup).

Antigravity

~/.gemini/config/mcp_config.json (global) or .agents/mcp_config.json (workspace):

{ "mcpServers": { "agentic-data-cleaner": { "serverUrl": "https://dc-mcp-26zy.onrender.com/mcp" } } }

Then MCP Servers → Refresh. (Note: Antigravity wants serverUrl; everyone else wants url. Yes, really.)

ChatGPT / raw HTTP

Any client that speaks Streamable HTTP JSON-RPC:

curl -X POST https://dc-mcp-26zy.onrender.com/mcp \
  -H "Accept: application/json, text/event-stream" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

Full per-client guide with troubleshooting: https://dc-mcp-26zy.onrender.com/install

Uninstall

Client

Removal

Muse

Remove the connector

Claude Desktop / Cursor / VS Code / Antigravity

Delete the agentic-data-cleaner entry from the config file

Opencode

Delete the entry from opencode.json, restart

No local files are created by the hosted server; your data expires server-side within about an hour anyway.

The 10 tools

Tool

What it does

clean_dataset

One call: scan → apply every safe fix → export links. Risky items return under needs_your_decision

scan_dataset

Load a file, list every problem, change nothing

get_cleaning_plan

Proposed fix per problem, with risk and "applies automatically?"

apply_cleaning_plan

Low/medium auto-apply; high-risk only via approve_ids (your explicit yes)

apply_cleaning_action

One specific action; risky ones need confirm=true

preview_dataset / export_dataset

Look at rows / time-limited download links (csv, tsv, xlsx, json, jsonl, parquet)

create_upload_url

One-time URL for files too big to pass inline

delete_dataset / list_cleaning_actions

Delete now / list every action with risks

Notebook (fully local, no server)

git clone https://github.com/iishanmakkar/dc-mcp.git && cd dc-mcp
pip install -r requirements.txt jupyter
jupyter lab agentic_data_cleaner.ipynb     # Run All -- replace input/uncleaned_data.csv, results land in output/

Or as a library: from datacleaner import AgenticDataCleaner; AgenticDataCleaner("data.csv").run(interactive=False). Nothing leaves your machine. The notebook is generated from the engine (python tools/build_notebook.py) so it can't drift.

Self-host

pip install -r requirements.txt
cp .env.example .env            # set API_KEYS, PUBLIC_BASE_URL, ALLOWED_HOSTS
python -m uvicorn server.app:app --port 8000 --env-file .env   # Windows; Linux/macOS: source .env first

No credentials configured = the server refuses to start (set ALLOW_ANONYMOUS=true for local dev only). Deploy configs included: render.yaml (Blueprint), fly.toml, Dockerfile, vercel.json (static site only -- serverless can't host the stateful MCP; keep the backend on Render/Fly). Verify any deployment with python tools/preflight.py https://your-domain <key> (17 checks, must print ALL CHECKS PASSED).

Let any AI install it

Paste AI_PROMPT.md to any assistant: it connects to the hosted server, proves the handshake, runs a real clean, and teaches the approval loop. No git, no install.

Security model

Enforced and tested, not promised: optional key/OAuth/auth-off modes with per-IP isolation for anonymous users; per-client dataset isolation; unguessable expiring tokens with cascade delete; allow-listed formats only (no pickle/HDF5/SQLite/HTML/legacy .xls); ragged rows and column-count caps rejected before pandas parses; zip-bomb and Parquet-expansion guards; SSRF-pinned URL fetching (https/443, public IPs only); fixed action registry (no code execution); generic errors; id-and-count logs only; DNS-rebinding protection; strict CSP.

Development

pip install pytest httpx
pytest                # full suite: engine, planner rails, server, SSRF, tiers, live MCP client, notebook

When changing the engine, regenerate the notebook (python tools/build_notebook.py agentic_data_cleaner.ipynb) -- a test fails if it drifts.

FAQ

Do I need an account or key? No. Point and clean.

Will it delete my data? It can't delete anything without your explicit per-item approval, and it never touches your original file.

What if my file is huge? 25 MB / 200,000 rows per file on the hosted server. Past that, self-host and raise the caps (memory is ~10× file size).

Does it call an AI model? No. Deterministic rules do everything; LLM_* stays off unless you turn it on.

Why not just let the chatbot clean it? Chat can't hold a 17 MB file, produces no audit trail, and invents missing values with total confidence. This does none of that.

License

MIT. Built by Ishan Makkar -- https://github.com/iishanmakkar/dc-mcp

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI-driven data quality operations such as validation, enrichment, and deduplication for customer data fields including email, address, phone, and LinkedIn profiles through natural language interactions.
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables autonomous data quality inspection and repair workflows. It scans DuckDB warehouses for anomalies, generates and verifies fixes in a dry-run copy, then applies them after validation, with full audit logging.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables managing the full data quality lifecycle through Claude Desktop, including data exploration, profiling, validation, duplicate detection, reconciliation, workflows, schedules, and execution monitoring.
    127 npm
    1
    Apache 2.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables LLM clients to load, clean, visualize, and analyze tabular datasets, and to generate multi-format analytic reports through natural language instructions.
    -