Skip to main content
Glama

BusCalc — Business & Trade Calculations

Equipment ownership cost per hour

buscalc_equipment_ownership_cost_per_hour
Read-onlyIdempotent

Recover economic ownership and running cost at realistic utilization. Use this tested BusCalc worksheet when the task matches its inputs and scope. Returns named results, units, formula, assumptions, method version and a source-page URL. No prices or omitted costs are looked up; no private projects or purchases are accessed. Call with arguments containing inputs (not flattened fields), optional units and optional modelVersion. Read required fields and exact enum choices from inputSchema. Do not pass the REST calculator field inside MCP arguments.

Input Schema

NameRequiredDescriptionDefault
unitsNo
inputsYes
modelVersionNoOptional expected method version; a mismatch is rejected.

Output Schema

NameRequiredDescriptionDefault
unitsNo
inputsYes
receiptYes
resultsYes
sourceURLYes
calculatorYes
modelVersionYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed36 schema fields changed
    • addedInput schema / properties / inputs / properties / fixed / anyOf
      Added value: +[
      +  {
      +    "maximum": 1000000000000,
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  {
      +    "pattern": "^\\s*(?:[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?|0[xX][\\da-fA-F]+|0[bB][01]+|0[oO][0-7]+)\\s*$",
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / inputs / properties / fixed / description
      Previous value: -"Other annual fixed costs. Matching invoice, quote, statement, bookkeeping record or explicit budget amount for other annual fixed costs. Use the stated period and exclude amounts already counted in another field. Zero means intentionally excluded/not incurred, not unknown."New value: +"Other annual fixed costs. Matching invoice, quote, statement, bookkeeping record or explicit budget amount for other annual fixed costs. Use the stated period and exclude amounts already counted in another field. Zero means intentionally excluded/not incurred, not unknown. JSON numbers are preferred. Nonblank strings are also accepted when JavaScript Number conversion yields a finite value meeting the same bounds and whole-number rules."
    • removedInput schema / properties / inputs / properties / fixed / maximum
      Removed value: -1000000000000
    • removedInput schema / properties / inputs / properties / fixed / minimum
      Removed value: -0
    • removedInput schema / properties / inputs / properties / fixed / type
      Removed value: -"number"
    • addedInput schema / properties / inputs / properties / fixed / x-buscalc-numeric-string
      Added value: +true
    • addedInput schema / properties / inputs / properties / hours / anyOf
      Added value: +[
      +  {
      +    "exclusiveMinimum": 0,
      +    "maximum": 8784,
      +    "type": "number"
      +  },
      +  {
      +    "pattern": "^\\s*(?:[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?|0[xX][\\da-fA-F]+|0[bB][01]+|0[oO][0-7]+)\\s*$",
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / inputs / properties / hours / description
      Previous value: -"Annual use. Use matching records or a clearly identified owner assumption for annual use, in the displayed unit and the stated row/period scope."New value: +"Annual use. Use matching records or a clearly identified owner assumption for annual use, in the displayed unit and the stated row/period scope. JSON numbers are preferred. Nonblank strings are also accepted when JavaScript Number conversion yields a finite value meeting the same bounds and whole-number rules."
    • removedInput schema / properties / inputs / properties / hours / exclusiveMinimum
      Removed value: -0
    • removedInput schema / properties / inputs / properties / hours / maximum
      Removed value: -8784
    • removedInput schema / properties / inputs / properties / hours / type
      Removed value: -"number"
    • addedInput schema / properties / inputs / properties / hours / x-buscalc-numeric-string
      Added value: +true
    • addedInput schema / properties / inputs / properties / life / anyOf
      Added value: +[
      +  {
      +    "exclusiveMinimum": 0,
      +    "maximum": 100,
      +    "type": "number"
      +  },
      +  {
      +    "pattern": "^\\s*(?:[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?|0[xX][\\da-fA-F]+|0[bB][01]+|0[oO][0-7]+)\\s*$",
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / inputs / properties / life / description
      Previous value: -"Economic life. Expected economic service years, not tax depreciation life."New value: +"Economic life. Expected economic service years, not tax depreciation life. JSON numbers are preferred. Nonblank strings are also accepted when JavaScript Number conversion yields a finite value meeting the same bounds and whole-number rules."
    • removedInput schema / properties / inputs / properties / life / exclusiveMinimum
      Removed value: -0
    • removedInput schema / properties / inputs / properties / life / maximum
      Removed value: -100
    • removedInput schema / properties / inputs / properties / life / type
      Removed value: -"number"
    • addedInput schema / properties / inputs / properties / life / x-buscalc-numeric-string
      Added value: +true
    • addedInput schema / properties / inputs / properties / purchase / anyOf
      Added value: +[
      +  {
      +    "maximum": 1000000000000,
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  {
      +    "pattern": "^\\s*(?:[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?|0[xX][\\da-fA-F]+|0[bB][01]+|0[oO][0-7]+)\\s*$",
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / inputs / properties / purchase / description
      Previous value: -"Purchase price. Matching invoice, quote, statement, bookkeeping record or explicit budget amount for purchase price. Use the stated period and exclude amounts already counted in another field. Zero means intentionally excluded/not incurred, not unknown."New value: +"Purchase price. Matching invoice, quote, statement, bookkeeping record or explicit budget amount for purchase price. Use the stated period and exclude amounts already counted in another field. Zero means intentionally excluded/not incurred, not unknown. JSON numbers are preferred. Nonblank strings are also accepted when JavaScript Number conversion yields a finite value meeting the same bounds and whole-number rules."
    • removedInput schema / properties / inputs / properties / purchase / maximum
      Removed value: -1000000000000
    • removedInput schema / properties / inputs / properties / purchase / minimum
      Removed value: -0
    • removedInput schema / properties / inputs / properties / purchase / type
      Removed value: -"number"
    • addedInput schema / properties / inputs / properties / purchase / x-buscalc-numeric-string
      Added value: +true
    • addedInput schema / properties / inputs / properties / salvage / anyOf
      Added value: +[
      +  {
      +    "maximum": 1000000000000,
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  {
      +    "pattern": "^\\s*(?:[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?|0[xX][\\da-fA-F]+|0[bB][01]+|0[oO][0-7]+)\\s*$",
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / inputs / properties / salvage / description
      Previous value: -"Expected salvage value. Owner’s expected end-of-life sale receipt; scenario assumption, not appraisal."New value: +"Expected salvage value. Owner’s expected end-of-life sale receipt; scenario assumption, not appraisal. JSON numbers are preferred. Nonblank strings are also accepted when JavaScript Number conversion yields a finite value meeting the same bounds and whole-number rules."
    • removedInput schema / properties / inputs / properties / salvage / maximum
      Removed value: -1000000000000
    • removedInput schema / properties / inputs / properties / salvage / minimum
      Removed value: -0
    • removedInput schema / properties / inputs / properties / salvage / type
      Removed value: -"number"
    • addedInput schema / properties / inputs / properties / salvage / x-buscalc-numeric-string
      Added value: +true
    • addedInput schema / properties / inputs / properties / variable / anyOf
      Added value: +[
      +  {
      +    "maximum": 1000000000000,
      +    "minimum": 0,
      +    "type": "number"
      +  },
      +  {
      +    "pattern": "^\\s*(?:[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?|0[xX][\\da-fA-F]+|0[bB][01]+|0[oO][0-7]+)\\s*$",
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / inputs / properties / variable / description
      Previous value: -"Variable operating cost per hour. Usage-dependent cost total ÷ matching operating hours; exclude fixed costs and depreciation."New value: +"Variable operating cost per hour. Usage-dependent cost total ÷ matching operating hours; exclude fixed costs and depreciation. JSON numbers are preferred. Nonblank strings are also accepted when JavaScript Number conversion yields a finite value meeting the same bounds and whole-number rules."
    • removedInput schema / properties / inputs / properties / variable / maximum
      Removed value: -1000000000000
    • removedInput schema / properties / inputs / properties / variable / minimum
      Removed value: -0
    • removedInput schema / properties / inputs / properties / variable / type
      Removed value: -"number"
    • addedInput schema / properties / inputs / properties / variable / x-buscalc-numeric-string
      Added value: +true
  2. Changed1 schema field changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "inputs": {
      +      "fixed": 1000,
      +      "hours": 1000,
      +      "life": 3,
      +      "purchase": 10000,
      +      "salvage": 1000,
      +      "variable": 2
      +    }
      +  }
      +]
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "calculator": {
      +      "type": "string"
      +    },
      +    "inputs": {
      +      "type": "object"
      +    },
      +    "modelVersion": {
      +      "type": "string"
      +    },
      +    "receipt": {
      +      "properties": {
      +        "additionalResults": {
      +          "type": "object"
      +        },
      +        "assumptions": {
      +          "type": "string"
      +        },
      +        "calculator": {
      +          "type": "string"
      +        },
      +        "checks": {
      +          "items": {
      +            "properties": {
      +              "name": {
      +                "type": "string"
      +              },
      +              "status": {
      +                "enum": [
      +                  "passed"
      +                ],
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "name",
      +              "status"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "formula": {
      +          "type": "string"
      +        },
      +        "inputs": {
      +          "type": "object"
      +        },
      +        "integrity": {
      +          "type": "string"
      +        },
      +        "methodVersion": {
      +          "type": "string"
      +        },
      +        "replay": {
      +          "type": "string"
      +        },
      +        "replayRequest": {
      +          "type": "object"
      +        },
      +        "results": {
      +          "items": {
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "schemaVersion": {
      +          "enum": [
      +            "1.0.0"
      +          ],
      +          "type": "string"
      +        },
      +        "scope": {
      +          "type": "string"
      +        },
      +        "sourceURL": {
      +          "format": "uri",
      +          "type": "string"
      +        },
      +        "status": {
      +          "enum": [
      +            "calculated"
      +          ],
      +          "type": "string"
      +        },
      +        "tool": {
      +          "type": "string"
      +        },
      +        "units": {
      +          "type": "object"
      +        },
      +        "warnings": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "schemaVersion",
      +        "status",
      +        "tool",
      +        "calculator",
      +        "methodVersion",
      +        "sourceURL",
      +        "formula",
      +        "assumptions",
      +        "inputs",
      +        "units",
      +        "results",
      +        "replayRequest",
      +        "additionalResults",
      +        "checks",
      +        "warnings",
      +        "scope",
      +        "integrity",
      +        "replay"
      +      ],
      +      "type": "object"
      +    },
      +    "results": {
      +      "items": {
      +        "properties": {
      +          "label": {
      +            "type": "string"
      +          },
      +          "unit": {
      +            "type": "string"
      +          },
      +          "value": {
      +            "oneOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "string"
      +              }
      +            ]
      +          }
      +        },
      +        "required": [
      +          "label",
      +          "value"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "sourceURL": {
      +      "format": "uri",
      +      "type": "string"
      +    },
      +    "units": {
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "calculator",
      +    "modelVersion",
      +    "sourceURL",
      +    "inputs",
      +    "results",
      +    "receipt"
      +  ],
      +  "type": "object"
      +}
  4. First observed

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 safety is well covered. The description adds genuine value by stating what the response carries (named results, units, formula, assumptions, method version, source-page URL) and by declaring that no external price lookup occurs. It still omits failure behavior, e.g. what happens on a units mismatch or a rejected modelVersion, beyond the brief "Do not pass the REST calculator field" warning.

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 short and the return-value statement is front-loaded after the purpose sentence. However, "Use this tested BusCalc worksheet when the task matches its inputs and scope" and "Read required fields and exact enum choices from inputSchema" are boilerplate that consume space without adding 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?

An output schema exists, so omitting return details is acceptable, and the description still summarizes the response shape. Given a nested-object schema with a required wrapper and an enum, the description covers the invocation shape, the closed-world/no-lookup constraint and the no-side-effect profile adequately. The remaining gap is domain framing — no worked interpretation of how purchase, salvage, life, hours and variable combine into the hourly figure.

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?

Top-level schema coverage is 33%, but the nested `inputs` properties carry rich per-field descriptions, so much of the semantics are already structured. The description's real contribution is the calling convention: arguments must contain a nested `inputs` object rather than flattened fields, with `units` and `modelVersion` optional and enum choices read from inputSchema. It does not explain what `units` accepts, which is the weakest documented parameter.

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?

"Recover economic ownership and running cost at realistic utilization" names a specific computation and the resource (equipment ownership) plus the running-cost component, so an agent knows it produces a per-hour cost figure. It does not, however, distinguish itself from close siblings such as buscalc_fleet_cost_per_mile or buscalc_equipment_loan_payment, so the boundary between them must be inferred.

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?

The only selection guidance is "Use this tested BusCalc worksheet when the task matches its inputs and scope," which is circular and gives no condition for choosing this tool over the many sibling calculators. The negative scope statements ("No prices or omitted costs are looked up; no private projects or purchases are accessed") are useful exclusions but no alternative tool is ever named.

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