snowflake-cost-mcp
Provides read-only visibility into Snowflake warehouse cost and query performance, including credit usage by warehouse, identification of expensive queries, and heuristic right-sizing recommendations, using Snowflake's ACCOUNT_USAGE views.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@snowflake-cost-mcpShow credit usage by warehouse for last week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
snowflake-cost-mcp
An MCP server that gives Claude (or any MCP-speaking agent) direct, read-only visibility into Snowflake warehouse cost and query performance — credit usage by warehouse, the most expensive queries in a window, and heuristic right-sizing recommendations.
Why this exists (and what it deliberately doesn't do)
Snowflake already ships an official, actively-developed managed MCP server covering schema browsing, Cortex Analyst/Search, and general query execution — and several community servers cover similar ground. This project intentionally does not duplicate any of that. It exists for the one thing none of them focus on: cost attribution and performance right-sizing, using Snowflake's ACCOUNT_USAGE views.
Use this alongside the official Snowflake MCP server, not instead of it.
Related MCP server: BigQuery FinOps MCP Server
Tools
Tool | What it does |
| Warehouse inventory: size, auto-suspend/resume, running/queued queries |
| Credits consumed per warehouse over a lookback window |
| Slowest/costliest successful queries in a window |
| Full detail for one query by |
| Heuristic oversized/undersized/no-signal call per warehouse |
| Ad-hoc |
ACCOUNT_USAGE views are eventually consistent (Snowflake documents up to ~45 minutes–a few hours of latency), so treat results as "recent history," not real-time.
Prerequisites
You need a Snowflake role that can read ACCOUNT_USAGE. Create a dedicated, least-privilege role rather than reusing ACCOUNTADMIN:
CREATE ROLE IF NOT EXISTS mcp_cost_monitor;
GRANT IMPORTED PRIVILEGES ON DATABASE snowflake TO ROLE mcp_cost_monitor;
GRANT USAGE ON WAREHOUSE compute_xs TO ROLE mcp_cost_monitor;
GRANT ROLE mcp_cost_monitor TO USER your_service_user;This role can read account usage metadata and nothing else — no write grants anywhere. That's the real security boundary; the in-code SQL guard is a backup, not a substitute for this.
Setup
1. Install
pip install -e .2. Configure authentication (key-pair recommended)
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pubALTER USER your_service_user SET RSA_PUBLIC_KEY='<contents of rsa_key.pub, header/footer stripped>';Copy .env.example to .env and fill in SNOWFLAKE_ACCOUNT, SNOWFLAKE_USER, and SNOWFLAKE_PRIVATE_KEY_PATH (pointing at rsa_key.p8). Username/password auth is supported as a fallback for local/dev use — see .env.example.
3. Run it standalone (sanity check)
snowflake-cost-mcpIt will sit waiting on stdio — that's expected; it's meant to be launched by an MCP client, not run interactively.
4. Wire it into Claude Desktop / Claude Code
{
"mcpServers": {
"snowflake-cost": {
"command": "snowflake-cost-mcp",
"env": {
"SNOWFLAKE_ACCOUNT": "your_account_identifier",
"SNOWFLAKE_USER": "your_service_user",
"SNOWFLAKE_PRIVATE_KEY_PATH": "/absolute/path/to/rsa_key.p8",
"SNOWFLAKE_ROLE": "MCP_COST_MONITOR"
}
}
}
}Security model (defense in depth)
Every built-in tool runs a hardcoded, parameterized SQL template — no string-built SQL from user input, ever.
run_readonly_query(the only tool that accepts free-form SQL) is off by default and, when enabled, is passed through a guard that rejects anything except a plainSELECT/WITH ... SELECT.The Snowflake role itself should be read-only (see Prerequisites) — that's the boundary that actually matters if there's ever a bug in this server.
Development
pip install -e ".[dev]"
pytest -q
ruff check src testsTests run entirely against a mocked Snowflake connection — no live account needed to develop or run CI.
Roadmap
Validate end-to-end against a real Snowflake trial account
Publish to the public MCP registry
Add a storage-cost tool (database/table storage spend)
Optional streamable-HTTP transport for a hosted/enterprise mode
License
MIT — see LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/alizubairs/Snowflake-Cost-Performance-MCP-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server