Model Context Protocol (MCP)

Prompts and resources

Alongside its tools the server ships 5 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.

savings_review

Work one savings from the case for it to a started rollout, with the handoffs named

Takes recommendation_id, or nothing for the largest open opportunity.

The three reading prompts end at an answer. This one ends at a change, so most of it is about the two places the change stops. Automated Savings applies through a scoped grant you launch as a CloudFormation stack in your own AWS console, and LevelFour cannot launch it for you. The IaC format opens a pull request against a repository you bind through a version control connection. The prompt states both up front so the model treats the refusal as the end of the road rather than something to route around.

It branches, because the three delivery formats stop on different things. Manual needs only the guide, which get-manual-instructions serves. IaC needs a repository, and the user chooses it: list-repositories shows the organizations and then the repositories in one, and set-implementation-method settles the format together with the ones they picked. connect-version-control comes first when the organization has no GitHub connection at all. Automated needs an access grant, which create-savings-grant mints and the customer authorizes by launching a stack in their own AWS console.

It also tells the model to read what start-rollout returns instead of assuming it worked: a credential an admin authorized starts the rollout, and any other files an approval request instead. And it forbids polling. A rollout can take 12 to 72 hours to begin, so the answer to "is it done" is another call tomorrow. Whether the savings was actually applied is settled elsewhere and reported back, so the prompt says outright not to declare it done because the steps were followed.

approvals_review

Work the queue of rollouts waiting on an admin, one at a time

Takes nothing.

The maker/checker queue: a teammate asks for a savings to be rolled out, an admin releases it. The prompt reads the queue, then insists on opening each recommendation before answering it, because approving a request without reading what it does is the failure mode. Where the requester named no delivery format, releasing refuses until one is chosen, and the prompt says so rather than letting the model discover it.

One instruction in it is a refusal of its own: it will not release a batch of these on a single "approve them all". Each one changes something in your cloud.

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
/mcp__levelfour__savings_review REC-1234
/mcp__levelfour__approvals_review

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 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.

They all 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, with every parameter, enum and default
  • 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