
How to add Snowflake MCP Server to Windsurf
Query Snowflake databases over MCP — read/write SQL, schema discovery, and data-insight memos. Paste the config into ~/.codeium/windsurf/mcp_config.json and restart Windsurf.
Last updated June 14, 2026 · 183★ · stdio · apikey
Windsurf config for Snowflake MCP Server
npx -y @smithery/cli install mcp_snowflake_server --client claude{
"mcpServers": {
"snowflake-mcp-server": {
"command": "uvx",
"args": [
"--python=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"
]
}
}
}Requires `uv` (the Python package runner). Install it from https://docs.astral.sh/uv/ if `uvx` is not found.
Setup steps
- 1Open Windsurf → Cascade → the hammer/MCP icon → Configure (or edit ~/.codeium/windsurf/mcp_config.json).
- 2Paste the Snowflake MCP Server config below.
- 3Fill in placeholder secrets, then save.
- 4Click Refresh in the MCP panel.
- 5Snowflake MCP Server's tools become available to Cascade.
Before you start
- A Snowflake account with credentials (account, user, warehouse, role, database, schema)
- Authentication via password, private key path, or external-browser authenticator
- uv / uvx (or Python <=3.12) to run the server
- An MCP client such as Claude Desktop
What Snowflake MCP Server can do in Windsurf
read_queryExecute SELECT queries to read data from the database. Input: query (string). Returns query results as an array of objects.
write_queryExecute INSERT, UPDATE, or DELETE queries. Enabled only with --allow-write. Input: query (string). Returns number of affected rows or confirmation.
create_tableCreate new tables in the database. Enabled only with --allow-write. Input: query (CREATE TABLE SQL statement). Returns confirmation of table creation.
list_databasesList all databases in the Snowflake instance. Returns an array of database names.
list_schemasList all schemas within a specific database. Input: database (string). Returns an array of schema names.
list_tablesList all tables within a specific database and schema. Input: database (string), schema (string). Returns an array of table metadata.
describe_tableView column information for a specific table. Input: table_name (fully qualified database.schema.table). Returns column definitions with names, types, nullability, defaults, and comments.
append_insightAdd new data insights to the memo resource. Input: insight (string). Returns confirmation and triggers an update of the memo://insights resource.
Security
By default, write operations are disabled; enable them explicitly with --allow-write, which turns on write_query and create_table. Snowflake credentials (password, private key path, or external-browser authentication) are supplied via command-line args, environment variables, or a TOML connections file. The server can filter out specific databases, schemas, or tables via exclusion patterns, and supports --exclude_tools to disable individual tools.
Snowflake MCP Server + Windsurf FAQ
Where is the Windsurf config file?
Windsurf reads MCP servers from ~/.codeium/windsurf/mcp_config.json. Paste the Snowflake MCP Server config there under the "mcpServers" key and restart the client.
Is Snowflake MCP Server safe to use with Windsurf?
By default, write operations are disabled; enable them explicitly with --allow-write, which turns on write_query and create_table. Snowflake credentials (password, private key path, or external-browser authentication) are supplied via command-line args, environment variables, or a TOML connections file. The server can filter out specific databases, schemas, or tables via exclusion patterns, and supports --exclude_tools to disable individual tools.
Are write operations enabled by default?
No. Write operations are disabled by default. You must start the server with --allow-write to enable the write_query and create_table tools.
How do I provide Snowflake credentials?
Via individual command-line arguments (--account, --user, --password, etc.), environment variables / a .env file, or a TOML connections file referenced with --connections-file and --connection-name. Password, private key path, or external-browser authentication are supported.
Can I restrict which databases, schemas, or tables are visible?
Yes. The server supports filtering out specific databases, schemas, or tables via exclusion patterns (e.g. configured in runtime_config.json), and individual tools can be disabled with --exclude_tools.