Snowflake MCP Server を触ってみた

Snowflake MCP Server を触ってみた

Clock Icon2025.04.30

こんにちは!アノテーション AWS テクニカルサポートチームの大高です。

最近流行りの MCP(Model Context Protocol) ですが、私も流行りに乗って MCP を触ってみたいと思います。
まずは個人的に慣れている Snowflake と連携できる「Snowflake MCP Server」というものを利用して、どんな感じのものなのかを試してみたいと思います。

https://github.com/isaacwasserman/mcp-snowflake-server

なお、既に同様の詳しい解説がされているエントリがありますので、こちらの内容も参考にしながら試していきます。

https://dev.classmethod.jp/articles/snowflake-by-mcp/

前提

  • OS は macOS
  • Claude Desktop をインストール済み
  • Snowflake の環境は、既に準備済みの環境を利用
  • node と Python はセットアップ済み
$ node --version
v22.14.0

$ python -V
Python 3.13.3

セットアップ方法

README によると、セットアップ方法は大きく3つあるようです。

https://github.com/isaacwasserman/mcp-snowflake-server?tab=readme-ov-file#installing-via-uvx

  • Installing via Smithery
  • Installing via UVX
  • Installing Locally

今回は「Installing via Smithery」の手順を試してみます。

Smithery 経由でセットアップする

README に従い、以下のようにコマンドを実行します。

$ npx -y @smithery/cli install mcp_snowflake_server --client claude

すると、いくつか聞かれるので順番に答えていきましょう。

匿名データの利用同意

今回は No にしておきました。

? Would you like to help improve Smithery by sending anonymized usage data?
For information on Smithery's data policy, please visit: https://smithery.ai/docs/data-policy No
✔ Successfully resolved mcp_snowflake_server

UV パッケージマネージャのインストール

必要なので、インストールします。

? UV package manager is required for Python MCP servers. Would you like to install it? Yes
✔ ✓ UV installed successfully

Snowflake 関連設定

Snowflake 関連設定について聞かれるので、以下のように順番に答えていきます。

なお、「アカウント識別子(account identifier)」は、以下のドキュメントを参考に確認します。
https://docs.snowflake.com/ja/user-guide/admin-account-identifier

? The Snowflake role. (required) OOTAKA_SANDBOX_ROLE
? The Snowflake username. (required) foobar
? The Snowflake schema. (required) PUBLIC
? The Snowflake account identifier. (required) foobar-foobar
? The Snowflake database to use. (required) OOTAKA_SANDBOX_DB
? The Snowflake password. (required) **********
? The Snowflake warehouse to connect to. (required) X_SMALL_WH
mcp_snowflake_server successfully installed for claude

Claude アプリケーションの再起動

最後に、設定適用のため再起動を促されますので、再起動します。

? Would you like to restart the claude app to apply changes? Yes
Restarting claude app...

と、ここでエラーが発生しました。

Failed to restart Claude: Error: Command failed: killall "Claude" && open -a "Claude"
\_LSOpenURLsWithCompletionHandler() failed for the application /Applications/Claude.app with error -609.

    at genericNodeError (node:internal/errors:983:15)
    at wrappedFn (node:internal/errors:537:14)
    at ChildProcess.exithandler (node:child_process:414:12)
    at ChildProcess.emit (node:events:518:28)
    at maybeClose (node:internal/child_process:1101:16)
    at ChildProcess._handle.onexit (node:internal/child_process:304:5) {

code: 1,
killed: false,
signal: null,
cmd: 'killall "Claude" && open -a "Claude"',
stdout: '',
stderr: '\_LSOpenURLsWithCompletionHandler() failed for the application /Applications/Claude.app with error -609.\n'
}

再起動に失敗しているようなので、手動で Claude アプリケーションを再起動します。

エラー発生 「Child process error: spawn uvx ENOENT」

Claude を立ち上げ直しましたが、なにかエラーが出ているようです。
以下のログファイルを確認します。

/Users/(foo.bar)/Library/Logs/Claude/mcp-server-mcp_snowflake_server.log

