mcpField
M
Mcp Snowflake Server Nsp

Mcp Snowflake Server Nsp

Local
github.com/nsphungDatabases2Updated 2d ago

About Mcp Snowflake Server Nsp

Mcp Snowflake Server Nsp gives AI assistants access to Snowflake SQL queries, schema exploration, and data insights. It supports multiple authentication methods and configurable safeguards for write operations.

Key features

  1. 01Run SELECT queries and optionally write data
  2. 02Explore databases, schemas, and table structures
  3. 03Authenticate with passwords, keys, browser, or OAuth
  4. 04Manage environment connections in a TOML file
  5. 05Prefetch table schemas as MCP resources
  6. 06Exclude selected objects and tools

Use cases

  1. 01Query Snowflake data through an AI assistant
  2. 02Inspect database, schema, and table structures
  3. 03Switch between production and development connections
  4. 04Restrict writes or hide selected objects

MCP support

The MCP server exposes Snowflake query, schema exploration, and analysis tools to clients, and can provide insights and prefetched table schemas as resources. Write tools are disabled by default.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"snowflake-server-nsphung": {
"command": "uvx",
"args": [
"mcp-snowflake-server-nsp"
],
"env": {
"SNOWFLAKE_ACCOUNT": "<SNOWFLAKE_ACCOUNT>",
"SNOWFLAKE_USER": "<SNOWFLAKE_USER>",
"SNOWFLAKE_PASSWORD": "<SNOWFLAKE_PASSWORD>",
"SNOWFLAKE_WAREHOUSE": "<SNOWFLAKE_WAREHOUSE>",
"SNOWFLAKE_DATABASE": "<SNOWFLAKE_DATABASE>",
"SNOWFLAKE_SCHEMA": "<SNOWFLAKE_SCHEMA>",
"SNOWFLAKE_ROLE": "<SNOWFLAKE_ROLE>",
"SNOWFLAKE_AUTHENTICATOR": "<SNOWFLAKE_AUTHENTICATOR>",
"SNOWFLAKE_PRIVATE_KEY_FILE": "<SNOWFLAKE_PRIVATE_KEY_FILE>",
"SNOWFLAKE_PRIVATE_KEY_FILE_PWD": "<SNOWFLAKE_PRIVATE_KEY_FILE_PWD>",
"SNOWFLAKE_OAUTH_CLIENT_ID": "<SNOWFLAKE_OAUTH_CLIENT_ID>",
"SNOWFLAKE_OAUTH_CLIENT_SECRET": "<SNOWFLAKE_OAUTH_CLIENT_SECRET>",
"SNOWFLAKE_OAUTH_TOKEN_REQUEST_URL": "<SNOWFLAKE_OAUTH_TOKEN_REQUEST_URL>",
"SNOWFLAKE_OAUTH_SCOPE": "<SNOWFLAKE_OAUTH_SCOPE>",
"SNOWFLAKE_TOKEN": "<SNOWFLAKE_TOKEN>"
}
}
}
}
Run commanduvx mcp-snowflake-server-nsp
Environment variables to set
SNOWFLAKE_ACCOUNTSnowflake account identifier
SNOWFLAKE_USERSnowflake username
SNOWFLAKE_PASSWORDSecretPassword (not required for key-pair / SSO)
SNOWFLAKE_WAREHOUSEVirtual warehouse to use
SNOWFLAKE_DATABASEDefault database
SNOWFLAKE_SCHEMADefault schema
SNOWFLAKE_ROLERole to assume
SNOWFLAKE_AUTHENTICATORSecretAuthentication method. Defaults to 'snowflake' if not set. Valid values: snowflake, externalbrowser, snowflake_jwt, oauth, oauth_client_credentials
SNOWFLAKE_PRIVATE_KEY_FILESecretAbsolute path to .p8 private key file
SNOWFLAKE_PRIVATE_KEY_FILE_PWDSecretPassphrase for encrypted private key
SNOWFLAKE_OAUTH_CLIENT_IDSecretOAuth 2.0 client ID (required for oauth_client_credentials authenticator)
SNOWFLAKE_OAUTH_CLIENT_SECRETSecretOAuth 2.0 client secret (required for oauth_client_credentials authenticator)
SNOWFLAKE_OAUTH_TOKEN_REQUEST_URLSecretOAuth 2.0 token endpoint URL (required for oauth_client_credentials authenticator)
SNOWFLAKE_OAUTH_SCOPESecretOAuth 2.0 scope (optional, e.g. session:role:MY_ROLE)
SNOWFLAKE_TOKENSecretPre-fetched OAuth bearer token (required for oauth authenticator)

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
pypimcp-snowflake-server-nsp0.14.4
ocidocker.io/nsphung/mcp-snowflake-server-nsp:0.14.4

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

