Import Check: Validate & Clean CSV
by LeBorgneAntoine · remote · no sign-in to list tools · v0.2.0 · published by GitHub user LeBorgneAntoine
Validate and prepare CSV; reconcile two tables with exact keys and full findings. Fixed free demos.
10 tools: 5 change things and 5 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things5Claude Code: ask: see these tools
- Only reads5Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http import-check https://check.orvel.dev/mcpFindings
Matches of fixed checks, with the text they matched.
- Warninspect_table
The server marks "inspect_table" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "inspect_table" says "inspect": a word for reading.
- Warnvalidate_csv
The server marks "validate_csv" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "validate_csv" says "validate": a word for reading.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
10 tools
Changes things 5Claude Code: ask
clean_csvApply only requested column renames and transformations, then validate the output against schema.No findings
Why it is in this group
- The description's first verb is "apply": a word for a change.
Description, as the server wrote it Apply only requested column renames and transformations, then validate the output against schema. Cleanup column names refer to the original headers; schema names refer to the renamed output. Transformations run in listed order. decimal_comma changes only plain numbers such as 12,50; ambiguous grouping stays unchanged. No records or columns are removed. Returned csv_text is UTF-8-compatible with CRLF record endings. One paid operation includes cleanup and validation. Spreadsheet-safe escaping is opt-in and may make numeric negative cells fail numeric validation; inspect the final report before import.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
inspect_tableProfile a CSV or explicit string table before writing a recipe.1 finding
Why it is in this group
- The name "inspect_table" says "inspect": a word for reading.
- The server marks it as not read-only (readOnlyHint: false).
Findings
- Warn
The server marks "inspect_table" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "inspect_table" says "inspect": a word for reading.
Description, as the server wrote it Profile a CSV or explicit string table before writing a recipe. Return empty, distinct and duplicate-value counts per column and complete formula warnings; no schema or business validity is inferred. Supply CSV OR columns/rows, never both. JSON numbers must be encoded as strings so identifiers keep leading zeros. One paid operation; no content retained. Reuse request_id only for identical input.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
prepare_tableSelect, rename, derive and convert columns using a caller-owned version-1 recipe.No findings
Why it is in this group
- The description's first verb is "select": a word for a change.
Description, as the server wrote it Select, rename, derive and convert columns using a caller-owned version-1 recipe. Rules reference original input headers; output follows recipe order and omitted columns are listed. All input rows remain. Any failed conversion returns valid=false, all findings and csv_text=null, never a partially transformed file. No arithmetic, arbitrary code, schema inference or destination writes. One completed report costs one operation, including valid=false. Use reconcile_tables for two-file matching.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
reconcile_tablesJoin two bounded tables using exact string or composite keys.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Join two bounded tables using exact string or composite keys. Both sides must have non-empty unique keys: duplicates block the entire output, including many-to-many matches. Choose left, inner or full retention explicitly; unmatched records are reported even if excluded. Optional compare fields flag changed values without resolving them. Output includes row lineage; missing-side fields are empty strings. No trimming, fuzzy matching or destination writes. Combined inputs share 1 MB/10,000 records/250,000 cells. One completed report costs one operation; reuse request_id for identical retries. Full findings or an uncharged size error, never silent truncation.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
validate_csvCheck a CSV against your explicit schema; return all issue counts and at most 200 detailed findings.1 finding
Why it is in this group
- The name "validate_csv" says "validate": a word for reading.
- The server marks it as not read-only (readOnlyHint: false).
Findings
- Warn
The server marks "validate_csv" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "validate_csv" says "validate": a word for reading.
Description, as the server wrote it Check a CSV against your explicit schema; return all issue counts and at most 200 detailed findings. Headers match exactly; required=false permits empty cells, not missing headers. Unique compares raw non-empty strings. Dates use YYYY-MM-DD, decimals use a dot without grouping, booleans use true/false. A valid=false report is a completed paid operation, not a tool failure. No values are changed; use clean_csv for explicit transformations. Validity covers only the supplied rules, not destination-system or business correctness.
Annotations the server declares
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
- readOnlyHint: false
Only reads 5Claude Code: allow
get_csv_exampleReturn a fixed synthetic CSV and its column schema.No findings
Why it is in this group
- The name "get_csv_example" says "get": a word for reading.
Description, as the server wrote it Return a fixed synthetic CSV and its column schema. Free, no key or quota. Copy the structure, then supply your own CSV to validate_csv.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
get_csv_usageRead remaining operations and expiry for the API key supplied in the Authorization header.No findings
Why it is in this group
- The name "get_csv_usage" says "get": a word for reading.
Description, as the server wrote it Read remaining operations and expiry for the API key supplied in the Authorization header. Does not consume credit.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
get_table_exampleReturn fixed synthetic left/right tables and a reusable join recipe.No findings
Why it is in this group
- The name "get_table_example" says "get": a word for reading.
Description, as the server wrote it Return fixed synthetic left/right tables and a reusable join recipe. No arguments, key or credit. Copy the structure for reconcile_tables; mode controls which unmatched rows appear in output.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
view_csv_demoValidate the fixed example with the current engine.No findings
Why it is in this group
- The name "view_csv_demo" says "view": a word for reading.
Description, as the server wrote it Validate the fixed example with the current engine. Free and no arguments; demonstrates duplicate, email, amount and date findings. Custom files require validate_csv and paid access.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
view_table_demoJoin the bundled fixed tables and show changed and unmatched records.No findings
Why it is in this group
- The name "view_table_demo" says "view": a word for reading.
Description, as the server wrote it Join the bundled fixed tables and show changed and unmatched records. No arguments, key or credit. This cannot process custom data; use reconcile_tables with a paid key for your files.
Annotations the server declares
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- readOnlyHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.2.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http import-check https://check.orvel.dev/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__import-check__get_csv_example",
"mcp__import-check__view_csv_demo",
"mcp__import-check__get_csv_usage",
"mcp__import-check__get_table_example",
"mcp__import-check__view_table_demo"
],
"ask": [
"mcp__import-check__inspect_table",
"mcp__import-check__prepare_table",
"mcp__import-check__reconcile_tables",
"mcp__import-check__validate_csv",
"mcp__import-check__clean_csv"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as import-check. Review it before you use it.
