protogrid

Search / io.github.mcpsmiths/cost-guard-mcp

Cost Guard MCP

L0· runs locally

Pre-flight query cost and result-size guardrails for AI agents on BigQuery, Snowflake, Databricks

v0.5.0 · active · repository · descriptor JSON · versions

Runs on your machine: something must execute the package.Only local packages are published (npm, PyPI, OCI, …). The registry never executes them, so tools are unknown until you run it.
Quality–not scored
Trust91of 100
Packages1
Tools seen0

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "cost-guard-mcp": {
      "command": "uvx",
      "args": [
        "cost-guard-mcp==0.5.0"
      ],
      "env": {
        "GOOGLE_APPLICATION_CREDENTIALS": "${GOOGLE_APPLICATION_CREDENTIALS}",
        "SNOWFLAKE_PRIVATE_KEY_PATH": "${SNOWFLAKE_PRIVATE_KEY_PATH}",
        "SNOWFLAKE_PRIVATE_KEY_PASSPHRASE": "${SNOWFLAKE_PRIVATE_KEY_PASSPHRASE}",
        "SNOWFLAKE_PASSWORD": "${SNOWFLAKE_PASSWORD}",
        "DATABRICKS_TOKEN": "${DATABRICKS_TOKEN}",
        "DATABRICKS_CLIENT_SECRET": "${DATABRICKS_CLIENT_SECRET}"
      }
    }
  }
}
claude mcp add cost-guard-mcp -e "GOOGLE_APPLICATION_CREDENTIALS=${GOOGLE_APPLICATION_CREDENTIALS}" -e "SNOWFLAKE_PRIVATE_KEY_PATH=${SNOWFLAKE_PRIVATE_KEY_PATH}" -e "SNOWFLAKE_PRIVATE_KEY_PASSPHRASE=${SNOWFLAKE_PRIVATE_KEY_PASSPHRASE}" -e "SNOWFLAKE_PASSWORD=${SNOWFLAKE_PASSWORD}" -e "DATABRICKS_TOKEN=${DATABRICKS_TOKEN}" -e "DATABRICKS_CLIENT_SECRET=${DATABRICKS_CLIENT_SECRET}" -- uvx cost-guard-mcp==0.5.0
[mcp_servers.cost-guard-mcp]
command = "uvx"
args = ["cost-guard-mcp==0.5.0"]
env = { "GOOGLE_APPLICATION_CREDENTIALS" = "${GOOGLE_APPLICATION_CREDENTIALS}", "SNOWFLAKE_PRIVATE_KEY_PATH" = "${SNOWFLAKE_PRIVATE_KEY_PATH}", "SNOWFLAKE_PRIVATE_KEY_PASSPHRASE" = "${SNOWFLAKE_PRIVATE_KEY_PASSPHRASE}", "SNOWFLAKE_PASSWORD" = "${SNOWFLAKE_PASSWORD}", "DATABRICKS_TOKEN" = "${DATABRICKS_TOKEN}", "DATABRICKS_CLIENT_SECRET" = "${DATABRICKS_CLIENT_SECRET}" }
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cost-guard-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "cost-guard-mcp==0.5.0"
      ],
      "enabled": true,
      "environment": {
        "GOOGLE_APPLICATION_CREDENTIALS": "{env:GOOGLE_APPLICATION_CREDENTIALS}",
        "SNOWFLAKE_PRIVATE_KEY_PATH": "{env:SNOWFLAKE_PRIVATE_KEY_PATH}",
        "SNOWFLAKE_PRIVATE_KEY_PASSPHRASE": "{env:SNOWFLAKE_PRIVATE_KEY_PASSPHRASE}",
        "SNOWFLAKE_PASSWORD": "{env:SNOWFLAKE_PASSWORD}",
        "DATABRICKS_TOKEN": "{env:DATABRICKS_TOKEN}",
        "DATABRICKS_CLIENT_SECRET": "{env:DATABRICKS_CLIENT_SECRET}"
      }
    }
  }
}
{
  "mcpServers": {
    "cost-guard-mcp": {
      "command": "uvx",
      "args": [
        "cost-guard-mcp==0.5.0"
      ],
      "env": {
        "GOOGLE_APPLICATION_CREDENTIALS": "${GOOGLE_APPLICATION_CREDENTIALS}",
        "SNOWFLAKE_PRIVATE_KEY_PATH": "${SNOWFLAKE_PRIVATE_KEY_PATH}",
        "SNOWFLAKE_PRIVATE_KEY_PASSPHRASE": "${SNOWFLAKE_PRIVATE_KEY_PASSPHRASE}",
        "SNOWFLAKE_PASSWORD": "${SNOWFLAKE_PASSWORD}",
        "DATABRICKS_TOKEN": "${DATABRICKS_TOKEN}",
        "DATABRICKS_CLIENT_SECRET": "${DATABRICKS_CLIENT_SECRET}"
      }
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=cost-guard-mcp&config=eyJjb21tYW5kIjoidXZ4IiwiYXJncyI6WyJjb3N0LWd1YXJkLW1jcD09MC41LjAiXSwiZW52Ijp7IkdPT0dMRV9BUFBMSUNBVElPTl9DUkVERU5USUFMUyI6IiR7R09PR0xFX0FQUExJQ0FUSU9OX0NSRURFTlRJQUxTfSIsIlNOT1dGTEFLRV9QUklWQVRFX0tFWV9QQVRIIjoiJHtTTk9XRkxBS0VfUFJJVkFURV9LRVlfUEFUSH0iLCJTTk9XRkxBS0VfUFJJVkFURV9LRVlfUEFTU1BIUkFTRSI6IiR7U05PV0ZMQUtFX1BSSVZBVEVfS0VZX1BBU1NQSFJBU0V9IiwiU05PV0ZMQUtFX1BBU1NXT1JEIjoiJHtTTk9XRkxBS0VfUEFTU1dPUkR9IiwiREFUQUJSSUNLU19UT0tFTiI6IiR7REFUQUJSSUNLU19UT0tFTn0iLCJEQVRBQlJJQ0tTX0NMSUVOVF9TRUNSRVQiOiIke0RBVEFCUklDS1NfQ0xJRU5UX1NFQ1JFVH0ifX0%3D"
}
{
  "servers": {
    "cost-guard-mcp": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "cost-guard-mcp==0.5.0"
      ],
      "env": {
        "GOOGLE_APPLICATION_CREDENTIALS": "${GOOGLE_APPLICATION_CREDENTIALS}",
        "SNOWFLAKE_PRIVATE_KEY_PATH": "${SNOWFLAKE_PRIVATE_KEY_PATH}",
        "SNOWFLAKE_PRIVATE_KEY_PASSPHRASE": "${SNOWFLAKE_PRIVATE_KEY_PASSPHRASE}",
        "SNOWFLAKE_PASSWORD": "${SNOWFLAKE_PASSWORD}",
        "DATABRICKS_TOKEN": "${DATABRICKS_TOKEN}",
        "DATABRICKS_CLIENT_SECRET": "${DATABRICKS_CLIENT_SECRET}"
      }
    }
  }
}
{
  "mcpServers": {
    "cost-guard-mcp": {
      "command": "uvx",
      "args": [
        "cost-guard-mcp==0.5.0"
      ],
      "env": {
        "GOOGLE_APPLICATION_CREDENTIALS": "${GOOGLE_APPLICATION_CREDENTIALS}",
        "SNOWFLAKE_PRIVATE_KEY_PATH": "${SNOWFLAKE_PRIVATE_KEY_PATH}",
        "SNOWFLAKE_PRIVATE_KEY_PASSPHRASE": "${SNOWFLAKE_PRIVATE_KEY_PASSPHRASE}",
        "SNOWFLAKE_PASSWORD": "${SNOWFLAKE_PASSWORD}",
        "DATABRICKS_TOKEN": "${DATABRICKS_TOKEN}",
        "DATABRICKS_CLIENT_SECRET": "${DATABRICKS_CLIENT_SECRET}"
      }
    }
  }
}
extensions:
  "cost-guard-mcp":
    enabled: true
    name: "cost-guard-mcp"
    type: stdio
    cmd: "uvx"
    args:
      - "cost-guard-mcp==0.5.0"
    envs:
      "GOOGLE_APPLICATION_CREDENTIALS": "${GOOGLE_APPLICATION_CREDENTIALS}"
      "SNOWFLAKE_PRIVATE_KEY_PATH": "${SNOWFLAKE_PRIVATE_KEY_PATH}"
      "SNOWFLAKE_PRIVATE_KEY_PASSPHRASE": "${SNOWFLAKE_PRIVATE_KEY_PASSPHRASE}"
      "SNOWFLAKE_PASSWORD": "${SNOWFLAKE_PASSWORD}"
      "DATABRICKS_TOKEN": "${DATABRICKS_TOKEN}"
      "DATABRICKS_CLIENT_SECRET": "${DATABRICKS_CLIENT_SECRET}"
    timeout: 300

