Skip to main content
Glama

DORA Metrics Calculator

dora-metrics-calculator
Read-onlyIdempotent

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.

Input Schema

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

NameRequiredDescriptionDefault
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

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed16 schema 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"
      +]
  2. Changed10 schema 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"
      +]
  3. Changed1 schema 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"
      +}
  4. Changed1 schema field changed
    • addedInput schema / additionalProperties
      Added value: +false
  5. First observed

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources