Skip to main content
Glama

Server Details

Free browser-based calculators and analyzers for cloud cost, DevOps, security, and data governance.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
44.6% over 76 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

B3.2/5.0

Scored across 31 tools

Disambiguation3/5

Several tool clusters overlap heavily: error-budget-calculator and slo-burn-rate-calculator both compute SLO burn/budget, dora-metrics-calculator subsumes change-failure-rate, deployment-frequency and mttr calculators, and alert-fatigue-calculator and on-call-burden-calculator both target on-call strain. Descriptions give distinct inputs, so an agent can usually pick correctly, but boundaries are fuzzy for these pairs.

Naming Consistency5/5

Every tool is kebab-case with a consistent resource+role pattern (X-calculator, X-checker, X-scanner, X-linter, X-estimator, X-auditor). No camelCase or verb-style drift; the naming is fully predictable.

Tool Count2/5

31 tools is well above the 25-tool threshold the rubric treats as too many for the apparent scope. While each is a distinct micro-utility, the surface is sprawling and mixes unrelated domains (cost, SLO, security scanning, ML metrics) with no clear scoping rationale.

Completeness3/5

As a stateless calculator grab-bag there is no CRUD lifecycle to complete, and coverage across cost, SLO, DORA, linting and secret scanning is broad. However, the mix is arbitrary and uneven, with clustered duplicates (two on-call tools, two cost-optimization tools) and no principled domain boundary, so it reads as a partial collection rather than a complete surface.

Available Tools

31 tools
alert-fatigue-calculatorAlert Fatigue CalculatorA
Read-onlyIdempotent
Inspect

Use when a user asks about alert noise, alert fatigue, or on-call burden from non-actionable alerts. Given weekly alert volume, actionable %, engineer count, and avg resolution time, returns noise rate, wasted hours, and fatigue tier.

NameRequiredDescriptionDefault
actionable_pctYesactionable expressed as a percentage.
engineer_countYesengineer count used by this deterministic tool.
alerts_per_weekYesalerts per week used by this deterministic tool.
avg_resolution_minYesavg resolution min used by this deterministic tool.

Output Schema

NameRequiredDescription
next_stepYes
output_tierYes
signal_valueYes
fatigue_indexYes
next_step_urlYes
remaining_pctYes
why_follow_upYes
interpretationYes
noise_rate_pctYes
affiliate_contextNo
computation_basisYes
annual_wasted_hoursYes
noise_alerts_per_weekYes
wasted_hours_per_weekYes
burden_per_engineer_hoursYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the full safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is low. The description usefully adds that it is a deterministic computation and names the three return values, though an output schema already exists, so that disclosure is largely redundant rather than additive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the triggering condition followed by inputs and outputs. No filler, no repetition, and the most decision-relevant information leads.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple deterministic calculator with a complete schema, full annotations, and an output schema, the description covers what an agent needs to invoke it correctly. The only omission is guidance on how it relates to the near-identical on-call-burden-calculator sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters. The description merely restates them (weekly alert volume, actionable %, engineer count, avg resolution time) with no added syntax, units, or edge-case guidance beyond what the schema provides — the expected baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (alert fatigue / noise) and spells out both the inputs consumed and outputs produced (noise rate, wasted hours, fatigue tier). However, it does not differentiate itself from its close sibling on-call-burden-calculator, which is a notable gap given it claims 'on-call burden' as a trigger phrase.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening 'Use when a user asks about alert noise, alert fatigue, or on-call burden from non-actionable alerts' gives clear triggering context. It stops short of naming exclusions or pointing to the overlapping on-call-burden-calculator, which is exactly the kind of disambiguation this sibling set needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apdex-score-calculatorApdex Score CalculatorA
Read-onlyIdempotent
Inspect

Use this when a user asks about their Apdex score or wants to measure user satisfaction with response times. Takes satisfied, tolerating, and total request counts; satisfied plus tolerating may not exceed total. Returns the Apdex score (0–1) and its rating on the published five-band scale: excellent, good, fair, poor or unacceptable.

NameRequiredDescriptionDefault
totalYesAll requests in the sample, including frustrated ones (slower than 4T or failed).
satisfiedYesRequests answered within the target threshold T.
toleratingYesRequests answered between T and 4T.

Output Schema

NameRequiredDescription
ratingYes
next_stepYes
apdex_scoreYes
rating_bandYes
next_step_urlYes
satisfied_pctYes
total_samplesYes
why_follow_upYes
frustrated_pctYes
interpretationYes
tolerating_pctYes
affiliate_contextNo
computation_basisYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds a genuine behavioral constraint beyond that: 'satisfied plus tolerating may not exceed total', which tells the agent about an input invariant it must respect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: the trigger first, then inputs/constraint and output. Nothing is redundant and it is front-loaded with the usage condition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still summarizes what comes back (score 0–1 plus five-band rating), and the input invariant is covered. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3), and the description goes further by stating the cross-parameter constraint that satisfied + tolerating cannot exceed total, which no single property description in the schema expresses.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Apdex score calculator') and frames the outcome it produces (user satisfaction with response times). Among the many *-calculator siblings, the Apdex domain is unambiguous, so an agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit triggering condition: 'Use this when a user asks about their Apdex score or wants to measure user satisfaction with response times.' That is clear context, though it names no alternatives or when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

availability-sla-calculatorAvailability SLA Downtime CalculatorA
Read-onlyIdempotent
Inspect

Use this when a user asks what a specific availability percentage (like 99.9% or 99.99%) means in downtime minutes per month or year. Converts availability SLA percentage to exact downtime budgets: annual, monthly, weekly, and daily.

NameRequiredDescriptionDefault
availability_pctYese.g. 99.9 for three nines

Output Schema

NameRequiredDescription
next_stepYes
next_step_urlYes
why_follow_upYes
interpretationYes
affiliate_contextNo
availability_tierYes
computation_basisYes
annual_downtime_minutesYes
weekly_downtime_minutesYes
monthly_downtime_minutesYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered. The description adds that four time windows are computed, which is mildly useful context, but says nothing about precision, rounding, or edge cases for out-of-range percentages.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, with the triggering user question front-loaded before the functional summary. Every clause carries information and there is no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, pure-computation tool with an output schema and full annotation coverage, the description supplies everything an agent needs to decide to call it and what to pass. Return-value details are correctly delegated to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With a single parameter and 100% schema description coverage, the schema already documents availability_pct including its format ("e.g. 99.9 for three nines"). The description's "like 99.9% or 99.99%" merely echoes that format, adding no new semantics such as valid bounds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — converting an availability SLA percentage into downtime budgets — with the scope of outputs enumerated (annual, monthly, weekly, daily). This is clearly distinguishable from sibling calculators like error-budget-calculator or slo-burn-rate-calculator, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use this when a user asks what a specific availability percentage (like 99.9% or 99.99%) means in downtime minutes per month or year" gives an explicit, concrete trigger condition. There is no when-not guidance and no named alternative tool for adjacent questions, which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

canonical-url-auditorCanonical URL AuditorA
Read-onlyIdempotent
Inspect

Audit a page URL against its canonical tag. Detects missing canonical, self-referencing canonical, and relative URL issues.

NameRequiredDescriptionDefault
page_urlYesThe page URL being audited
canonicalYesThe canonical URL found in the page (empty string if missing)

Output Schema

NameRequiredDescription
issueYes
page_urlYes
severityYes
next_stepYes
next_step_urlYes
why_follow_upYes
interpretationYes
recommendationYes
canonical_foundNo
affiliate_contextNo
computation_basisYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is settled. The description adds genuine value by enumerating the detection categories, though it does not say how relative-URL issues are resolved or reported (handled by the output schema).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste; the core action is front-loaded and the detection list follows immediately. Nothing redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, idempotent, closed-world tool with full schema coverage and an output schema, the description covers both inputs and the outputs it produces. Nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters are documented in the schema, including the empty-string convention for a missing canonical. The description adds no syntax or format detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Audit a page URL against its canonical tag') and enumerates exactly the three conditions detected (missing, self-referencing, relative URL). This clearly distinguishes it from the calculator/linter/scanner siblings, none of which touch SEO canonicalization.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the description's scope but there is no explicit when-to-use, when-not-to-use, or named alternative. An agent can infer this audits a single page's canonical setup, but nothing routes it against siblings or states preconditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

certificate-expiry-checkerCertificate Expiry CheckerA
Read-onlyIdempotent
Inspect

Assess certificate expiry risk given a domain and days remaining. Returns risk level (OK, WARNING at <30 days, CRITICAL at <7 days, EXPIRED at <0).

NameRequiredDescriptionDefault
domainYesDomain name (e.g. "api.example.com")
days_remainingYesDays until certificate expires

Output Schema

NameRequiredDescription
domainYes
next_stepYes
risk_levelYes
next_step_urlYes
why_follow_upYes
days_remainingYes
interpretationYes
affiliate_contextNo
computation_basisYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=true, idempotent=true, openWorld=false, destructive=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the exact risk-tiering thresholds (WARNING <30 days, CRITICAL <7, EXPIRED <0), which tell the agent how the tool reasons about its input.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the purpose front-loaded and the return semantics second. Every clause carries information an agent can act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A pure two-parameter computation with full schema coverage, safety annotations, and an output schema, so return format needn't be explained. It is essentially complete, with only the missing usage context as a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 goes further by tying meaning to the days_remaining value through the threshold bands, letting an agent anticipate the outcome for a given input rather than just pass a number through.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Assess') and resource ('certificate expiry risk') plus the exact inputs it consumes ('domain and days remaining'). It is immediately distinguishable from siblings like known-vulnerability-checker or dockerfile-linter without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no mention of when this is NOT appropriate, and no alternatives named among the large sibling set of calculators. The only hint is the input phrasing 'given a domain and days remaining', which specifies inputs rather than usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

change-failure-rate-calculatorChange Failure Rate CalculatorA
Read-onlyIdempotent
Inspect

Use when a user asks about change failure rate or DORA CFR. Given total and failed deployments, returns failure rate percentage and DORA tier.

NameRequiredDescriptionDefault
total_deploysYestotal deploys used by this deterministic tool.
failed_deploysYesfailed deploys used by this deterministic tool.

Output Schema

NameRequiredDescription
next_stepYes
dora_ratingYes
output_tierYes
total_countYes
failed_countYes
signal_valueYes
next_step_urlYes
remaining_pctYes
why_follow_upYes
interpretationYes
affiliate_contextNo
computation_basisYes
change_failure_rate_pctYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so the safety profile is fully covered by structured fields. The description adds only the output shape (percentage + DORA tier), which is already covered by the output schema — a modest addition, not a rich behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the invocation trigger front-loaded before the behavioral statement. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations covering safety, a 100%-covered schema for the two params, and an output schema covering returns, the description only needs the trigger and it delivers it. The remaining gap is the lack of routing against the closely overlapping dora-metrics-calculator sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented in the schema. The phrase 'total and failed deployments' names the two inputs in prose but adds no units, units-of-time, or constraint detail beyond the schema — the baseline 3 is correct when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('returns failure rate percentage and DORA tier' from deployment counts), and the CFR framing narrows it against generic siblings. It does not explicitly distinguish itself from the overlapping dora-metrics-calculator, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use when a user asks about change failure rate or DORA CFR' gives a clear, explicit trigger condition. However it names no alternative (e.g., dora-metrics-calculator for the full metric suite) and gives no when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cloud-waste-calculatorCloud Waste CalculatorA
Read-onlyIdempotent
Inspect

Use when a user asks about cloud waste, idle resources, or unattached storage. Given monthly cloud bill and idle/oversized percentages, returns waste estimate and tier.

NameRequiredDescriptionDefault
idle_pctNoidle expressed as a percentage.
oversized_pctNooversized expressed as a percentage.
monthly_cloud_billYesmonthly cloud bill used by this deterministic tool.
unattached_volumes_countNounattached volumes count used by this deterministic tool.

Output Schema

NameRequiredDescription
next_stepYes
waste_pctYes
annualizedYes
do_savingsYes
idle_wasteYes
output_tierYes
monthly_costYes
signal_valueYes
next_step_urlYes
why_follow_upYes
interpretationYes
oversized_wasteYes
unattached_costYes
affiliate_contextNo
computation_basisYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safe/pure-calculator profile is fully covered by structured data. The description adds that it produces a 'waste estimate and tier', but that return detail is also covered by the output schema, so incremental behavioral disclosure is thin. A 3 reflects adequate but minimal added context given the low bar set by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste, with the usage trigger front-loaded before the input/output summary. Nothing superfluous and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a deterministic calculator with a present output schema and fully described parameters, the description covers when to invoke it, what it consumes, and what it returns. The only gap is that it does not address how the optional inputs (unattached volumes vs. percentages) combine or whether results are exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters, and the baseline is 3. The description mentions 'monthly cloud bill and idle/oversized percentages' but omits unattached_volumes_count and adds no syntax, unit, or interaction detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb+resource ('returns waste estimate and tier' for a cloud-waste calculation) and scopes it with 'cloud waste, idle resources, or unattached storage', which distinguishes it from cost-adjacent siblings such as ec2-cost-calculator and rightsizing-calculator. It stops short of explicitly contrasting those siblings, so it is clear but not maximally differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening 'Use when a user asks about cloud waste, idle resources, or unattached storage' gives concrete trigger conditions an agent can pattern-match on. It does not name exclusions or point to alternatives (e.g., rightsizing-calculator for pure rightsizing questions), leaving some routing ambiguity among the many cost calculators.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cluster-capacity-calculatorKubernetes Cluster Capacity CalculatorA
Read-onlyIdempotent
Inspect

Use this when a user asks for Kubernetes cluster capacity. Uses the same node vCPU, node memory, node count, system reserve, and target utilization model as the browser calculator.

NameRequiredDescriptionDefault
node_vcpuYesnode vcpu used by this deterministic tool.
node_countYesnode count used by this deterministic tool.
node_mem_gbYesnode mem in gigabytes.
system_reserve_pctNosystem reserve expressed as a percentage.
target_utilization_pctNotarget utilization expressed as a percentage.

Output Schema

NameRequiredDescription
raw_vcpuYes
next_stepYes
node_countYes
output_tierYes
usable_vcpuYes
signal_valueYes
next_step_urlYes
raw_memory_gbYes
remaining_pctYes
why_follow_upYes
interpretationYes
usable_memory_gbYes
affiliate_contextNo
computation_basisYes
allocatable_factorYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered structurally. The description adds only that the tool is deterministic and reuses the browser calculator's model, which is mild context but not a disclosure the agent couldn't infer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, with the trigger condition front-loaded before the model-fidelity note. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be explained, and the annotations cover safety. What remains thin is guidance on parameter interaction and defaults, but for a deterministic calculator with fully documented inputs, the description is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters, and the description merely echoes their names. It adds no units, defaults, or interaction rules (e.g., how system_reserve_pct and target_utilization_pct combine) beyond what the schema states, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource (Kubernetes cluster capacity) and the trigger condition, so an agent can tell this apart from generic siblings like rightsizing-calculator or total-cost-of-ownership-calculator. It never uses an explicit verb like 'calculates', relying on the tool name for that, but the intent is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this when a user asks for Kubernetes cluster capacity' gives a clear, specific activation context. It stops short of naming alternatives or stating when not to use it (e.g., versus rightsizing or node-count planning tools), so it lands at clear-context-without-exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

connection-pool-calculatorDatabase Connection Pool CalculatorA
Read-onlyIdempotent
Inspect

Use this when a user asks how many database connections to configure. Uses the same max_connections, app server count, database cores, average query duration, and peak RPS model as the browser calculator.

NameRequiredDescriptionDefault
db_coresYesdb cores used by this deterministic tool.
peak_rpsYespeak rps used by this deterministic tool.
app_serversYesapp servers used by this deterministic tool.
avg_query_msYesavg query ms used by this deterministic tool.
max_connectionsYesmax connections used by this deterministic tool.

Output Schema

NameRequiredDescription
statusYes
next_stepYes
next_step_urlYes
why_follow_upYes
interpretationYes
saturation_pctYes
affiliate_contextNo
computation_basisYes
per_app_pool_sizeYes
peak_concurrent_demandYes
recommended_pool_totalYes
estimated_connection_memory_mbYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety/determinism profile is fully covered. The description only adds that it shares the browser calculator's model, which is minor extra context; it says nothing about output shape or edge cases, but with annotations carrying the burden a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the trigger is front-loaded and the model reference follows. No filler, no repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and annotations cover the safety profile, so return values and behavioral traits need not be spelled out. The description covers the trigger and inputs adequately; it could note that the output is a recommended pool size, but for a deterministic calculator this is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 restates the five input names in prose (mapping 'app server count' to app_servers, etc.) but adds no units, ranges, or model semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific purpose — calculating how many database connections to configure — and enumerates the input model (max_connections, app servers, DB cores, query duration, peak RPS). It implicitly distinguishes itself from other calculators (cost, SLA, etc.) by naming the connection-pool domain, though it never states the verb 'calculates' explicitly and doesn't contrast with the closest sibling, cluster-capacity-calculator.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States a clear trigger condition ('when a user asks how many database connections to configure'), which is useful routing guidance among 30+ calculator siblings. It offers no exclusions or explicit alternatives, but the trigger is specific enough that an agent can select it confidently.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deployment-frequency-calculatorDeployment Frequency CalculatorB
Read-onlyIdempotent
Inspect

