🧙‍♂️

【Snowflake MCP】Claude Desktopにエージェントを管理するエージェントになってもらった

に公開

はじめに

朝起きるのがつらくなってきた今日この頃ですが、みなさまいかがお過ごしでしょうか。

私の中では最近、MCP(Model Context Protocol) 周りがじわじわ面白くなってきています(今更)。
「LLM が外部のツールやデータとどうつながるか」というテーマは以前からありましたが、
MCPの登場でその接続がかなり実用寄りになってきた印象があります。

そんな中でSnowflakeからもマネージドMCPサーバーがGA(一般提供)になったので、今回はそれについて使ってみた記録を書いていきます。

Snowflake MCP サーバーとは

Snowflake MCP サーバーは、MCP(Model Context Protocol)を通じて
Snowflake上のリソースをLLMからツール的に扱えるようにする仕組み です。

これにより、LLM側から見るとSnowflakeは

  • SQLを実行できるツール
  • Snowflake上のAgentを呼び出せるツール

として認識されます。

「LLMがSnowflakeの中身を知っている」というよりは、
安全に制御されたインターフェース越しに操作できる、というイメージが近いです。

今回はこの仕組みを使って、

  • Snowflake側に複数のエージェントを用意
  • Claude Desktopを“司令塔”にする

という構成を作ってみました。

全体構成

今回の構成はシンプルですが以下の通りです。

Snowflake(トライアル環境)
👉Cortex Agentでエージェントを作成

Snowflake MCP サーバー
👉SnowflakeとLLMをつなぐ

Claude Desktop
👉MCP クライアントとして利用
👉ユーザーとの対話を担当
👉どのエージェントを使うか判断する役割

ポイントは、
Claude 自身が「どのエージェントを使うか」を判断するところですね。
果たしてできるのでしょうか...

いざ

Snowflakeでエージェント作成

まずはSnowflakeでエージェントを作っていきます。
今回作るエージェントは

  1. 売上分析エージェント
  2. 週報作成エージェント

の二本立てです。

1のエージェントはSnowflake公式のSnowflake Intelligence QuickStartで簡単に作れるので、流用させていただきます。

2のエージェントは、Snowflake公式のSampleデータベースのTPCH_SF1を元にセマンティックビューを作ります。また、そのデータをClaudeに渡して、営業日報も作ってもらい、そのままCortex Searchにします。


TPCH_SF1のテーブル一覧


Claudeに作ってもらった営業日報

TPCH_SF1のデータの中身をあまり確認せず作ってしまったため、オーダー日が1992年~1998年という大昔の実績と日報になってしまいましたが、今回はこのまま進めます。

ということで2体のエージェントを作成しました。
エージェントの中身の詳しい説明は割愛しますが

  • SALES_MARKETING_ANALYST👉実績分析をするエージェント
  • MAKE_WEEKLY_REPORT👉営業日報と実績から週報を作成するエージェント

です。


エージェントの数え方って2体?2匹?2人?

ClaudeとSnowflakeをMCPでつなぐ

次に、Snowflake MCP サーバーを使ってClaude Desktop と Snowflake を接続します。
githubのREADMEにClaude Desktopとの接続方法が書いてあります。今回はuvxでの接続にします。
https://github.com/isaacwasserman/mcp-snowflake-server?tab=readme-ov-file#usage-with-claude-desktop

接続にあたっては公式ドキュメントと菅野翼さんのこちらの記事も参考にさせていただきました。
https://zenn.dev/snowflakejp/articles/70ab5fb2b5ed99#cursor-での設定方法
https://docs.snowflake.com/ja/user-guide/snowflake-cortex/cortex-agents-mcp#create-an-mcp-server-object

設定したファイルの内容はこちらです。

config/snowflake-mcp-config.yaml
agent_services:
    - service_name: "SALES_MARKETING_ANALYST"
      description: "This agent analyzes sales and marketing."
      database_name: "MCP_POC"
      schema_name: "MART_AI"
    - service_name: "MAKE_WEEKLY_REPORT"
      description: "This agent creates a weekly report based on sales and sales activity."
      database_name: "MCP_POC"
      schema_name: "MART_AI"


other_services:
  query_manager: true
  object_manager: true
  semantic_view_manager: true

sql_statement_permissions:
  - All: True      
AppData/Roaming/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "snowflake-labs": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/Snowflake-Labs/mcp",
        "mcp-server-snowflake",
        "--service-config-file",
        "C:\\Users\\<your_username>\\<your_folder>\\config\\snowflake-mcp-config.yaml"
      ],
      "env": {
        "SNOWFLAKE_ACCOUNT": "your_account",
        "SNOWFLAKE_USER": "your_username",
        "SNOWFLAKE_PASSWORD": "your_password",
        "SNOWFLAKE_ROLE": "your_role",
        "SNOWFLAKE_WAREHOUSE": "your_warehouse",
        "SNOWFLAKE_DATABASE": "your_databese",
        "SNOWFLAKE_SCHEMA": "your_schema"
      }
    }
  }
}

