mcp-snowflake-server

MCP.Pizza Chef: isaacwasserman

Six tools arrive switched on: list the databases and tables you can see, describe a table's columns, run a look-up query, and save a finding to a running notes memo. Two more that insert, update, delete or create tables only appear if you start it with the write flag, and the reading tool refuses anything that would change data. Snowflake is a paid platform, so every question burns credits, and your account username and password sit in plain text inside your assistant's settings file. The last code change was October 2025.

Data

Use This MCP server To

Ask which tables hold our customer records Pull last quarter's sales figures without writing SQL myself Have a table's columns explained before I use it Collect findings from a data review into one running memo Check how many rows a table actually contains

README

MseeP.ai Security Assessment Badge

Snowflake MCP Server


Overview

A Model Context Protocol (MCP) server implementation that provides database interaction with Snowflake. This server enables running SQL queries via tools and exposes data insights and schema context as resources.


Components

Resources

  • memo://insights
    A continuously updated memo aggregating discovered data insights.
    Updated automatically when new insights are appended via the append_insight tool.

  • context://table/{table_name}
    (If prefetch enabled) Per-table schema summaries, including columns and comments, exposed as individual resources.


Tools

The server exposes the following tools:

Query Tools
  • read_query
    Execute SELECT queries to read data from the database.
    Input:

    • query (string): The SELECT SQL query to execute
      Returns: Query results as array of objects
  • write_query (enabled only with --allow-write)
    Execute INSERT, UPDATE, or DELETE queries.
    Input:

    • query (string): The SQL modification query
      Returns: Number of affected rows or confirmation
  • create_table (enabled only with --allow-write)
    Create new tables in the database.
    Input:

    • query (string): CREATE TABLE SQL statement
      Returns: Confirmation of table creation
Schema Tools
  • list_databases
    List all databases in the Snowflake instance.
    Returns: Array of database names

  • list_schemas
    List all schemas within a specific database.
    Input:

    • database (string): Name of the database
      Returns: Array of schema names
  • list_tables
    List all tables within a specific database and schema.
    Input:

    • database (string): Name of the database
    • schema (string): Name of the schema
      Returns: Array of table metadata
  • describe_table
    View column information for a specific table.
    Input:

    • table_name (string): Fully qualified table name (database.schema.table)
      Returns: Array of column definitions with names, types, nullability, defaults, and comments
Analysis Tools
  • append_insight
    Add new data insights to the memo resource.
    Input:
    • insight (string): Data insight discovered from analysis
      Returns: Confirmation of insight addition
      Effect: Triggers update of memo://insights resource

Usage with Claude Desktop

Installing via Smithery

To install Snowflake Server for Claude Desktop automatically via Smithery:

npx -y @smithery/cli install mcp_snowflake_server --client claude

Installing via UVX

Traditional Configuration (Individual Parameters)
"mcpServers": {
  "snowflake_pip": {
    "command": "uvx",
    "args": [
      "--python=3.12",  // Optional: specify Python version <=3.12
      "mcp_snowflake_server",
      "--account", "your_account",
      "--warehouse", "your_warehouse",
      "--user", "your_user",
      "--password", "your_password",
      "--role", "your_role",
      "--database", "your_database",
      "--schema", "your_schema"
      // Optionally: "--private_key_path", "your_private_key_absolute_path"
      // Optionally: "--allow_write"
      // Optionally: "--log_dir", "/absolute/path/to/logs"
      // Optionally: "--log_level", "DEBUG"/"INFO"/"WARNING"/"ERROR"/"CRITICAL"
      // Optionally: "--exclude_tools", "{tool_name}", ["{other_tool_name}"]
    ]
  }
}
TOML Configuration (Recommended)
"mcpServers": {
  "snowflake_production": {
    "command": "uvx",
    "args": [
      "--python=3.12",
      "mcp_snowflake_server",
      "--connections-file", "/path/to/snowflake_connections.toml",
      "--connection-name", "production"
      // Optionally: "--allow_write"
      // Optionally: "--log_dir", "/absolute/path/to/logs"
      // Optionally: "--log_level", "DEBUG"/"INFO"/"WARNING"/"ERROR"/"CRITICAL"
      // Optionally: "--exclude_tools", "{tool_name}", ["{other_tool_name}"]
    ]
  },
  "snowflake_staging": {
    "command": "uvx",
    "args": [
      "--python=3.12",
      "mcp_snowflake_server",
      "--connections-file", "/path/to/snowflake_connections.toml",
      "--connection-name", "staging"
    ]
  }
}