Use when a user asks about deployment frequency or DORA deploy cadence.

NameRequiredDescriptionDefault
team_sizeYesteam size used by this deterministic tool.
working_daysNoworking days used by this deterministic tool.
deploys_per_monthYesdeploys per month used by this deterministic tool.

Output Schema

NameRequiredDescription
next_stepYes
dora_ratingYes
output_tierYes
signal_valueYes
next_step_urlYes
remaining_pctYes
why_follow_upYes
interpretationYes
deploys_per_dayYes
deploys_per_weekYes
affiliate_contextNo
computation_basisYes
deploys_per_dev_per_dayYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered elsewhere. The description adds nothing behavioral on top — no mention of determinism, required inputs, or what the computed result represents — so it contributes almost no value beyond the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short, front-loaded sentence with zero padding, which is structurally clean. But the brevity comes at the cost of substance — this reads as under-specification rather than disciplined conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and annotations plus 100% schema coverage carry the parameter and safety burden, so the description needn't explain return values. Still, it never states what the calculator produces (e.g., deploys per day per team member), which is the one piece of context the surrounding structured data does not supply.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters (deploys_per_month, team_size, working_days) are already documented, and the description adds no additional meaning or interaction notes. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the domain ('deployment frequency', 'DORA deploy cadence') but never states a verb or what the tool actually computes, leaving the action to be inferred from the name alone. It also fails to distinguish itself from the sibling dora-metrics-calculator, which plausibly covers the same DORA cadence territory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The single sentence is explicitly a routing trigger ('Use when a user asks about deployment frequency or DORA deploy cadence'), which tells an agent the conversational condition for selecting it. However, it offers no when-not condition and does not address the overlapping dora-metrics-calculator sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detect-secrets-scannerSecrets ScannerA
Read-onlyIdempotent
Inspect

Scan text (config, code, env files) for leaked API keys, tokens, passwords, and private keys, plus static code-risk findings such as dynamic code execution, wildcard CORS, unsafe HTML sinks, process spawning and removed security guards. Returns findings with redacted matches and severity classification.

NameRequiredDescriptionDefault
textYesConfig, code, or env file content to scan. Do not submit live production secrets; rotate any real credential that appears here.

Output Schema

NameRequiredDescription
findingsYes
severityYes
next_stepYes
types_foundYes
finding_countYes
next_step_urlYes
why_follow_upYes
interpretationYes
code_risk_countYes
affiliate_contextNo
computation_basisYes
code_risk_findingsYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds genuinely new behavioral context: findings are returned with redacted matches and a severity classification, which tells the agent how output is shaped and that secrets are not echoed back in the clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence, front-loaded with the primary secret-detection purpose before the secondary static-risk enumeration. It is longer than strictly necessary due to the list of risk categories, but each clause maps to a real capability of the tool rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not detail return values, and it still summarizes them (redacted matches, severity). Input requirements are covered by the schema, and the description supplies enough scope for an agent to call this correctly without opening anything else.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'text' parameter is fully documented, including a maxLength and a warning about live production secrets. The description adds no syntax, format, or size guidance beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (scan) and resource (text/config/code/env content), then enumerates both the target artifacts (API keys, tokens, passwords, private keys) and the secondary static-risk checks. This clearly distinguishes it from sibling linters like dockerfile-linter or kubernetes-manifest-linter, which operate on specific manifest formats rather than arbitrary text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(config, code, env files)' implies the intended input contexts, so an agent can infer when the tool applies. However, it never states when to prefer it over adjacent tools such as known-vulnerability-checker, nor does it list any exclusions or prerequisites. Usage is implied rather than directed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dockerfile-linterDockerfile LinterA
Read-onlyIdempotent
Inspect

Lint a Dockerfile against a rule-based subset of Hadolint checks: untagged or :latest base images, interactive or unpinned apt-get installs, apt list cleanup, apk cache, ADD for local files, shell-form CMD/ENTRYPOINT, running as root and a missing HEALTHCHECK. Lines joined with a trailing backslash count as one instruction, and each issue reports its line in the original file.

NameRequiredDescriptionDefault
dockerfileYesDockerfile content (full or partial), up to 8,192 characters.

Output Schema

NameRequiredDescription
issuesYes
severityYes
next_stepYes
info_countYes
line_countYes
error_countYes
issue_countYes
next_step_urlYes
warning_countYes
why_follow_upYes
interpretationYes
affiliate_contextNo
computation_basisYes
instruction_countYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds substantive behavioral context beyond that: the specific rule set enforced, the backslash line-continuation parsing rule, and the fact that each issue is reported against its original line number.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and scope before drilling into the rule list, and the second sentence covers parsing/reporting semantics. The dense rule enumeration is long but each item earns its place by telling the agent what will be flagged.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be detailed, yet the description still notes that issues carry original-file line numbers. Combined with annotations covering safety and a fully documented single parameter, the definition is complete for correct invocation; only the sibling-boundary guidance is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is documented as 'Dockerfile content (full or partial), up to 8,192 characters.' The description adds meaning the schema does not, clarifying that multi-line joined instructions count as one and that issues map back to original file lines. Baseline would be 3 at full coverage; the added parsing semantics lift it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (lint), a specific resource (a Dockerfile), and the exact scope (a rule-based subset of Hadolint checks), then enumerates the rules checked. The Dockerfile resource inherently distinguishes it from the nearest sibling, kubernetes-manifest-linter, without the agent needing to open either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose strongly implies when to reach for it (a Dockerfile you want checked), so usage is implied rather than stated. There is no explicit when-not guidance and no naming of adjacent siblings like kubernetes-manifest-linter or detect-secrets-scanner, so an agent must infer the boundary itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dora-metrics-calculatorDORA Metrics CalculatorA
Read-onlyIdempotent
Inspect

Use this when a user wants to benchmark an engineering team against DORA metrics. Takes deploys per month, lead time in hours, change failure rate in percent and, optionally, time to restore in hours. Classifies each metric as elite, high, medium or low against fixed benchmark bands; an omitted restore time is reported as unknown and the overall profile is marked partial rather than assumed.

NameRequiredDescriptionDefault
lead_time_hoursYesLead time for changes, commit to production, in hours.
deploys_per_monthYesProduction deployments per month.
change_failure_pctYesShare of deployments that cause a failure in production, in percent.
restore_time_hoursNoTime to restore service after a failed change, in hours. Optional; when omitted the metric is reported as unknown.

Output Schema

NameRequiredDescription
mttr_tierYes
next_stepYes
assessmentYes
overall_tierYes
next_step_urlYes
why_follow_upYes
interpretationYes
lead_time_tierYes
metrics_assessedYes
affiliate_contextNo
computation_basisYes
deploy_frequency_tierYes
change_failure_rate_tierYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral value beyond that: fixed elite/high/medium/low benchmark bands, an omitted restore time surfacing as 'unknown', and the overall profile being marked 'partial rather than assumed' — a non-obvious handling of missing input.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, usage condition front-loaded, zero filler. The dense second sentence carries classification semantics and missing-input handling, all of which earn their place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape need not be described, and annotations cover the safety profile. The description supplies the missing conceptual layer — benchmark bands and partial-profile behavior — making the tool callable without ambiguity; only the sibling-routing gap keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters including units and the optional/unknown behavior of restore_time are already documented in the schema. The description restates the units and list of inputs but adds no syntax or format detail beyond the structured data. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('benchmark an engineering team against DORA metrics') and enumerates the four inputs it consumes. However, it never distinguishes itself from the many near-overlapping siblings such as deployment-frequency-calculator, change-failure-rate-calculator and mttr-calculator, so an agent must infer that this is the composite/all-four-metrics tool rather than the single-metric ones.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this when a user wants to benchmark an engineering team against DORA metrics' gives a clear triggering context, but there are no exclusions and no alternatives named. Given that siblings cover each DORA metric individually, an explicit 'for a single metric use X instead' would materially help routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ec2-cost-calculatorEC2 Cost CalculatorB
Read-onlyIdempotent
Inspect

Use when a user asks about EC2 cost. Given instance type and hours, returns monthly cost and DO-equivalent savings estimate.

NameRequiredDescriptionDefault
osNoos used by this deterministic tool.
instance_typeYesinstance type used by this deterministic tool.
hours_per_monthNohours per month used by this deterministic tool.

Output Schema

NameRequiredDescription
next_stepYes
do_savingsYes
annual_costYes
hourly_rateYes
output_tierYes
monthly_costYes
signal_valueYes
next_step_urlYes
why_follow_upYes
interpretationYes
affiliate_contextNo
computation_basisYes
do_equivalent_monthlyYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful context that it returns a DO-equivalent savings estimate, a behavior not evident from the name. It doesn't add constraints, defaults, or rate-limit context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the trigger front-loaded ahead of the return description; every clause earns its place. Minor imprecision: it implies hours is needed, yet only instance_type is required.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be re-explained, and annotations carry safety. Remaining gaps are the optional status/default of hours_per_month and os, plus no sibling routing among numerous cost calculators.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented in the schema, establishing the baseline of 3. The description mentions only instance type and hours, omitting os, and adds no format or default details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: returns monthly cost and a DO-equivalent savings estimate for EC2. It is clearly about EC2, which separates it from the many sibling cost calculators (egress, pipeline, query). However, it does not explicitly name or contrast against those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use when a user asks about EC2 cost" gives a clear trigger condition. But there is no when-not guidance and no routing to alternatives such as rightsizing-calculator or reserved-instance-breakeven, leaving the agent to infer boundaries among many overlapping cost tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

egress-cost-calculatorCloud Egress Cost CalculatorA
Read-onlyIdempotent
Inspect

Use this when a user asks about monthly internet egress cost from daily request volume, average response size, provider, and CDN offload. Uses the same model as the browser calculator.

NameRequiredDescriptionDefault
cdn_pctNocdn expressed as a percentage.
providerNoCloud provider whose published pricing model should be applied.
daily_requestsYesdaily requests used by this deterministic tool.
avg_response_kbYesavg response kb used by this deterministic tool.

Output Schema

NameRequiredDescription
cdn_pctYes
providerYes
cost_riskYes
next_stepYes
rate_per_gbYes
free_tier_gbYes
next_step_urlYes
why_follow_upYes
cdn_offload_gbYes
interpretationYes
daily_egress_gbYes
monthly_cost_usdYes
origin_egress_gbYes
affiliate_contextNo
computation_basisYes
monthly_egress_gbYes
billable_egress_gbYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile requires no description support. The description contributes one genuine behavioral claim - parity with the browser calculator's model - which is useful for trusting the output, but says nothing about pricing basis, rounding, or currency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the usage trigger front-loaded and the model-provenance note trailing. Every clause carries information the agent can act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and annotations cover the safety profile. Inputs are all enumerated and the deterministic nature is implied, but the description never states the pricing basis (published on-demand list prices) or what happens to provider/cdn_pct when omitted, which are minor but real gaps for a cost-figure tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and provider is an enum, so every parameter is already documented in the schema. The description merely restates the four inputs (daily request volume, average response size, provider, CDN offload) in prose, adding no format, unit, or default information beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific computation (monthly internet egress cost) plus the exact inputs that drive it, which cleanly separates it from cost siblings like ec2-cost-calculator or pipeline-cost-estimator. It stops short of naming any sibling it is not, so differentiation is inferred from the narrow domain rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening 'Use this when a user asks about...' is a concrete positive trigger, which is better than nothing. However there is no when-not guidance and no routing to alternatives such as ec2-cost-calculator for compute spend or cloud-waste-calculator, so the agent must infer the boundary itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

error-budget-calculatorSLO Error Budget CalculatorA
Read-onlyIdempotent
Inspect

Use this when a user asks about their SLO error budget, remaining error budget, or burn rate. Given SLO percentage and window, returns budget minutes remaining, burn rate multiplier, and status (Under budget / Elevated / ALERTING).

NameRequiredDescriptionDefault
slo_pctYesService-level objective target expressed as a percentage.
window_daysNoLength of the service-level objective window in days.
consumed_minutesNoconsumed in minutes.
window_elapsed_daysNowindow elapsed days used by this deterministic tool.

Output Schema

NameRequiredDescription
statusYes
burn_rateYes
next_stepYes
next_step_urlYes
why_follow_upYes
budget_minutesYes
interpretationYes
affiliate_contextNo
computation_basisYes
remaining_minutesYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds the output shape and the status classification (Under budget / Elevated / ALERTING), which is useful context, but since an output schema exists this is largely duplicated rather than new behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero waste: the trigger condition is front-loaded and the return contract follows. Nothing padded or duplicated for its own sake.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a full output schema present, the description need not explain return values, and it covers triggers adequately for a read-only calculator. The one meaningful gap is routing against slo-burn-rate-calculator, whose scope overlaps almost entirely with the 'burn rate' trigger phrase used here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each of the four parameters documented in the schema itself, so the baseline is 3. The description mentions only 'SLO percentage and window' and adds no format, unit, or default detail beyond what the schema already states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific computation (error budget from SLO percentage and window) and names the outputs, so the purpose is clear. It does not, however, distinguish itself from the closely named sibling slo-burn-rate-calculator, which the description only incidentally touches by mentioning 'burn rate multiplier' as an output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening sentence gives explicit trigger conditions ('when a user asks about their SLO error budget, remaining error budget, or burn rate'), which is strong context. It stops short of excluding the obvious alternative (slo-burn-rate-calculator), so an agent must still infer which of the two to pick.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

incident-cost-calculatorIncident Cost CalculatorA
Read-onlyIdempotent
Inspect

Use this when a user asks what an outage or incident cost, or wants to calculate the financial impact of downtime. Takes hourly revenue, downtime duration, and affected percentage. Returns revenue impact, engineering cost, and total incident cost in dollars.

NameRequiredDescriptionDefault
eng_hourlyNoeng hourly used by this deterministic tool.
respondersNoresponders used by this deterministic tool.
affected_pctNoaffected expressed as a percentage.
downtime_hoursYesdowntime in hours.
hourly_revenueYeshourly revenue used by the calculation; monetary values are in USD unless stated otherwise.

Output Schema

NameRequiredDescription
severityYes
next_stepYes
next_step_urlYes
why_follow_upYes
interpretationYes
total_cost_usdYes
affiliate_contextNo
computation_basisYes
revenue_impact_usdYes
engineering_cost_usdYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, fully covering the safety profile of a pure computation. The description restates the input/output composition but adds no behavioral context beyond what annotations and the output schema already convey, so a baseline 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with a front-loaded use case, followed by inputs and outputs. Every sentence earns its place with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a deterministic calculator with full annotation coverage and an output schema, the description gives an agent enough to call it correctly. It does omit mention of two optional inputs (eng_hourly, responders), which the schema covers, so it is complete but not maximally so.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all five parameters. The description mentions hourly revenue, downtime duration, and affected percentage, which maps to three of them but omits eng_hourly and responders and adds no syntax or format detail beyond the schema, making the baseline 3 correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource: calculating the financial impact of an outage/incident, naming concrete outputs (revenue impact, engineering cost, total). This is clearly distinct from every sibling (mttr-calculator, dora-metrics-calculator, ec2-cost-calculator, etc.), but it never explicitly contrasts itself with a nearest alternative, so it lands at a strong 4.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states a clear triggering condition: 'Use this when a user asks what an outage or incident cost, or wants to calculate the financial impact of downtime.' That is an explicit when-to-use context, though it offers no when-not-to-use guidance or named alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

known-vulnerability-checkerKnown Vulnerability CheckerA
Read-onlyIdempotent
Inspect

Historical curated package-name advisory reference only. Matches older CVE examples for common packages; does not query live feeds or evaluate installed version ranges, so it never proves a package is currently vulnerable or safe.

NameRequiredDescriptionDefault
package_nameYesPackage identifier, optionally with a version (e.g. lodash@4.17.21, log4j-core, @babel/core). Versions are not assessed by this historical lookup.

Output Schema

