Claude + StarRocks MCP
在对象存储上搭建一个小型 StarRocks 集群,加载真实的公开数据集,并通过Claude用自然语言提问。StarRocks MCP 服务器Claude 自动发现 schema,编写 SQL(包括多表连接),并渲染图表。所有数据存储在对象存储中,运行于MinIO。
本教程涵盖以下内容:
- 以共享数据模式运行 StarRocks(1 FE + 1 CN)以及在 Docker 中运行 MinIO
- 创建 S3(MinIO)存储卷,实现存储与计算分离
- 加载 Olist 巴西电商数据集(8 张关联表)
- 将 StarRocks 和 AIStor MCP 服务器接入 Claude
- 向 Claude 提出自然语言问题并渲染图表
该数据集为Olist 巴西电商数据集 —— 包含 8 张关联表,适合真正复杂的连接查询。所有内容均可运行在1 FE + 1 CN,笔记本电脑或免费云服务层级上。
本文档包含大量信息,结构安排为:开头呈现分步操作内容,参考资料 置于末尾。这样您可以先搭建环境并开始提问,之后再阅读相关背景详情。
前提条件
Docker
- Docker(Docker Desktop 或 engine + compose)
- 为 Docker 分配约 4 GB 内存
MySQL 客户端
需要一个 MySQL 客户端(例如 mysql)来运行 SQL 文件。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 构建版本,否则可能出现较慢的模拟运行。
术语
MCP
模型上下文协议(MCP)是一种开放协议,允许 Claude 等 AI 助手发现并调用外部工具。本教程连接了两个 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 展示的所有内容都是基于实时模式推理得出的,而非从检出的材料中召回的。
启动 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 尚未报告健康状态,请等待几秒钟后再次检查——它是最后启动的服务。
在 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,允许两个 MCP 服务器(aistor 和 mcp-server-starrocks),然后让 Claude 列出数据库并描述 olist 数据库中的模式。
加载数据
使用以下方式从 Kaggle 下载 Olist CSV 文件: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 直接向 CN 发送 Stream Load,避免 starrocks-cn 主机名重定向(无需编辑 /etc/hosts / 无需 sudo)。脚本在末尾打印行数检查结果。
将 MCP 服务器连接到 Claude
cp .env.example .env
.mcp.json 定义了两个 MCP 服务器 — mcp-server-starrocks(通过 uv 从 GitHub 运行,因此无需手动安装任何内容)和 aistor(通过 Docker 运行)— 两者均读取 .env