mcp_server_snowflake 0.3.8
A simple Snowflake MCP server
Requires Python: <3.13,>=3.10

# Snowflake MCP Server

[![smithery badge](https://smithery.ai/badge/mcp_snowflake_server)](https://smithery.ai/server/mcp_snowflake_server) [![PyPI - Version](https://img.shields.io/pypi/dm/mcp_server_snowflake?color&logo=pypi&logoColor=white&label=PyPI%20downloads)](https://pypi.org/project/mcp_server_snowflake/)

## Overview

A Model Context Protocol (MCP) server implementation that provides database interaction with Snowflake. This server enables running SQL queries with tools and intereacting with a memo of data insights presented as a resource.

## Components

### Resources

The server exposes a single dynamic resource:

- `memo://insights`: A continuously updated data insights memo that aggregates discovered insights during analysis
  - Auto-updates as new insights are discovered via the append-insight tool

### Tools

The server offers six core 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` (with `--allow-write` flag)

  - Execute INSERT, UPDATE, or DELETE queries
  - Input:
    - `query` (string): The SQL modification query
  - Returns: `{ affected_rows: number }`

- `create_table` (with `--allow-write` flag)
  - Create new tables in the database
  - Input:
    - `query` (string): CREATE TABLE SQL statement
  - Returns: Confirmation of table creation

#### Schema Tools

- `list_tables`

  - Get a list of all tables in the database
  - No input required
  - Returns: Array of table names

- `describe-table`
  - View column information for a specific table
  - Input:
    - `table_name` (string): Name of table to describe (can be fully qualified)
  - Returns: Array of column definitions with names and types

#### 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
  - Triggers update of memo://insights resource

## Usage with Claude Desktop

### Installing via Smithery

To install Snowflake Server for Claude Desktop automatically via [Smithery](https://smithery.ai/server/mcp_snowflake_server):

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

### Installing via UVX

```python
# Add the server to your claude_desktop_config.json
"mcpServers": {
  "snowflake_pip": {
      "command": "uvx",
      "args": [
          "mcp_snowflake_server",
          "--account",
          "the_account",
          "--warehouse",
          "the_warehouse",
          "--user",
          "the_user",
          "--password",
          "their_password",
          "--role",
          "the_role"
          "--database",
          "the_database",
          "--schema",
          "the_schema",
          # Optionally: "--allow_write" (but not recommended)
          # Optionally: "--log_dir", "/absolute/path/to/logs"
          # Optionally: "--log_level", "DEBUG"/"INFO"/"WARNING"/"ERROR"/"CRITICAL"
          # Optionally: "--exclude_tools", "{tool name}", ["{other tool name}"]
      ]
  }
}
```

### Installing locally

```python
# Add the server to your claude_desktop_config.json
"mcpServers": {
  "snowflake_local": {
      "command": "uv",
      "args": [
          "--directory",
          "/absolute/path/to/mcp_snowflake_server",
          "run",
          "mcp_snowflake_server",
          "--account",
          "the_account",
          "--warehouse",
          "the_warehouse",
          "--user",
          "the_user",
          "--password",
          "their_password",
          "--role",
          "the_role"
          "--database",
          "the_database",
          "--schema",
          "the_schema",
          # Optionally: "--allow_write" (but not recommended)
          # Optionally: "--log_dir", "/absolute/path/to/logs"
          # Optionally: "--log_level", "DEBUG"/"INFO"/"WARNING"/"ERROR"/"CRITICAL"
          # Optionally: "--exclude_tools", "{tool name}", ["{other tool name}"]
      ]
  }
}
```