The CloudQuell MCP server exposes 43 tools — 29 read tools and 14 write
tools. This page lists every one, grouped by domain, with what it does, its key
parameters, whether it reads or writes, the OAuth scope it requires, and its MCP
annotations.
Everything here is derived directly from the deployed tool definitions
(src/tools/, src/schemas/, src/tools/register.ts). If a tool isn’t on this
page, it isn’t in the server.
Scope. Read tools require the read scope (granted by default at sign-in).
Write tools require the admin:write scope and confirm: true on the call
(see Authentication & authorization). A token with
admin:write also has read.
MCP access is a paid feature. Calling any tool on this page requires your
organization to be on a paid CloudQuell plan (the mcp_access entitlement). A Free
org can connect and list the tools, but every tool call returns upgrade_required.
See Access, limits & data scope.
Annotations. Every tool carries MCP tool
annotations
that clients use to drive UI and confirmation prompts. They are hints, not
enforcement — the real gate is the scope + confirm check.
| Annotation shown |
Meaning |
| read-only |
readOnlyHint: true — never modifies state. |
| write · additive |
readOnlyHint: false, destructiveHint: false — creates/updates, reversible. |
| write · destructive |
destructiveHint: true — removes a record (e.g. delete/cancel). |
| · idempotent |
idempotentHint: true — repeating the same call has no extra effect. |
| · side-effecting |
dispatches something real to the outside world (e.g. a test message). |
All tools set openWorldHint: true (they call live CloudQuell backends).
Common parameters. Almost every tool accepts:
response_format — concise (default; key fields only, fewer tokens) or
detailed (the full parsed payload).
limit — caps the rows returned in list sections (defaults noted per tool).
integration_id — scope to one (or more) provider connections; omit for the
whole organization.
All tool output is capped at ~25,000 tokens (~100 KB); on overflow the tool
returns a short message telling the agent how to narrow the request rather than
truncating silently.
| Tool |
What it does |
Key parameters |
R/W · scope |
Annotation |
query_costs |
The one flexible cost-query tool. Returns a cost slice for the org. view="overview" (default) = MTD vs. previous month, per-account & per-service rollups, service comparison. view="detailed" = pivot breakdowns; pair with group_by. |
view (default overview), group_by (service/account/product/usage_type/tag), start_date/end_date (YYYY-MM-DD), provider (aws/azure/gcp/snowflake/anthropic/openai), account_id, service, granularity, limit, response_format |
Read · read |
read-only |
query_costs views: only overview and detailed are valid values. Any
other value (e.g. savings, anomalies, budget_status, tag_coverage,
allocation, commitments) is rejected as an input-validation error — those
slices are served by their own dedicated tools instead. Use get_savings,
list_anomalies, get_budget_status, get_tag_coverage,
get_allocation_breakdown, and list_commitments for them.
| Tool |
What it does |
Key parameters |
R/W · scope |
Annotation |
get_ai_spend |
The org’s direct AI / LLM spend — Anthropic (Claude) or OpenAI API usage, selected with provider (anthropic is the default; openai needs the OpenAI integration connected). Returns cost (dollars, FX-correct) and tokens per row, broken down by the dimension you pick — workspace means Anthropic workspaces / OpenAI Projects, api_key is per-key token/request attribution (providers expose no per-key dollars), service_tier splits batch vs. standard. Excludes AWS Bedrock: it’s AWS-billed and already in your cloud spend (query_costs), so it’s left out here to avoid double-counting — don’t add this figure to cloud totals expecting Bedrock to be separate. |
provider (anthropic default / openai), group_by (model default / token_type / workspace / api_key / service_tier / cost_type / provider / day / none), start_date/end_date (req, YYYY-MM-DD), model, token_type, workspace, response_format |
Read · read |
read-only |
| Tool |
What it does |
Key parameters |
R/W · scope |
Annotation |
get_savings |
The org’s full savings picture in one call: headline rollup (banked / open / potential), by-action-type breakdown, effective-savings-rate metrics, and the filtered list of recommendations (rightsizing, idle, commitment purchases) with dollar estimates, effort, and confidence. |
minMonthlySavings ($ floor), actionType, accountId (id or name), product, limit (default 50), response_format |
Read · read |
read-only |
get_recommendation_history |
The status-change audit trail behind a single recommendation: each entry’s status (and previous status), any notes, realized savings, dismissed reason, and when it changed. |
recommendation_id (req), limit, response_format |
Read · read |
read-only |
update_recommendation_status |
Mark a savings recommendation applied, dismissed, in_progress, active, etc. Optionally record an audit note, realized savings, or a dismissal reason. |
recommendation_id (req), status (req), notes, realized_savings, dismissed_reason, confirm (req) |
Write · admin:write |
write · additive · idempotent |
| Tool |
What it does |
Key parameters |
R/W · scope |
Annotation |
list_anomalies |
Lists cost anomalies, derived client-side from month-over-month and week-over-week movement (the backend has no precomputed anomaly list). Flags a service when its MoM increase clears min_pct_increase, or when spend appears for a service with no baseline (new-service anomaly). |
min_pct_increase (default 25), min_cost (default 0), service, provider (aws/azure/gcp/snowflake/anthropic/openai), limit (default 50), response_format |
Read · read |
read-only |
investigate_anomaly |
Deep-dives one service: chains three reads — anomalies view (weekly trend + MoM), per-resource breakdown for a date, and the ±7-day daily series — and returns a synthesized verdict on whether the trend looks anomalous. |
service (req), date (YYYY-MM-DD; defaults to current MoM period end), account_id, top_n_resources (default 15), response_format |
Read · read |
read-only |
get_weekly_cost_slices |
Weekly per-service cost slices for the trailing ~12+ weeks plus the MoM-by-service comparison — for charting trends and spotting swings. |
service, account_id, provider (aws/azure/gcp/snowflake/anthropic/openai), limit (default 500), response_format |
Read · read |
read-only |
list_anomaly_dismissals |
The org’s active anomaly dismissals — each row carries the (service, period, window) key plus the reason and when it was dismissed. Use it to find the exact key undismiss_anomaly needs. |
limit, response_format |
Read · read |
read-only |
dismiss_anomaly |
Suppresses an anomaly so it no longer surfaces in the feed (upsert). The (service, period, window) triple is the dismissal key — keep it to reverse the dismissal later. |
service (req), period (req, e.g. “2026-06”), window (req, one of “mtd”/“weekly”/“monthly”), reason, confirm (req) |
Write · admin:write |
write · additive · idempotent |
undismiss_anomaly |
Reverses a previous dismiss_anomaly so the anomaly can surface again. Provide the same key you dismissed with. |
service (req), period (req), window (req), confirm (req) |
Write · admin:write |
write · destructive · idempotent |
| Tool |
What it does |
Key parameters |
R/W · scope |
Annotation |
get_budgets |
Lists budget definitions: name, amount, currency, period, dates, threshold percentages, notification channels, and scope. |
integration_id, limit, response_format |
Read · read |
read-only |
get_budget |
One budget definition by id. |
budget_id (req), response_format |
Read · read |
read-only |
get_budget_status |
Current spend vs. budget: actual, forecast, actual/forecast %, variance vs target, configured thresholds, and a derived status (on_track / warning / over) per budget. |
integration_id, limit, response_format |
Read · read |
read-only |
create_budget |
Creates a budget. Currency is not settable — the backend stamps the org’s display currency. |
name (req), amount (req), start_date (req), period (default monthly), end_date, integration_id, scope (platform/services/tagKey+tagValue/costCenterId), threshold_pcts, notification_channels ({ slack, teams, email[] }), confirm (req) |
Write · admin:write |
write · additive |
update_budget |
Partial update — send only the fields to change; everything omitted is preserved (so { enabled: false } pauses a budget without touching scope/thresholds/channels). Set enabled to enable/disable. Currency is not settable. |
budget_id (req), name, amount, start_date, end_date, period, integration_id, scope, threshold_pcts, notification_channels, enabled, confirm (req) |
Write · admin:write |
write · idempotent |
delete_budget |
Deletes a budget by id — the budget and its alerting are removed. |
budget_id (req), confirm (req) |
Write · admin:write |
write · destructive · idempotent |
| Tool |
What it does |
Key parameters |
R/W · scope |
Annotation |
list_commitments |
Lists Reserved Instances & Savings Plans with a utilization/expiry summary: type, status, days-until-expiry, utilization %, dollars saved, effective cost. |
integration_id, limit, response_format |
Read · read |
read-only |
get_expiring_commitments |
Same data filtered by lifecycle status — defaults to expiring_soon (those needing renewal). |
status (default expiring_soon; expired/active/unknown), integration_id, limit, response_format |
Read · read |
read-only |
| Tool |
What it does |
Key parameters |
R/W · scope |
Annotation |
get_tag_coverage |
Tagged-vs-untagged spend split for the current billing month to date, coverage per tag key, and the services with the most untagged spend — where tagging gaps hurt allocation accuracy. Covers cloud providers only (AWS / Azure / Google Cloud); AI and warehouse spend is excluded from the denominator by design. |
integration_id, limit, response_format |
Read · read |
read-only |
| Tool |
What it does |
Key parameters |
R/W · scope |
Annotation |
get_allocation_breakdown |
How spend is allocated across cost centers for the current period: own spend, rolled-up spend (incl. descendants), % of total, parent linkage, plus a synthetic “Unallocated” bucket. |
integration_id, limit, response_format |
Read · read |
read-only |
list_cost_centers |
The org’s cost-center definitions and their parent/child hierarchy (the allocation taxonomy). |
limit, response_format |
Read · read |
read-only |
list_allocation_rules |
The rules that assign spend to cost centers (match dimension, service/tag, priority, enabled, integration scope). |
cost_center_id, limit, response_format |
Read · read |
read-only |
| Tool |
What it does |
Key parameters |
R/W · scope |
Annotation |
list_saved_reports |
The org’s saved custom cost reports: name, description, chart type, scope, and the pivot config (dimensions, metrics, granularity). Each report is scoped to one integration (integration_id) or a whole provider (provider, e.g. aws — spans all of that provider’s integrations; integration_id is null then). |
integration_id, limit, response_format |
Read · read |
read-only |
get_report |
One saved report by report_id (fetched from the list and filtered client-side — there is no per-report backend route). Carries the same integration-or-provider scope fields as the list. |
report_id (req), integration_id, response_format |
Read · read |
read-only |
| Tool |
What it does |
Key parameters |
R/W · scope |
Annotation |
list_alert_rules |
The configured cost-alert rules: type (trend/threshold/anomaly/budget), cadence, thresholds, watched services/accounts, channels. An empty list is normal. |
integration_id, limit, response_format |
Read · read |
read-only |
get_alert_rule |
One alert rule by id (filtered from the list client-side). |
alert_id (req), integration_id, response_format |
Read · read |
read-only |
list_triggered_alerts |
The firing history — both cost-rule firings and budget-threshold crossings in one feed: subject, type, when, trigger vs. baseline value, delivery status. An empty list is normal. |
since (ISO date), severity — filters by delivery status (delivered/failed/suppressed), not a severity level, limit (1–500), response_format |
Read · read |
read-only |
| Tool |
What it does |
Key parameters |
R/W · scope |
Annotation |
list_integrations |
The org’s provider integrations / cloud connections — each with id, name, provider (aws/anthropic/openai/…), and status. Use it to find the integration_id other tools accept for scoping. |
limit, response_format |
Read · read |
read-only |
get_integration |
One provider integration by id (id, name, provider, status, plus every field in detailed mode). |
integration_id (req), response_format |
Read · read |
read-only |
trigger_integration_ingest |
Kicks off (or re-runs) the on-demand data-ingest job for one integration. |
integration_id (req), confirm (req) |
Write · admin:write |
write · additive · idempotent |
| Tool |
What it does |
Key parameters |
R/W · scope |
Annotation |
list_notification_channels |
The org’s notification channels — each with channel_id, channel_name, channel_type (slack/teams/email/webhook), and enabled. Use it to find the channel_id that delete/test need. |
limit, response_format |
Read · read |
read-only |
create_notification_channel |
Creates a notification channel for cost alerts. |
channel_name (req), channel_type (req: slack/teams/email/webhook), destination (req: webhook URL or email), confirm (req) |
Write · admin:write |
write · additive |
delete_notification_channel |
Removes a channel by id — it stops receiving alerts. |
channel_id (req), confirm (req) |
Write · admin:write |
write · destructive · idempotent |
test_notification_channel |
Sends a real test message to a channel — recipients will see it. |
channel_id (req), confirm (req) |
Write · admin:write |
write · additive · side-effecting |
| Tool |
What it does |
Key parameters |
R/W · scope |
Annotation |
send_invite |
Invites a person to the org by email. |
email (req), role (viewer/contributor/admin/super_admin; default contributor), message, confirm (req) |
Write · admin:write |
write · additive |
cancel_invite |
Revokes a pending invite — it can no longer be accepted. |
invite_id (req), confirm (req) |
Write · admin:write |
write · destructive · idempotent |
update_organization_name |
Renames the organization. |
org_id (req), organization_name (req), confirm (req) |
Write · admin:write |
write · additive · idempotent |
update_organization_preferences |
Updates org preferences (e.g. currency, language, dismissed_quick_setup). |
org_id (req), preferences (req), confirm (req) |
Write · admin:write |
write · additive · idempotent |
Use these to learn the valid filter values before querying.
| Tool |
What it does |
Key parameters |
R/W · scope |
Annotation |
get_metadata |
All three filter vocabularies in one call: available service codes, tag keys, and linked accounts ({ accountId, accountName }). |
integration_id, limit, response_format |
Read · read |
read-only |
get_available_services |
The AWS service codes the org has cost data for (the valid service filter values). |
integration_id, limit, response_format |
Read · read |
read-only |
get_available_tag_keys |
The cost-allocation tag keys available for grouping/filtering. |
integration_id, limit, response_format |
Read · read |
read-only |
get_available_linked_accounts |
The linked AWS accounts as { accountId, accountName } pairs — to resolve ids ↔ names and find valid account_id filters. |
integration_id, limit, response_format |
Read · read |
read-only |
| Group |
Read tools |
Write tools |
| Cost |
query_costs |
— |
| AI spend |
get_ai_spend |
— |
| Savings |
get_savings, get_recommendation_history |
update_recommendation_status |
| Anomalies |
list_anomalies, investigate_anomaly, get_weekly_cost_slices, list_anomaly_dismissals |
dismiss_anomaly, undismiss_anomaly |
| Budgets |
get_budgets, get_budget, get_budget_status |
create_budget, update_budget, delete_budget |
| Commitments |
list_commitments, get_expiring_commitments |
— |
| Tag coverage |
get_tag_coverage |
— |
| Allocation |
get_allocation_breakdown, list_cost_centers, list_allocation_rules |
— |
| Reports |
list_saved_reports, get_report |
— |
| Alerts |
list_alert_rules, get_alert_rule, list_triggered_alerts |
— |
| Integrations |
list_integrations, get_integration |
trigger_integration_ingest |
| Notifications |
list_notification_channels |
create_notification_channel, delete_notification_channel, test_notification_channel |
| Org & invites |
— |
send_invite, cancel_invite, update_organization_name, update_organization_preferences |
| Discovery |
get_metadata, get_available_services, get_available_tag_keys, get_available_linked_accounts |
— |
| Total |
29 |
14 |
Not yet available (coming soon): async report generation — both
generate_report (creating a job) and get_report_job_status (polling it) ship
together as one unit. See the Changelog.