NameRequiredDescription
cveNo
statusYes
severityYes
next_stepYes
package_nameYes
next_step_urlYes
why_follow_upYes
interpretationYes
checked_againstYes
affiliate_contextNo
computation_basisYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, and the description goes further by disclosing the core limitations: no live feed querying, no version-range assessment, and no guarantee of vulnerability or safety. That is exactly the kind of caveat an agent needs to avoid misreporting results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler; the scope statement leads and the critical limitations follow immediately. Every clause carries information the agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is unnecessary. For a one-parameter lookup whose main risk is being mistaken for live vulnerability intelligence, the description covers purpose, scope limits, and non-guarantees adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with a single parameter, so the schema already documents accepted forms (lodash@4.17.21, log4j-core, @babel/core) and the non-assessment of versions. The description adds no parameter detail beyond what the schema supplies, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states the resource and mechanism ('historical curated package-name advisory reference'), and the second clarifies the operation ('matches older CVE examples for common packages'). It is clear what the tool does, though the framing is more noun-phrase scope statement than a crisp verb+resource, and no sibling is named (though no sibling here is a genuine alternative).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Strong when-not guidance: it explicitly says it does not query live feeds or evaluate installed version ranges, which steers the agent away from treating it as a real vulnerability oracle. It does not name an alternative tool for live advisory data, so it falls short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kubernetes-manifest-linterKubernetes Manifest LinterB
Read-onlyIdempotent
Inspect

Lint a Kubernetes manifest (YAML) for common issues: missing resource limits, missing health checks, :latest tag usage, privileged containers. Returns issue list and severity.

NameRequiredDescriptionDefault
manifestYesKubernetes manifest YAML content

Output Schema

NameRequiredDescription
issuesYes
severityYes
next_stepYes
issue_countYes
next_step_urlYes
why_follow_upYes
interpretationYes
affiliate_contextNo
computation_basisYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered structurally. The description adds that it returns an issue list with severity, which is useful, but says nothing about malformed YAML handling, whether the check set is exhaustive, or whether findings are blocking — so this is only modest added value 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the purpose front-loaded and the detected issue classes listed compactly. Every clause earns its place by telling the agent what the lint covers.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering safety, the description need not explain return values, and the single parameter is fully documented in the schema. It is nearly complete for a deterministic read-only linter, with only minor gaps around invalid-input behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage ('Kubernetes manifest YAML content'), so the schema already carries the semantics. The description confirms the input is YAML but adds no syntax, encoding, or multi-document guidance beyond what the schema states, which is the baseline 3 for a fully documented single-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (Lint) and resource (Kubernetes manifest YAML) and enumerates the exact classes of issues detected (resource limits, health checks, :latest tags, privileged containers), which makes the tool's scope concrete. It separates itself implicitly from dockerfile-linter by naming the artifact type, but never explicitly differentiates from that sibling or states scope limits (e.g., only these four checks).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance and no naming of alternatives such as dockerfile-linter or detect-secrets-scanner. The enumerated checks imply the domain but leave the agent to infer when this tool is the right call versus a neighboring linter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mttr-calculatorMTTR CalculatorA
Read-onlyIdempotent
Inspect

Use when a user asks about MTTR or DORA recovery time. Takes incident timestamps (string lines "start,detected,resolved" or array of {start,detected,resolved}).

NameRequiredDescriptionDefault
incidentsYesincidents used by this deterministic tool.

Output Schema

NameRequiredDescription
next_stepYes
dora_ratingYes
output_tierYes
mttd_minutesYes
mttr_minutesYes
signal_valueYes
next_step_urlYes
remaining_pctYes
why_follow_upYes
incident_countYes
interpretationYes
affiliate_contextNo
computation_basisYes
mean_total_minutesYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without the description. The description adds the accepted input shape but says nothing about aggregation across multiple incidents, the recovery-time formula, or error behavior on malformed timestamps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the usage trigger and followed by the input contract; nothing is wasted. The second sentence is dense but compact, not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the single required parameter is described. The remaining gap is disambiguation from dora-metrics-calculator and clarification of how the three timestamps map to the reported MTTR, which matters for a metric calculator in this crowded sibling set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, but the schema's own parameter text ("incidents used by this deterministic tool.") is uninformative, so the description's specification of the two accepted formats — comma-separated "start,detected,resolved" lines or an array of objects — is genuinely additive. It still leaves the meaning of "detected" versus "start" for the MTTR computation ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the metric (MTTR / DORA recovery time) and the input it operates on (incident timestamps), so the verb+resource is identifiable. It does not, however, distinguish itself from the sibling dora-metrics-calculator, which plausibly overlaps on the same metric family.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use when a user asks about MTTR or DORA recovery time" gives a clear triggering condition for selection. It stops short of any when-not guidance or explicit routing to alternatives such as dora-metrics-calculator for the full DORA suite.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

on-call-burden-calculatorOn-Call Burden CalculatorA
Read-onlyIdempotent
Inspect

Use when a user asks about on-call load or burnout risk. Uses team size, rotation length, and hourly rate exactly as the browser calculator does.

NameRequiredDescriptionDefault
team_sizeYesteam size used by this deterministic tool.
hourly_rateYeshourly rate used by the calculation; monetary values are in USD unless stated otherwise.
rotation_weeksYesrotation weeks used by this deterministic tool.

Output Schema

NameRequiredDescription
next_stepYes
annual_costYes
output_tierYes
monthly_costYes
signal_valueYes
next_step_urlYes
remaining_pctYes
why_follow_upYes
interpretationYes
pct_working_timeYes
affiliate_contextNo
computation_basisYes
hours_per_engineerYes
shifts_per_engineerYes
total_hours_per_monthYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety and determinism profile is largely covered. The description adds that it is deterministic and mirrors 'the browser calculator exactly,' a modest but real addition about result parity; it says nothing about units of the output or precision beyond what the schema carries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the usage trigger front-loaded before the input summary. Appropriately sized for a simple deterministic calculator.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and annotations carry the safety/determinism profile, so the description need not explain return values. For a low-complexity, three-required-parameter calculator, the entry is sufficient, though the vague 'burnout risk' framing is never grounded in what the computed number actually represents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are documented structurally, and the description merely names the same inputs (team size, rotation length, hourly rate). It adds no syntax, formatting, or edge-case guidance beyond the schema's minimum/exclusiveMinimum constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description and title together convey that the tool computes an on-call burden figure from team size, rotation length, and hourly rate. The purpose is clear, but it never explicitly distinguishes itself from the closely related alert-fatigue-calculator or burnout-adjacent siblings, so the agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use when a user asks about on-call load or burnout risk" gives a clear triggering condition. It lacks any exclusion or alternative guidance, which matters given 30+ sibling calculators including alert-fatigue-calculator that could plausibly be confused with this one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pipeline-cost-calculatorCI/CD Pipeline Cost CalculatorA
Read-onlyIdempotent
Inspect

Use this when a user asks how much their GitHub Actions CI/CD pipeline costs per month. Takes average job duration in minutes, jobs per run, runs per month and the runner label (ubuntu-latest, windows-latest, macos-latest or self-hosted; matched case-insensitively). Uses GitHub list prices for standard hosted runners effective 1 Jan 2026 and GitHub Free's 2,000 included minutes for private repositories, drawn at list price. Self-hosted minutes carry no GitHub charge.

NameRequiredDescriptionDefault
runnerNoRunner label, for example ubuntu-latest, windows-latest, macos-latest or self-hosted. Matched case-insensitively; defaults to Linux.
avg_job_minYesAverage job duration in minutes.
jobs_per_runYesJobs per workflow run.
runs_per_monthYesWorkflow runs per month.

Output Schema

NameRequiredDescription
severityYes
next_stepYes
rates_as_ofYes
runner_typeYes
next_step_urlYes
why_follow_upYes
interpretationYes
billable_minutesYes
included_minutesYes
monthly_cost_usdYes
affiliate_contextNo
computation_basisYes
runner_multiplierYes
rate_per_minute_usdYes
included_minutes_usedYes
total_minutes_per_monthYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds substantive domain behavior: GitHub list prices effective 1 Jan 2026, GitHub Free's 2,000 included minutes for private repos drawn at list price, and zero GitHub charge for self-hosted. It does not discuss output shape, but an output schema exists so that burden is lifted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the usage trigger, then inputs, then pricing assumptions and billing caveats. Every sentence carries information and nothing is repeated for filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a pure computational tool with a complete input schema and an output schema, the description supplies exactly the extra context an agent needs to trust the result: pricing basis, effective date, free-tier treatment, and self-hosted semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters, including the runner labels, case-insensitive matching, and the Linux default. The description mostly restates these (runner labels, case-insensitivity) and adds only the cost-relevant note that self-hosted minutes are free, so it hovers at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (calculates cost) and resource (GitHub Actions CI/CD pipeline cost per month), which cleanly separates it from siblings like ec2-cost-calculator, egress-cost-calculator, and cloud-waste-calculator. An agent can identify the tool's domain without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening sentence gives an explicit trigger: 'Use this when a user asks how much their GitHub Actions CI/CD pipeline costs per month.' It is a clear context for use, but it names no alternative cost tools and gives no when-not-to-use condition for overlapping sibling calculators.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

precision-recall-f1-calculatorPrecision, Recall and F1 CalculatorA
Read-onlyIdempotent
Inspect

Use this when a user asks about their ML model precision, recall, F1 score, or F-beta score. Takes precision and recall as fractions from 0 to 1 and an optional beta weight. Returns F1, F-beta, and interpretation of the precision-recall tradeoff.

NameRequiredDescriptionDefault
betaNobeta used by this deterministic tool.
recallYesrecall used by this deterministic tool.
precisionYesprecision used by this deterministic tool.

Output Schema

NameRequiredDescription
betaYes
f1_scoreYes
next_stepYes
f_beta_scoreYes
next_step_urlYes
why_follow_upYes
interpretationYes
affiliate_contextNo
computation_basisYes
precision_recall_gapYes
precision_recall_balanceYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered without the description. The description adds only that beta is optional and that the output includes a tradeoff interpretation; it doesn't address edge cases such as both inputs being zero.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: trigger first, then inputs and outputs. No filler, no repetition of the title, and the most decision-relevant information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema handling return values and annotations handling safety, the description only needs to orient the caller, which it does. Minor gap: no note on degenerate inputs (precision=recall=0) or that the result is a pure deterministic computation, though the schema hints at determinism.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the 0-1 bounds, required status of precision/recall, and the beta parameter are all documented structurally. The description restates the fraction range and beta optionality without adding format or semantic detail beyond the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific computation (F1/F-beta from precision and recall) and names its inputs and outputs. In a sibling set of cost/SLO/DevOps calculators, an ML-metric tool is unmistakable, so no differentiation problem exists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening sentence gives an explicit trigger: use it when a user asks about ML model precision, recall, F1, or F-beta. It stops short of stating when NOT to use it or naming an alternative, but no sibling overlaps with this domain, so the omission is low-cost.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query-cost-estimatorPostgreSQL Query Cost EstimatorB
Read-onlyIdempotent
Inspect

Estimate PostgreSQL sequential-scan and index-scan cost from table rows, table pages, selectivity, and storage type. Uses the same four-input model as the browser calculator.

NameRequiredDescriptionDefault
table_rowsYestable rows used by this deterministic tool.
table_pagesYestable pages used by this deterministic tool.
storage_typeYesstorage type; accepted values: ssd, nvme, hdd, network.
selectivity_pctYesselectivity expressed as a percentage.

Output Schema

NameRequiredDescription
next_stepYes
cost_ratioYes
index_pagesYes
index_tuplesYes
storage_typeYes
next_step_urlYes
why_follow_upYes
interpretationYes
index_scan_costYes
random_page_costYes
recommended_planYes
affiliate_contextNo
computation_basisYes
sequential_scan_costYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, so the safe deterministic profile is covered. The description adds that this is a pure estimate using a known four-input model, consistent with the annotations, but adds no extra behavioral context beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the operation and its inputs, with no padding. The trailing sentence about the browser calculator is mildly useful context rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations carry the safety profile. For a deterministic estimator with fully documented parameters, the description is complete enough, though a note on the underlying cost model would add value.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (table_rows, table_pages, selectivity_pct, storage_type) are already documented, including the storage_type enum. The description only restates the input list without adding syntax or modeling detail, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Estimate) and a precise resource (PostgreSQL sequential-scan and index-scan cost), then names the four inputs. It is clearly distinguishable from sibling cost calculators (ec2-cost-calculator, terraform-plan-cost-estimator) though it does not explicitly contrast itself with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use, when-not-to-use, or alternative-tool guidance. The reference to 'the same four-input model as the browser calculator' gives context about consistency but tells the agent nothing about when this tool is the right pick.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rate-limit-utilization-calculatorAPI Rate Limit Utilization CalculatorA
Read-onlyIdempotent
Inspect

Calculate API rate limit utilization given current request count and limit. Returns utilization percentage, buffer, safety status, and risk level (OK at <80%, WARNING at 80-95%, CRITICAL at >95%).

NameRequiredDescriptionDefault
limitYesRate limit ceiling
window_secondsNoRate limit window in seconds (e.g. 60 for per-minute)
current_requestsYesCurrent request count in the window

Output Schema

NameRequiredDescription
safeYes
bufferYes
statusYes
next_stepYes
next_step_urlYes
why_follow_upYes
interpretationYes
window_secondsYes
utilization_pctYes
affiliate_contextNo
computation_basisYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a safe, read-only, idempotent computation. The description adds genuinely useful behavior beyond that: the risk-band thresholds (OK <80%, WARNING 80-95%, CRITICAL >95%) and the shape of the result (percentage, buffer, safety status, risk level).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences: the computation first, then the output and thresholds. No filler, no repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A simple, fully documented calculator with 100% schema coverage and an output schema, so return values need not be explained. Everything an agent needs to invoke it is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents current_requests, limit, and window_seconds. The description restates two of the three parameters but adds no format or semantics beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Calculate API rate limit utilization') and names the inputs it operates on. Among a large family of calculator siblings, this one's domain is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies when it is useful (checking headroom against a limit), but there is no explicit guidance on when to reach for this versus related calculators like slo-burn-rate-calculator or error-budget-calculator, and no stated exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reserved-instance-breakevenReserved Instance Breakeven CalculatorA
Read-onlyIdempotent
Inspect

Use this when a user asks whether to buy Reserved Instances or stay on On-Demand, or how long an RI takes to pay for itself. Takes On-Demand and RI monthly costs plus optional upfront fees (0 when omitted). Judges the 1-year and 3-year terms separately and returns each break-even month and net saving. It recommends a term only when that term saves money over its own length, and prefers 3 years only when it beats three 1-year terms over 36 months at current prices.

NameRequiredDescriptionDefault
od_monthlyYesOn-Demand cost per month in USD.
ri_1yr_monthlyYes1-year Reserved Instance cost per month in USD, excluding the upfront fee.
ri_1yr_upfrontNo1-year upfront fee in USD; 0 when omitted (no-upfront RI).
ri_3yr_monthlyYes3-year Reserved Instance cost per month in USD, excluding the upfront fee.
ri_3yr_upfrontNo3-year upfront fee in USD; 0 when omitted (no-upfront RI).

Output Schema

NameRequiredDescription
severityYes
next_stepYes
next_step_urlYes
why_follow_upYes
interpretationYes
breakeven_monthsNo
recommended_termYes
affiliate_contextNo
computation_basisYes
net_savings_1yr_usdYes
net_savings_3yr_usdYes
breakeven_months_3yrNo
monthly_saving_1yr_usdYes
monthly_saving_3yr_usdYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description goes well beyond them by disclosing the decision logic: terms are judged independently, a recommendation is made only when a term saves money over its own length, and 3-year is preferred only when it beats three consecutive 1-year terms. That is exactly the kind of hidden reasoning an agent needs to interpret or trust the result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, no filler: trigger first, inputs second, output third, recommendation policy last. Every sentence carries distinct information and the ordering matches how an agent would use it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering safety, the description supplies the remaining missing layer — the recommendation rules and separate per-term evaluation — so an agent knows not just how to call it but how to interpret and relay the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the description mostly restates schema facts ('optional upfront fees (0 when omitted)'). It adds no syntax or semantics beyond what the parameter descriptions already say, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource (break-even calculation between Reserved Instances and On-Demand) and states the exact scope: judging 1-year and 3-year terms separately and returning each break-even month and net saving. No sibling in the list (ec2-cost-calculator, cloud-waste-calculator, total-cost-of-ownership-calculator) overlaps this specific decision, so an agent can route here without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Front-loads an explicit trigger: 'Use this when a user asks whether to buy Reserved Instances or stay on On-Demand, or how long an RI takes to pay for itself.' That is clear when-to-use context, though it names no exclusions or alternative tools (e.g., when to prefer the general cost calculators instead).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rightsizing-calculatorCompute Rightsizing CalculatorB
Read-onlyIdempotent
Inspect

Use when a user asks about instance rightsizing or overprovisioned compute.