mcp-snowflake-server-nsp-banner

PyPI • codecov • PyPI Downloads • Docker Pulls • License: MIT

Testtest codecov Docker Image Check
Lintlint Ruff Checked with mypy prek oxfmt
MetaCode of Conduct MCP Compatible made-with-python python-3.13+
SecurityCodeRabbit Pull Request Reviews CodeQL OpenSSF Scorecard Socket Badge
Best PracticesOpenSSF Best Practices OpenSSF Baseline
DocumentationAsk DeepWiki

Snowflake MCP Server NSP

A Model Context Protocol (MCP) server / MCP server that connects AI assistants to Snowflake — enabling SQL queries, schema exploration, and data insights directly from your LLM client.

Highlights:

  • Multiple authentication methods: password, key-pair, external browser, OAuth 2.0 (client credentials & bearer token), TOML connection files
  • TOML multi-connection config — manage production, staging, and development environments in one file
  • Write-safety guard — write operations are disabled by default and must be explicitly enabled
  • Exclusion patterns — filter out databases, schemas, or tables from discovery
  • --exclude-json-results flag — reduces LLM context window usage
  • Selective tool exclusion via --exclude_tools
  • Prefetch mode — pre-load table schema as MCP resources
  • Docker support with hardened image (DHI, nonroot user, no shell in runtime)

Table of Contents


Quick Start

The fastest way to try it — using uvx with a TOML connection file:

# 1. Create a connections file
cat > ~/snowflake_connections.toml << 'EOF'
[myconn]
account = "your_account"
user = "your_user"
password = "your_password"
warehouse = "COMPUTE_WH"
database = "MY_DB"
schema = "PUBLIC"
role = "MYROLE"
EOF

# 2. Run the server
uvx --python=3.13 --from mcp-snowflake-server-nsp mcp_snowflake_server \
  --connections-file ~/snowflake_connections.toml \
  --connection-name myconn
Claude Code

Add to your MCP client config (e.g. claude_desktop_config.json) using snowflake_connections.toml:

"mcpServers": {
  "snowflake": {
    "command": "uvx",
    "args": [
      "--python=3.13",
      "--from", "mcp-snowflake-server-nsp",
      "mcp_snowflake_server",
      "--connections-file", "/absolute/path/to/snowflake_connections.toml",
      "--connection-name", "myconn"
    ]
  }
}
Visual Studio Code (VSCode)

uvx — Install in VS Code Install in VS Code Insiders

Docker — Install in VS Code (Docker) Install in VS Code Insiders (Docker)

Or add manually to your MCP client config (e.g. .vscode/mcp.json) using .env file (see Authentication):

"snowflake": {
      // Snowflake MCP server
      "type": "stdio",
      "command": "uvx",
      "args": [
        "--from", "mcp-snowflake-server-nsp",
        "--python=3.13",
        "mcp_snowflake_server"
      ],
      "envFile": "${workspaceFolder}/.env"
    }
OpenCode

