Skip to main content
Glama

Paint litres and tins

paint_quantity
Read-onlyIdempotent

Works out paint for a room (walls, ceiling, woodwork from length, width, height, doors and windows), an exterior (perimeter x height plus gables, less openings) or a custom list of areas. Shows areas, coats, indicative coverage per surface type, litres, litres with waste and the tins to buy (least paint left over, plus a fewer tins option). New plaster adds a mist coat; a light over dark colour change adds a wall coat. Coverage is indicative: pass the tin's figure as coverage_m2_per_litre to make it exact. Example: {"job":"room","length_m":4,"width_m":3.5,"height_m":2.4,"doors":1,"windows":1}.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "paint_quantity"
  }
}

Input Schema

NameRequiredDescriptionDefault
jobNoDefaults to room, or exterior if perimeter_m is given, or custom if areas is given.
areasNoCustom: list of { name, area_m2, surface, coats, coverage_m2_per_litre }. At most 100.
doorsNoNumber of doors. Defaults to 1.
tradeNoOptional. The decorator's own business details (Nero Trade Profile v1). Used to prefill quotes and to give a stable nero_trade_ref. Not stored by Brush Pack.
gablesNoExterior: gable triangles above the eaves line (width at the base, height to the ridge).
width_mNoRoom width, metres.
windowsNoNumber of windows at the 1.2 x 1.2 m default size. Defaults to 1. Ignored if window_sizes is given.
height_mNoWall height floor to ceiling, metres. Defaults to 2.4.
length_mNoRoom length, metres.
wall_coatsNoDefaults to 2 (plus a mist coat on new plaster).
openings_m2NoExterior: total area of doors and windows to take off.
paint_wallsNoDefault true.
perimeter_mNoExterior: total length of walls to paint, metres.
tin_sizes_lNoTin sizes on offer, litres. Defaults by product: emulsion 10, 5, 2.5, 1; masonry 10, 5, 2.5; trim 2.5, 1, 0.75, 0.5.
door_width_mNoDefaults to 0.762 (standard 2 ft 6 in door).
wall_surfaceNoSurface of the walls. Room default smooth_painted; exterior default masonry_smooth. smooth_painted: Previously painted smooth plaster or plasterboard (12 m2/L); new_plaster: New bare plaster (porous, needs a mist coat) (9 m2/L); bare_plasterboard: Bare plasterboard (10 m2/L); lining_paper: Lining paper (11 m2/L); textured: Textured coating or woodchip (7 m2/L); masonry_smooth: Smooth render or painted masonry (7 m2/L); masonry_rough: Pebbledash or rough cast (4 m2/L); bare_brick: Bare brick or block (5 m2/L); woodwork: Woodwork top coat (gloss, satin, eggshell) (15 m2/L); wood_primer: Primer or undercoat on bare wood (12 m2/L); metal: Metal paint (railings, gates, radiators) (12 m2/L); wood_stain: Exterior wood stain or treatment (12 m2/L)
window_sizesNoReal window opening sizes.
ceiling_coatsNoDefaults to 2.
colour_changeNolight_over_dark and strong_colour add one wall coat.
door_height_mNoDefaults to 1.981.
paint_ceilingNoDefault true.
waste_percentNoAdded to the litres before choosing tins. Defaults to 10.
woodwork_bareNoAdds a primer or undercoat coat on the woodwork.
paint_woodworkNoDefault true (skirting, door faces and frames, window frames).
woodwork_coatsNoTop coats on woodwork, defaults to 2.
ceiling_surfaceNo
skirting_height_mNoPainted skirting height, defaults to 0.15.
coverage_m2_per_litreNoSpreading rate from the tin, used for every wall and ceiling line.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4/5.0
Behavior5/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 well beyond that: it enumerates the outputs (areas, coats, coverage per surface type, litres, litres with waste, tins to buy), explains the tin-selection objective (least paint left over, plus a fewer-tins option), and discloses two non-obvious behavioural rules — a mist coat on new plaster and an extra wall coat for a light-over-dark change. It also states that coverage is indicative and how to make it exact, which is real behavioural context an agent cannot get from 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?

Content is front-loaded — job scopes first, then outputs, then the two coat rules, then the coverage caveat, then a worked example. Sentences are dense and every one carries information, though the parenthetical input list in the opening clause is slightly cluttered. Nothing appears redundant.

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 28 optional parameters, nested trade/gable/window objects and no output schema, the description has to explain what comes back, and it does. It also covers the three job modes and the coat adjustments that materially change results. Minor gaps remain around how job inference interacts with supplied parameters, but that rule is documented in the schema's job field.

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

Parameters4/5

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

Schema description coverage is 96%, so the baseline is 3 and the schema already carries the parameter burden. The description adds meaning on top: it flags coverage_m2_per_litre as the lever for exact results and supplies a concrete example call showing which fields a room job needs in practice. That is a modest but genuine lift above the 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 and resource: 'works out paint' for three distinct scopes (room, exterior, custom area list), naming the surfaces and inputs involved. An agent can tell this is a quantity/tin calculator rather than an estimator or a checklist. It stops short of naming any sibling to contrast with, so it is clear but not sibling-differentiating.

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?

Usage is implied through the three job modes and their inputs (room from length/width/height, exterior from perimeter x height plus gables less openings, custom from a list of areas), which effectively tells an agent which mode to pick. There is no explicit when-not-to-use guidance and no pointer to alternatives such as job_estimate or wallpaper_rolls. Adequate but leaves the routing decision 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.