MCP Server for Snowflake
MCP Server for connecting to Snowflake with read-only questions
dynamike
README
MCP Server for Snowflake
A Model Context Protocol (MCP) server for performing read-only operations against Snowflake databases. This tool enables Claude to securely query Snowflake data without modifying any information.
Features
- Flexible authentication to Snowflake using either:
- Service account authentication with private key
- External browser authentication for interactive sessions
- Connection pooling with automatic background refresh to maintain persistent connections
- Support for querying multiple views and databases in a single session
- Support for multiple SQL statement types (SELECT, SHOW, DESCRIBE, EXPLAIN, WITH)
- MCP-compatible handlers for querying Snowflake data
- Read-only operations with security checks to prevent data modification
- Support for Python 3.12+
- Stdio-based MCP server for easy integration with Claude Desktop
Available Tools
The server provides the following tools for querying Snowflake:
- list_databases: List all accessible Snowflake databases
- list_views: List all views in a specified database and schema
- describe_view: Get detailed information about a specific view including columns and SQL definition
- query_view: Query data from a view with an optional row limit
- execute_query: Execute custom read-only SQL queries (SELECT, SHOW, DESCRIBE, EXPLAIN, WITH) with results formatted as markdown tables
Installation
Prerequisites
- Python 3.12 or higher
- A Snowflake account with either:
- A configured service account (username + private key), or
- A regular user account for browser-based authentication
- uv package manager (recommended)
Steps
-
Clone this repository:
git clone https://github.com/yourusername/mcp-server-snowflake.git cd mcp-server-snowflake
-
Install the package:
uv pip install -e .
-
Create a
.env
file with your Snowflake credentials:Choose one of the provided example files based on your preferred authentication method:
For private key authentication:
cp .env.private_key.example .env
Then edit the
.env
file to set your Snowflake account details and path to your private key.For external browser authentication:
cp .env.browser.example .env
Then edit the
.env
file to set your Snowflake account details.
Usage
Running with uv
After installing the package, you can run the server directly with:
uv run snowflake-mcp
This will start the stdio-based MCP server, which can be connected to Claude Desktop or any MCP client that supports stdio communication.
When using external browser authentication, a browser window will automatically open prompting you to log in to your Snowflake account.
Claude Desktop Integration
- In Claude Desktop, go to Settings → MCP Servers
- Add a new server with the full path to your uv executable:
"snowflake-mcp-server": { "command": "uv", "args": [ "--directory", "/<path-to-code>/mcp-server-snowflake", "run", "snowflake-mcp" ] }
- You can find your uv path by running
which uv
in your terminal - Save the server configuration
Example Queries
When using with Claude, you can ask questions like:
- "Can you list all the databases in my Snowflake account?"
- "List all views in the MARKETING database"
- "Describe the structure of the CUSTOMER_ANALYTICS view in the SALES database"
- "Show me sample data from the REVENUE_BY_REGION view in the FINANCE database"
- "Run this SQL query: SELECT customer_id, SUM(order_total) as total_spend FROM SALES.ORDERS GROUP BY customer_id ORDER BY total_spend DESC LIMIT 10"
- "Query the MARKETING database to find the top 5 performing campaigns by conversion rate"
- "Compare data from views in different databases by querying SALES.CUSTOMER_METRICS and MARKETING.CAMPAIGN_RESULTS"
Configuration
Connection pooling behavior can be configured through environment variables:
SNOWFLAKE_CONN_REFRESH_HOURS
: Time interval in hours between connection refreshes (default: 8)
Example .env
configuration:
# Set connection to refresh every 4 hours
SNOWFLAKE_CONN_REFRESH_HOURS=4
Authentication Methods
Private Key Authentication
This method uses a service account and private key for non-interactive authentication, ideal for automated processes.
- Create a key pair for your Snowflake user following Snowflake documentation
- Set
SNOWFLAKE_AUTH_TYPE=private_key
in your.env
file - Provide the path to your private key in
SNOWFLAKE_PRIVATE_KEY_PATH
External Browser Authentication
This method opens a browser window for interactive authentication.
- Set
SNOWFLAKE_AUTH_TYPE=external_browser
in your.env
file - When you start the server, a browser window will open asking you to log in
- After authentication, the session will remain active for the duration specified by your Snowflake account settings
Security Considerations
This server:
- Enforces read-only operations (only SELECT, SHOW, DESCRIBE, EXPLAIN, and WITH statements are allowed)
- Automatically adds LIMIT clauses to prevent large result sets
- Uses secure authentication methods for connections to Snowflake
- Validates inputs to prevent SQL injection
⚠️ Important: Keep your .env
file secure and never commit it to version control. The .gitignore
file is configured to exclude it.
Development
Static Type Checking
mypy mcp_server_snowflake/
Linting
ruff check .
Formatting
ruff format .
Running Tests
pytest
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Technical Details
This project uses:
- Snowflake Connector Python for connecting to Snowflake
- MCP (Model Context Protocol) for interacting with Claude
- Pydantic for data validation
- python-dotenv for environment variable management
Recommended Servers
Crypto Price & Market Analysis MCP Server
A Model Context Protocol (MCP) server that provides comprehensive cryptocurrency analysis using the CoinCap API. This server offers real-time price data, market analysis, and historical trends through an easy-to-use interface.
MCP PubMed Search
Server to search PubMed (PubMed is a free, online database that allows users to search for biomedical and life sciences literature). I have created on a day MCP came out but was on vacation, I saw someone post similar server in your DB, but figured to post mine.
dbt Semantic Layer MCP Server
A server that enables querying the dbt Semantic Layer through natural language conversations with Claude Desktop and other AI assistants, allowing users to discover metrics, create queries, analyze data, and visualize results.
mixpanel
Connect to your Mixpanel data. Query events, retention, and funnel data from Mixpanel analytics.

Sequential Thinking MCP Server
This server facilitates structured problem-solving by breaking down complex issues into sequential steps, supporting revisions, and enabling multiple solution paths through full MCP integration.

Nefino MCP Server
Provides large language models with access to news and information about renewable energy projects in Germany, allowing filtering by location, topic (solar, wind, hydrogen), and date range.
Vectorize
Vectorize MCP server for advanced retrieval, Private Deep Research, Anything-to-Markdown file extraction and text chunking.
Mathematica Documentation MCP server
A server that provides access to Mathematica documentation through FastMCP, enabling users to retrieve function documentation and list package symbols from Wolfram Mathematica.
kb-mcp-server
An MCP server aimed to be portable, local, easy and convenient to support semantic/graph based retrieval of txtai "all in one" embeddings database. Any txtai embeddings db in tar.gz form can be loaded
Research MCP Server
The server functions as an MCP server to interact with Notion for retrieving and creating survey data, integrating with the Claude Desktop Client for conducting and reviewing surveys.