Skip to main content
Glama

Due services

due_services
Read-onlyIdempotent

Work out which car maintenance services (oil, tires, brakes, filters, coolant, plugs, transmission, battery) are due, due soon or ok from the current odometer and optional service history, and name the next one. Use to check what a car needs now. Do NOT use for prices (use service_cost_estimate) or a 12-month plan (use service_timeline).

Input Schema

NameRequiredDescriptionDefault
unitNoUnit of odometer and last_service odometer values: 'km' (default) or 'mi'
odometerYesCurrent odometer reading, non-negative, in the unit given by unit, e.g. 48000
km_per_monthNoAverage distance driven per month in km (always km, 100-10000); adds a 'next due in about N months' hint
last_serviceNoOptional per-service history, one entry per service id; items without an entry assume last service at odometer 0
months_since_last_oilNoMonths since the last oil change; used as the time baseline for every item without its own history, default 0

Output Schema

NameRequiredDescriptionDefault
noteYesSummary counts, baseline assumptions and caveats
servicesYesStatus of every tracked maintenance service
odometer_kmYesCurrent odometer converted to km (1 decimal)
next_serviceYesThe most urgent service
odometer_inputYesOdometer value and unit as supplied

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed15 schema fields changed
    • changedInput schema / properties / km_per_month / description
      Previous value: -"Average km driven per month (100-10000)"New value: +"Average distance driven per month in km (always km, 100-10000); adds a 'next due in about N months' hint"
    • addedInput schema / properties / km_per_month / maximum
      Added value: +10000
    • addedInput schema / properties / km_per_month / minimum
      Added value: +100
    • changedInput schema / properties / last_service / description
      Previous value: -"Optional per-service history"New value: +"Optional per-service history, one entry per service id; items without an entry assume last service at odometer 0"
    • changedInput schema / properties / last_service / items / properties / id / description
      Previous value: -"Service id from the maintenance table, e.g. oil_change"New value: +"Service id, e.g. 'oil_change'"
    • addedInput schema / properties / last_service / items / properties / id / enum
      Added value: +[
      +  "oil_change",
      +  "tire_rotation",
      +  "brake_inspection",
      +  "air_filter",
      +  "cabin_filter",
      +  "coolant_service",
      +  "spark_plugs",
      +  "transmission_service",
      +  "battery_check"
      +]
    • addedInput schema / properties / last_service / items / properties / months_ago / minimum
      Added value: +0
    • changedInput schema / properties / last_service / items / properties / odometer / description
      Previous value: -"Odometer when this service was last done (same unit as above)"New value: +"Odometer when this service was last done, same unit as odometer and not above it"
    • addedInput schema / properties / last_service / items / properties / odometer / minimum
      Added value: +0
    • changedInput schema / properties / months_since_last_oil / description
      Previous value: -"Months since the last oil change; time baseline for items without their own history"New value: +"Months since the last oil change; used as the time baseline for every item without its own history, default 0"
    • addedInput schema / properties / months_since_last_oil / minimum
      Added value: +0
    • changedInput schema / properties / odometer / description
      Previous value: -"Current odometer reading"New value: +"Current odometer reading, non-negative, in the unit given by unit, e.g. 48000"
    • addedInput schema / properties / odometer / minimum
      Added value: +0
    • changedInput schema / properties / unit / description
      Previous value: -"Unit of the odometer values, default km"New value: +"Unit of odometer and last_service odometer values: 'km' (default) or 'mi'"
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "next_service": {
      +      "description": "The most urgent service",
      +      "properties": {
      +        "due_at_km": {
      +          "description": "Odometer (km) at which the service is due; null for time-only items such as battery_check",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "due_in_months": {
      +          "description": "Months from now until due by time (negative = overdue)",
      +          "type": "number"
      +        },
      +        "id": {
      +          "description": "Service id",
      +          "enum": [
      +            "oil_change",
      +            "tire_rotation",
      +            "brake_inspection",
      +            "air_filter",
      +            "cabin_filter",
      +            "coolant_service",
      +            "spark_plugs",
      +            "transmission_service",
      +            "battery_check"
      +          ],
      +          "type": "string"
      +        },
      +        "km_left": {
      +          "description": "Km until due (negative = overdue); null for time-only items",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "months_left": {
      +          "description": "Months left on the time interval (same as due_in_months)",
      +          "type": "number"
      +        },
      +        "name": {
      +          "description": "Service name, e.g. 'Oil change'",
      +          "type": "string"
      +        },
      +        "status": {
      +          "description": "'due' (within 1000 km or 1 month, or overdue), 'soon' (within 3000 km or 3 months) or 'ok'",
      +          "enum": [
      +            "due",
      +            "soon",
      +            "ok"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "name",
      +        "status",
      +        "due_at_km",
      +        "km_left",
      +        "due_in_months",
      +        "months_left"
      +      ],
      +      "type": "object"
      +    },
      +    "note": {
      +      "description": "Summary counts, baseline assumptions and caveats",
      +      "type": "string"
      +    },
      +    "odometer_input": {
      +      "description": "Odometer value and unit as supplied",
      +      "properties": {
      +        "unit": {
      +          "description": "Unit of the supplied value",
      +          "enum": [
      +            "km",
      +            "mi"
      +          ],
      +          "type": "string"
      +        },
      +        "value": {
      +          "description": "Odometer value as supplied",
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "value",
      +        "unit"
      +      ],
      +      "type": "object"
      +    },
      +    "odometer_km": {
      +      "description": "Current odometer converted to km (1 decimal)",
      +      "type": "number"
      +    },
      +    "services": {
      +      "description": "Status of every tracked maintenance service",
      +      "items": {
      +        "properties": {
      +          "due_at_km": {
      +            "description": "Odometer (km) at which the service is due; null for time-only items such as battery_check",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "due_in_months": {
      +            "description": "Months from now until due by time (negative = overdue)",
      +            "type": "number"
      +          },
      +          "id": {
      +            "description": "Service id",
      +            "enum": [
      +              "oil_change",
      +              "tire_rotation",
      +              "brake_inspection",
      +              "air_filter",
      +              "cabin_filter",
      +              "coolant_service",
      +              "spark_plugs",
      +              "transmission_service",
      +              "battery_check"
      +            ],
      +            "type": "string"
      +          },
      +          "items": {
      +            "description": "What the service typically includes",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "km_left": {
      +            "description": "Km until due (negative = overdue); null for time-only items",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "months_left": {
      +            "description": "Months left on the time interval (same as due_in_months)",
      +            "type": "number"
      +          },
      +          "name": {
      +            "description": "Service name, e.g. 'Oil change'",
      +            "type": "string"
      +          },
      +          "status": {
      +            "description": "'due' (within 1000 km or 1 month, or overdue), 'soon' (within 3000 km or 3 months) or 'ok'",
      +            "enum": [
      +              "due",
      +              "soon",
      +              "ok"
      +            ],
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "name",
      +          "status",
      +          "due_at_km",
      +          "km_left",
      +          "due_in_months",
      +          "months_left",
      +          "items"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "odometer_km",
      +    "odometer_input",
      +    "services",
      +    "next_service",
      +    "note"
      +  ],
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "air_filter_replacement": {
      -      "description": "The air filter replacement returned by the tool.",
      -      "properties": {
      -        "km_to_due": {
      -          "description": "The distance in kilometers to the next due air filter replacement",
      -          "type": "number"
      -        },
      -        "months_to_due": {
      -          "description": "The number of months to the next due air filter replacement",
      -          "type": "number"
      -        },
      -        "status": {
      -          "description": "The due status of the air filter replacement service",
      -          "enum": [
      -            "due",
      -            "soon",
      -            "ok"
      -          ],
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "status",
      -        "km_to_due",
      -        "months_to_due"
      -      ],
      -      "type": "object"
      -    },
      -    "battery_replacement": {
      -      "description": "The battery replacement returned by the tool.",
      -      "properties": {
      -        "km_to_due": {
      -          "description": "The distance in kilometers to the next due battery replacement",
      -          "type": "number"
      -        },
      -        "months_to_due": {
      -          "description": "The number of months to the next due battery replacement",
      -          "type": "number"
      -        },
      -        "status": {
      -          "description": "The due status of the battery replacement service",
      -          "enum": [
      -            "due",
      -            "soon",
      -            "ok"
      -          ],
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "status",
      -        "km_to_due",
      -        "months_to_due"
      -      ],
      -      "type": "object"
      -    },
      -    "brake_inspection": {
      -      "description": "The brake inspection returned by the tool.",
      -      "properties": {
      -        "km_to_due": {
      -          "description": "The distance in kilometers to the next due brake inspection",
      -          "type": "number"
      -        },
      -        "months_to_due": {
      -          "description": "The number of months to the next due brake inspection",
      -          "type": "number"
      -        },
      -        "status": {
      -          "description": "The due status of the brake inspection service",
      -          "enum": [
      -            "due",
      -            "soon",
      -            "ok"
      -          ],
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "status",
      -        "km_to_due",
      -        "months_to_due"
      -      ],
      -      "type": "object"
      -    },
      -    "coolant_flush": {
      -      "description": "The coolant flush returned by the tool.",
      -      "properties": {
      -        "km_to_due": {
      -          "description": "The distance in kilometers to the next due coolant flush",
      -          "type": "number"
      -        },
      -        "months_to_due": {
      -          "description": "The number of months to the next due coolant flush",
      -          "type": "number"
      -        },
      -        "status": {
      -          "description": "The due status of the coolant flush service",
      -          "enum": [
      -            "due",
      -            "soon",
      -            "ok"
      -          ],
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "status",
      -        "km_to_due",
      -        "months_to_due"
      -      ],
      -      "type": "object"
      -    },
      -    "oil_change": {
      -      "description": "The oil change returned by the tool.",
      -      "properties": {
      -        "km_to_due": {
      -          "description": "The distance in kilometers to the next due oil change",
      -          "type": "number"
      -        },
      -        "months_to_due": {
      -          "description": "The number of months to the next due oil change",
      -          "type": "number"
      -        },
      -        "status": {
      -          "description": "The due status of the oil change service",
      -          "enum": [
      -            "due",
      -            "soon",
      -            "ok"
      -          ],
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "status",
      -        "km_to_due",
      -        "months_to_due"
      -      ],
      -      "type": "object"
      -    },
      -    "spark_plug_replacement": {
      -      "description": "The spark plug replacement returned by the tool.",
      -      "properties": {
      -        "km_to_due": {
      -          "description": "The distance in kilometers to the next due spark plug replacement",
      -          "type": "number"
      -        },
      -        "months_to_due": {
      -          "description": "The number of months to the next due spark plug replacement",
      -          "type": "number"
      -        },
      -        "status": {
      -          "description": "The due status of the spark plug replacement service",
      -          "enum": [
      -            "due",
      -            "soon",
      -            "ok"
      -          ],
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "status",
      -        "km_to_due",
      -        "months_to_due"
      -      ],
      -      "type": "object"
      -    },
      -    "tire_rotation": {
      -      "description": "The tire rotation returned by the tool.",
      -      "properties": {
      -        "km_to_due": {
      -          "description": "The distance in kilometers to the next due tire rotation",
      -          "type": "number"
      -        },
      -        "months_to_due": {
      -          "description": "The number of months to the next due tire rotation",
      -          "type": "number"
      -        },
      -        "status": {
      -          "description": "The due status of the tire rotation service",
      -          "enum": [
      -            "due",
      -            "soon",
      -            "ok"
      -          ],
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "status",
      -        "km_to_due",
      -        "months_to_due"
      -      ],
      -      "type": "object"
      -    },
      -    "transmission_service": {
      -      "description": "The transmission service returned by the tool.",
      -      "properties": {
      -        "km_to_due": {
      -          "description": "The distance in kilometers to the next due transmission service",
      -          "type": "number"
      -        },
      -        "months_to_due": {
      -          "description": "The number of months to the next due transmission service",
      -          "type": "number"
      -        },
      -        "status": {
      -          "description": "The due status of the transmission service",
      -          "enum": [
      -            "due",
      -            "soon",
      -            "ok"
      -          ],
      -          "type": "string"
      -        }
      -      },
      -      "required": [
      -        "status",
      -        "km_to_due",
      -        "months_to_due"
      -      ],
      -      "type": "object"
      -    }
      -  },
      -  "required": [
      -    "oil_change",
      -    "tire_rotation",
      -    "brake_inspection",
      -    "air_filter_replacement",
      -    "coolant_flush",
      -    "spark_plug_replacement",
      -    "transmission_service",
      -    "battery_replacement"
      -  ],
      -  "type": "object"
      -}New value: +null
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "air_filter_replacement": {
      +      "description": "The air filter replacement returned by the tool.",
      +      "properties": {
      +        "km_to_due": {
      +          "description": "The distance in kilometers to the next due air filter replacement",
      +          "type": "number"
      +        },
      +        "months_to_due": {
      +          "description": "The number of months to the next due air filter replacement",
      +          "type": "number"
      +        },
      +        "status": {
      +          "description": "The due status of the air filter replacement service",
      +          "enum": [
      +            "due",
      +            "soon",
      +            "ok"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "status",
      +        "km_to_due",
      +        "months_to_due"
      +      ],
      +      "type": "object"
      +    },
      +    "battery_replacement": {
      +      "description": "The battery replacement returned by the tool.",
      +      "properties": {
      +        "km_to_due": {
      +          "description": "The distance in kilometers to the next due battery replacement",
      +          "type": "number"
      +        },
      +        "months_to_due": {
      +          "description": "The number of months to the next due battery replacement",
      +          "type": "number"
      +        },
      +        "status": {
      +          "description": "The due status of the battery replacement service",
      +          "enum": [
      +            "due",
      +            "soon",
      +            "ok"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "status",
      +        "km_to_due",
      +        "months_to_due"
      +      ],
      +      "type": "object"
      +    },
      +    "brake_inspection": {
      +      "description": "The brake inspection returned by the tool.",
      +      "properties": {
      +        "km_to_due": {
      +          "description": "The distance in kilometers to the next due brake inspection",
      +          "type": "number"
      +        },
      +        "months_to_due": {
      +          "description": "The number of months to the next due brake inspection",
      +          "type": "number"
      +        },
      +        "status": {
      +          "description": "The due status of the brake inspection service",
      +          "enum": [
      +            "due",
      +            "soon",
      +            "ok"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "status",
      +        "km_to_due",
      +        "months_to_due"
      +      ],
      +      "type": "object"
      +    },
      +    "coolant_flush": {
      +      "description": "The coolant flush returned by the tool.",
      +      "properties": {
      +        "km_to_due": {
      +          "description": "The distance in kilometers to the next due coolant flush",
      +          "type": "number"
      +        },
      +        "months_to_due": {
      +          "description": "The number of months to the next due coolant flush",
      +          "type": "number"
      +        },
      +        "status": {
      +          "description": "The due status of the coolant flush service",
      +          "enum": [
      +            "due",
      +            "soon",
      +            "ok"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "status",
      +        "km_to_due",
      +        "months_to_due"
      +      ],
      +      "type": "object"
      +    },
      +    "oil_change": {
      +      "description": "The oil change returned by the tool.",
      +      "properties": {
      +        "km_to_due": {
      +          "description": "The distance in kilometers to the next due oil change",
      +          "type": "number"
      +        },
      +        "months_to_due": {
      +          "description": "The number of months to the next due oil change",
      +          "type": "number"
      +        },
      +        "status": {
      +          "description": "The due status of the oil change service",
      +          "enum": [
      +            "due",
      +            "soon",
      +            "ok"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "status",
      +        "km_to_due",
      +        "months_to_due"
      +      ],
      +      "type": "object"
      +    },
      +    "spark_plug_replacement": {
      +      "description": "The spark plug replacement returned by the tool.",
      +      "properties": {
      +        "km_to_due": {
      +          "description": "The distance in kilometers to the next due spark plug replacement",
      +          "type": "number"
      +        },
      +        "months_to_due": {
      +          "description": "The number of months to the next due spark plug replacement",
      +          "type": "number"
      +        },
      +        "status": {
      +          "description": "The due status of the spark plug replacement service",
      +          "enum": [
      +            "due",
      +            "soon",
      +            "ok"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "status",
      +        "km_to_due",
      +        "months_to_due"
      +      ],
      +      "type": "object"
      +    },
      +    "tire_rotation": {
      +      "description": "The tire rotation returned by the tool.",
      +      "properties": {
      +        "km_to_due": {
      +          "description": "The distance in kilometers to the next due tire rotation",
      +          "type": "number"
      +        },
      +        "months_to_due": {
      +          "description": "The number of months to the next due tire rotation",
      +          "type": "number"
      +        },
      +        "status": {
      +          "description": "The due status of the tire rotation service",
      +          "enum": [
      +            "due",
      +            "soon",
      +            "ok"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "status",
      +        "km_to_due",
      +        "months_to_due"
      +      ],
      +      "type": "object"
      +    },
      +    "transmission_service": {
      +      "description": "The transmission service returned by the tool.",
      +      "properties": {
      +        "km_to_due": {
      +          "description": "The distance in kilometers to the next due transmission service",
      +          "type": "number"
      +        },
      +        "months_to_due": {
      +          "description": "The number of months to the next due transmission service",
      +          "type": "number"
      +        },
      +        "status": {
      +          "description": "The due status of the transmission service",
      +          "enum": [
      +            "due",
      +            "soon",
      +            "ok"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "status",
      +        "km_to_due",
      +        "months_to_due"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "oil_change",
      +    "tire_rotation",
      +    "brake_inspection",
      +    "air_filter_replacement",
      +    "coolant_flush",
      +    "spark_plug_replacement",
      +    "transmission_service",
      +    "battery_replacement"
      +  ],
      +  "type": "object"
      +}
  4. First observed

TDQS

A4.5/5.0
Behavior4/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 domain behavior beyond that: results derive from odometer plus optional history, and history-less items are treated as last serviced at odometer 0 (a default assumption visible in the schema but reinforced here), and it names the next due service.

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 tight sentences: capability, when-to-use, when-not-to-use. The enumeration of services is long but it is the tool's substance and it is front-loaded; no filler sentences.

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, the description need not explain return values, and annotations cover the safety profile. For a single-required-param read tool with full schema descriptions, everything an agent needs to select and invoke it correctly 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 description coverage is 100%, including unit semantics, km_per_month's always-km rule, and the per-item id/odometer/months_ago fields, so the schema carries parameter meaning. The description's phrase 'from the current odometer and optional service history' adds framing but no syntax or constraint beyond the schema; 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?

Specific verb+resource with an explicit enumeration of what is assessed (oil, tires, brakes, filters, coolant, plugs, transmission, battery) and the three possible outcomes (due, due soon, ok). It also states it names the next one, which is a distinct output behavior an agent can rely on.

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

Usage Guidelines5/5

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

Explicit 'Use to check what a car needs now' plus two named exclusions that route to specific siblings: prices to service_cost_estimate and 12-month planning to service_timeline. This is exactly the when/when-not/alternatives pattern.

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