ログファイルには、以下のように uvx のエラー発生が記録されていました。

2025-04-14T08:44:55.449Z [Runner] Starting child process setup...
2025-04-14T08:44:55.610Z [Runner] Executing: {"command":"uvx","args":["mcp_snowflake_server"]}
2025-04-14T08:44:55.614Z [Runner] Child process error: spawn uvx ENOENT
2025-04-14T08:44:55.614Z [Runner] Failed to spawn child process - check if the command exists and is executable

調べてみると、 brewuv をインストールし直すと良いようなので、インストールをし直したところ、このエラーは解消しました!

https://github.com/orgs/modelcontextprotocol/discussions/20

$ brew install uv

エラー発生 「Failed to build snowflake-connector-python==3.13.2

再度 Claude を起動し直したところ、今度は別のエラーが発生しています。

 Downloaded pandas
  × Failed to build `snowflake-connector-python==3.13.2`
  ├─▶ The build backend returned an error
  ╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit
      status: 1)

こちらは snowflake-connector-python の GitHub リポジトリに該当する Issue がありました。

https://github.com/snowflakedb/snowflake-connector-python/issues/2083

xcode を再インストールすると良さそうなので、以下のとおり再インストールしたところ解決しました!

$ sudo rm -rf /Library/Developer/CommandLineTools
$ xcode-select --install

Snowflake MCP Server を試してみる

セットアップが完了したので、早速 Snowflake MCP Server を試してみましょう。
ゴールとして、以下のように設定します。

  • データベース OOTAKA_SANDBOX_DB 上のスキーマを調べる
  • 興味のあるスキーマ上に、どのようなテーブルがあるか調べる
  • 興味のあるテーブルのレコードを、先頭 10 件ぐらいプレビューしてもらう
  • その他、テーブルで興味のあることを聞いてみる

では、Claude で聞いてみましょう。以下は Claude でやりとりした結果をテキストに起こしたものです。

Snowflakeのデータベース 'OOTAKA_SANDBOX_DB' における、スキーマの一覧を教えてください。
OOTAKA_SANDBOX_DBデータベースには以下の4つのスキーマがあります:

1. PUBLIC
2. SOS
3. WORLD
4. INFORMATION_SCHEMA

これらのスキーマについて、特定のテーブル一覧や詳細情報が必要であれば、お知らせください。
WORLD スキーマには、どんなテーブルがありますか?
OOTAKA_SANDBOX_DBデータベースのWORLDスキーマには以下の2つのテーブルがあります:

1. CITY
2. CITY_PIPE

これらのテーブルの詳細情報が必要であれば、お知らせください。
CITY テーブルの先頭10件を見せてください。
OOTAKA_SANDBOX_DB.WORLD.CITY テーブルの先頭10件のデータを取得します。

OOTAKA_SANDBOX_DB.WORLD.CITY テーブルの先頭10件のデータは以下の通りです:

| ID  | NAME                                 | COUNTRYCODE | DISTRICT               | POPULATION |
|-----|--------------------------------------|-------------|------------------------|------------|
| 85  | 9zcXFxVpsH7mHFUYVTb15cag0DrWY1SJ9lg  | ARG         | bBUGH20vnGzKzvr5ZPxI   | 32,062     |
| 93  | zL2jOqvQolG1rgRnthmTQ5s2gykoDcmdMo6  | ARG         | 9jPs6CzNv3Cm8do0uSIQ   | 33,552     |
| 112 | vbaTpk1KQW4pfgexi15nMNQKBqINZauEtWT  | ARG         | CDaMd2ysQbhnye6832Yw   | 22,389     |
| 126 | IUbV4aODPjyEnNexiYNvuPQ0eQlQfmiA303  | ARM         | kifITxh9m7ZLmlQJe15U   | 36,302     |
| 262 | iSNU0sMAl8fKt10pkSWTFQFahcL61P4arJx  | BRA         | Zirm8ju6DkmNDNbKpPR7   | 31,813     |
| 399 | XnyBYveOitnNMn0lgBOCKV8QhKsf4B3qP2k  | BRA         | FDfoM7YDmttrb3Tx1o2n   | 63,391     |
| 516 | kYG8C3FQx55epAL3rwtTQo71RIzQvb1M2NJ  | GBR         | tksRUiJwXD0kPrDWES7g   | 32,772     |
| 539 | hexqzbH9XPLG3ORMGHJxRau4Er2kL3nLEGj  | BGR         | 0IngKy5LCFiRv9tDlNms   | 5,117      |
| 608 | W3yCNcaFxNtvaIDcDQCMgNzbYU3ulkvB9Bz  | EGY         | y5ilQQU83EQeUXE3ddK8   | 68,874     |
| 739 | EBRgC1luPi6PcVTazpNAM6wBtPBMJNmWqzU  | ZAF         | huZvxGacJkc8xIVFIcAk   | 71,977     |