snowflake_mcp_configの方に2つのエージェントを登録しております。一応descriptionにそれぞれの説明をつけました。

ファイルを保存した後、Claudeを一旦終了し、再度起動します。

Claudeの設定→開発者画面へ行くと、ちゃんとSnowflake MCPが有効になっていることが分かります。

この状態で、チャット画面の「+」→コネクタを確認して、snowflakeを有効化しましょう。

エラー回避とオーケストレーションの設定

さて、設定が済んだところでClaudeからSnowflakeのエージェントを呼んでみます。

エラー発生してます。
その結果、Claudeが直接データをクエリしてエージェントを呼び出さずに週報を作成しています。(まあそれでもいいんだけども...)

そのままエラー原因を聞いてみました

なんでエージェントからの応答にエラーが生じた?{"results":"Error parsing agent response data."}
ログ見て確認してみて

結論、日本語応答の生成に失敗した可能性が高いみたいです。
Claudeに一度英語に翻訳してもらい、Snowflakeからの返答は日本語に翻訳してもらうことにしました。

上手くいきました!

また、何度か試すと意図しない方のエージェントを呼び出したり、元のテーブルをクエリしてClaude自身が分析をしたりするので、その辺も調整します。

Claudeのシステムプロンプト

Snowflake_MCPというプロジェクトをClaude Desktopで作成し、その中の手順に以下の様に設定しました。
英語と日本語の翻訳や、どういう時にどっちのエージェントを使うかの指示です。

- 基本的にSnowflakeMCPを使って、Snowflakeのエージェントを呼び出してSnowflakeのエージェントに分析させてください。
- Snowflakeに渡すクエリは英語で渡して、Snowflakeからの返答は日本語に翻訳して出力してください。
- 売上やマーケティングの分析は"Sales_and_Marketing_Analysis"のエージェントを呼び出してください。
- 週報やWeekly Report、月次のレポートの作成は"MAKE_WEEKLY_REPORT"のエージェントを呼び出してください。

結果

さて、ひと通り準備は完了したので、あとはClaude君がエージェントを使い分けてくれるか見てみましょう。

Snowflakeに接続して、2025年6月から8月までの商品カテゴリー別の売上を分析して


クエリを英語で投げており、エージェントも分析の方を選択できており、分析結果を返してくれました。

そのまま続けます。

次は、1994年12月のWeeklyReportを作成してまとめて。


今度もしっかりと、クエリを英語で渡しつつ、週報作成の方のエージェントを呼びだしてくれました。

外部データとも組み合わせてみる

ここまで来たら、MCPとMCPを組み合わせて更に深い分析もできそうです。
Snowflake MCPからエージェントを呼びだして分析した結果に対して、さらにClaudeからWeb検索をかけて要因の深堀もできるか試してみます。
(※Web検索は厳密にはMCPではないですが、考え方としてMCPとMCPの掛け合わせと思ってください)

次は、Snowflakeに接続して、2025年5月から7月にかけての商品カテゴリー別の売り上げを分析して。その後、帰ってきた結果を、ネット上のニュースやSNS情報などの外部データと組み合わせて、分析結果の要因を深堀してみて


まずは普通にSnowflakeからの分析結果です。

そこから続けてWeb検索を行い、博報堂調査の「2025年に始めたいこと」を持ってきたりしてくれています。

ダミーデータなのにこれだけ説得力ある形で出力されたらもう世の中が信じられなくなりますね。

まとめ

今回Snowflake MCPを触ってみて、シンプルにエージェントがエージェントを動かすことは体験として面白かったです。

「LLMがSQLを叩く」だけでなく

  • エージェントを部品として用意し
  • LLMがそれを状況に応じて使い分ける

という構成は、実運用にもかなり近い印象です。

企業の部署や部門ごとにエージェントを作り、中央のエージェントがそれらを使い分けるとか、グループマネージャーを模したエージェントを作り、細かい実作業を複数のエージェントを使い分けて進めていく未来が近づいている気がしますね。

今後やってみたいこととしては、

  • エージェントの数を増やす
  • 権限管理やガバナンスをどう設計するか
  • 実際の業務フローに組み込む

あたりです。

MCP周りはまだ発展途上ですし事例やケースもまだまだ出尽くしていないと思うので、これからが楽しみです。
最後までお読みいただきありがとうございました。

truestarテックブログ

Discussion