OBQC is deterministic — it parses the generated SQL and cross-references every table, column, join and aggregation against the ontology, so a fan-trap that would silently multiply your numbers comes back as an error instead of a wrong answer. On a large schema, graphrag_query_context is the other half: it hands the model a focused slice instead of the whole catalogue.
A Text-to-SQL server that first reads your schema into an RDF/OWL ontology, then validates every generated query against it — across 8 database connectors including PostgreSQL, MySQL, Snowflake, ClickHouse, Dremio, BigQuery, DuckDB and Databricks SQL.
- connect_database, list_schemas, discover_schema and get_table_details map the database, including relationships
- generate_ontology produces RDF/OWL with SQL annotations; load_my_ontology takes your own Turtle file instead
- execute_sql_query runs SQL through OBQC first — missing tables and columns, Cartesian joins, type mismatches, GROUP BY gaps and fan-traps are caught, and errors block execution
- suggest_semantic_names and apply_semantic_names rename cryptic identifiers into business-readable ones
- graphrag_query_context narrows a large schema to just the relevant tables and columns before SQL generation; graphrag_find_join_path resolves how two tables join, graphrag_search explores by keyword
- reachable_from, measurable_from and plan_composite_query work out fan-trap-safe decompositions for a given grain
- query_sparql, store_ontology_in_rdf and add_rdf_knowledge give a SPARQL 1.1 interface over a persistent Oxigraph store
- generate_chart renders Plotly bar, line, scatter and heatmap output; download_artifact exports the ontology or R2RML mapping as Turtle
- sample_table_data previews rows, save_semantic_model and list_semantic_models keep models per connection
Python 3.13+ and uv. Credentials come from environment variables per database — POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DATABASE, POSTGRES_USERNAME and POSTGRES_PASSWORD for PostgreSQL, SNOWFLAKE_ACCOUNT and its siblings for Snowflake — not from tool parameters. The server listens on http://localhost:9000, configurable through MCP_SERVER_PORT. Licensed BSL 1.1.
Build from source — clone the repository and build it, then point your client at the binary
