Cross-system correlation
Infrastructure data doesn't live in one place. A ticket in Jira mentions a device, a Git commit touches a configuration file, an Ansible run fails against a hostname. Connecting those dots — "which device is this about, what depends on it, what changed recently?" — is a natural fit for an agent that can read Infrahub through MCP and your other systems through their own tools.
Scenario
A support engineer is triaging a Jira ticket:
"SR-4812 —
spine-03flapping interfaceEthernet1/5, downstream services degraded."
The agent's job: enrich the ticket with Infrahub context — what is spine-03, what connects to Ethernet1/5, which services depend on that link, and when did it last change.
The flow
1. Start with the signal
The agent already has the ticket text from the Jira MCP server (or its own Jira tool). It extracts the device name spine-03 and the interface Ethernet1/5.
2. Resolve the device in Infrahub
search_nodes(query="spine-03", kind="DcimDevice", limit=5)
Once the agent has the canonical name and UUID, it fetches the full record:
get_nodes(
kind="DcimDevice",
filters={"name__value": "spine-03"},
include_attributes=True,
)
3. Walk the relationships
The interesting context lives in related nodes — interfaces, connected circuits, upstream/downstream peers, the rack, the site, any services that reference this device. Use get_nodes with prefetch_relationships to pull related objects in a single call, or drop to query_graphql for multi-hop traversals:
get_nodes(
kind="DcimDevice",
filters={"name__value": "spine-03"},
prefetch_relationships=True,
include_attributes=True,
)
For the specific interface:
query {
DcimInterface(
device__name__value: "spine-03",
name__value: "Ethernet1/5"
) {
edges {
node {
description { value }
connected_endpoint {
node {
name { value }
device { node { name { value } } }
}
}
}
}
}
}
4. Correlate with change history
Ask your Git MCP server (or a git log tool) for recent commits touching spine-03's configuration. Infrahub's own branch history surfaces recently-merged proposed changes via the branches resource:
resource: infrahub://branches
5. Return a triage summary
The agent synthesizes:
spine-03is an Arista 7280 in Site AMS1, Rack 4B. InterfaceEthernet1/5is a 100G uplink toleaf-12 Ethernet49. Two services depend on this link:edge-fabric-euandtransit-carrier-a. No Infrahub changes in the last 7 days; the last Git configuration push was 3 days ago by@alice.
Patterns
- Name → ID: always resolve human-friendly names to UUIDs before fetching related data. Use
search_nodesfor fuzzy names,get_nodeswith exact filters for clean ones. - Relationship names are schema-defined: use
infrahub://schema/{kind}to discover the exact relationship field names (interfaces,connected_endpoint,site, etc.) rather than guessing. - GraphQL for multi-hop: if you need to cross 3+ relationships in one call, write a GraphQL query via
query_graphql— it's cheaper than chaining multipleget_nodescalls. - Branch awareness: if the ticket is about a pending change, pass
branch=...to your queries. The same device can have different state on different branches.
Related reading
- Natural-language to GraphQL — for multi-hop joins.
- Compliance analysis — for correlating across many devices.
- Troubleshooting data queries — when the correlation returns nothing.