Placeholders to fill from your own secret store: ${GOOGLE_APPLICATION_CREDENTIALS}, ${SNOWFLAKE_PRIVATE_KEY_PATH}, ${SNOWFLAKE_PRIVATE_KEY_PASSPHRASE}, ${SNOWFLAKE_PASSWORD}, ${DATABRICKS_TOKEN}, ${DATABRICKS_CLIENT_SECRET}. The registry never accepts secret values.

This is a local package: the command runs on your machine.

Quality – / 100not scored

Not scored: fewer than three checks apply, usually because no remote answered a credential-free probe or the server is a local package.

protocoln/a · weight 25
  • n/a
    protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygienen/a · weight 30
  • n/a
    tools.descriptions, tools.description_length, tools.schemas, tools.annotations, tools.directory_hints, tools.token_cost, tools.api_dumptool list unknown (behind auth, not probed, or empty)
stabilityn/a · weight 15
  • n/a
    stability.changes, stability.rug_pulltool list unknown
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvabledeps.dev does not know [email protected]

Tool list unknown · checked 2026-10-19 10:20 UTC

Tool changes

No tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 91 / 100

provenance80
livenessn/a
freshness100
hygiene100

+repository +namespace-matches-repo ~liveness-unmeasured +updated-4d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Dependencies

