seta-takumi/snowflake-mcp-server
If you are the rightful owner of snowflake-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The Snowflake MCP Server securely connects Snowflake databases with Claude, an MCP-compatible client, providing read-only access.
Snowflake MCP Server
SnowflakeデータベースとClaude(MCP対応クライアント)を安全に接続するためのModel Context Protocol (MCP) サーバーです。
🚀 特徴
- 安全な読み取り専用アクセス: SELECT、SHOW、DESCRIBE、EXPLAINクエリのみ実行可能
- セキュアな認証: キーペア認証とOAuth認証に対応
- Claude統合: Claude DesktopやClaude Codeから直接利用可能
- 包括的ツール: テーブル一覧、スキーマ情報、クエリ実行をサポート
📋 前提条件
- Python 3.12以上
- uv パッケージマネージャー
- Snowflakeアカウントと適切な権限
🔧 インストール
# GitHubから直接インストール
uv tool install git+https://github.com/seta-takumi/snowflake-mcp-server.git
# ローカルからインストール
git clone https://github.com/seta-takumi/snowflake-mcp-server.git
cd snowflake-mcp-server
uv tool install .
🔐 認証設定
キーペア認証(推奨)
1. 秘密鍵・公開鍵の生成
# 秘密鍵を生成
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt
# 公開鍵を生成
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub
# ファイル権限を設定
chmod 600 rsa_key.p8
chmod 644 rsa_key.pub
2. Snowflakeユーザーに公開鍵を設定
-- Snowflakeで実行
ALTER USER your_username SET RSA_PUBLIC_KEY='<公開鍵の内容(-----BEGIN/END部分を除く)>';
OAuth認証(オプション)
企業環境でSSO統合が必要な場合に使用します。詳細はSnowflake OAuth設定ガイドを参照してください。
⚙️ 設定
connections.toml ファイル(推奨)
Snowflake Python Connectorのネイティブサポートを活用した設定方法です。
1. 設定ファイルの作成
以下の場所にファイルを作成:
~/.snowflake/connections.toml~/.config/snowflake/connections.toml(Linux)$SNOWFLAKE_HOME/connections.toml(環境変数で指定)
2. 設定内容
[myconnection]
account = "your-account"
user = "your-username"
# database = "your-database" # 任意:指定しない場合はSnowflakeのデフォルトデータベースを使用
# schema = "your-schema" # 任意:指定しない場合はデフォルトスキーマを使用
warehouse = "your-warehouse"
role = "your-role" # 推奨:アクセス制御のため適切なロールを指定
# キーペア認証の場合
private_key_file = "/path/to/rsa_key.p8"
private_key_file_pwd = "" # パスフレーズがある場合のみ
# または OAuth認証の場合
# token = "your-oauth-token"
# authenticator = "oauth"
環境変数での設定(従来方法)
# 基本設定
export SNOWFLAKE_ACCOUNT="your-account"
export SNOWFLAKE_USER="your-username"
# export SNOWFLAKE_DATABASE="your-database" # 任意:指定しない場合はデフォルトデータベース
# export SNOWFLAKE_SCHEMA="your-schema" # 任意:指定しない場合はデフォルトスキーマ
export SNOWFLAKE_WAREHOUSE="your-warehouse"
export SNOWFLAKE_ROLE="your-role" # 推奨:アクセス制御のため適切なロールを指定
# キーペア認証
export SNOWFLAKE_PRIVATE_KEY_PATH="/path/to/rsa_key.p8"
export SNOWFLAKE_PRIVATE_KEY_PASSPHRASE="" # パスフレーズがある場合のみ
# または OAuth認証
export SNOWFLAKE_OAUTH_TOKEN="your-oauth-token"
🚀 起動方法
uv toolでインストール後
# connections.tomlの接続設定を使用
uvx snowflake-mcp-server --connection-name myconnection
# 短縮形
uvx snowflake-mcp-server -c myconnection
# 環境変数を使用する場合
uvx snowflake-mcp-server
# ヘルプの表示
uvx snowflake-mcp-server --help
開発環境での実行
# connections.tomlの接続設定を使用
uv run python -m snowflake_mcp_server --connection-name myconnection
# 環境変数を使用する場合
uv run python -m snowflake_mcp_server
🖥️ Claude Codeでの利用
1. 設定ファイルの編集
用途によってそれぞれのファイルで設定を追加します。
- システム全体での設定:
~/.claude.json - プロジェクトごとの設定:プロジェクトディレクトリ内で
.mcp.json
uv toolでインストール後(推奨)
"mcpServers": {
"snowflake-mcp-server": {
"command": "uvx",
"args": [
"snowflake-mcp-server",
"--connection-name",
"myconnection"
]
}
}
環境変数を使用する場合
"mcpServers": {
"snowflake-mcp-server": {
"command": "uvx",
"args": [
"snowflake-mcp-server"
],
"env": {
"SNOWFLAKE_ACCOUNT": "your-account",
"SNOWFLAKE_USER": "your-username",
"SNOWFLAKE_DATABASE": "your-database",
"SNOWFLAKE_SCHEMA": "your-schema",
"SNOWFLAKE_WAREHOUSE": "your-warehouse",
"SNOWFLAKE_ROLE": "your-role",
"SNOWFLAKE_PRIVATE_KEY_PATH": "/path/to/rsa_key.p8"
}
}
}
開発環境での設定
"mcpServers": {
"snowflake-mcp": {
"command": "path/to/uv",
"args": [
"--directory",
"/path/to/snowflake-mcp-server",
"run",
"python",
"-m",
"snowflake_mcp_server",
"--connection-name",
"myconnection"
]
}
}
注意: uvのパスを確認するには which uv を実行してください。
2. Claude Codeの再起動
設定を反映するためにClaude Codeを再起動してください。
🛠️ 利用可能なツール
query
SQLクエリを実行します(読み取り専用)
パラメータ: sql (string) - 実行するSQLクエリ
例: SELECT * FROM customers LIMIT 10
list_tables
現在のスキーマ内のテーブル一覧を取得します
パラメータ: なし
describe_table
指定したテーブルの構造を取得します
パラメータ: table_name (string) - テーブル名
例: customers
get_schema
現在のスキーマ情報を取得します
パラメータ: なし
list_databases
アクセス可能なデータベースの一覧を取得します
パラメータ: なし
例: データベース名、所有者、コメントなどの情報を表示
describe_database
指定したデータベースの詳細情報を取得します
パラメータ: database_name (string) - データベース名
例: TESTDB
📝 使用例
Claude Codeで以下のようにお試しください:
現在のデータベースにあるテーブルを教えてください
customers テーブルの構造を確認してください
売上データの上位10件を表示してください
SELECT * FROM sales ORDER BY amount DESC LIMIT 10
アクセス可能なデータベース一覧を表示してください
ANALYTICS データベースの詳細情報を確認してください
🔒 セキュリティ機能
- 読み取り専用制限: INSERT、UPDATE、DELETE、CREATE、DROPなどの書き込み操作は完全にブロック
- SQLインジェクション対策: パラメータ化クエリによる安全な実行
- 認証情報の保護: 環境変数による秘密情報の管理
- 接続の安全性: Snowflakeの標準セキュリティプロトコルを使用
- ロールベースアクセス制御: 適切なロールを指定してデータアクセスを制限(推奨)
🚨 トラブルシューティング
接続エラー
症状: 「Query execution failed: Connection error」 解決方法:
- 環境変数が正しく設定されているか確認
- Snowflakeアカウント情報の確認
- 秘密鍵ファイルのパスと権限を確認
- ネットワーク接続の確認
権限エラー
症状: 「Access denied」または「Permission denied」 解決方法:
- Snowflakeユーザーのロール権限を確認
- データベース・スキーマへのアクセス権限を確認
- ウェアハウスの使用権限を確認
キーペア認証エラー
症状: 「Private key authentication failed」 解決方法:
- 公開鍵がSnowflakeユーザーに正しく設定されているか確認
- 秘密鍵ファイルの形式とパスフレーズを確認
- ファイル権限(600)を確認
📚 関連リンク
📄 ライセンス
このプロジェクトはMITライセンスの下で公開されています。
🤝 貢献
開発者向けの詳細なガイドはをご覧ください。
注意: このツールは読み取り専用アクセスを提供し、データの変更はできません。本番環境での使用前に、適切なアクセス制御とセキュリティ設定を確認してください。