Skip to main content
Glama

Cloud FinOps Skill & MCP

Find a waste runbook

find_playbooks
Read-onlyIdempotent

Finds runbooks for a suspected cloud-waste pattern, filterable by provider, service, waste category or detection confidence. Useful when the user asks how to detect or fix a specific waste pattern; each runbook includes a detection query the user can run in their own account. This connector has no access to the user's accounts.

Use this for questions like "which VMs are running for nothing",
"why is our NAT bill so high", "my NAT gateway processes 10TB to S3",
"should I delete these old snapshots", "which of our RIs are about to
expire", "what waste can we clean up safely without review" - anything
that names a provider, a waste category, or how confident the
detection needs to be before acting. Patterns
covered include NAT gateways and VPC endpoints, expiring Savings
Plans / RIs / reservations, snapshot sprawl, S3 lifecycle gaps, idle
or stopped VMs, orphaned disks / public IPs / EBS volumes, GPU and
SageMaker sizing, Kubernetes idle capacity, and schedule blindness.

All filters are optional and combine with AND semantics. String matching
is case-insensitive and exact. Examples:

- ``find_playbooks(scope="aws")`` - all AWS-specific playbooks
- ``find_playbooks(waste_category="idle")`` - every idle-resource pattern
- ``find_playbooks(scope="cross-cloud", confidence="obvious")``

Args:
    scope: ``"aws"``, ``"azure"``, ``"gcp"``, or ``"cross-cloud"``.
    service: Provider service exact-match (e.g. ``"AWS NAT Gateway"``).
    waste_category: ``"orphaned"``, ``"idle"``, ``"overprovisioned"``,
        ``"commitment-mismatch"``, ``"schedule-blindness"``,
        ``"modernization"``, ``"ai-ml-inefficiency"``, or ``"egress"``.
    confidence: ``"obvious"`` (single signal is enough),
        ``"likely"`` (two signals required), or ``"possible"``
        (needs human review). From the OptimNow three-tier confidence
        model in `finops-waste-detection-playbooks`.

Returns ``{"filters": {...}, "playbooks": [...], "total": N}``. A query
that matches nothing also returns `hint` and `valid_values`, so a typo is
distinguishable from a genuine gap in coverage.

Input Schema

NameRequiredDescriptionDefault
scopeNo
serviceNo
confidenceNo
waste_categoryNo

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint/idempotentHint/closed-world, so the safety profile is covered; the description goes further with a genuinely load-bearing constraint — "This connector has no access to the user's accounts" — which prevents the agent from promising live inspection. It also discloses the AND-combination of filters, case-insensitive exact string matching, the return envelope, and that a zero-match result carries hint and valid_values so a typo is distinguishable from a coverage gap.

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 and well organized: purpose, then usage triggers, then filter semantics, then return shape. It is longer than needed — the example-questions list and the "patterns covered" inventory partially overlap, since the categories and services are already enumerated under Args, and the closing Returns paragraph repeats information that the output schema already encodes.

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 four-optional-filter search tool with a 0%-covered schema, everything an agent needs is present: valid values for every parameter, AND semantics, matching rules, the response envelope, and the empty-result contract. The output schema exists, so the brief return-value note is sufficient rather than redundant padding.

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

Parameters5/5

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

Schema coverage is 0% and the schema is bare nullable strings with no enums, so the description carries the entire burden — and does: scope enumerates aws/azure/gcp/cross-cloud, waste_category lists all eight canonical values, service is flagged as exact-match with a quoted example, and confidence explains the semantics of each tier (one signal vs two vs human review). Without this text the parameters would be unusable.

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?

Opens with a specific verb and resource ("Finds runbooks") plus the filterable dimensions (provider, service, waste category, detection confidence), which is exactly what separates it from list_playbooks (unfiltered enumeration) and get_playbook (single fetch). The added note that each runbook contains a detection query the user runs in their own account pins down what the returned resource actually is.

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?

Gives rich when-to-use guidance, including five concrete user utterances ("why is our NAT bill so high", "which of our RIs are about to expire") and the general rule "anything that names a provider, a waste category, or how confident the detection needs to be." It never names a sibling as the alternative for the adjacent case (e.g. use list_playbooks to browse everything, get_playbook to fetch one by id), so the routing is inferable rather than explicit.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.