Plutus
Server Details
Query cloud, AI and SaaS spend across 25+ providers: costs, budgets, anomalies, unit economics.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
29 toolsget_cost_entriesARead-onlyIdempotentInspect
Fetch 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 returns. A row also carries native_cost/native_currency — what the provider actually billed, for reconciling against their invoice. Those are the one exception to the USD rule here: never sum or compare native_cost across rows, and never quote it without naming the row's native_currency. Unlike query_costs, there is no cost_metric parameter here — cost is always billed cost, never amortized.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | ||
| startDate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate a safe, read-only, idempotent operation. The description adds important behavioral context beyond that: cost is always in USD and billed (never amortized), rows include native_cost/native_currency, and native_cost must never be summed or quoted without naming its currency. This is exactly the kind of non-obvious behavior an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, sibling distinction, USD rule, native fields, and the billed-cost caveat. Key information is front-loaded, and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only two-parameter endpoint with no output schema, the description covers return-value semantics, currency rules, and how it differs from query_costs. The only meaningful gap is the lack of explicit date-parameter guidance, which prevents a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema descriptions are empty, so the description must explain startDate/endDate. It only says 'over a date range' and never names the parameters, their format, timezone handling, or whether they are effectively required. The agent is left guessing about how to supply these arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Fetch raw per-service cost entries... over a date range (unaggregated).' It explicitly distinguishes itself from query_costs by calling out that it returns unaggregated individual rows, so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit routing directive: 'Prefer query_costs for time-bucketed/aggregated spend — this is for inspecting individual rows.' It further clarifies the lack of a cost_metric parameter compared to query_costs, making the when-to-use decision unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dashboardARead-onlyIdempotentInspect
Fetch 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 set_dashboard_widgets if you want to keep some of what's already there rather than replacing the whole set — that tool always replaces everything.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_id | Yes | A shared dashboard id from list_dashboards |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful structural context (widgets reference catalog_id; customMetrics/customCharts are inline) and warns about set_dashboard_widgets' replace-all behavior, but does not disclose additional behavioral traits like pagination, authorization, or error characteristics. This is typical baseline value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. It front-loads the core function, then adds essential structural detail, then closes with a practical usage warning. Every sentence earns its place and the content is easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only, idempotent fetch operation, this description is complete. It identifies what is returned, how widget references are resolved, and how the tool relates to set_dashboard_widgets. No output schema exists, but the description covers the return contents sufficiently for an agent to know what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter dashboard_id is fully documented in the schema as 'A shared dashboard id from list_dashboards', giving 100% schema coverage. The description reinforces that the dashboard is org-shared but adds no new parameter-level meaning. Baseline 3 per the rubric is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and a specific resource ('one org-shared dashboard's full layout'), then enumerates the exact contents: placed widgets, custom metrics, custom charts, and grid positions. This clearly distinguishes it from sibling list_tools like list_dashboards or list_dashboard_widget_catalog.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to call this tool: before set_dashboard_widgets when preservation of existing items is desired, because that tool always replaces everything. This is concrete, actionable routing guidance that names the alternative and the condition for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_alert_channelsARead-onlyIdempotentInspect
List 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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as readOnly, idempotent, and non-destructive. The description adds meaningful behavioral detail beyond annotations by explicitly stating that credentials/URLs are never returned, only id/type/name/enabled state. This addresses privacy/security expectations without contradicting any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences deliver the essential information: the operation and resource, the practical use case, and the output confidentiality constraint. There is no fluff or repetitive content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list tool with complete annotations, the description covers purpose, output shape, security behavior, and a usage scenario. No output schema exists, but the description provides the key return fields. Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema description coverage, so the input schema already fully documents the empty parameter set. The description compensates by clarifying the output fields (id/type/name/enabled state), which is the relevant semantic information for an agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List this account's alert notification channels', enumerating channel types (Slack/Teams/webhook/email). It clearly distinguishes these from sibling tools like list_alert_subscriptions and list_alert_deliveries by focusing on channels themselves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete use case: 'need a channel's id to call create_alert_subscription'. This implies when this tool is useful, though it does not explicitly state when not to use it or name alternatives. The context is clear enough for an agent to select this over related list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_alert_deliveriesARead-onlyIdempotentInspect
List 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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows, most recent first (default: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds valuable behavioral details: it only covers recent history, does not include delivery error text, and corresponds to a specific API endpoint. This goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The core purpose is front-loaded, followed by a useful exclusion and an API reference that aids discoverability. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with one optional parameter and rich annotations, the description is fully sufficient. It explains what the tool does, what data it surfaces, a key exclusion, and the underlying endpoint, so an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the only parameter, limit, is fully described in the schema with default and ordering semantics. The tool description adds no parameter-specific details, which is acceptable given the schema already carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb and resource: list recent alert delivery history. The parenthetical clarifies what question it answers (did it fire, did it send successfully), and 'deliveries' clearly distinguishes it from sibling tools like list_alert_channels and list_alert_subscriptions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: use this to inspect whether alerts actually fired and sent successfully, mirroring the Alerts page's delivery heatmap. It does not explicitly name alternatives or list when-not-to-use conditions, but the purpose is distinct enough that an agent can infer appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_alert_subscriptionsARead-onlyIdempotentInspect
List which alert channels are subscribed to which trigger (a specific budget's spend_threshold, or account-wide event_overage/cost_anomaly). Mirrors GET /api/accounts/:accountId/alert-subscriptions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the core safety profile is covered. The description adds useful context about the subscription-to-trigger relationship and the mirrored API endpoint, but does not disclose other behavioral traits such as pagination, account scope, or response shape. This meets but does not exceed the expected bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence that front-loads the core purpose before adding the trigger detail and API mirror. Every clause earns its place, and there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list operation with strong annotations and clear purpose, the description is complete enough for an agent to invoke it correctly. No output schema exists, but the tool's name and description adequately convey that it returns subscription relationships without needing detailed return documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there are no parameter semantics to document. The description references the trigger and alert-channel concepts, which helps the agent understand the domain, and schema description coverage is 100% by virtue of having no properties. Baseline 4 is appropriate for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: listing which alert channels are subscribed to which trigger, and enumerates the trigger types (budget spend_threshold, account-wide event_overage/cost_anomaly). This clearly separates it from sibling list_alert_channels, which would list channels themselves rather than subscription relationships.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives like list_alert_channels or list_alert_deliveries. The intended use is implied by the resource, but there is no direct statement of conditions, exclusions, or why this should be preferred in a given situation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_anomaliesARead-onlyIdempotentInspect
List 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 "did anything spike" — the detector already accounts for day-of-week baselines and an absolute-dollar noise floor that a naive comparison would miss or over-trigger on.
Capped at 200 rows, most recent first; days (default 30, max 90) bounds the lookback. kind is "service" or "tag". current_cents/baseline_cents/delta_cents are the USD base. suppressed: true means a human has marked this exact signature (provider+service, or tag_key+tag_value) as expected — mention it but do not lead with it as a live problem. driven_by is null when driver attribution was not measured for this anomaly (a service anomaly, or a grain with no service) and [] when it WAS measured and found no dominant driver — those mean different things. correlated_events is the service-anomaly counterpart: deploy/incident/release activity that was unusual (above the account's own baseline rate) in the 2-day window ending on the spike day, ranked by share of that excess. Same null-vs-[] distinction — null is "not measured" (a tag anomaly, or a row recorded before this shipped), [] is "measured and nothing was unusual". It is account-scoped and temporal: it does NOT claim the event caused this particular service's spend to rise, so report it as activity that lines up, never as a cause. notified: false means this anomaly was recorded but withheld from alerting because its tag_key was already at the per-run notify cap. Mirrors GET /api/accounts/:accountId/anomalies.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Trailing lookback window in days (default: 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only and idempotent, and the description adds substantial behavioral context: results are capped at 200 rows, ordered most recent first, account-scoped, and not causal despite correlated_events. It also carefully explains the null-vs-empty-array distinction for driven_by and correlated_events, and the meaning of suppressed and notified=false—valuable information not derivable from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence adds necessary operational detail, from high-level purpose to field-level null semantics. It front-loads the core purpose and sibling distinction before diving into output details, and it is organized logically rather than as a random field dump.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of explaining return semantics—and it does so thoroughly: row cap, ordering, field meanings, suppressed handling, null-vs-empty distinctions, notified=false semantics, and the non-causal interpretation of correlated_events. An agent has enough to interpret and present results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is only one parameter, days, and the schema already documents its type, range, and default. The description adds that days 'bounds the lookback' and restates default/max, but does not meaningfully go beyond the schema. With 100% schema coverage, this meets the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List detected cost anomalies for this account over a trailing lookback window.' It also distinguishes itself from query_costs by emphasizing that results are the detector's real output, not recomputed raw spend. This makes the tool's identity immediately clear even among many list_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Prefer this over eyeballing query_costs for "did anything spike"' and explains why: the detector accounts for day-of-week baselines and an absolute-dollar noise floor. This gives an agent a concrete decision rule for when to choose this tool over a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_anomaly_suppressionsARead-onlyIdempotentInspect
List 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/deleting a suppression is not available over MCP.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, and the description aligns with those. It adds useful behavioral context beyond annotations: only active suppressions are returned, each item carries an expires_at field (null meaning indefinite), and the tool mirrors a REST endpoint while MCP write operations are unavailable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: definition of a suppression, the key expires_at field, and the MCP limitation. Information is front-loaded and no filler exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list tool with no output schema, the description is complete: it defines the items, the filtering to active ones, the expires_at semantics, and the endpoint equivalent. An agent can correctly invoke and interpret this tool without further clarification.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0 parameters, there are no parameter semantics to document. The baseline of 4 applies; the description correctly explains what the result represents so the agent understands the tool's purpose despite having no inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List'), resource ('anomaly suppressions'), and scope ('this account's active'). It clearly distinguishes this from sibling tools like list_anomalies by explaining these are human-marked-as-expected signatures that suppress detector findings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: this lists suppressions that are currently active and explains what a suppression is. It also states that creating or deleting suppressions is not available over MCP, which sets an explicit boundary, though it does not name alternative tools because none directly competes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_budgetsARead-onlyIdempotentInspect
List 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 amount_cents is denominated in it; spend_cents/projected_cents are in status_currency, the budget's currency as of the rollup that wrote them. Never quote any of these figures as dollars without checking those two fields.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only/idempotent/non-destructive behavior, and the description adds important non-obvious behavioral detail: budgets carry their own currency, amounts are NOT converted to USD base, and spend/projected values are denominated in status_currency. The warning never to quote figures as dollars without checking those fields is exactly the kind of behavioral caveat that protects an agent from downstream errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and only adds necessary details: the mirrored endpoint and the critical currency semantics. Every sentence earns its place, and the warning is concise yet highly actionable. It is dense but not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only list tool with no output schema, the description covers the core return fields, status notions, and the crucial currency pitfall. It does not spell out the exact response container or pagination, but given the simple list nature and the endpoint mirror, the information is sufficient for correct invocation in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4 and there is no parameter burden to compensate for. The description still adds relevant context by implying the account is fixed ('this account') and mirroring GET /api/accounts/:accountId/budgets, which clarifies how the account is scoped even though no explicit parameter exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List this account's spend budgets' and further specifies the payload (current-cycle status, spend, projected total, states). It clearly separates itself from sibling tools by naming the exact domain: budgets with currency semantics distinct from cost tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context for when this tool is appropriate: listing this account's spend budgets with their current-cycle status. It also indirectly contrasts with 'cost tools' by warning that budget currencies are not converted to USD, which helps an agent avoid misusing this tool for dollar-normalized cost queries. It does not explicitly enumerate sibling alternatives or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commitment_utilizationARead-onlyIdempotentInspect
List 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 its net savings vs on-demand. Mirrors GET /api/accounts/:accountId/commitment-utilization.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly/idempotent/non-destructive, so the safety profile is covered. The description goes beyond that by disclosing the underlying source APIs, the monthly snapshot granularity, and the core outputs (utilization, coverage, net savings), which gives the agent useful behavioral context without contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, starting with the main action and resource. All three sentences contribute useful information: data source, aggregation, metric semantics, and API mirror. It is appropriately sized, though slightly dense and could be trimmed without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description reasonably explains what the tool returns—utilization/coverage snapshots and net savings vs on-demand—and references the mirrored REST endpoint. It does not describe exact response fields or pagination, but for a parameterless read-only list tool, this is sufficient for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters and schema description coverage is 100%, so the description is not required to explain parameter meaning. The description does add relevant account/month framing, but since there are zero parameters, the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and identifies a clear resource: Reservation (RI) and Savings Plan utilization/coverage snapshots. It also adds distinguishing context about the data source (AWS Cost Explorer APIs) and aggregation (one snapshot per commitment type per month), but it does not explicitly contrast itself with related siblings like list_savings_recommendations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when an agent needs RI/SP utilization, coverage, or savings vs. on-demand snapshots. However, it does not explicitly state when to prefer this over alternatives or mention any exclusions, so the guidance is more implicit than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cost_sourcesARead-onlyIdempotentInspect
List 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 rates, because it exposes no historical billing API; "estimated_from_static_rates" = an estimate built from a list-rate card Plutus maintains, which will not reflect rates the customer negotiated. Qualify any total that includes an estimated source rather than reporting it as billed spend.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnly/idempotent annotations by explaining the semantics of each possible cost_basis value, the limitations of estimate sources (no historical billing API, static rates ignoring negotiated discounts), and instructing the agent to qualify estimated totals rather than presenting them as billed spend.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: the first sentence states the primary action, and the second adds only essential detail about the cost_basis field. Every sentence contributes meaningfully, with no filler or repetition of annotation values.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with annotations already covering read-only/idempotent behavior, the description fully explains the domain-specific distinctions that matter when interpreting results. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool takes no parameters, so there are no parameter semantics to explain. The description correctly focuses on output semantics instead, which is the only meaningful guidance an agent needs here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (List), a specific resource (cost-source providers enabled for this account), and examples (AWS, GCP, Anthropic). It clearly distinguishes this from sibling list_* tools by focusing on providers rather than tags, alerts, budgets, or other resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys when to use it: when you need the enabled cost-source providers and their cost_basis meanings. It does not explicitly name alternatives or draw exclusion boundaries, but the provider-specific resource is unambiguous and no contradictory guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cost_source_tag_keysARead-onlyIdempotentInspect
List 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." cost-tag-rule match could reference before creating one. Only ever populated on grain='service' rows. Omit cost_source_id to search across every enabled provider.
| Name | Required | Description | Default |
|---|---|---|---|
| cost_source_id | No | Restrict to one provider, e.g. "gcp" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond those: results are restricted to tag/label keys 'actually present' in cost data and 'Only ever populated on grain='service' rows.' This helps the agent understand result scoping without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it states what is returned, why it is useful, a critical scoping caveat, and the parameter omission behavior in just two sentences. Every clause earns its place and no information is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple optional-parameter read-only tool with no output schema, this description is complete: it explains the result, the account/data scope, the grain='service' limitation, the use case, and the default behavior of searching all providers. An agent has enough context to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful nuance by explaining that omitting cost_source_id searches across every enabled provider and that the parameter restricts to a single provider like 'gcp'. This enriches the schema's terse 'Restrict to one provider' text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'List distinct provider-native tag/label keys actually present in this account's cost data.' It names AWS Cost Allocation Tags, GCP/Hetzner labels, and Azure tags, and clarifies it returns keys rather than values or rules, which distinguishes it from sibling tools like list_cost_source_tag_values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use case: discovering what a 'tags.<key>' cost-tag-rule match could reference before creating one. It also explains the optional parameter's behavior ('Omit cost_source_id to search across every enabled provider'). It does not explicitly list when-not-to-use or name alternatives, but the context strongly implies the right selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cost_source_tag_valuesARead-onlyIdempotentInspect
List distinct values seen for one provider-native tag/label key (see list_cost_source_tag_keys) in this account's cost data.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_name | Yes | A tag key returned by list_cost_source_tag_keys, e.g. "team" | |
| cost_source_id | No | Restrict to one provider, e.g. "gcp" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the tool's safety profile is established. The description adds useful context about operating within 'this account's cost data' and being 'provider-native', but it does not disclose additional behavioral details such as pagination, ordering, or limits. This is acceptable for a simple read-only list operation but adds limited behavioral depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the action and resource, and includes a useful cross-reference to the related keys tool. Every word earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with one required and one optional parameter, the description plus schema and annotations are complete. It explains the scope of data, points to the source of valid tag_key values, and the sibling reference resolves ambiguity about where keys come from. No output schema is present, but the return shape of a distinct-value list is reasonably inferable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are documented in the input schema. The description does not meaningfully add parameter semantics beyond referencing the tag/label concept and provider restriction, which the schema already conveys. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a clear resource ('distinct values seen for one provider-native tag/label key'), and explicitly references the sibling list_cost_source_tag_keys to distinguish keys from values. An agent can immediately tell this tool apart from the related 'keys' tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: after you have identified a tag key, you list its distinct values. It points to the sibling tool for key discovery, and the schema reinforces that tag_name must come from list_cost_source_tag_keys. It does not explicitly state when not to use it, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cost_tag_rulesARead-onlyIdempotentInspect
List 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 to "Untagged". Mirrors GET /api/accounts/:accountId/cost-tags/:tagKey/rules. IMPORTANT — a rule is NOT always a single assignment: when its splits field is non-null it is an array of {tag_value, weight} with weights summing to 1, and matched spend is divided across those tag_values by weight rather than going wholly to the rule's own tag_value. On a split rule, tag_value is only the rule's display label (e.g. "Shared EKS cluster") and no spend is attributed to it. Do not describe a rule with splits as assigning its spend to one team. Note also that some spend may be reallocated after these rules run — see list_cost_tags' redistribute_bucket.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_key | Yes | One of the tag_keys returned by list_cost_tags |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare read-only and idempotent behavior, and the description goes well beyond them by explaining priority ordering, first-match-wins semantics, the Untagged fallback, split-rule weighting, and the display-label nuance for split rules. It also warns about downstream reallocation, which is essential behavioral context not available from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then delivers a highly relevant warning about split rules. It is longer than average, but every sentence contributes meaningful information; the API mirror reference is mildly extra but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description covers all critical semantics: priority order, first-match-wins, Untagged fallback, split-rule behavior, and pointer to redistribute_bucket. An agent can understand what this tool returns and how to interpret it without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already describes tag_key as one of the tag_keys returned by list_cost_tags. The description reinforces that same relationship but does not add new format or syntax details, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: listing the actual match rules for one cost-allocation tag_key. It clearly distinguishes this from list_cost_tags by explaining that it shows the dimension-value-to-tag_value mapping and priority order, so an agent can select it correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when you need a specific tag_key's rules, and it points to list_cost_tags for obtaining valid tag_keys. It does not explicitly state when not to use it, but the context is strong enough to route the agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cost_tagsARead-onlyIdempotentInspect
List 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_bucket, when non-null, names a bucket (often "Untagged") whose spend is dissolved into the other tag_values in proportion to their own attributed spend in the same period — so that bucket will not appear in a query_costs breakdown for this tag_key, and the other values include a proportional share of it. It reappears only in periods where there was no other spend to redistribute against.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description explains potentially surprising behavior: each tag_key is locked to a cost_entries grain, rules map dimension values to tag_values, and redistribute_bucket dissolves 'Untagged' spend into other values and affects query_costs output. This is exactly the kind of non-obvious behavior an agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient: it states the resource, describes the returned fields, gives concrete usage guidance, and explains the redistribute_bucket edge case in three sentences. No filler or repetition of annotation facts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of explaining return values. It covers what each tag_key includes (grain, rule count, redistribute_bucket) and how it behaves in query_costs, making the tool fully navigable for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing for the description to add about parameters. The baseline of 4 applies and the description instead uses the space to clarify the returned tag_key metadata and redistribution semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List the virtual cost-allocation tag_keys defined for this account.' It clearly distinguishes these from source-tag tools like list_cost_source_tag_keys and from list_cost_tag_rules by explaining what kind of object is returned and what accompanies it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent how to use a listed tag_key with query_costs and breakdown_by: 'tag', which directly supports cross-tool usage. It does not explicitly state exclusions relative to sibling tools, but the intended context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dashboardsARead-onlyIdempotentInspect
List 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_widgets or delete_dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and non-destructive, and the description adds meaningful scope behavior: it lists only org-shared dashboards, excludes personal dashboards, and explains the ID limitation for personal dashboards. This goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The main action and scope are front-loaded, exclusions are explained, and the final sentence routes to related tools. Every sentence contributes necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only list tool, the description fully covers what is listed, what is excluded, why the exclusion exists, and how to use the results. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and the schema documents 100% coverage, so no parameter explanation is needed. The description correctly avoids inventing parameters and instead clarifies the output scope. Baseline 4 is appropriate for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action and resource ('List this account's org-shared dashboards') and clearly differentiates it from personal dashboards and downstream tools. The scope is unmistakable and it distinguishes itself from sibling tools like get_dashboard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states what is included and excluded, explains why personal dashboards are not addressable, and tells the agent how to use returned IDs with related tools. This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dashboard_widget_catalogARead-onlyIdempotentInspect
List 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 a trend chart on a dashboard, build one inline with a {"kind": "custom_chart", ...} spec instead of a catalog_id — see create_dashboard's description for that shape.
The response also carries grid_cols (the canvas width every widget's x/w is measured against) and size_bounds, the min/max w/h each widget TYPE (kpi/chart/widget — not each individual catalog_id) accepts when a spec overrides its default size — use these before calling create_dashboard/set_dashboard_widgets with an explicit w/h.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so no safety warning is needed. The description adds meaningful behavioral context beyond those flags: the response includes grid_cols and size_bounds, there is no preset chart type, and size_bounds apply per type rather than per catalog_id. This is exactly the kind of non-obvious behavior an agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense paragraphs, each earning its place. The first identifies the resource and the critical limitation (no preset charts). The second explains the useful response fields and how to use them. It is longer than a one-liner, but every sentence adds operational value and the core purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description covers the return payload's relevant fields: catalog_id, the supported kpi/widget types, grid_cols, and size_bounds. It also gives the cross-reference to create_dashboard for custom_chart specs. Nothing essential is missing for an agent to call the tool correctly and interpret its results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description needs to add nothing about inputs. The empty schema fully covers parameter semantics. The description instead usefully explains what the catalog entries reference and how the response fields should be consumed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List the built-in ("preset") dashboard widgets available to place with create_dashboard/set_dashboard_widgets.' It clearly distinguishes this catalog from the sibling list_dashboards by framing it as a widget catalog rather than a dashboard list, and it further separates preset entries from custom charts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains when this tool should be used: to find preset widget catalog_ids before calling create_dashboard/set_dashboard_widgets. It also names the alternative for trend charts ('build one inline with a {"kind": "custom_chart", ...} spec instead of a catalog_id') and tells the agent to consult grid_cols and size_bounds before supplying explicit w/h values.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_data_healthARead-onlyIdempotentInspect
List 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). status is only ever set on a successful sync and is never flipped back on failure, so is_overdue — not status — is the real signal that a connection has gone stale. Check this before asserting that recent cost or usage data is complete, especially right before calling query_costs or query_usage for a very recent date range. Mirrors GET /api/accounts/:accountId/data-health.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description reveals important behavior: status is only set on successful syncs and never flipped back on failure, so is_overdue is the real staleness signal. This is exactly the kind of non-obvious runtime behavior agents need.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each earning its place: the core purpose, the critical status/is_overdue nuance, and the concrete use case. The API endpoint reference is a useful bonus and does not bloat the description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool with no output schema, the description is complete: it states what is listed, which fields are meaningful, how to interpret the key signal, when to call it, and even the REST endpoint it mirrors. Nothing essential for correct invocation or interpretation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is fully covered, so there is no parameter gap to compensate for. The description still adds useful context by clarifying that the listing is account-scoped and that is_overdue is a computed signal based on the connection's effective sync interval.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List sync health for every cost/event/usage connection this account has.' It enumerates the returned fields and clearly distinguishes this health-monitoring tool from the many sibling list_* and query_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use the tool: check it before asserting recent cost/usage data is complete, especially before calling query_costs or query_usage for a recent date range. It also tells agents to rely on is_overdue rather than status, which prevents misinterpretation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dimensionsARead-onlyIdempotentInspect
List 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.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| dimension | Yes | ||
| start_date | No | ||
| cost_source_id | Yes | Provider id, e.g. "aws" — must be enabled for this account |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds scoping context ('distinct values ... for one provider') but does not disclose pagination, date-range behavior, or result limits. This is adequate given the annotations but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one sentence, front-loaded with the action and target, and includes a practical use case. No repetition of schema fields and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with rich annotations, the description plus schema covers core behavior, required parameters, and the shape of results ('distinct values'). It is missing explicit mention of optional date filtering and does not distinguish from list_usage_dimensions, but those are secondary gaps rather than blocking omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25%, with only cost_source_id documented. The description partly clarifies dimension via examples and cost_source_id via 'one provider', but it does not explain the optional start_date/end_date parameters, and it does not compensate for the sparsely documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('distinct values ... for a given dimension'), includes provider scoping, and connects to a concrete use case. However, it does not differentiate from the similar sibling list_usage_dimensions, and it lists only five example dimensions while the schema enum allows ten.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says the tool is 'useful for discovering filter values before calling query_costs', which gives clear when-to-use guidance. It does not mention when not to use it or name alternative tools, so it stops short of a full exclusion-based comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_event_facetsARead-onlyIdempotentInspect
List 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 /api/events/facets.
| Name | Required | Description | Default |
|---|---|---|---|
| attr | Yes | ||
| end_date | No | ||
| source_id | No | ||
| start_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true and destructiveHint false. The description adds useful behavior beyond that: currently only the 'repo' facet is supported, results mirror GET /api/events/facets, and it operates over a date range. It does not detail response shape or pagination, but the read-only annotation lowers that burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler: it says what the tool lists, the current facet constraint, and the intended use with query_events. The mention of the mirrored API endpoint is a compact, useful addition rather than repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only facet listing tool, the description is largely complete: it names the supported facet, clarifies the date-range context, and explains how to use it with query_events. The absence of an output schema is mitigated by the self-explanatory list operation, although source_id semantics and return shape remain undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies that attr currently means 'repo' and connects this to query_events' meta_repo filter, and it suggests start_date/end_date bound the date range. However, source_id is not explained, and date format or requiredness is left implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: list distinct values for a faceted event metadata field, with the concrete current example 'repo'. It clearly distinguishes itself from sibling list_* tools by tying it to event facets, Event Explorer, and query_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says the tool is useful for discovering query_events' meta_repo filter values before calling query_events, which is a clear when-to-use signal. It does not enumerate alternatives or exclusions, but tthe sibing context makes those mostly unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_savings_recommendationsARead-onlyIdempotentInspect
List active cost-reduction recommendations for this account — sourced from each provider's own already-computed engine (AWS Cost Explorer, Azure Advisor, GCP Recommender), not something Plutus computes itself. type is one of: terminate (an idle resource to shut down), modify (an overprovisioned one to downsize), commitment_savings_plan or commitment_reservation (a commitment worth buying — an AWS Savings Plan / Reserved Instance, Azure reservation or savings plan, or GCP committed use discount). Commitment rows have no current_instance_type/recommended_instance_type — they are a purchase, not an instance swap; their term, payment option, lookback window and hourly commitment are in detail. Only one term/payment/lookback variant per commitment is surfaced (AWS: 30-day lookback, 1-year, no upfront — Cost Explorer's own console default), so do not report these as the only commitment options available. Mirrors GET /api/accounts/:accountId/savings-recommendations. Each recommendation carries the provider's own figure in its own currency; the total is in USD (stated in the response's currency field), since providers may bill in different ones.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and non-destructive, and the description adds substantial behavioral detail beyond that: Plutus does not compute recommendations itself, commitment rows represent purchases rather than instance swaps, only one term/payment/lookback variant is surfaced, and currency handling differs between individual recommendations and the total. These are exactly the non-obvious behaviors an agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, type taxonomy, commitment-row distinction, single-variant caveat, API mapping, and currency behavior. It is front-loaded with the core action and then layers caveats in a logical order, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters and no output schema, the description carries the full burden of explaining what the agent will receive. It covers the recommendation types, the special shape of commitment rows, the one-variant limitation, and the currency semantics. Nothing essential is missing for an agent to invoke and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no input parameters, so the description has no parameter semantics to explain; baseline 4 applies. It does add useful semantics about the returned `type` enum and the contents of `detail`, which helps with output interpretation even though no output schema is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: list active cost-reduction recommendations for this account. It clearly distinguishes the tool from siblings by stating these recommendations come from each provider's own engine (AWS Cost Explorer, Azure Advisor, GCP Recommender), not from Plutus itself. The detailed `type` taxonomy further removes ambiguity about what the tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong contextual guidance for interpreting results, especially the caveat that only one commitment variant is surfaced and should not be treated as exhaustive. It does not explicitly name alternative sibling tools or state when not to use this tool, but the specificity of the semantics effectively routes an agent to this endpoint for provider-computed savings recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scheduled_reportsARead-onlyIdempotentInspect
List 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/scheduled-reports. Creating/editing a scheduled report is not available over MCP.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description goes beyond annotations by stating account scoping, explaining the meaning of `next_period_label`, mirroring the REST endpoint, and explicitly noting that create/edit operations are not exposed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight, purposeful sentences. The first sentence front-loads the tool's purpose and return contents, the second clarifies a field's meaning, and the third gives endpoint context and an important limitation. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only list operation with no output schema, the description is complete: it states what is returned, the account-level scope, the meaning of a key field, and what is not possible over MCP. The annotations cover safety, so no additional behavioral disclaimers are needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero input parameters and the schema covers 100%, so the baseline of 4 applies. The description adds a small bonus by clarifying a response field (`next_period_label`), which is helpful despite there being no input parameters to document.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('this account's scheduled cost digests'), and immediately clarifies the account scope. It also names the concrete fields returned, which clearly distinguishes this tool from the many list_* siblings that target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool: whenever the agent needs the account's scheduled report definitions. It also explicitly warns that creating/editing is not available over MCP, preventing misuse, though it does not name an explicit sibling alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tag_recommendationsARead-onlyIdempotentInspect
List 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_spend_cents (USD base) it would newly cover. Mirrors GET /api/accounts/:accountId/tag-recommendations. Accepting or dismissing a recommendation is a UI/REST-only action, not available over MCP.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and destructiveHint, so the description is not required to restate safety. It adds valuable behavioral context: recommendations are only listable over MCP, accepting/dismissing is UI/REST-only, and each item includes estimated_monthly_spend_cents. This goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but tightly structured. The first sentence states the tool's purpose and the two main recommendation sources; the second sentence explains the key output field; the third clarifies API mirroring and MCP limitations. Every clause earns its place without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description carries the burden of explaining return values. It explains the central returned field and the overall suggestion types, which is sufficient for a no-input list tool. It stops short of describing the full shape of a recommendation object (e.g., tag_key, tag_value, source), but the lack of parameters and the read-only annotations make this a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter semantics burden. The description still adds meaning to the output by defining the key returned field, estimated_monthly_spend_cents, as USD-base spend that would newly be covered. This satisfies the 0-parameter baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: "List suggested cost-allocation tag rules this account doesn't have yet." It further clarifies what kinds of suggestions are included, distinguishing itself from tools like list_cost_tags and list_cost_tag_rules by emphasizing recommendations that are not yet present.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context for when to use this tool: when seeking new tag-rule suggestions, including high-spend 'Untagged' values or provider-native tags. It points to list_cost_tags as a related sibling and explicitly notes that accept/dismiss actions are not available over MCP, preventing misuse. It could be stronger with an explicit when-not-to-use statement against list_savings_recommendations, but the scope is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_teamsARead-onlyIdempotentInspect
List 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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive. The description adds useful behavioral context by revealing the account-level scope, the included fields (members and tag_value), and the downstream budget relationship. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences lead with the action and resource, then add the crucial budget-scoping relationship. Every sentence earns its place; there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only list tool with no output schema, the description is complete: it states the scope, the returned data, and an important use case. An agent can understand when and why to invoke it without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter schema to document. The description still adds context by noting the account scope and the mirrored endpoint, making the tool's implicit input clear. This meets the baseline for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a clear resource ('this account's teams'), and the exact data returned (members and cost-tag tag_value). It also distinguishes itself from the many sibling list_* tools by focusing on teams and their role in team-scoped budgets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly connects this tool to a concrete use case: resolving team IDs for create_budget calls with scope_type: 'team'. It does not state when not to use it, but since no sibling tool lists teams, the usage context is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_unit_metricsARead-onlyIdempotentInspect
List 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), denominator_metric names the usage metric counting the business units, and denominator_scale is the readability factor the ratio is quoted at (1, 1000 or 1000000). Pass an id to query_unit_costs to compute one over a date range.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive behavior, so the description only needs to add context around the data access. It adds that the tool returns saved, account-scoped metric definitions rather than live computations, which is useful and does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, starts with the core action, and uses examples and backticked field names efficiently. It is slightly dense with domain terminology, but every sentence contributes to understanding what is listed and what to do next.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with no output schema, the description does a good job of explaining the returned metric structure and the relationship to query_unit_costs. It could more explicitly state the output shape (e.g., an array of metric definitions), but the current text is sufficient for correct invocation and interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4. The description adds meaningful context by explaining the fields of the returned metrics — numerator_scope, denominator_metric, denominator_scale — and pointing out that an id feeds into query_unit_costs. This helps an agent interpret results, even though these are not input parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource — 'List this account's saved unit-economics metrics' — and immediately defines what those metrics are with concrete examples. It also distinguishes itself from the sibling query_unit_costs by noting that an id would be passed there for computation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear pointer to query_unit_costs for computing a metric over a date range, which implies the intended division of labor. It does not explicitly state exclusions or exhaustive when-to-use guidance, but the context is clear enough for an agent to pick the right tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_usage_dimensionsARead-onlyIdempotentInspect
List 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 known, falling back to the id itself). Mirrors GET /api/usage/dimensions.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ||
| dimension | Yes | ||
| start_date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds value beyond that by disclosing the output shape (raw value paired with label), the label fallback logic for external_customer_id, and that it mirrors a GET endpoint. This is meaningful behavioral context without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three efficient sentences with the core purpose front-loaded, followed by output details and endpoint reference. Every sentence earns its place; there is no filler or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with strong annotations and only three params, the description covers purpose, when to use it, output entry structure, and label semantics. It does not discuss pagination or response limits, but that is not critical for a discovery-oriented list tool and the description is otherwise complete enough to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the dimension enum values and the role of start_date/end_date as a date range, but it does not specify date formats, optionality, or edge-case behavior. The parameter names are self-explanatory and the description adds enough for basic invocation, but gaps remain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: listing distinct values for a usage dimension over a date range. It also distinguishes the tool from query_usage by stating it is useful for discovering filter values before querying, and the endpoint mirror adds precise grounding. This clearly differentiates it from sibling list tools like list_dimensions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit context: use this to discover filter values before calling query_usage. It does not enumerate when-not-to-use cases or name alternatives like list_dimensions, but the intended workflow is clear and sufficient for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_costsARead-onlyIdempotentInspect
Query 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 Anthropic api_key_id) where a provider's cost/usage API can group by it; not every provider populates it. Mirrors the GET /api/analytics endpoint used by the Plutus dashboard charts. All amounts are in USD, converted from each provider's own billing currency at the rate in effect on the day of the charge; the response states this in its currency field.
A row carries cost_basis only when its cost figure is an estimate rather than a real invoiced charge — e.g. Anthropic's identity-grain rows, priced from Anthropic's own published per-token rates because Anthropic's cost API has no per-key breakdown at all. Absent (null) cost_basis means the figure is invoiced. Always qualify an estimated figure as such when relaying it — do not present it with the same confidence as an invoiced one.
Where a provider reports usage alongside cost, a row also carries quantity and its unit (e.g. tokens, GB-month), plus a derived cost_per_unit in that same USD base. Always read cost_per_unit together with cost_per_unit_label, which names the denominator it is quoted against: token costs are quoted per 1,000 tokens ("per 1k tokens", cost_per_unit_scale: 1000), NOT per single token. All four fields are null when the provider reports no usage, and also when the rows behind a group carry more than one unit — a total mixing tokens and GB-month is not a quantity, so none is given.
The response also carries coverage.complete_through: cost data for the newest periods often has not landed yet (it arrives hours-to-a-day after the period it covers), so rows may end before end_date without that being a gap in spend — the newest period(s) simply aren't complete yet. coverage.lagging_sources, when non-empty, names a cost source that is behind or has stopped reporting; recent periods will under-count its spend. Unlike query_unit_costs, rows is NOT truncated to the horizon here — treat complete_through as a caveat on the newest bucket(s), not evidence anything is missing from the rows themselves.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_key | No | Required when breakdown_by is "tag" — one of the tag_keys returned by list_cost_tags | |
| end_date | No | ISO-8601 end of the date range (exclusive) | |
| group_by | No | Time bucket size (default: day) | |
| start_date | No | ISO-8601 start of the date range (inclusive) | |
| cost_metric | No | Which cost figure to sum (default: "billed"). "amortized" spreads prepaid commitments (AWS Reserved Instances/Savings Plans, Azure reservations) across the term they cover instead of showing the full charge on the day it was billed. Only AWS, FOCUS and Azure sources ever differ from billed — every other provider writes amortized equal to billed, and that is the true figure for a SaaS subscription or LLM API, not a fallback. Amortized data only exists from 2026-08-04 onward and cannot be backfilled; rows before that date are billed-as-amortized regardless of which value is passed here. Not supported by get_cost_entries. | |
| breakdown_by | No | Dimension to break spend down by, or "tag" to break down by a virtual cost-allocation tag_key (see list_cost_tags) — requires tag_key. | |
| filter_region | No | Restrict to these region values | |
| filter_cluster | No | Restrict to these cluster values | |
| filter_service | No | Restrict to these service values | |
| cost_source_ids | No | Restrict to these provider ids (defaults to all enabled providers) | |
| filter_identity | No | Restrict to these identity values | |
| filter_workload | No | Restrict to these workload values | |
| filter_namespace | No | Restrict to these namespace values | |
| filter_operation | No | Restrict to these operation values | |
| filter_usage_type | No | Restrict to these usage_type values | |
| filter_resource_id | No | Restrict to these resource_id values | |
| filter_linked_account | No | Restrict to these linked_account values | |
| secondary_breakdown_by | No | A second dimension to break spend down by simultaneously with breakdown_by. Only pairs that some provider actually stores together on the same row are supported — e.g. (service, region), (service, linked_account), (usage_type, operation), and Kubernetes' (namespace, workload) — any other pair returns an error. Not applicable when breakdown_by is "tag". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior, so the description is free to add critical behavioral nuance: estimate-vs-invoiced semantics via cost_basis, quantity/unit/cost_per_unit caveats, currency conversion, coverage.complete_through lag, and lagging_sources. These go well beyond the structured annotations and materially change how a caller should interpret results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every paragraph earns its place by addressing a distinct interpretation risk: what the tool returns, how to treat estimated costs, and how to interpret incomplete coverage. It is front-loaded with the core action and then layers caveats in a logical order without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 18 parameters, no output schema, and a complex cost-reporting domain, the description is exceptionally complete. It explains currency, estimate status, unit semantics, coverage lag, differences from sibling tools, and unsupported combinations. An agent has enough context to invoke it correctly and interpret results responsibly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful parameter-level meaning, especially around cost_metric: amortized only differs for AWS/FOCUS/Azure, is unavailable before 2026-08-04, and cannot be backfilled. It also clarifies secondary_breakdown_by pairing constraints and the tag_key relationship, which the schema alone does not fully convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'Query time-bucketed spend for this account,' and immediately distinguishes itself from related tools by naming the dimensions it can break down by, the tag path, and the mirrored endpoint. It also contrasts behavior with query_unit_costs and get_cost_entries, so an agent can tell sibling tools apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use and when-not-to-use guidance: it references list_cost_tags for tag keys, notes that amortized data is 'Not supported by get_cost_entries,' and explicitly contrasts its row-truncation behavior with query_unit_costs. It also warns about unsupported secondary_breakdown_by pairs, which prevents misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_eventsARead-onlyIdempotentInspect
Query 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/Event Explorer charts. Always scope with start_date/end_date: there is no pagination and results are capped at 5000 rows (oldest-first), so an unscoped query over a long history may be silently truncated. Carries no cost figure. Mirrors GET /api/events.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Free-text, case-insensitive substring match against the event title | |
| end_date | No | ISO-8601 end of the date range (inclusive) | |
| meta_repo | No | Restrict to these GitHub repos (metadata.repo) — only narrows events that carry a repo; events with no repo (e.g. Salesforce onboarding/churn) are unaffected regardless of value | |
| source_id | No | Restrict to one event source, e.g. "github", "pagerduty", "jira" | |
| event_type | No | Restrict to these event types, e.g. "issue_created", "deploy" | |
| start_date | No | ISO-8601 start of the date range (inclusive) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent/non-destructive annotations by disclosing operational behavior: results are capped at 5000 rows, ordered oldest-first, can be silently truncated without date scoping, and include no cost figure. This is exactly the kind of non-obvious behavior an agent needs to invoke the tool safely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, each earning its place: purpose with source examples, critical scoping caveat, cost distinction, and API reference. No filler or redundant restatement of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only query tool with a fully self-describing schema, the description covers source breadth, filtering expectations, result limits, ordering, truncation risk, and the lack of cost data. The 'Mirrors GET /api/events' reference also gives the agent an external anchor for return behavior without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all six parameters with 100% coverage, so the baseline is 3. The description adds meaning for start_date/end_date by explaining why they are essential and linking them to truncation and ordering behavior, which the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Query this account's business-event timeline'), enumerates supported event sources, and differentiates itself from cost queries by noting it 'Carries no cost figure.' It also ties itself to the Cost/Event Explorer charts and the GET /api/events endpoint, making its scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs the agent to 'Always scope with start_date/end_date' and explains the consequences of not doing so: no pagination, 5000-row cap, and silent truncation. It also provides a clear when-not signal ('Carries no cost figure') and indicates this is the event-timeline query rather than a cost query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_unit_costsARead-onlyIdempotentInspect
Compute 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 denominator, a raw count with no currency), and unit_cost.
CRITICAL: unit_cost is null whenever it could not be computed, and null does NOT mean zero. It means one half of the fraction is missing for that period — either no usage was ingested (a telemetry gap) or no cost data has landed yet. Do not describe a null unit cost as a cost of zero, and do not average nulls in as zeroes; the coverage block reports how many rows are affected and why. Always read unit_cost together with denominator_label (e.g. "per 1k requests"), which names what it is quoted against — a per-1k figure reported as a per-request figure is wrong by three orders of magnitude.
The series stops at coverage.complete_through rather than at the requested end_date whenever cost data for the newest periods has not arrived yet (it lands hours-to-a-day after the period it covers, while usage telemetry is pushed live). A short series is therefore normal and is NOT evidence that spend or usage stopped — say what it is complete through instead. coverage.lagging_sources, when non-empty, is the opposite case: a cost source that is behind or has stopped reporting, so recent periods are missing its spend and their unit costs read lower than the truth.
If numerator_status.available is false, the cost source this metric measured has been removed from the account and rows is empty. That is a broken definition, not a period of zero spend — never report it as costs having fallen.
Amounts are billed cost, never amortized, regardless of any cost_metric used elsewhere. A tag-scoped metric inherits that tag_key's allocation policy, so its numerator may include a redistributed share of shared spend (see list_cost_tags' redistribute_bucket) and will not match a raw dimension total.
A metric whose denominator_mode is "per_customer" returns one row per (period, customer) and a customers block splitting them into matched, cost_without_usage (spend attributed to a customer who is not sending telemetry) and usage_without_cost (telemetry from a customer whose spend is not being allocated). Those two lists are the honest caveat on any per-customer figure and are worth mentioning when either is non-empty.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ISO-8601 end of the date range (exclusive) | |
| group_by | No | Time bucket size (default: day) | |
| start_date | No | ISO-8601 start of the date range (inclusive) | |
| unit_metric_id | Yes | id of a metric returned by list_unit_metrics |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint and idempotentHint, the description adds substantial behavioral context: null unit_cost means missing data rather than zero, series truncation at coverage.complete_through is normal, lagging sources lower unit costs, and an empty rows with numerator_status.available=false means a broken metric, not zero spend. These caveats go well beyond the annotations and materially prevent misinterpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every paragraph earns its place by addressing a distinct, high-stakes misinterpretation risk: null semantics, missing newest data, lagging sources, broken definitions, allocation policy, and per-customer caveats. It is front-loaded with the core purpose and the most critical null warning immediately after.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description carries the full burden of explaining the response—and it does: return fields, null meaning, coverage block, numerator_status, per-customer row structure, and currency conventions. It also links to list_unit_metrics for ID resolution and list_cost_tags for allocation policy. Nothing essential for correct invocation and interpretation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all four parameters, so the baseline is 3. The description does not add much parameter-level detail, though it enriches the meaning of the result (unit_cost, denominator_label, coverage) and references list_unit_metrics for unit_metric_id. It relies on the schema for parameter syntax, which is acceptable given full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a precise verb ('Compute'), a specific resource ('one of this account's saved unit-economics metrics'), and a distinguishing formula ('cost divided by business units'). It also names list_unit_metrics as the source of metric IDs, which separates it from siblings like query_costs or query_usage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes when the tool is appropriate: for saved unit-economics metrics over a date range, and it points to list_unit_metrics for valid IDs. It also warns about differences from raw dimension totals and amortized cost, which implies alternatives without explicitly saying 'use query_costs for raw spend.' This is clear context but lacks a direct when-not-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_usageARead-onlyIdempotentInspect
Query 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 is a raw count with no currency — never treat it as money. Optionally broken down by external_customer_id when the pushed rows carry one. Mirrors GET /api/usage.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | ISO-8601 end of the date range (exclusive) | |
| group_by | No | Time bucket size (default: day). "hour" is only supported for ranges of 7 days or less. | |
| start_date | No | ISO-8601 start of the date range (inclusive) | |
| breakdown_by | No | ||
| filter_metric | No | Restrict to these metric names | |
| filter_source_id | No | Restrict to usage pushed/synced under these usage-source ids | |
| filter_external_customer_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral context beyond that: the data is pushed/synced backend telemetry, `quantity` must never be treated as currency, and external_customer_id breakdown only applies 'when the pushed rows carry one.' This is useful, though it does not cover response pagination or full return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence states the tool's core purpose and scope, followed by a necessary money-handling warning, a breakdown note, and an API mirror reference. Every sentence contributes valuable information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given seven optional parameters, no output schema, and many sibling tools, the description does a strong job covering purpose, raw/cost distinction, currency caveat, and optional breakdown. It still leaves a small gap around what the query response contains beyond `quantity` and any pagination behavior, but the description plus schema and annotations are sufficient for correct tool selection and basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 71%, so most parameters are already documented. The description supplements this by explaining the semantic framing ('raw count, no currency') and the external_customer_id breakdown condition, which helps for breakdown_by. However, it does not add meaningful guidance for filter_external_customer_id or clarify the meaning of the two undocumented parameters beyond their inferable names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Query') and resource ('time-bucketed usage telemetry'), and narrows the scope to data 'this account's own backend has pushed or synced in.' It also distinguishes itself from related unit-economics tools by saying the data is 'inspected directly rather than through a pre-defined ratio' and warns that `quantity` is a raw count, not money.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly positions this tool as the raw-data counterpart to cost or ratio metrics, even pointing to list_unit_metrics/query_unit_costs as related alternatives. It does not explicitly enumerate when to prefer query_events or query_costs, but the 'raw count with no currency' warning and 'rather than through a pre-defined ratio' phrase provide usable routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
29 tool updates
- First observed
get_cost_entries - First observed
get_dashboard - First observed
list_alert_channels - First observed
list_alert_deliveries - First observed
list_alert_subscriptions - First observed
list_anomalies - First observed
list_anomaly_suppressions - First observed
list_budgets - First observed
list_commitment_utilization - First observed
list_cost_source_tag_keys - First observed
list_cost_source_tag_values - First observed
list_cost_sources - First observed
list_cost_tag_rules - First observed
list_cost_tags - First observed
list_dashboard_widget_catalog - First observed
list_dashboards - First observed
list_data_health - First observed
list_dimensions - First observed
list_event_facets - First observed
list_savings_recommendations - First observed
list_scheduled_reports - First observed
list_tag_recommendations - First observed
list_teams - First observed
list_unit_metrics - First observed
list_usage_dimensions - First observed
query_costs - First observed
query_events - First observed
query_unit_costs - First observed
query_usage
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
FinOps MCP: query allocated, correlated cloud and AI cost across AWS, GCP, Azure and Snowflake.
Cloud cost visibility and savings recommendations grounded in your actual AWS, GCP and Azure bill.
Ask your AI assistant a cost question. Get allocation, correlation, and explanation in one response. Costory connects Claude, Codex, or Cursor to normalized cost data across AWS, GCP, Azure, Datadog, OpenAI, and Anthropic. https://costory.io Free trial 14 days, 250 USD / month up to 10M Spend
Cloud cost + FinOps knowledge for AI agents: AWS/Azure/GCP optimisation, AI spend, waste playbooks.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables natural language analysis of AWS cloud costs, waste audits, and budget insights across multiple profiles and regions.MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to analyze cloud billing data in FOCUS format through natural language queries. Provides 36+ predefined cost analysis queries, custom SQL execution, and schema documentation for multi-cloud cost optimization and FinOps practices.11Apache 2.0
- AlicenseAqualityAmaintenanceQuery AI spending data from LLMKit. Track costs, budgets, usage stats, and session summaries across 11 AI providers.1121116MIT
- AlicenseAqualityBmaintenanceKubernetes cluster cost analysis and optimization. Query costs, find savings opportunities, get rightsizing recommendations, and analyze pod spend across AKS, EKS, and GKE — directly from Claude612Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Tools are organized by resource (budgets, alerts, anomalies, dashboards, cost tags, recommendations), so most are clearly separable. The cost-tag cluster and the dimension/facet listers are the places where an agent could misselect by name, though descriptions resolve the ambiguity.
All tools use snake_case verb_noun names with a clear convention: get_ fetches specific items, list_ enumerates collections, and query_ runs time-bucketed or analytical queries. The pattern holds across all 29 tools with no camelCase or mixed verb styles.
29 tools is well past the typical 3–15 sweet spot and even past the 16–25 heavy band, so the surface feels sprawling despite having few duplicates. Each tool maps to a distinct endpoint, but the sheer number makes it a heavy set for an agent to select from.
The read-side is strong: costs, usage, tags, budgets, alerts, anomalies, dashboards, recommendations, and data health are all queryable. However, the surface is almost entirely read-only, and descriptions reference absent tools like create_budget, create_alert_subscription, create_dashboard, set_dashboard_widgets, and delete_dashboard, creating dead ends. That is a significant gap for a cost-management platform.