OSS Snowflake MCP Server

io.github.Snowflake-Labs/mcp

About OSS Snowflake MCP Server

OSS Snowflake MCP Server is an MCP server published by the GitHub account Snowflake-Labs. MCP Server for Snowflake from Snowflake Labs

It runs on your own machine: your AI client starts it from the PyPI package snowflake-labs-mcp at version 1.3.5.

It asks for 2 secrets: SNOWFLAKE_PASSWORD and SNOWFLAKE_PRIVATE_KEY. Give it a key with the least access that still works.

Version 1.3.5 was published on 28 October 2025, and the source code is public, so you can read it before installing.

Written from the registry entry. 9 automated checks on the registry entry and the package code: 7 pass, 0 warn, 0 fail, 2 info. How we check.

What it asks for

VariableRequiredSecretDescription
SNOWFLAKE_ACCOUNTNoNoAccount identifier (e.g. xy12345.us-east-1)
SNOWFLAKE_HOSTNoNoSnowflake host URL
SNOWFLAKE_USERNoNoUsername for authentication
SNOWFLAKE_PASSWORDNoYesPassword or programmatic access token
SNOWFLAKE_ROLENoNoRole to use for connection
SNOWFLAKE_WAREHOUSENoNoWarehouse to use for queries
SNOWFLAKE_PASSCODENoNoMFA passcode for authentication
SNOWFLAKE_PRIVATE_KEYNoYesPrivate key for key pair authentication
SNOWFLAKE_PRIVATE_KEY_FILENoNoPath to private key file
SNOWFLAKE_PRIVATE_KEY_FILE_PWDNoNoPassword for encrypted private key
SNOWFLAKE_MCP_HOSTNoNoHost address to bind the server to (default: 0.0.0.0)
SNOWFLAKE_MCP_PORTNoNoPort number for the server to listen on (default: 9000)
SNOWFLAKE_MCP_ENDPOINTNoNoEndpoint path for the MCP server (default: /mcp)

Checks

CheckResultDetail
Source repository linkedPasshttps://github.com/Snowflake-Labs/mcp
Version pinnedPassEvery package has an explicit version
Secrets requestedInfoAsks for 2 secrets: SNOWFLAKE_PASSWORD, SNOWFLAKE_PRIVATE_KEY
Known package registryPassAll packages come from npm, PyPI, OCI, NuGet or MCPB
Namespace ownershipInfoName verified via GitHub account Snowflake-Labs
Registry text aimed at the AIPassDescription and settings contain no hidden characters or instructions to the AI
Install scriptsPasssnowflake-labs-mcp 1.3.5 has no setup.py; nothing runs at install
Code red flagsPassRead 28 files in snowflake-labs-mcp 1.3.5: no obfuscation, encoded execution, credential reads or data-collection endpoints found
Text aimed at the AIPassNo hidden characters or instructions to the AI in 28 files, including comments and the README

Code review: Pass, with notes

We read all 3,415 lines in 15 files of snowflake-labs-mcp 1.3.5 on 2026-10-31, without running it.

Official Snowflake server that lets an AI query and manage your Snowflake account, including Cortex Search/Analyst/Agent. Everything it sends goes only to your own Snowflake account (with a usage tag Snowflake uses to count MCP traffic). It can run SQL and create or drop objects, so set the sql_statement_permissions list carefully (it refuses everything by default) and do not expose the HTTP mode on a network, as it has no login.

What we found

  • Note run_snowflake_query runs any SQL the AI writes. A middleware allow/deny list (sql_statement_permissions in the YAML) gates it, and with no permissions configured every statement is refused (default-deny). Users who set 'all: true' give the AI full DML/DDL. query_manager/tools.py:53-64
  • Note create_object / drop_object / create_or_alter_object can create, replace and drop databases, warehouses, users, roles etc. Gated only by 'create'/'drop' in sql_statement_permissions; no per-call confirmation. mode='replace' does CREATE OR REPLACE. object_manager/tools.py:211-247
  • Note query_semantic_view appends where_clause and order_by as raw SQL text and is NOT checked by the permission middleware (server_utils.py only checks run_snowflake_query and create*/drop*). Snowflake runs one statement per execute, so this cannot chain a DROP, but it lets the AI run arbitrary read subqueries even when SELECT is not allowed. semantic_manager/tools.py:218-222
  • Note cortex_analyst executes the SQL that Cortex Analyst generates without passing it through the SQL permission check. utils.py:249-254
  • Note Statement type is taken from sqlglot.parse_one (first statement only); multi-statement bypass is blocked in practice by the connector's single-statement default, not by this check. query_manager/tools.py:67-82
  • Note With --transport http/sse/streamable-http the server binds 0.0.0.0:9000 by default with no authentication on the MCP endpoint, so anyone on the network can drive the user's Snowflake session. stdio (the default) is not affected. server.py:484-489
  • Info starts_with is concatenated into a quoted literal after stripping single quotes only (SHOW statements cannot bind). Single-statement execution limits the impact to a syntax error. object_manager/tools.py:137-140
  • Info database/schema/service names from tool input are put into REST API paths unencoded; the host is fixed to the user's Snowflake account, so this is not SSRF. cortex_services/tools.py:71-74
  • Info validate_semantic_view_tool is dead code (never called). semantic_manager/tools.py:268-288
  • Info No pyproject.toml/METADATA in the reviewed copy; dependencies listed are those imported by the code. No install hooks, obfuscation, encoded payloads, dynamic imports, disabled TLS or hard-coded secrets found. package
  • Info lines_read (3415) is the real line count of every file (Read tool / splitlines). The manifest's 3430 counts one extra empty 'line' after the trailing newline of 15 files; no file or line was skipped. manifest.tsv
