CSV cleanup: dates, emails, phones, dedupe. x402 $0.005 USDC, Base. As is, no warranty.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Clean a CSV ($0.005 USDC): give an https url or inline csv (max 1 MB / 20k rows). Trims whitespace, optional case rules, dates to ISO 8601, lowercases emails, normalizes phone digits, merges or flags exact + fuzzy duplicate rows on key_columns. Returns cleaned CSV text + JSON report (rows in/out, dupes, columns changed). Deterministic, no AI. As is, no warranty. Nothing stored. As is, no warranty. Nothing stored.
Inline CSV text instead of url (max 1 MB).
Public https URL of a CSV (max 1 MB).
Also match near-duplicates (case/punctuation/accents, small typos). Default true.
merge (default) keeps first row and fills its blanks; flag adds _duplicate_of_row; none.
Map column -> lower | upper | title.
Order for ambiguous numeric dates (default mdy).
First row is a header (default true).
Max duplicate groups listed in report (default 50, max 500).
Columns used to detect duplicates (default all).
Columns to convert to ISO 8601 (default auto).
digits (default) or e164.
Email columns to lowercase (default auto).
Phone columns (default auto by header name).
Similarity 0.5-1 for typo matches (default 0.92; 1 = normalized-equal only).
Trim and collapse whitespace in every cell (default true).
Country code for e164 when missing (default 1).
Clean a CSV ($0.005 USDC): give an https url or inline csv (max 1 MB / 20k rows). Trims whitespace, optional case rules, dates to ISO 8601, lowercases emails, normalizes phone digits, merges or flags exact + fuzzy duplicate rows on key_columns. Returns cleaned CSV text + JSON report (rows in/out, dupes, columns changed). Deterministic, no AI. As is, no warranty. Nothing stored. As is, no warranty. Nothing stored.
| Argument | Type | Description |
|---|---|---|
| csv | string | Inline CSV text instead of url (max 1 MB). |
| url | string | Public https URL of a CSV (max 1 MB). |
| fuzzy | boolean | Also match near-duplicates (case/punctuation/accents, small typos). Default true. |
| dedupe | string | merge (default) keeps first row and fills its blanks; flag adds _duplicate_of_row; none. |
| case_rules | object | Map column -> lower | upper | title. |
| date_order | string | Order for ambiguous numeric dates (default mdy). |
| has_header | boolean | First row is a header (default true). |
| max_groups | number | Max duplicate groups listed in report (default 50, max 500). |
| key_columns | array | Columns used to detect duplicates (default all). |
| date_columns | any | Columns to convert to ISO 8601 (default auto). |
| phone_format | string | digits (default) or e164. |
| email_columns | any | Email columns to lowercase (default auto). |
| phone_columns | any | Phone columns (default auto by header name). |
| fuzzy_threshold | number | Similarity 0.5-1 for typo matches (default 0.92; 1 = normalized-equal only). |
| trim_whitespace | boolean | Trim and collapse whitespace in every cell (default true). |
| default_country_code | string | Country code for e164 when missing (default 1). |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"csv": {
"type": "string",
"description": "Inline CSV text instead of url (max 1 MB)."
},
"url": {
"type": "string",
"description": "Public https URL of a CSV (max 1 MB)."
},
"fuzzy": {
"type": "boolean",
"description": "Also match near-duplicates (case/punctuation/accents, small typos). Default true."
},
"dedupe": {
"enum": [
"merge",
"flag",
"none"
],
"type": "string",
"description": "merge (default) keeps first row and fills its blanks; flag adds _duplicate_of_row; none."
},
"case_rules": {
"type": "object",
"description": "Map column -> lower | upper | title.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"enum": [
"lower",
"upper",
"title"
],
"type": "string"
}
},
"date_order": {
"enum": [
"mdy",
"dmy"
],
"type": "string",
"description": "Order for ambiguous numeric dates (default mdy)."
},
"has_header": {
"type": "boolean",
"description": "First row is a header (default true)."
},
"max_groups": {
"type": "number",
"description": "Max duplicate groups listed in report (default 50, max 500)."
},
"key_columns": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 200,
"description": "Columns used to detect duplicates (default all)."
},
"date_columns": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
},
"maxItems": 200
},
{
"enum": [
"auto",
"none"
],
"type": "string"
}
],
"description": "Columns to convert to ISO 8601 (default auto)."
},
"phone_format": {
"enum": [
"digits",
"e164"
],
"type": "string",
"description": "digits (default) or e164."
},
"email_columns": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
},
"maxItems": 200
},
{
"enum": [
"auto",
"none"
],
"type": "string"
}
],
"description": "Email columns to lowercase (default auto)."
},
"phone_columns": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
},
"maxItems": 200
},
{
"enum": [
"auto",
"none"
],
"type": "string"
}
],
"description": "Phone columns (default auto by header name)."
},
"fuzzy_threshold": {
"type": "number",
"description": "Similarity 0.5-1 for typo matches (default 0.92; 1 = normalized-equal only)."
},
"trim_whitespace": {
"type": "boolean",
"description": "Trim and collapse whitespace in every cell (default true)."
},
"default_country_code": {
"type": "string",
"description": "Country code for e164 when missing (default 1)."
}
}
}