{"ok":true,"site":{"host":"data-airlock-webmcp.pages.dev","url":"https://data-airlock-webmcp.pages.dev/","type":"live","desc":"Clean sensitive datasets with an AI agent — without uploading the dataset.","tools":[{"name":"get_airlock_guide","kind":"answer","impl":"imperative","description":"Guía oficial de Data Airlock. Con Airlock abierto y sin tarea concreta, si el usuario pregunta «¿Qué puedo hacer aquí?», «¿Cómo funciona esto?», «Ayúdame con Airlock» o «Quiero usar Data Airlock», llama primero con mode=\"overview\" y ofrece 6 apartados (2–3 min) antes de capacidades generales. «guía Airlock» o equivalente → mode=\"menu\"; tema concreto → section. No interrumpas una acción concreta ni insistas tras rechazo. Explica natural, sin JSON, raw values ni autoridad humana para el agente.","title":"Guía oficial de Data Airlock","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"mode":{"type":"string","enum":["overview","menu","section"]},"section":{"type":"integer","minimum":1,"maximum":6}},"required":["mode"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_dataset_profile","kind":"answer","impl":"imperative","description":"Profile the local dataset and return bounded aggregate structure only. Never returns raw record values or real field names.","title":"Get dataset profile","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_quality_findings","kind":"answer","impl":"imperative","description":"Return aggregated F01-F07 findings with risk and allowed actions. High-risk findings also expose a conservative leave-unchanged recommendation and human-review requirement. Never returns raw values.","title":"Get quality findings","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_capability_gaps","kind":"answer","impl":"imperative","description":"Scan the local profiled dataset for structural families no active capability explains. Returns pseudonymous field IDs, safe family labels, compatible closed-DSL Forge primitives, and safe create-vs-evolve guidance with related active skill IDs when applicable. Aggregate evidence only; never values, snippets, samples, real field names, paths or filenames.","title":"Get capability gaps","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_cleaning_tool_source","kind":"answer","impl":"imperative","description":"Return the complete open-source cleaning implementation for one F01-F07 or active local cleaning skill in one result; optional offset pagination is a compatibility fallback. Never returns dataset content or Airlock infrastructure source.","title":"Get cleaning tool source","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"finding_id":{"type":"string","enum":["F01","F02","F03","F04","F05","F06","F07"],"description":"Built-in F01-F07 cleaning tool to inspect."},"skill_id":{"type":"string","minLength":3,"maxLength":40,"pattern":"^(?!(?:constructor|prototype)$)[a-z][a-z0-9]*(?:-[a-z0-9]+)*$","description":"Active forged/learned cleaning skill to inspect. Supply exactly one of finding_id or skill_id."},"source_offset":{"type":"integer","minimum":0,"description":"Optional fallback pagination offset. Omit it to receive the complete open-source cleaning-tool implementation in one result."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"stage_finding_action","kind":"act","impl":"imperative","description":"Stage one validated cleaning action in the current shared plan. Echo view_token from the latest successful result; stale or cross-dataset writes are rejected.","title":"Stage finding action","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"finding_id":{"type":"string","enum":["F01","F02","F03","F04","F05","F06","F07"],"description":"Finding ID from get_quality_findings."},"action":{"type":"string","enum":["normalize_nfc","trim_outer_whitespace","collapse_horizontal_whitespace","convert_to_null","remove_control_characters","replace_with_marker","drop_record","leave_unchanged"],"description":"Allowed action for the finding."},"field_id":{"type":"string","pattern":"^field_[0-9]{3}$","description":"Optional field scope; omit to target all affected fields."},"view_token":{"type":"string","minLength":51,"maxLength":51,"pattern":"^v1_[0-9a-f]{48}$","description":"Opaque token from the latest successful Data Airlock result; required to reject stale or cross-dataset agent writes."}},"required":["finding_id","action","view_token"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_staged_action","kind":"act","impl":"imperative","description":"Remove an agent-staged action from the current shared plan. Echo view_token from the latest successful result; stale writes are rejected and human decisions stay protected.","title":"Remove staged action","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"finding_id":{"type":"string","enum":["F01","F02","F03","F04","F05","F06","F07"],"description":"Core finding ID whose staged action should be removed."},"skill_id":{"type":"string","minLength":3,"maxLength":40,"pattern":"^(?!(?:constructor|prototype)$)[a-z][a-z0-9]*(?:-[a-z0-9]+)*$","description":"Forged/learned cleaning skill ID whose staged action should be removed. Supply exactly one of finding_id or skill_id."},"field_id":{"type":"string","pattern":"^field_[0-9]{3}$","description":"Optional field scope matching the staged action."},"view_token":{"type":"string","minLength":51,"maxLength":51,"pattern":"^v1_[0-9a-f]{48}$","description":"Opaque token from the latest successful Data Airlock result; required to reject stale writes."}},"required":["view_token"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_cleaning_plan","kind":"answer","impl":"imperative","description":"Read the current staged plan, provenance, risk, workflow gates, and the exact cached simulation impact when one is already fresh. If human approval is required, stop and ask the human to approve in the Data Airlock UI; never click, activate, or automate human-only approval or execution controls in the browser/DOM.","title":"Get cleaning plan","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"simulate_cleaning_plan","kind":"act","impl":"imperative","description":"Return exact aggregate impact plus SHA-256 plan hash. Runs a real local second pass only when simulation is stale; otherwise returns the cached exact simulation without rereading the dataset. After simulation, STOP: human approval must be performed independently by the human in the Data Airlock UI. Never click, activate, or automate approval/execute controls in the browser/DOM on the human's behalf.","title":"Simulate cleaning plan","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_audit_receipt","kind":"answer","impl":"imperative","description":"After successful execution, return the bounded audit receipt with output metrics, plan hash, output mode, metadata bytes, and zero raw values exposed.","title":"Get audit receipt","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"forge_capability","kind":"act","impl":"imperative","description":"Validate and register a closed diagnostic or cleaning DSL recipe. Cleaning capabilities can only stage plan actions and can never bypass simulation or human approval; no raw outputs, network, DOM, filesystem, or arbitrary code authority.","title":"Forge safe capability","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"skill_id":{"type":"string","minLength":3,"maxLength":40,"pattern":"^(?!(?:constructor|prototype)$)[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"},"display_name":{"type":"string","minLength":3,"maxLength":64,"pattern":"^[^\u0000-\u001f‪-‮⁦-⁩]+$"},"version":{"type":"integer","minimum":1,"maximum":32},"recipe":{"type":"object","properties":{"op":{"type":"string","enum":["classify_patterns","rewrite_strings","drop_records"]},"patterns":{"type":"array","minItems":1,"maxItems":8,"uniqueItems":true,"items":{"type":"string","enum":["date_iso_ymd_dash","date_dmy_slash","date_mdy_dash","date_ymd_dot","date_dmy_dot","uuid_hyphenated","uuid_compact","uuid_braced","boolean_true_false","boolean_yes_no","boolean_one_zero","text_non_nfc","text_outer_whitespace","text_zero_width_edges","text_repeated_horizontal_whitespace","text_empty_or_whitespace","text_control_characters","payload_base64_like","instruction_like"]}},"aggregate":{"type":"string","enum":["dominant_pattern"]},"transform":{"type":"string","enum":["date_to_iso_ymd","uuid_to_hyphenated","uuid_to_compact","boolean_to_true_false","normalize_nfc","trim_outer_whitespace","trim_outer_whitespace_and_zero_width","collapse_horizontal_whitespace","convert_to_null","remove_control_characters","replace_with_marker","drop_record"]},"scope":{"type":"string","enum":["all_string_fields","selected_string_field"]}},"required":["op","patterns","scope"],"additionalProperties":false},"synthetic_tests":{"type":"array","minItems":1,"maxItems":4,"items":{"type":"object","properties":{"input":{"type":"string","enum":["mixed_standard_dates_v1","mixed_standard_dates_v2","uuid_formats_v1","uuid_formats_v2","boolean_tokens_v1","boolean_tokens_v2","text_cleanup_v1","text_cleanup_v2","security_cleanup_v1"]},"expectedPatterns":{"type":"integer","minimum":1,"maximum":8},"expectedChanged":{"type":"integer","minimum":1,"maximum":64}},"required":["input"],"additionalProperties":false}},"parent_version":{"type":["integer","null"],"minimum":1,"maximum":31},"extends_core_finding":{"type":["string","null"],"enum":["F01","F02","F03","F04","F05","F06","F07",null]},"view_token":{"type":"string","minLength":51,"maxLength":51,"pattern":"^v1_[0-9a-f]{48}$"}},"required":["skill_id","display_name","version","recipe","synthetic_tests","parent_version","view_token"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Developer Tools","apiSurface":"spec","toolCount":11}}