Cost Guard MCP
A community MCP server that provides pre-flight query cost and result-size guardrails for AI agents. It supports BigQuery, Snowflake, and Databricks, disclosing accuracy tiers for estimates and enforcing per-call bounds on bytes, rows, and cost without requiring shared session state or external infrastructure.
Package and access
Local package with source-attributed installation metadata. Koskamo does not execute packages during review.
What you can do with it
- Estimate query costs before execution
- Limit result size to prevent context flooding
- Verify database credentials and connectivity
- Check engine capabilities and estimation accuracy
Source and maintenance
- Maintenance checked
Packages and installation
Source-provided package data. Koskamo has not executed or live-probed this package.
cost-guard-mcp 0.6.0
{
"version": "0.6.0",
"transport": "stdio",
"identifier": "cost-guard-mcp",
"registryType": "pypi",
"environmentVariables": [
{
"name": "GOOGLE_APPLICATION_CREDENTIALS",
"description": "BigQuery: path to a service-account key file (Application Default Credentials). Required to use the bigquery engine."
},
{
"name": "SNOWFLAKE_ACCOUNT",
"description": "Snowflake: account identifier. Required to use the snowflake engine."
},
{
"name": "SNOWFLAKE_USER",
"description": "Snowflake: username. Required to use the snowflake engine."
},
{
"name": "SNOWFLAKE_ROLE",
"description": "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)."
},
{
"name": "SNOWFLAKE_SECONDARY_ROLES",
"description": "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."
},
{
"name": "SNOWFLAKE_PRIVATE_KEY_PATH",
"description": "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."
},
{
"name": "SNOWFLAKE_PRIVATE_KEY_PASSPHRASE",
"description": "Snowflake: passphrase for an encrypted SNOWFLAKE_PRIVATE_KEY_PATH key file, if the key is encrypted."
},
{
"name": "SNOWFLAKE_PASSWORD",
"description": "Snowflake: password (discouraged; prefer SNOWFLAKE_PRIVATE_KEY_PATH). Either this or SNOWFLAKE_PRIVATE_KEY_PATH is required to use the snowflake engine."
},
{
"name": "SNOWFLAKE_EDITION",
"description": "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."
},
{
"name": "DATABRICKS_SERVER_HOSTNAME",
"description": "Databricks: SQL warehouse server hostname (e.g. my-workspace.cloud.databricks.com, no scheme, no trailing slash). Required to use the databricks engine."
},
{
"name": "DATABRICKS_HTTP_PATH",
"description": "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."
},
{
"name": "DATABRICKS_TOKEN",
"description": "Databricks: personal access token (simplest auth option). Either this or DATABRICKS_CLIENT_ID + DATABRICKS_CLIENT_SECRET is required to use the databricks engine."
},
{
"name": "DATABRICKS_CLIENT_ID",
"description": "Databricks: OAuth machine-to-machine service-principal client ID (preferred for automated use). Requires DATABRICKS_CLIENT_SECRET as well."
},
{
"name": "DATABRICKS_CLIENT_SECRET",
"description": "Databricks: OAuth machine-to-machine service-principal client secret. Requires DATABRICKS_CLIENT_ID as well."
},
{
"name": "COST_GUARD_ALLOW_MULTI_STATEMENT_SQL",
"description": "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."
},
{
"name": "COST_GUARD_ALLOW_WRITE_STATEMENTS",
"description": "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."
},
{
"name": "COST_GUARD_MAX_IN_FLIGHT_QUERIES",
"description": "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."
},
{
"name": "COST_GUARD_DATABRICKS_ALLOW_WAREHOUSE_START",
"description": "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."
},
{
"name": "COST_GUARD_SNOWFLAKE_ALLOW_WAREHOUSE_RESUME",
"description": "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."
}
]
}Tools
Reported by the attributed source; not independently observed by Koskamo.
Connect from your client
Each snippet configures the same source-provided package; replace placeholders before use.
Cursor
{
"mcpServers": {
"cost-guard-mcp": {
"command": "uvx",
"args": [
"cost-guard-mcp==0.6.0"
],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "<YOUR_GOOGLE_APPLICATION_CREDENTIALS>",
"SNOWFLAKE_ACCOUNT": "<YOUR_SNOWFLAKE_ACCOUNT>",
"SNOWFLAKE_USER": "<YOUR_SNOWFLAKE_USER>",
"SNOWFLAKE_ROLE": "<YOUR_SNOWFLAKE_ROLE>",
"SNOWFLAKE_SECONDARY_ROLES": "<YOUR_SNOWFLAKE_SECONDARY_ROLES>",
"SNOWFLAKE_PRIVATE_KEY_PATH": "<YOUR_SNOWFLAKE_PRIVATE_KEY_PATH>",
"SNOWFLAKE_PRIVATE_KEY_PASSPHRASE": "<YOUR_SNOWFLAKE_PRIVATE_KEY_PASSPHRASE>",
"SNOWFLAKE_PASSWORD": "<YOUR_SNOWFLAKE_PASSWORD>",
"SNOWFLAKE_EDITION": "<YOUR_SNOWFLAKE_EDITION>",
"DATABRICKS_SERVER_HOSTNAME": "<YOUR_DATABRICKS_SERVER_HOSTNAME>",
"DATABRICKS_HTTP_PATH": "<YOUR_DATABRICKS_HTTP_PATH>",
"DATABRICKS_TOKEN": "<YOUR_DATABRICKS_TOKEN>",
"DATABRICKS_CLIENT_ID": "<YOUR_DATABRICKS_CLIENT_ID>",
"DATABRICKS_CLIENT_SECRET": "<YOUR_DATABRICKS_CLIENT_SECRET>",
"COST_GUARD_ALLOW_MULTI_STATEMENT_SQL": "<YOUR_COST_GUARD_ALLOW_MULTI_STATEMENT_SQL>",
"COST_GUARD_ALLOW_WRITE_STATEMENTS": "<YOUR_COST_GUARD_ALLOW_WRITE_STATEMENTS>",
"COST_GUARD_MAX_IN_FLIGHT_QUERIES": "<YOUR_COST_GUARD_MAX_IN_FLIGHT_QUERIES>",
"COST_GUARD_DATABRICKS_ALLOW_WAREHOUSE_START": "<YOUR_COST_GUARD_DATABRICKS_ALLOW_WAREHOUSE_START>",
"COST_GUARD_SNOWFLAKE_ALLOW_WAREHOUSE_RESUME": "<YOUR_COST_GUARD_SNOWFLAKE_ALLOW_WAREHOUSE_RESUME>"
}
}
}
}Cline
{
"mcpServers": {
"cost-guard-mcp": {
"command": "uvx",
"args": [
"cost-guard-mcp==0.6.0"
],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "<YOUR_GOOGLE_APPLICATION_CREDENTIALS>",
"SNOWFLAKE_ACCOUNT": "<YOUR_SNOWFLAKE_ACCOUNT>",
"SNOWFLAKE_USER": "<YOUR_SNOWFLAKE_USER>",
"SNOWFLAKE_ROLE": "<YOUR_SNOWFLAKE_ROLE>",
"SNOWFLAKE_SECONDARY_ROLES": "<YOUR_SNOWFLAKE_SECONDARY_ROLES>",
"SNOWFLAKE_PRIVATE_KEY_PATH": "<YOUR_SNOWFLAKE_PRIVATE_KEY_PATH>",
"SNOWFLAKE_PRIVATE_KEY_PASSPHRASE": "<YOUR_SNOWFLAKE_PRIVATE_KEY_PASSPHRASE>",
"SNOWFLAKE_PASSWORD": "<YOUR_SNOWFLAKE_PASSWORD>",
"SNOWFLAKE_EDITION": "<YOUR_SNOWFLAKE_EDITION>",
"DATABRICKS_SERVER_HOSTNAME": "<YOUR_DATABRICKS_SERVER_HOSTNAME>",
"DATABRICKS_HTTP_PATH": "<YOUR_DATABRICKS_HTTP_PATH>",
"DATABRICKS_TOKEN": "<YOUR_DATABRICKS_TOKEN>",
"DATABRICKS_CLIENT_ID": "<YOUR_DATABRICKS_CLIENT_ID>",
"DATABRICKS_CLIENT_SECRET": "<YOUR_DATABRICKS_CLIENT_SECRET>",
"COST_GUARD_ALLOW_MULTI_STATEMENT_SQL": "<YOUR_COST_GUARD_ALLOW_MULTI_STATEMENT_SQL>",
"COST_GUARD_ALLOW_WRITE_STATEMENTS": "<YOUR_COST_GUARD_ALLOW_WRITE_STATEMENTS>",
"COST_GUARD_MAX_IN_FLIGHT_QUERIES": "<YOUR_COST_GUARD_MAX_IN_FLIGHT_QUERIES>",
"COST_GUARD_DATABRICKS_ALLOW_WAREHOUSE_START": "<YOUR_COST_GUARD_DATABRICKS_ALLOW_WAREHOUSE_START>",
"COST_GUARD_SNOWFLAKE_ALLOW_WAREHOUSE_RESUME": "<YOUR_COST_GUARD_SNOWFLAKE_ALLOW_WAREHOUSE_RESUME>"
}
}
}
}VS Code
{
"servers": {
"cost-guard-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"cost-guard-mcp==0.6.0"
],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "<YOUR_GOOGLE_APPLICATION_CREDENTIALS>",
"SNOWFLAKE_ACCOUNT": "<YOUR_SNOWFLAKE_ACCOUNT>",
"SNOWFLAKE_USER": "<YOUR_SNOWFLAKE_USER>",
"SNOWFLAKE_ROLE": "<YOUR_SNOWFLAKE_ROLE>",
"SNOWFLAKE_SECONDARY_ROLES": "<YOUR_SNOWFLAKE_SECONDARY_ROLES>",
"SNOWFLAKE_PRIVATE_KEY_PATH": "<YOUR_SNOWFLAKE_PRIVATE_KEY_PATH>",
"SNOWFLAKE_PRIVATE_KEY_PASSPHRASE": "<YOUR_SNOWFLAKE_PRIVATE_KEY_PASSPHRASE>",
"SNOWFLAKE_PASSWORD": "<YOUR_SNOWFLAKE_PASSWORD>",
"SNOWFLAKE_EDITION": "<YOUR_SNOWFLAKE_EDITION>",
"DATABRICKS_SERVER_HOSTNAME": "<YOUR_DATABRICKS_SERVER_HOSTNAME>",
"DATABRICKS_HTTP_PATH": "<YOUR_DATABRICKS_HTTP_PATH>",
"DATABRICKS_TOKEN": "<YOUR_DATABRICKS_TOKEN>",
"DATABRICKS_CLIENT_ID": "<YOUR_DATABRICKS_CLIENT_ID>",
"DATABRICKS_CLIENT_SECRET": "<YOUR_DATABRICKS_CLIENT_SECRET>",
"COST_GUARD_ALLOW_MULTI_STATEMENT_SQL": "<YOUR_COST_GUARD_ALLOW_MULTI_STATEMENT_SQL>",
"COST_GUARD_ALLOW_WRITE_STATEMENTS": "<YOUR_COST_GUARD_ALLOW_WRITE_STATEMENTS>",
"COST_GUARD_MAX_IN_FLIGHT_QUERIES": "<YOUR_COST_GUARD_MAX_IN_FLIGHT_QUERIES>",
"COST_GUARD_DATABRICKS_ALLOW_WAREHOUSE_START": "<YOUR_COST_GUARD_DATABRICKS_ALLOW_WAREHOUSE_START>",
"COST_GUARD_SNOWFLAKE_ALLOW_WAREHOUSE_RESUME": "<YOUR_COST_GUARD_SNOWFLAKE_ALLOW_WAREHOUSE_RESUME>"
}
}
}
}Claude Desktop
{
"mcpServers": {
"cost-guard-mcp": {
"command": "uvx",
"args": [
"cost-guard-mcp==0.6.0"
],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "<YOUR_GOOGLE_APPLICATION_CREDENTIALS>",
"SNOWFLAKE_ACCOUNT": "<YOUR_SNOWFLAKE_ACCOUNT>",
"SNOWFLAKE_USER": "<YOUR_SNOWFLAKE_USER>",
"SNOWFLAKE_ROLE": "<YOUR_SNOWFLAKE_ROLE>",
"SNOWFLAKE_SECONDARY_ROLES": "<YOUR_SNOWFLAKE_SECONDARY_ROLES>",
"SNOWFLAKE_PRIVATE_KEY_PATH": "<YOUR_SNOWFLAKE_PRIVATE_KEY_PATH>",
"SNOWFLAKE_PRIVATE_KEY_PASSPHRASE": "<YOUR_SNOWFLAKE_PRIVATE_KEY_PASSPHRASE>",
"SNOWFLAKE_PASSWORD": "<YOUR_SNOWFLAKE_PASSWORD>",
"SNOWFLAKE_EDITION": "<YOUR_SNOWFLAKE_EDITION>",
"DATABRICKS_SERVER_HOSTNAME": "<YOUR_DATABRICKS_SERVER_HOSTNAME>",
"DATABRICKS_HTTP_PATH": "<YOUR_DATABRICKS_HTTP_PATH>",
"DATABRICKS_TOKEN": "<YOUR_DATABRICKS_TOKEN>",
"DATABRICKS_CLIENT_ID": "<YOUR_DATABRICKS_CLIENT_ID>",
"DATABRICKS_CLIENT_SECRET": "<YOUR_DATABRICKS_CLIENT_SECRET>",
"COST_GUARD_ALLOW_MULTI_STATEMENT_SQL": "<YOUR_COST_GUARD_ALLOW_MULTI_STATEMENT_SQL>",
"COST_GUARD_ALLOW_WRITE_STATEMENTS": "<YOUR_COST_GUARD_ALLOW_WRITE_STATEMENTS>",
"COST_GUARD_MAX_IN_FLIGHT_QUERIES": "<YOUR_COST_GUARD_MAX_IN_FLIGHT_QUERIES>",
"COST_GUARD_DATABRICKS_ALLOW_WAREHOUSE_START": "<YOUR_COST_GUARD_DATABRICKS_ALLOW_WAREHOUSE_START>",
"COST_GUARD_SNOWFLAKE_ALLOW_WAREHOUSE_RESUME": "<YOUR_COST_GUARD_SNOWFLAKE_ALLOW_WAREHOUSE_RESUME>"
}
}
}
}Let your agent find its tools
Find servers like Cost Guard MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.