Supabase
Supabase’s official server lets AI create tables, query data and review project settings in your Supabase database.
Description from the maker (original English)
API-first semantic layer MCP server compiling YAML models into dialect-specific SQL
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"orionbelt-semantic-layer": {
"command": "uvx",
"args": [
"orionbelt-semantic-layer"
]
}
}
}Run this in your terminal
claude mcp add orionbelt-semantic-layer -- uvx orionbelt-semantic-layerPaste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"orionbelt-semantic-layer": {
"command": "uvx",
"args": [
"orionbelt-semantic-layer"
]
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"orionbelt-semantic-layer": {
"type": "stdio",
"command": "uvx",
"args": [
"orionbelt-semantic-layer"
]
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 9, 2026
The registry name was verified with the GitHub account ralfbecher, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
The registry does not list a required key, though some servers ask you to sign in on first use.
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.3.0) reached the registry 9 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Python (uv) on your computer.
In the same category: Supabase, MongoDB MCP Server, Elasticsearch MCP Server
Servers in the same category from other makers, sorted by stars.
Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Supabase’s official server lets AI create tables, query data and review project settings in your Supabase database.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
OrionBelt® Semantic and Context Layer, Rule Engine, and Semantic Sidecar
Define shared metrics or model a set of questions in YAML. Let agents and BI tools query through one semantic compiler.
A semantic sidecar : it rides alongside the systems you already run instead of replacing them.
Ask an LLM to write SQL against a raw star schema and sooner or later it joins two fact tables and hands you a revenue number inflated by a factor of eight. It looks right. Nobody catches it.
OrionBelt is a semantic and context layer with a rule engine, and it runs as a [semantic sidecar](https://ralforion.com/semantic-sidecar.html). You or an agent declare dimensions, measures, metrics, and joins in YAML, scoped to one task or maintained as a shared model. OrionBelt compiles them into dialect-specific SQL through a real AST, and routes multi-fact queries through a Composite Fact Layer planner that blocks the join paths that produce fan traps. Queries ask for "Total Revenue" by "Country"; physical table and column mappings live in the model.
No BI tool in the middle. No runtime lock-in. Point it at what you already have.
An agent can model just the questions it needs to answer. With POST /v1/oneshot/batch, it submits a task-specific OBML model and several independent queries in one request. OBSL validates the model, compiles or executes the queries, and returns separately identified results with SQL, explanations, warnings, and errors as applicable.
For "revenue by country, monthly revenue, and average order value," the agent defines the relevant columns and calculations once and asks three questions against them. A freshly loaded model is removed after the batch by default; persist_model: true keeps it in the session for follow-up questions. The same compiler supports this workflow and long-lived shared models.
Follow the agent workflow guide for a complete example, or see the one-shot API contract.
The same model serves every surface you already use. Four of them, and one model behind all four:
| Surface | Port | Speaks | Connect with |
|---|---|---|---|
| PostgreSQL wire | 5432 | Postgres protocol | DuckDB via ATTACH, Tableau, Dremio as a federated source, Power BI, Superset, DBeaver, Metabase, psql |
| Arrow Flight SQL | 8815 | gRPC + Arrow | DuckDB via adbc_scanner, Tableau and Power BI through the Flight SQL JDBC/ODBC drivers, ADBC clients (Python, Go, Java) |
| REST | 8000 | HTTP + JSON | your code, notebooks, curl, and the 8 PEP 249 drivers (which compile here, then execute on the warehouse directly) |
| MCP | stdio / HTTP | Model Context Protocol | AI agents: Claude, Cursor, Copilot, Windsurf |
Both SQL surfaces speak OBSQL, so SELECT "Region", "Total Sales" FROM sales_model is the same query whichever one you came in through. ADBC is how you *use* the Flight SQL surface rather than a fifth surface of its own, and DuckDB is a client that can take either SQL surface.
Compiles to BigQuery, ClickHouse, Databricks, Dremio, DuckDB/MotherDuck, MySQL, PostgreSQL, and Snowflake. The warehouse behind the model is independent of the surface in front of it: any of the four surfaces, against any of the eight dialects.
Here is TPC-DS query 98. Two measures over the same column, identical but for one line: Class Revenue is pinned to a coarser grain than the query asks for.
measures:
Store Sales Amount: columns: [{dataObject: Store Sales, column: Ext Sales Price}] aggregation: sum
Class Revenue: columns: [{dataObject: Store Sales, column: Ext Sales Price}] aggregation: sum grain: {mode: FIXED, keepOnly: [Class]} # <- pin to Class, ignore query grain
metrics: Revenue Ratio: expression: "{[Store Sales Amount]} * 100.0 / {[Class Revenue]}"
That one grain line is what becomes SUM(...) OVER (PARTITION BY "Class") below.
The query names business concepts. No tables, no joins, no SQL:
select:
dimensions: [Item ID, Item Description, Category, Class, Current Price] measures: [Store Sales Amount, Revenue Ratio] where:
pip install orionbelt-semantic-layer
obsl compile tpcds.obml.yml -q Q98.yml -d duckdb
WITH "base" AS (
SELECT "Item"."i_item_id" AS "Item ID", "Item"."i_item_desc" AS "Item Description", "Item"."i_category" AS "Category", "Item"."i_class" AS "Class", "Item"."i_current_price" AS "Current Price", CAST(SUM("Store Sales"."ss_ext_sales_price") AS DECIMAL(18, 2)) AS "Store Sales Amount", SUM("Store Sales"."ss_ext_sales_price") AS "Class Revenue" FROM "main"."store_sales" AS "Store Sales" LEFT JOIN "main"."item" AS "Item" ON "Store Sales"."ss_item_sk" = "Item"."i_item_sk" LEFT JOIN "main"."date_dim" AS "Date" ON "Store Sales"."ss_sold_date_sk" = "Date"."d_date_sk" WHERE "Item"."i_category" IN ('Sports', 'Books', 'Home') AND "Date"."d_date" BETWEEN '1999-02-22' AND '1999-03-24' GROUP BY ALL ) SELECT "Item ID" AS "Item ID", "Item Description" AS "Item Description", "Category" AS "Category", "Class" AS "Class", "Current Price" AS "Current Price", "Store Sales Amount" AS "Store Sales Amount", "Store Sales Amount" * 100.0 / NULLIF(SUM("Class Revenue") OVER (PARTITION BY "Class"), 0) AS "Revenue Ratio" FROM "base" AS "base" ORDER BY "Category" ASC, "Class" ASC, "Item ID" ASC, "Item Description" ASC, "Revenue Ratio" ASC
You did not write the join path, the window function over an aggregate, the NULLIF guard, or one table name. Change -d duckdb to -d snowflake and the same two files compile for Snowflake, or for any of eight dialects.
This is checked, not asserted. 40 TPC-DS queries are built against a single OBML model and compared row by row against each engine's own reference SQL: 39 of 40 match on DuckDB at sf=1, 37 of 40 on ClickHouse at sf=10. Every one of the remaining differences traces to a reference variant rather than a compilation error, and each is documented. See the sweep, or the queries in examples/tpcds_queries/.
Compiling for eight engines is the easy part. The engines disagree about results, and a layer that only fixes the spelling of a function passes the disagreement through to your dashboard or your agent. OrionBelt pins the answer:
| Expression | What the engines do | What OrionBelt returns |
|---|---|---|
x / 0 | inf on one engine, an error on four, NULL on the rest | NULL, everywhere |
round(2.5) on a float | ClickHouse, PostgreSQL and MySQL round ties to even and answer 2 | 3, everywhere |
greatest(1, NULL, 3) | Four engines skip the NULL and answer 3 | NULL, everywhere |
length('äbcd') | ClickHouse and MySQL count bytes and answer 5 | 4 characters |
json_value(doc, '$.a') where a is an object | Four engines return the serialized JSON | NULL: the path did not reach a scalar |
Each row is executed against the live engines and asserted, not derived from vendor documentation. Set expressionMode: portable and a function outside the portable catalog becomes an error, so a model cannot pick up an engine dependency by accident.
A semantic model should not be a dead end, and a number should be able to say where it came from.
obsl convert) and the UI. The converter is also a standalone package (pip install osi-orionbelt) and is being contributed upstream.UNION ALL legs and exists subqueries, down to columns and tables. As JSON, Mermaid or Turtle, over REST, the CLI (obsl lineage) and the UI.OrionBelt is a sidecar, not a platform. It compiles a YAML model into correct SQL and exposes it over the protocols you already use. It does not run a cluster, own your cache, or ask you to adopt a cloud.
Reach for OrionBelt when:
Only the beginning is shown; read the rest in the repo