2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Snowflake マネージド MCP を Visual Studio Code (VS Code) から利用するまでの手順

2
Posted at

概要

Snowflake マネージド MCP を Visual Studio Code (VS Code) から利用するまでの手順を紹介します。

手順

データベースとスキーマを準備

検証用のデータベースとスキーマを作成します。

USE ROLE ACCOUNTADMIN;

CREATE DATABASE IF NOT EXISTS MCP_01;
CREATE SCHEMA IF NOT EXISTS MCP_01.SCHEMA_01;

USE DATABASE MCP_01;
USE SCHEMA SCHEMA_01;

image.png

マネージド MCP サーバーを作成

マネージド MCP サーバーを作成します。ここでは、VS Code からの参照用途に限定するため、SQL 実行のみ可能なツール(SYSTEM_EXECUTE_SQL)を定義しています。

CREATE OR REPLACE MCP SERVER COPILOT_MCP_01
  FROM SPECIFICATION $$
    tools:
      - title: "SQL Execution Tool"
        name: "sql_exec_tool"
        type: "SYSTEM_EXECUTE_SQL"
        description: "VS Code Copilot schema/DDL lookup"
  $$;

image.png

PAT トークンを取得

Snowflake で PAT を利用する場合、ネットワークポリシーの設定が必要です。まずネットワークルールとネットワークポリシーを作成します。

-- 本番環境では IP 制限の実施が必須
CREATE OR REPLACE NETWORK RULE copilot_pat_rule
  MODE = INGRESS
  TYPE = IPV4
  VALUE_LIST = ('0.0.0.0/0');

CREATE OR REPLACE NETWORK POLICY copilot_pat_np
  ALLOWED_NETWORK_RULE_LIST = (copilot_pat_rule);

作成したネットワークポリシーを対象ユーザーに設定します。

ALTER USER {user_name}
    SET NETWORK_POLICY = copilot_pat_np;

本番環境では IP 制限を実施してください。

続いて、PAT を発行します。

ALTER USER ADD PROGRAMMATIC ACCESS TOKEN COPILOT_TOKEN
    -- 本番環境ではロールを固定することを検討
    -- ROLE_RESTRICTION = '<string_literal>'

    -- 有効期限を設定
    DAYS_TO_EXPIRY = 7;

image.png

URL を取得

作成した MCP サーバーの URL を控えます。以下では、データベース名・スキーマ名・MCP サーバー名をセッション変数に設定し、URL を生成しています。

-- 変数(セッション変数)をセット
SET DB_NAME     = '';
SET SCHEMA_NAME = '';
SET MCP_SERVER  = '';

-- URL 生成
SELECT
    CURRENT_ORGANIZATION_NAME() 
    || '-' 
    || CURRENT_ACCOUNT_NAME()
    || '.snowflakecomputing.com'
    || '/api/v2'
    || '/databases/' || $DB_NAME
    || '/schemas/' || $SCHEMA_NAME
    || '/mcp-servers/' || $MCP_SERVER
    AS mcp_server_url;

image.png

コマンドでの動作確認

curl で MCP サーバーが正常に呼び出せることを確認します。ここでは tools/callsql_exec_tool を呼び出し、SELECT CURRENT_TIMESTAMP() を実行しています。

curl -sS -X POST \
  "https://{mcp_server_url}" \
  -H "Authorization: Bearer {pat_token}" \
  -H "Content-Type: application/json" \
  --data '{
    "jsonrpc":"2.0",
    "id":2,
    "method":"tools/call",
    "params":{
      "name":"sql_exec_tool",
      "arguments":{"sql":"SELECT CURRENT_TIMESTAMP()"}
    }
  }'

レスポンス例は以下です。

{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"query_id\":\"01c28250-0000-cfcc-0001-13fe000861d2\",\"result_set\":{\"data\":[[\"1771473610.901000000\"]],\"resultSetMetaData\":{\"format\":\"jsonv2\",\"numRows\":1,\"partition\":0,\"partitionInfo\":[{\"rowCount\":1,\"uncompressedSize\":24}],\"rowType\":[{\"length\":0,\"name\":\"CURRENT_TIMESTAMP()\",\"nullable\":false,\"precision\":0,\"scale\":9,\"type\":\"timestamp_ltz\"}]},\"statementHandle\":\"01c28250-0000-cfcc-0001-13fe000861d2\"}}"
      }
    ],
    "isError": false
  }
}

image.png

VS Code での動作確認

.vscode/mcp.json ファイルに以下を記述します。ここでは、入力ダイアログで MCP URL とアクセストークン(PAT または OAuth)を受け取り、HTTP ヘッダーに Authorization: Bearer ... を設定する構成としています。

{
  "inputs": [
    {
      "type": "promptString",
      "id": "snowflakeMcpUrl",
      "description": "Snowflake MCP URL (e.g. <host>/mcp)"
    },
    {
      "type": "promptString",
      "id": "snowflakeAccessToken",
      "description": "Snowflake access token (PAT or OAuth access token)",
      "password": true
    }
  ],
  "servers": {
    "snowflakeMcpSqlExec": {
      "type": "http",
      "url": "https://${input:snowflakeMcpUrl}",
      "headers": {
        "Authorization": "Bearer ${input:snowflakeAccessToken}"
      }
    }
  }
}

image.png

サーバー名の上にある Start を選択します。

image.png

上部のウィンドウで Snowflake マネージド MCP の URL を入力し、Enter を入力します。

image.png

PAT を入力します。

image.png

VS Code の Chat ウィンドウで Add Context を選択します。

image.png

Tools を選択します。

image.png

作成した MCP を選択します。

image.png

データベース一覧を提示して と入力します。

image.png

提示された SQL の妥当性を確認し、Allow を選択します。

image.png

データベース一覧に基づいた回答が実施されることを確認します。

image.png

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?