The Service Portfolio is a view on top of the CMDB, not a separate entity. Services are CIs of type='business-service' or type='service' that contain other CIs via the contains relationship. The portfolio surface adds health rollup (combining worst member status with active Major Incidents touching members).
Defining a service
- Use
create_ci(MCP) orPOST /api/cmdb/ciswithtype='business-service'(customer-facing offering) ortype='service'(internal technical service). - Set criticality, owner, environment, description.
- Use
add_service_members(MCP) orPOST /api/service-portfolio/:id/membersto bulk-wire the backing CIs. Setscontainson the service +member_ofinverse on each member.
Recommended: model business services at the level your CFO or CEO would recognize ("Customer Order Portal", "Employee Self-Service", "Vendor Payment Pipeline"). Below that, model technical services if you want to layer infrastructure dependencies more granularly.
Health classification
| Health | Triggered by |
|---|---|
| 🚫 major-outage | Any active Major Incident touching the service CI or any member CI |
| 🔧 maintenance | Any member CI has status='in-maintenance' |
| ❓ unknown | Service has 0 members OR service status is retired |
| ✅ healthy | Has members, no MIs, no maintenance, not retired |
The portfolio listing is sorted with outages first, then by criticality desc — so executives see the worst news at the top of the dashboard.
REST endpoints
GET /api/service-portfolio(Viewer+) — all services with member rollup, max-criticality, worst-status, active MI impacts, health classificationGET /api/service-portfolio/:id/health(Viewer+) — recursive health for one service. Walkscontainsoutbound to enumerate ALL member CIs (including nested), counts by criticality + type, lists active MIs touching any memberPOST /api/service-portfolio/:id/members(Admin) — bulk-add CIs as members. Up to 100 per call. Idempotent. Auto-maintainscontains+member_ofinverse.
MCP tools (3, HTTP + stdio parity)
list_service_portfolio— executive view with health rollupget_service_health— drill-down for one service (use during exec brief during an incident)add_service_members— bulk-wire infrastructure to a service
Pitfalls
- Service Portfolio is a CMDB view, not a separate entity. Don't try to query a Services container — services ARE CIs. The endpoint filters to type business-service or service.
- Health rollup requires CMDB AND Major Incident data. Without active MIs (or without affectedCiIds on declared MIs), the health classification falls back to maintenance / healthy based on member status only.
- Nested services walk recursively. If service A contains service B which contains 50 CIs, get_service_health on A returns all 50 CIs. This is intentional — exec dashboards want full transitive scope.
Related guides
- CMDB — services are CIs; this is the prerequisite layer
- Major Incident — active MIs flip service health to major-outage