MCP Server for Snowflake について
Snowflake データベースを Claude などのクライアントから読み取り専用で照会する MCP サーバーです。複数データベースのビューに対応し、データ変更を防ぐ検証と結果件数の制限を備えています。
主な機能
- 01秘密鍵認証とブラウザー認証
- 02接続プールとバックグラウンド更新
- 03複数データベースとビューの照会
- 04複数の読み取り専用 SQL 文
- 05結果行数の自動制限
活用シーン
- 01アクセス可能なデータベースとビューの確認
- 02ビューの列と SQL 定義の調査
- 03ビューを照会してデータを分析
- 04制限付きの読み取り専用 SQL の実行
MCP 対応
MCP クライアントに Snowflake のデータベース一覧、ビュー情報、読み取り専用クエリのツールを提供します。Claude Desktop などのクライアント向けに stdio トランスポートをサポートします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Snowflake 用 MCP サーバー
Snowflake データベースに対して読み取り専用の操作を行うための Model Context Protocol(MCP)サーバーです。このツールを使うと、情報を変更することなく、Claude が Snowflake のデータを安全にクエリできます。
機能
- 次のいずれかを使った柔軟な Snowflake 認証:
- 秘密鍵を使ったサービスアカウント認証
- 対話型セッション向けの外部ブラウザー認証
- 永続的な接続を維持する、自動バックグラウンド更新機能付きのコネクションプーリング
- 1 つのセッションで複数のビューやデータベースをクエリ可能
- 複数の SQL ステートメントタイプに対応(SELECT、SHOW、DESCRIBE、EXPLAIN、WITH)
- Snowflake データのクエリに対応する MCP 互換ハンドラー
- データ変更を防止するセキュリティチェック付きの読み取り専用操作
- Python 3.12 以降に対応
- Claude Desktop と簡単に連携できる、stdio ベースの MCP サーバー
利用可能なツール
このサーバーは、Snowflake をクエリするために次のツールを提供します。
- list_databases:アクセス可能な Snowflake データベースをすべて一覧表示します
- list_views:指定したデータベースとスキーマ内のビューをすべて一覧表示します
- describe_view:列や SQL 定義を含む、指定したビューの詳細情報を取得します
- query_view:任意の行数制限を指定して、ビューのデータをクエリします
- execute_query:カスタムの読み取り専用 SQL クエリ(SELECT、SHOW、DESCRIBE、EXPLAIN、WITH)を実行し、結果を Markdown テーブル形式で表示します
インストール
前提条件
- Python 3.12 以降
- 次のいずれかを備えた Snowflake アカウント:
- 設定済みのサービスアカウント(ユーザー名+秘密鍵)、または
- ブラウザーベースの認証に使用する通常のユーザーアカウント
- uv パッケージマネージャー(推奨)
手順
-
このリポジトリをクローンします。
git clone https://github.com/yourusername/snowflake-mcp-server.git cd snowflake-mcp-server -
パッケージをインストールします。
uv pip install -e . -
Snowflake の認証情報を記載した
.envファイルを作成します。使用する認証方法に応じて、用意されているサンプルファイルのいずれかを選択します。
秘密鍵認証の場合:
cp .env.private_key.example .env次に、
.envファイルを編集し、Snowflake アカウントの詳細と秘密鍵へのパスを設定します。外部ブラウザー認証の場合:
cp .env.browser.example .env次に、
.envファイルを編集し、Snowflake アカウントの詳細を設定します。
使用方法
uv で実行する
パッケージをインストールした後、次のコマンドでサーバーを直接実行できます。
uv run snowflake-mcp
# Or you can be explicit about using stdio transport
uv run snowflake-mcp-stdio
これにより stdio ベースの MCP サーバーが起動します。このサーバーは、Claude Desktop または stdio 通信に対応した任意の MCP クライアントに接続できます。
外部ブラウザー認証を使用すると、ブラウザーウィンドウが自動的に開き、Snowflake アカウントへのログインを求められます。
Claude Desktop との連携
-
Claude Desktop で、「設定」→「MCP サーバー」に移動します
-
uv 実行ファイルのフルパスを指定して、新しいサーバーを追加します。
"snowflake-mcp-server": { "command": "uv", "args": [ "--directory", "/<path-to-code>/snowflake-mcp-server", "run", "snowflake-mcp" ] }または、stdio トランスポートを明示的に指定します。
"snowflake-mcp-server": { "command": "uv", "args": [ "--directory", "/<path-to-code>/snowflake-mcp-server", "run", "snowflake-mcp-stdio" ] } -
ターミナルで
which uvを実行すると、uv のパスを確認できます -
サーバーの設定を保存します
クエリの例
Claude と一緒に使用する場合、次のような質問ができます。
- 「Snowflake アカウント内のデータベースをすべて一覧表示できますか?」
- 「MARKETING データベース内のビューをすべて一覧表示して」
- 「SALES データベースにある CUSTOMER_ANALYTICS ビューの構造を説明して」
- 「FINANCE データベースにある REVENUE_BY_REGION ビューのサンプルデータを見せて」
- 「次の SQL クエリを実行して:SELECT customer_id, SUM(order_total) as total_spend FROM SALES.ORDERS GROUP BY customer_id ORDER BY total_spend DESC LIMIT 10」
- 「MARKETING データベースをクエリして、コンバージョン率が高いキャンペーンのトップ 5 を見つけて」
- 「SALES.CUSTOMER_METRICS と MARKETING.CAMPAIGN_RESULTS をクエリして、異なるデータベースのビューのデータを比較して」
設定
接続プーリングの動作は、環境変数で設定できます。
SNOWFLAKE_CONN_REFRESH_HOURS:接続を更新する間隔(時間単位、デフォルト:8)
.env 設定例:
# Set connection to refresh every 4 hours
SNOWFLAKE_CONN_REFRESH_HOURS=4
認証方法
秘密鍵認証
この方法では、サービスアカウントと秘密鍵を使用して、対話を必要としない認証を行います。自動化されたプロセスに最適です。
- Snowflake のドキュメントに従って、Snowflake ユーザー用のキーペアを作成します
.envファイルでSNOWFLAKE_AUTH_TYPE=private_keyを設定しますSNOWFLAKE_PRIVATE_KEY_PATHに秘密鍵のパスを指定します
外部ブラウザー認証
この方法では、対話型認証のためにブラウザーウィンドウが開きます。
.envファイルでSNOWFLAKE_AUTH_TYPE=external_browserを設定します- サーバーを起動すると、ログインを求めるブラウザーウィンドウが開きます
- 認証後、Snowflake アカウントの設定で指定された期間、セッションが有効になります
セキュリティに関する考慮事項
このサーバーは次の処理を行います。
- 読み取り専用操作を強制します(SELECT、SHOW、DESCRIBE、EXPLAIN、WITH ステートメントのみ許可されます)
- 大きな結果セットを防ぐため、LIMIT 句を自動的に追加します
- Snowflake への接続に安全な認証方法を使用します
- SQL インジェクションを防ぐため、入力を検証します
⚠️ 重要:.env ファイルは安全に保管し、バージョン管理に絶対にコミットしないでください。.gitignore ファイルでは、このファイルが除外されるように設定されています。
開発
静的型チェック
mypy mcp_server_snowflake/
リンティング
ruff check .
フォーマット
ruff format .
テストの実行
pytest
コントリビューション
コントリビューションを歓迎します。お気軽にプルリクエストを送信してください。
技術的な詳細
このプロジェクトでは、次のものを使用します。
- Snowflake への接続に Snowflake Connector Python
- Claude とのやり取りに MCP(Model Context Protocol)
- データ検証に Pydantic
- 環境変数の管理に python-dotenv
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。