Skip to main content
Glama
luiacuaniello

PerspectiveGraph

get_posture

Read-onlyIdempotent

Summarize cloud/Kubernetes attack posture: count open and runtime-confirmed routes, mapped assets/relationships, and reachable sensitive assets. Use it first to orient before querying detailed paths.

Instructions

Summarize the environment: how many attack routes are open, how many are runtime-confirmed, how many assets and relationships are mapped, and which sensitive assets an attacker can currently reach. Start here to orient before enumerating anything: it also gives the names the other tools take - the sensitive assets routes_to_target accepts and the applications app arguments accept.

Input Schema

NameRequiredDescriptionDefault

No arguments

Output Schema

NameRequiredDescriptionDefault
postureNoCounts for the whole environment.
applicationsNoThe application names this environment knows: the values `app` arguments accept.
riskSimulationNoThe environment's overall risk, simulated over every route at once.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv1.38.1
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "applications": {
      +      "description": "The application names this environment knows: the values `app` arguments accept.",
      +      "items": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    },
      +    "posture": {
      +      "description": "Counts for the whole environment.",
      +      "properties": {
      +        "activePaths": {
      +          "description": "Routes still on the board, that is not suppressed.",
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        },
      +        "criticalPaths": {
      +          "description": "Routes found by the latest analysis, suppressed ones included: the number list_attack_paths pages through.",
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        },
      +        "edges": {
      +          "description": "Relationships in the graph.",
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        },
      +        "kevOnPaths": {
      +          "description": "Distinct known-exploited vulnerabilities (CISA KEV) sitting on a route.",
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        },
      +        "nodes": {
      +          "description": "Assets in the graph.",
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        },
      +        "policyViolations": {
      +          "description": "Violations of the policy invariants: rules the environment is never meant to break.",
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        },
      +        "runtimeConfirmed": {
      +          "description": "Open routes with a runtime alert on them: an attack may be in progress.",
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        },
      +        "suppressedPaths": {
      +          "description": "Routes an analyst has triaged off the board (accepted risk, false positive).",
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "riskSimulation": {
      +      "description": "The environment's overall risk, simulated over every route at once.",
      +      "properties": {
      +        "anyCompromiseProbability": {
      +          "description": "Probability that at least one sensitive asset is reached, 0-1. A modelled estimate, not a measured rate: see get_score_trust.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "crownJewels": {
      +          "description": "The sensitive assets, each with the probability that an attacker reaches it.",
      +          "items": {
      +            "properties": {
      +              "compromiseProbability": {
      +                "description": "Probability this asset is reached, 0-1. A modelled estimate, not a measured rate: see get_score_trust.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "label": {
      +                "description": "Asset type, e.g. IAM_Role, Bucket, Database.",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "name": {
      +                "description": "Asset name. Pass it to routes_to_target as `target`.",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "type": [
      +              "object",
      +              "null"
      +            ]
      +          },
      +          "type": [
      +            "array",
      +            "null"
      +          ]
      +        },
      +        "sensitivityHigh": {
      +          "description": "High end of the same band.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "sensitivityLow": {
      +          "description": "Low end of that probability when every hop is resampled within its uncertainty.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds meaningful non-annotation context: that the call returns identifier names consumed by other tools (routes_to_target targets and `app` arguments), which is exactly the kind of cross-tool behavior an agent needs.

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?

Two sentences, front-loaded with the concrete summary contents before the orientation guidance. The list-heavy first sentence is dense but every item is informative; no filler.

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

Completeness4/5

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

An output schema exists, so return values need not be re-explained, and the description appropriately covers the conceptual content and the tool's role as the entry point in the workflow. It is essentially complete for a zero-parameter overview tool; only the lack of any explicit exclusion guidance keeps it from a 5.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4. The description correctly focuses instead on output-derived names that become parameters for sibling tools, which is useful framing though not a parameter concern for this tool itself.

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

Purpose5/5

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

Specific verb+resource ("Summarize the environment") with an explicit enumeration of what is summarized: open attack routes, runtime-confirmed routes, assets, relationships, and reachable sensitive assets. It also distinguishes itself from siblings by positioning as the orientation entry point rather than an enumeration tool.

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

Usage Guidelines4/5

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

Explicitly says "Start here to orient before enumerating anything," which is clear when-to-use guidance relative to the listing siblings. It stops short of naming an alternative or stating when not to use it (e.g., for a single path), so it is clear context without exclusions.

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