Acquia Source Navigation Menus: Install, Source and Security | FunnelSlayer

Acquia Source Navigation Menus

Published by acquia in nebula

No known issues2 installs

Add Acquia Source Navigation Menus to your agent

Review the source and files first. When you are ready, copy the prompt instruction or use the CLI command supported by your environment.

Install with a prompt

Paste this into a compatible coding agent:

add this skill "acquia-source-navigation-menus" from https://github.com/acquia/nebula

Install with the CLI

Run this command in a controlled environment after reviewing the repository:

npx skills add https://github.com/acquia/nebula --skill acquia-source-navigation-menus

Skill instructions

Acquia Source — Navigation menus via Source MCP

Principle: Menus belong in the CMS (Drupal menu entities and menu links). That is the correct, maintainable model for production. This skill automates the same data you would create under Structure → Menus on an Acquia Source site. It does not replace the CMS with hardcoded link lists in components for real site delivery.

When this applies

Use this skill when all of the following hold:

  1. The target is an Acquia Source Drupal site (see AGENTS.md — e.g. .cms.acquia.site or CANVAS_SITE_URL for that environment).
  2. You are authoring or changing menus or menu links for that remote site.
  3. You will use Source MCP (read each tool schema; server id is often user-source-mcp).

Do not use this skill

  • Not an Acquia Source / Source-MCP target (other hosting, local-only Workbench, or a Canvas site where you are not using the Source MCP server for that environment). For those, use the Drupal admin (or the project’s normal operations) to create menus; do not route that work through this document.
  • Treating static FALLBACK_LINKS in code as a substitute for a real Drupal menu on a site that should be editor-driven. Keep fallbacks for empty/preview only; on Source, still create the menu in the CMS (MCP or UI).

If Source MCP is unavailable on a Source site, still create the same menus in the Drupal admin (Structure → Menus) — that is the right place; only the automation path is missing, not the model. See canvas-navigation-components.

Relationship to Canvas components

  • CMS first: Authors and this skill work on Drupal; components only read menu_items by machine name. Keep menuName in component.yml / props in sync with the menu you created in the CMS (see canvas-data-fetching and canvas-navigation-components).
  • This skill does not push React code — only menu entities on the server. Use canvas-component-push when component source still needs uploading.

Discover existing menus

Before creating duplicates, list menus:

  • MCP resource: drupal://menus (JSON list; entries may include links to per-menu item trees — see your server’s resource templates).

Use the same server id as for tools (<source-mcp-id>).

MCP tools (read schemas before each call)

Always read each tool’s JSON schema in your MCP filesystem for the Source server before invoking tools. Typical menu-related tools:

ToolPurpose
create_menuNew custom menu: machine id, label, optional description.
update_menuChange label / description for an existing menu id.
create_menu_itemAdd a link: menu_name, title, link, optional parent, weight, enabled, expanded, description.
update_menu_itemPatch by menu link content id (integer): title, link, parent, weight, enabled, expanded, description.
delete_menu_itemRemove by id; optional delete_children.

Link URIs (link field)

Use the formats your tool schema documents (commonly):

  • Internal path: internal:/path (e.g. internal:/about, internal:/node/1)
  • External: https://example.com
  • Entity shortcut: entity:node/1
  • Route: route:<Drupal route name>

Match paths to real aliases or nodes on the site so links resolve after publish.

Hierarchy (nested items)

  • Create parents before children.
  • parent is usually a menu link plugin id string (for example menu_link_content:<uuid>) — take the value from create_menu_item responses or from the menu tree resource for the parent item, per your MCP tool output.
  • weight: lower values tend to sort first; use for ordering within a level.

Ordering and cleanup

  • Use update_menu_item with weight (and link / title) to reorder or fix mistakes without deleting.
  • Use delete_menu_item when removing entries; confirm delete_children behavior if the item has descendants.

Suggested workflow

  1. Fetch drupal://menus → note existing main, footer, etc.
  2. If you need a new menu (new machine name), call create_menu → then add items with menu_name set to that id.
  3. Otherwise create_menu_item against main / footer / etc., using link URIs that match deployed Canvas pages or nodes (coordinate with acquia-source-canvas-pages for routes).
  4. Verify in the Drupal UI or via JSON:API menu_items from the component’s menuName as in canvas-data-fetching.

Related skills

SkillRole
AGENTS.mdAcquia Source signals, CANVAS_SITE_URL, Canvas pages vs CLI
canvas-navigation-componentsmenuName, decomposition, UX/accessibility
canvas-data-fetchingmenu_items, sortMenu, SWR, fallbacks
acquia-source-canvas-pagesPaths and canvas_page URLs menus should point to
acquia-source-site-buildFull pipeline Phase B5 (menus)
canvas-component-pushPush nav components (separate from menu entities)

Files included

  • SKILL.md