Skip to main content
Glama

BusCalc — Business & Trade Calculations

Service business hourly rate

buscalc_service_business_hourly_rate
Read-onlyIdempotent

Recover annual overhead and owner compensation across billable hours. 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 / compensation / 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 / compensation / description
      Previous value: -"Annual owner compensation target. Owner-chosen annual pre-tax compensation target, separate from additional business profit."New value: +"Annual owner compensation target. Owner-chosen annual pre-tax compensation target, separate from additional business profit. 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 / compensation / maximum
      Removed value: -1000000000000
    • removedInput schema / properties / inputs / properties / compensation / minimum
      Removed value: -0
    • removedInput schema / properties / inputs / properties / compensation / type
      Removed value: -"number"
    • addedInput schema / properties / inputs / properties / compensation / 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 billable hours. Calendar working weeks × productive hours/week × explicit billable share."New value: +"Annual billable hours. Calendar working weeks × productive hours/week × explicit billable share. 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 / overhead / 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 / overhead / description
      Previous value: -"Annual overhead. Use matching records or a clearly identified owner assumption for annual overhead, in the displayed unit and the stated row/period scope."New value: +"Annual overhead. Use matching records or a clearly identified owner assumption for annual overhead, 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 / overhead / maximum
      Removed value: -1000000000000
    • removedInput schema / properties / inputs / properties / overhead / minimum
      Removed value: -0
    • removedInput schema / properties / inputs / properties / overhead / type
      Removed value: -"number"
    • addedInput schema / properties / inputs / properties / overhead / x-buscalc-numeric-string
      Added value: +true
    • addedInput schema / properties / inputs / properties / profit / 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 / profit / description
      Previous value: -"Annual additional profit target. Explicit owner-supplied assumption for annual additional profit target. Label it as a scenario and compare alternatives; do not present it as a forecast."New value: +"Annual additional profit target. Explicit owner-supplied assumption for annual additional profit target. Label it as a scenario and compare alternatives; do not present it as a forecast. 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 / profit / maximum
      Removed value: -1000000000000
    • removedInput schema / properties / inputs / properties / profit / minimum
      Removed value: -0
    • removedInput schema / properties / inputs / properties / profit / type
      Removed value: -"number"
    • addedInput schema / properties / inputs / properties / profit / x-buscalc-numeric-string
      Added value: +true
  2. Changed1 schema field changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "inputs": {
      +      "compensation": 40000,
      +      "hours": 1000,
      +      "overhead": 10000,
      +      "profit": 10000
      +    }
      +  }
      +]
  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/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 goes beyond them by disclosing the response shape (named results, units, formula, assumptions, method version, source-page URL), the rejection behavior on modelVersion mismatch, and explicit non-behaviors (no price lookup, no omitted costs, no access to private projects or purchases). This is meaningful added context an agent cannot get from 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.

Conciseness3/5

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

Front-loading is weak: the opening sentence describes the economic intent rather than the tool's function, so an agent must read several sentences before learning how to call it. The invocation-mechanics sentence and the modelVersion note earn their place, but "Use this tested BusCalc worksheet when the task matches its inputs and scope" is filler that could be deleted with no loss.

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 the description enumerates what comes back, so return values need no further explanation. What is missing is the actual computational promise — that the four inputs produce an hourly rate — which leaves an agent to infer the tool's result from the title. Given a nested three-parameter schema, the coverage of structure and versioning is adequate but the purpose-level completeness falls short.

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 reported at 33%, so the description has to carry some weight. It does contribute structural meaning that the raw schema does not make obvious: arguments must wrap values inside an "inputs" object rather than flattened fields, and exact enum choices should be read from inputSchema. However, it adds nothing about what each of overhead, compensation, profit and hours means in relation to the computed rate, so the compensation is partial.

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?

"Recover annual overhead and owner compensation across billable hours" gestures at the computation but never states the actual output (an hourly rate) or the formula relationship between overhead, compensation, profit and hours. The specific verb+resource combination is only recoverable by combining the tool title with the schema field names. No sibling tool is named or contrasted, which matters in a family of ~30 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 Guidelines2/5

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

"Use this tested BusCalc worksheet when the task matches its inputs and scope" is circular — it gives no condition an agent can act on. There is no statement of when to prefer this over buscalc_break_even_sales, buscalc_business_data_calculations, or buscalc_markup_vs_margin. The only real guidance is invocation mechanics (nest under inputs, read inputSchema, don't pass the REST field) plus negative scope claims, not use-case 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