Add to your MCP client config (e.g. opencode.jsonc) with .env file (see Authentication):

"snowflake": {
  "type": "local",
  "command": [
    "uvx",
    "--from",
    "mcp-snowflake-server-nsp",
    "--python=3.13",
    "mcp_snowflake_server",
  ],
  "enabled": true,
  "timeout": 300000,
}

Components

Resources
URIDescription
memo://insightsA continuously updated memo aggregating data insights appended via append_insight.
context://table/{table_name}(Prefetch mode only) Per-table schema summaries including columns and comments.

Tools
Query Tools
ToolDescriptionRequires
read_queryExecute SELECT queries. Input: query (string).—
write_queryExecute INSERT, UPDATE, or DELETE queries. Input: query (string).--allow_write
create_tableExecute CREATE TABLE statements. Input: query (string).--allow_write
Schema Tools
ToolDescriptionInput
list_databasesList all databases in the Snowflake instance.—
list_schemasList all schemas within a database.database (string)
list_tablesList all tables within a database and schema.database, schema (strings)
describe_tableDescribe columns of a table (name, type, nullability, default, comment).table_name as database.schema.table
Analysis Tools
ToolDescriptionInput
append_insightAdd a data insight to the memo://insights resource.insight (string)

Authentication

Password

Set credentials via environment variables or CLI flags (see Configuration Reference):

SNOWFLAKE_USER="[email protected]"
SNOWFLAKE_ACCOUNT="myaccount"
SNOWFLAKE_AUTHENTICATOR="snowflake"
SNOWFLAKE_PASSWORD="secret"
SNOWFLAKE_WAREHOUSE="COMPUTE_WH"
SNOWFLAKE_DATABASE="MY_DB"
SNOWFLAKE_SCHEMA="PUBLIC"
SNOWFLAKE_ROLE="MYROLE"
Key-Pair

Both RSA (RS256) and ECDSA (ES256, ES384, ES512) private keys are supported (requires snowflake-connector-python ≥ 4.5.0 for ECDSA).

SNOWFLAKE_USER="[email protected]"
SNOWFLAKE_ACCOUNT="myaccount"
SNOWFLAKE_AUTHENTICATOR="snowflake_jwt"
SNOWFLAKE_PRIVATE_KEY_FILE="/absolute/path/to/key.p8"
SNOWFLAKE_PRIVATE_KEY_FILE_PWD="passphrase"  # Optional — only if key is encrypted
SNOWFLAKE_WAREHOUSE="COMPUTE_WH"
SNOWFLAKE_DATABASE="MY_DB"
SNOWFLAKE_SCHEMA="PUBLIC"
SNOWFLAKE_ROLE="MYROLE"

Or via CLI: --private_key_file /path/to/key.p8 --private_key_file_pwd passphrase

External Browser
SNOWFLAKE_AUTHENTICATOR="externalbrowser"

Or in a TOML connection entry: authenticator = "externalbrowser"

OAuth 2.0 Client Credentials

Use the OAuth 2.0 client credentials flow to authenticate with a client ID and secret (no user interaction required):

SNOWFLAKE_AUTHENTICATOR="oauth_client_credentials"
SNOWFLAKE_ACCOUNT="myaccount"
SNOWFLAKE_OAUTH_CLIENT_ID="your_client_id"
SNOWFLAKE_OAUTH_CLIENT_SECRET="your_client_secret"
SNOWFLAKE_OAUTH_TOKEN_REQUEST_URL="https://your-idp.example.com/oauth/token"
SNOWFLAKE_OAUTH_SCOPE="session:role:MY_ROLE"  # Optional
SNOWFLAKE_WAREHOUSE="COMPUTE_WH"
SNOWFLAKE_DATABASE="MY_DB"
SNOWFLAKE_SCHEMA="PUBLIC"
SNOWFLAKE_ROLE="MYROLE"
OAuth Bearer Token

Use a pre-fetched OAuth bearer token:

