Claude + StarRocks MCP
小規模なStarRocksクラスターをオブジェクトストレージ上に構築し、実際の公開データセットを読み込み、Claudeを通じて平易な英語で質問できますStarRocks MCPサーバー。Claudeはスキーマを検出し、SQL(複数テーブルの結合を含む)を記述し、チャートを描画します。すべてのデータはMinIOのオブジェクトストレージに保存されます。
このチュートリアルの内容:
- StarRocksを共有データモード(FE 1台 + CN 1台)で実行し、MinIOをDockerで起動する
- ストレージとコンピュートを分離するためのS3(MinIO)ストレージボリュームを作成する
- Olistブラジルeコマースデータセット(8つの関連テーブル)を読み込む
- StarRocksおよびAIStor MCPサーバーをClaudeに接続する
- Claudeに平易な英語で質問し、チャートを描画する
データセットはOlistブラジルeコマースセット(8つの関連テーブル、複雑な結合に適している)です。すべてはFE 1台 + CN 1台上で、ノートパソコンまたは無料のクラウド枠で動作します。
このドキュメントには多くの情報が含まれており、ステップバイステップの内容が最初に、参考資料が最後に記載されています。これは、まず環境を構築して質問を始め、その後で補足的な詳細を読めるようにするためです。
前提条件
Docker
- Docker(Docker DesktopまたはエンジンとCompose)
- Dockerに割り当てられた約4GBのRAM
MySQLクライアント
SQLファイルを実行するためのMySQLクライアント(例:mysql)。これはStarRocks FEサーバーによって提供されるため、このガイドのすべてのSQLコマンドはdocker compose execで実行します。
uv
uvはStarRocks MCPサーバーを実行します。
Claude CodeまたはClaude Desktop
Claude CodeまたはClaude DesktopがMCPサーバーを接続します。
このデモにはClaude Codeを使用した手順が含まれています。他のLLMもMCPサーバーで動作しますが、このデモはClaude Codeでのみテストされています。他のLLMでの使用経験についてはIssueを開いてお知らせください。
Olistデータセット
Olistデータセットはkagglehubでデータを読み込む際に自動的にダウンロードされます(Kaggleアカウント不要):https://www.kaggle.com/datasets/olistbr/brazilian-ecommerce。
Apple Silicon:StarRocksはAVX2(x86)に依存しています。ARMビルドを使用するか、エミュレーションが遅くなることを想定してください。
MinIO AIStor ライセンス
Free Tier ライセンスを取得する手順は、デモリポジトリをクローンした後に説明します。
用語集
MCP
モデルコンテキストプロトコル(MCP)は、ClaudeなどのAIアシスタントが外部ツールを検出して呼び出せるようにするオープンプロトコルです。このチュートリアルでは、2つのMCPサーバーを接続します:
- StarRocks MCPサーバー (
mcp-server-starrocks) は、ClaudeがStarRocksのスキーマを読み取り、SQLを実行できるツールを公開します。 - AIStor MCPサーバー (
aistor) は、Claudeがデータの保存先であるMinIOオブジェクトストレージを操作できるツールを公開します。たとえば、バケットの参照やStarRocksが書き込んだオブジェクトの検査などが可能です。
FE
フロントエンドノードは、メタデータ管理、クライアント接続管理、クエリプランニング、およびクエリスケジューリングを担当します。
CN
コンピュートノードは、共有データデプロイメントにおけるクエリプランの実行を担当します。
前提条件のインストール
uv
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows(PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# またはHomebrew / pipx / pip経由
brew install uv
# pipx install uv
# pip install uv
他のオプションについては、公式 uv インストールガイド を参照してください。インストール後、PATH に追加されていることを確認してください:
uv --version
Docker
https://www.docker.com/get-started/
Claude Code
https://claude.com/product/claude-code
デモリポジトリのクローン
クローン https://github.com/StarRocks/demo:
gh repo clone StarRocks/demo
または
git clone git@github.com:StarRocks/demo.git
このディレクトリには、作業を開始するための最低限の内容のみが含まれています。意図的に、いかなる 定型クエリ、期待される回答、およびウォークスルーは含まれていません。これにより、Claudeが示すすべての内容が、チェックアウト内の資料から想起されたものではなく、ライブスキーマから推論されたものになります。
MinIO AIStor ライセンスの取得
MinIO AIStor の実行にはライセンスが必要です。既存のライセンスを使用するか、新しい MinIO AIStor Free Tier ライセンスをリクエストできます。
新しい MinIO AIStor Free Tier ライセンスをリクエストするには、MinIO AIStor の価格ページにアクセスし、Free ティアの Get Started を選択して無料ライセンスを取得します。Free Tier ライセンスでは、1 つ以上のドライブを持つ単一のコンピューティングリソース上で MinIO AIStor を実行できます。
ライセンスファイルを minio.license という名前で、docker-compose.yml ファイルと同じディレクトリに保存します。Docker Compose ファイルは minio.license を MinIO AIStor コンテナにマウントします。有効なライセンスがない場合、MinIO AIStor は起動しますが、すべての S3 操作を拒否します。
このチュートリアルでは、ローカルにクローンした StarRocks/demo リポジトリの demo/documentation-samples/MCP ディレクトリです。
StarRocksとMinIOの起動
cd demo/documentation-samples/MCP
docker compose up --detach --wait --wait-timeout 120
フロントエンド(FE)、コンピュートノード(CN)、およびMinIOがローカルで起動します。
MinIO、FE、およびCNサービスの正常なステータスを確認します:
docker compose ps -a --format "table {{.Service}}\t{{.Status}}"
CNが正常と報告されない場合は、数秒待ってから再度確認してください。CNは最後に起動するサービスです。
MinIOにバケットを作成する
MinIOコンソールを http://localhost:9001 で開き(ログイン miniouser / M!n10R0cks)、バケットの追加 をクリックして、バケット my-starrocks-bucket を作成します。
ストレージボリュームの作成
ファイル storage_volume.sql は、前のステップで作成したバケットに StarRocks ストレージボリュームを作成し、それをデフォルトとして設定します。ファイルの内容はこのチュートリアルの最後で詳しく説明します。今はこれを実行してください:
docker compose exec -T starrocks-fe \
mysql -P9030 -h127.0.0.1 -uroot < storage_volume.sql
これは成功する必要があります(かつボリュームがデフォルトである必要があります)。CREATE TABLE の前に確認してください。
*************************** 1. row ***************************
Name: s3_volume
Type: S3
IsDefault: true
Location: s3://my-starrocks-bucket/
Params: {"aws.s3.access_key":"******","aws.s3.secret_key":"******","aws.s3.endpoint":"minio:9000","aws.s3.region":"us-east-1","aws.s3.use_instance_profile":"false","aws.s3.use_web_identity_token_file":"false","aws.s3.use_aws_sdk_default_behavior":"false"}
Enabled: true
Comment:
テーブルを作成する
docker compose exec -T starrocks-fe \
mysql -h127.0.0.1 -P9030 -uroot < olist_schema.sql
The specified bucket does not exist というエラーが表示された場合、前のステップの一部をスキップした可能性があります。MinIO UI を開き、上記で指定したバケットを作成してください。
これは MCP サーバーを試す良い機会です。現在のディレクトリから Claude Code を起動し、2 つの MCP サーバー(aistor と mcp-server-starrocks)を許可してから、Claude に olist DB のデータベース一覧を表示してスキーマを説明するよう依頼してください。
データを読み込む
Kaggle から Olist の CSV を kagglehub でダウンロードします kagglehub — 匿名で利用可能、Kaggle アカウントや API トークンは不要です。ファイルをローカルにキャッシュし、保存先フォルダを表示します。
データをダウンロードし、保存先フォルダを CSV_DIR として取得します。kagglehub はバージョン警告を stdout に出力するため、tail -n1 で最終行(パス)を取得してください:
export CSV_DIR="$(uv run --with "kagglehub==0.3.12" python \
-c "import kagglehub; print(kagglehub.dataset_download('olistbr/brazilian-ecommerce'))" \
| tail -n1)"
echo "$CSV_DIR" # sanity check: should be a .../brazilian-ecommerce/versions/N path
kagglehub==0.3.12 のピンは意図的なものです:新しいリリース(1.0.x)は kagglesdk ビルドを取得し、インポートに失敗します(ModuleNotFoundError: kagglesdk.competitions.legacy)。0.3.12 は公開データセットを匿名でダウンロードでき、正常に動作します。kagglehub はファイルをキャッシュするため、再実行のコストは低いです。
次にローダーを実行します(CSV_DIR はすでにエクスポートされています):
FE_HTTP_PORT=8040 bash load_olist.sh
FE_HTTP_PORT=8040 は Stream Load を CN に直接送信し、starrocks-cn ホスト名のリダイレクト(/etc/hosts の編集や sudo 不要)を回避します。スクリプトは最後に行数チェックを出力します。
MCP サーバーを Claude に接続する
cp .env.example .env
.mcp.json は 2 つの MCP サーバーを定義しています — mcp-server-starrocks(uv 経由で GitHub から実行されるため、手動でインストールするものはありません)と aistor(Docker 経由で実行)— どちらも .env を読み込みます。このディレクトリから Claude Code を起動するか、同じブロックを Claude Desktop の設定に追加してください。
初回起動時にサーバーを承認してください。 .mcp.json からのプロジェクトスコープのサーバーは ありません 自動的に信頼されません — Claude Code は 「新しい MCP サーバーが見つかりました — 承認しますか?」 初回起動時にプロンプトを表示します。承認してください。(事前承認は .claude/settings.local.json に保存されており、gitignore されているため、新規クローン時には存在しません — これは想定内です。プロンプトで承認すると再作成されます。)
/mcp で接続を確認してください。 Claude Code 内で /mcp を実行し、mcp-server-starrocks と aistor の両方が 接続済み と表示されていることを確認してください。これが信頼できるステータス確認方法です — サーバーが接続されていない場合、どのように尋ねてもツールは読み込まれません。
初回起動は時間がかかります。 最初の uv run はサーバーの依存関係(pyarrow、kaleido など、約 115 MB)をダウンロードするため、StarRocks サーバーの初回起動には数分かかる場合があります。2 回目以降の起動は高速です。
/mcp で両方のサーバーが接続済みと表示されたら、ツールが利用可能であることを確認してください(例:*「StarRocks MCP サーバーはどのようなツールを提供していますか?」*と尋ねてみてください)。
StarRocks クラスターは root(パスワードなし)の localhost:9030、データベース olist で MySQL プロトコル経由でアクセスできます。
質問する
データについて平易な英語で Claude に質問してください — まず全体像を把握させるところから始めましょう(例:「このデータベースにはどのようなテーブルがあり、それらはどのように関連していますか?」)、そこから探索を広げてください。Claude はライブスキーマを確認し、SQL を自分で記述します。
おすすめの質問
これらはデモ動画で質問された内容を順番に並べたものです。各質問は前の質問を踏まえて構成されています。まず最初の質問から始めてClaudeに状況を把握させ、順番に進めてください:
- どんなデータベースとテーブルがありますか?
- これらのテーブルはどのように関連していますか?
- このデータは実際にどこに保存されていますか?
- 顧客の州別に注文をプロットしてください。
- 遠くに配送するほどコストがかかりますか?
- 重量と距離を分けるために、キロあたりの運賃を示す2本目の線を追加してください。
- そのクエリはどのように構築しましたか?
- 配送の遅延はレビューに悪影響を与えていますか?
- 定型回答を使っていますか、それともすべての数値はライブテーブルから取得されましたか?
チャート: でインタラクティブなチャートをリクエストすると、HTML StarRocks MCPサーバーがそれをDEMO_Output/に書き込み(STARROCKS_CHART_OUTPUT_DIRで.envに設定)、静的プレビューがインラインで表示されます。HTMLファイルをブラウザで開くとホバー/ズーム/パンが可能です。
トラブルシューティング
- StarRocks MCPツールが読み込まれない/サーバーが「接続中のまま」: プロジェクトサーバーが承認されていませんでした。
/mcpを実行してください。もし接続済みになっていない場合は、このディレクトリからClaude Codeを再起動し、*「新しいMCPサーバーが見つかりました — 承認しますか?」*プロンプトを承認してください(または"enabledMcpjsonServers": ["mcp-server-starrocks", "aistor"]を.claude/settings.local.jsonに追加してください)。サーバーを別途インストールする必要は不要ありません。.mcp.jsonはuv経由でGitHubから実行されます。 - 初回起動には数分かかります: 最初の
uv runでサーバーの依存関係(約115 MB)がダウンロードされます。これは初回のみ発生する想定された動作であり、失敗ではありません。 mysqlクライアントがAuthentication plugin 'mysql_native_password' cannot be loadedで失敗する: StarRocksの問題ではなく、Homebrewのmysqlクライアントの特性によるものです。代わりにコンテナ経由でクエリを実行してください:docker compose exec -T starrocks-fe mysql -h127.0.0.1 -P9030 -uroot -e "SHOW DATABASES;"。CREATE TABLEがハング/タイムアウトする: CNのAWS SDKがEC2メタデータサービスを探索しています。composeファイルはすでにstarrocks-cnにAWS_EC2_METADATA_DISABLED=trueを設定しています。独自のcomposeファイルを使用する場合は追加してください。- Stream Loadのリダイレクトエラー:
FE_HTTP_PORT=8040を使用して(上記のように)CNに直接POSTするか、127.0.0.1 starrocks-cnを/etc/hostsに追加してください。 order_reviewsが行を拒否する: フリーテキストのコメント列に改行が含まれています。load_olist.shに記載されているLEANバリアントを使用してください。
まとめ
このチュートリアルでは以下を実施しました:
- DockerにStarRocksの共有データ構成(FE×1 + CN×1)とMinIOをデプロイした
- S3(MinIO)ストレージボリュームを作成し、デフォルトとして設定した
- Olist Brazilian E-Commerceデータセット(8つの関連テーブル)を読み込んだ
- StarRocksとAIStor MCPサーバーをClaudeに接続しました
- Claudeに平易な英語で質問し、スキーマの探索、SQLの記述、チャートのレンダリングを自動で行わせました
ビルド/セットアップ資料(ナレーション付きウォークスルーおよびビデオスクリプト)は、この環境に定型回答が混入しないよう別途管理されています:
- StarRocks MCPサーバー: https://github.com/StarRocks/mcp-server-starrocks
このリポジトリの内容
デモファイルは documentation-samples/MCP ディレクトリに格納されています(StarRocks/demo リポジトリ内):
| ファイル | 内容 |
|---|---|
CLAUDE.md | Claudeコードへの指示。作業内容を明示し、外部情報ではなくスキーマに依拠するよう指定しています。このファイルは必ずお読みください。 |
.claude/settings.json | 内容は "autoMemoryEnabled": false です。前回セッションで質問した内容(および回答)をClaudeが記憶しないようにするためのものです。不要であれば削除しても構いません。作者の質問が実験に影響しないよう含めています。 |
docker-compose.yml | StarRocksの共有データクイックスタート(FE×1 + CN×1 + MinIO)。ラップトップ/Docker向けにパッチ済み。 |
storage_volume.sql | S3(MinIO)ストレージボリュームを作成し、デフォルトとして設定します。 |
olist_schema.sql | Olistテーブル8件(+オプション1件)のDDL。 |
load_olist.sh | OlistのCSVをStream Loadで取り込み、行数チェックを実施します。 |
.mcp.json | StarRocksとAIStor MCPサーバーをClaudeに接続します。 |
.env.example | 認証情報/エンドポイントのテンプレート。cp を .env にコピーし、必要に応じて編集してください。 |
storage_volume.sql に関する注意事項
storage_volume.sql は2つの処理を行います:タイムアウトを延長し、ストレージボリュームを作成して有効化します。
まず、タブレット作成のタイムアウトを延長し、ストレージボリュームを作成します:
-- デフォルトは10秒で、オブジェクトストアのタブレット作成には短すぎます
ADMIN SET FRONTEND CONFIG ('tablet_create_timeout_second'='60');
CREATE STORAGE VOLUME s3_volume
TYPE = S3
LOCATIONS = ("s3://my-starrocks-bucket/")
PROPERTIES (
"enabled" = "true",
"aws.s3.endpoint" = "minio:9000",
"aws.s3.access_key" = "AAAAAAAAAAAAAAAAAAAA",
"aws.s3.secret_key" = "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
"aws.s3.use_instance_profile" = "false",
"aws.s3.use_aws_sdk_default_behavior" = "false"
);
次に、新しいストレージボリュームをデフォルトとして設定し、その詳細を表示します:
SET s3_volume AS DEFAULT STORAGE VOLUME; -- REQUIRED before CREATE DATABASE/TABLE
DESC STORAGE VOLUME s3_volume\G -- verify: enabled=true, IsDefault=true
詳細情報
- StarRocks共有データクイックスタート — shared-data
- StarRocks MCPサーバー — https://github.com/StarRocks/mcp-server-starrocks
- AIStor MCPサーバー — https://github.com/minio/mcp-server-aistor
- Olistデータセット — https://www.kaggle.com/datasets/olistbr/brazilian-ecommerce
クレジット&ライセンス
- Olist Brazilian E-Commerce Kaggle経由のデータセット、ライセンス:CC BY-NC-SA 4.0(非商用) — 教育目的のデモとして使用。クレジットはOlistに帰属します。商用再利用の前に利用規約をご確認ください。
- StarRocksおよびStarRocks MCPサーバーはオープンソースです(Apache-2.0 /プロジェクトライセンス)。
- MinIOおよび
mcp-server-aistor© MinIO, Inc.