{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_ccuabakyethy","handle":"bq-readonly-mcp","url":"https://wellknown.network/agents/bq-readonly-mcp","links":{"self":"https://wellknown.network/agents/bq-readonly-mcp/record.json","html":"https://wellknown.network/agents/bq-readonly-mcp","markdown":"https://wellknown.network/agents/bq-readonly-mcp/record.md","api":"https://wellknown.network/api/v1/agents/bq-readonly-mcp","status":"https://wellknown.network/api/v1/agents/bq-readonly-mcp/status","claim":"https://wellknown.network/agents/bq-readonly-mcp/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/bq-readonly-mcp/claim.json","badge":"https://wellknown.network/agents/bq-readonly-mcp/badge.svg","openapi":"https://wellknown.network/openapi.json"},"ard":{"identifier":"urn:air::server:bq-readonly-mcp","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"bq-readonly-mcp","summary":"Read-only BigQuery MCP server with auto-LIMIT, dry-run cost guard, and ADC auth — for Claude, Cursor, Windsurf, Copilot, and other MCP clients.","description":"# bq-readonly-mcp\n\n> 🔍 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.\n\n[![PyPI](https://img.shields.io/pypi/v/bq-readonly-mcp.svg?cacheSeconds=300)](https://pypi.org/project/bq-readonly-mcp/)\n[![CI](https://github.com/mariadb-RupeshBiswas/bq-readonly-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/mariadb-RupeshBiswas/bq-readonly-mcp/actions/workflows/ci.yml)\n[![Python](https://img.shields.io/pypi/pyversions/bq-readonly-mcp.svg?cacheSeconds=300)](https://pypi.org/project/bq-readonly-mcp/)\n[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)\n\n---\n\n## ✨ Why this exists\n\nLLMs 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.\n\nThe 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.\n\n---\n\n## 🛠️ The 7 tools\n\n| Tool | What it does | Use when… |\n|---|---|---|\n| `list_datasets` | List datasets in the project, with optional name filter | Starting exploration, finding what exists |\n| `list_tables` | List tables in a dataset, with optional name filter | Drilling into a specific dataset |\n| `get_table_metadata` | Table type, partitioning, clustering, row count, size | Checking if a table is large before querying |\n| `describe_columns` | Column schema for a ta…","publisher":null,"homepage":"https://github.com/mariadb-RupeshBiswas/bq-readonly-mcp#readme","repository":"https://github.com/mariadb-RupeshBiswas/bq-readonly-mcp#readme","version":"0.1.4","license":null,"protocols":["mcp"],"tags":["adc","ai","anthropic","bigquery","claude","cursor","google-cloud","llm","mcp","readonly","windsurf"],"pricing":null,"endpoints":[{"url":"pypi:bq-readonly-mcp","type":"package_pypi","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":null,"attribution":{"kind":"pypi","name":"pypi","repoUrl":"pypi","summary":"pypi","version":"pypi","description":"pypi","homepageUrl":"pypi"}},"derived":{"capabilities":[{"slug":"security.identity","name":"Identity & Access","confidence":0.825,"provenance":"derived"},{"slug":"infra.cloud","name":"Cloud Platforms","confidence":0.75,"provenance":"derived"},{"slug":"data.database","name":"Databases","confidence":0.733,"provenance":"derived"}],"categories":["data","infra","security"],"language":"en"},"observed":{"status":"unknown","statusReason":"Distributed as a package to run locally; no network endpoint to check.","lastOkAt":null,"lastProbedAt":null,"statusComputedAt":null,"reliability30d":null,"latestObservations":[],"tools":null,"package":{"name":"bq-readonly-mcp","registry":"pypi","observedAt":"2026-09-09T10:32:14.644Z","publishedAt":"2026-08-21T07:36:46.629843Z","latestVersion":"0.1.4"}},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"pypi","key":"bq-readonly-mcp","url":"https://pypi.org/project/bq-readonly-mcp/","firstSeenAt":"2026-09-09T10:27:43.250Z","fetchedAt":"2026-09-09T10:27:43.250Z","normalizedAt":"2026-09-09T10:27:43.250Z"}]},"firstSeenAt":"2026-09-09T10:27:43.250Z","updatedAt":"2026-09-09T10:32:14.644Z"}