SNOWFLAKE_AUTHENTICATOR="oauth"
SNOWFLAKE_ACCOUNT="myaccount"
SNOWFLAKE_TOKEN="eyJhbGciOiJSUzI1NiJ9..."
SNOWFLAKE_WAREHOUSE="COMPUTE_WH"
SNOWFLAKE_DATABASE="MY_DB"
SNOWFLAKE_SCHEMA="PUBLIC"
SNOWFLAKE_ROLE="MYROLE"
TOML Connection File (Recommended)

Manage multiple environments in a single file. See example_connections.toml for a full template.

[production]
account = "your_account"
user = "your_user"
password = "your_password"
authenticator = "snowflake"
warehouse = "COMPUTE_WH"
database = "PROD_DB"
schema = "PUBLIC"
role = "ACCOUNTADMIN"

[development]
account = "your_account"
user = "dev_user"
authenticator = "externalbrowser"
warehouse = "DEV_WH"
database = "DEV_DB"
schema = "PUBLIC"
role = "DEVELOPER"

[reporting]
account = "your_account"
user = "reporting_user"
authenticator = "snowflake_jwt"
private_key_file = "/path/to/private_key.pem"
private_key_file_pwd = "passphrase"  # Optional
warehouse = "REPORTING_WH"
database = "REPORTING_DB"
schema = "REPORTS"
role = "REPORTING_ROLE"

[analytics_oauth]
account = "your_account"
authenticator = "oauth_client_credentials"
oauth_client_id = "your_client_id"
oauth_client_secret = "your_client_secret"
oauth_token_request_url = "https://your-idp.example.com/oauth/token"
oauth_scope = "session:role:ANALYTICS_ROLE"  # Optional
warehouse = "ANALYTICS_WH"
database = "ANALYTICS_DB"
schema = "PUBLIC"
role = "ANALYTICS_ROLE"

Pass the file with --connections-file and select a profile with --connection-name. Both flags are required together.


Installation

The package is published on PyPI as mcp-snowflake-server-nsp.

Contributing or running from source? See CONTRIBUTING.md for local development setup, test commands, formatting, and building the Docker image from source.


Via UVX
TOML configuration (recommended)
"mcpServers": {
  "snowflake_production": {
    "command": "uvx",
    "args": [
      "--python=3.13",
      "--from", "mcp-snowflake-server-nsp",
      "mcp_snowflake_server",
      "--connections-file", "/path/to/snowflake_connections.toml",
      "--connection-name", "production"
      // Optional flags — see Configuration Reference
    ]
  },
  "snowflake_staging": {
    "command": "uvx",
    "args": [
      "--python=3.13",
      "--from", "mcp-snowflake-server-nsp",
      "mcp_snowflake_server",
      "--connections-file", "/path/to/snowflake_connections.toml",
      "--connection-name", "staging"
    ]
  }
}
Individual parameters
"mcpServers": {
  "snowflake": {
    "command": "uvx",
    "args": [
      "--python=3.13",
      "--from", "mcp-snowflake-server-nsp",
      "mcp_snowflake_server",
      "--account", "your_account",
      "--warehouse", "your_warehouse",
      "--user", "your_user",
      "--password", "your_password",
      "--role", "your_role",
      "--database", "your_database",
      "--schema", "your_schema"
      // Optional: "--private_key_file", "/absolute/path/key.p8"
      // Optional: "--private_key_file_pwd", "passphrase"
      // Optional flags — see Configuration Reference
    ]
  }
}

Via Docker Hub

The image is published on Docker Hub — no build step required:

docker pull nsphung/mcp-snowflake-server-nsp

Note: -i (--interactive) is required to keep stdin open for the MCP stdio transport. Do not use -d (detach).

Claude Desktop — claude_desktop_config.json

With .env file (see Authentication):

