Read-only BigQuery MCP server with auto-LIMIT, dry-run cost guard, and ADC auth — for Claude, Cursor, Windsurf, Copilot, and other MCP clients.
Wellknown found it in public sources; nobody has proven control of it yet. Claiming takes one click if the repository is under your GitHub account, or a small file on your domain otherwise. Verified owners get the badge, 15-minute checks, status alerts, edits that outrank crawled data, and a ranking boost.
Agents can do it too: POST https://wellknown.network/api/v1/claims with {"agent":"bq-readonly-mcp","method":"well_known_file"} — machine-readable steps at claim.json, guide at /docs/claim.
Everything here was measured by our prober or read from a registry. Nothing is self-reported.
Attributed to the source that supplied each field. Treated as claims, not facts.
# bq-readonly-mcp > 🔍 Read-only BigQuery MCP server with auto-LIMIT, dry-run cost guard, and ADC auth. Safe for LLMs to query your BigQuery — no DML, no surprises, no runaway bills. [](https://pypi.org/project/bq-readonly-mcp/) [](https://github.com/mariadb-RupeshBiswas/bq-readonly-mcp/actions/workflows/ci.yml) [](https://pypi.org/project/bq-readonly-mcp/) [](LICENSE) --- ## ✨ Why this exists LLMs connected to BigQuery can accidentally scan terabytes if the MCP layer lets them run arbitrary SQL. `bq-readonly-mcp` prevents that by design: every query goes through a strict `SELECT`/`WITH`-only validator, gets an automatic `LIMIT` injected before it runs, and is priced via a dry-run before any bytes are billed. If the estimated cost exceeds the cap (default 1 GB), the query is refused outright — before a single byte hits your bill. The server runs as a local stdio process under your OS account, uses [Application Default Credentials](https://cloud.google.com/docs/authentication/application-default-credentials), and exposes zero write operations. There is no INSERT, no UPDATE, no DELETE, no DDL — anywhere in the codebase. The only thing it can do is read, and it does that safely. --- ## 🛠️ The 7 tools | Tool | What it does | Use when… | |---|---|---| | `list_datasets` | List datasets in the project, with optional name filter | Starting exploration, finding what exists | | `list_tables` | List tables in a dataset, with optional name filter | Drilling into a specific dataset | | `get_table_metadata` | Table type, partitioning, clustering, row count, size | Checking if a table is large before querying | | `describe_columns` | Column schema for a ta…
Mapped onto the structured taxonomy from declared text and observed tool names. Confidence shown for derived entries.
Every source is kept verbatim. Field changes are logged as events.