关于 acquia-source
面向 Acquia Source(基于 Drupal CMS 和 Drupal Canvas 的托管 SaaS CMS)的实用技能,为开发者和 Agent 提供认证、API、MCP 内容操作及 Canvas 组件和页面部署指引。
主要功能
- 01OAuth2 设置与令牌指引
- 02JSON:API 查询和资源指引
- 03通过 MCP 管理内容与建模
- 04Canvas 组件命令行流程
- 05Canvas 页面部署规则
适用场景
- 01自动化访问 Acquia Source API
- 02通过 MCP 客户端编辑内容
- 03创建并上传 Canvas 组件
- 04部署 Canvas 页面
MCP 相关
Acquia Source 提供实验性的站点专属 MCP 服务,使用 HTTP 传输和 OAuth2 动态客户端注册。它向客户端提供只读资源和写入工具,用于内容管理、内容建模以及 Drupal Canvas 页面和组件操作。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ grasmash/ drupal-claude-skills --skill acquia-source安装后在 Claude Code 中输入/acquia-source确认已加载。
详细介绍
Acquia Source
Acquia Source(“Source powered by Drupal CMS”)是一款托管式 SaaS CMS,基于 Drupal CMS 11+,并集成了 Drupal Canvas 页面构建器(drupal.org/project/canvas,前身为 Experience Builder)。你无法访问服务器或 SSH,也不能使用任意的贡献模块 — 你需要通过其 JSON:API、MCP 服务、Canvas Page API 和 @drupal-canvas CLI 进行交互。管理员登录地址为 https://source.acquia.com。
Acquia Source 是一款 SaaS 产品,不是 Acquia Cloud Platform。
acliCLI 用于管理 Cloud Platform,不能管理 Source 站点 — 不要在这里使用它。Source 通过 Web 管理界面和以下 API 进行操作。
站点标识与凭据
- CMS URL 的格式为
https://<uuid>.cms.acquia.site(创建站点时自动生成;之后可映射自定义域名)。此基础 URL 是 JSON:API 主机和 OAuth 主机。 - API 客户端(OAuth2 client_id/secret)在管理界面的 API → API clients → Add API client 下创建。
@drupal-canvasCLI 从本地.env文件读取所有内容(绝不会提交到版本控制):CANVAS_SITE_URL=https://<uuid>.cms.acquia.site CANVAS_CLIENT_ID=<client_id> CANVAS_CLIENT_SECRET=<client_secret> CANVAS_JSONAPI_PREFIX=api # Source serves JSON:API under /api, not the Drupal default /jsonapi # CANVAS_ACCESS_TOKEN=<token> # optional: a pre-issued Bearer token instead of client credentials
身份验证(通过 simple_oauth 使用 OAuth2)
- 令牌端点:
POST https://<site>/oauth/token,Content-Type: application/x-www-form-urlencoded。 - 授权类型: Authorization Code(需要用户参与)、Client Credentials(用于服务器/Agent — 自动化时使用此类型)、Refresh Token。
- API 调用请求头:
Authorization: Bearer <access_token>。 - 作用域: 内容作用域,如
content:read/content:write(仅为示例 — 尚未公布完整列表);Canvas CLI 需要canvas:asset_library和canvas:js_component。创建 API 客户端时,启用 Client Credentials 并添加这些作用域。
手动获取 client-credentials 令牌:
curl -s -X POST "$CANVAS_SITE_URL/oauth/token" \
-d grant_type=client_credentials \
-d client_id="$CANVAS_CLIENT_ID" \
-d client_secret="$CANVAS_CLIENT_SECRET" \
-d scope="canvas:asset_library canvas:js_component" | jq -r .access_token
JSON:API
- 基础路径在 Source 上为
/api(Drupal 默认的/jsonapi已被覆盖 — 设置CANVAS_JSONAPI_PREFIX=api)。因此,集合的 URL 格式为https://<site>/api/<entity_type>/<bundle>(例如/api/node/article)。 - 资源类型采用标准 Drupal 格式
{entity_type}--{bundle}(node--article、media--image、taxonomy_term--tags等)。尚未确认存在 Source 专有前缀。 - 管理界面提供 JSON:API Query Builder(API → JSON:API Query Builder),可生成实时查询和代码;还提供每个站点各自的 OpenAPI 文档(API → OpenAPI documentation)。可通过这些功能了解特定站点的确切 bundle 和字段。
curl -s -H "Authorization: Bearer $TOKEN" \
"$CANVAS_SITE_URL/api/node/article?page[limit]=5" | jq '.data[].attributes.title'
MCP 服务(连接 AI Agent)
Acquia Source 提供 MCP 服务(HTTP 传输,使用 OAuth2 和动态客户端注册)。该服务处于实验阶段,且需逐站点启用 — 请先启用。
- 启用: 管理界面 → Configurations → Experimental features → MCP Server 开关。
- 获取 URL: 在 Source 管理界面的 MCP Client Configuration 中复制站点的 MCP URL(端点 URL 按站点配置;没有可直接写死的固定公共路径)。
- 在 Claude Code 中注册:
然后运行claude mcp add acquia-source-mcp <ACQUIA_SOURCE_SITE_MCP_URL>/mcp,选择acquia-source-mcp,再点击 Authenticate 完成 OAuth 流程(动态客户端注册 — 无需手动提供 client_id)。
提供的功能(通过 drupal:// 和 canvas:// URI 提供只读资源和写入工具):
- 内容管理 — 内容类型、媒体类型、分类词汇表、文本格式;创建/更新节点、媒体和分类词条。
- 内容建模 — 字段存储、字段类型;创建内容类型并添加字段。
- Drupal Canvas — 组件和页面;管理布局和组件属性。
当 Agent 需要通过对话方式建模内容或编辑 Canvas 布局时,优先使用 MCP 服务,而不是手动编写 JSON:API 调用;对于确定性、脚本化的部署,则使用 JSON:API/页面 API。
Canvas 代码组件 — CLI 工作流
使用官方工具搭建和管理 React/JSX 代码组件(安装官方 Canvas 技能,了解组件编写规范,切勿另起炉灶):
npx @drupal-canvas/create@latest— 搭建代码库(默认模板:acquia/nebula,其中包含AGENTS.md和SETUP.md,介绍 Page API 参考和注意事项)。npx canvas download/npx canvas upload -c <comp1,comp2> -y— 在代码库和站点之间拉取/推送组件。canvas.config.json(已提交)定义结构;.env(未提交)存放上述密钥。
Canvas Page API — 部署页面
页面的构建方式是先上传组件,再通过 PATCH 为页面设置完整的组件树。以下规则来之不易(不遵守的话会白费数小时):
- 每次 PATCH 都会替换整个页面。 切勿通过多次 PATCH 增量构建;应组装完整的组件树,并在一个原子请求中发送。
- 每次上传都会更改版本哈希。 每次
canvas upload后都要重新查找所有组件版本哈希;切勿将其硬编码。只有发生更改的组件才会获得新哈希。 FormattedText会在实时站点上移除内联style属性(在 Storybook 中可用,在实时站点上则失效)。要设置文本对齐方式,请添加带有 CVA 变体的layout属性(left_aligned/center_aligned/right_aligned);切勿使用内联style="text-align:…"。Image组件需要 Drupal 媒体管线 URL(包含alternateWidths)。外部 URL / data URI 虽然会被接受且不报错,但在实时站点上会渲染为不可见的 0×0 图片。徽标请使用内联 SVG/文本;内容图片请先上传为 Drupal 媒体。- 不要将原始十六进制颜色作为属性值 — 使用映射到
global.css中 Tailwind 主题令牌的 CVA 变体。 - 内边距会叠加:
section会添加px-4,grid_container会添加px-6→ 在 375px 屏幕上约为 80px。请在内部容器上使用响应式前缀(px-0 md:px-6)。 - 空插槽容器需要
min-w-*/min-h-*,以便在 Canvas 编辑器中保持可交互。 - 部署脚本模式:读取
.env→ 获取客户端凭据令牌 → 一次性查找所有版本哈希 → 构建组件树(先父项后子项,每个实例使用新的 UUID,inputs为json.dumps()字符串)→ 单次 PATCH。在顶部保留一个VERSIONS字典。
文档
- 概览:https://docs.acquia.com/acquia-source/overview
- API 集成(JSON:API):https://docs.acquia.com/acquia-source/api-integration
- 访问与身份验证(OAuth2):https://docs.acquia.com/acquia-source/access-and-authentication
- MCP 服务:https://docs.acquia.com/acquia-source/acquia-source-mcp-server
- 创建自定义组件(CLI):https://docs.acquia.com/acquia-source/creating-custom-components
- JSON:API Query Builder:https://docs.acquia.com/acquia-source/jsonapi-query-builder
- 官方 Canvas 组件技能:https://github.com/drupal-canvas/skills · 入门模板:https://github.com/acquia/nebula