"mcpServers": {
  "snowflake": {
    "command": "docker",
    "args": [
      "run", "--rm", "-i",
      "--env-file", "/absolute/path/to/.env",
      "nsphung/mcp-snowflake-server-nsp"
    ]
  }
}

With TOML connections file:

"mcpServers": {
  "snowflake": {
    "command": "docker",
    "args": [
      "run", "--rm", "-i",
      "-v", "/path/to/snowflake_connections.toml:/app/snowflake_connections.toml:ro",
      "nsphung/mcp-snowflake-server-nsp",
      "--connections-file", "/app/snowflake_connections.toml",
      "--connection-name", "production"
    ]
  }
}
VS Code — .vscode/mcp.json

With .env file:

"snowflake": {
  "type": "stdio",
  "command": "docker",
  "args": [
    "run", "--rm", "-i",
    "nsphung/mcp-snowflake-server-nsp"
  ],
  "envFile": "${workspaceFolder}/.env"
}

With TOML connections file:

"snowflake": {
  "type": "stdio",
  "command": "docker",
  "args": [
    "run", "--rm", "-i",
    "-v", "/path/to/snowflake_connections.toml:/app/snowflake_connections.toml:ro",
    "nsphung/mcp-snowflake-server-nsp",
    "--connections-file", "/app/snowflake_connections.toml",
    "--connection-name", "production"
  ]
}
OpenCode — opencode.jsonc
"snowflake": {
  "type": "local",
  "command": [
    "docker", "run", "--rm", "-i",
    "--env-file", "/absolute/path/to/.env",
    "nsphung/mcp-snowflake-server-nsp"
  ],
  "enabled": true,
  "timeout": 300000
}

Configuration Reference

All connection parameters can also be set as environment variables (SNOWFLAKE_<PARAM_UPPER>).

FlagEnv varDefaultDescription
--accountSNOWFLAKE_ACCOUNT—Snowflake account identifier
--userSNOWFLAKE_USER—Snowflake username
--passwordSNOWFLAKE_PASSWORD—Password (not required for key-pair / SSO)
--warehouseSNOWFLAKE_WAREHOUSE—Virtual warehouse to use
--databaseSNOWFLAKE_DATABASE(required)Default database
--schemaSNOWFLAKE_SCHEMA(required)Default schema
--roleSNOWFLAKE_ROLE—Role to assume
--private_key_fileSNOWFLAKE_PRIVATE_KEY_FILE—Absolute path to RSA or ECDSA (ES256/384/512) private key file (.p8 / .pem)
--private_key_file_pwdSNOWFLAKE_PRIVATE_KEY_FILE_PWD—Passphrase for encrypted private key
--connections-file——Path to TOML connections file
--connection-name——Connection profile name in TOML file (required with --connections-file)
--allow_write—falseEnable write_query and create_table tools
--prefetch / --no-prefetch—falsePre-load table schema as context://table/* resources (disables list_tables / describe_table)
--exclude_tools—[]Space-separated list of tool names to disable
--exclude-json-results—falseOmit embedded JSON resources from responses (reduces context window usage)
--log_dir——Directory for log file output
--log_level—INFOLog verbosity: DEBUG, INFO, WARNING, ERROR, CRITICAL

Exclusion Patterns

Edit runtime_config.json to exclude databases, schemas, or tables from all discovery tools. Patterns are matched case-insensitively as substrings.

{
  "exclude_patterns": {
    "databases": ["temp"],
    "schemas": ["temp", "information_schema"],
    "tables": ["temp"]
  }
}

The server loads this file automatically at startup from the working directory.


License

This project is licensed under the MIT License. See the LICENSE file for the full text.


Fork and Attribution

This repository is a fork of isaacwasserman/mcp-snowflake-server.

MseeP.ai Security Assessment Badge

  • Upstream authors and contributors retain copyright for their contributions.
  • Fork-specific changes are maintained by nsphung.
  • A summary of notable modifications is tracked in NOTICE.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.