テーブルの構造は以下のカラムで構成されています:

- ID: 都市の識別番号
- NAME: 都市名
- COUNTRYCODE: 国コード(3文字のコード)
- DISTRICT: 地区/県/州名
- POPULATION: 人口
そのテーブルで人口が最も多い都市と国を教えてください。
CITY テーブルで人口が最も多い都市は以下の通りです:

- 都市名: Fresnillo
- 国コード: MEX (メキシコ)
- 地区/州: Zacatecas
- 人口: 182,744人

Fresnillo(メキシコのサカテカス州にある都市)が、このテーブルの中で最も人口の多い都市となっています。

かなり良い感じに応答してくれました!もうちょっと聞いてみましょう。

このテーブルのデータを分析して、グラフに表せますか?
はい、CITYテーブルのデータを分析してグラフで表現することができます。まずはデータの特徴を理解するために、いくつか分析を行ってみましょう。
まず、国別の都市数と平均人口を調べてみます。

続いて、人口規模別に都市数を調べてみましょう。

これらのデータに基づいて、グラフを作成しましょう。最初に、都市数が多い上位10カ国のグラフと、人口規模別の都市分布グラフを作成します。

CITYテーブルのデータを分析し、グラフ化しました。主な分析結果は以下の通りです:

主な洞察:

1. 国別の都市数:
  - 中国(CHN)が最も多くの都市(363)を持ち、インド(IND)が341都市で2位です
  - 日本(JPN)は249都市で5位に位置しています
  - 上位10カ国で全体の都市数の半分近くを占めています

2. 人口分布:
- 人口区分別では、「20,000人未満」と「20,000-40,000人」の都市がそれぞれ836都市で最も多いです
- 各人口区分(100,000人超を除く)はほぼ均等に分布しており、約800都市ずつあります
- データセット内で100,000人を超える都市はメキシコのFresnilloのみです(182,744人)

3. 平均都市人口:
- 上位10カ国の平均都市人口はおおよそ46,000人〜55,000人の範囲内です
- 日本の平均都市人口は約46,642人です

グラフでは、国別の都市数、平均都市人口、そして人口規模別の都市分布を視覚化しています。特に円グラフでは、人口規模による都市の分布がかなり均等であることが分かります。

いかがでしょうか?他の角度からの分析や、より詳細な情報が必要であれば、お知らせください。

1CyIP5Zn1gqP96Ccazo9hW_001

素晴らしいですね。しかも表示されたグラフは単純な画像ではなく、react の recharts を利用したグラフでした!

まとめ

以上、Snowflake MCP Server を試してみました!

テーブルに対するデータ分析は、SQL が書ければもちろん正確に知ることができます。
一方で、SQL を書くのが難しい場合には、このようにツールを利用することで簡単に分析することができると思います。とくに MCP の台頭で、プロンプトによって、色々な情報を組み合わせた分析もできるようになってきたのかと思います。

ツールは万能ではないかもしれませんが、うまくツールを活用して、爆速で問題解決できるようになっていきたいですね。

どなたかのお役に立てば幸いです。それでは!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.