Claude Snowflake連携ガイド — 設定手順とできること
ClaudeとSnowflakeを連携する手順を、Snowflake側の準備から権限の決まり方、接続できないときの切り分けまでまとめます。書き込みの可否は公開するツール次第です。
Claude Snowflake連携とは何か
Snowflakeコネクタは、Claudeから自社のSnowflakeアカウントのデータを取得するためのディレクトリConnectorです。開発元はSnowflake自身で、Connectorsディレクトリでは「Data & analytics」カテゴリに「Anthropic verified」として掲載されています。サインインが必要で、掲載は2025年11月に追加されたものです。
裏側で動くのは、Snowflakeが提供するマネージドMCPサーバーです。ディレクトリのページには、自然言語でSQLクエリを実行でき、Cortex Agentsにも対応すると書かれています。公開されているツールとして挙がっているのはCortex AgentsとCortex Searchの2つです。
つまり、Claudeが何をできるかは「Snowflake側のMCPサーバーにどのツールを登録したか」でほぼ決まります。Claude側の設定画面をいくら探しても、できることの範囲を絞るスイッチは見つかりません。この記事は、その前提でSnowflake側の準備から順に追います。
読み取り専用と言い切れるのはどの場合か
「Snowflakeコネクタは読み取り専用」と説明されることがありますが、ディレクトリのページに権限区分の記載はありません。書き込みの可否はMCPサーバーに登録するツールの種類で変わります。
MCPサーバーに登録できるツールの種類
Cortex Agent
質問をエージェントに渡し、エージェントが設定済みのCortex AnalystやCortex Searchを使って答えを返します。応答には途中の推論・ツール呼び出し・検索結果・引用がすべて含まれ、200KB以上になることがあります。
Cortex Analyst
自然文からSQLを生成し、そのSQL文をクライアントに返します。使えるのはセマンティックビューだけで、セマンティックモデルは非対応です。
Cortex Search
Cortex Searchサービスに対する検索で、契約書やアンケートの自由記述のような非構造化データを引く役です。
SQL実行(SYSTEM_EXECUTE_SQL)
クライアントが書いたSQLをそのまま実行します。
read_onlyの既定値はtrueで、SELECTだけが通ります。falseにする設定は可能です。UDF・ストアドプロシージャ(GENERIC)
登録した関数や手続きをツールとして呼び出します。中身の処理はSnowflake側の実装次第なので、書き込みを行う手続きを公開することも技術的には可能です。
読み取りに閉じた運用にしたいときは、書き込みを行うカスタムツールを持たせていないCortex Agent、またはCortex Searchだけを登録するか、SQL実行のread_onlyをtrueのままにします。Snowflakeは、業務データの質問にはCortex Agentだけを公開するのを基本形としています。同じサーバーにSQL実行ツールも置くと、クライアントがエージェントのセマンティックビューや検証済みクエリを迂回できるためです。直接SQLが必要なら、専用の最小権限ロールを付けた別サーバーに分ける構成が案内されています。
自社のSnowflake管理者がサーバーをどう作ったかを確認せずに「書き込みできない」と言い切ると、外れる可能性があります。管理者に聞くべきなのは、登録済みツールの一覧と、SQL実行ツールのread_onlyの値の2点です。
接続前にSnowflake側で必要な準備
ディレクトリの「Connect」を押す前に、Snowflake管理者側で次の準備が要ります。Claude側の作業は、その後の数クリックだけです。
Snowflake管理者が先に済ませる作業
- 1
MCPサーバーオブジェクトを作る
CREATE MCP SERVERで、公開するツールをYAMLの仕様として指定します。接続先URLはhttps://<アカウントURL>/api/v2/databases/<DB>/schemas/<スキーマ>/mcp-servers/<サーバー名>の形になります。 - 2
ロールに権限を渡す
MCPサーバーへのUSAGEだけではツールは呼べません。エージェント、検索サービス、セマンティックビュー、関数それぞれに必要な権限を、ツールごとに付与します。
- 3
OAuthセキュリティ統合を作る
Claudeのコールバック用に
OAUTH_REDIRECT_URIを設定します。claude.aiの場合は通常https://claude.ai/api/mcp/auth_callbackです。Claude Desktopではlocalhostのアドレスになります。どちらの場合も、Claudeが接続設定中に表示するURIと一致させます。 - 4
ユーザーの既定ロールと既定ウェアハウスを確認する
セッションは各ユーザーの
DEFAULT_ROLEで始まります。DEFAULT_WAREHOUSEが空だとセッションの初期化に失敗します。 - 5
ネットワークポリシーを確認する
アカウントでネットワークポリシーを使っているなら、Claudeの送信元IPアドレスを許可する必要があります。
アクセス専用ロールの作成例は次のとおりです(Snowflakeドキュメントの例をもとにした抜粋です)。
CREATE ROLE mcp_access_role;
GRANT DATABASE ROLE SNOWFLAKE.CORTEX_AGENT_USER TO ROLE mcp_access_role;
GRANT USAGE ON WAREHOUSE my_wh TO ROLE mcp_access_role;
GRANT USAGE ON DATABASE my_db TO ROLE mcp_access_role;
GRANT USAGE ON SCHEMA my_db.my_schema TO ROLE mcp_access_role;
GRANT USAGE ON MCP SERVER my_db.my_schema.my_server TO ROLE mcp_access_role;
GRANT USAGE ON AGENT my_db.my_schema.my_agent TO ROLE mcp_access_role;
GRANT ROLE mcp_access_role TO USER analyst_user;
ALTER USER analyst_user SET DEFAULT_ROLE = 'mcp_access_role' DEFAULT_WAREHOUSE = 'my_wh';Snowflakeは、このロールをPUBLICに付与したり、将来のテーブルまで含めて広い権限を渡したりしないよう求めています。
Claudeでの追加とClaude Codeでの確認
Snowflakeのドキュメントによると、Claude(claude.aiとClaude Desktop)ではSettingsのConnectorsを開き、Browse connectorsで「Snowflake」を探すか、Add custom connectorでMCPサーバーURLを入れます。セキュリティ統合のクライアントIDとシークレットを入力して追加すると、ブラウザでSnowflakeのサインインとOAuth同意画面が開きます。承認後にツールが会話で使えるようになります。TeamプランとEnterpriseプランでは、コネクタを追加できるのは管理者だけです。
Claude Codeからも、claude.aiアカウントでログインしていれば同じ接続を利用できます。
/mcp/mcpを実行すると、claude.ai側で追加済みのConnectorsが一覧に出ます。設定ファイルで直接指定するローカルMCPサーバーとは別の経路です。Connectors全般の追加手順やVerified・Communityラベルの見方はClaude Connectorsとはにあります。Anthropicと契約している企業では、Claude Marketplace経由でSnowflakeの利用枠自体を拡張した事例も出ています。
Claudeが見られるデータの範囲はどこで決まるか
Snowflakeのドキュメントでは、ClaudeはOAuthでsession:role:allのスコープを要求するとされています。この場合、セッションのロールはロール名を指定した接続ではなく、そのユーザーのDEFAULT_ROLEになります。
ロールの決まり方で起きること
ロール指定に対応するクライアント
session:role:<ロール名>のスコープを要求でき、そのロールがセッションの主ロールになります。
Claude
サーバー側が他のロールのスコープを公開していても、既定ロール(DEFAULT_ROLE)が使われます。
ここから2つの運用上の判断が出てきます。1つは、Claudeに使わせたいロールを、そのユーザーのDEFAULT_ROLEに設定しておくことです。もう1つは、ユーザーごとに見せるデータの深さを変えたいとき、1つのサーバーでスコープを切り替えるのではなく、専用ロールを付けた別サーバーに分けることです。前者はSnowflakeの案内どおりで、後者もドキュメントが「クライアントがロールのスコープに従わない場合は別サーバー」としています。
同意画面に「secondary roles = ALL」と表示されることがあります。ドキュメントによれば、この表示は見かけ上のもので、セキュリティ統合がOAUTH_USE_SECONDARY_ROLES = NONE(既定値)なら二次ロールは有効になりません。二次ロールを有効にするには統合側でIMPLICITを設定する必要があります。
接続できないときの症状別の切り分け
Snowflakeのトラブルシューティング表を、Claudeから接続する場面に合わせて読み替えると次のとおりです。
| 症状 | 考えられる原因 | 確認すること |
|---|---|---|
| OAuth同意や接続が失敗する | 考えられる原因リダイレクトURIが一致していない | 確認することOAUTH_REDIRECT_URIにClaudeが表示したURIを設定 |
| 認証は通るがMCPサーバーにつながらない | 考えられる原因URLが不完全 | 確認することDB・スキーマ・サーバー名まで含めた完全なパス |
| ホスト名関連の接続エラー | 考えられる原因アカウントのホスト名にアンダースコア | 確認することハイフンに置き換える |
| セッションの初期化に失敗する | 考えられる原因既定ウェアハウスが未設定 | 確認することDEFAULT_WAREHOUSEとそのUSAGE権限 |
| ツールが一覧に出ない | 考えられる原因既定ロールにMCPサーバーのUSAGEがない | 確認することUSAGEを既定ロールに付与 |
| ツールは見えるが呼べない | 考えられる原因下位オブジェクトの権限が足りない | 確認することエージェント・検索サービス・セマンティックビュー・関数の権限 |
| PrivateLinkのアカウントにつながらない | 考えられる原因ClaudeはSaaSクライアントで、PrivateLink経由では届かない | 確認すること公開のMCPサーバーURLを使い、USE_PRIVATELINK_FOR_AUTHORIZATION_ENDPOINT = TRUEを設定 |
| 想定と違うロールで動く | 考えられる原因セッションが別のロールで始まっている | 確認することユーザーのDEFAULT_ROLEを設定して確認 |
invalid_clientのエラーは、認証情報の誤りに見えても、ネットワークポリシーがトークン要求を遮断した場合に同じ応答が返ることがあります。認証情報とメソッドが正しいのに出るときは、まずポリシーを疑う価値があります。許可するIPアドレスは、Anthropicがplatform.claude.com/docs/en/api/ip-addressesで公開している送信元IPを使います。
使い始めてから当たる制限
- 1つのMCPサーバーに登録できるツールは最大50個です。数が増えるとツール選択の精度が下がる可能性があるとされています
- SQL実行ツールとGENERICツールの応答は250KBで切り詰められます。超えるときは列や行を絞って聞き直します
- MCPのリソース・プロンプト・ルート・通知・サンプリングは未対応です
- MCPサーバーオブジェクトはフェイルオーバーグループで複製されません。レプリケーションを使うなら、セカンダリ側で作り直します
- 政府リージョンでは使えず、中華人民共和国でも提供されません
- Cortex Agentが再帰的に別のMCPサーバー経由で自分を呼ぶ構成は、最大10回の呼び出しで打ち切られます
他の接続方法との違い
手元のCSVファイルだけを分析したいなら、Snowflakeコネクタを使うまでもありません。ファイルをアップロードして集計する手順はClaude CSV分析の使い方にあります。データがすでにSnowflakeにあるなら接続、ファイルとして手元にあるだけならアップロード、が基準です。データがDatabricksにあるならDatabricks Genieコネクタが対応します。
このディレクトリConnector以外に、自前でMCPサーバーを立てる道もあります。Claude CodeからMCPで自社のPostgreSQLやMySQLに直接つなぐ構成は、読み取り専用ユーザーの設計から始める運用を含めてClaude CodeでMCPからデータベースに接続する方法にまとめています。PostgreSQL互換のNeonでは、Neon MCPサーバーで一時ブランチのマイグレーション検証を回す運用例もあります。
違いは、接続がclaude.aiアカウントに紐づくか、ローカルのMCP設定に紐づくかです。ディレクトリConnectorはアカウント単位なので、一度つなげばclaude.aiやClaude Codeから同じ接続を使えます。継続的にデータを触る定型業務をCoworkに任せる使い方はClaude Cowork活用事例で扱っています。
まとめ
Snowflakeコネクタで難しいのはClaude側の設定ではなく、Snowflake側でツールとロールを決める作業です。「読み取り専用のはず」で導入せず、管理者に登録ツールとread_onlyの値を確認してから接続します。Claudeは既定ロールで動くため、専用ロールの作成とDEFAULT_ROLEの設定が、見せたくないデータへの経路を塞ぐ実質的な手段になります。