Import Check: Validate & Clean CSV
Validate and prepare CSV; reconcile two tables with exact keys and full findings. Fixed free demos.
使うべきか
品質と安全性
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"import-check": {
"url": "https://import-check-production.up.railway.app/mcp"
}
}
}リモートエンドポイント
https://import-check-production.up.railway.app/mcpstreamable-httphttps://check.orvel.dev/mcpstreamable-httpできること
ツール一覧
ツール(10)
🟢get_csv_example
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.
入力スキーマ
{
"type": "object",
"properties": {},
"title": "get_csv_exampleArguments"
}🟢view_csv_demo
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.
入力スキーマ
{
"type": "object",
"properties": {},
"title": "view_csv_demoArguments"
}🟢get_csv_usage
Read remaining operations and expiry for the API key supplied in the Authorization header. Does not consume credit.
入力スキーマ
{
"type": "object",
"properties": {},
"title": "get_csv_usageArguments"
}🟢get_table_example
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.
入力スキーマ
{
"type": "object",
"properties": {},
"title": "get_table_exampleArguments"
}🟢view_table_demo
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.
入力スキーマ
{
"type": "object",
"properties": {},
"title": "view_table_demoArguments"
}🟢inspect_table(table, request_id)
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.
入力スキーマ
{
"type": "object",
"properties": {
"table": {
"$ref": "#/$defs/TableInput"
},
"request_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Request Id"
}
},
"required": [
"table"
],
"$defs": {
"TableInput": {
"additionalProperties": false,
"properties": {
"csv_text": {
"anyOf": [
{
"maxLength": 1000000,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "CSV including headers; no paths or URLs.",
"title": "Csv Text"
},
"delimiter": {
"default": ",",
"enum": [
",",
";",
"\t",
"|"
],
"title": "Delimiter",
"type": "string"
},
"columns": {
"anyOf": [
{
"items": {
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"maxItems": 100,
"minItems": 1,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Columns"
},
"rows": {
"anyOf": [
{
"items": {
"items": {
"maxLength": 10000,
"type": "string"
},
"maxItems": 100,
"type": "array"
},
"maxItems": 10000,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Rows"
}
},
"title": "TableInput",
"type": "object"
}
},
"title": "inspect_tableArguments"
}⚪prepare_table(table, recipe, request_id)
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.
入力スキーマ
{
"type": "object",
"properties": {
"table": {
"$ref": "#/$defs/TableInput"
},
"recipe": {
"$ref": "#/$defs/Recipe"
},
"request_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Request Id"
}
},
"required": [
"table",
"recipe"
],
"$defs": {
"OutputColumn": {
"additionalProperties": false,
"properties": {
"name": {
"maxLength": 100,
"minLength": 1,
"title": "Name",
"type": "string"
},
"source": {
"anyOf": [
{
"maxLength": 100,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Source"
},
"literal": {
"anyOf": [
{
"maxLength": 10000,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Literal"
},
"concat": {
"anyOf": [
{
"items": {
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Concat"
},
"separator": {
"default": "",
"maxLength": 100,
"title": "Separator",
"type": "string"
},
"actions": {
"description": "Ordered rules. Dates explicitly use DD/MM/YYYY or MM/DD/YYYY; failed conversions block the output.",
"items": {
"enum": [
"trim",
"lowercase",
"uppercase",
"decimal_comma",
"date_dmy",
"date_mdy"
],
"type": "string"
},
"maxItems": 10,
"title": "Actions",
"type": "array"
}
},
"required": [
"name"
],
"title": "OutputColumn",
"type": "object"
},
"Recipe": {
"additionalProperties": false,
"properties": {
"version": {
"const": 1,
"default": 1,
"title": "Version",
"type": "integer"
},
"columns": {
"description": "Explicit output order; unselected input columns are omitted and reported.",
"items": {
"$ref": "#/$defs/OutputColumn"
},
"maxItems": 100,
"minItems": 1,
"title": "Columns",
"type": "array"
},
"output_delimiter": {
"default": ",",
"enum": [
",",
";",
"\t",
"|"
],
"title": "Output Delimiter",
"type": "string"
},
"spreadsheet_safe": {
"default": false,
"title": "Spreadsheet Safe",
"type": "boolean"
}
},
"required": [
"columns"
],
"title": "Recipe",
"type": "object"
},
"TableInput": {
"additionalProperties": false,
"properties": {
"csv_text": {
"anyOf": [
{
"maxLength": 1000000,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "CSV including headers; no paths or URLs.",
"title": "Csv Text"
},
"delimiter": {
"default": ",",
"enum": [
",",
";",
"\t",
"|"
],
"title": "Delimiter",
"type": "string"
},
"columns": {
"anyOf": [
{
"items": {
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"maxItems": 100,
"minItems": 1,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Columns"
},
"rows": {
"anyOf": [
{
"items": {
"items": {
"maxLength": 10000,
"type": "string"
},
"maxItems": 100,
"type": "array"
},
"maxItems": 10000,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Rows"
}
},
"title": "TableInput",
"type": "object"
}
},
"title": "prepare_tableArguments"
}⚪reconcile_tables(left, right, recipe, request_id)
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.
入力スキーマ
{
"type": "object",
"properties": {
"left": {
"$ref": "#/$defs/TableInput"
},
"right": {
"$ref": "#/$defs/TableInput"
},
"recipe": {
"$ref": "#/$defs/JoinRecipe"
},
"request_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Request Id"
}
},
"required": [
"left",
"right",
"recipe"
],
"$defs": {
"JoinColumn": {
"additionalProperties": false,
"properties": {
"name": {
"maxLength": 100,
"minLength": 1,
"title": "Name",
"type": "string"
},
"side": {
"enum": [
"left",
"right"
],
"title": "Side",
"type": "string"
},
"column": {
"maxLength": 100,
"minLength": 1,
"title": "Column",
"type": "string"
}
},
"required": [
"name",
"side",
"column"
],
"title": "JoinColumn",
"type": "object"
},
"JoinRecipe": {
"additionalProperties": false,
"properties": {
"version": {
"const": 1,
"default": 1,
"title": "Version",
"type": "integer"
},
"keys": {
"description": "Exact string composite key. Empty or duplicate keys on either side block output.",
"items": {
"$ref": "#/$defs/KeyPair"
},
"maxItems": 10,
"minItems": 1,
"title": "Keys",
"type": "array"
},
"mode": {
"description": "Explicit row-retention choice. Unmatched rows are always reported, including those excluded from output.",
"enum": [
"left",
"inner",
"full"
],
"title": "Mode",
"type": "string"
},
"columns": {
"items": {
"$ref": "#/$defs/JoinColumn"
},
"maxItems": 100,
"minItems": 1,
"title": "Columns",
"type": "array"
},
"compare": {
"description": "Optional paired fields; unequal matched values produce value_changed warnings, not automatic resolution.",
"items": {
"$ref": "#/$defs/KeyPair"
},
"maxItems": 100,
"title": "Compare",
"type": "array"
},
"output_delimiter": {
"default": ",",
"enum": [
",",
";",
"\t",
"|"
],
"title": "Output Delimiter",
"type": "string"
},
"spreadsheet_safe": {
"default": false,
"title": "Spreadsheet Safe",
"type": "boolean"
}
},
"required": [
"keys",
"mode",
"columns"
],
"title": "JoinRecipe",
"type": "object"
},
"KeyPair": {
"additionalProperties": false,
"properties": {
"left": {
"maxLength": 100,
"minLength": 1,
"title": "Left",
"type": "string"
},
"right": {
"maxLength": 100,
"minLength": 1,
"title": "Right",
"type": "string"
}
},
"required": [
"left",
"right"
],
"title": "KeyPair",
"type": "object"
},
"TableInput": {
"additionalProperties": false,
"properties": {
"csv_text": {
"anyOf": [
{
"maxLength": 1000000,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "CSV including headers; no paths or URLs.",
"title": "Csv Text"
},
"delimiter": {
"default": ",",
"enum": [
",",
";",
"\t",
"|"
],
"title": "Delimiter",
"type": "string"
},
"columns": {
"anyOf": [
{
"items": {
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"maxItems": 100,
"minItems": 1,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Columns"
},
"rows": {
"anyOf": [
{
"items": {
"items": {
"maxLength": 10000,
"type": "string"
},
"maxItems": 100,
"type": "array"
},
"maxItems": 10000,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Rows"
}
},
"title": "TableInput",
"type": "object"
}
},
"title": "reconcile_tablesArguments"
}🟢validate_csv(csv_text, schema, delimiter, request_id)
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.
入力スキーマ
{
"type": "object",
"properties": {
"csv_text": {
"description": "CSV text including header. UTF-8, at most 1 MB; no file paths or URLs.",
"title": "Csv Text",
"type": "string"
},
"schema": {
"$ref": "#/$defs/CsvSchema"
},
"delimiter": {
"default": ",",
"enum": [
",",
";",
"\t",
"|"
],
"title": "Delimiter",
"type": "string"
},
"request_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional 8–128 character retry key. Reuse only for identical arguments; changed data requires a new key.",
"title": "Request Id"
}
},
"required": [
"csv_text",
"schema"
],
"$defs": {
"Column": {
"additionalProperties": false,
"properties": {
"name": {
"description": "Exact, case-sensitive header after any cleanup rename.",
"maxLength": 100,
"minLength": 1,
"title": "Name",
"type": "string"
},
"type": {
"default": "string",
"enum": [
"string",
"integer",
"decimal",
"boolean",
"date",
"email"
],
"title": "Type",
"type": "string"
},
"required": {
"default": true,
"description": "Reject an empty value. Every declared header must exist regardless.",
"title": "Required",
"type": "boolean"
},
"unique": {
"default": false,
"description": "Require non-empty raw strings to be unique within this column.",
"title": "Unique",
"type": "boolean"
},
"choices": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 100,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional exact allowed strings, checked before type conversion.",
"title": "Choices"
},
"minimum": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Inclusive numeric bound, as a decimal string. Numeric columns only.",
"title": "Minimum"
},
"maximum": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Inclusive numeric bound, as a decimal string. Numeric columns only.",
"title": "Maximum"
},
"max_length": {
"default": 10000,
"maximum": 10000,
"minimum": 1,
"title": "Max Length",
"type": "integer"
}
},
"required": [
"name"
],
"title": "Column",
"type": "object"
},
"CsvSchema": {
"additionalProperties": false,
"properties": {
"columns": {
"items": {
"$ref": "#/$defs/Column"
},
"maxItems": 100,
"minItems": 1,
"title": "Columns",
"type": "array"
},
"allow_extra_columns": {
"default": false,
"title": "Allow Extra Columns",
"type": "boolean"
}
},
"required": [
"columns"
],
"title": "CsvSchema",
"type": "object"
}
},
"title": "validate_csvArguments"
}🟢clean_csv(csv_text, schema, cleanup, delimiter, request_id)
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.
入力スキーマ
{
"type": "object",
"properties": {
"csv_text": {
"title": "Csv Text",
"type": "string"
},
"schema": {
"$ref": "#/$defs/CsvSchema"
},
"cleanup": {
"$ref": "#/$defs/Cleanup"
},
"delimiter": {
"default": ",",
"enum": [
",",
";",
"\t",
"|"
],
"title": "Delimiter",
"type": "string"
},
"request_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Request Id"
}
},
"required": [
"csv_text",
"schema",
"cleanup"
],
"$defs": {
"Change": {
"additionalProperties": false,
"properties": {
"column": {
"description": "Original header before any renaming.",
"maxLength": 100,
"minLength": 1,
"title": "Column",
"type": "string"
},
"action": {
"enum": [
"trim",
"lowercase",
"uppercase",
"decimal_comma"
],
"title": "Action",
"type": "string"
}
},
"required": [
"column",
"action"
],
"title": "Change",
"type": "object"
},
"Cleanup": {
"additionalProperties": false,
"properties": {
"rename": {
"additionalProperties": {
"type": "string"
},
"description": "Original header to new header; simultaneous rename, no dropping columns.",
"title": "Rename",
"type": "object"
},
"changes": {
"description": "Applied in order to explicitly named original columns only.",
"items": {
"$ref": "#/$defs/Change"
},
"maxItems": 100,
"title": "Changes",
"type": "array"
},
"spreadsheet_safe": {
"default": false,
"description": "Prefix cells starting with spreadsheet formula markers with an apostrophe. Output is then revalidated; numeric negatives may fail numeric types.",
"title": "Spreadsheet Safe",
"type": "boolean"
}
},
"title": "Cleanup",
"type": "object"
},
"Column": {
"additionalProperties": false,
"properties": {
"name": {
"description": "Exact, case-sensitive header after any cleanup rename.",
"maxLength": 100,
"minLength": 1,
"title": "Name",
"type": "string"
},
"type": {
"default": "string",
"enum": [
"string",
"integer",
"decimal",
"boolean",
"date",
"email"
],
"title": "Type",
"type": "string"
},
"required": {
"default": true,
"description": "Reject an empty value. Every declared header must exist regardless.",
"title": "Required",
"type": "boolean"
},
"unique": {
"default": false,
"description": "Require non-empty raw strings to be unique within this column.",
"title": "Unique",
"type": "boolean"
},
"choices": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 100,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional exact allowed strings, checked before type conversion.",
"title": "Choices"
},
"minimum": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Inclusive numeric bound, as a decimal string. Numeric columns only.",
"title": "Minimum"
},
"maximum": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Inclusive numeric bound, as a decimal string. Numeric columns only.",
"title": "Maximum"
},
"max_length": {
"default": 10000,
"maximum": 10000,
"minimum": 1,
"title": "Max Length",
"type": "integer"
}
},
"required": [
"name"
],
"title": "Column",
"type": "object"
},
"CsvSchema": {
"additionalProperties": false,
"properties": {
"columns": {
"items": {
"$ref": "#/$defs/Column"
},
"maxItems": 100,
"minItems": 1,
"title": "Columns",
"type": "array"
},
"allow_extra_columns": {
"default": false,
"title": "Allow Extra Columns",
"type": "boolean"
}
},
"required": [
"columns"
],
"title": "CsvSchema",
"type": "object"
}
},
"title": "clean_csvArguments"
}コミュニティ
エビデンス