{"serverId":"mcp-registry/io.github.aidatatools-dev/data-quality-gate","tools":[{"name":"check_dataset_quality","fixed":{"name":"check_dataset_quality","description":"Call this before using any dataset. Returns a deterministic quality verdict (RELIABLE / USABLE_WITH_CLEANING / UNRELIABLE) with exact facts: completeness, nulls, type consistency, impossible values, duplicates, outliers, and (on financial/trading data) cross-source price divergence. 100% deterministic, no LLM. Free -- this MCP endpoint runs the engine directly; POST /api (plain REST, same engine) is x402-gated at $0.01/call instead. Input: rawJson (a JSON array of row objects, or a single object","inputSchema":{"type":"object","properties":{"rawJson":{"description":"The dataset: a JSON array of row objects, or a single object.","type":"string"},"datasetId":{"type":"string","description":"An Apify dataset id. Not resolvable on this deployment; pass rawJson instead."}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: rawJson. Change to number/boolean/array where that's what you accept.","verify":true},{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":225,"tokensAfter":230},{"name":"clean_scraped_data","fixed":{"name":"clean_scraped_data","description":"PAID TIER, CALLED FROM A FREE ENDPOINT -- READ THIS FIRST: this tool does NOT return your cleaned data, and its response has NO `data` key. It returns {\"status\": \"payment_required\", \"what_we_found_in_your_data\": {...}, \"get_the_repaired_data\": {...}}. Do not treat its output as cleaned data and do not write it back into your dataset.\nWHAT YOU GET HERE, FREE: an exact inventory of the defects in YOUR data -- which repair rules would fire, how many values each would change, and which cases cannot ","inputSchema":{"type":"object","required":["rawJson"],"properties":{"options":{"type":"object","properties":{"repair_keys":{"type":"boolean","description":"Also repair dict KEYS (the classic '\\ufeffsku' first column of a BOM-prefixed CSV export). Off by default: a key is a contract with everything downstream."},"trim_whitespace":{"type":"boolean","description":"Default true."},"detect_duplicates":{"type":"boolean","description":"Default true. Set false to skip duplicate detection on very large input."},"placeholder_policy":{"enum":["flag","null_high_confidence","null_all"],"type":"string","description":"What to do with masked-missing strings. 'flag' (default) reports them and changes nothing. 'null_high_confidence' nulls only tokens that cannot be real data ('N/A', 'null', 'undefined') and never the ambiguous ones ('None' is a surname, 'NA' is Namibia, '-' is a real value). 'null_all' nulls the ambiguous ones too -- only choose this if you know the domain."},"coerce_numeric_text":{"type":"boolean","description":"Turn 'US $5.59' into 5.59. Per field, all-or-nothing, and only where every value is unambiguous -- a lone ',' or a mixed currency disqualifies the whole field rather than being guessed at."},"drop_exact_duplicates":{"type":"boolean","description":"Remove rows byte-identical to an earlier row, compared AFTER cleaning. Off by default because it changes the row count; duplicates are reported either way."}},"description":"All optional. Every default is the safe one: with no options, the row count, every value's type, and the schema are all guaranteed unchanged."},"rawJson":{"description":"The scraper output: a JSON array of row objects, a single object, or a CSV/plain-text string. The format is detected and the output mirrors the shape you sent.","type":"string"}}}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: rawJson. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":650,"tokensAfter":655},{"name":"clean_scraped_data_audited","fixed":{"name":"clean_scraped_data_audited","description":"PAID TIER, CALLED FROM A FREE ENDPOINT -- READ THIS FIRST: this tool does NOT return your cleaned data, and its response has NO `data` key. It returns {\"status\": \"payment_required\", \"what_we_found_in_your_data\": {...}, \"get_the_repaired_data\": {...}}. Do not treat its output as cleaned data and do not write it back into your dataset.\nWHAT YOU GET HERE, FREE: an exact inventory of the defects in YOUR data -- which repair rules would fire, how many values each would change, and which cases cannot ","inputSchema":{"type":"object","required":["rawJson"],"properties":{"options":{"type":"object","properties":{"repair_keys":{"type":"boolean","description":"Also repair dict KEYS (the classic '\\ufeffsku' first column of a BOM-prefixed CSV export). Off by default: a key is a contract with everything downstream."},"trim_whitespace":{"type":"boolean","description":"Default true."},"detect_duplicates":{"type":"boolean","description":"Default true. Set false to skip duplicate detection on very large input."},"placeholder_policy":{"enum":["flag","null_high_confidence","null_all"],"type":"string","description":"What to do with masked-missing strings. 'flag' (default) reports them and changes nothing. 'null_high_confidence' nulls only tokens that cannot be real data ('N/A', 'null', 'undefined') and never the ambiguous ones ('None' is a surname, 'NA' is Namibia, '-' is a real value). 'null_all' nulls the ambiguous ones too -- only choose this if you know the domain."},"coerce_numeric_text":{"type":"boolean","description":"Turn 'US $5.59' into 5.59. Per field, all-or-nothing, and only where every value is unambiguous -- a lone ',' or a mixed currency disqualifies the whole field rather than being guessed at."},"drop_exact_duplicates":{"type":"boolean","description":"Remove rows byte-identical to an earlier row, compared AFTER cleaning. Off by default because it changes the row count; duplicates are reported either way."}},"description":"All optional. Every default is the safe one: with no options, the row count, every value's type, and the schema are all guaranteed unchanged."},"rawJson":{"description":"The scraper output: a JSON array of row objects, a single object, or a CSV/plain-text string. The format is detected and the output mirrors the shape you sent.","type":"string"}}}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: rawJson. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":653,"tokensAfter":657}],"toolsChanged":3,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}