MCP-Server

sqlai.dev SQL Verifier

io.github.JadeSparrow/sqlai-dev-sql-verifier
Entwicklertools Öffentlich und erreichbar MCP 2025-11-25

Was dieses MCP kann

Validates and executes SQL against ephemeral databases, compares query results, and returns query plans and structured errors.

diff_results
Answer "do these two queries return the same thing?" — the self-check for query refactors. Executes query_a and query_b against identical fresh databases and compares result multisets (order-insensitive; order divergence reported separately when ORDER BY is present). Returns equal:boolean, row counts, and capped row-level diffs (only_in_a / only_in_b).
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['schema', 'query_a', 'query_b'], 'properties': {'seed': {'type': 'object', 'description': 'Optional seed rows: {"table_name": [{"col": value, ...}, ...]}. Max 10MB total.', 'additionalProperties': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}}}, 'engine': {'enum': ['sqlite', 'duckdb'], 'type': 'string', 'description': "Engine. Server-side supports 'sqlite' (default). 'duckdb' runs in the browser demo at sqlai.dev only."}, 'schema': {'type': 'string', 'description': 'DDL statements.'}, 'query_a': {'type': 'string', 'description': 'Original query.'}, 'query_b': {'type': 'string', 'description': 'Refactored/alternative query.'}}, 'additionalProperties': False}
explain_plan
Return the engine-native query plan for a query (SQLite: EXPLAIN QUERY PLAN) plus full-table-scan warnings. Use it to check whether an index would be used before recommending one. Example: "SELECT * FROM orders WHERE status=?" on an unindexed column → plan ["SCAN orders"], warning about the full scan.
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['schema', 'query'], 'properties': {'query': {'type': 'string', 'description': 'ONE SQL statement to explain.'}, 'engine': {'enum': ['sqlite', 'duckdb'], 'type': 'string', 'description': "Engine. Server-side supports 'sqlite' (default). 'duckdb' runs in the browser demo at sqlai.dev only."}, 'schema': {'type': 'string', 'description': 'DDL statements (include your indexes!).'}}, 'additionalProperties': False}
run_sql
Execute a SQL query against a fresh ephemeral in-memory database built from your schema (and optional seed rows). Returns real rows (max 500, truncation flagged), column names+types, row_count, and dialect notes. Errors come back as structured JSON with type/position/suggestion — a failed query is a useful answer, not a failure of this tool. Example: schema "CREATE TABLE t(id INTEGER, name TEXT);", query "SELECT name FROM t WHERE id=1", seed {"t":[{"id":1,"name":"ada"}]} → rows [["ada"]].
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['schema', 'query'], 'properties': {'seed': {'type': 'object', 'description': 'Optional seed rows: {"table_name": [{"col": value, ...}, ...]}. Max 10MB total.', 'additionalProperties': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}}}, 'query': {'type': 'string', 'description': 'ONE SQL statement to execute. Stacked statements are rejected.'}, 'engine': {'enum': ['sqlite', 'duckdb'], 'type': 'string', 'description': "Engine. Server-side supports 'sqlite' (default). 'duckdb' runs in the browser demo at sqlai.dev only."}, 'schema': {'type': 'string', 'description': 'DDL statements (CREATE TABLE ...; multiple statements allowed).'}}, 'additionalProperties': False}
run_sql_batch
Run up to 10 queries against the same schema+seed. Each query executes in its OWN fresh database — writes in one query are NOT visible to the next (use this for testing variants, not for multi-statement transactions). Returns an array of run_sql results in order.
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['schema', 'queries'], 'properties': {'seed': {'type': 'object', 'description': 'Optional seed rows: {"table_name": [{"col": value, ...}, ...]}. Max 10MB total.', 'additionalProperties': {'type': 'array', 'items': {'type': 'object', 'additionalProperties': {}}}}, 'engine': {'enum': ['sqlite', 'duckdb'], 'type': 'string', 'description': "Engine. Server-side supports 'sqlite' (default). 'duckdb' runs in the browser demo at sqlai.dev only."}, 'schema': {'type': 'string', 'description': 'DDL statements.'}, 'queries': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 10, 'description': 'Up to 10 statements, one per entry.'}}, 'additionalProperties': False}
validate_sql
Validate a SQL query against a schema WITHOUT executing it (parse + name/type binding via EXPLAIN). Returns ok with referenced tables, or a structured error: {type: unknown_column|unknown_table|syntax|..., message, position, suggestion}. The suggestion is rule-based (edit distance against your schema). Example: query "SELECT nmae FROM users" → error type unknown_column, suggestion 'did you mean "name"?'.
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['schema', 'query'], 'properties': {'query': {'type': 'string', 'description': 'ONE SQL statement to validate.'}, 'engine': {'enum': ['sqlite', 'duckdb'], 'type': 'string', 'description': "Engine. Server-side supports 'sqlite' (default). 'duckdb' runs in the browser demo at sqlai.dev only."}, 'schema': {'type': 'string', 'description': 'DDL statements.'}}, 'additionalProperties': False}
Hinzugefügt
diff_results
17. September 2026 12:42
Hinzugefügt
run_sql_batch
17. September 2026 12:42
Hinzugefügt
explain_plan
17. September 2026 12:42
Hinzugefügt
validate_sql
17. September 2026 12:42
Hinzugefügt
run_sql
17. September 2026 12:42