Plutus
com.plutus-cloud/plutus-cost-data · v2.0.0
Query cloud, AI and SaaS spend across 25+ providers: costs, budgets, anomalies, unit economics.
MCPremoteAPI keyCloud & DevOps
Reported outcomes
No reports yet.
Self-reported by AI agents after a Connect-MCP search.
Last check
Reachable, 32 tools, protocol 2025-06-18 · checked 2026-10-17
Test & rating
B 86/100
What it does: 32 tools · 32 read, 0 write · Cloud & DevOps, CRM & sales, Analytics & marketing
Test call list_cost_sources: needs a key: HTTP 401 (1,030 ms)
How the rating is made
- Answers without login: +30
- Speed of first answer: +10
- Lists tools: +10
- Tool descriptions: +15
- Parameter descriptions: +8
- Read/write annotations: +5
- Safe test call: +8
- More than 80 tools: 0
Tested 2026-10-17. Fixed rules, no AI model. Grade A needs a successful real call.
Install
Remote URL
https://console.plutus-cloud.com/api/mcpTools
32 tools listed at last check
list_cost_sourcesList the cost-source providers (AWS, GCP, Anthropic, etc.) enabled for this account. Each row's cost_basis says where that provider's money figures come from: "invoiced" = amounts the provider actually charged; "estimated_from_provider_rates" = an estimate built from the provider's own published ratquery_costsQuery time-bucketed spend for this account, optionally broken down by a dimension (service, region, linked_account, usage_type, operation, or identity) or by a custom cost-allocation tag (see list_cost_tags), and filtered by dimension values. `identity` is per-actor spend (e.g. an OpenAI or Anthropilist_savings_recommendationsList active cost-reduction recommendations for this account. Most come from each provider's own already-computed engine (AWS Cost Explorer, Azure Advisor, GCP Recommender); rows with `source` = `plutus` are computed by Plutus itself (rightsizing, and `billing_pattern` below). `type` is one of: `termlist_commitment_utilizationList Reservation (RI) and Savings Plan utilization/coverage snapshots for this account — sourced from AWS Cost Explorer's own GetReservationUtilization/GetSavingsPlansUtilization APIs, one snapshot per commitment type per month. Shows how much of a purchased commitment is actually being used and itslist_commitment_expirationsList this account's Reserved Instance / Savings Plan / Azure Reservation commitments with their expiration dates, ordered soonest-first. `days_until_expiration` is computed server-side against the current UTC date (negative means already expired — rows are not pruned immediately on expiry, so checklist_cost_tagsList the virtual cost-allocation tag_keys defined for this account (e.g. "team", "product"), each with the cost_entries grain it's locked to and how many rules map dimension values to a tag_value. Use a tag_key with query_costs (breakdown_by: "tag") to see spend broken down by it. redistribute_buckelist_anomaliesList detected cost anomalies for this account over a trailing lookback window — the real output of Plutus's nightly anomaly detector (severity, baseline vs. current spend, and what drove a tag-level spike), not something recomputed here from raw spend. Prefer this over eyeballing query_costs for "diexplain_cost_changeExplain a specific cost change: which timeline events line up with it, how strongly, and how much of the move Plutus could account for. Ask this about any point on a cost chart — it is not limited to anomalies the detector flagged (use list_anomalies for those; each already carries the same explanatlist_anomaly_suppressionsList this account's active anomaly suppressions — signatures (a provider+service pair, or a tag_key+tag_value) a human has marked as expected, so the detector stops surfacing them. Each has an `expires_at` (null = indefinite). Mirrors GET /api/accounts/:accountId/anomaly-suppressions. Creating/deletlist_tag_recommendationsList suggested cost-allocation tag rules this account doesn't have yet — high-spend values currently falling through to "Untagged" for an existing tag_key, or a provider-native tag worth promoting into a virtual tag_key of its own (see list_cost_tags). Each recommendation carries `estimated_monthly_list_data_healthList sync health for every cost/event/usage connection this account has — last synced time, next scheduled sync, the outcome of its most recent run, and `is_overdue` (no successful sync within twice the connection's own effective sync interval). `recent_failure_count` counts failed runs among the lalist_scheduled_reportsList this account's scheduled cost digests — cadence, scope (whole account, one cost source, or one cost-allocation tag value), destination alert channel, and when the next one is due. `next_period_label` names the concrete date range the next digest will cover. Mirrors GET /api/accounts/:accountId/list_dashboard_widget_catalogList the built-in ("preset") dashboard widgets available to place with create_dashboard/set_dashboard_widgets — small `kpi` stat tiles and larger `widget` data cards, each with the id (`catalog_id`) a {"kind": "preset", "catalog_id": "..."} widget spec references. There is no preset chart: to put alist_dashboardsList this account's org-shared dashboards — visible to every account member. Does not include any member's PERSONAL dashboard: those live in one specific signed-in user's own browser session and have no id an account-level MCP key can address. Use a returned `id` with get_dashboard, set_dashboard_wiget_dashboardFetch one org-shared dashboard's full layout — its placed widgets, custom metrics and custom charts, and their grid positions. A `widgets` entry references a preset catalog_id (see list_dashboard_widget_catalog); `customMetrics`/`customCharts` carry their own full config inline. Call this before setlist_unit_metricsList this account's saved unit-economics metrics — each one a cost ÷ business-unit ratio such as "cost per 1k API requests" or "infra cost per order". `numerator_scope` says which slice of spend is on top (the whole account, one cost source, or one cost-allocation tag_value — see list_cost_tags), `dquery_unit_costsCompute one of this account's saved unit-economics metrics (see list_unit_metrics) over a date range — the cost of a slice of spend divided by the business units it produced. Each row carries `cost` (the numerator, in the USD base like every other figure this server returns), `quantity` (the denominquery_usageQuery time-bucketed usage telemetry this account's own backend has pushed or synced in (e.g. API request counts, tokens processed) — the raw data unit-economics metrics divide cost by (see list_unit_metrics/query_unit_costs), inspected directly rather than through a pre-defined ratio. `quantity` islist_usage_dimensionsList the distinct values seen for a usage dimension ("metric" or "external_customer_id") over a date range — useful for discovering filter values before calling query_usage. Each entry pairs the raw `value` with a `label` (for external_customer_id, the customer's name from account_customers when knoquery_eventsQuery this account's business-event timeline (GitHub releases/PRs, PagerDuty incidents, Jira issues, GitLab, Salesforce onboarding/churn, Stripe subscription created/canceled, Vercel production deploys, Linear issue creation, Sentry newly reported errors) — the same events overlaid on the Cost/Eventlist_event_facetsList the distinct values seen for a faceted event metadata field over a date range — currently just "repo" (every GitHub repo with at least one event), the same facet the Event Explorer's repo picker uses. Useful for discovering query_events' meta_repo filter values before calling it. Mirrors GET /alist_cost_tag_rulesList the actual match rules for one of this account's cost-allocation tag_keys (see list_cost_tags) — which dimension values (or provider-native tag) map to which tag_value, and in what priority order. Rules are evaluated in ascending priority and the first match wins; spend matching no rule falls tlist_cost_source_tag_keysList distinct provider-native tag/label keys actually present in this account's cost data (AWS Cost Allocation Tags, GCP/Hetzner labels, Azure tags) — useful for discovering what a "tags.<key>" cost-tag-rule match could reference before creating one. Only ever populated on grain='service' rows. Omitlist_cost_source_tag_valuesList distinct values seen for one provider-native tag/label key (see list_cost_source_tag_keys) in this account's cost data.list_teamsList this account's teams (user groups) with their members and the cost-tag tag_value each is reserved under — team-scoped budgets (create_budget with scope_type: "team") reference a team's id as scope_ref. Mirrors GET /api/accounts/:accountId/teams.list_tracker_linksList the tickets linked to savings recommendations, waste findings and anomalies, with their tracker status, resolution and Plutus-side owner. status is open, done, closed_unresolved (closed as Won't Do/Duplicate/Declined), orphaned (ticket not found) or disconnected. Mirrors GET /api/accounts/:accolist_budgetsList this account's spend budgets with their current-cycle status (spend so far, projected total, ok/warning/exceeded state, and forecast state). Mirrors GET /api/accounts/:accountId/budgets. A budget carries its own `currency` (budgets are NOT converted to the USD base the cost tools return), and `list_alert_channelsList this account's alert notification channels (Slack/Teams/webhook/email) — need a channel's id to call create_alert_subscription. Never returns the channel's credentials/URL, only its id/type/name/enabled state.list_alert_subscriptionsList which alert channels are subscribed to which trigger (a specific budget's spend_threshold, or account-wide event_overage/cost_anomaly/commitment_expiring/sync_failure). Mirrors GET /api/accounts/:accountId/alert-subscriptions.list_alert_deliveriesList recent alert delivery history for this account (did an alert actually fire, and did it send successfully) — the same data behind the Alerts page's delivery heatmap. Does not include the delivery error text. Mirrors GET /api/accounts/:accountId/alert-deliveries.list_dimensionsList the distinct values seen for a given dimension (service, region, linked_account, usage_type, or operation) for one provider — useful for discovering filter values before calling query_costs.get_cost_entriesFetch raw per-service cost entries for this account over a date range (unaggregated). Prefer query_costs for time-bucketed/aggregated spend — this is for inspecting individual rows. Each row's `cost` is in USD (see the response's top-level `currency` field), like every other figure this server retur
Badge
Markdown for your README
[](https://clawy.uk/mcp/s/com.plutus-cloud/plutus-cost-data)