Skip to main content
Glama
durjoi

BQ Agent Gateway

by durjoi

BQ Agent Gateway

A read-only MCP server that connects Claude to BigQuery with layered guardrails against dangerous and expensive SQL.

What it blocks

Static AST validation (parsed with sqlglot, not regex):

  • Anything that isn't a SELECT (no INSERT/UPDATE/DELETE/MERGE/DDL)

  • SELECT * and table.* (but COUNT(*) is fine)

  • CROSS JOIN and implicit cartesian products (comma joins with no ON)

  • Multiple statements in one call (blocks SELECT 1; DROP TABLE ...)

  • Queries referencing datasets outside an allowlist

  • Missing LIMIT (auto-injected by default) and over-large LIMITs

BigQuery cost gate:

  • A dry-run estimates bytes scanned before running; over-threshold queries are rejected

  • Execution sets maximum_bytes_billed as a hard server-side cap, so even a mis-estimate can't overspend — BigQuery kills the job instead

  • Row count and wall-clock timeout are capped

Related MCP server: BigQuery MCP

Tools exposed

list_datasets, list_tables, describe_table, estimate_query_cost, run_query.

Setup

pip install -r requirements.txt        # or: uv pip install -r requirements.txt
cp .env.example .env                    # then edit values

# Auth: either set GOOGLE_APPLICATION_CREDENTIALS to a service-account key,
# or run:
gcloud auth application-default login

Give the service account only what it needs: roles/bigquery.dataViewer + roles/bigquery.jobUser. The dataViewer role cannot mutate data, so the read-only guarantee is enforced at the IAM layer too, not just in code.

Run

# stdio (for Claude Desktop)
python server.py

# or HTTP
fastmcp run server.py --transport http --port 8000

Register with Claude Desktop

Edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\):

{
  "mcpServers": {
    "bq-agent-gateway": {
      "command": "python",
      "args": ["/absolute/path/to/bq-agent-gateway/server.py"],
      "env": {
        "BQ_PROJECT": "my-gcp-project",
        "GOOGLE_APPLICATION_CREDENTIALS": "/absolute/path/to/key.json",
        "BQ_ALLOWED_DATASETS": "analytics,prod_reporting",
        "BQ_MAX_BYTES_SCANNED_GIB": "5"
      }
    }
  }
}

Restart Claude Desktop; the BigQuery tools appear in the tools menu.

Design notes / defense in depth

The guardrails are structured as independent layers so a bypass of one doesn't defeat the rest:

  1. IAM — read-only service account can't write regardless of SQL.

  2. AST validation — shape checks that regex can't do reliably.

  3. Dry-run cost gate — the real budget protection for BigQuery.

  4. maximum_bytes_billed — hard cap enforced by BigQuery itself.

  5. Row/time caps — bound the response size and latency.

Toggle any static rule via env vars (see .env.example) without touching code.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables natural language exploration and querying of Google BigQuery datasets through four tools: listing datasets, inspecting table schemas, generating SQL queries with LLM assistance, and executing approved queries.
    1
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables read-only interaction with Google BigQuery, including SQL queries, dataset/table listing, schema retrieval, table preview, and metadata access via service account authentication.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/durjoi/bq_agent_gateway'

If you have feedback or need assistance with the MCP directory API, please join our Discord server