NameRequiredDescriptionDefault
hourly_costNohourly cost used by the calculation; monetary values are in USD unless stated otherwise.
p99_cpu_pctYesp99 cpu expressed as a percentage.
current_vcpuYescurrent vcpu used by this deterministic tool.
instance_countNoinstance count used by this deterministic tool.
p99_memory_pctYesp99 memory expressed as a percentage.
current_memory_gbYescurrent memory in gigabytes.

Output Schema

NameRequiredDescription
next_stepYes
do_savingsYes
needed_vcpuYes
output_tierYes
monthly_costYes
signal_valueYes
next_step_urlYes
why_follow_upYes
annual_savingsYes
instance_countYes
interpretationYes
savings_factorYes
needed_memory_gbYes
affiliate_contextNo
computation_basisYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds nothing behavioral beyond that — no note that the calculation is deterministic, no required-input prerequisites, no unit or cost caveats. With the low bar set by annotations it still fails to contribute any additional context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler and the trigger front-loaded, so there is no waste. However, at this length the brevity reads as under-specification rather than tightness — the one sentence does not carry the load a 6-parameter calculator requires.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. But for a deterministic 4-required-parameter calculator the description omits what inputs are mandatory in practice, what units/assumptions drive the result, and how it differs from cost-oriented siblings. Adequate to recognize the tool, thin for calling it correctly with confidence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% across all six parameters, so the baseline is 3. The description mentions no parameter at all — not the required p99 inputs, not the units of hourly_cost, not instance_count — so it adds no meaning beyond the schema. Note the schema text itself is largely templated ('used by this deterministic tool'), but the description does nothing to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the domain ('instance rightsizing', 'overprovisioned compute') but never states what the tool actually does — compute recommended vCPU/memory from p99 utilization inputs — or what it returns. It is framed entirely as a usage trigger rather than a verb+resource statement. It loosely separates from siblings like ec2-cost-calculator, but not from cloud-waste-calculator, which plausibly covers the same overprovisioning territory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete trigger condition ('when a user asks about instance rightsizing or overprovisioned compute'), which is exactly the context an agent needs to route here. It stops short of naming when NOT to use it or pointing to overlapping siblings such as cloud-waste-calculator or cluster-capacity-calculator, so it is clear context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

slo-burn-rate-calculatorSLO Burn Rate CalculatorA
Read-onlyIdempotent
Inspect

Use this when a user asks how fast they are burning their error budget, or whether their current error rate will exhaust their SLO window. Takes error count, total requests, SLO target, and observation window. Returns burn rate and budget consumption per hour.

NameRequiredDescriptionDefault
sloYesService-level objective target expressed as a percentage.
totalYesTotal number of requests observed in the measurement window.
errorsYesNumber of failed requests observed in the measurement window.
window_hoursYesLength of the observed measurement window in hours.

Output Schema

NameRequiredDescription
statusYes
burn_rateYes
next_stepYes
window_hoursYes
next_step_urlYes
why_follow_upYes
error_rate_pctYes
interpretationYes
affiliate_contextNo
computation_basisYes
budget_consumed_pct_per_hourYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the agent knows this is a pure, side-effect-free computation. The description adds that it returns burn rate and hourly budget consumption, but that is already implied by the output schema and the name, so added behavioral context is thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the trigger condition and followed by the computation. The closing sentence about returns largely duplicates the output schema, so it is slightly padded but still tight overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With full schema coverage, an existing output schema, and read-only annotations, the description covers everything needed to invoke the tool correctly. The one remaining gap is sibling differentiation (error-budget-calculator, availability-sla-calculator) in a large family of similar calculators.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (errors, total, slo, window_hours) is already documented in the schema. The description restates the input set without adding units, format, or constraints beyond it, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific computation (burn rate and error-budget consumption per hour) from named inputs, so the purpose is unambiguous. It does not, however, distinguish itself from the closely-related sibling error-budget-calculator, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit trigger conditions in user-intent terms: 'when a user asks how fast they are burning their error budget, or whether their current error rate will exhaust their SLO window.' That is a clear when-to-use, but no when-not-to-use and no routing to the sibling error-budget-calculator.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

software-purchase-risk-calculatorSoftware Purchase Risk CalculatorC
Read-onlyIdempotent
Inspect

Use when a user asks about risk of a software purchase or SaaS commitment.

NameRequiredDescriptionDefault
numUsersNonumUsers used by this deterministic tool.
setupHoursNosetupHours used by this deterministic tool.
integrationCountNointegrationCount used by this deterministic tool.
internalHourlyCostNointernalHourlyCost used by this deterministic tool.
monthlySubscriptionYesmonthlySubscription used by this deterministic tool.
changeManagementRiskNochangeManagementRisk used by this deterministic tool.
contractLengthMonthsNocontractLengthMonths used by this deterministic tool.
vendorStabilityScoreNovendorStabilityScore used by this deterministic tool.

Output Schema

NameRequiredDescription
next_stepYes
risk_scoreYes
output_tierYes
monthly_costYes
signal_valueYes
next_step_urlYes
why_follow_upYes
contract_totalYes
interpretationYes
year1_sub_costYes
contract_monthsYes
vendor_componentYes
year1_labor_costYes
year1_total_costYes
affiliate_contextNo
computation_basisYes
adoption_componentYes
complexity_componentYes
integration_componentYes

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds nothing on top of that: no mention that the computation is deterministic, no note on how the 1-5 risk scales behave, no statement about what a caller gets back. With annotations carrying the safety load, this remains a gap rather than a strength.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single, front-loaded sentence with no filler, which is structurally clean. But for an 8-parameter tool the brevity edges into under-specification rather than disciplined conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. Still, the tool takes 8 inputs including bounded ordinal scales (changeManagementRisk and vendorStabilityScore, both 1-5) whose directionality and meaning are undocumented anywhere, and the description does nothing to resolve that. For a multi-input scoring model this is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is nominally 100%, which sets the baseline at 3, but every parameter description is the same boilerplate ('X used by this deterministic tool') and conveys no domain meaning. The description itself supplies zero parameter guidance, so it neither compensates for nor improves on the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description only supplies a trigger phrase ('Use when a user asks about risk of a software purchase or SaaS commitment') and never states what the tool actually computes or returns. It essentially restates the name/title 'Software Purchase Risk Calculator' in different words rather than adding a distinct verb+resource statement. An agent learns nothing beyond the already-visible tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The single sentence is a usage condition, so a trigger is provided ('risk of a software purchase or SaaS commitment'). However, there is no when-not guidance and no differentiation from the 31 siblings, several of which overlap heavily (total-cost-of-ownership-calculator, cloud-waste-calculator, reserved-instance-breakeven).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terraform-plan-cost-estimatorTerraform Plan Cost EstimatorA
Read-onlyIdempotent
Inspect

Use when a user asks to estimate monthly cost of a Terraform plan.

NameRequiredDescriptionDefault
countYescount used by this deterministic tool.
instance_sizeNoinstance size used by this deterministic tool.
resource_typeYesresource type used by this deterministic tool.

Output Schema

NameRequiredDescription
next_stepYes
annual_costYes
hourly_rateYes
output_tierYes
monthly_costYes
signal_valueYes
next_step_urlYes
resource_typeYes
why_follow_upYes
interpretationYes
resource_countYes
affiliate_contextNo
computation_basisYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint, and openWorldHint. The description adds no behavioral context beyond the usage trigger, such as determinism, limitations, or scope restrictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It is appropriately sized for the amount of information it conveys.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema and output schema are rich, and annotations cover safety traits, so the description need not explain return values. However, it does not clarify how a Terraform plan maps to the required resource_type, count, and instance_size inputs, nor does it differentiate from numerous sibling cost calculators.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters. The description does not add any parameter-level meaning, making the baseline score of 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and target: estimating monthly cost of a Terraform plan. It is clear what the tool does, though it does not explicitly differentiate itself from closely related cost estimators beyond the Terraform plan wording.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear trigger: use when a user asks to estimate monthly cost of a Terraform plan. It does not provide when-not-to-use guidance or name alternative sibling tools, but the intended context is explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

total-cost-of-ownership-calculatorTotal Cost of Ownership CalculatorB
Read-onlyIdempotent
Inspect

Use when a user asks about TCO or multi-year SaaS cost.

NameRequiredDescriptionDefault
oneTimeFeesNooneTimeFees used by this deterministic tool.
numPaidSeatsYesnumPaidSeats used by this deterministic tool.
contractLengthNocontractLength used by this deterministic tool.
perUserMonthlyFeeNoperUserMonthlyFee used by this deterministic tool.
adminHoursPerMonthNoadminHoursPerMonth used by this deterministic tool.
expectedActiveUsersYesexpectedActiveUsers used by this deterministic tool.
internalHourlyCost105NointernalHourlyCost105 used by this deterministic tool.
baseMonthlySubscriptionNobaseMonthlySubscription used by this deterministic tool.

Output Schema

