Cost Guard MCP
io.github.mcpsmiths/cost-guard-mcp
About Cost Guard MCP
Cost Guard MCP is an MCP server published by the GitHub account mcpsmiths. Pre-flight query cost and result-size guardrails for AI agents on BigQuery, Snowflake, Databricks
It runs on your own machine: your AI client starts it from the PyPI package cost-guard-mcp at version 0.6.0.
It asks for 6 secrets: GOOGLE_APPLICATION_CREDENTIALS, SNOWFLAKE_PRIVATE_KEY_PATH, SNOWFLAKE_PRIVATE_KEY_PASSPHRASE, SNOWFLAKE_PASSWORD, DATABRICKS_TOKEN and DATABRICKS_CLIENT_SECRET. Give it a key with the least access that still works.
Version 0.6.0 was published on 19 October 2026, and the source code is public, so you can read it before installing.
Written from the registry entry. 9 automated checks on the registry entry and the package code: 7 pass, 1 warn, 0 fail, 1 info. How we check.
What it asks for
| Variable | Required | Secret | Description |
|---|---|---|---|
GOOGLE_APPLICATION_CREDENTIALS | No | Yes | BigQuery: path to a service-account key file (Application Default Credentials). Required to use the bigquery engine. |
SNOWFLAKE_ACCOUNT | No | No | Snowflake: account identifier. Required to use the snowflake engine. |
SNOWFLAKE_USER | No | No | Snowflake: username. Required to use the snowflake engine. |
SNOWFLAKE_ROLE | No | No | Snowflake: role to assume. Required to use the snowflake engine; has no default and must never be ACCOUNTADMIN (ACCOUNTADMIN, SECURITYADMIN and ORGADMIN are rejected before any Snowflake connection is opened - the check runs when the Snowflake configuration is first loaded, on the first Snowflake tool call; the server process itself starts regardless, so a bad role surfaces as a failed check_credentials or a tool error, not as a startup exit). |
SNOWFLAKE_SECONDARY_ROLES | No | No | Snowflake: secondary roles activated at login. NONE (default) means only SNOWFLAKE_ROLE is active in the session; ALL is the explicit opt-out that activates every role granted to SNOWFLAKE_USER. |
SNOWFLAKE_PRIVATE_KEY_PATH | No | Yes | Snowflake: path to an RSA private key file for key-pair auth (preferred over SNOWFLAKE_PASSWORD). Either this or SNOWFLAKE_PASSWORD is required to use the snowflake engine. |
SNOWFLAKE_PRIVATE_KEY_PASSPHRASE | No | Yes | Snowflake: passphrase for an encrypted SNOWFLAKE_PRIVATE_KEY_PATH key file, if the key is encrypted. |
SNOWFLAKE_PASSWORD | No | Yes | Snowflake: password (discouraged; prefer SNOWFLAKE_PRIVATE_KEY_PATH). Either this or SNOWFLAKE_PRIVATE_KEY_PATH is required to use the snowflake engine. |
SNOWFLAKE_EDITION | No | No | Snowflake: account edition that sets the USD/credit price of estimates - standard (default), enterprise, business_critical or vps. The per-call edition argument can only raise it. |
DATABRICKS_SERVER_HOSTNAME | No | No | Databricks: SQL warehouse server hostname (e.g. my-workspace.cloud.databricks.com, no scheme, no trailing slash). Required to use the databricks engine. |
DATABRICKS_HTTP_PATH | No | No | Databricks: SQL warehouse HTTP path (from the warehouse's Connection Details tab, e.g. /sql/1.0/warehouses/<warehouse-id>). Required to use the databricks engine. |
DATABRICKS_TOKEN | No | Yes | Databricks: personal access token (simplest auth option). Either this or DATABRICKS_CLIENT_ID + DATABRICKS_CLIENT_SECRET is required to use the databricks engine. |
DATABRICKS_CLIENT_ID | No | No | Databricks: OAuth machine-to-machine service-principal client ID (preferred for automated use). Requires DATABRICKS_CLIENT_SECRET as well. |
DATABRICKS_CLIENT_SECRET | No | Yes | Databricks: OAuth machine-to-machine service-principal client secret. Requires DATABRICKS_CLIENT_ID as well. |
COST_GUARD_ALLOW_MULTI_STATEMENT_SQL | No | No | Set to 1 to let estimate_query_cost/run_query_bounded accept text containing more than one SQL statement. Off by default: the cost cap is only known to cover the single statement the dry run/EXPLAIN priced. Skips only this server's scanner: Snowflake still rejects multi-statement text (sessions are pinned to MULTI_STATEMENT_COUNT=1), and only a single SELECT/WITH/VALUES statement is wrapped in a LIMIT subquery - a script runs unwrapped and its row cap (max_rows, default 1000) is enforced by the paged fetch. |
COST_GUARD_ALLOW_WRITE_STATEMENTS | No | No | Set to 1 (exactly that value) to let estimate_query_cost/run_query_bounded accept statements that are not reads. Off by default: only text whose first keyword (after comments and opening parentheses) is SELECT, WITH, VALUES, SHOW, DESCRIBE, DESC or EXPLAIN is estimated or run - a WITH must be followed by a SELECT or VALUES - because warehouse rows re-enter the model's context and can steer the next call. The gate is defence in depth: the authorisation boundary is the credential's grants (deploy a read-only principal). With COST_GUARD_ALLOW_MULTI_STATEMENT_SQL=1 every statement in the text must be a read, so BigQuery scripts (DECLARE/SET/BEGIN) need both opt-outs. Any other value leaves the gate on. |
COST_GUARD_MAX_IN_FLIGHT_QUERIES | No | No | Maximum number of run_query_bounded calls allowed in flight at once (positive integer, default 8). A cancelled call keeps its slot until its warehouse query completes or the 120 s watchdog fires; a call over the cap fails with a tool error naming this variable before any warehouse connection is opened. |
COST_GUARD_DATABRICKS_ALLOW_WAREHOUSE_START | No | No | Set to true (exactly that value) to let the read-only Databricks tools (check_credentials, estimate_query_cost) open a session on a SQL warehouse that is not RUNNING, which starts the warehouse and bills compute until it auto-stops. Off by default: the server first reads the warehouse's state through the Warehouses API (GET /api/2.0/sql/warehouses/<id>, CAN_VIEW/CAN_USE suffices) and, unless it is RUNNING - also when the state cannot be read - check_credentials returns ok=false and estimate_query_cost returns no byte or dollar figure, without opening a session. run_query_bounded is not gated: its own pre-execution estimate and the execution may start the warehouse. Any other value leaves the guard on. |
COST_GUARD_SNOWFLAKE_ALLOW_WAREHOUSE_RESUME | No | No | Set to true (exactly that value) to let the read-only Snowflake tools run SELECT CURRENT_REGION(), the INFORMATION_SCHEMA.QUERY_HISTORY read and check_credentials' session-context SELECT on a warehouse that is not STARTED, which can resume a suspended AUTO_RESUME warehouse and bill compute until it auto-suspends. Off by default: those statements are skipped unless the pinned warehouse's SHOW WAREHOUSES state is STARTED (also skipped when no warehouse is pinned or the state cannot be read), and the QUERY_HISTORY read is skipped whenever estimate_query_cost is called without a warehouse argument; estimate_query_cost then prices at Gen1 rates with the byte-tier heuristic and says so in a caveat, and check_credentials returns ok=true with a detail built from the SHOW WAREHOUSES row. USE WAREHOUSE, EXPLAIN USING JSON, SHOW WAREHOUSES and SELECT CURRENT_WAREHOUSE() always run; run_query_bounded is not gated. Any other value leaves the guard on. |
Checks
| Check | Result | Detail |
|---|---|---|
| Source repository linked | Pass | https://github.com/mcpsmiths/cost-guard-mcp |
| Version pinned | Pass | Every package has an explicit version |
| Secrets requested | Warn | Asks for 6 secrets: GOOGLE_APPLICATION_CREDENTIALS, SNOWFLAKE_PRIVATE_KEY_PATH, SNOWFLAKE_PRIVATE_KEY_PASSPHRASE, SNOWFLAKE_PASSWORD, DATABRICKS_TOKEN, DATABRICKS_CLIENT_SECRET |
| Known package registry | Pass | All packages come from npm, PyPI, OCI, NuGet or MCPB |
| Namespace ownership | Info | Name verified via GitHub account mcpsmiths |
| Registry text aimed at the AI | Pass | Description and settings contain no hidden characters or instructions to the AI |
| Install scripts | Pass | cost-guard-mcp 0.6.0 has no setup.py; nothing runs at install |
| Code red flags | Pass | Read 108 files in cost-guard-mcp 0.6.0: no obfuscation, encoded execution, credential reads or data-collection endpoints found |
| Text aimed at the AI | Pass | No hidden characters or instructions to the AI in 108 files, including comments and the README |
Popularity & health: 49 / 100
Worked out from public numbers and our own checks, not from user reviews or ratings. It says how used and how looked-after a server is, not whether it is safe.
0 forks, 89 merged pull requests. Sources: GitHub, npm, PyPI (pypistats.org) and Hacker News (Algolia), fetched 2026-10-31.
What people say
No Hacker News threads link to its source code.
Look further: search Reddit, search Hacker News, read its GitHub issues. These are not reviews we checked.
Facts
| Registry name | io.github.mcpsmiths/cost-guard-mcp |
|---|---|
| Publisher | GitHub account mcpsmiths |
| How the name is verified | Name verified via GitHub account mcpsmiths. The registry ties the name prefix to that account or domain; it does not check the code. |
| Type | Local: runs on your machine from a package |
| Packages | pypi cost-guard-mcp 0.6.0 (stdio) |
| Version | 0.6.0 |
| Published | |
| Last updated | |
| Source repository | https://github.com/mcpsmiths/cost-guard-mcp |
| Website | None linked |
| Category | Databases & data (assigned by keyword rule, not by hand) |
Related servers in Databases & data
- BigQuery Data Platform7/7Read-only BigQuery tools for plain-language data questions, with a…
- BigQuery MCP by InsightfulPipe3/3Hosted BigQuery MCP server for Claude, ChatGPT and Cursor, with…
- Patent MCP Server7/7Patent search over 1.4B global records via Google Patents on…
- patents-mcp2/2Patent search and prior art discovery via Google Patents on BigQuery
- bigquery-mcp7/7A SnowLeopardAI-managed MCP server that provides access to Google…
- GenPark Distributed ID Snowflake Generator3/464-bit Twitter Snowflake-compatible distributed unique ID generator…