Skip to main content
Glama

Exposure Paths

exposure_paths
Read-onlyIdempotent

Return the attack-path queue in the dashboard's order, with why each path ranks where it does.

Instructions

Return the attack-path queue in the dashboard's order, with why each path ranks where it does.

    Ranking is ``ranking.order`` (evidence tier, KEV, severity, evidence confidence,
    composite risk, credential count); every path carries ``rank``, ``evidenceTier``,
    ``isKev``, ``severity``, ``evidenceConfidence`` and ``rankingFactors``. Totals,
    filters and cursor pages match ``/v1/graph/attack-paths``.
    

Input Schema

NameRequiredDescriptionDefault
kevNoOnly paths through a known-exploited finding (true) or none (false).
viewNosummary (default): rank, risk, KEV, evidence tier, endpoints, finding/credential ids. full adds hops, relationships, nodes and edges.summary
limitNoMaximum ranked exposure paths to return.
cursorNopagination.next_cursor; keep the filters unchanged.
node_idNoAny graph node the path passes through.
scan_idNoOptional historical scan ID. Omit for the current tenant estate.
min_riskNoMinimum composite path risk (0-100).
target_idNoOnly paths ending at this graph node id.
tenant_idNoTenant scope. Defaults to 'default'.default
finding_idNoCVE, advisory or finding node id on the path.
source_typeNoEntrypoint entity type, e.g. 'agent'.
min_severityNoWorst on-path finding at least this severe.
credential_idNoCredential name or node id exposed on the path.
has_credentialNoOnly paths that do (true) or do not (false) expose a credential.

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed13 schema fields changedv1.0.12
    • addedInput schema / properties / credential_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 512,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Credential name or node id exposed on the path.",
      +  "title": "Credential Id"
      +}
    • changedInput schema / properties / cursor / description
      Previous value: -"Continue with pagination.next_cursor; keep the risk filter unchanged."New value: +"pagination.next_cursor; keep the filters unchanged."
    • addedInput schema / properties / finding_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 512,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "CVE, advisory or finding node id on the path.",
      +  "title": "Finding Id"
      +}
    • addedInput schema / properties / has_credential
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Only paths that do (true) or do not (false) expose a credential.",
      +  "title": "Has Credential"
      +}
    • addedInput schema / properties / kev
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Only paths through a known-exploited finding (true) or none (false).",
      +  "title": "Kev"
      +}
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum number of ranked exposure paths to return."New value: +"Maximum ranked exposure paths to return."
    • changedInput schema / properties / min_risk / description
      Previous value: -"Minimum path risk score to include."New value: +"Minimum composite path risk (0-100)."
    • addedInput schema / properties / min_severity
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "critical",
      +        "high",
      +        "medium",
      +        "low"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Worst on-path finding at least this severe.",
      +  "title": "Min Severity"
      +}
    • addedInput schema / properties / node_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 512,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Any graph node the path passes through.",
      +  "title": "Node Id"
      +}
    • addedInput schema / properties / source_type
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 64,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Entrypoint entity type, e.g. 'agent'.",
      +  "title": "Source Type"
      +}
    • addedInput schema / properties / target_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 512,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Only paths ending at this graph node id.",
      +  "title": "Target Id"
      +}
    • changedInput schema / properties / tenant_id / description
      Previous value: -"Tenant ID for the graph snapshot. Defaults to 'default'."New value: +"Tenant scope. Defaults to 'default'."
    • addedInput schema / properties / view
      Added value: +{
      +  "default": "summary",
      +  "description": "summary (default): rank, risk, KEV, evidence tier, endpoints, finding/credential ids. full adds hops, relationships, nodes and edges.",
      +  "enum": [
      +    "summary",
      +    "full"
      +  ],
      +  "title": "View",
      +  "type": "string"
      +}
  2. Changed1 schema field changedv1.0.11
    • changedInput schema / properties / scan_id / description
      Previous value: -"Optional graph scan ID. Omit to use the latest snapshot."New value: +"Optional historical scan ID. Omit for the current tenant estate."
  3. Changed1 schema field changed
    • addedInput schema / properties / cursor
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 4096,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Continue with pagination.next_cursor; keep the risk filter unchanged.",
      +  "title": "Cursor"
      +}
  4. Addedv0.88.4
  5. Removedv0.88.1
  6. Addedv0.87.1

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower; the description still adds real value by disclosing deterministic dashboard ordering, the exact ranking criteria (evidence tier, KEV, severity, confidence, composite risk, credential count) and the per-path fields emitted. It does not cover cost/latency or the significance of the 0-100 composite risk scale beyond what the schema states.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core statement, then ranking, then the API-equivalence. The enumerated field list (rank, evidenceTier, isKev, severity, evidenceConfidence, rankingFactors) is partly redundant given an output schema exists, but it is compact and reinforces the ordering story.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter read-only listing tool with a full output schema and rich annotations, the description supplies the one thing structured fields cannot: what the ordering means and why paths sit where they do. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all 14 parameters, so the schema carries parameter meaning fully. The description adds only the framing that filters behave like the /v1/graph/attack-paths endpoint; it offers no extra semantics on view modes, severity thresholds, or combining filters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: returns the ranked attack-path queue in dashboard order, and the second sentence explains the ranking semantics. It is clear what the tool produces, but it never names or distinguishes itself from siblings (scan, check, compliance, policy_check), so an agent must infer that this is the graph-based exposure view rather than a scan/compliance run.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the content — 'attack-path queue', 'totals, filters and cursor pages match /v1/graph/attack-paths' — but there is no explicit statement of when to choose this over scan, check, or policy_check. The cursor instruction ('keep filters unchanged' semantics) is the only operational guidance, and even that lives in the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.