Route Claude, Cursor, and Codex to Snowflake through wmcp.sh. Every query gets an EXPLAIN-driven cost preview before it runs — bytes scanned, partitions hit, warehouse credit estimate — so an agent's accidental SELECT * doesn't surprise you on the next invoice. wmcp.sh is not affiliated with Snowflake Inc.
Connect at https://wmcp.sh/mcp/snowflake · key-pair + PAT auth · cost preview default-on
Snowflake bills by warehouse-credit consumption. A single naïve query on a multi-terabyte table can chew through hours of warehouse time and tens to hundreds of dollars in credits. That's a known footgun for human operators — it gets worse the moment you put a tool-calling agent on the other side.
The community Snowflake-Labs/mcp project is now marked deprecated and directs users to the officially-supported Snowflake MCP Server. Both expose query and warehouse tools; neither, by default, surfaces cost estimates to the calling agent.
wmcp.sh adds a pre-execution cost preview: every query goes through EXPLAIN first, the result (bytes-scanned, partitions, credit estimate) is returned to the agent, and queries above a configurable threshold can be auto-blocked. Plus encrypted vault for key-pair / PAT credentials, role-based access, and per-call audit logs.
Nine tools designed for read-heavy analytical agents.
snowflake.queryRun a SELECT with auto cost-preview gate.snowflake.explain_costStandalone: bytes scanned, partitions, credit estimate.snowflake.list_warehousesName, size (XS–6XL), state, auto-suspend.snowflake.list_databasesDatabases visible to the active role.snowflake.list_schemasSchemas in a database.snowflake.describe_tableColumns, types, clustering keys, row count.snowflake.list_rolesRoles granted to the auth principal.snowflake.current_sessionActive role, warehouse, database, schema.snowflake.query_historyRecent queries with credits-used (24h window).# pip install anthropic mcp
import os, asyncio
from anthropic import Anthropic
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
WMCP = "https://wmcp.sh/mcp/snowflake"
TOKEN = os.environ["WMCP_TOKEN"] # /dashboard
async def run():
async with streamablehttp_client(WMCP, headers={"Authorization": f"Bearer {TOKEN}"}) as (r, w, _):
async with ClientSession(r, w) as s:
await s.initialize()
tools = (await s.list_tools()).tools
anthropic = Anthropic()
# Tell Claude: always explain_cost first, abort if > 1 credit.
msg = anthropic.messages.create(
model="claude-opus-4-5",
max_tokens=2048,
system="Always call snowflake.explain_cost first. Abort if credits_estimate > 1.0.",
tools=[{"name": t.name, "description": t.description, "input_schema": t.inputSchema} for t in tools],
messages=[{"role": "user", "content": "What was our daily active users for the last 7 days?"}],
)
return msg
asyncio.run(run())
| Capability | Self-hosted official / community | wmcp.sh-routed |
|---|---|---|
| Pre-execution cost preview | Not exposed as a tool | EXPLAIN-driven cost preview, threshold gate |
| Key-pair auth | Supported via config | Supported, key encrypted in per-user vault |
| PAT (Programmatic Access Token) | Supported | Supported + per-token TTL enforcement |
| Role-based access surfacing | You inspect roles manually | list_roles + current_session built-in |
| Query history with credits | Optional QUERY_HISTORY view | Tool-level, 24h rolling window |
| Audit log | Snowflake-side only | Per-call wmcp audit + Snowflake-side trail |
| Works with Claude.ai connectors | Stdio only / partial | Streamable HTTP + OAuth 2.1 |
Production Snowflake MCP includes a read-only role with row-access policies, cost-threshold tuning, audit retention, SSO, and PrivateLink for Enterprise. Starter $499 one-time, Managed Retainer $999/mo, Enterprise $4,999+/mo.