Skip to content

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.

Changes · 5

10 tools: 5 change things and 5 only read.

Scanned Oct 21, 2026

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/mcp

Findings

Matches of fixed checks, with the text they matched.

2 warn
  • The server marks "inspect_table" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "inspect_table" says "inspect": a word for reading.

    What this check looks for
  • The server marks "validate_csv" as not read-only (readOnlyHint: false), and its words say it reads.

    Matched text

    annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "validate_csv" says "validate": a word for reading.

    What this check looks for

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.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "inspect_table" says "inspect": a word for reading.

      What this check looks for
    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.

      Matched text

      annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":false}; The name "validate_csv" says "validate": a word for reading.

      What this check looks for
    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/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.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.