Skip to main content
Glama

Craft Quantities: construction material calculators

Calculate a material quantity (how much, how many)

calculate
Read-onlyIdempotent

Computes the result of one calculator, identified by its slug, from the input values given: the amount of material a job needs, such as the bags of concrete for a slab or the sheets of drywall for a room, counted in bags, sheets, studs, tiles, litres, gallons, cubic yards or m³. Returns it in metric and US units with the inputs used, sources, a citation and the page link. No prices.

Input Schema

NameRequiredDescriptionDefault
slugYesThe calculator's slug, such as concrete-calculator.
detailNofull (the default): the whole answer. summary: the result lines, the citation line and the page only — fewer tokens to read.full
inputsNoThe calculator's input values, by input id (an unknown id is refused with the accepted ids). A length, area, volume or other measured input takes "12 ft", "3.5 m", "8' 3 1/2\"" or {"value": 12, "unit": "ft"}; a count or percentage takes a number; a select takes one of its option values. Inputs left out take the value the calculator's page opens on.
marketNoOptional. A market whose own opening choice some inputs take (a UK reader's code, an IEC motor), and whose currency symbol prints the caller's own money figures.
systemNoThe unit system inputs left out open in, and the one the page link opens in. The answer comes in both.metric
explainNotrue adds the working: the inputs as the calculator received them, every intermediate figure its own compute reports with its unit, the range check and the unit restatement, ending on the same figures. The answer's figures are identical either way.
inputUnitsNoSend "base" to pass bare numbers on dimensioned inputs in base units (m, m², L, kg …), as the published test vectors are written. Without it a length, area or volume must carry its unit.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / explain
      Added value: +{
      +  "default": false,
      +  "description": "true adds the working: the inputs as the calculator received them, every intermediate figure its own compute reports with its unit, the range check and the unit restatement, ending on the same figures. The answer's figures are identical either way.",
      +  "type": "boolean"
      +}
    • changedOutput schema / anyOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "calculator": {
      -        "properties": {
      -          "category": {
      -            "type": "string"
      -          },
      -          "description": {
      -            "type": "string"
      -          },
      -          "json": {
      -            "description": "The calculator's static API document, with its test vectors.",
      -            "type": "string"
      -          },
      -          "lastVerified": {
      -            "description": "The date the calculator's sources were last checked.",
      -            "type": "string"
      -          },
      -          "slug": {
      -            "type": "string"
      -          },
      -          "title": {
      -            "type": "string"
      -          },
      -          "url": {
      -            "description": "The calculator's page on craftquantities.com.",
      -            "type": "string"
      -          },
      -          "version": {
      -            "description": "The calculator's own version; a result names the calculator that produced it.",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "slug",
      -          "title",
      -          "category",
      -          "version",
      -          "lastVerified",
      -          "url",
      -          "json"
      -        ],
      -        "type": "object"
      -      },
      -      "citation": {
      -        "properties": {
      -          "accessDate": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "author": {
      -            "type": "string"
      -          },
      -          "formats": {
      -            "properties": {
      -              "apa": {
      -                "type": "string"
      -              },
      -              "bibtex": {
      -                "type": "string"
      -              },
      -              "harvard": {
      -                "type": "string"
      -              },
      -              "plain": {
      -                "type": "string"
      -              }
      -            },
      -            "required": [
      -              "plain",
      -              "apa",
      -              "harvard",
      -              "bibtex"
      -            ],
      -            "type": "object"
      -          },
      -          "sourcesChecked": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "title": {
      -            "type": "string"
      -          },
      -          "url": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "anyOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          }
      -        },
      -        "required": [
      -          "author",
      -          "title",
      -          "url",
      -          "formats",
      -          "accessDate"
      -        ],
      -        "type": "object"
      -      },
      -      "engine": {
      -        "properties": {
      -          "api": {
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "version": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "name",
      -          "version",
      -          "api"
      -        ],
      -        "type": "object"
      -      },
      -      "inputs": {
      -        "description": "Every input the calculation ran on, and where each came from.",
      -        "items": {
      -          "properties": {
      -            "baseUnit": {
      -              "type": "string"
      -            },
      -            "dimension": {
      -              "type": "string"
      -            },
      -            "id": {
      -              "type": "string"
      -            },
      -            "imperial": {
      -              "properties": {
      -                "unit": {
      -                  "type": "string"
      -                },
      -                "value": {
      -                  "type": "number"
      -                }
      -              },
      -              "required": [
      -                "value",
      -                "unit"
      -              ],
      -              "type": "object"
      -            },
      -            "label": {
      -              "type": "string"
      -            },
      -            "metric": {
      -              "properties": {
      -                "unit": {
      -                  "type": "string"
      -                },
      -                "value": {
      -                  "type": "number"
      -                }
      -              },
      -              "required": [
      -                "value",
      -                "unit"
      -              ],
      -              "type": "object"
      -            },
      -            "option": {
      -              "type": "string"
      -            },
      -            "read": {
      -              "type": "string"
      -            },
      -            "source": {
      -              "enum": [
      -                "caller",
      -                "default"
      -              ]
      -            },
      -            "type": {
      -              "enum": [
      -                "number",
      -                "select"
      -              ]
      -            },
      -            "value": {
      -              "type": [
      -                "number",
      -                "string"
      -              ]
      -            }
      -          },
      -          "required": [
      -            "id",
      -            "label",
      -            "type",
      -            "value",
      -            "source"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "licence": {
      -        "properties": {
      -          "attribution": {
      -            "type": "string"
      -          },
      -          "name": {
      -            "type": "string"
      -          },
      -          "url": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "name",
      -          "url",
      -          "attribution"
      -        ],
      -        "type": "object"
      -      },
      -      "links": {
      -        "properties": {
      -          "open": {
      -            "description": "Opens the page on these inputs.",
      -            "type": "string"
      -          },
      -          "page": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "page",
      -          "open"
      -        ],
      -        "type": "object"
      -      },
      -      "market": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "notice": {
      -        "type": "string"
      -      },
      -      "result": {
      -        "properties": {
      -          "imperial": {
      -            "properties": {
      -              "allowance": {
      -                "anyOf": [
      -                  {
      -                    "properties": {
      -                      "base": {
      -                        "type": "number"
      -                      },
      -                      "label": {
      -                        "type": "string"
      -                      },
      -                      "percent": {
      -                        "type": "number"
      -                      }
      -                    },
      -                    "type": "object"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "breakdown": {
      -                "items": {
      -                  "properties": {
      -                    "label": {
      -                      "type": "string"
      -                    },
      -                    "printed": {
      -                      "type": "string"
      -                    },
      -                    "unit": {
      -                      "type": "string"
      -                    },
      -                    "value": {
      -                      "anyOf": [
      -                        {
      -                          "type": "number"
      -                        },
      -                        {
      -                          "type": "null"
      -                        }
      -                      ]
      -                    }
      -                  },
      -                  "required": [
      -                    "label",
      -                    "value",
      -                    "unit",
      -                    "printed"
      -                  ],
      -                  "type": "object"
      -                },
      -                "type": "array"
      -              },
      -              "canonical": {
      -                "description": "The figure in the calculator's own unit, before the display adapter: what its test vectors pin.",
      -                "properties": {
      -                  "unit": {
      -                    "type": "string"
      -                  },
      -                  "value": {
      -                    "anyOf": [
      -                      {
      -                        "type": "number"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "value",
      -                  "unit"
      -                ],
      -                "type": "object"
      -              },
      -              "confidence": {
      -                "enum": [
      -                  "high",
      -                  "medium",
      -                  "low"
      -                ]
      -              },
      -              "confidenceNote": {
      -                "anyOf": [
      -                  {
      -                    "type": "string"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "isComparison": {
      -                "description": "The figure is set against a limit. It is not an approval.",
      -                "type": "boolean"
      -              },
      -              "limitations": {
      -                "items": {
      -                  "type": "string"
      -                },
      -                "type": "array"
      -              },
      -              "printed": {
      -                "anyOf": [
      -                  {
      -                    "description": "The headline exactly as the page prints it.",
      -                    "type": "string"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "unit": {
      -                "type": "string"
      -              },
      -              "value": {
      -                "anyOf": [
      -                  {
      -                    "description": "The headline in this system; null where a rate it needs is not given.",
      -                    "type": "number"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "withheld": {
      -                "anyOf": [
      -                  {
      -                    "properties": {
      -                      "missingRates": {
      -                        "items": {
      -                          "properties": {
      -                            "input": {
      -                              "type": "string"
      -                            },
      -                            "label": {
      -                              "type": "string"
      -                            }
      -                          },
      -                          "type": "object"
      -                        },
      -                        "type": "array"
      -                      }
      -                    },
      -                    "type": "object"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              }
      -            },
      -            "required": [
      -              "value",
      -              "unit",
      -              "printed",
      -              "breakdown",
      -              "confidence",
      -              "isComparison",
      -              "canonical"
      -            ],
      -            "type": "object"
      -          },
      -          "label": {
      -            "type": "string"
      -          },
      -          "metric": {
      -            "properties": {
      -              "allowance": {
      -                "anyOf": [
      -                  {
      -                    "properties": {
      -                      "base": {
      -                        "type": "number"
      -                      },
      -                      "label": {
      -                        "type": "string"
      -                      },
      -                      "percent": {
      -                        "type": "number"
      -                      }
      -                    },
      -                    "type": "object"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "breakdown": {
      -                "items": {
      -                  "properties": {
      -                    "label": {
      -                      "type": "string"
      -                    },
      -                    "printed": {
      -                      "type": "string"
      -                    },
      -                    "unit": {
      -                      "type": "string"
      -                    },
      -                    "value": {
      -                      "anyOf": [
      -                        {
      -                          "type": "number"
      -                        },
      -                        {
      -                          "type": "null"
      -                        }
      -                      ]
      -                    }
      -                  },
      -                  "required": [
      -                    "label",
      -                    "value",
      -                    "unit",
      -                    "printed"
      -                  ],
      -                  "type": "object"
      -                },
      -                "type": "array"
      -              },
      -              "canonical": {
      -                "description": "The figure in the calculator's own unit, before the display adapter: what its test vectors pin.",
      -                "properties": {
      -                  "unit": {
      -                    "type": "string"
      -                  },
      -                  "value": {
      -                    "anyOf": [
      -                      {
      -                        "type": "number"
      -                      },
      -                      {
      -                        "type": "null"
      -                      }
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "value",
      -                  "unit"
      -                ],
      -                "type": "object"
      -              },
      -              "confidence": {
      -                "enum": [
      -                  "high",
      -                  "medium",
      -                  "low"
      -                ]
      -              },
      -              "confidenceNote": {
      -                "anyOf": [
      -                  {
      -                    "type": "string"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "isComparison": {
      -                "description": "The figure is set against a limit. It is not an approval.",
      -                "type": "boolean"
      -              },
      -              "limitations": {
      -                "items": {
      -                  "type": "string"
      -                },
      -                "type": "array"
      -              },
      -              "printed": {
      -                "anyOf": [
      -                  {
      -                    "description": "The headline exactly as the page prints it.",
      -                    "type": "string"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "unit": {
      -                "type": "string"
      -              },
      -              "value": {
      -                "anyOf": [
      -                  {
      -                    "description": "The headline in this system; null where a rate it needs is not given.",
      -                    "type": "number"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              },
      -              "withheld": {
      -                "anyOf": [
      -                  {
      -                    "properties": {
      -                      "missingRates": {
      -                        "items": {
      -                          "properties": {
      -                            "input": {
      -                              "type": "string"
      -                            },
      -                            "label": {
      -                              "type": "string"
      -                            }
      -                          },
      -                          "type": "object"
      -                        },
      -                        "type": "array"
      -                      }
      -                    },
      -                    "type": "object"
      -                  },
      -                  {
      -                    "type": "null"
      -                  }
      -                ]
      -              }
      -            },
      -            "required": [
      -              "value",
      -              "unit",
      -              "printed",
      -              "breakdown",
      -              "confidence",
      -              "isComparison",
      -              "canonical"
      -            ],
      -            "type": "object"
      -          }
      -        },
      -        "required": [
      -          "label",
      -          "metric",
      -          "imperial"
      -        ],
      -        "type": "object"
      -      },
      -      "sources": {
      -        "items": {
      -          "properties": {
      -            "label": {
      -              "description": "The source as the calculator cites it.",
      -              "type": "string"
      -            },
      -            "references": {
      -              "items": {
      -                "properties": {
      -                  "body": {
      -                    "type": "string"
      -                  },
      -                  "document": {
      -                    "type": "string"
      -                  },
      -                  "edition": {
      -                    "type": "string"
      -                  },
      -                  "kind": {
      -                    "enum": [
      -                      "code",
      -                      "standard"
      -                    ]
      -                  },
      -                  "section": {
      -                    "type": "string"
      -                  }
      -                },
      -                "required": [
      -                  "kind",
      -                  "document"
      -                ],
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "url": {
      -              "description": "Only where the calculator gives one; none is invented.",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "label"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "system": {
      -        "enum": [
      -          "metric",
      -          "imperial"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "engine",
      -      "calculator",
      -      "system",
      -      "inputs",
      -      "result",
      -      "sources",
      -      "citation",
      -      "links",
      -      "licence",
      -      "notice"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "citation": {
      -        "description": "The one citation line, built from the answer's own data.",
      -        "type": "string"
      -      },
      -      "detail": {
      -        "const": "summary"
      -      },
      -      "lines": {
      -        "description": "The result lines, as the report's table gives them.",
      -        "items": {
      -          "additionalProperties": {
      -            "type": "string"
      -          },
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "more": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "notes": {
      -        "description": "What a professional must decide, when to call one, a false-friend warning, that adoption is local: kept in every summary.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "open": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "title": {
      -        "type": "string"
      -      },
      -      "tool": {
      -        "type": "string"
      -      },
      -      "url": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      }
      -    },
      -    "required": [
      -      "detail",
      -      "tool",
      -      "title",
      -      "lines",
      -      "notes",
      -      "citation",
      -      "url",
      -      "open",
      -      "more"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "calculator": {
      +        "properties": {
      +          "category": {
      +            "type": "string"
      +          },
      +          "description": {
      +            "type": "string"
      +          },
      +          "json": {
      +            "description": "The calculator's static API document, with its test vectors.",
      +            "type": "string"
      +          },
      +          "lastVerified": {
      +            "description": "The date the calculator's sources were last checked.",
      +            "type": "string"
      +          },
      +          "slug": {
      +            "type": "string"
      +          },
      +          "title": {
      +            "type": "string"
      +          },
      +          "url": {
      +            "description": "The calculator's page on craftquantities.com.",
      +            "type": "string"
      +          },
      +          "version": {
      +            "description": "The calculator's own version; a result names the calculator that produced it.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "slug",
      +          "title",
      +          "category",
      +          "version",
      +          "lastVerified",
      +          "url",
      +          "json"
      +        ],
      +        "type": "object"
      +      },
      +      "citation": {
      +        "properties": {
      +          "accessDate": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "author": {
      +            "type": "string"
      +          },
      +          "formats": {
      +            "properties": {
      +              "apa": {
      +                "type": "string"
      +              },
      +              "bibtex": {
      +                "type": "string"
      +              },
      +              "harvard": {
      +                "type": "string"
      +              },
      +              "plain": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "plain",
      +              "apa",
      +              "harvard",
      +              "bibtex"
      +            ],
      +            "type": "object"
      +          },
      +          "sourcesChecked": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "title": {
      +            "type": "string"
      +          },
      +          "url": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          }
      +        },
      +        "required": [
      +          "author",
      +          "title",
      +          "url",
      +          "formats",
      +          "accessDate"
      +        ],
      +        "type": "object"
      +      },
      +      "engine": {
      +        "properties": {
      +          "api": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "version": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "version",
      +          "api"
      +        ],
      +        "type": "object"
      +      },
      +      "explain": {
      +        "description": "Only when explain is true. Each figure is the calculator's own; no step is a formula written for the engine.",
      +        "properties": {
      +          "about": {
      +            "type": "string"
      +          },
      +          "coverage": {
      +            "description": "result-only: the calculator reports no figures between its inputs and its result.",
      +            "enum": [
      +              "intermediates",
      +              "result-only"
      +            ]
      +          },
      +          "final": {
      +            "description": "The figures the answer returns, copied from it.",
      +            "properties": {
      +              "imperial": {
      +                "properties": {
      +                  "printed": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "unit": {
      +                    "type": "string"
      +                  },
      +                  "value": {
      +                    "anyOf": [
      +                      {
      +                        "type": "number"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "value",
      +                  "unit",
      +                  "printed"
      +                ],
      +                "type": "object"
      +              },
      +              "metric": {
      +                "properties": {
      +                  "printed": {
      +                    "anyOf": [
      +                      {
      +                        "type": "string"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  },
      +                  "unit": {
      +                    "type": "string"
      +                  },
      +                  "value": {
      +                    "anyOf": [
      +                      {
      +                        "type": "number"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "value",
      +                  "unit",
      +                  "printed"
      +                ],
      +                "type": "object"
      +              }
      +            },
      +            "required": [
      +              "metric",
      +              "imperial"
      +            ],
      +            "type": "object"
      +          },
      +          "limits": {
      +            "description": "What the trace does not show, and why.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "steps": {
      +            "items": {
      +              "properties": {
      +                "imperial": {
      +                  "properties": {
      +                    "unit": {
      +                      "type": "string"
      +                    },
      +                    "value": {
      +                      "anyOf": [
      +                        {
      +                          "type": "number"
      +                        },
      +                        {
      +                          "type": "null"
      +                        }
      +                      ]
      +                    }
      +                  },
      +                  "required": [
      +                    "value",
      +                    "unit"
      +                  ],
      +                  "type": "object"
      +                },
      +                "kind": {
      +                  "enum": [
      +                    "input",
      +                    "intermediate",
      +                    "result",
      +                    "allowance",
      +                    "range",
      +                    "rates",
      +                    "display"
      +                  ]
      +                },
      +                "label": {
      +                  "type": "string"
      +                },
      +                "metric": {
      +                  "properties": {
      +                    "unit": {
      +                      "type": "string"
      +                    },
      +                    "value": {
      +                      "anyOf": [
      +                        {
      +                          "type": "number"
      +                        },
      +                        {
      +                          "type": "null"
      +                        }
      +                      ]
      +                    }
      +                  },
      +                  "required": [
      +                    "value",
      +                    "unit"
      +                  ],
      +                  "type": "object"
      +                },
      +                "movedBy": {
      +                  "description": "Input ids whose change moved this figure, measured by running compute again.",
      +                  "items": {
      +                    "type": "string"
      +                  },
      +                  "type": "array"
      +                },
      +                "n": {
      +                  "type": "integer"
      +                },
      +                "source": {
      +                  "enum": [
      +                    "caller",
      +                    "default"
      +                  ]
      +                },
      +                "system": {
      +                  "enum": [
      +                    "metric",
      +                    "imperial",
      +                    "both"
      +                  ]
      +                },
      +                "text": {
      +                  "description": "The step in words.",
      +                  "type": "string"
      +                },
      +                "unit": {
      +                  "description": "The calculator's own (base) unit for the value.",
      +                  "type": "string"
      +                },
      +                "value": {
      +                  "anyOf": [
      +                    {
      +                      "type": "number"
      +                    },
      +                    {
      +                      "type": "string"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ]
      +                }
      +              },
      +              "required": [
      +                "n",
      +                "kind",
      +                "system",
      +                "label",
      +                "text"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          }
      +        },
      +        "required": [
      +          "about",
      +          "coverage",
      +          "steps",
      +          "final",
      +          "limits"
      +        ],
      +        "type": "object"
      +      },
      +      "inputs": {
      +        "description": "Every input the calculation ran on, and where each came from.",
      +        "items": {
      +          "properties": {
      +            "baseUnit": {
      +              "type": "string"
      +            },
      +            "dimension": {
      +              "type": "string"
      +            },
      +            "id": {
      +              "type": "string"
      +            },
      +            "imperial": {
      +              "properties": {
      +                "unit": {
      +                  "type": "string"
      +                },
      +                "value": {
      +                  "type": "number"
      +                }
      +              },
      +              "required": [
      +                "value",
      +                "unit"
      +              ],
      +              "type": "object"
      +            },
      +            "label": {
      +              "type": "string"
      +            },
      +            "metric": {
      +              "properties": {
      +                "unit": {
      +                  "type": "string"
      +                },
      +                "value": {
      +                  "type": "number"
      +                }
      +              },
      +              "required": [
      +                "value",
      +                "unit"
      +              ],
      +              "type": "object"
      +            },
      +            "option": {
      +              "type": "string"
      +            },
      +            "read": {
      +              "type": "string"
      +            },
      +            "source": {
      +              "enum": [
      +                "caller",
      +                "default"
      +              ]
      +            },
      +            "type": {
      +              "enum": [
      +                "number",
      +                "select"
      +              ]
      +            },
      +            "value": {
      +              "type": [
      +                "number",
      +                "string"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "id",
      +            "label",
      +            "type",
      +            "value",
      +            "source"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "licence": {
      +        "properties": {
      +          "attribution": {
      +            "type": "string"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "url": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "url",
      +          "attribution"
      +        ],
      +        "type": "object"
      +      },
      +      "links": {
      +        "properties": {
      +          "open": {
      +            "description": "Opens the page on these inputs.",
      +            "type": "string"
      +          },
      +          "page": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "page",
      +          "open"
      +        ],
      +        "type": "object"
      +      },
      +      "market": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "notice": {
      +        "type": "string"
      +      },
      +      "result": {
      +        "properties": {
      +          "imperial": {
      +            "properties": {
      +              "allowance": {
      +                "anyOf": [
      +                  {
      +                    "properties": {
      +                      "base": {
      +                        "type": "number"
      +                      },
      +                      "label": {
      +                        "type": "string"
      +                      },
      +                      "percent": {
      +                        "type": "number"
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "breakdown": {
      +                "items": {
      +                  "properties": {
      +                    "label": {
      +                      "type": "string"
      +                    },
      +                    "printed": {
      +                      "type": "string"
      +                    },
      +                    "unit": {
      +                      "type": "string"
      +                    },
      +                    "value": {
      +                      "anyOf": [
      +                        {
      +                          "type": "number"
      +                        },
      +                        {
      +                          "type": "null"
      +                        }
      +                      ]
      +                    }
      +                  },
      +                  "required": [
      +                    "label",
      +                    "value",
      +                    "unit",
      +                    "printed"
      +                  ],
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              },
      +              "canonical": {
      +                "description": "The figure in the calculator's own unit, before the display adapter: what its test vectors pin.",
      +                "properties": {
      +                  "unit": {
      +                    "type": "string"
      +                  },
      +                  "value": {
      +                    "anyOf": [
      +                      {
      +                        "type": "number"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "value",
      +                  "unit"
      +                ],
      +                "type": "object"
      +              },
      +              "confidence": {
      +                "enum": [
      +                  "high",
      +                  "medium",
      +                  "low"
      +                ]
      +              },
      +              "confidenceNote": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "isComparison": {
      +                "description": "The figure is set against a limit. It is not an approval.",
      +                "type": "boolean"
      +              },
      +              "limitations": {
      +                "items": {
      +                  "type": "string"
      +                },
      +                "type": "array"
      +              },
      +              "printed": {
      +                "anyOf": [
      +                  {
      +                    "description": "The headline exactly as the page prints it.",
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "unit": {
      +                "type": "string"
      +              },
      +              "value": {
      +                "anyOf": [
      +                  {
      +                    "description": "The headline in this system; null where a rate it needs is not given.",
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "withheld": {
      +                "anyOf": [
      +                  {
      +                    "properties": {
      +                      "missingRates": {
      +                        "items": {
      +                          "properties": {
      +                            "input": {
      +                              "type": "string"
      +                            },
      +                            "label": {
      +                              "type": "string"
      +                            }
      +                          },
      +                          "type": "object"
      +                        },
      +                        "type": "array"
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              }
      +            },
      +            "required": [
      +              "value",
      +              "unit",
      +              "printed",
      +              "breakdown",
      +              "confidence",
      +              "isComparison",
      +              "canonical"
      +            ],
      +            "type": "object"
      +          },
      +          "label": {
      +            "type": "string"
      +          },
      +          "metric": {
      +            "properties": {
      +              "allowance": {
      +                "anyOf": [
      +                  {
      +                    "properties": {
      +                      "base": {
      +                        "type": "number"
      +                      },
      +                      "label": {
      +                        "type": "string"
      +                      },
      +                      "percent": {
      +                        "type": "number"
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "breakdown": {
      +                "items": {
      +                  "properties": {
      +                    "label": {
      +                      "type": "string"
      +                    },
      +                    "printed": {
      +                      "type": "string"
      +                    },
      +                    "unit": {
      +                      "type": "string"
      +                    },
      +                    "value": {
      +                      "anyOf": [
      +                        {
      +                          "type": "number"
      +                        },
      +                        {
      +                          "type": "null"
      +                        }
      +                      ]
      +                    }
      +                  },
      +                  "required": [
      +                    "label",
      +                    "value",
      +                    "unit",
      +                    "printed"
      +                  ],
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              },
      +              "canonical": {
      +                "description": "The figure in the calculator's own unit, before the display adapter: what its test vectors pin.",
      +                "properties": {
      +                  "unit": {
      +                    "type": "string"
      +                  },
      +                  "value": {
      +                    "anyOf": [
      +                      {
      +                        "type": "number"
      +                      },
      +                      {
      +                        "type": "null"
      +                      }
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "value",
      +                  "unit"
      +                ],
      +                "type": "object"
      +              },
      +              "confidence": {
      +                "enum": [
      +                  "high",
      +                  "medium",
      +                  "low"
      +                ]
      +              },
      +              "confidenceNote": {
      +                "anyOf": [
      +                  {
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "isComparison": {
      +                "description": "The figure is set against a limit. It is not an approval.",
      +                "type": "boolean"
      +              },
      +              "limitations": {
      +                "items": {
      +                  "type": "string"
      +                },
      +                "type": "array"
      +              },
      +              "printed": {
      +                "anyOf": [
      +                  {
      +                    "description": "The headline exactly as the page prints it.",
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "unit": {
      +                "type": "string"
      +              },
      +              "value": {
      +                "anyOf": [
      +                  {
      +                    "description": "The headline in this system; null where a rate it needs is not given.",
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              },
      +              "withheld": {
      +                "anyOf": [
      +                  {
      +                    "properties": {
      +                      "missingRates": {
      +                        "items": {
      +                          "properties": {
      +                            "input": {
      +                              "type": "string"
      +                            },
      +                            "label": {
      +                              "type": "string"
      +                            }
      +                          },
      +                          "type": "object"
      +                        },
      +                        "type": "array"
      +                      }
      +                    },
      +                    "type": "object"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ]
      +              }
      +            },
      +            "required": [
      +              "value",
      +              "unit",
      +              "printed",
      +              "breakdown",
      +              "confidence",
      +              "isComparison",
      +              "canonical"
      +            ],
      +            "type": "object"
      +          }
      +        },
      +        "required": [
      +          "label",
      +          "metric",
      +          "imperial"
      +        ],
      +        "type": "object"
      +      },
      +      "sources": {
      +        "items": {
      +          "properties": {
      +            "label": {
      +              "description": "The source as the calculator cites it.",
      +              "type": "string"
      +            },
      +            "references": {
      +              "items": {
      +                "properties": {
      +                  "body": {
      +                    "type": "string"
      +                  },
      +                  "document": {
      +                    "type": "string"
      +                  },
      +                  "edition": {
      +                    "type": "string"
      +                  },
      +                  "kind": {
      +                    "enum": [
      +                      "code",
      +                      "standard"
      +                    ]
      +                  },
      +                  "section": {
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "kind",
      +                  "document"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "url": {
      +              "description": "Only where the calculator gives one; none is invented.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "label"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "system": {
      +        "enum": [
      +          "metric",
      +          "imperial"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "engine",
      +      "calculator",
      +      "system",
      +      "inputs",
      +      "result",
      +      "sources",
      +      "citation",
      +      "links",
      +      "licence",
      +      "notice"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "citation": {
      +        "description": "The one citation line, built from the answer's own data.",
      +        "type": "string"
      +      },
      +      "detail": {
      +        "const": "summary"
      +      },
      +      "lines": {
      +        "description": "The result lines, as the report's table gives them.",
      +        "items": {
      +          "additionalProperties": {
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "more": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "notes": {
      +        "description": "What a professional must decide, when to call one, a false-friend warning, that adoption is local: kept in every summary.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "open": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "title": {
      +        "type": "string"
      +      },
      +      "tool": {
      +        "type": "string"
      +      },
      +      "url": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "detail",
      +      "tool",
      +      "title",
      +      "lines",
      +      "notes",
      +      "citation",
      +      "url",
      +      "open",
      +      "more"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed2 schema fields changed
    • changedInput schema / properties / inputs / description
      Previous value: -"Input id → value. A length, area, volume or other measured input takes \"12 ft\", \"3.5 m\", \"8' 3 1/2\\\"\" or {\"value\": 12, \"unit\": \"ft\"}; a count or percentage takes a number; a select takes one of its option values. Inputs left out take the value the calculator's page opens on."New value: +"The calculator's input values, by input id (an unknown id is refused with the accepted ids). A length, area, volume or other measured input takes \"12 ft\", \"3.5 m\", \"8' 3 1/2\\\"\" or {\"value\": 12, \"unit\": \"ft\"}; a count or percentage takes a number; a select takes one of its option values. Inputs left out take the value the calculator's page opens on."
    • changedInput schema / properties / slug / description
      Previous value: -"A calculator slug, such as concrete-calculator."New value: +"The calculator's slug, such as concrete-calculator."
  3. First observed

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world behaviour, so the bar is low. The description still adds real context: the answer comes back in both metric and US units with the inputs used, sources, citation and page link, and prices are deliberately omitted. It also notes that omitted inputs fall back to the calculator page's opening values, though it doesn't discuss failure modes for unknown slugs beyond the schema's 'refused with the accepted ids'.

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?

Front-loaded with the core action and a compact statement of the return shape, ending on the useful 'No prices' exclusion. The long unit enumeration adds some bulk, but each clause carries information an agent would otherwise have to dig out of the schema.

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?

With an output schema present, the description need not spell out return values, and annotations cover the safety profile. It still communicates scope, unit handling, default-input behaviour and the price exclusion, leaving only sibling selection and slug discovery unaddressed for a 7-parameter tool with nested inputs.

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% and the per-parameter descriptions (slug, detail, inputs, market, system, explain, inputUnits) are already detailed, so a baseline of 3 applies. The description adds only marginal meaning — the unit vocabulary for counts (bags, sheets, studs, tiles, litres, gallons, cubic yards, m³) — without explaining slug discovery or how inputs map to a calculator's schema.

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 (computes) and resource (one calculator, by slug) with a concrete scope — the amount of material a job needs — illustrated by bags of concrete and sheets of drywall. The word 'one' implicitly separates it from calculate_batch, but no sibling is named outright.

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?

The use case (compute a material quantity for a job) is implied clearly enough that an agent can infer when to call it, and 'No prices' excludes a class of content. However, it never says when to prefer calculate_batch, get_calculator, solve_backwards or run_example, so tool selection among close siblings is left to inference.

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