Talks to<account>.snowflakecomputing.com (or SNOWFLAKE_HOST / --host): Snowflake credentials via the official connector; SQL statements; Cortex Search/Analyst/Agent REST calls with the user's query text; a QUERY_TAG {origin:sf_sit,name:mcp_server,version} on every session so Snowflake can count MCP usage (at startup (connect + a zero-compute 'SELECT 'MCP Server Snowflake'' query) and on every tool call)
Keys and settingsSNOWFLAKE_ACCOUNT / SNOWFLAKE_HOST / SNOWFLAKE_USER: Snowflake (connection)
SNOWFLAKE_PASSWORD / SNOWFLAKE_PAT (deprecated): Snowflake login only
SNOWFLAKE_ROLE / SNOWFLAKE_WAREHOUSE / SNOWFLAKE_PASSCODE: Snowflake login only
SNOWFLAKE_PRIVATE_KEY / SNOWFLAKE_PRIVATE_KEY_FILE / SNOWFLAKE_PRIVATE_KEY_FILE_PWD: used locally by the connector for key-pair auth
SNOWFLAKE_DEFAULT_CONNECTION_NAME: local (picks a connection from the Snowflake config file)
SERVICE_CONFIG_FILE: local (path of the YAML tool config)
SNOWFLAKE_MCP_HOST / SNOWFLAKE_MCP_PORT / SNOWFLAKE_MCP_ENDPOINT: local (HTTP bind settings)
/snowflake/session/token (file, SPCS containers only): Snowflake as an OAuth bearer token
Files on your machineReads the YAML service config file (path from --service-config-file / SERVICE_CONFIG_FILE) and exposes it as an MCP resource; reads /snowflake/session/token when running inside Snowpark Container Services; the connector may read a private-key file or Snowflake connections file named in config. No other file reads or writes. No path from tool input touches the file system.
Runs programsNone. No subprocess, os.system, eval or exec. Only SQL sent to Snowflake.
TelemetryNo third-party telemetry. Every Snowflake session is tagged QUERY_TAG {"origin":"sf_sit","name":"mcp_server","version":{major:1,minor:3}} (server.py:49-53, 'Used to quantify Snowflake usage'); this goes only to the user's own Snowflake account and cannot be switched off without editing code.
Toolscreate_object, drop_object, create_or_alter_object, describe_object, list_objects, run_snowflake_query, list_semantic_views, describe_semantic_view, show_semantic_dimensions, show_semantic_metrics, get_semantic_view_ddl, write_semantic_view_query_tool, query_semantic_view, cortex_agent, cortex_search, cortex_analyst
Tool descriptionsclean (descriptions are plain and on-task; cortex tool descriptions embed the user's own YAML service list)

This covers the package's own code only, not the 8 packages it depends on (fastmcp, snowflake-connector-python, snowflake-core (snowflake.core), pyyaml, requests, pydantic, typing_extensions, sqlglot). A new version drops this review until we read it again.

Popularity & health: 65 / 100

Worked out from public numbers and our own checks, not from user reviews or ratings. It says how used and how looked-after a server is, not whether it is safe.

Popularity27 / 40

303 GitHub stars, 10,628 downloads last week, 0 Hacker News posts (0 points). Best two of the three, each on a log scale.

Activity8 / 25

Last push 2026-05-15, last release 2026-05-15, 0 commits in 90 days.

Issue health10 / 15

47 closed of 69 issues.

Our checks20 / 20

0 warnings, each costing a fifth.

109 forks, 98 merged pull requests. Sources: GitHub, npm, PyPI (pypistats.org) and Hacker News (Algolia), fetched 2026-10-31.

What people say

No Hacker News threads link to its source code.

Look further: search Reddit, search Hacker News, read its GitHub issues. These are not reviews we checked.

Facts

Registry nameio.github.Snowflake-Labs/mcp
PublisherGitHub account Snowflake-Labs
How the name is verifiedName verified via GitHub account Snowflake-Labs. The registry ties the name prefix to that account or domain; it does not check the code.
TypeLocal: runs on your machine from a package
Packagespypi snowflake-labs-mcp 1.3.5 (stdio)
Version1.3.5
Published
Last updated
Source repositoryhttps://github.com/Snowflake-Labs/mcp
WebsiteNone linked
CategoryDatabases & data (assigned by keyword rule, not by hand)

Related servers in Databases & data