Snowflake MCP Service について
Snowflake MCP Serviceは、Snowflakeデータベースをクエリするクライアント向けのMCPサーバーです。SQL実行とCSVエクスポートに対応し、接続を管理します。パスワードまたはキーペアで認証できます。
主な機能
- 01Snowflake SQLクエリの実行
- 02クエリ結果のCSVエクスポート
- 03接続ライフサイクルの管理
- 04タイムアウト後の再接続
- 05パスワードまたはキーペア認証
活用シーン
- 01MCP対応クライアントからのSQL実行
- 02後続処理向けのクエリ結果エクスポート
MCP 対応
MCPクライアントにexecute_queryとexport_to_csvツールを提供します。SnowflakeでSQLを実行し、構造化された結果またはエクスポートファイルのパスを返します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Snowflake MCP サービス
MCP 互換クライアントから Snowflake データベースにアクセスできる Model Context Protocol(MCP)サーバーです。
このサーバーは Model Context Protocol を実装しており、あらゆる MCP クライアントから以下の操作を行えます。
- Snowflake データベースで SQL クエリを実行する
- データベース接続のライフサイクル(接続、タイムアウト時の再接続、切断)を自動的に処理する
- クエリ結果とエラーを処理する
- データベース操作を安全に実行する
- パスワード認証またはキーペア認証で接続する
アーキテクチャの概要
MCP(Model Context Protocol)とは?
MCP は、アプリケーションが AI モデルや外部サービスと通信できるようにする標準プロトコルです。標準化された通信インターフェースを通じて、AI モデルが学習データ以外のツールやデータソースにアクセスできるようにし、機能を拡張します。主な機能は以下のとおりです。
- 標準入出力(stdio)による通信
- 構造化されたツールの定義と検出
- 標準化されたツール呼び出しの仕組み
- 構造化された結果の送信
システムコンポーネント
Snowflake-MCP サーバーは、以下の主要コンポーネントで構成されています。
- MCP サーバー - MCP プロトコルを実装し、クライアントからのリクエストを処理する中核コンポーネント
- Snowflake 接続マネージャー - 接続の作成、維持、クリーンアップなど、データベース接続を管理します
- クエリプロセッサー - Snowflake で SQL クエリを実行し、結果を処理します
- 認証マネージャー - 各種認証方式(パスワードまたは秘密鍵)を処理します
通信フロー
システムは、以下の通信フローで動作します。
- MCP クライアント(Claude などの MCP 互換アプリケーション)が MCP サーバーにリクエストを送信します
- MCP サーバーは
.envファイルの認証情報を使用して Snowflake に対して認証します - MCP サーバーが Snowflake で SQL クエリを実行します
- Snowflake が結果を MCP サーバーに返します
- MCP サーバーが結果を整形し、MCP クライアントに返します
このアーキテクチャにより、セキュリティと効率的な接続管理を維持しながら、AI アプリケーションと Snowflake データベースをシームレスに統合できます。
インストール
- このリポジトリをクローンします
git clone https://github.com/davidamom/snowflake-mcp.git
- 依存関係をインストールします
pip install -r requirements.txt
設定
MCP クライアントの設定例
以下は Claude Desktop の設定例ですが、このサーバーはあらゆる MCP 互換クライアントで動作します。設定方法はクライアントによって異なる場合があります。
{
"mcpServers": {
"snowflake": {
"command": "C:\\Users\\YourUsername\\path\\to\\python.exe",
"args": ["C:\\path\\to\\snowflake-mcp\\server.py"]
}
}
}
設定パラメーター:
command:Python インタープリターのフルパスです。Python のインストール先に合わせて変更してください。args:サーバースクリプトのフルパスです。リポジトリをクローンした場所に合わせて変更してください。
各 OS のパスの例:
Windows:
{
"mcpServers": {
"snowflake": {
"command": "C:\\Users\\YourUsername\\anaconda3\\python.exe",
"args": ["C:\\Path\\To\\snowflake-mcp\\server.py"]
}
}
}
MacOS/Linux:
{
"mcpServers": {
"snowflake": {
"command": "/usr/bin/python3",
"args": ["/path/to/snowflake-mcp/server.py"]
}
}
}
Snowflake の設定
プロジェクトのルートディレクトリに .env ファイルを作成し、以下の設定を追加します。
# Snowflake Configuration - Basic Info
SNOWFLAKE_USER=your_username # Your Snowflake username
SNOWFLAKE_ACCOUNT=YourAccount.Region # Example: MyOrg.US-WEST-2
SNOWFLAKE_DATABASE=your_database # Your database
SNOWFLAKE_WAREHOUSE=your_warehouse # Your warehouse
SNOWFLAKE_ROLE=your_role # Your role
# Authentication - Choose one method
認証オプション
この MCP サーバーは、以下の 2 種類の認証方式に対応しています。
-
パスワード認証
SNOWFLAKE_PASSWORD=your_password # Your Snowflake password -
キーペア認証
SNOWFLAKE_PRIVATE_KEY_FILE=/path/to/rsa_key.p8 # Path to private key file SNOWFLAKE_PRIVATE_KEY_PASSPHRASE=your_passphrase # Optional: passphrase if key is encryptedキーペア認証を使用するには、まず Snowflake でキーペア認証を設定する必要があります。
- キーペアを生成し、公開鍵を Snowflake に登録します
- 秘密鍵ファイルをマシン上の安全な場所に保存します
- 設定に秘密鍵ファイルのフルパスを指定します
キーペア認証の設定手順については、Snowflake のキーペア認証に関するドキュメントを参照してください。
両方の認証方式が設定されている場合、サーバーはキーペア認証を優先します。
接続管理
サーバーには、次の自動接続管理機能が用意されています。
-
接続の自動初期化
- 最初のクエリを受信したときに接続を作成します
- 接続パラメーターを検証します
-
接続の維持
- 接続状態を追跡します
- 接続のタイムアウトに対処します
- 接続が失われた場合は自動的に再接続します
-
接続のクリーンアップ
- サーバーの停止時に接続を適切に閉じます
- リソースを適切に解放します
使用方法
標準的な使用方法
MCP クライアントで設定すると、サーバーは自動的に起動します。通常の操作では、手動で起動する必要はありません。サーバーが起動すると、MCP クライアントから Snowflake クエリを実行できるようになります。
開発時のテストでは、次のコマンドを使用してサーバーを手動で起動できます。
python server.py
注:通常の使用では、サーバーを手動で起動する必要はありません。通常、MCP クライアントが設定に基づいてサーバーの起動とシャットダウンを管理します。
Docker の使用方法
Docker を使用してサーバーを実行することもできます。この方法は本番環境に推奨されており、さまざまなプラットフォームで一貫した実行を実現します。
- Docker イメージをビルドします。
docker build -t snowflake-mcp .
- Docker を使用するように MCP クライアントを設定します。設定例:
{
"mcpServers": {
"snowflake-docker": {
"command": "docker",
"args": [
"run",
"-i",
"snowflake-mcp"
],
"env": {
"SNOWFLAKE_USER": "your_username",
"SNOWFLAKE_ACCOUNT": "your_account",
"SNOWFLAKE_DATABASE": "your_database",
"SNOWFLAKE_WAREHOUSE": "your_warehouse",
"SNOWFLAKE_PASSWORD": "your_password",
"SNOWFLAKE_ROLE": "your_role"
}
}
}
}
注:Docker の実装では通信に stdio を使用するため、ポートを公開する必要はありません。
Docker でキーペア認証を使用する場合は、秘密鍵ファイルをマウントする必要があります。
docker run -i -v /path/to/your/key.p8:/app/rsa_key.p8:ro snowflake-mcp
また、設定を次のように更新してください。
{
"mcpServers": {
"Snowflake-Docker": {
"command": "docker",
"args": [
"run",
"-i",
"-v",
"/path/to/your/key.p8:/app/rsa_key.p8:ro",
//optional
"-v",
"/path/to/export/dir/:/export/"
"snowflake-mcp"
],
"env": {
"SNOWFLAKE_USER": "your_username",
"SNOWFLAKE_ACCOUNT": "your_account",
"SNOWFLAKE_DATABASE": "your_database",
"SNOWFLAKE_WAREHOUSE": "your_warehouse",
"SNOWFLAKE_ROLE": "your_role",
"SNOWFLAKE_PRIVATE_KEY_FILE": "path_for_your_private_key",
"SNOWFLAKE_PRIVATE_KEY_PASSPHRASE": "your_password_for_private_key"
}
}
}
}
機能
- Snowflake データベースへの安全なアクセス
- 柔軟な認証(パスワード認証またはキーペア認証)
- 堅牢なエラー処理と報告
- 自動接続管理
- クエリの実行と結果の処理
- MCP 準拠のあらゆるクライアントに対応
技術的な詳細
コアコンポーネント
この実装は、いくつかの主要なクラスとモジュールで構成されています。
- server.py - MCP サーバーの実装を含むメインエントリーポイントです。
- SnowflakeConnection - 次の処理を含む、Snowflake データベースのすべての操作を担うクラスです。
- 接続の確立と再接続
- クエリの実行とトランザクション管理
- 接続の維持とクリーンアップ
- SnowflakeMCPServer - MCP プロトコルを実装するメインのサーバークラスです。
- MCP フレームワークに利用可能なツールを登録します
- クライアントからのツール呼び出しリクエストを処理します
- 接続のライフサイクルを管理します
接続のライフサイクル
信頼性を確保するため、接続のライフサイクルは慎重に管理されています。
- 初期化 - 最初のクエリを受信したときに、必要に応じて接続を作成します
- 検証 - 接続を試みる前に接続パラメーターを検証します
- 監視 - 接続の有効性を定期的にテストします
- 復旧 - 接続が失われた場合、またはタイムアウトした場合に自動的に再接続します
- クリーンアップ - サーバーのシャットダウン時にリソースを適切に解放します
MCP ツールインターフェース
サーバーは、MCP クライアントに次のツールを公開します。
-
execute_query - Snowflake で SQL クエリを実行し、結果を返します
- 入力:SQL クエリ文字列
- 出力:構造化形式のクエリ結果
-
export_to_csv - Snowflake で SQL クエリを実行し、結果を返します
- 入力:SQL クエリ文字列
- 出力:エクスポートされた行数。出力ファイルのパス
この実装は、MCP プロトコルの実装と Snowflake データベースとの連携の両方において、ベストプラクティスに従っています。
ライセンス
このプロジェクトはMIT ライセンスのもとでライセンスされています。詳細についてはLICENSEファイルをご覧ください。
Copyright (c) 2025 David Amom
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。