Model Context Protocol (MCP)

Prompts and resources

Alongside its tools the server ships 3 prompts and 4 resources. They carry the two parts of a FinOps answer that tools alone leave to chance: the order the calls go in, and the values the filters accept.

Prompts

A prompt is a workflow the server hands your client. In Claude Code it shows up as a slash command. It returns instructions rather than data, so the model still makes every tool call itself and sees every result. A prompt cannot read your spend and cannot act on its own.

The reason they exist: a real question is rarely one call. "Why did the bill go up" is a fixed sequence of seven, with three places a model reliably slips. It reaches for a month-over-month comparison without noticing that the current month is half over. It reports a per-team total without reading the allocation coverage sitting next to it. It adds realized savings to potential savings. Those corrections belong next to the data, versioned with it, instead of in your memory or in a prompt you paste every month.

monthly_bill_review

Review a month's cloud spend: what changed, what drove it, what to do

Takes month as YYYY-MM, or nothing for the most recently completed month.

Seven steps, in order: totals, what grew, the day it started, which account and service, whether it was price or volume, whether an anomaly was already flagged, and what can be done about it. Step 2 pins compare_to to the default and tells the model to say how many days each window covers if it deviates. Step 5 uses the quantity column rather than cost, because cost rounds to cents and a rounded zero looks like idleness. It ends by asking for what could not be determined, stated plainly, instead of filled in.

quarterly_commitment_review

Assess commitment coverage and find expiry cliffs before they hit the bill

Takes quarter_end as YYYY-MM-DD, or nothing for the end of the current quarter.

Coverage and utilization are opposite problems, and this one says so where the model will read it: low coverage means paying on-demand for nothing, low utilization means paying for capacity nobody used. It then walks the individual commitments for end dates, sizes each cliff at the monthly commitment amount as a floor, and requires the model to state that the forecast it just pulled knows nothing about the expiries it just found.

waste_by_team

Attribute spend and savings opportunity by team, with the missing join stated

Takes tag_key, or nothing to discover it.

This one is mostly about a limit. Recommendations carry a service, an environment and an account. They do not carry a team tag, so there is no join from an opportunity to a team, and a model asked for waste per team will invent one. The prompt names the gap and offers two honest substitutes: group by account and state the mapping, or group by environment and call it an environment view. Either way it has to say which it took.

Running one

In Claude Code, type / and look for the server's prompts:

/mcp__levelfour__monthly_bill_review 2026-07
/mcp__levelfour__quarterly_commitment_review
/mcp__levelfour__waste_by_team team

Arguments go after the command, space separated. Other clients surface prompts through their own menus, and some do not surface them at all yet.

Resources

A resource is a document your client can pull into context, addressed by URI. These four answer the question a model otherwise guesses at: what values does this filter accept?

Guessing costs you calls. A model that assumes your services are named AmazonEC2 and AmazonRDS spends round trips finding out that your data writes them differently, and sometimes reads the resulting empty result as a real zero. Loading the vocabulary once fixes the whole session.

URIWhat it holds
levelfour://providersThe cloud providers your organization has cost data for. Read it before passing any provider argument.
levelfour://filters/costsServices, accounts, regions and tags that appear in your cost data. The dimensions cross-constrain each other the way Cost Explorer's do.
levelfour://filters/recommendationsServices, environments, accounts and tags that appear on your recommendations. These are the values list-recommendations filters on.
levelfour://filters/commitmentsValues the commitment filters accept.

All four return application/json and are computed per organization from your own data, which is why provider is a plain string in the tool schemas rather than a frozen enum. A static enum was wrong in both directions at once: it listed providers a tenant did not have, and omitted ones it did.

In Claude Code, reference one with an @ mention:

Using @levelfour:levelfour://filters/recommendations, what can we save on RDS in staging?

Next

  • Tools is the generated reference for all 18 tools
  • Reading a result is the shape of what the calls return
  • Ask it this has prompts that work as written, and the questions that do not