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.
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
The server offers six core 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
-
list_databases
- Get a list of all databases in the Snowflake instance.
- No input required
- Returns: Array of database names.
-
list_schemas
- Get a list of all schemas in a specific database.
- Input:
database
(string): Name of the database.
- Returns: Array of schema names.
-
list_tables
- Get a list of all tables in 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 name of table to describe (e.g.,database.schema.table
)
- Returns: Array of column definitions with names and types
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
Below is a quick guide to get started, and a more general and detailed guide can be found here.
-
Install Claude AI Desktop App or Cursor
-
Install
uv
by:
curl -LsSf https://astral.sh/uv/install.sh | sh
- Create a
.env
file using the following template under this dir
SNOWFLAKE_USER="[email protected]"
SNOWFLAKE_ACCOUNT="XXX"
SNOWFLAKE_ROLE="XXX" # This determines the access scope of the MCP
SNOWFLAKE_DATABASE="XXX" # This doesn't affect the MCP's access scope
SNOWFLAKE_SCHEMA="XXX" # This doesn't affect the MCP's access scope
SNOWFLAKE_WAREHOUSE="XXX"
SNOWFLAKE_AUTHENTICATOR="externalbrowser" # Use Okta for authentication
-
[Optional] Modify the
exclude_patterns
inruntime_config.json
to filter out the resources you want to exclude. -
Test locally using
uv --directory /absolute/path/to/mcp_snowflake_server run mcp_snowflake_server
- To use
Claude Desktop
: add the server to yourclaude_desktop_config.json
(Claude -> Settings -> Developer -> Edit Config), then restart Claude Desktop.
"mcpServers": {
"snowflake_local": {
"command": "/absolute/path/to/uv", # obtained by using `which uv`
"args": [
"--directory",
"/absolute/path/to/mcp_snowflake_server",
"run",
"mcp_snowflake_server",
# 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}"]
]
}
}
- To use
Cursor
: add the following to your Curser Settings -> MCP -> Add new MCP server -> Command
/absolute/path/to/uv --directory /absolute/path/to/mcp_snowflake_server run mcp_snowflake_server