NameRequiredDescription
next_stepYes
do_savingsYes
output_tierYes
monthly_costYes
signal_valueYes
next_step_urlYes
why_follow_upYes
contract_totalYes
interpretationYes
seat_waste_pctYes
contract_monthsYes
shelfware_seatsYes
overpaying_flagsYes
year1_admin_costYes
year1_total_costYes
affiliate_contextNo
computation_basisYes
year1_vendor_costYes
seat_waste_cost_yrYes
cost_per_user_monthlyYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the full safety profile of this side-effect-free computation is covered by structured data. The description adds no behavioral context of its own (no mention of determinism, formula scope, or units), but for a pure read-only calculator with complete annotations there is little left to disclose. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler; the trigger is stated immediately. It is efficient but so terse that the brevity tips into under-specification rather than genuine conciseness, which caps it below 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and rich annotations cover the safety profile of this read-only computation. The remaining gap is param semantics and sibling routing for an 8-parameter financial model, which the one-line description does not address.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is nominally 100%, so the baseline is 3 per the rubric. The description contributes nothing about any of the 8 parameters, and the schema descriptions are generic placeholders, so no extra meaning is added. Baseline 3 is the correct landing spot.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the domain (TCO, multi-year SaaS cost) and the name itself signals a calculator, so an agent can infer the resource being computed. However, it never states what the tool actually computes or returns, reading as a trigger phrase rather than a purpose statement. It only partially separates this tool from the many other cost siblings (ec2-cost-calculator, pipeline-cost-calculator, software-purchase-risk-calculator).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Use when a user asks about TCO or multi-year SaaS cost" gives an explicit trigger condition, which is real usage guidance. It offers no when-not, no prerequisites, and no routing against the crowded set of cost-oriented siblings, so an agent facing an ambiguous cost question still has to guess. This is implied-to-partial guidance rather than a complete selection rule.

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.

  1. 10 tool updates
    • Changedapdex-score-calculator11 fields changed
      • changedInput schema / properties / satisfied / description
        Previous value: -"satisfied used by this deterministic tool."New value: +"Requests answered within the target threshold T."
      • changedInput schema / properties / satisfied / examples
        Previous value: -[
        -  1
        -]New value: +[
        +  850
        +]
      • changedInput schema / properties / tolerating / description
        Previous value: -"tolerating used by this deterministic tool."New value: +"Requests answered between T and 4T."
      • changedInput schema / properties / tolerating / examples
        Previous value: -[
        -  1
        -]New value: +[
        +  100
        +]
      • changedInput schema / properties / total / description
        Previous value: -"Total number of requests observed in the measurement window."New value: +"All requests in the sample, including frustrated ones (slower than 4T or failed)."
      • changedInput schema / properties / total / examples
        Previous value: -[
        -  1
        -]New value: +[
        +  1000
        +]
      • addedOutput schema / properties / frustrated_pct
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / rating_band
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / tolerating_pct
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / total_samples
        Added value: +{
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "apdex_score",
        -  "computation_basis",
        -  "interpretation",
        -  "next_step",
        -  "next_step_url",
        -  "rating",
        -  "satisfied_pct",
        -  "why_follow_up"
        -]New value: +[
        +  "apdex_score",
        +  "computation_basis",
        +  "frustrated_pct",
        +  "interpretation",
        +  "next_step",
        +  "next_step_url",
        +  "rating",
        +  "rating_band",
        +  "satisfied_pct",
        +  "tolerating_pct",
        +  "total_samples",
        +  "why_follow_up"
        +]
    • Changeddetect-secrets-scanner1 field changed
      • changedInput schema / properties / text / maxLength
        Previous value: -200000New value: +8192
    • Changeddockerfile-linter11 fields changed
      • changedInput schema / properties / dockerfile / description
        Previous value: -"Dockerfile content (full or partial)"New value: +"Dockerfile content (full or partial), up to 8,192 characters."
      • changedInput schema / properties / dockerfile / maxLength
        Previous value: -200000New value: +8192
      • addedOutput schema / properties / error_count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / info_count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / instruction_count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / issues / items / properties / code
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / issues / items / properties / severity
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / properties / issues / items / required
        Previous value: -[
        -  "issue",
        -  "line",
        -  "suggestion"
        -]New value: +[
        +  "code",
        +  "issue",
        +  "line",
        +  "severity",
        +  "suggestion"
        +]
      • addedOutput schema / properties / line_count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / warning_count
        Added value: +{
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "computation_basis",
        -  "interpretation",
        -  "issue_count",
        -  "issues",
        -  "next_step",
        -  "next_step_url",
        -  "severity",
        -  "why_follow_up"
        -]New value: +[
        +  "computation_basis",
        +  "error_count",
        +  "info_count",
        +  "instruction_count",
        +  "interpretation",
        +  "issue_count",
        +  "issues",
        +  "line_count",
        +  "next_step",
        +  "next_step_url",
        +  "severity",
        +  "warning_count",
        +  "why_follow_up"
        +]
    • Changeddora-metrics-calculator16 fields changed
      • changedInput schema / properties / change_failure_pct / description
        Previous value: -"change failure expressed as a percentage."New value: +"Share of deployments that cause a failure in production, in percent."
      • changedInput schema / properties / change_failure_pct / examples
        Previous value: -[
        -  1
        -]New value: +[
        +  15
        +]
      • addedInput schema / properties / change_failure_pct / maximum
        Added value: +100
      • addedInput schema / properties / change_failure_pct / minimum
        Added value: +0
      • changedInput schema / properties / deploys_per_month / description
        Previous value: -"deploys per month used by this deterministic tool."New value: +"Production deployments per month."
      • changedInput schema / properties / deploys_per_month / examples
        Previous value: -[
        -  1
        -]New value: +[
        +  20
        +]
      • addedInput schema / properties / deploys_per_month / minimum
        Added value: +0
      • changedInput schema / properties / lead_time_hours / description
        Previous value: -"lead time in hours."New value: +"Lead time for changes, commit to production, in hours."
      • changedInput schema / properties / lead_time_hours / examples
        Previous value: -[
        -  1
        -]New value: +[
        +  24
        +]
      • addedInput schema / properties / lead_time_hours / minimum
        Added value: +0
      • changedInput schema / properties / restore_time_hours / description
        Previous value: -"restore time in hours."New value: +"Time to restore service after a failed change, in hours. Optional; when omitted the metric is reported as unknown."
      • changedInput schema / properties / restore_time_hours / examples
        Previous value: -[
        -  1
        -]New value: +[
        +  4
        +]
      • addedInput schema / properties / restore_time_hours / minimum
        Added value: +0
      • addedOutput schema / properties / assessment
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / metrics_assessed
        Added value: +{
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "change_failure_rate_tier",
        -  "computation_basis",
        -  "deploy_frequency_tier",
        -  "interpretation",
        -  "lead_time_tier",
        -  "mttr_tier",
        -  "next_step",
        -  "next_step_url",
        -  "overall_tier",
        -  "why_follow_up"
        -]New value: +[
        +  "assessment",
        +  "change_failure_rate_tier",
        +  "computation_basis",
        +  "deploy_frequency_tier",
        +  "interpretation",
        +  "lead_time_tier",
        +  "metrics_assessed",
        +  "mttr_tier",
        +  "next_step",
        +  "next_step_url",
        +  "overall_tier",
        +  "why_follow_up"
        +]
    • Changedegress-cost-calculator2 fields changed
      • addedOutput schema / properties / cdn_pct
        Added value: +{
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "billable_egress_gb",
        -  "cdn_offload_gb",
        -  "computation_basis",
        -  "cost_risk",
        -  "daily_egress_gb",
        -  "free_tier_gb",
        -  "interpretation",
        -  "monthly_cost_usd",
        -  "monthly_egress_gb",
        -  "next_step",
        -  "next_step_url",
        -  "origin_egress_gb",
        -  "provider",
        -  "rate_per_gb",
        -  "why_follow_up"
        -]New value: +[
        +  "billable_egress_gb",
        +  "cdn_offload_gb",
        +  "cdn_pct",
        +  "computation_basis",
        +  "cost_risk",
        +  "daily_egress_gb",
        +  "free_tier_gb",
        +  "interpretation",
        +  "monthly_cost_usd",
        +  "monthly_egress_gb",
        +  "next_step",
        +  "next_step_url",
        +  "origin_egress_gb",
        +  "provider",
        +  "rate_per_gb",
        +  "why_follow_up"
        +]
    • Changedknown-vulnerability-checker1 field changed
      • changedInput schema / properties / package_name / description
        Previous value: -"Package name to check (e.g. \"lodash\", \"log4j\", \"django\")"New value: +"Package identifier, optionally with a version (e.g. lodash@4.17.21, log4j-core, @babel/core). Versions are not assessed by this historical lookup."
    • Changedpipeline-cost-calculator18 fields changed
      • changedInput schema / properties / avg_job_min / description
        Previous value: -"avg job min used by this deterministic tool."New value: +"Average job duration in minutes."
      • changedInput schema / properties / avg_job_min / examples
        Previous value: -[
        -  1
        -]New value: +[
        +  8
        +]
      • addedInput schema / properties / avg_job_min / minimum
        Added value: +0
      • changedInput schema / properties / jobs_per_run / description
        Previous value: -"jobs per run used by this deterministic tool."New value: +"Jobs per workflow run."
      • changedInput schema / properties / jobs_per_run / examples
        Previous value: -[
        -  1
        -]New value: +[
        +  4
        +]
      • addedInput schema / properties / jobs_per_run / minimum
        Added value: +0
      • changedInput schema / properties / runner / description
        Previous value: -"runner used by this deterministic tool."New value: +"Runner label, for example ubuntu-latest, windows-latest, macos-latest or self-hosted. Matched case-insensitively; defaults to Linux."
      • changedInput schema / properties / runner / examples
        Previous value: -[
        -  "example"
        -]New value: +[
        +  "ubuntu-latest"
        +]
      • addedInput schema / properties / runner / maxLength
        Added value: +128
      • changedInput schema / properties / runs_per_month / description
        Previous value: -"runs per month used by this deterministic tool."New value: +"Workflow runs per month."
      • changedInput schema / properties / runs_per_month / examples
        Previous value: -[
        -  1
        -]New value: +[
        +  500
        +]
      • addedInput schema / properties / runs_per_month / minimum
        Added value: +0
      • addedOutput schema / properties / included_minutes
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / included_minutes_used
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / rate_per_minute_usd
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / rates_as_of
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / runner_type
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "billable_minutes",
        -  "computation_basis",
        -  "interpretation",
        -  "monthly_cost_usd",
        -  "next_step",
        -  "next_step_url",
        -  "runner_multiplier",
        -  "severity",
        -  "total_minutes_per_month",
        -  "why_follow_up"
        -]New value: +[
        +  "billable_minutes",
        +  "computation_basis",
        +  "included_minutes",
        +  "included_minutes_used",
        +  "interpretation",
        +  "monthly_cost_usd",
        +  "next_step",
        +  "next_step_url",
        +  "rate_per_minute_usd",
        +  "rates_as_of",
        +  "runner_multiplier",
        +  "runner_type",
        +  "severity",
        +  "total_minutes_per_month",
        +  "why_follow_up"
        +]
    • Changedprecision-recall-f1-calculator3 fields changed
      • addedOutput schema / properties / beta
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / precision_recall_gap
        Added value: +{
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "computation_basis",
        -  "f1_score",
        -  "f_beta_score",
        -  "interpretation",
        -  "next_step",
        -  "next_step_url",
        -  "precision_recall_balance",
        -  "why_follow_up"
        -]New value: +[
        +  "beta",
        +  "computation_basis",
        +  "f1_score",
        +  "f_beta_score",
        +  "interpretation",
        +  "next_step",
        +  "next_step_url",
        +  "precision_recall_balance",
        +  "precision_recall_gap",
        +  "why_follow_up"
        +]
    • Changedquery-cost-estimator2 fields changed
      • addedOutput schema / properties / storage_type
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "computation_basis",
        -  "cost_ratio",
        -  "index_pages",
        -  "index_scan_cost",
        -  "index_tuples",
        -  "interpretation",
        -  "next_step",
        -  "next_step_url",
        -  "random_page_cost",
        -  "recommended_plan",
        -  "sequential_scan_cost",
        -  "why_follow_up"
        -]New value: +[
        +  "computation_basis",
        +  "cost_ratio",
        +  "index_pages",
        +  "index_scan_cost",
        +  "index_tuples",
        +  "interpretation",
        +  "next_step",
        +  "next_step_url",
        +  "random_page_cost",
        +  "recommended_plan",
        +  "sequential_scan_cost",
        +  "storage_type",
        +  "why_follow_up"
        +]
    • Changedreserved-instance-breakeven19 fields changed
      • changedInput schema / properties / od_monthly / description
        Previous value: -"od monthly used by this deterministic tool."New value: +"On-Demand cost per month in USD."
      • changedInput schema / properties / od_monthly / examples
        Previous value: -[
        -  1
        -]New value: +[
        +  450
        +]
      • addedInput schema / properties / od_monthly / exclusiveMinimum
        Added value: +0
      • changedInput schema / properties / ri_1yr_monthly / description
        Previous value: -"ri 1yr monthly used by this deterministic tool."New value: +"1-year Reserved Instance cost per month in USD, excluding the upfront fee."
      • changedInput schema / properties / ri_1yr_monthly / examples
        Previous value: -[
        -  1
        -]New value: +[
        +  280
        +]
      • addedInput schema / properties / ri_1yr_monthly / minimum
        Added value: +0
      • changedInput schema / properties / ri_1yr_upfront / description
        Previous value: -"ri 1yr upfront used by this deterministic tool."New value: +"1-year upfront fee in USD; 0 when omitted (no-upfront RI)."
      • changedInput schema / properties / ri_1yr_upfront / examples
        Previous value: -[
        -  1
        -]New value: +[
        +  0
        +]
      • addedInput schema / properties / ri_1yr_upfront / minimum
        Added value: +0
      • changedInput schema / properties / ri_3yr_monthly / description
        Previous value: -"ri 3yr monthly used by this deterministic tool."New value: +"3-year Reserved Instance cost per month in USD, excluding the upfront fee."
      • changedInput schema / properties / ri_3yr_monthly / examples
        Previous value: -[
        -  1
        -]New value: +[
        +  180
        +]
      • addedInput schema / properties / ri_3yr_monthly / minimum
        Added value: +0
      • changedInput schema / properties / ri_3yr_upfront / description
        Previous value: -"ri 3yr upfront used by this deterministic tool."New value: +"3-year upfront fee in USD; 0 when omitted (no-upfront RI)."
      • changedInput schema / properties / ri_3yr_upfront / examples
        Previous value: -[
        -  1
        -]New value: +[
        +  0
        +]
      • addedInput schema / properties / ri_3yr_upfront / minimum
        Added value: +0
      • addedOutput schema / properties / breakeven_months_3yr
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / monthly_saving_1yr_usd
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / monthly_saving_3yr_usd
        Added value: +{
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "computation_basis",
        -  "interpretation",
        -  "net_savings_1yr_usd",
        -  "net_savings_3yr_usd",
        -  "next_step",
        -  "next_step_url",
        -  "recommended_term",
        -  "severity",
        -  "why_follow_up"
        -]New value: +[
        +  "computation_basis",
        +  "interpretation",
        +  "monthly_saving_1yr_usd",
        +  "monthly_saving_3yr_usd",
        +  "net_savings_1yr_usd",
        +  "net_savings_3yr_usd",
        +  "next_step",
        +  "next_step_url",
        +  "recommended_term",
        +  "severity",
        +  "why_follow_up"
        +]
  2. 6 tool updates
    • Changedcanonical-url-auditor2 fields changed
      • addedInput schema / properties / canonical / maxLength
        Added value: +2048
      • addedInput schema / properties / page_url / maxLength
        Added value: +2048
    • Changedcertificate-expiry-checker1 field changed
      • addedInput schema / properties / domain / maxLength
        Added value: +253
    • Changeddetect-secrets-scanner2 fields changed
      • changedInput schema / properties / text / description
        Previous value: -"Config, code, or env file content to scan for secrets"New value: +"Config, code, or env file content to scan. Do not submit live production secrets; rotate any real credential that appears here."
      • addedInput schema / properties / text / maxLength
        Added value: +200000
    • Changeddockerfile-linter1 field changed
      • addedInput schema / properties / dockerfile / maxLength
        Added value: +200000
    • Changedknown-vulnerability-checker1 field changed
      • addedInput schema / properties / package_name / maxLength
        Added value: +256
    • Changedkubernetes-manifest-linter1 field changed
      • addedInput schema / properties / manifest / maxLength
        Added value: +200000
  3. 6 tool updates
    • Changedcanonical-url-auditor1 field changed
      • changedOutput schema / required
        Previous value: -[
        -  "canonical_found",
        -  "computation_basis",
        -  "interpretation",
        -  "issue",
        -  "next_step",
        -  "next_step_url",
        -  "page_url",
        -  "recommendation",
        -  "severity",
        -  "why_follow_up"
        -]New value: +[
        +  "computation_basis",
        +  "interpretation",
        +  "issue",
        +  "next_step",
        +  "next_step_url",
        +  "page_url",
        +  "recommendation",
        +  "severity",
        +  "why_follow_up"
        +]
    • Changedec2-cost-calculator3 fields changed
      • changedInput schema / properties / hours_per_month / examples
        Previous value: -[
        -  1
        -]New value: +[
        +  730
        +]
      • changedInput schema / properties / instance_type / examples
        Previous value: -[
        -  "example"
        -]New value: +[
        +  "t3.medium"
        +]
      • changedInput schema / properties / os / examples
        Previous value: -[
        -  "example"
        -]New value: +[
        +  "Linux"
        +]
    • Changedknown-vulnerability-checker2 fields changed
      • changedInput schema / properties / package_name / examples
        Previous value: -[
        -  "example"
        -]New value: +[
        +  "lodash"
        +]
      • changedOutput schema / required
        Previous value: -[
        -  "checked_against",
        -  "computation_basis",
        -  "cve",
        -  "interpretation",
        -  "next_step",
        -  "next_step_url",
        -  "package_name",
        -  "severity",
        -  "status",
        -  "why_follow_up"
        -]New value: +[
        +  "checked_against",
        +  "computation_basis",
        +  "interpretation",
        +  "next_step",
        +  "next_step_url",
        +  "package_name",
        +  "severity",
        +  "status",
        +  "why_follow_up"
        +]
    • Changedmttr-calculator1 field changed
      • changedInput schema / properties / incidents / examples
        Previous value: -[
        -  "example"
        -]New value: +[
        +  "2026-04-01T10:00,2026-04-01T10:05,2026-04-01T10:30"
        +]
    • Changedreserved-instance-breakeven1 field changed
      • changedOutput schema / required
        Previous value: -[
        -  "breakeven_months",
        -  "computation_basis",
        -  "interpretation",
        -  "net_savings_1yr_usd",
        -  "net_savings_3yr_usd",
        -  "next_step",
        -  "next_step_url",
        -  "recommended_term",
        -  "severity",
        -  "why_follow_up"
        -]New value: +[
        +  "computation_basis",
        +  "interpretation",
        +  "net_savings_1yr_usd",
        +  "net_savings_3yr_usd",
        +  "next_step",
        +  "next_step_url",
        +  "recommended_term",
        +  "severity",
        +  "why_follow_up"
        +]
    • Changedrightsizing-calculator4 fields changed
      • addedInput schema / properties / current_memory_gb / exclusiveMinimum
        Added value: +0
      • removedInput schema / properties / current_memory_gb / minimum
        Removed value: -0
      • addedInput schema / properties / current_vcpu / exclusiveMinimum
        Added value: +0
      • removedInput schema / properties / current_vcpu / minimum
        Removed value: -0
  4. 31 tool updates
    • Changedalert-fatigue-calculator8 fields changed
      • addedInput schema / properties / actionable_pct / description
        Added value: +"actionable expressed as a percentage."
      • addedInput schema / properties / actionable_pct / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / alerts_per_week / description
        Added value: +"alerts per week used by this deterministic tool."
      • addedInput schema / properties / alerts_per_week / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / avg_resolution_min / description
        Added value: +"avg resolution min used by this deterministic tool."
      • addedInput schema / properties / avg_resolution_min / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / engineer_count / description
        Added value: +"engineer count used by this deterministic tool."
      • addedInput schema / properties / engineer_count / examples
        Added value: +[
        +  1
        +]
    • Changedapdex-score-calculator8 fields changed
      • addedInput schema / properties / satisfied / description
        Added value: +"satisfied used by this deterministic tool."
      • addedInput schema / properties / satisfied / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / tolerating / description
        Added value: +"tolerating used by this deterministic tool."
      • addedInput schema / properties / tolerating / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / total / description
        Added value: +"Total number of requests observed in the measurement window."
      • addedInput schema / properties / total / examples
        Added value: +[
        +  1
        +]
      • addedOutput schema / properties / computation_basis
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "apdex_score",
        -  "interpretation",
        -  "next_step",
        -  "next_step_url",
        -  "rating",
        -  "satisfied_pct",
        -  "why_follow_up"
        -]New value: +[
        +  "apdex_score",
        +  "computation_basis",
        +  "interpretation",
        +  "next_step",
        +  "next_step_url",
        +  "rating",
        +  "satisfied_pct",
        +  "why_follow_up"
        +]
    • Changedavailability-sla-calculator3 fields changed
      • addedInput schema / properties / availability_pct / examples
        Added value: +[
        +  1
        +]
      • addedOutput schema / properties / computation_basis
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "annual_downtime_minutes",
        -  "availability_tier",
        -  "interpretation",
        -  "monthly_downtime_minutes",
        -  "next_step",
        -  "next_step_url",
        -  "weekly_downtime_minutes",
        -  "why_follow_up"
        -]New value: +[
        +  "annual_downtime_minutes",
        +  "availability_tier",
        +  "computation_basis",
        +  "interpretation",
        +  "monthly_downtime_minutes",
        +  "next_step",
        +  "next_step_url",
        +  "weekly_downtime_minutes",
        +  "why_follow_up"
        +]
    • Changedcanonical-url-auditor2 fields changed
      • addedInput schema / properties / canonical / examples
        Added value: +[
        +  "example"
        +]
      • addedInput schema / properties / page_url / examples
        Added value: +[
        +  "https://example.com/"
        +]
    • Changedcertificate-expiry-checker2 fields changed
      • addedInput schema / properties / days_remaining / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / domain / examples
        Added value: +[
        +  "example.com"
        +]
    • Changedchange-failure-rate-calculator4 fields changed
      • addedInput schema / properties / failed_deploys / description
        Added value: +"failed deploys used by this deterministic tool."
      • addedInput schema / properties / failed_deploys / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / total_deploys / description
        Added value: +"total deploys used by this deterministic tool."
      • addedInput schema / properties / total_deploys / examples
        Added value: +[
        +  1
        +]
    • Changedcloud-waste-calculator8 fields changed
      • addedInput schema / properties / idle_pct / description
        Added value: +"idle expressed as a percentage."
      • addedInput schema / properties / idle_pct / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / monthly_cloud_bill / description
        Added value: +"monthly cloud bill used by this deterministic tool."
      • addedInput schema / properties / monthly_cloud_bill / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / oversized_pct / description
        Added value: +"oversized expressed as a percentage."
      • addedInput schema / properties / oversized_pct / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / unattached_volumes_count / description
        Added value: +"unattached volumes count used by this deterministic tool."
      • addedInput schema / properties / unattached_volumes_count / examples
        Added value: +[
        +  1
        +]
    • Changedcluster-capacity-calculator29 fields changed
      • addedInput schema / properties / node_count
        Added value: +{
        +  "description": "node count used by this deterministic tool.",
        +  "examples": [
        +    1
        +  ],
        +  "minimum": 1,
        +  "type": "number"
        +}
      • removedInput schema / properties / node_cpu
        Removed value: -{
        -  "type": "number"
        -}
      • addedInput schema / properties / node_mem_gb
        Added value: +{
        +  "description": "node mem in gigabytes.",
        +  "examples": [
        +    0.001
        +  ],
        +  "minimum": 0.001,
        +  "type": "number"
        +}
      • removedInput schema / properties / node_memory_gb
        Removed value: -{
        -  "type": "number"
        -}
      • addedInput schema / properties / node_vcpu
        Added value: +{
        +  "description": "node vcpu used by this deterministic tool.",
        +  "examples": [
        +    0.001
        +  ],
        +  "minimum": 0.001,
        +  "type": "number"
        +}
      • removedInput schema / properties / nodes
        Removed value: -{
        -  "type": "number"
        -}
      • removedInput schema / properties / pod_cpu_m
        Removed value: -{
        -  "type": "number"
        -}
      • removedInput schema / properties / pod_memory_mb
        Removed value: -{
        -  "type": "number"
        -}
      • removedInput schema / properties / pods
        Removed value: -{
        -  "type": "number"
        -}
      • addedInput schema / properties / system_reserve_pct
        Added value: +{
        +  "description": "system reserve expressed as a percentage.",
        +  "examples": [
        +    1
        +  ],
        +  "maximum": 99.999,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / target_utilization_pct
        Added value: +{
        +  "description": "target utilization expressed as a percentage.",
        +  "examples": [
        +    0.001
        +  ],
        +  "maximum": 100,
        +  "minimum": 0.001,
        +  "type": "number"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "nodes",
        -  "node_cpu",
        -  "node_memory_gb"
        -]New value: +[
        +  "node_vcpu",
        +  "node_mem_gb",
        +  "node_count"
        +]
      • removedOutput schema / properties / allocatable_cpu_cores
        Removed value: -{
        -  "type": "number"
        -}
      • addedOutput schema / properties / allocatable_factor
        Added value: +{
        +  "type": "number"
        +}
      • removedOutput schema / properties / allocatable_memory_gb
        Removed value: -{
        -  "type": "number"
        -}
      • addedOutput schema / properties / computation_basis
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / cpu_utilization_pct
        Removed value: -{
        -  "type": "number"
        -}
      • removedOutput schema / properties / memory_utilization_pct
        Removed value: -{
        -  "type": "number"
        -}
      • addedOutput schema / properties / node_count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / output_tier
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / pressure_level
        Removed value: -{
        -  "type": "string"
        -}
      • addedOutput schema / properties / raw_memory_gb
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / raw_vcpu
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / remaining_pct
        Added value: +{
        +  "type": "number"
        +}
      • removedOutput schema / properties / severity
        Removed value: -{
        -  "type": "string"
        -}
      • addedOutput schema / properties / signal_value
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / usable_memory_gb
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / usable_vcpu
        Added value: +{
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "allocatable_cpu_cores",
        -  "allocatable_memory_gb",
        -  "cpu_utilization_pct",
        -  "interpretation",
        -  "memory_utilization_pct",
        -  "next_step",
        -  "next_step_url",
        -  "pressure_level",
        -  "severity",
        -  "why_follow_up"
        -]New value: +[
        +  "allocatable_factor",
        +  "computation_basis",
        +  "interpretation",
        +  "next_step",
        +  "next_step_url",
        +  "node_count",
        +  "output_tier",
        +  "raw_memory_gb",
        +  "raw_vcpu",
        +  "remaining_pct",
        +  "signal_value",
        +  "usable_memory_gb",
        +  "usable_vcpu",
        +  "why_follow_up"
        +]
    • Changedconnection-pool-calculator20 fields changed
      • removedInput schema / properties / app_instances
        Removed value: -{
        -  "type": "number"
        -}
      • addedInput schema / properties / app_servers
        Added value: +{
        +  "description": "app servers used by this deterministic tool.",
        +  "examples": [
        +    1
        +  ],
        +  "minimum": 1,
        +  "type": "number"
        +}
      • addedInput schema / properties / avg_query_ms
        Added value: +{
        +  "description": "avg query ms used by this deterministic tool.",
        +  "examples": [
        +    1
        +  ],
        +  "minimum": 0,
        +  "type": "number"
        +}
      • removedInput schema / properties / cpu_cores
        Removed value: -{
        -  "type": "number"
        -}
      • addedInput schema / properties / db_cores
        Added value: +{
        +  "description": "db cores used by this deterministic tool.",
        +  "examples": [
        +    1
        +  ],
        +  "minimum": 1,
        +  "type": "number"
        +}
      • addedInput schema / properties / max_connections / description
        Added value: +"max connections used by this deterministic tool."
      • addedInput schema / properties / max_connections / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / max_connections / minimum
        Added value: +1
      • addedInput schema / properties / peak_rps
        Added value: +{
        +  "description": "peak rps used by this deterministic tool.",
        +  "examples": [
        +    1
        +  ],
        +  "minimum": 0,
        +  "type": "number"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "cpu_cores"
        -]New value: +[
        +  "max_connections",
        +  "app_servers",
        +  "db_cores",
        +  "avg_query_ms",
        +  "peak_rps"
        +]
      • addedOutput schema / properties / computation_basis
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / estimated_connection_memory_mb
        Added value: +{
        +  "type": "number"
        +}
      • removedOutput schema / properties / max_connections_utilization_pct
        Removed value: -{}
      • addedOutput schema / properties / peak_concurrent_demand
        Added value: +{
        +  "type": "number"
        +}
      • removedOutput schema / properties / per_app_instance
        Removed value: -{
        -  "type": "number"
        -}
      • addedOutput schema / properties / per_app_pool_size
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / saturation_pct
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / status
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / warning
        Removed value: -{
        -  "type": "boolean"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "interpretation",
        -  "next_step",
        -  "next_step_url",
        -  "per_app_instance",
        -  "recommended_pool_total",
        -  "warning",
        -  "why_follow_up"
        -]New value: +[
        +  "computation_basis",
        +  "estimated_connection_memory_mb",
        +  "interpretation",
        +  "next_step",
        +  "next_step_url",
        +  "peak_concurrent_demand",
        +  "per_app_pool_size",
        +  "recommended_pool_total",
        +  "saturation_pct",
        +  "status",
        +  "why_follow_up"
        +]
    • Changeddeployment-frequency-calculator6 fields changed
      • addedInput schema / properties / deploys_per_month / description
        Added value: +"deploys per month used by this deterministic tool."
      • addedInput schema / properties / deploys_per_month / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / team_size / description
        Added value: +"team size used by this deterministic tool."
      • addedInput schema / properties / team_size / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / working_days / description
        Added value: +"working days used by this deterministic tool."
      • addedInput schema / properties / working_days / examples
        Added value: +[
        +  1
        +]
    • Changeddetect-secrets-scanner4 fields changed
      • addedInput schema / properties / text / examples
        Added value: +[
        +  "example"
        +]
      • addedOutput schema / properties / code_risk_count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / code_risk_findings
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "code": {
        +        "type": "string"
        +      },
        +      "evidence_excerpt": {
        +        "type": "string"
        +      },
        +      "severity": {
        +        "enum": [
        +          "HIGH",
        +          "MEDIUM",
        +          "LOW"
        +        ],
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "evidence_excerpt",
        +      "severity"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "computation_basis",
        -  "finding_count",
        -  "findings",
        -  "interpretation",
        -  "next_step",
        -  "next_step_url",
        -  "severity",
        -  "types_found",
        -  "why_follow_up"
        -]New value: +[
        +  "code_risk_count",
        +  "code_risk_findings",
        +  "computation_basis",
        +  "finding_count",
        +  "findings",
        +  "interpretation",
        +  "next_step",
        +  "next_step_url",
        +  "severity",
        +  "types_found",
        +  "why_follow_up"
        +]
    • Changeddockerfile-linter1 field changed
      • addedInput schema / properties / dockerfile / examples
        Added value: +[
        +  "example"
        +]
    • Changeddora-metrics-calculator10 fields changed
      • addedInput schema / properties / change_failure_pct / description
        Added value: +"change failure expressed as a percentage."
      • addedInput schema / properties / change_failure_pct / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / deploys_per_month / description
        Added value: +"deploys per month used by this deterministic tool."
      • addedInput schema / properties / deploys_per_month / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / lead_time_hours / description
        Added value: +"lead time in hours."
      • addedInput schema / properties / lead_time_hours / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / restore_time_hours / description
        Added value: +"restore time in hours."
      • addedInput schema / properties / restore_time_hours / examples
        Added value: +[
        +  1
        +]
      • addedOutput schema / properties / computation_basis
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "change_failure_rate_tier",
        -  "deploy_frequency_tier",
        -  "interpretation",
        -  "lead_time_tier",
        -  "mttr_tier",
        -  "next_step",
        -  "next_step_url",
        -  "overall_tier",
        -  "why_follow_up"
        -]New value: +[
        +  "change_failure_rate_tier",
        +  "computation_basis",
        +  "deploy_frequency_tier",
        +  "interpretation",
        +  "lead_time_tier",
        +  "mttr_tier",
        +  "next_step",
        +  "next_step_url",
        +  "overall_tier",
        +  "why_follow_up"
        +]
    • Changedec2-cost-calculator6 fields changed
      • addedInput schema / properties / hours_per_month / description
        Added value: +"hours per month used by this deterministic tool."
      • addedInput schema / properties / hours_per_month / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / instance_type / description
        Added value: +"instance type used by this deterministic tool."
      • addedInput schema / properties / instance_type / examples
        Added value: +[
        +  "example"
        +]
      • addedInput schema / properties / os / description
        Added value: +"os used by this deterministic tool."
      • addedInput schema / properties / os / examples
        Added value: +[
        +  "example"
        +]
    • Changedegress-cost-calculator18 fields changed
      • addedInput schema / properties / avg_response_kb
        Added value: +{
        +  "description": "avg response kb used by this deterministic tool.",
        +  "examples": [
        +    1
        +  ],
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / cdn_pct
        Added value: +{
        +  "description": "cdn expressed as a percentage.",
        +  "examples": [
        +    1
        +  ],
        +  "maximum": 100,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / daily_requests
        Added value: +{
        +  "description": "daily requests used by this deterministic tool.",
        +  "examples": [
        +    1
        +  ],
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / provider
        Added value: +{
        +  "description": "Cloud provider whose published pricing model should be applied.",
        +  "enum": [
        +    "AWS",
        +    "GCP",
        +    "Azure",
        +    "Cloudflare",
        +    "DigitalOcean"
        +  ],
        +  "examples": [
        +    "AWS"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / transfer_gb
        Removed value: -{
        -  "type": "number"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "transfer_gb"
        -]New value: +[
        +  "daily_requests",
        +  "avg_response_kb"
        +]
      • addedOutput schema / properties / billable_egress_gb
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / cdn_offload_gb
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / computation_basis
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / daily_egress_gb
        Added value: +{
        +  "type": "number"
        +}
      • removedOutput schema / properties / effective_rate_per_gb
        Removed value: -{
        -  "type": "number"
        -}
      • addedOutput schema / properties / free_tier_gb
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / monthly_egress_gb
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / origin_egress_gb
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / provider
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / rate_per_gb
        Added value: +{
        +  "type": "number"
        +}
      • removedOutput schema / properties / transfer_gb
        Removed value: -{
        -  "type": "number"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "cost_risk",
        -  "effective_rate_per_gb",
        -  "interpretation",
        -  "monthly_cost_usd",
        -  "next_step",
        -  "next_step_url",
        -  "transfer_gb",
        -  "why_follow_up"
        -]New value: +[
        +  "billable_egress_gb",
        +  "cdn_offload_gb",
        +  "computation_basis",
        +  "cost_risk",
        +  "daily_egress_gb",
        +  "free_tier_gb",
        +  "interpretation",
        +  "monthly_cost_usd",
        +  "monthly_egress_gb",
        +  "next_step",
        +  "next_step_url",
        +  "origin_egress_gb",
        +  "provider",
        +  "rate_per_gb",
        +  "why_follow_up"
        +]
    • Changederror-budget-calculator10 fields changed
      • addedInput schema / properties / consumed_minutes / description
        Added value: +"consumed in minutes."
      • addedInput schema / properties / consumed_minutes / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / slo_pct / description
        Added value: +"Service-level objective target expressed as a percentage."
      • addedInput schema / properties / slo_pct / examples
        Added value: +[
        +  0.001
        +]
      • addedInput schema / properties / window_days / description
        Added value: +"Length of the service-level objective window in days."
      • addedInput schema / properties / window_days / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / window_elapsed_days / description
        Added value: +"window elapsed days used by this deterministic tool."
      • addedInput schema / properties / window_elapsed_days / examples
        Added value: +[
        +  1
        +]
      • addedOutput schema / properties / computation_basis
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "budget_minutes",
        -  "burn_rate",
        -  "interpretation",
        -  "next_step",
        -  "next_step_url",
        -  "remaining_minutes",
        -  "status",
        -  "why_follow_up"
        -]New value: +[
        +  "budget_minutes",
        +  "burn_rate",
        +  "computation_basis",
        +  "interpretation",
        +  "next_step",
        +  "next_step_url",
        +  "remaining_minutes",
        +  "status",
        +  "why_follow_up"
        +]
    • Changedincident-cost-calculator12 fields changed
      • addedInput schema / properties / affected_pct / description
        Added value: +"affected expressed as a percentage."
      • addedInput schema / properties / affected_pct / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / downtime_hours / description
        Added value: +"downtime in hours."
      • addedInput schema / properties / downtime_hours / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / eng_hourly / description
        Added value: +"eng hourly used by this deterministic tool."
      • addedInput schema / properties / eng_hourly / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / hourly_revenue / description
        Added value: +"hourly revenue used by the calculation; monetary values are in USD unless stated otherwise."
      • addedInput schema / properties / hourly_revenue / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / responders / description
        Added value: +"responders used by this deterministic tool."
      • addedInput schema / properties / responders / examples
        Added value: +[
        +  1
        +]
      • addedOutput schema / properties / computation_basis
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "engineering_cost_usd",
        -  "interpretation",
        -  "next_step",
        -  "next_step_url",
        -  "revenue_impact_usd",
        -  "severity",
        -  "total_cost_usd",
        -  "why_follow_up"
        -]New value: +[
        +  "computation_basis",
        +  "engineering_cost_usd",
        +  "interpretation",
        +  "next_step",
        +  "next_step_url",
        +  "revenue_impact_usd",
        +  "severity",
        +  "total_cost_usd",
        +  "why_follow_up"
        +]
    • Changedknown-vulnerability-checker1 field changed
      • addedInput schema / properties / package_name / examples
        Added value: +[
        +  "example"
        +]
    • Changedkubernetes-manifest-linter1 field changed
      • addedInput schema / properties / manifest / examples
        Added value: +[
        +  "example"
        +]
    • Changedmttr-calculator2 fields changed
      • addedInput schema / properties / incidents / description
        Added value: +"incidents used by this deterministic tool."
      • addedInput schema / properties / incidents / examples
        Added value: +[
        +  "example"
        +]
    • Changedon-call-burden-calculator8 fields changed
      • removedInput schema / properties / engineer_count
        Removed value: -{
        -  "minimum": 1,
        -  "type": "number"
        -}
      • removedInput schema / properties / hourly_cost
        Removed value: -{
        -  "minimum": 0,
        -  "type": "number"
        -}
      • addedInput schema / properties / hourly_rate
        Added value: +{
        +  "description": "hourly rate used by the calculation; monetary values are in USD unless stated otherwise.",
        +  "examples": [
        +    1
        +  ],
        +  "minimum": 0,
        +  "type": "number"
        +}
      • removedInput schema / properties / hours_per_shift
        Removed value: -{
        -  "minimum": 1,
        -  "type": "number"
        -}
      • addedInput schema / properties / rotation_weeks
        Added value: +{
        +  "description": "rotation weeks used by this deterministic tool.",
        +  "examples": [
        +    1
        +  ],
        +  "exclusiveMinimum": 0,
        +  "type": "number"
        +}
      • removedInput schema / properties / shifts_per_month
        Removed value: -{
        -  "minimum": 1,
        -  "type": "number"
        -}
      • addedInput schema / properties / team_size
        Added value: +{
        +  "description": "team size used by this deterministic tool.",
        +  "examples": [
        +    1
        +  ],
        +  "minimum": 1,
        +  "type": "number"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "engineer_count",
        -  "shifts_per_month",
        -  "hours_per_shift",
        -  "hourly_cost"
        -]New value: +[
        +  "team_size",
        +  "rotation_weeks",
        +  "hourly_rate"
        +]
    • Changedpipeline-cost-calculator10 fields changed
      • addedInput schema / properties / avg_job_min / description
        Added value: +"avg job min used by this deterministic tool."
      • addedInput schema / properties / avg_job_min / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / jobs_per_run / description
        Added value: +"jobs per run used by this deterministic tool."
      • addedInput schema / properties / jobs_per_run / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / runner / description
        Added value: +"runner used by this deterministic tool."
      • addedInput schema / properties / runner / examples
        Added value: +[
        +  "example"
        +]
      • addedInput schema / properties / runs_per_month / description
        Added value: +"runs per month used by this deterministic tool."
      • addedInput schema / properties / runs_per_month / examples
        Added value: +[
        +  1
        +]
      • addedOutput schema / properties / computation_basis
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "billable_minutes",
        -  "interpretation",
        -  "monthly_cost_usd",
        -  "next_step",
        -  "next_step_url",
        -  "runner_multiplier",
        -  "severity",
        -  "total_minutes_per_month",
        -  "why_follow_up"
        -]New value: +[
        +  "billable_minutes",
        +  "computation_basis",
        +  "interpretation",
        +  "monthly_cost_usd",
        +  "next_step",
        +  "next_step_url",
        +  "runner_multiplier",
        +  "severity",
        +  "total_minutes_per_month",
        +  "why_follow_up"
        +]
    • Changedprecision-recall-f1-calculator8 fields changed
      • addedInput schema / properties / beta / description
        Added value: +"beta used by this deterministic tool."
      • addedInput schema / properties / beta / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / precision / description
        Added value: +"precision used by this deterministic tool."
      • addedInput schema / properties / precision / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / recall / description
        Added value: +"recall used by this deterministic tool."
      • addedInput schema / properties / recall / examples
        Added value: +[
        +  1
        +]
      • addedOutput schema / properties / computation_basis
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "f1_score",
        -  "f_beta_score",
        -  "interpretation",
        -  "next_step",
        -  "next_step_url",
        -  "precision_recall_balance",
        -  "why_follow_up"
        -]New value: +[
        +  "computation_basis",
        +  "f1_score",
        +  "f_beta_score",
        +  "interpretation",
        +  "next_step",
        +  "next_step_url",
        +  "precision_recall_balance",
        +  "why_follow_up"
        +]
    • Changedquery-cost-estimator18 fields changed
      • removedInput schema / properties / query
        Removed value: -{
        -  "description": "SQL query to analyze",
        -  "type": "string"
        -}
      • addedInput schema / properties / selectivity_pct
        Added value: +{
        +  "description": "selectivity expressed as a percentage.",
        +  "examples": [
        +    1
        +  ],
        +  "maximum": 100,
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / storage_type
        Added value: +{
        +  "description": "storage type; accepted values: ssd, nvme, hdd, network.",
        +  "enum": [
        +    "ssd",
        +    "nvme",
        +    "hdd",
        +    "network"
        +  ],
        +  "examples": [
        +    "ssd"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / table_pages
        Added value: +{
        +  "description": "table pages used by this deterministic tool.",
        +  "examples": [
        +    1
        +  ],
        +  "minimum": 1,
        +  "type": "number"
        +}
      • addedInput schema / properties / table_rows
        Added value: +{
        +  "description": "table rows used by this deterministic tool.",
        +  "examples": [
        +    1
        +  ],
        +  "minimum": 1,
        +  "type": "number"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "query"
        -]New value: +[
        +  "table_rows",
        +  "table_pages",
        +  "selectivity_pct",
        +  "storage_type"
        +]
      • removedOutput schema / properties / cost_level
        Removed value: -{
        -  "type": "string"
        -}
      • addedOutput schema / properties / cost_ratio
        Added value: +{
        +  "type": "number"
        +}
      • removedOutput schema / properties / cost_score
        Removed value: -{
        -  "type": "number"
        -}
      • addedOutput schema / properties / index_pages
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / index_scan_cost
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / index_tuples
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / random_page_cost
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / recommended_plan
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / sequential_scan_cost
        Added value: +{
        +  "type": "number"
        +}
      • removedOutput schema / properties / warning_count
        Removed value: -{
        -  "type": "number"
        -}
      • removedOutput schema / properties / warnings
        Removed value: -{
        -  "items": {
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "computation_basis",
        -  "cost_level",
        -  "cost_score",
        -  "interpretation",
        -  "next_step",
        -  "next_step_url",
        -  "warning_count",
        -  "warnings",
        -  "why_follow_up"
        -]New value: +[
        +  "computation_basis",
        +  "cost_ratio",
        +  "index_pages",
        +  "index_scan_cost",
        +  "index_tuples",
        +  "interpretation",
        +  "next_step",
        +  "next_step_url",
        +  "random_page_cost",
        +  "recommended_plan",
        +  "sequential_scan_cost",
        +  "why_follow_up"
        +]
    • Changedrate-limit-utilization-calculator3 fields changed
      • addedInput schema / properties / current_requests / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / limit / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / window_seconds / examples
        Added value: +[
        +  1
        +]
    • Changedreserved-instance-breakeven12 fields changed
      • addedInput schema / properties / od_monthly / description
        Added value: +"od monthly used by this deterministic tool."
      • addedInput schema / properties / od_monthly / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / ri_1yr_monthly / description
        Added value: +"ri 1yr monthly used by this deterministic tool."
      • addedInput schema / properties / ri_1yr_monthly / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / ri_1yr_upfront / description
        Added value: +"ri 1yr upfront used by this deterministic tool."
      • addedInput schema / properties / ri_1yr_upfront / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / ri_3yr_monthly / description
        Added value: +"ri 3yr monthly used by this deterministic tool."
      • addedInput schema / properties / ri_3yr_monthly / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / ri_3yr_upfront / description
        Added value: +"ri 3yr upfront used by this deterministic tool."
      • addedInput schema / properties / ri_3yr_upfront / examples
        Added value: +[
        +  1
        +]
      • addedOutput schema / properties / computation_basis
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "breakeven_months",
        -  "interpretation",
        -  "net_savings_1yr_usd",
        -  "net_savings_3yr_usd",
        -  "next_step",
        -  "next_step_url",
        -  "recommended_term",
        -  "severity",
        -  "why_follow_up"
        -]New value: +[
        +  "breakeven_months",
        +  "computation_basis",
        +  "interpretation",
        +  "net_savings_1yr_usd",
        +  "net_savings_3yr_usd",
        +  "next_step",
        +  "next_step_url",
        +  "recommended_term",
        +  "severity",
        +  "why_follow_up"
        +]
    • Changedrightsizing-calculator12 fields changed
      • addedInput schema / properties / current_memory_gb / description
        Added value: +"current memory in gigabytes."
      • addedInput schema / properties / current_memory_gb / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / current_vcpu / description
        Added value: +"current vcpu used by this deterministic tool."
      • addedInput schema / properties / current_vcpu / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / hourly_cost / description
        Added value: +"hourly cost used by the calculation; monetary values are in USD unless stated otherwise."
      • addedInput schema / properties / hourly_cost / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / instance_count / description
        Added value: +"instance count used by this deterministic tool."
      • addedInput schema / properties / instance_count / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / p99_cpu_pct / description
        Added value: +"p99 cpu expressed as a percentage."
      • addedInput schema / properties / p99_cpu_pct / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / p99_memory_pct / description
        Added value: +"p99 memory expressed as a percentage."
      • addedInput schema / properties / p99_memory_pct / examples
        Added value: +[
        +  1
        +]
    • Changedslo-burn-rate-calculator11 fields changed
      • addedInput schema / properties / errors / description
        Added value: +"Number of failed requests observed in the measurement window."
      • addedInput schema / properties / errors / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / slo / description
        Added value: +"Service-level objective target expressed as a percentage."
      • addedInput schema / properties / slo / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / total / description
        Added value: +"Total number of requests observed in the measurement window."
      • addedInput schema / properties / total / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / window_hours
        Added value: +{
        +  "description": "Length of the observed measurement window in hours.",
        +  "examples": [
        +    1
        +  ],
        +  "minimum": 1,
        +  "type": "number"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "errors",
        -  "total",
        -  "slo"
        -]New value: +[
        +  "errors",
        +  "total",
        +  "slo",
        +  "window_hours"
        +]
      • addedOutput schema / properties / computation_basis
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / window_hours
        Added value: +{
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "budget_consumed_pct_per_hour",
        -  "burn_rate",
        -  "error_rate_pct",
        -  "interpretation",
        -  "next_step",
        -  "next_step_url",
        -  "status",
        -  "why_follow_up"
        -]New value: +[
        +  "budget_consumed_pct_per_hour",
        +  "burn_rate",
        +  "computation_basis",
        +  "error_rate_pct",
        +  "interpretation",
        +  "next_step",
        +  "next_step_url",
        +  "status",
        +  "why_follow_up",
        +  "window_hours"
        +]
    • Changedsoftware-purchase-risk-calculator16 fields changed
      • addedInput schema / properties / changeManagementRisk / description
        Added value: +"changeManagementRisk used by this deterministic tool."
      • addedInput schema / properties / changeManagementRisk / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / contractLengthMonths / description
        Added value: +"contractLengthMonths used by this deterministic tool."
      • addedInput schema / properties / contractLengthMonths / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / integrationCount / description
        Added value: +"integrationCount used by this deterministic tool."
      • addedInput schema / properties / integrationCount / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / internalHourlyCost / description
        Added value: +"internalHourlyCost used by this deterministic tool."
      • addedInput schema / properties / internalHourlyCost / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / monthlySubscription / description
        Added value: +"monthlySubscription used by this deterministic tool."
      • addedInput schema / properties / monthlySubscription / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / numUsers / description
        Added value: +"numUsers used by this deterministic tool."
      • addedInput schema / properties / numUsers / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / setupHours / description
        Added value: +"setupHours used by this deterministic tool."
      • addedInput schema / properties / setupHours / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / vendorStabilityScore / description
        Added value: +"vendorStabilityScore used by this deterministic tool."
      • addedInput schema / properties / vendorStabilityScore / examples
        Added value: +[
        +  1
        +]
    • Changedterraform-plan-cost-estimator6 fields changed
      • addedInput schema / properties / count / description
        Added value: +"count used by this deterministic tool."
      • addedInput schema / properties / count / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / instance_size / description
        Added value: +"instance size used by this deterministic tool."
      • addedInput schema / properties / instance_size / examples
        Added value: +[
        +  "example"
        +]
      • addedInput schema / properties / resource_type / description
        Added value: +"resource type used by this deterministic tool."
      • addedInput schema / properties / resource_type / examples
        Added value: +[
        +  "example"
        +]
    • Changedtotal-cost-of-ownership-calculator16 fields changed
      • addedInput schema / properties / adminHoursPerMonth / description
        Added value: +"adminHoursPerMonth used by this deterministic tool."
      • addedInput schema / properties / adminHoursPerMonth / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / baseMonthlySubscription / description
        Added value: +"baseMonthlySubscription used by this deterministic tool."
      • addedInput schema / properties / baseMonthlySubscription / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / contractLength / description
        Added value: +"contractLength used by this deterministic tool."
      • addedInput schema / properties / contractLength / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / expectedActiveUsers / description
        Added value: +"expectedActiveUsers used by this deterministic tool."
      • addedInput schema / properties / expectedActiveUsers / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / internalHourlyCost105 / description
        Added value: +"internalHourlyCost105 used by this deterministic tool."
      • addedInput schema / properties / internalHourlyCost105 / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / numPaidSeats / description
        Added value: +"numPaidSeats used by this deterministic tool."
      • addedInput schema / properties / numPaidSeats / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / oneTimeFees / description
        Added value: +"oneTimeFees used by this deterministic tool."
      • addedInput schema / properties / oneTimeFees / examples
        Added value: +[
        +  1
        +]
      • addedInput schema / properties / perUserMonthlyFee / description
        Added value: +"perUserMonthlyFee used by this deterministic tool."
      • addedInput schema / properties / perUserMonthlyFee / examples
        Added value: +[
        +  1
        +]
  5. 31 tool updates
    • Changedalert-fatigue-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "annual_wasted_hours": {
        +      "type": "number"
        +    },
        +    "burden_per_engineer_hours": {
        +      "type": "number"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "fatigue_index": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "noise_alerts_per_week": {
        +      "type": "number"
        +    },
        +    "noise_rate_pct": {
        +      "type": "number"
        +    },
        +    "output_tier": {
        +      "type": "string"
        +    },
        +    "remaining_pct": {
        +      "type": "number"
        +    },
        +    "signal_value": {
        +      "type": "number"
        +    },
        +    "wasted_hours_per_week": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "annual_wasted_hours",
        +    "burden_per_engineer_hours",
        +    "computation_basis",
        +    "fatigue_index",
        +    "interpretation",
        +    "next_step",
        +    "next_step_url",
        +    "noise_alerts_per_week",
        +    "noise_rate_pct",
        +    "output_tier",
        +    "remaining_pct",
        +    "signal_value",
        +    "wasted_hours_per_week",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedapdex-score-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "apdex_score": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "rating": {
        +      "type": "string"
        +    },
        +    "satisfied_pct": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "apdex_score",
        +    "interpretation",
        +    "next_step",
        +    "next_step_url",
        +    "rating",
        +    "satisfied_pct",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedavailability-sla-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "annual_downtime_minutes": {
        +      "type": "number"
        +    },
        +    "availability_tier": {
        +      "type": "string"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "monthly_downtime_minutes": {
        +      "type": "number"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "weekly_downtime_minutes": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "annual_downtime_minutes",
        +    "availability_tier",
        +    "interpretation",
        +    "monthly_downtime_minutes",
        +    "next_step",
        +    "next_step_url",
        +    "weekly_downtime_minutes",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedcanonical-url-auditor1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "canonical_found": {
        +      "type": "string"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "issue": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "page_url": {
        +      "type": "string"
        +    },
        +    "recommendation": {
        +      "type": "string"
        +    },
        +    "severity": {
        +      "type": "string"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "canonical_found",
        +    "computation_basis",
        +    "interpretation",
        +    "issue",
        +    "next_step",
        +    "next_step_url",
        +    "page_url",
        +    "recommendation",
        +    "severity",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedcertificate-expiry-checker1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "days_remaining": {
        +      "type": "number"
        +    },
        +    "domain": {
        +      "type": "string"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "risk_level": {
        +      "type": "string"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "computation_basis",
        +    "days_remaining",
        +    "domain",
        +    "interpretation",
        +    "next_step",
        +    "next_step_url",
        +    "risk_level",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedchange-failure-rate-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "change_failure_rate_pct": {
        +      "type": "number"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "dora_rating": {
        +      "type": "string"
        +    },
        +    "failed_count": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "output_tier": {
        +      "type": "string"
        +    },
        +    "remaining_pct": {
        +      "type": "number"
        +    },
        +    "signal_value": {
        +      "type": "number"
        +    },
        +    "total_count": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "change_failure_rate_pct",
        +    "computation_basis",
        +    "dora_rating",
        +    "failed_count",
        +    "interpretation",
        +    "next_step",
        +    "next_step_url",
        +    "output_tier",
        +    "remaining_pct",
        +    "signal_value",
        +    "total_count",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedcloud-waste-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "annualized": {
        +      "type": "number"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "do_savings": {
        +      "type": "number"
        +    },
        +    "idle_waste": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "monthly_cost": {
        +      "type": "number"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "output_tier": {
        +      "type": "string"
        +    },
        +    "oversized_waste": {
        +      "type": "number"
        +    },
        +    "signal_value": {
        +      "type": "number"
        +    },
        +    "unattached_cost": {
        +      "type": "number"
        +    },
        +    "waste_pct": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "annualized",
        +    "computation_basis",
        +    "do_savings",
        +    "idle_waste",
        +    "interpretation",
        +    "monthly_cost",
        +    "next_step",
        +    "next_step_url",
        +    "output_tier",
        +    "oversized_waste",
        +    "signal_value",
        +    "unattached_cost",
        +    "waste_pct",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedcluster-capacity-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "allocatable_cpu_cores": {
        +      "type": "number"
        +    },
        +    "allocatable_memory_gb": {
        +      "type": "number"
        +    },
        +    "cpu_utilization_pct": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "memory_utilization_pct": {
        +      "type": "number"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "pressure_level": {
        +      "type": "string"
        +    },
        +    "severity": {
        +      "type": "string"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "allocatable_cpu_cores",
        +    "allocatable_memory_gb",
        +    "cpu_utilization_pct",
        +    "interpretation",
        +    "memory_utilization_pct",
        +    "next_step",
        +    "next_step_url",
        +    "pressure_level",
        +    "severity",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedconnection-pool-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "max_connections_utilization_pct": {},
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "per_app_instance": {
        +      "type": "number"
        +    },
        +    "recommended_pool_total": {
        +      "type": "number"
        +    },
        +    "warning": {
        +      "type": "boolean"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "interpretation",
        +    "next_step",
        +    "next_step_url",
        +    "per_app_instance",
        +    "recommended_pool_total",
        +    "warning",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changeddeployment-frequency-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "deploys_per_day": {
        +      "type": "number"
        +    },
        +    "deploys_per_dev_per_day": {
        +      "type": "number"
        +    },
        +    "deploys_per_week": {
        +      "type": "number"
        +    },
        +    "dora_rating": {
        +      "type": "string"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "output_tier": {
        +      "type": "string"
        +    },
        +    "remaining_pct": {
        +      "type": "number"
        +    },
        +    "signal_value": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "computation_basis",
        +    "deploys_per_day",
        +    "deploys_per_dev_per_day",
        +    "deploys_per_week",
        +    "dora_rating",
        +    "interpretation",
        +    "next_step",
        +    "next_step_url",
        +    "output_tier",
        +    "remaining_pct",
        +    "signal_value",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changeddetect-secrets-scanner1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "finding_count": {
        +      "type": "number"
        +    },
        +    "findings": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "line": {
        +            "type": "number"
        +          },
        +          "redacted": {
        +            "type": "string"
        +          },
        +          "type": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "line",
        +          "redacted",
        +          "type"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "severity": {
        +      "type": "string"
        +    },
        +    "types_found": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "computation_basis",
        +    "finding_count",
        +    "findings",
        +    "interpretation",
        +    "next_step",
        +    "next_step_url",
        +    "severity",
        +    "types_found",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changeddockerfile-linter1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "issue_count": {
        +      "type": "number"
        +    },
        +    "issues": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "issue": {
        +            "type": "string"
        +          },
        +          "line": {
        +            "type": "number"
        +          },
        +          "suggestion": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "issue",
        +          "line",
        +          "suggestion"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "severity": {
        +      "type": "string"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "computation_basis",
        +    "interpretation",
        +    "issue_count",
        +    "issues",
        +    "next_step",
        +    "next_step_url",
        +    "severity",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changeddora-metrics-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "change_failure_rate_tier": {
        +      "type": "string"
        +    },
        +    "deploy_frequency_tier": {
        +      "type": "string"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "lead_time_tier": {
        +      "type": "string"
        +    },
        +    "mttr_tier": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "overall_tier": {
        +      "type": "string"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "change_failure_rate_tier",
        +    "deploy_frequency_tier",
        +    "interpretation",
        +    "lead_time_tier",
        +    "mttr_tier",
        +    "next_step",
        +    "next_step_url",
        +    "overall_tier",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedec2-cost-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "annual_cost": {
        +      "type": "number"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "do_equivalent_monthly": {
        +      "type": "number"
        +    },
        +    "do_savings": {
        +      "type": "number"
        +    },
        +    "hourly_rate": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "monthly_cost": {
        +      "type": "number"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "output_tier": {
        +      "type": "string"
        +    },
        +    "signal_value": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "annual_cost",
        +    "computation_basis",
        +    "do_equivalent_monthly",
        +    "do_savings",
        +    "hourly_rate",
        +    "interpretation",
        +    "monthly_cost",
        +    "next_step",
        +    "next_step_url",
        +    "output_tier",
        +    "signal_value",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedegress-cost-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "cost_risk": {
        +      "type": "string"
        +    },
        +    "effective_rate_per_gb": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "monthly_cost_usd": {
        +      "type": "number"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "transfer_gb": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "cost_risk",
        +    "effective_rate_per_gb",
        +    "interpretation",
        +    "monthly_cost_usd",
        +    "next_step",
        +    "next_step_url",
        +    "transfer_gb",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changederror-budget-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "budget_minutes": {
        +      "type": "number"
        +    },
        +    "burn_rate": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "remaining_minutes": {
        +      "type": "number"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "budget_minutes",
        +    "burn_rate",
        +    "interpretation",
        +    "next_step",
        +    "next_step_url",
        +    "remaining_minutes",
        +    "status",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedincident-cost-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "engineering_cost_usd": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "revenue_impact_usd": {
        +      "type": "number"
        +    },
        +    "severity": {
        +      "type": "string"
        +    },
        +    "total_cost_usd": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "engineering_cost_usd",
        +    "interpretation",
        +    "next_step",
        +    "next_step_url",
        +    "revenue_impact_usd",
        +    "severity",
        +    "total_cost_usd",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedknown-vulnerability-checker1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "checked_against": {
        +      "type": "string"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "cve": {
        +      "type": "string"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "package_name": {
        +      "type": "string"
        +    },
        +    "severity": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "checked_against",
        +    "computation_basis",
        +    "cve",
        +    "interpretation",
        +    "next_step",
        +    "next_step_url",
        +    "package_name",
        +    "severity",
        +    "status",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedkubernetes-manifest-linter1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "issue_count": {
        +      "type": "number"
        +    },
        +    "issues": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "issue": {
        +            "type": "string"
        +          },
        +          "recommendation": {
        +            "type": "string"
        +          },
        +          "severity": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "issue",
        +          "recommendation",
        +          "severity"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "severity": {
        +      "type": "string"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "computation_basis",
        +    "interpretation",
        +    "issue_count",
        +    "issues",
        +    "next_step",
        +    "next_step_url",
        +    "severity",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedmttr-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "dora_rating": {
        +      "type": "string"
        +    },
        +    "incident_count": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "mean_total_minutes": {
        +      "type": "number"
        +    },
        +    "mttd_minutes": {
        +      "type": "number"
        +    },
        +    "mttr_minutes": {
        +      "type": "number"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "output_tier": {
        +      "type": "string"
        +    },
        +    "remaining_pct": {
        +      "type": "number"
        +    },
        +    "signal_value": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "computation_basis",
        +    "dora_rating",
        +    "incident_count",
        +    "interpretation",
        +    "mean_total_minutes",
        +    "mttd_minutes",
        +    "mttr_minutes",
        +    "next_step",
        +    "next_step_url",
        +    "output_tier",
        +    "remaining_pct",
        +    "signal_value",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedon-call-burden-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "annual_cost": {
        +      "type": "number"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "hours_per_engineer": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "monthly_cost": {
        +      "type": "number"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "output_tier": {
        +      "type": "string"
        +    },
        +    "pct_working_time": {
        +      "type": "number"
        +    },
        +    "remaining_pct": {
        +      "type": "number"
        +    },
        +    "shifts_per_engineer": {
        +      "type": "number"
        +    },
        +    "signal_value": {
        +      "type": "number"
        +    },
        +    "total_hours_per_month": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "annual_cost",
        +    "computation_basis",
        +    "hours_per_engineer",
        +    "interpretation",
        +    "monthly_cost",
        +    "next_step",
        +    "next_step_url",
        +    "output_tier",
        +    "pct_working_time",
        +    "remaining_pct",
        +    "shifts_per_engineer",
        +    "signal_value",
        +    "total_hours_per_month",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedpipeline-cost-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "billable_minutes": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "monthly_cost_usd": {
        +      "type": "number"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "runner_multiplier": {
        +      "type": "number"
        +    },
        +    "severity": {
        +      "type": "string"
        +    },
        +    "total_minutes_per_month": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "billable_minutes",
        +    "interpretation",
        +    "monthly_cost_usd",
        +    "next_step",
        +    "next_step_url",
        +    "runner_multiplier",
        +    "severity",
        +    "total_minutes_per_month",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedprecision-recall-f1-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "f1_score": {
        +      "type": "number"
        +    },
        +    "f_beta_score": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "precision_recall_balance": {
        +      "type": "string"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "f1_score",
        +    "f_beta_score",
        +    "interpretation",
        +    "next_step",
        +    "next_step_url",
        +    "precision_recall_balance",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedquery-cost-estimator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "cost_level": {
        +      "type": "string"
        +    },
        +    "cost_score": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "warning_count": {
        +      "type": "number"
        +    },
        +    "warnings": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "computation_basis",
        +    "cost_level",
        +    "cost_score",
        +    "interpretation",
        +    "next_step",
        +    "next_step_url",
        +    "warning_count",
        +    "warnings",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedrate-limit-utilization-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "buffer": {
        +      "type": "number"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "safe": {
        +      "type": "boolean"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "utilization_pct": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    },
        +    "window_seconds": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "buffer",
        +    "computation_basis",
        +    "interpretation",
        +    "next_step",
        +    "next_step_url",
        +    "safe",
        +    "status",
        +    "utilization_pct",
        +    "why_follow_up",
        +    "window_seconds"
        +  ],
        +  "type": "object"
        +}
    • Changedreserved-instance-breakeven1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "breakeven_months": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "net_savings_1yr_usd": {
        +      "type": "number"
        +    },
        +    "net_savings_3yr_usd": {
        +      "type": "number"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "recommended_term": {
        +      "type": "string"
        +    },
        +    "severity": {
        +      "type": "string"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "breakeven_months",
        +    "interpretation",
        +    "net_savings_1yr_usd",
        +    "net_savings_3yr_usd",
        +    "next_step",
        +    "next_step_url",
        +    "recommended_term",
        +    "severity",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedrightsizing-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "annual_savings": {
        +      "type": "number"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "do_savings": {
        +      "type": "number"
        +    },
        +    "instance_count": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "monthly_cost": {
        +      "type": "number"
        +    },
        +    "needed_memory_gb": {
        +      "type": "number"
        +    },
        +    "needed_vcpu": {
        +      "type": "number"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "output_tier": {
        +      "type": "string"
        +    },
        +    "savings_factor": {
        +      "type": "number"
        +    },
        +    "signal_value": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "annual_savings",
        +    "computation_basis",
        +    "do_savings",
        +    "instance_count",
        +    "interpretation",
        +    "monthly_cost",
        +    "needed_memory_gb",
        +    "needed_vcpu",
        +    "next_step",
        +    "next_step_url",
        +    "output_tier",
        +    "savings_factor",
        +    "signal_value",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedslo-burn-rate-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "budget_consumed_pct_per_hour": {
        +      "type": "number"
        +    },
        +    "burn_rate": {
        +      "type": "number"
        +    },
        +    "error_rate_pct": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "status": {
        +      "type": "string"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "budget_consumed_pct_per_hour",
        +    "burn_rate",
        +    "error_rate_pct",
        +    "interpretation",
        +    "next_step",
        +    "next_step_url",
        +    "status",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedsoftware-purchase-risk-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "adoption_component": {
        +      "type": "number"
        +    },
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "complexity_component": {
        +      "type": "number"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "contract_months": {
        +      "type": "number"
        +    },
        +    "contract_total": {
        +      "type": "number"
        +    },
        +    "integration_component": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "monthly_cost": {
        +      "type": "number"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "output_tier": {
        +      "type": "string"
        +    },
        +    "risk_score": {
        +      "type": "number"
        +    },
        +    "signal_value": {
        +      "type": "number"
        +    },
        +    "vendor_component": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    },
        +    "year1_labor_cost": {
        +      "type": "number"
        +    },
        +    "year1_sub_cost": {
        +      "type": "number"
        +    },
        +    "year1_total_cost": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "adoption_component",
        +    "complexity_component",
        +    "computation_basis",
        +    "contract_months",
        +    "contract_total",
        +    "integration_component",
        +    "interpretation",
        +    "monthly_cost",
        +    "next_step",
        +    "next_step_url",
        +    "output_tier",
        +    "risk_score",
        +    "signal_value",
        +    "vendor_component",
        +    "why_follow_up",
        +    "year1_labor_cost",
        +    "year1_sub_cost",
        +    "year1_total_cost"
        +  ],
        +  "type": "object"
        +}
    • Changedterraform-plan-cost-estimator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "annual_cost": {
        +      "type": "number"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "hourly_rate": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "monthly_cost": {
        +      "type": "number"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "output_tier": {
        +      "type": "string"
        +    },
        +    "resource_count": {
        +      "type": "number"
        +    },
        +    "resource_type": {
        +      "type": "string"
        +    },
        +    "signal_value": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "annual_cost",
        +    "computation_basis",
        +    "hourly_rate",
        +    "interpretation",
        +    "monthly_cost",
        +    "next_step",
        +    "next_step_url",
        +    "output_tier",
        +    "resource_count",
        +    "resource_type",
        +    "signal_value",
        +    "why_follow_up"
        +  ],
        +  "type": "object"
        +}
    • Changedtotal-cost-of-ownership-calculator1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "affiliate_context": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "affiliate": {
        +          "type": "string"
        +        },
        +        "cta_label": {
        +          "type": "string"
        +        },
        +        "disclosure": {
        +          "type": "string"
        +        },
        +        "framing": {
        +          "type": "string"
        +        },
        +        "posture": {
        +          "enum": [
        +            "secondary"
        +          ],
        +          "type": "string"
        +        },
        +        "slot_id": {
        +          "type": "string"
        +        },
        +        "url": {
        +          "type": "string"
        +        },
        +        "variant": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "affiliate",
        +        "cta_label",
        +        "disclosure",
        +        "framing",
        +        "posture",
        +        "slot_id",
        +        "url",
        +        "variant"
        +      ],
        +      "type": "object"
        +    },
        +    "computation_basis": {
        +      "type": "string"
        +    },
        +    "contract_months": {
        +      "type": "number"
        +    },
        +    "contract_total": {
        +      "type": "number"
        +    },
        +    "cost_per_user_monthly": {
        +      "type": "number"
        +    },
        +    "do_savings": {
        +      "type": "number"
        +    },
        +    "interpretation": {
        +      "type": "string"
        +    },
        +    "monthly_cost": {
        +      "type": "number"
        +    },
        +    "next_step": {
        +      "type": "string"
        +    },
        +    "next_step_url": {
        +      "type": "string"
        +    },
        +    "output_tier": {
        +      "type": "string"
        +    },
        +    "overpaying_flags": {
        +      "type": "number"
        +    },
        +    "seat_waste_cost_yr": {
        +      "type": "number"
        +    },
        +    "seat_waste_pct": {
        +      "type": "number"
        +    },
        +    "shelfware_seats": {
        +      "type": "number"
        +    },
        +    "signal_value": {
        +      "type": "number"
        +    },
        +    "why_follow_up": {
        +      "type": "string"
        +    },
        +    "year1_admin_cost": {
        +      "type": "number"
        +    },
        +    "year1_total_cost": {
        +      "type": "number"
        +    },
        +    "year1_vendor_cost": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "computation_basis",
        +    "contract_months",
        +    "contract_total",
        +    "cost_per_user_monthly",
        +    "do_savings",
        +    "interpretation",
        +    "monthly_cost",
        +    "next_step",
        +    "next_step_url",
        +    "output_tier",
        +    "overpaying_flags",
        +    "seat_waste_cost_yr",
        +    "seat_waste_pct",
        +    "shelfware_seats",
        +    "signal_value",
        +    "why_follow_up",
        +    "year1_admin_cost",
        +    "year1_total_cost",
        +    "year1_vendor_cost"
        +  ],
        +  "type": "object"
        +}
  6. 31 tool updates
    • Changedalert-fatigue-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedapdex-score-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedavailability-sla-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedcanonical-url-auditor1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedcertificate-expiry-checker1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedchange-failure-rate-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedcloud-waste-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedcluster-capacity-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedconnection-pool-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changeddeployment-frequency-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changeddetect-secrets-scanner1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changeddockerfile-linter1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changeddora-metrics-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedec2-cost-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedegress-cost-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changederror-budget-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedincident-cost-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedknown-vulnerability-checker1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedkubernetes-manifest-linter1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedmttr-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedon-call-burden-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedpipeline-cost-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedprecision-recall-f1-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedquery-cost-estimator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedrate-limit-utilization-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedreserved-instance-breakeven1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedrightsizing-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedslo-burn-rate-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedsoftware-purchase-risk-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedterraform-plan-cost-estimator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Changedtotal-cost-of-ownership-calculator1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
  7. 31 tool updates
    • First observedalert-fatigue-calculator
    • First observedapdex-score-calculator
    • First observedavailability-sla-calculator
    • First observedcanonical-url-auditor
    • First observedcertificate-expiry-checker
    • First observedchange-failure-rate-calculator
    • First observedcloud-waste-calculator
    • First observedcluster-capacity-calculator
    • First observedconnection-pool-calculator
    • First observeddeployment-frequency-calculator
    • First observeddetect-secrets-scanner
    • First observeddockerfile-linter
    • First observeddora-metrics-calculator
    • First observedec2-cost-calculator
    • First observedegress-cost-calculator
    • First observederror-budget-calculator
    • First observedincident-cost-calculator
    • First observedknown-vulnerability-checker
    • First observedkubernetes-manifest-linter
    • First observedmttr-calculator
    • First observedon-call-burden-calculator
    • First observedpipeline-cost-calculator
    • First observedprecision-recall-f1-calculator
    • First observedquery-cost-estimator
    • First observedrate-limit-utilization-calculator
    • First observedreserved-instance-breakeven
    • First observedrightsizing-calculator
    • First observedslo-burn-rate-calculator
    • First observedsoftware-purchase-risk-calculator
    • First observedterraform-plan-cost-estimator
    • First observedtotal-cost-of-ownership-calculator

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Search and compare free tiers, credits, and pricing changes across 1,500+ developer tools. 8 MCP tools for infrastructure decisions, cost estimation, and vendor comparison.
    4
    6 npm
    24
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Provides a comprehensive suite of 76 tools for AWS cloud resource optimization, cost management, and infrastructure monitoring. It enables users to identify unused resources, analyze cost trends, right-size capacity, and maintain security compliance through natural language.
    76
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables analyzing AWS cloud costs from billing data, identifying waste, and providing mergeable fixes, with findings reconciled to actual invoices and priced at your negotiated rates.
    6
    28 PyPI
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources