MaxCompute-semantic 是面向 MaxCompute 和 AI Agent 的本地语义增强命令行工具,命令名为 mcs。它从 MaxCompute project 构建本地语义包,并把表结构、字段含义、JOIN 关系、UDF、业务指标、已验证 SQL 和查询记忆提供给 Claude Code、Codex、Qwen Code、Cursor 等 Agent 使用。Agent 写 SQL 前先读取语义包,再通过 mcs 完成 SQL 审查、成本预估和查询执行,从而减少猜表名、漏 JOIN 条件或误用指标口径的问题。
工具介绍
AI Agent 可以调用 MaxCompute,但默认不了解企业数仓中的表关系、业务指标、字段口径和历史查询经验。mcs 为 Agent 提供一个本地事实来源:
profile:
保存 MaxCompute endpoint、认证方式、计算 project、数据源范围和成本阈值。
语义包:
由
mcs build生成的本地 SQLite + Markdown 知识库,包含表、字段、分区、JOIN、UDF、指标和构建建议。Agent Skill:
通过
mcs skill install安装到本机 Agent,使 Agent 知道如何读取语义包、审查 SQL、预估成本和执行查询。查询记忆:
记录验证过的 SQL、失败模式和业务笔记,相似问题可以复用历史经验。
SQL 护栏:
提供 MaxCompute 方言审查、只读保护、成本门禁、同步或异步执行和结果分页。
使用场景
mcs 运行在本地环境中,profile、语义包和查询记忆默认保存在本地文件系统。它不是托管服务,不会替代 MaxCompute 权限体系,最终能访问哪些 project、schema、table 和 instance,仍由 MaxCompute 权限及 RAM 权限决定。
在以下场景推荐使用
mcs:已经使用 Claude Code、Codex、Qwen Code、Cursor 等 Agent,希望提升 MaxCompute SQL 生成准确率。
需要把业务指标、表含义、JOIN 关系和历史 SQL 沉淀为本地语义上下文。
需要在执行前做 SQL 审查、成本预估和只读保护。
以下场景建议改用其他工具:
只想快速通过 MCP Client 访问 MaxCompute 元数据和 SQL 工具,不希望本地构建语义包,建议优先使用MCMCP服务(Remote MCP Server)。
若需桌面端 SQL 开发、结果图表分析和 AI 数据探索一体化界面,建议优先使用MaxCompute AI数据探索客户端。
架构概览
下图展示 mcs 在 Agent、本地语义包和 MaxCompute 之间的工作流。Agent 通过 Skill 调用 mcs,mcs 负责读取本地语义包、执行 SQL 审查与成本预估,并在用户确认后访问 MaxCompute。查询被验证后,可以继续沉淀为本地查询记忆和业务指标。
前提条件
环境要求(本地安装)
Python 3.10及以上版本:使用
python3 --version确认版本。uv:运行
pip install uv安装。
MaxCompute 访问信息
可访问的 MaxCompute 项目,以及项目所在地域、endpoint。
认证凭证:AccessKey ID 和 Secret(在阿里云RAM控制台创建),或组织提供的 process auth 命令,需能在标准输出返回 STS 临时凭证 JSON。
权限与数据范围
对目标表的 SELECT 权限;如需管理 UDF 或执行写操作,还需相应 MaxCompute 权限。
提前规划数据源范围:需要纳入语义包的 project、schema 或 table 列表。
快速入门
安装 mcs
(推荐)使用 uv tool install 从 PyPI 安装
uv tool install maxcompute-semantic
mcs --versionAgent 协助安装
如果希望让 Agent 协助安装,可以让 Agent 先阅读安装指南,再逐步执行:
curl -fsSL https://raw.githubusercontent.com/aliyun/maxcompute-semantic/main/scripts/install.md安装指南要求 Agent 在执行远程 bootstrap 或最终安装命令前,先向用户展示即将执行的命令。
如果 ~/.local/bin 不在 PATH 中,安装完成后可能无法直接找到 mcs。可将下面配置加入当前 shell 配置文件:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc安装 Agent Skill
安装完成后,将 mcs 的 Skill 注册到本机 Agent:
mcs skill install --detect -g--detect 表示只安装到当前机器上已检测到的 Agent 平台。也可以使用:
mcs skill install --all -g该命令会把 Skill 安装到所有支持的平台。常见平台包括 Claude Code、Cursor、Codex、Gemini CLI、Qwen Code 和 OpenCode。
创建 profile 并绑定目录
交互式向导创建 profile
mcs profile create
mcs link bind <profile-name>mcs profile create会收集 endpoint、认证方式、project、数据源范围和成本阈值。交互流程中,数据源范围(Sources)建议明确指定 schema 和目标表。mcs link bind会把当前目录绑定到该 profile。后续在这个目录下运行mcs或让 Agent 调用mcs时,会自动解析到绑定的 profile。
脚本化创建 profile
脚本化创建 profile可先生成模板:
mcs profile spec-template > profile.yaml
mcs profile create --from-file @profile.yaml运行以下命令确认数据源范围已配置:
mcs profile show <profile-name> 如果 Sources 显示 (none yet),可以运行 mcs profile update <profile-name> 添加数据源,然后再执行构建。
构建语义包并诊断
创建 profile 后,构建本地语义包:
mcs build
mcs doctormcs build会根据 profile 中的数据源范围读取 MaxCompute 元数据,并生成本地语义包。mcs doctor会检查 profile、认证、MaxCompute 连通性、构建数据和 Skill 安装状态。
如果只想刷新已构建过的 profile,可以使用:
mcs build --refresh如果只想构建部分表,可以使用:
mcs build --tables table_a,table_b通过 Agent 提问
Skill 安装并构建语义包后,打开已安装 Skill 的 Agent(如 Claude Code),进入绑定了 profile 的目录,用自然语言提问,例如:
default schema 里有哪些表?Agent 会自动读取语义包,生成 SQL,执行审查和成本预估,确认安全后执行查询并返回结果。无需要手动运行 mcs 命令。
当查询结果确认正确后,可以让 Agent 记录已验证 SQL:
mcs memory verify \
--question "上个月订单 GMV 同比怎么样?" \
--sql "SELECT ..." \
--tables your_project.your_schema.orders后续遇到相似问题时,Agent 可以通过查询记忆召回历史 SQL 和相关说明。
功能参考
功能类别 | 功能项 |
Profile 与连接管理 | 交互式创建 profile、目录绑定、环境变量凭证、AK/process auth、连接诊断 |
语义包构建 | 扫描 schema、采样字段值、推断 JOIN 候选、发现 UDF、生成本地 SQLite + Markdown 语义包 |
Agent 接入 | 安装 Agent Skill,支持 Claude Code、Cursor、Codex、Gemini CLI、Qwen Code、OpenCode 等平台 |
SQL 审查与执行 | MaxCompute 方言审查、schema 检查、成本预估、只读保护、同步执行、异步提交/轮询/取数 |
查询记忆 | 记录已验证 SQL、失败 SQL、领域笔记,并通过 BM25 检索辅助后续查询 |
业务指标 | 定义 profile 级指标,供 Agent 生成 SQL 时复用统一口径 |
语义维护 | 将构建建议转为可审查 proposal,经确认后写入语义包 |
UDF 管理 | 列出、查看、搜索、创建、测试和删除 MaxCompute UDF |
诊断与升级 |
|
Profile 与连接管理
profile 是 mcs 的连接和语义上下文单位。一个 profile 通常对应一个业务分析场景,包含MaxCompute endpoint 或 Region、认证方式和凭证引用、默认计算project、数据源范围(project/schema/table)、成本确认阈值和阻断阈值。构建完成后,profile目录下还会保存语义包、查询记忆和 proposal 状态。
常用命令如下:
命令 | 说明 |
profile 管理 | |
| 交互式创建 profile |
| 查看 profile 配置 |
| 更新 profile |
| 列出本机 profile |
| 查看指定 profile 的 MaxCompute 身份 |
目录绑定 | |
| 将当前目录绑定到 profile(推荐) |
| 查看当前目录绑定状态 |
认证方式
mcs 支持 AK 和 process auth 两种 profile 认证配置:
AK:在 profile 中配置 AccessKey ID 和 AccessKey Secret。建议使用
${env:ALIBABA_CLOUD_ACCESS_KEY_ID}、${env:ALIBABA_CLOUD_ACCESS_KEY_SECRET}这类环境变量引用,避免把明文凭证写入文件。process auth:在 profile 中配置一个本地命令。
mcs需要访问 MaxCompute 时会执行该命令,并从标准输出读取 STS 临时凭证 JSON。process auth 的 profile 配置示例如下:
auth: type: process command: your-credential-helper --format sts-json timeout: 60其中,
command可以是任意符合组织规范的本地凭证命令,但必须在标准输出返回 JSON。JSON 字段使用 Alibaba Cloud STS AssumeRole 凭证格式:{ "AccessKeyId": "STS.xxxxx", "AccessKeySecret": "xxxxxx", "SecurityToken": "xxxxxx", "Expiration": "2026-07-01T12:00:00Z" }必填字段:
AccessKeyId、AccessKeySecret、SecurityToken可选字段:
Expiration
mcs也兼容access_key_id、access_key_secret、security_token、expiration这类 snake_case 字段名。
不要把上述 JSON 输出写入 profile 或提交到仓库,profile 中只保存生成凭证的命令。
语义包构建与维护
mcs build 是需要定期维护的本地构建操作。它会读取 profile 中声明的数据源范围,构建可供 Agent 读取的本地语义包。默认构建内容包括:
表、字段、分区等 schema 信息。
字段值采样和枚举值提示。
JOIN 候选关系。
UDF 信息。
表级和字段级语义建议。
已验证 SQL 和相关查询记忆索引。
常用构建参数如下:
参数 | 说明 |
| 增量刷新,跳过未变化的表 |
| 忽略已有状态,重新构建 |
| 只构建指定表,多个表用英文逗号分隔 |
| 跳过字段值采样 |
| 跳过 JOIN 推断 |
| 跳过 UDF 发现 |
| 设置语义 profiling 深度,可选 none、light、deep |
| 设置 profiling/deep validation 的费用预算 |
构建后可以查看当前语义包:
mcs show
mcs show --table <table-name>
mcs status --tables构建完成后,mcs 可能会对表描述、字段含义等生成语义建议,建议通过 proposal 流程审查后再写入语义包:
mcs package propose --from-suggestions
mcs package list-proposals
mcs package show-proposal <id>
mcs package apply <id>不要把未经确认的机器建议直接当成业务口径。表级 ai_context、字段描述、指标定义和字段角色应由熟悉业务的人或 Agent 结合业务上下文审查后再应用。
Agent工作方式
安装 Skill 后,Agent 会根据任务加载不同的运行时 workflow。例如:
用户意图 | Agent 应加载的 workflow |
回答数据问题、写 SQL、查询前检查 schema |
|
创建、绑定、编辑或诊断 profile |
|
构建或刷新语义包 |
|
审查并应用语义 proposal |
|
记录或召回已验证/失败 SQL |
|
管理 MaxCompute UDF |
|
回答数据问题时,Agent 不会主动运行 mcs build 或 mcs package propose。构建和 proposal是维护操作,只在用户明确要求时才执行。
如果当前没有语义包,Agent 会自动改用实时元数据模式:通过 mcs meta 读取 MaxCompute元数据,再完成 SQL 审查、成本预估和查询执行。不需要提前构建语义包也能正常提问,只是回答质量会低于有语义包时。
SQL 审查、成本预估与执行
mcs sql 命令提供从 SQL 审查到执行的完整链路:
命令 | 说明 |
| 执行 MaxCompute 方言、schema、projection、tier 等检查 |
| 预估 SQL 执行成本 |
| 同步执行 SQL,默认等待 30 秒 |
| 异步提交 SQL 并返回 instance ID |
| 等待实例结束 |
| 读取已完成实例的结果 |
| 查看实例状态 |
| 取消实例 |
默认情况下,mcs sql execute 和 mcs sql submit 是只读的,会拒绝 INSERT、UPDATE、DELETE、MERGE、CREATE、DROP、ALTER、TRUNCATE、GRANT、REVOKE 等写操作。只有用户明确要求写操作时,才应使用 --allow-write。
成本门禁会在提交前执行:
成本低于确认阈值:允许执行。
成本超过确认阈值:交互式终端会要求用户确认;非交互环境会拒绝并返回需要确认的信息。
成本超过阻断阈值:直接拒绝执行。
执行耗时较长的分析查询时,建议使用异步流程:
mcs -f json sql submit -y '<SQL>'
mcs -f json sql wait <instance_id>
mcs -f json sql result <instance_id>同步执行超时时,查询不会被取消。命令会返回 instance_id 和下一步命令,后续应继续使用 mcs sql wait/mcs sql result 获取结果,不要重复提交同一 SQL。
查询记忆与业务指标
查询结果经用户确认正确后,可以记录为查询记忆:
mcs memory verify --question "<自然语言问题>" --sql '<SQL>' --tables table_a,table_b失败的查询也可以记录,用于避免重复错误:
mcs memory fail --question "<自然语言问题>" --sql '<SQL>' --error-msg '<错误信息>' --remediation '<修复方式>'后续可通过下面命令召回:
mcs memory recall "<关键词或问题>"对于有固定业务口径的指标,建议使用 mcs metric 维护 profile 级指标:
mcs metric add gmv \
--expression "SUM(pay_amount)" \
--description "成交金额" \
--ai-context "GMV 使用订单支付金额求和,排除取消订单。"Agent 生成 SQL 前应优先检查是否已有同名或相近指标,避免重复实现不同口径。
安全与隐私
本地数据保护
profile、语义包和查询记忆默认保存在本地文件系统,请按企业数据安全要求管理这些文件。不要将以下内容提交到公开仓库:profile 配置、语义包、查询结果、Logview、错误日志、包含业务敏感信息的 SQL。
凭证安全
建议在 profile 中使用环境变量引用 AK,不要把 AccessKey 明文写入文件。
使用 process auth 时,profile 中只保存凭证命令;该命令输出的 STS 临时凭证同样属于敏感信息,不要写入日志、文档或代码仓库。
权限与操作边界
为 mcs 使用的 MaxCompute 身份配置最小必要权限。
mcs build 只读取 profile 中声明的数据源范围;如启用采样,采样也只作用于这些表。
写操作默认被拒绝。只有用户明确要求时,才使用
--allow-write。成本门禁不能替代人工判断。大表扫描、跨 project JOIN 或无分区过滤的查询,应先缩小范围或改用异步流程。
相关工具对比
工具 | 形态 | 典型场景 |
托管 MCP 服务 | 在 MCP Client 中直接访问 MaxCompute 元数据、SQL 和表管理工具 | |
桌面应用 | SQL 开发、数据管理、结果图表分析和内置 AI 数据探索 | |
MaxCompute CLI( | 阿里云 CLI 命令集 | 在命令行、Shell 脚本或 Agent 中以结构化输出访问 MaxCompute 元数据、SQL、作业和数据操作 |
MaxCompute-semantic/ | 本地 CLI + Agent Skill | 为外部 Agent 构建本地语义包、查询记忆和 SQL 护栏 |
命令行工具 | 运维操作、脚本化 MaxCompute 命令 | |
MaxCompute Studio | IntelliJ IDEA 插件 | SQL/UDF 开发 |
如果不确定选择哪种方式:
希望在 Claude Code、Codex、Qwen Code、Cursor 等 Agent 中提升 SQL 生成质量,选择
mcs。希望不做本地语义包构建,直接通过 MCP 工具访问 MaxCompute,选择 Remote MCP Server。
希望通过阿里云 CLI 在命令行、Shell 脚本或 Agent 中直接操作 MaxCompute,并获得结构化输出,选择 MaxCompute CLI(
aliyun maxc)。希望使用桌面应用完成 SQL 开发和可视化分析,选择 MaxCompute AI 数据探索客户端。
常见问题
安装后找不到 mcs 命令
通常是 uv tool install 的脚本目录不在 PATH 中。macOS/Linux 默认位置一般为 ~/.local/bin。可执行:
export PATH="$HOME/.local/bin:$PATH"
mcs --version确认可用后,再把 PATH 配置写入 shell 配置文件。
profile 创建后连接失败
请依次检查:
Endpoint 与 MaxCompute project 所在 Region 是否匹配。
AK 是否有效;如果使用 process auth,确认凭证命令可执行,并且标准输出是包含 AccessKeyId、AccessKeySecret、SecurityToken 的 STS 临时凭证 JSON。
当前网络是否可以访问对应 MaxCompute endpoint。
当前身份是否有目标 project 和表的访问权限。
如果使用环境变量引用凭证,变量名和值是否在当前 shell 中可见。
可以运行:
mcs doctor
mcs profile whoami <profile-name>Agent 回答问题时提示没有语义包
说明当前 profile 尚未构建或当前目录没有绑定到正确 profile。可以先检查:
mcs link status
mcs show
mcs status如果用户明确希望构建语义包,再执行 mcs build。
回答单次数据问题时,不建议让 Agent 自动运行 mcs build。没有语义包时,Agent 可以通过 mcs meta 走 cold-start 查询流程。
SQL写操作被拒绝
mcs sql execute 和 mcs sql submit 默认只允许只读查询。如果用户确实要执行写 SQL,需要显式使用:
mcs sql execute --allow-write '<SQL>'执行前请确认目标 project、schema、table、SQL 影响范围和回滚方案。
查询成本过高被阻断
请先缩小查询范围,例如:
增加分区过滤。
增加更明确的 WHERE 条件。
使用预览 LIMIT。
先按小范围样本验证 SQL。
对长时间分析查询使用异步流程。
成本超过 profile 的阻断阈值时,mcs 会拒绝提交查询。需要调整 SQL 或由 profile 管理者修改成本阈值。
构建语义包耗时较长
语义包构建会读取元数据、采样字段值并推断 JOIN 候选,数据源范围较大时可能耗时较长。可以使用:
mcs build --tables table_a,table_b
mcs build --no-sampling
mcs build --no-joins也可以先构建核心业务表,待验证效果后再扩大范围。