Installing Locally

  1. Install Claude AI Desktop App

  2. Install uv:

curl -LsSf https://astral.sh/uv/install.sh | sh
  1. Create a .env file with your Snowflake credentials:
SNOWFLAKE_USER="xxx@your_email.com"
SNOWFLAKE_ACCOUNT="xxx"
SNOWFLAKE_ROLE="xxx"
SNOWFLAKE_DATABASE="xxx"
SNOWFLAKE_SCHEMA="xxx"
SNOWFLAKE_WAREHOUSE="xxx"
SNOWFLAKE_PASSWORD="xxx"
SNOWFLAKE_PASSWORD="xxx"
SNOWFLAKE_PRIVATE_KEY_PATH=/absolute/path/key.p8
# Alternatively, use external browser authentication:
# SNOWFLAKE_AUTHENTICATOR="externalbrowser"
  1. [Optional] Modify runtime_config.json to set exclusion patterns for databases, schemas, or tables.

  2. Test locally:

uv --directory /absolute/path/to/mcp_snowflake_server run mcp_snowflake_server
  1. Add the server to your claude_desktop_config.json:
Traditional Configuration (Using Environment Variables)
"mcpServers": {
  "snowflake_local": {
    "command": "/absolute/path/to/uv",
    "args": [
      "--python=3.12",  // Optional
      "--directory", "/absolute/path/to/mcp_snowflake_server",
      "run", "mcp_snowflake_server"
      // Optionally: "--allow_write"
      // Optionally: "--log_dir", "/absolute/path/to/logs"
      // Optionally: "--log_level", "DEBUG"/"INFO"/"WARNING"/"ERROR"/"CRITICAL"
      // Optionally: "--exclude_tools", "{tool_name}", ["{other_tool_name}"]
    ]
  }
}
TOML Configuration (Recommended)
"mcpServers": {
  "snowflake_local": {
    "command": "/absolute/path/to/uv",
    "args": [
      "--python=3.12",
      "--directory", "/absolute/path/to/mcp_snowflake_server",
      "run", "mcp_snowflake_server",
      "--connections-file", "/absolute/path/to/snowflake_connections.toml",
      "--connection-name", "development"
      // Optionally: "--allow_write"
      // Optionally: "--log_dir", "/absolute/path/to/logs"
      // Optionally: "--log_level", "DEBUG"/"INFO"/"WARNING"/"ERROR"/"CRITICAL"
      // Optionally: "--exclude_tools", "{tool_name}", ["{other_tool_name}"]
    ]
  }
}

Notes

  • By default, write operations are disabled. Enable them explicitly with --allow-write.
  • The server supports filtering out specific databases, schemas, or tables via exclusion patterns.
  • The server exposes additional per-table context resources if prefetching is enabled.
  • The append_insight tool updates the memo://insights resource dynamically.

License

MIT

mcp-snowflake-server FAQ

Do I need an API key?
No, but you do need real Snowflake account credentials: your username plus either your account password or a private key file. A browser sign-in option exists too. Whichever you pick lives in your assistant's settings file.
Can it change or delete my data?
Not unless you turn that on. Out of the box only the reading tools appear, and the reading tool rejects any query that would insert, update, delete or drop anything. Start it with the write flag and two editing tools appear.
Does it cost money to run?
Yes, indirectly. Snowflake charges for compute, so every question your assistant asks wakes up your warehouse and spends credits. An over-enthusiastic assistant can run up a real bill.
Can I use this to answer a question about last quarter's sales?
Yes. Ask in plain language and it will find the right tables, check the columns, and run the look-up for you without you writing any SQL.
How do I switch writing on?
Add --allow_write to the launch arguments, spelled with an underscore. One line of the readme writes it with a hyphen instead, and that version will not be recognised.
Can I hide sensitive tables from it?
Yes. A separate settings file lets you exclude whole databases or individual tables by pattern, so it never sees them at all.
Which apps does it work in?
Claude Desktop is the documented one, and anything else that can launch a local command will work the same way.
Is it still maintained?
Only quietly. The last code change was October 2025, about ten months ago. Nothing has been marked abandoned and no replacement is named.