Skip to main content
Glama

BusCalc — Business & Trade Calculations

Feet and inches

buscalc_feet_and_inches
Read-onlyIdempotent

Add or subtract two measurements, or multiply one length by a count, with fractional-inch entry and decimal conversions. 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. Changed24 schema fields changed
    • addedInput schema / properties / inputs / properties / feetA / anyOf
      Added value: +[
      +  {
      +    "maximum": 1000000,
      +    "minimum": 0,
      +    "type": "integer"
      +  },
      +  {
      +    "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 / feetA / description
      Previous value: -"First measurement — whole feet. Use matching records or an explicitly identified assumption for first measurement — whole feet. Unknown is not the same as zero."New value: +"First measurement — whole feet. Use matching records or an explicitly identified assumption for first measurement — whole feet. Unknown is not the same as zero. 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 / feetA / maximum
      Removed value: -1000000
    • removedInput schema / properties / inputs / properties / feetA / minimum
      Removed value: -0
    • removedInput schema / properties / inputs / properties / feetA / type
      Removed value: -"integer"
    • addedInput schema / properties / inputs / properties / feetA / x-buscalc-numeric-string
      Added value: +true
    • addedInput schema / properties / inputs / properties / feetB / anyOf
      Added value: +[
      +  {
      +    "maximum": 1000000,
      +    "minimum": 0,
      +    "type": "integer"
      +  },
      +  {
      +    "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 / feetB / description
      Previous value: -"Second measurement — whole feet. Use matching records or an explicitly identified assumption for second measurement — whole feet. Unknown is not the same as zero."New value: +"Second measurement — whole feet. Use matching records or an explicitly identified assumption for second measurement — whole feet. Unknown is not the same as zero. 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 / feetB / maximum
      Removed value: -1000000
    • removedInput schema / properties / inputs / properties / feetB / minimum
      Removed value: -0
    • removedInput schema / properties / inputs / properties / feetB / type
      Removed value: -"integer"
    • addedInput schema / properties / inputs / properties / feetB / x-buscalc-numeric-string
      Added value: +true
    • addedInput schema / properties / inputs / properties / multiplier / anyOf
      Added value: +[
      +  {
      +    "exclusiveMinimum": 0,
      +    "maximum": 1000000000000,
      +    "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 / multiplier / description
      Previous value: -"Number of first-length equivalents. Use matching records or an explicitly identified assumption for number of first-length equivalents. Unknown is not the same as zero."New value: +"Number of first-length equivalents. Use matching records or an explicitly identified assumption for number of first-length equivalents. Unknown is not the same as zero. 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 / multiplier / exclusiveMinimum
      Removed value: -0
    • removedInput schema / properties / inputs / properties / multiplier / maximum
      Removed value: -1000000000000
    • removedInput schema / properties / inputs / properties / multiplier / type
      Removed value: -"number"
    • addedInput schema / properties / inputs / properties / multiplier / x-buscalc-numeric-string
      Added value: +true
    • addedInput schema / properties / inputs / properties / subtractFeet / anyOf
      Added value: +[
      +  {
      +    "maximum": 1000000,
      +    "minimum": 0,
      +    "type": "integer"
      +  },
      +  {
      +    "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 / subtractFeet / description
      Previous value: -"Subtract — whole feet. Use matching records or an explicitly identified assumption for subtract — whole feet. Unknown is not the same as zero."New value: +"Subtract — whole feet. Use matching records or an explicitly identified assumption for subtract — whole feet. Unknown is not the same as zero. 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 / subtractFeet / maximum
      Removed value: -1000000
    • removedInput schema / properties / inputs / properties / subtractFeet / minimum
      Removed value: -0
    • removedInput schema / properties / inputs / properties / subtractFeet / type
      Removed value: -"integer"
    • addedInput schema / properties / inputs / properties / subtractFeet / x-buscalc-numeric-string
      Added value: +true
  2. Changed1 schema field changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "inputs": {
      +      "feetA": 1,
      +      "feetB": 2,
      +      "inchesA": "6",
      +      "inchesB": "6",
      +      "operation": "add"
      +    }
      +  }
      +]
  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.4/5.0
Behavior4/5

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

The annotations already establish read-only, idempotent, non-destructive, non-open-world behavior, and the description adds useful context: returns include named results, units, formula, assumptions, method version, and source URL, and no prices or omitted costs are looked up. There is no contradiction with 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.

Conciseness4/5

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

The purpose is front-loaded and the key usage constraints are easy to find. Some boilerplate, such as 'Use this tested BusCalc worksheet when the task matches its inputs and scope,' is vague and could be trimmed without losing meaning.

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?

For a tool with a nested, conditional schema and an output schema, the description covers the operations, output fields, nested argument shape, and scope exclusions. It still omits operation-specific field mapping and does not explain how fractional inches or decimal conversions should be supplied beyond pointing to inputSchema.

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

Parameters2/5

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

The description only notes that arguments must contain a nested inputs object plus optional units and modelVersion, and otherwise defers to inputSchema. With schema description coverage at 33%, this does not compensate for the missing explanation of feetA/inchesA, operation-dependent fields, or fractional-inch entry details.

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 specific operations (add, subtract, multiply) and the resource (feet-and-inches measurements with fractional-inch entry and decimal conversions). It is clear what the tool does, but it does not explicitly distinguish itself from any of the many sibling BusCalc calculators.

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?

It says to use the worksheet when the task matches its inputs and scope, and it rules out price/cost lookup and private project/purchase access. However, it gives no explicit when-not-to-use guidance or named sibling alternative for related calculations.

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