Mcp Snowflake Server Nsp について
Mcp Snowflake Server Nsp は、AI アシスタントから Snowflake の SQL クエリ、スキーマ探索、データ分析を利用できる MCP サーバーです。複数の認証方式に対応し、書き込み操作を制御できます。
主な機能
- 01SELECT クエリと任意の書き込み実行
- 02データベース、スキーマ、テーブル構造の探索
- 03パスワード、鍵、ブラウザー、OAuth による認証
- 04TOML ファイルで複数環境の接続を管理
- 05テーブルスキーマを MCP リソースとして事前読み込み
- 06対象オブジェクトやツールの除外
活用シーン
- 01AI アシスタント経由で Snowflake のデータを検索
- 02データベース、スキーマ、テーブル構造の確認
- 03本番環境と開発環境の接続切り替え
- 04書き込み制限や対象オブジェクトの非表示
MCP 対応
MCP サーバーは、Snowflake のクエリ、スキーマ探索、分析ツールをクライアントに提供し、洞察や事前読み込みしたテーブルスキーマをリソースとして公開できます。書き込みツールは既定で無効です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx mcp-snowflake-server-nspSNOWFLAKE_ACCOUNTSnowflake account identifierSNOWFLAKE_USERSnowflake usernameSNOWFLAKE_PASSWORDシークレットPassword (not required for key-pair / SSO)SNOWFLAKE_WAREHOUSEVirtual warehouse to useSNOWFLAKE_DATABASEDefault databaseSNOWFLAKE_SCHEMADefault schemaSNOWFLAKE_ROLERole to assumeSNOWFLAKE_AUTHENTICATORシークレットAuthentication method. Defaults to 'snowflake' if not set. Valid values: snowflake, externalbrowser, snowflake_jwt, oauth, oauth_client_credentialsSNOWFLAKE_PRIVATE_KEY_FILEシークレットAbsolute path to .p8 private key fileSNOWFLAKE_PRIVATE_KEY_FILE_PWDシークレットPassphrase for encrypted private keySNOWFLAKE_OAUTH_CLIENT_IDシークレットOAuth 2.0 client ID (required for oauth_client_credentials authenticator)SNOWFLAKE_OAUTH_CLIENT_SECRETシークレットOAuth 2.0 client secret (required for oauth_client_credentials authenticator)SNOWFLAKE_OAUTH_TOKEN_REQUEST_URLシークレットOAuth 2.0 token endpoint URL (required for oauth_client_credentials authenticator)SNOWFLAKE_OAUTH_SCOPEシークレットOAuth 2.0 scope (optional, e.g. session:role:MY_ROLE)SNOWFLAKE_TOKENシークレットPre-fetched OAuth bearer token (required for oauth authenticator)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Snowflake MCP Server NSP
Model Context Protocol (MCP) サーバー/MCP サーバーです。AI アシスタントを Snowflake に接続し、LLM クライアントから SQL クエリ、スキーマの探索、データの分析情報の取得を直接行えるようにします。
主な特長:
- 複数の認証方式に対応:パスワード、キー ペア、外部ブラウザー、OAuth 2.0(クライアント認証情報とベアラートークン)、TOML 接続ファイル
- TOML による複数接続の設定 — 1 つのファイルで
production、staging、development環境を管理できます - 書き込み安全ガード — 書き込み操作はデフォルトで無効になっており、明示的に有効にする必要があります
- 除外パターン — 検出対象からデータベース、スキーマ、テーブルを除外できます
--exclude-json-resultsフラグ — LLM のコンテキストウィンドウの使用量を削減します--exclude_toolsによるツールの選択的な除外- プリフェッチモード — テーブルスキーマを MCP リソースとして事前に読み込みます
- 強化されたイメージを使用する Docker サポート(DHI、root 以外のユーザー、実行時のシェルなし)
目次
クイックスタート
最も手早く試すには、TOML 接続ファイルと uvx を使用します。
# 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
snowflake_connections.toml を使用して、MCP クライアントの設定(例:claude_desktop_config.json)に追加します。
"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)
または、.env ファイルを使用して(認証を参照)、MCP クライアントの設定(例:.vscode/mcp.json)に手動で追加します。
"snowflake": {
// Snowflake MCP server
"type": "stdio",
"command": "uvx",
"args": [
"--from", "mcp-snowflake-server-nsp",
"--python=3.13",
"mcp_snowflake_server"
],
"envFile": "${workspaceFolder}/.env"
}
OpenCode
.env ファイルを使用して(認証を参照)、MCP クライアントの設定(例:opencode.jsonc)に追加します。
"snowflake": {
"type": "local",
"command": [
"uvx",
"--from",
"mcp-snowflake-server-nsp",
"--python=3.13",
"mcp_snowflake_server",
],
"enabled": true,
"timeout": 300000,
}
コンポーネント
リソース
| URI | 説明 |
|---|---|
memo://insights | append_insight を通じて追加されたデータインサイトを集約する、継続的に更新されるメモです。 |
context://table/{table_name} | (プリフェッチモードのみ) 列やコメントを含む、テーブルごとのスキーマ概要です。 |
ツール
クエリツール
| ツール | 説明 | 必要なオプション |
|---|---|---|
read_query | SELECT クエリを実行します。入力: query(文字列)。 | — |
write_query | INSERT、UPDATE、または DELETE クエリを実行します。入力: query(文字列)。 | --allow_write |
create_table | CREATE TABLE 文を実行します。入力: query(文字列)。 | --allow_write |
スキーマツール
| ツール | 説明 | 入力 |
|---|---|---|
list_databases | Snowflake インスタンス内のすべてのデータベースを一覧表示します。 | — |
list_schemas | データベース内のすべてのスキーマを一覧表示します。 | database(文字列) |
list_tables | データベースとスキーマ内のすべてのテーブルを一覧表示します。 | database、schema(文字列) |
describe_table | テーブルの列(名前、型、NULL 許容、デフォルト値、コメント)を説明します。 | database.schema.table 形式の table_name |
分析ツール
| ツール | 説明 | 入力 |
|---|---|---|
append_insight | データのインサイトを memo://insights リソースに追加します。 | insight(文字列) |
認証
パスワード
環境変数または CLI フラグで認証情報を設定します(設定リファレンスを参照):
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"
キーペア
RSA(RS256)と ECDSA(ES256、ES384、ES512)の秘密鍵がサポートされています(ECDSA には snowflake-connector-python ≥ 4.5.0 が必要です)。
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"
または CLI で指定します:--private_key_file /path/to/key.p8 --private_key_file_pwd passphrase
外部ブラウザー
SNOWFLAKE_AUTHENTICATOR="externalbrowser"
または TOML 接続エントリで指定します:authenticator = "externalbrowser"
OAuth 2.0 クライアントクレデンシャル
OAuth 2.0 クライアントクレデンシャルフローを使用して、クライアント ID とシークレットで認証します(ユーザーによる操作は不要です):
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 ベアラートークン
事前に取得した OAuth ベアラートークンを使用します:
SNOWFLAKE_AUTHENTICATOR="oauth"
SNOWFLAKE_ACCOUNT="myaccount"
SNOWFLAKE_TOKEN="eyJhbGciOiJSUzI1NiJ9..."
SNOWFLAKE_WAREHOUSE="COMPUTE_WH"
SNOWFLAKE_DATABASE="MY_DB"
SNOWFLAKE_SCHEMA="PUBLIC"
SNOWFLAKE_ROLE="MYROLE"
TOML 接続ファイル(推奨)
複数の環境を 1 つのファイルで管理できます。完全なテンプレートについては、example_connections.tomlを参照してください。
[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"
--connections-file でファイルを指定し、--connection-name でプロファイルを選択します。両方のフラグをセットで指定する必要があります。
インストール
パッケージは PyPI で mcp-snowflake-server-nsp として公開されています。
コントリビュートまたはソースからの実行をお考えですか? ローカル開発環境のセットアップ、テストコマンド、フォーマット、ソースからの Docker イメージのビルドについては、
CONTRIBUTING.mdを参照してください。
UVX を使用する場合
TOML 設定(推奨)
"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"
]
}
}
個別のパラメーター
"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
]
}
}
Docker Hub を使用する場合
イメージは Docker Hub で公開されているため、ビルド手順は不要です:
docker pull nsphung/mcp-snowflake-server-nsp
注: MCP stdio トランスポート用に stdin を開いたままにするには、
-i(--interactive)が必要です。-d(デタッチ)は使用しないでください。
Claude Desktop — claude_desktop_config.json
.env ファイルを使用する場合は、認証を参照してください:
"mcpServers": {
"snowflake": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"--env-file", "/absolute/path/to/.env",
"nsphung/mcp-snowflake-server-nsp"
]
}
}
TOML 接続ファイルを使用する場合:
"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
.env ファイルを使用する場合:
"snowflake": {
"type": "stdio",
"command": "docker",
"args": [
"run", "--rm", "-i",
"nsphung/mcp-snowflake-server-nsp"
],
"envFile": "${workspaceFolder}/.env"
}
TOML 接続ファイルを使用する場合:
"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
}
設定リファレンス
すべての接続パラメーターは、環境変数(SNOWFLAKE_<PARAM_UPPER>)としても設定できます。
| フラグ | 環境変数 | デフォルト | 説明 |
|---|---|---|---|
--account | SNOWFLAKE_ACCOUNT | — | Snowflake アカウント識別子 |
--user | SNOWFLAKE_USER | — | Snowflake のユーザー名 |
--password | SNOWFLAKE_PASSWORD | — | パスワード(キー ペア/SSO の場合は不要) |
--warehouse | SNOWFLAKE_WAREHOUSE | — | 使用する仮想ウェアハウス |
--database | SNOWFLAKE_DATABASE | (必須) | デフォルトのデータベース |
--schema | SNOWFLAKE_SCHEMA | (必須) | デフォルトのスキーマ |
--role | SNOWFLAKE_ROLE | — | 引き受けるロール |
--private_key_file | SNOWFLAKE_PRIVATE_KEY_FILE | — | RSA または ECDSA(ES256/384/512)秘密鍵ファイル(.p8 / .pem)への絶対パス |
--private_key_file_pwd | SNOWFLAKE_PRIVATE_KEY_FILE_PWD | — | 暗号化された秘密鍵のパスフレーズ |
--connections-file | — | — | TOML 接続ファイルへのパス |
--connection-name | — | — | TOML ファイル内の接続プロファイル名(--connections-file と併用する場合は必須) |
--allow_write | — | false | write_query および create_table ツールを有効にする |
--prefetch / --no-prefetch | — | false | テーブルスキーマを context://table/* リソースとして事前読み込みする(list_tables / describe_table を無効にします) |
--exclude_tools | — | [] | 無効にするツール名をスペース区切りで指定 |
--exclude-json-results | — | false | レスポンスから埋め込み JSON リソースを省略する(コンテキストウィンドウの使用量を削減します) |
--log_dir | — | — | ログファイルの出力先ディレクトリ |
--log_level | — | INFO | ログの詳細度:DEBUG、INFO、WARNING、ERROR、CRITICAL |
除外パターン
runtime_config.json を編集して、すべての検出ツールからデータベース、スキーマ、またはテーブルを除外します。パターンは大文字と小文字を区別せず、部分文字列として照合されます。
{
"exclude_patterns": {
"databases": ["temp"],
"schemas": ["temp", "information_schema"],
"tables": ["temp"]
}
}
サーバーは起動時に、作業ディレクトリからこのファイルを自動的に読み込みます。
ライセンス
このプロジェクトは MIT License の下でライセンスされています。全文については LICENSE ファイルを参照してください。
フォークと帰属表示
このリポジトリは isaacwasserman/mcp-snowflake-server のフォークです。
- 上流の作者および貢献者は、それぞれの貢献に関する著作権を保持します。
- フォーク固有の変更は
nsphungが管理しています。 - 主な変更点の概要は
NOTICEで確認できます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