[email protected] PyPIthis version is not known to the dependency resolver

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.

Endpoints

packageregistryversionruntimesecrets
cost-guard-mcppypi0.5.0–GOOGLE_APPLICATION_CREDENTIALS, SNOWFLAKE_PRIVATE_KEY_PATH, SNOWFLAKE_PRIVATE_KEY_PASSPHRASE, SNOWFLAKE_PASSWORD, DATABRICKS_TOKEN, DATABRICKS_CLIENT_SECRET

Tools (0)

No tools observed. Local packages are never executed by the registry.

Schemas: list_tools.

Similar MCP servers

More from io.github.mcpsmiths

Official server.json
{
  "name": "io.github.mcpsmiths/cost-guard-mcp",
  "title": "Cost Guard MCP",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "version": "0.5.0",
  "packages": [
    {
      "version": "0.5.0",
      "transport": {
        "type": "stdio"
      },
      "identifier": "cost-guard-mcp",
      "registryType": "pypi",
      "environmentVariables": [
        {
          "name": "GOOGLE_APPLICATION_CREDENTIALS",
          "isSecret": true,
          "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",
          "isSecret": true,
          "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",
          "isSecret": true,
          "description": "Snowflake: passphrase for an encrypted SNOWFLAKE_PRIVATE_KEY_PATH key file, if the key is encrypted."
        },
        {
          "name": "SNOWFLAKE_PASSWORD",
          "isSecret": true,
          "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",
          "isSecret": true,
          "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",
          "isSecret": true,
          "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 max_rows wraps the whole text in one LIMIT subquery, so use the opt-out without max_rows."
        },
        {
          "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."
        }
      ]
    }
  ],
  "repository": {
    "url": "https://github.com/mcpsmiths/cost-guard-mcp",
    "source": "github"
  },
  "description": "Pre-flight query cost and result-size guardrails for AI agents on BigQuery, Snowflake, Databricks"
}