Supabase
MCP server for interacting with the Supabase platform
제작자가 쓴 설명(영어 원문)
Read-only BigQuery tools for plain-language data questions, with a cost gate on every query
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
BQ_MCP_ENVIRONMENTS, BQ_MCP_DEFAULT_ENVIRONMENT, BQ_MCP_CONFIG, BQ_IMPERSONATE_SERVICE_ACCOUNT, BQ_PROJECT, BQ_LOCATION, BQ_CODE_ASSET_LOCATION, BQ_DATASET_ALLOWLIST, BQ_WARN_BYTES, BQ_MAX_BYTES_BILLED, BQ_MCP_AUDIT_LOG필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"data-platform": {
"command": "uvx",
"args": [
"data-platform-mcp"
],
"env": {
"BQ_MCP_ENVIRONMENTS": "your-value",
"BQ_MCP_DEFAULT_ENVIRONMENT": "your-value",
"BQ_MCP_CONFIG": "your-value",
"BQ_IMPERSONATE_SERVICE_ACCOUNT": "your-value",
"BQ_PROJECT": "your-value",
"BQ_LOCATION": "your-value",
"BQ_CODE_ASSET_LOCATION": "your-value",
"BQ_DATASET_ALLOWLIST": "your-value",
"BQ_WARN_BYTES": "your-value",
"BQ_MAX_BYTES_BILLED": "your-value",
"BQ_MCP_AUDIT_LOG": "your-value"
}
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add data-platform --env BQ_MCP_ENVIRONMENTS=your-value --env BQ_MCP_DEFAULT_ENVIRONMENT=your-value --env BQ_MCP_CONFIG=your-value --env BQ_IMPERSONATE_SERVICE_ACCOUNT=your-value --env BQ_PROJECT=your-value --env BQ_LOCATION=your-value --env BQ_CODE_ASSET_LOCATION=your-value --env BQ_DATASET_ALLOWLIST=your-value --env BQ_WARN_BYTES=your-value --env BQ_MAX_BYTES_BILLED=your-value --env BQ_MCP_AUDIT_LOG=your-value -- uvx data-platform-mcp실행하기 전에 빈 값을 채워 주세요.
프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"data-platform": {
"command": "uvx",
"args": [
"data-platform-mcp"
],
"env": {
"BQ_MCP_ENVIRONMENTS": "your-value",
"BQ_MCP_DEFAULT_ENVIRONMENT": "your-value",
"BQ_MCP_CONFIG": "your-value",
"BQ_IMPERSONATE_SERVICE_ACCOUNT": "your-value",
"BQ_PROJECT": "your-value",
"BQ_LOCATION": "your-value",
"BQ_CODE_ASSET_LOCATION": "your-value",
"BQ_DATASET_ALLOWLIST": "your-value",
"BQ_WARN_BYTES": "your-value",
"BQ_MAX_BYTES_BILLED": "your-value",
"BQ_MCP_AUDIT_LOG": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"data-platform": {
"type": "stdio",
"command": "uvx",
"args": [
"data-platform-mcp"
],
"env": {
"BQ_MCP_ENVIRONMENTS": "your-value",
"BQ_MCP_DEFAULT_ENVIRONMENT": "your-value",
"BQ_MCP_CONFIG": "your-value",
"BQ_IMPERSONATE_SERVICE_ACCOUNT": "your-value",
"BQ_PROJECT": "your-value",
"BQ_LOCATION": "your-value",
"BQ_CODE_ASSET_LOCATION": "your-value",
"BQ_DATASET_ALLOWLIST": "your-value",
"BQ_WARN_BYTES": "your-value",
"BQ_MAX_BYTES_BILLED": "your-value",
"BQ_MCP_AUDIT_LOG": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
BQ_MCP_ENVIRONMENTS envBQ_MCP_DEFAULT_ENVIRONMENT envBQ_MCP_CONFIG envBQ_IMPERSONATE_SERVICE_ACCOUNT envBQ_PROJECT envBQ_LOCATION envBQ_CODE_ASSET_LOCATION envBQ_DATASET_ALLOWLIST envBQ_WARN_BYTES envBQ_MAX_BYTES_BILLED envBQ_MCP_AUDIT_LOG env이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 6일 점검
레지스트리 이름이 GitHub 계정 deBilla 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.4.0)은 지난달 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Python (uv)도 있어야 해요.
같은 카테고리에는: Supabase, MongoDB MCP Server, Elasticsearch MCP Server
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
MCP server for interacting with the Supabase platform
MongoDB Model Context Protocol Server
MCP server for interacting with Elasticsearch
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
A read-only Model Context Protocol server over Google BigQuery. It lets an AI client (Claude Code, Claude Desktop, …) answer plain-language data questions by discovering schema and running SELECT queries.
The AI does the natural-language → SQL translation; this server just safely executes against BigQuery under your own Google credentials.
data-platform-mcp| Tool | Purpose | Cost |
|---|---|---|
list_datasets | List datasets in the project | free |
list_tables | List tables/views in a dataset | free |
get_table_schema | Columns (nested paths expanded), partitioning, size, row count | free |
check_table_freshness | When each table was last written — catches stale sources | free |
list_environments | Which BigQuery environments are configured, and the default | free |
list_scheduled_queries | Which scheduled query writes a table, and whether it is disabled or failing | free |
get_scheduled_query | One query's SQL, destination and recent runs | free |
list_code_assets | Notebooks, saved queries and data canvases in BigQuery Studio | free |
get_code_asset | One notebook or saved query's body, notebook outputs stripped | free |
find_code_assets_using_table | Which notebooks/saved queries read a table | quota, not $ |
list_notebook_schedules | Scheduled Colab notebooks, with how many recent runs failed | free |
list_notebook_runs | Individual notebook runs across every schedule — failures by default | free |
get_notebook_schedule | One schedule's cron, notebook and recent errors | free |
run_query | Run a validated, read-only SELECT and return rows | scans data |
Only run_query costs anything, so the discovery tools are the ones to spend first. Two of them exist to prevent specific, repeated mistakes:
partition_date column may not be partitioned — in which case no WHERE clause reduces the scan and every query reads the whole table. The response flags this explicitly when the table is large.roles/bigquerydatatransfer.viewer. Without that role the two tools return an error naming it and everything else works normally. Most scheduled queries declare no destination because they write with DDL, so the target is read out of the SQL and reported as writes_to_from_sql — a heuristic, labelled as one.These are not BigQuery resources. BigQuery Studio stores each code asset as a Dataform repository holding a single file, which means a third API and a third permission — roles/dataform.viewer — beyond BigQuery and the Data Transfer Service. Without it the three tools return an error naming the role and everything else works normally. They are also invisible in the Dataform UI, so nothing in the console hints that this is where they live.
Two things about that storage are worth knowing before you configure it:
US keeps its notebooks in something like us-central1. No configuration is needed: when location is a multi-region the server probes the regions inside it, uses the one holding the assets, and says so — a multi-region cannot simply be inherited, because using it is guaranteed to fail rather than merely likely to. Pin code_asset_location (or BQ_CODE_ASSET_LOCATION) to skip the probing; an explicit value is never second-guessed, so a wrong one returns an empty list rather than an error. Every result echoes back the location it read.Reads are quota-limited by volume rather than by concurrency, and the quota refills over tens of seconds. Exhaustion is retried with backoff and, if it persists, reported as something to retry shortly rather than as a failure.
A notebook in BigQuery Studio can have a schedule attached to it, and those runs are where scheduled work goes unwatched: nothing reports on them, so a notebook can fail nightly for weeks and the only symptom is a table that quietly stopped moving. On the platform this was built against, 354 of 7,061 runs had failed and none of it was visible.
Answering one question means joining three resources, which is most of why it was hard to see. The schedule is a Vertex AI Schedule (cron, timezone, paused or not); each run is a NotebookExecutionJob; the notebook is the same Dataform code asset list_code_assets lists — so a failing schedule leads straight to get_code_asset for the code that failed. That means a fourth API and a fourth permission, roles/aiplatform.viewer. Without it the three tools return an error naming the role and everything else works normally. No new dependency: this talks to Vertex AI over REST rather than pulling in google-cloud-aiplatform for two list endpoints.
Three things are worth knowing before trusting what you see:
OK — including one whose previous 79 runs had failed. OK means the scheduler successfully *launched* a job, not that the notebook ran. That field is what the console shows first, and it is exactly how this went unnoticed, so health here is always computed from execution jobs and the schedule's own status is never reported as one. A PAUSED schedule, meanwhile, is the single most common reason a notebook-written table went stale.jobState filter outright and caps pages at 100, so "show me the failures" means reading pages and filtering locally. Runs *are* ordered newest-first, which is what makes a bounded window affordable: lookback_days (30 by default, so monthly schedules show at least one run) stops the walk instead of scanning a year of history. 30 days is about 7 API calls; 90 is about 23.(schedule no longer exists) rather than dropped. For the same reason display names are not unique — two live schedules shared one — so an ambiguous name is an error listing the candidates and their ids, never a silently chosen first match.data-platform-mcp doctor reports how many schedules are readable, how many are paused and how many failed in the last week.
One server answers questions about several targets — a warehouse and its staging copy, or two regions of the same project. Every tool takes an optional environment; omitting it uses the default.
# ~/.config/data-platform-mcp/config.toml
default_environment = "warehouse"
[environments.warehouse] project = "my-data-platform" impersonate = "data-platform-mcp-ro@my-data-platform.iam.gserviceaccount.com" dataset_allowlist = ["sales", "events"]
[environments.central] # same project, different region project = "my-data-platform" location = "us-central1"
See config.toml.example for every setting, or set BQ_MCP_ENVIRONMENTS to the same structure as JSON. A single `BQ_PROJECT` still works unchanged — it becomes one environment named default.
An environment can be named by its own name, an alias, the built-in shorthands (prod, stg, dev, live) or its project id. An unknown name is an error naming the valid options, never a silent fall back to the default: a typo that answered a production question from staging would be invisible in the reply. Every result echoes back the environment it came from.
Regions are why this matters most here. BigQuery cannot query across locations, and its error for trying names neither location, so it reads as a missing table. One environment per location; doctor reports which datasets are where.
The SELECT-only guard and the readOnlyHint annotations are promises about this code. Pointing the server at a service account that holds only roles/bigquery.jobUser and a dataset-scoped roles/bigquery.dataViewer makes it a fact about the credentials — enforced by IAM whatever the code does, and whatever your own roles allow:
data-platform-mcp setup --project my-data-platform --datasets sales,events
Creates the account, grants those two roles, and gives you roles/iam.serviceAccountTokenCreator on it so the server can impersonate it. Add --dry-run to see the commands first; it is safe to re-run.
With --datasets, the dataset allowlist stops being an if statement in this process and becomes a grant Google enforces.
Terminal.app is not Xcode. It ships with every Mac. What does *not* ship is the Xcode Command Line Tools, and an analyst's laptop usually has neither those nor Homebrew. Nothing here needs them — but it is easy to trip over by accident, because git, make, clang and the stock /usr/bin/python3 are stubs for that bundle: running any of them pops a system dialog offering to install about a gigabyte of developer tooling.
None of the commands below invoke one. They use only utilities macOS already has — curl, tar, sh, uname — because both installs are self-contained:
| Install | Why it needs nothing else |
|---|---|
uv | A standalone binary. Its installer never mentions Python, and it downloads its own to run the server. |
| Google Cloud CLI | The macOS tarball bundles its own Python (.install/bundled-python3-unix-darwin-*). |
The whole terminal requirement is the three blocks below, once.
curl -LsSf https://astral.sh/uv/install.sh | sh
which uvx # note this absolute path — Claude Desktop will need it
Typically /Users/ /.local/bin/uvx.
Pick the build for your chip — uname -m prints arm64 for Apple Silicon, x86_64 for Intel:
# Apple Silicon
cu
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요