关于 carto-develop-app
carto-develop-app 是通过提示生成 CARTO 与 deck.gl 地图应用的命令行技能。它指导选择框架、认证方式和数据形态,并基于 CARTO 与 deck.gl 示例搭建应用;脚手架生成需要 Shell 和开发环境。
主要功能
- 01指导选择应用类型和框架
- 02选择认证与数据模式
- 03组装地图图层和组件
- 04支持筛选器、输入项与图例
- 05可添加嵌入式地图 Agent
适用场景
- 01搭建 CARTO 地图应用脚手架
- 02使用 deck.gl 构建空间仪表盘
- 03选择应用认证模式
- 04为嵌入式地图添加 Agent
MCP 相关
OAuth MCP 会话可创建令牌、管理 OAuth/M2M 客户端,并发现地图或工作流 ID。应用脚手架生成和运行需要 Shell;没有 MCP 工具可以生成应用。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ cartodb/ agent-skills --skill carto-develop-app安装后在 Claude Code 中输入/carto-develop-app确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/agentic-variant.mdauth-hosted.mdauth-m2m.mdauth-private-oauth.mdauth-private-sso.mdauth-public-token.mdbasemap-and-view.mddata-sources.mddesign-and-theming.mdfetchmap.mdfilters.mdinputs-and-parameters.mdlayers.mdlegend.mdscaffold-react.mdscaffold-vanilla.mdscaffold-vue-angular.mdstorymap.mdwidgets.mdworkflows-and-sql.mdreferences/recipes/chat-with-map.mdfetchmap-loader.mdparameterized-query.mdraster-temperature.mdreact-h3-aggregation.mdreact-private-app-oauth.mdreact-private-app-sso.mdvanilla-points-with-widgets.md详细介绍
carto-develop-app
根据提示词生成可运行的 CARTO + deck.gl 应用。确定四项选择——应用类型、框架、认证模式、数据形态——然后组装图层、组件、筛选器、输入项、图例,以及(可选的)嵌入式地图 Agent。
应用遵循 CartoDB/deck.gl-examples 蓝图。图层来自 @deck.gl/carto;数据源、组件、筛选器、fetchMap、query() 来自 @carto/api-client(数据源在 v0.4.0 中已从 @deck.gl/carto 移出——不要从那里导入)。
访问方式。 这是 CLI 路径技能:搭建和运行应用需要真实的 shell 和开发环境(npm、Vite),而且没有 MCP 工具可以生成应用,因此无法在沙盒聊天主机(Claude.ai、ChatGPT)上运行。只有凭证和发现步骤有对应的 MCP 工具:通过 OAuth MCP 会话,使用
manage_api_access_tokens创建令牌,使用manage_oauth_clients创建 OAuth/M2M 客户端,并使用read_maps/read_workflows发现地图/工作流 ID。其他所有操作都需要 shell。路径检测:carto-basics/references/access-paths.md。
何时使用
- “deck.gl 应用”“CARTO 应用”“地图应用”“空间仪表板”——使用此技能。
- 已提供 Builder 地图 ID →
fetchmap.md。 - Storymap / 滚动叙事 / 叙事地图 / 引导式导览 →
storymap.md(基于下方的 React 脚手架进行组合)。 - 地图对话 / 嵌入式 AI Agent →
agentic-variant.md。 - 在 Builder 中创作地图 →
carto-create-builder-maps。跨组织/配置文件迁移 Builder 地图 →cross-profile-copy.md。
运行模式——默认自主运行
通过 CARTO CLI 生成环境变量。不要向用户提问。 传入 --json 并解析。
运行,然后写入 .env:
carto auth status --json # → tenant_id (region) → apiBaseUrl
carto connections list --json # → connectionName (default: carto_dw)
# One token, ONE grant per source — repeat --connection alongside every --source.
carto credentials create token --json \
--connection <connectionName> --source <fully.qualified.table.A> \
--connection <connectionName> --source <fully.qualified.table.B> \
--apis sql,maps \
--referers 'http://localhost:5173*,<production-origin>*'
一个令牌,多个授权——而不是每张表一个令牌。--connection 和 --source 按位置配对,因此每个 --source 都要重复指定 --connection。使用 --referers(复数 CSV);重复使用 --referer(单数)会覆盖之前的值。Referer 会与浏览器的完整页面 URL 进行通配符匹配,因此每个模式都要以 * 结尾(仅写 http://localhost:5173 将无法匹配浏览器实际发送的 http://localhost:5173/)。--apis 和授权彼此独立:maps 覆盖数据源/图层,sql 覆盖 query(),而 *QuerySource 需要在授权中包含其查询——请参阅 auth-public-token.md。
私有应用需要将令牌命令替换为 carto credentials create spa --json(OAuth)或 carto credentials create m2m --json(M2M)。托管应用无需任何凭证:跳过令牌步骤,并按 auth-hosted.md 操作。
如果 carto 不在 PATH 中,或 auth status 失败:说明一次后就停止——输出缺少的命令。不要改为提问。假设 CLI 可正常工作(carto-basics)。
只询问 CLI 无法回答的问题:表名(如果不明显)以及下方含糊不清的应用形态选项。
决策流程——仅在确实存在歧义时提问
- 是否提供了 Builder map ID? 是 →
fetchmap.md。完成。 1b. 是否为 Storymap 形态? 线索:“story map”、“scrollytelling”、“guided tour”、“scenes/chapters/slides”、“fly through”。→storymap.md。仍需从下方选择 React 脚手架及数据源/图层;storymap 是叠加其上的状态模式,而非单独的脚手架。 - 演示还是生产环境? 默认使用 vanilla TS + Vite + MapLibre(
scaffold-vanilla.md),除非提示中提到“production”、“auth”、“deploy”、“team”或“multi-screen” → React(scaffold-react.md)。仅在明确指定时使用 Vue / Angular(scaffold-vue-angular.md)。 - 认证模型? 根据提示线索选择;仅在线索冲突时提问。
- “public” / “share” / “embed” / 无需登录 → API 访问令牌(
auth-public-token.md) - “private” / “users log in” / “CARTO login” → OAuth SPA(
auth-private-oauth.md) - “SSO” / “Okta” / “Azure AD” / “corporate IdP” → OAuth + SSO(
auth-private-sso.md) - “backend” / “ETL” / “CI” / “scheduled” → M2M(
auth-m2m.md) - “hosted on CARTO” / “internal tool” / “for my team” / “no infrastructure” /
carto app deploy→ CARTO 托管,运行时使用 viewer token(auth-hosted.md)。需要启用 Hosted Apps 标记;不适用于匿名访问。
- “public” / “share” / “embed” / 无需登录 → API 访问令牌(
- 数据形态? 从
data-sources.md+layers.md中选择数据源/图层组合:点/线/多边形 → vector;H3 → H3;quadbin → quadbin;曲面 → raster。通过basemap-and-view.md配置底图和视图状态同步。
然后仅添加用户要求的内容:组件、筛选器、输入项、图例、SQL/工作流、Agent 对话。示例见 recipes/。
- 视觉风格? 没有风格线索 → 默认采用 Meridian 风格(简洁、专业、原生 CARTO 风格)。有任何风格线索(“futuristic”、“corporate”或指定的设计系统)→ 定制主题以符合用户描述。无论哪种情况,都应用 UX 布局原则。参见
design-and-theming.md。
始终遵循的指导原则
apiBaseUrl是https://<tenant_id>.api.carto.com,其中tenant_id(区域,例如gcp-us-east1)来自carto auth status --json。tenant_domain是组织自己的域名(例如clausa.app.carto.com),不包含区域。https://<tenant_domain>/config.yaml中的apis.baseUrl是权威配置(包括可自托管的情况)。切勿硬编码。connectionName默认为carto_dw;请通过carto connections list --json确认。- 公共令牌必须始终传入
--source,并将--apis限定为sql,maps。公共资源包中绝不能包含imports/lds。 - 复杂分析属于工作流,而不是应用 SQL。 预测收入、计算综合评分/适宜性评分、细分、多步联接等,都应使用
carto-create-workflow构建;然后,应用通过 Workflows API 读取其输出表或CALL其存储过程(或者,由嵌入式 Agent 驱动时,将其作为已发布的 MCP 工具调用)。繁重的逻辑留在服务端;应用负责传递参数。参见workflows-and-sql.md。 - 一个
filters对象由数据源辅助函数和组件方法共享。修改它会触发两者重新获取数据。 - 图层的 z 顺序由
layers数组决定,最后一个位于最上方,而不是 CSSz-index。 通过调整数组位置并传入一个全新的数组来重新排序(切勿原地修改);z-index用于排列 DOM 面板,不会影响共享画布上的图层。参见layers.md。(不透明填充遮挡底图标签是另一个问题,应从底图侧处理,参见basemap-and-view.md。) - 在
onViewStateChange上对视口空间筛选进行约 300 ms 的防抖。 - 设计——除非用户指定其他美学风格,否则采用受 Meridian 启发的默认主题。UX 布局原则(以地图为主角、规范面板布局、渐进式展示)始终适用。参见
design-and-theming.md。 - 切勿虚构徽标。 只有在用户提供经过验证的 PNG / JPG / SVG 素材或指向官方来源时,才渲染徽标(CARTO、客户、合作伙伴或第三方品牌)。没有经过验证的素材时,应询问用户,或使用文字字标/完全省略徽标。不得生成 SVG 标志、从未经验证的 URL 获取素材,也不得用相似品牌替代。即使是知名品牌也适用。
- 最后运行应用。 运行
npm install && npm run dev并报告 URL。