feat: add Compass catalog manifests for all agentic packs - #133
feat: add Compass catalog manifests for all agentic packs#133r2dedios wants to merge 26 commits into
Conversation
Add catalog-info.yaml manifests to register the repository and ocp-admin agentic pack in Red Hat Compass (Backstage). Includes: - Root Location pointing to all agentic packs - ocp-admin pack Location aggregating skills and MCP servers - 7 AiResource entities for skills (cluster-creator, cluster-inventory, cluster-report, container-cve-validator, coreos-cve-validator, cve-recon, image-inspect) - 3 MCPServer entities (openshift-self-managed, openshift-ocm-managed, openshift-administration) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add 19 centralized MCP server manifests in ./mcps/ (flat structure) with deduplication by functional variant for shared images - Add 68 skill (AiResource) manifests across 6 new packs: rh-sre (13), rh-virt (10), rh-developer (17), rh-basic (6), rh-ai-engineer (11), rh-automation (11) - Add pack Location manifests for rh-sre, rh-virt, rh-developer, rh-basic, rh-ai-engineer, rh-automation - Update root Location to reference all 7 packs + 19 MCPs - Update ocp-admin Location: remove MCP targets, add labels - Update ocp-admin skill dependsOn refs to use default namespace - Remove old ocp-admin/mcps/ catalog-info.yaml files - Add domain-prefixed labels on all Locations: agentic-plugins.redhat.com/version and agentic-plugins.redhat.com/repo
Create a Domain entity (agentic-plugins) as the top-level parent and 7 System entities (one per pack) to provide rich grouping pages in Compass. Skills already reference their pack System via spec.system, so Backstage will auto-generate hasPart relations once these exist.
Merge 19 MCP manifests into 9 by grouping variants that share the same container image or server technology: - 4 openshift-mcp-server variants → openshift-mcp-server - 2 assisted-service-mcp variants → assisted-installer - 2 lightspeed variants → red-hat-lightspeed - 6 AAP endpoint variants → ansible-automation-platform - 5 unique MCPs unchanged Update all 75 skill dependsOn references and deduplicate where a skill previously referenced multiple variants of the same MCP.
Domain kind is not allowed for GitHub-based Location registration in Compass. Remove domain.yaml target and domain references from all System manifests to unblock registration.
Add backstage.io/techdocs-ref annotation to each pack's system.yaml pointing to the pack README.md on GitHub main branch.
Add dedicated namespace to all 9 MCPServer manifests and update all 71 skill dependsOn references accordingly.
…tions - Create System entity for shared MCPs (rh-agentic-plugins-mcps) - Add spec.system to all 9 MCPServer manifests - Add spec.dependsOn to 7 pack Systems linking to their MCPs - Add agentic.redhat.com/* annotations to all pack Locations and Systems - Fix repo label from "redhat-agentic-plugins" to "agentic-plugins" - Remove domain.yaml (Compass rejects Domain from GitHub Locations)
Point each MCPServer to its upstream repo README: - openshift-mcp-server → openshift/openshift-mcp-server - assisted-installer → openshift-assisted/assisted-service-mcp - red-hat-lightspeed → RedHatInsights/insights-mcp - ansible-automation-platform → ansible/aap-mcp-server - ai-observability → rh-ai-quickstart/ai-observability-summarizer - rhoai → opendatahub-io/rhoai-mcp - podman → manusa/podman-mcp-server - github → github/github-mcp-server red-hat-security skipped (no public repo, hosted service).
Add airesource dependsOn entries for orchestration skills that directly invoke other skills via the Skill tool. Covers 37 dependencies across 8 skills in rh-sre, rh-developer, rh-automation, and rh-ai-engineer. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
TechDocs builder expects mkdocs.yml + docs/ in the target repo, but our techdocs-ref URLs pointed to bare README.md files causing ENOENT errors. Move upstream MCP repo URLs to metadata.links instead, where they render as navigable links without triggering the builder. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace kind: System with kind: AiResource (type: plugin) for all 7 agentic packs. Rename system.yaml to <pack>-plugin.yaml. Add disciplines, categories, agents, and lifecycle fields to each pack manifest.
Remove spec.system from all 75 skill catalog-info.yaml files and add airesource:<pack>/<pack> to spec.dependsOn instead. Also update MCP server references to use agentic-plugins namespace.
Add root System entity (agentic-plugins). Remove mcps/system.yaml and consolidate all entities under the single system. Create mcps Location, add plugin targets to pack Locations, and simplify root Location to delegate through pack and MCP Locations only.
Document entity kinds, Location hierarchy, entity relationships, namespaces, reference formats, and workflows for adding new skills and packs with their Compass manifests.
Backstage resolves unqualified spec.system references relative to the entity's own namespace. Since the System entity is in the default namespace but plugins and MCPs use their own namespaces, the partOf relation was not resolving. Use default/agentic-plugins to fix.
Compass does not auto-generate hasPart inverse relations for custom kinds (AiResource, MCPServer). Declare them explicitly so the System page shows its contained plugins and MCP servers.
Remove duplicate MCPServer entities for Red Hat Lightspeed and Red Hat Security, replacing dependsOn references with their canonical versions already registered in Compass by their respective teams: - mcpserver:agentic-plugins/red-hat-lightspeed → mcpserver:redhat/red-hat-lightspeed-mcp-server - mcpserver:agentic-plugins/red-hat-security → mcpserver:redhat/security-mcp-server Reduces our registered MCP servers from 9 to 7.
Update spec.owner across all 90 Compass manifests from group:redhat/ecosystem-appeng to group:redhat/ai5-marketplace.
Signed-off-by: r2dedios <alex.ansi.c@gmail.com>
Replace dependsOn for skill→plugin with partOf (composition), keep dependsOn for skill→skill and skill→MCP (technical dependency). Add explicit inverse relations: hasPart on plugins and system, partOf and dependencyOf on MCP servers, dependencyOf on skills consumed by orchestration skills. Workaround for COMPASS-1288 where dependsOn does not auto-generate dependencyOf.
|
…nifests Compass only processes partOf/hasPart for standard Backstage kinds (Component, API, Resource). Custom kinds like AiResource and MCPServer store these fields in spec but they are not processed into the relation graph. All relationships now use dependsOn/dependencyOf which generates actual relations for any entity kind.
dmartinol
left a comment
There was a problem hiding this comment.
I think we need to rely on Mayur for a feedback about some modeling assumptions, and IMO we should simplify the resources definition to reduce the maintenance burden and clarify the relations.
| owner: group:redhat/ai5-marketplace | ||
| system: default/agentic-plugins | ||
| primitives: | ||
| - type: tool |
There was a problem hiding this comment.
Why we don't specify the primitives for all the other MCPs as well?
|
|
||
| All relationships use `dependsOn` / `dependencyOf`: | ||
|
|
||
| > **Why not `partOf`/`hasPart`?** Compass only processes `partOf`/`hasPart` for standard Backstage kinds (Component, API, Resource). Custom kinds like `AiResource` and `MCPServer` can store these fields in `spec`, but they are not processed into the relation graph. Only `dependsOn`/`dependencyOf` and `ownedBy`/`ownerOf` generate actual relations for custom kinds. |
There was a problem hiding this comment.
This seems a bug and we should instead try to fix it rather than finding a workaround. WDYT?
| - **Skill → Skill**: `dependsOn` / `dependencyOf` (orchestration skills invoke other skills) | ||
| - **All entities → Group**: `spec.owner: group:redhat/ai5-marketplace` | ||
|
|
||
| > **Bidirectional declaration policy:** Compass does not auto-generate inverse relations for custom entity kinds such as `AiResource` and `MCPServer` (tracked as COMPASS-1288). Until this is resolved upstream, we explicitly declare **both directions** of every relationship in our manifests. For example, if a skill declares `dependsOn: [airesource:rh-sre/rh-sre]`, the plugin must also declare `dependencyOf: [airesource:rh-sre/<skill>]`. When adding or modifying a relationship, always update both the source and target manifests. |
There was a problem hiding this comment.
Some of them are not needed and may require hard maintenance, please consider this to define your design.
| - Pack plugins: `airesource:<pack-namespace>/<pack-name>` | ||
| - MCP servers: `mcpserver:agentic-plugins/<server-name>` | ||
|
|
||
| #### Adding Compass Manifests for a New Skill |
There was a problem hiding this comment.
I think we need a skill to generate it, under .claude/skills
| @@ -20,6 +22,7 @@ agentic-plugins/ | |||
| ├── rh-ai-engineer/ # AI Engineering pack | |||
| ├── rh-automation/ # Automation pack | |||
| ├── rh-support-engineer/ # Support engineering pack | |||
There was a problem hiding this comment.
pls remove this stale entry
| - opencode | ||
| - cursor | ||
| dependsOn: | ||
| - system:default/agentic-plugins |
There was a problem hiding this comment.
these are redundant, just keep the spec.system field instead
Summary
Register the entire
agentic-pluginsrepository in Red Hat Compass (Backstage) with a complete hierarchy of catalog manifests covering all 7 agentic packs, 75 skills, and 7 MCP servers — with fully bidirectional semantic relationships.Architecture
Orchestration skills (e.g.,
remediation,forensic-troubleshooter,containerize-deploy) also declaredependsOn→ child skills, with the inversedependencyOfon each consumed skill.Entity inventory
agentic-plugins(repo-level grouping)pluginskilllocalRelationship model
Every relationship is declared bidirectionally as a workaround for COMPASS-1288 (inverse relations not auto-generated for custom kinds).
partOfpluginhasPartskillpartOfsystemhasPartpluginpartOfsystemhasPartMCPdependsOnMCPdependencyOfskilldependsOnMCPdependencyOfplugindependsOnskilldependencyOfskillCanonical MCP server reuse
Two MCP servers already registered in Compass by their upstream teams are not duplicated — skills reference the canonical entities directly:
red-hat-lightspeed-mcp-serverredhatrh-lightspeed-mcpsecurity-mcp-serverredhatlightforge-mcp-devKey design decisions
partOf/hasPartfor composition (skill belongs to plugin),dependsOn/dependencyOffor technical dependency (skill uses MCP or other skill)AiResource(type: plugin), supporting many-to-many skill↔MCP dependenciesagentic-pluginsnamespaceTest plan
validate-entityAPI