Skip to main content
Glama

Server Details

UK DIY shopping lists for one room: paint, wallpaper, tiles, flooring and more, in real packs.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 34 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A3.7/5.0

Scored across 4 tools

Disambiguation3/5

plan_room and quick_room_list both produce shopping lists for a room, so their core purpose overlaps significantly. The descriptions do a good job of explaining when to use one versus the other, but an agent could still misselect the simpler or more detailed planner. ask_questions and find_guide are clearly distinct.

Naming Consistency3/5

ask_questions, find_guide, and plan_room follow a verb_noun pattern, but quick_room_list breaks the convention with an adjective_noun form and no verb. The names remain readable, but the set is not fully consistent.

Tool Count4/5

Four tools is a reasonable, focused surface for a room-planning assistant. Each tool covers a distinct kind of interaction, though the two planning tools could arguably be merged into one tool with different modes.

Completeness3/5

The surface covers question discovery, guide search, and two levels of room planning, but there is no tool to retrieve a full guide from the address returned by find_guide. That leaves a notable dead end for agents wanting more detail than the short answers.

Available Tools

4 tools
ask_questionsQuestions for a BuildBatch room planA
Read-onlyIdempotent
Inspect

Returns BuildBatch's full ordered question script (about 24 KB) for a detailed room plan: each question for the person, its allowed answers, which are required and when each applies. Takes no arguments.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
vNoThe version of the script's format.
okNofalse only when the call was refused.
apiNo"buildbatch-assistant".
planNoHow to turn the answers into a plan_room call or a /plan.json query.
errorNoWhen ok is false: why.
titleNoWhat the script is for.
documentNo"question-script".
questionsNoEach question in order, with its allowed answers, whether it is required and when it applies.
conditionsNoHow to read each question's when and requiredWhen.
instructionsNoIts purpose, rules and what to do after the call.
typicalRoomsNoThe typical rooms, for a person who has not measured.
specificationNoThe OpenAPI description.
productFiguresNoQuestions about a product's own figures (a paint's coverage, a pack's size), and the arguments each fills.
typicalHeightMmNoThe typical ceiling height, in millimetres.
typicalOpeningsNoThe typical door and window sizes, by name.
humanExplanationNoA page that explains it to a person.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new operational context: the payload is roughly 24 KB, which matters for context budgeting, and it is a static ordered script rather than a computed result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Two sentences, front-loaded with the verb and payload size, then a compact enumeration of what the script contains. No filler and nothing that could be cut.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, yet the description still characterizes the payload shape and its fixed size. The only gap is guidance on how this tool relates to the other three BuildBatch tools in a workflow.

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?

There are zero parameters, so the baseline is 4. The description confirms this explicitly with 'Takes no arguments', which matches the empty schema and reinforces rather than merely repeats it.

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 ('Returns') and resource ('full ordered question script'), plus the payload's internal structure (question text, allowed answers, required flags, applicability conditions). It is clearly distinguishable from plan_room in practice, but it never names a sibling to route the agent explicitly.

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?

'Takes no arguments' and the description of the returned script imply this is the retrieval step that precedes answering questions, but no when-to-use or when-not-to-use condition is stated, and no alternative (e.g. find_guide or plan_room) is mentioned as a predecessor or substitute.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_guideFind a BuildBatch guideA
Read-onlyIdempotent
Inspect

Finds BuildBatch's guides for a decorating or flooring question (how long between coats, how many tiles in a square metre, what to buy to lay laminate), and returns up to three with each guide's own short answers and its address. It does not work out quantities for a room.

NameRequiredDescriptionDefault
queryYesThe question, in plain words.

Output Schema

NameRequiredDescription
okYestrue: the guides were searched (none may match). false: the query was refused.
apiNoOn a refusal of an argument: "buildbatch-assistant".
noteNoWhose answers they are and how far they have been checked, or that no guide matched.
errorNoWhen ok is false: why.
queryNoThe question as read.
guidesNoUp to three guides, best first.
allGuidesNoThe list of every guide.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, closed-world, and non-destructive behavior. The description adds useful return context ('up to three' guides, each with short answers and an address) and a scope limitation, though it does not mention rate limits or authentication.

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 and return format are front-loaded, followed by a useful exclusion. The first sentence is dense with parenthetical examples, but every part contributes to understanding the tool.

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?

For a simple one-parameter guide search with an output schema already present, the description covers what the tool does, when to use it, its output shape at a high level, and a key limitation. The only notable omission is explicit sibling routing.

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 coverage is 100%, so the baseline is 3. The description still adds value by giving plain-language question examples and emphasizing that the query is a natural-language question, reinforcing the parameter's intended form.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Finds BuildBatch's guides') and grounds it with concrete decorating/flooring question examples. It also states the scoping boundary ('does not work out quantities for a room'), so an agent can distinguish it from room-planning siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

It clearly says when to use it: for decorating or flooring questions like drying times, tile counts, or buying materials. It also states when not to use it for quantity calculations, but it does not explicitly name which sibling to use instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_roomPlan one room with BuildBatch (every option)A
Read-onlyIdempotent
Inspect

Works out the whole shopping list for one room, with every option the planner has: exact door and window sizes, a product's own coverage and pack sizes, an L-shaped room, tiling part-way up a wall. Arguments are the named parameters of /plan.json. A job is required. A height left out, where the job needs one, is taken as 2.4 m and the answer states it. Repeated door, window and opening values are arrays. No price is used; price arguments are ignored and named in the answer. Returns a short shopping list: each item with its quantity and reason, and a link to the whole list.

NameRequiredDescriptionDefault
pNoWritten by the planner in a sent list link: the day of the shop prices the sender's screen used (YYYY-MM-DD), so that the screen that opens it can say when the prices have moved since. Leave it out of a call.
tNoWritten by the planner in a sent list link: the Room Refresh template version the sender's screen used, so that the screen that opens it can say when the figures have moved since. Leave it out of a call.
bayNoA bay on a wall of the rectangle, going out: width x depth @ wall. One a wall.
jobYesThe job. Required. wallpaper is the paint job with papered walls and no ceiling; tiles is the paint job with tiled walls and no ceiling; both is paint and a new floor; paint-carpet is paint and carpet from a roll; skirting is skirting and architrave; groundwork is MOT Type 1 sub-base, gravel, or gravel over Type 1 (groundwork.material).
areaNoLoft insulation, concrete, a patio, sub-base and gravel, and a floor (laminate, wood, vinyl planks or floor tiles) only: the floor's area in square metres, up to 900, instead of length and width. How far it is round is then not known: the formwork, the edging or the scotia beading is a check without a length, and new skirting needs the length and width.
bathNoA bath or shower tray: a name (bath-1700, tray-900) or its length along the wall x its rim height x how far it comes into the room, in the units. The wall behind it comes off up to the rim, and its footprint off a floor being laid. The key may be repeated.
doorNoOne per door, the value repeated for more. A typical size by name (int-762 is a standard internal door) or width x height in the units. *2 after it means two the same.
haveNoLine ids, comma separated, to mark Already have before the list is made. The ids are in the answer's lines. Rarely needed.
loftNoWhether the loft insulation uses labelled example figures (quick) or figures measured in the loft and read from the chosen roll (custom). Needed for the keys below to take effect.
nameNoWhat the room is called. Optional. It is carried into the links the answer gives, where the person can also add it themselves.
needNoLine ids, comma separated, to mark Need before the list is made. The ids are in the answer's lines. Rarely needed.
planNoA room that is not a rectangle: its corners in turn, in metres whatever units says, as x,y pairs separated by ";". Replaces length and width. Up to 24 corners.
trimNoNew skirting, architrave or both (skirting,architrave), with any job in a room; a loft floor, a slab and a patio take none. Default skirting for the skirting job, else none.
boardNoWhether the plasterboard uses labelled example figures (quick) or figures from the board and system specification (custom). Needed for the keys below to take effect.
checkNoLine ids, comma separated, to mark Check first before the list is made. The ids are in the answer's lines. Rarely needed.
floorNoWhether the flooring uses the labelled example figures (quick) or figures read off the pack (custom). Needed for the keys below to take effect.
paperNoWhether the wallpaper is the labelled example roll (quick) or read off the label (custom). Needed for the keys below to take effect.
patioNoWhether the patio uses labelled example figures (quick: a 600 × 600 mm slab, the makers' 10 mm joint, 10% for cuts, a 30 mm bed at 1 : 4) or figures entered from the slab and the guides (custom). Needed for the keys below to take effect. The room is the patio: its length and width, no height.
unitsNoWhat length, width, height and the doors are measured in. Default m. In ft write 13ft9in, or 13 for whole feet.
wallsNoWhat the walls get. The job sets it, so it is rarely needed: paint, wallpaper, tiles, board or none.
widthNoThe other side of the floor, in the units. Not needed when plan is given.
alcoveNoAn alcove on a wall of the rectangle, going out: width x depth @ wall. One a wall.
breastNoA chimney breast on a wall of the rectangle: width x depth @ wall, in the room's units; the wall is L1, W1, L2 or W2. One a wall.
carpetNoWhether the carpet uses the labelled example roll figures (quick) or figures from the carpet and shop (custom). Needed for the keys below to take effect.
detailNoHow much to return. summary, the default: each item with its quantity and reason, what to check first and the list link. full: every line's working, pack breakdown and each shop's search link as well (20 KB or more).
groundNoWhether the floor is on the ground floor. Default unsure. Used by flooring jobs.
heightNoFloor to ceiling, in the units. Used when walls are painted, papered, tiled or boarded (paint-carpet too); if it is left out then, a 2.4 m ceiling, a typical UK height, is taken and the answer states it. Not used for flooring, carpet, loft insulation, concrete or skirting alone.
lengthNoOne side of the floor, in the units. A length may carry its own unit (360cm, 4200mm). Not needed when plan is given.
windowNoOne per window, the value repeated for more. A typical size by name (win-standard) or width x height in the units. *2 after it means two the same.
ceilingNoWhat the ceiling gets: paint, or board on the plasterboard job, or none. Another word is named in ignored[] and the job's own choice used.
fittingNoHow the floor is fitted. Default unsure. Used by flooring jobs.
lengthsNoWhether the skirting and architrave lengths are the labelled examples (quick) or the lengths the shop sells (custom). Needed for the keys below to take effect.
openingNoAny other opening to take off the walls (a garage door, an archway), as width x height or a name. The key may be repeated.
surfaceNoWhat the painted surfaces are like now. Default sound, the planner's own default. Used by painting jobs.
concreteNoWhether the concrete slab uses labelled example figures (quick) or the thickness decided for the job and figures read off the bag (custom). Needed for the keys below to take effect. The room is the slab: its length and width, no height.
laystartNoFloor tiles, and a patio, given as length and width or a plan (not an area), straight or brick laid: where the laying starts. centre (the middle of the room), corner (whole tiles along two walls) or house (a patio only: whole slabs along the house wall). Left out, the start needing the fewest cuts and tiles is used, or the house wall for a patio against the house; the answer says which and counts that layout.
subfloorNoWhat is under a new floor. Default unsure. Used by flooring jobs.
woodworkNoPaint jobs only: paint when the woodwork is painted too (this room's doors, their architraves, the windows' frames and the skirting, counted from the doors and windows given and the room's perimeter, in satinwood at a typical coverage). With walls=none and ceiling=none, the woodwork on its own. Left out: not painted.
loft.overNoThickness in millimetres of a second roll laid across the joists over one layer of the first; optional. With it, the first roll is one layer between the joists and the rest is this roll.
loft.packNoSquare metres covered by one chosen roll or pack; optional for a 100, 150, 170 or 200 mm roll, whose typical coverage (the maker's, as the shops' own listings name it) is used and said so.
patio.bagNoWhat one bag of cement fills in litres, from the bag; optional. Without it the bags are counted from a typical 17 L a 25 kg bag, said to be typical.
patio.bedNoDepth of the full mortar bed in millimetres, before tamping. The makers' guides give 30 to 40 mm.
wallpaintNoWhether the wall paint uses the labelled example figures (quick) or figures read off the tin (custom). Needed for the keys below to take effect.
walltilesNoWhether the wall tiles are the labelled example box (quick) or read off the box (custom). Needed for the keys below to take effect.
woodpaintNoWhether the woodwork paint (with woodwork=paint) uses the labelled example figures (quick) or figures read off the tin (custom). Needed for the keys below to take effect.
board.skimNoMetres squared one bag of finish plaster covers, from the bag.
groundworkNoSub-base and gravel: quick, the one value (each layer at the typical depth for its use unless a depth is given, in bags counted from typical figures that name their sources). Needed for the keys below to take effect. The room is the area: its length and width, or area, no height.
loft.depthNoThickness of one new mineral-wool layer in millimetres, from the chosen roll.
loft.extraNoPercent to add for cuts and fitting.
newplasterNoPainting jobs: is any of it new or bare plaster? yes adds a mist coat of white contract matt on its own line and leaves the sugar soap out; no is a sound painted surface. Left out, the list is a sound room's and its primer line carries the question to ask.
not-neededNoLine ids, comma separated, to mark Not needed before the list is made. The ids are in the answer's lines. Rarely needed.
patio.bagsNoHow the sand and the sub-base are bought: bulk (bulk bags of about 800 kg) or bags (25 kg bags). Unless given, each comes in 25 kg bags where 20 of them or fewer cover it, and in bulk bags above that; each is counted in whole bags from a typical figure that names its source.
patio.packNoHow many slabs a pack holds, a whole number; optional. With it, whole packs are counted.
patio.sandNoParts of sharp sand in the bed, by volume. The guides give 3 or 4 to 1 of cement.
board.extraNoPercent to add for cuts. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used.
board.widthNoBoard width in metres. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used.
carpet.stepNoThe step in metres in which the shop sells the cut length.
floor.depthNoFloor tiles: the tile's thickness in millimetres, for the grout. Left out, a typical 10 mm is used and said so.
floor.extraNoPercent to add for cuts. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples.
floor.groutNoFloor tiles: metres squared one bag of grout covers.
floor.jointNoFloor tiles: the joint width in millimetres. With the tile size, the grout is counted by the makers' rule; left out, a typical 3 mm joint is used and said so.
floor.packsNoMetres squared in one pack or box, comma separated for several sizes. A size may carry a price after "@": the price is accepted and ignored. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples.
floor.tilehNoFloor tiles: the other side of a tile, in millimetres (with floor.tilew).
floor.tilewNoFloor tiles: one side of a tile, in millimetres, for a count of tiles (with floor.tileh). Optional; the boxes are still counted by area.
loft.targetNoChosen target insulation depth in millimetres.
paper.matchNoHow the pattern lines up. straight and half-drop need paper.repeat. unsure, or left out with no repeat, is counted as a straight match with a 64 cm repeat (three drops a roll at an ordinary ceiling), which keeps the rolls from running short; the line names it.
paper.pasteNoRolls one packet of paste does.
paper.widthNoRoll width in centimetres. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used.
patio.extraNoPercent to add for cuts.
patio.houseNoWhether the patio is against the house along one side: yes or no. It decides how many edges the sub-base runs 150 mm past and how much edge restraint is counted. Left out, it is counted as against the house along its longest side, and the sub-base line carries the question.
patio.jointNoJoint width in millimetres. The makers' guides give 10 mm as the minimum.
patio.widthNoOne side of a slab in millimetres.
skirtingoffNoFlooring jobs: is the skirting coming off, to go back over the new floor's edge? yes leaves the scotia beading out; no counts it in 2.4 m lengths. Left out, the beading is counted and its line carries the question to ask.
woodsurfaceNoWith woodwork=paint: what the woodwork is like now. Default sound (painted before and sound). bare adds a check line for knotting, primer and undercoat; flaking adds the note about old paint.
board.finishNoHow the boards will be finished.
board.fixingNoHow the boards will be fixed.
board.layersNoWhole layers from the complete system specification. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used.
board.lengthNoBoard length in metres. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used.
carpet.widthNoThe fixed width of the carpet roll in metres. Left out with carpet=quick: the standard width (4 or 5 m; 2, 3 or 4 m for sheet vinyl) that needs least roll for the room, said so on the list.
ceilingpaintNoWhether the ceiling paint uses the labelled example figures (quick) or figures read off the tin (custom). Needed for the keys below to take effect.
colourchangeNoPainting jobs: is the colour going much lighter or darker? yes adds one coat to the walls. Left out, two coats are counted and the wall paint's line carries the question to ask.
concrete.mixNoWhich of the maker's published mixes the cement, sand and aggregate follow: general purpose, paving or foundation. Mixed on site only.
floor.trowelNoFloor tiles: the notched trowel, 6 or 12 (mm). The adhesive is counted from it; left out, the one the adhesive maker's sheet gives for the tile's size (6 up to 300 mm on its long side, 12 above).
paper.lengthNoRoll length in metres. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used.
paper.repeatNoPattern repeat in centimetres. 0 or left out for none.
patio.cementNoParts of cement in the bed, by volume.
patio.coversNoSquare metres one pack covers, from the pack, for a project pack of mixed sizes; optional, and it beats patio.pack. With it, whole packs are counted by area.
patio.lengthNoThe other side of a slab in millimetres.
patio.primerNoSquare metres one tub of slurry primer covers, from the tub; optional. Without it the tubs are counted from a typical 12 m² a tub, said to be typical.
trim.breastsNoHow many chimney breasts the new skirting goes round: each adds its two returns. Left out: none.
walls.lengthNoPaint, tiles or wallpaper on some walls only (a splashback, a shower's walls, a feature wall): the total length of the walls covered, in the units. It replaces the room's perimeter for the paint, the tiles' area and the paper's drops; doors and windows are then not taken off. Left out: all the walls. Sent with a height and with no length, width, plan or area, it is a wall on its own: the room is not needed (walls only: no ceiling, woodwork, floor or skirting).
concrete.bagsNoHow the sand, aggregate or ballast of a mix on site, and the sub-base, are bought: bulk (bulk bags of about 800 kg) or bags (25 kg bags). Unless given, each comes in 25 kg bags where 20 of them or fewer cover it, and in bulk bags above that; each is counted in whole bags from a typical figure that names its source.
concrete.stepNoThe step in cubic metres the supplier sells ready-mixed concrete in. Ready-mixed only; optional.
floor.patternNoHow the floor is laid: straight, brick, diagonal or herringbone. A diagonal or herringbone lay takes 15% for cuts where a straight lay takes 10%, unless floor.extra gives another figure. Left out: straight.
floor.typicalNoSince template 1.37.0: packs, when floor.packs is one of the typical laminate sizes the planner offers beside its number, so the pack stays a typical figure that names its maker. Leave it out unless the planner wrote it.
loft.existingNoExisting insulation depth in millimetres.
loft.overpackNoSquare metres one roll of the second insulation covers; optional for a 100, 150, 170 or 200 mm roll.
walltiles.boxNoMetres squared in one box. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used.
board.adhesiveNoWall boards one bag of plasterboard adhesive fixes, from its instructions.
concrete.extraNoPercent to add for an uneven base and spillage. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples.
concrete.yieldNoCubic metres one bag makes, as printed on the bag. Bags only. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples.
floor.adhesiveNoFloor tiles: metres squared one bag of adhesive covers.
floor.coveringNoWhat the floor is. Default laminate.
floor.groutbagNoFloor tiles: the weight of one bag of grout in kilograms; 5 when left out.
floor.underlayNoWhether underlay is needed.
groundwork.useNoWhat it is for, which sets each layer's typical depth: path (Type 1 100 mm, gravel 50 mm), driveway (Type 1 150 mm, gravel 50 mm), shed (Type 1 100 mm, gravel 50 mm), border (Type 1 100 mm, gravel 50 mm). Default driveway. Typical figures from makers' and merchants' pages, not a design.
patio.jointingNoSquare metres one pail of jointing compound covers at your joint, from the pail; optional. Without it the pails are counted from a typical 7 m² a pail, said to be typical.
patio.subdepthNoDepth of the sub-base under the patio in millimetres, decided for the job; optional. Without it the makers' usual minimum of 100 mm is used, said to be typical.
wallpaint.nameNoThe name of a coloured wall paint (up to 60 characters), which the shops are searched for. Read with wallpaint.colour=colour only.
wallpaint.tinsNoTin sizes in litres, comma separated, for the wall paint. A size may carry a price after "@": the price is accepted and ignored.
woodpaint.tinsNoTin sizes in litres, comma separated, for the woodwork paint (with woodwork=paint). A size may carry a price after "@": the price is accepted and ignored.
carpet.coveringNoWhat is laid from the roll: carpet (with underlay and gripper) or sheet vinyl (loose laid, taped or glued; no underlay). Sheet vinyl is sold in 2, 3 and 4 m widths; its quick example is a 3 m roll.
carpet.underlayNoMetres squared covered by one chosen underlay roll or pack.
concrete.supplyNobags: bags of dry mix; mix: cement with sand and aggregate, mixed on site; mixed: ready-mixed concrete, delivered by the cubic metre. Mind the two: "mix" is mixed on site, "mixed" arrives mixed. Left out, the planner follows the slab's volume (bags up to 0.25 m³, mixed on site up to 1 m³, ready-mixed above) and the answer says what each of the three ways takes.
concrete.weightNoThe weight of one bag in kilograms. Bags only. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples.
groundwork.bagsNoHow the Type 1 and the gravel are bought: bulk (bulk bags of about 800 kg) or bags (25 kg bags, 20 kg for decorative chippings). Unless given, each comes in bags where 20 of them or fewer cover it, and in bulk bags above that.
wallpaint.coatsNoCoats on the tin, for the wall paint. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples.
wallpaint.extraNoPercent to add for waste and touch-ups, for the wall paint. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples.
walltiles.aboveNoyes when the wall above tiles that stop below the ceiling is painted on the same list; no, or left out, leaves it off.
walltiles.depthNoThe wall tile's thickness in millimetres, for the grout. Left out, a typical 8 mm is used and said so.
walltiles.extraNoPercent to add for cuts. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used.
walltiles.groutNoMetres squared one bag of grout covers.
walltiles.jointNoThe joint width in millimetres. With the tile size, the grout is counted by the makers' rule; left out, a typical 2 mm joint is used and said so.
walltiles.tilehNoThe other side of a wall tile, in millimetres (with walltiles.tilew).
walltiles.tilewNoOne side of a wall tile, in millimetres, for a count of tiles (with walltiles.tileh). Optional; the boxes are still counted by area.
woodpaint.coatsNoCoats on the tin, for the woodwork paint (with woodwork=paint). With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples.
woodpaint.extraNoPercent to add for waste and touch-ups, for the woodwork paint (with woodwork=paint). With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples.
carpet.allowanceNoThe trimming allowance in metres, added once to each room measurement.
carpet.directionNoWhich way the pile or pattern must run. Not decided lets the planner show the smaller one-piece cut that fits.
groundwork.depthNoDepth of the gravel in millimetres, loose; optional. Without it the use's typical depth is used, said to be typical.
lengths.skirtingNoLength the skirting is sold in, in metres. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used.
trim.breastdepthNoHow deep a chimney breast is, in millimetres. Left out: 350, an example depth, said to be one.
wallpaint.colourNoThe wall paint's colour: magnolia, or colour for a colour no partner shop sells (counted in 2.5 L tins and priced only once its price is typed). Left out: white.
wallpaint.finishNoThe wall paint's finish. Left out: matt.
walltiles.heightNoMetres up the wall the tiles go. Left out: to the ceiling.
walltiles.revealNoHow deep the window reveals are, in millimetres, on walls tiled to the ceiling: the reveals are tiled too. Left out: 150, an example depth, said to be one. 0 leaves them out.
walltiles.trowelNoThe notched trowel, 6 or 12 (mm). The adhesive is counted from it; left out, by the tile's size: 6 for a tile up to 600 mm on its long side, 12 for a larger one.
ceilingpaint.tinsNoTin sizes in litres, comma separated, for the ceiling paint. A size may carry a price after "@": the price is accepted and ignored.
concrete.subdepthNoDepth of the sub-base under the slab in millimetres, decided for the job; optional. With it, the sub-base is counted in bulk bags or 25 kg bags from a typical figure that names its source.
floor.adhesivebagNoFloor tiles: the weight of one bag of adhesive in kilograms; 20 when left out.
groundwork.gravelNoWhich gravel: shingle (20 mm gravel or shingle, in 25 kg bags or bulk bags) or decorative (decorative chippings, in 20 kg bags or bulk bags). Default shingle.
walltiles.fullrunNoMetres of wall tiled to the ceiling round a bath or shower, with walltiles.height for the rest (a bathroom's two heights). Left out: none.
walltiles.patternNoHow the wall tiles are laid: straight, brick, diagonal or herringbone. A diagonal or herringbone lay takes 15% for cuts where a straight lay takes 10%, unless walltiles.extra gives another figure. Left out: straight.
ceilingpaint.coatsNoCoats on the tin, for the ceiling paint. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples.
ceilingpaint.extraNoPercent to add for waste and touch-ups, for the ceiling paint. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples.
concrete.aggregateNoWhether the aggregate is bought as all-in ballast or as sharp sand and coarse aggregate. Mixed on site only.
concrete.thicknessNoSlab thickness in millimetres, decided for the job. BuildBatch suggests none. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples.
lengths.architraveNoLength the architrave is sold in, in metres. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used.
wallpaint.coverageNoMetres squared covered by one litre in one coat, from the tin, for the wall paint. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples.
walltiles.adhesiveNoMetres squared one bag of adhesive covers.
walltiles.groutbagNoThe weight of one bag of grout in kilograms; 5 when left out.
woodpaint.coverageNoMetres squared covered by one litre in one coat, from the tin, for the woodwork paint (with woodwork=paint). With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples.
floor.underlay.rollNoMetres squared in one roll of underlay.
groundwork.materialNoWhat is laid: type1 (MOT Type 1 sub-base alone), gravel (gravel alone) or both (gravel over Type 1). Default both.
groundwork.subdepthNoDepth of the Type 1 in millimetres once compacted, decided for the job; optional. Without it the use's typical depth is used, said to be typical.
ceilingpaint.coverageNoMetres squared covered by one litre in one coat, from the tin, for the ceiling paint. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples.
walltiles.adhesivebagNoThe weight of one bag of adhesive in kilograms; 20 when left out.

Output Schema

NameRequiredDescription
vNoThe version number of the planner's link and answer format.
okYestrue: a list was made. false: the call was refused, and error says why.
apiNoAlways "buildbatch-assistant".
askNoWhen ok is false: the ids of the questions in ask_questions to ask the person, in order.
moreNoWhat plan_room with detail "full" adds.
nextNoWhen ok is false: what to do next.
roomNoThe room as the planner understood it: a sentence (metres, as worked out), or with detail "full" its areas and lengths.
errorNoWhen ok is false: why the call was refused, as words or as { code, message }.
firstNoWhat has to be in place before the job starts, as toBuy's items: not a thing to buy.
linesNodetail "full": every line with its working, packs, figures and each shop's search link.
linksNoWhat listUrl and startUrl open, in words.
shopsNodetail "full": the shops each line's search link goes to.
toBuyNoEach thing to buy, in the order of the list.
pricesNoThat no price is shown or used in this answer.
reviewNoHow far the figures have been checked: not yet by a tradesperson.
assumedNoWhat was taken as not given, with the value taken (a missing height is a 2.4 m ceiling).
figuresNoWhat generic, typical and user mean.
honestyNodetail "full": the formulas' versions, how far the figures have been checked, and what the shop links are.
ignoredNoArguments that were not used, with why.
listUrlNoThe whole list on buildbatch.co.uk, as a link a person can open.
notUsedNoArguments that were sent and not used, with why.
summaryNodetail "full": the counts and the short list.
toCheckNoEach thing that depends on the person's own job, as toBuy's items, with its question.
documentNo"plan-summary" for the short answer; the planner's own name for detail "full" or a refusal.
problemsNoWhen ok is false: each argument that is missing or not understood, with the id of its question in ask_questions.
startUrlNoThe planner opened on this room, to change it.
statusesNodetail "full": what each line's status means.
toAnswerNoQuestions whose answers would change the list.
warningsNoWarnings that come with the list.
leftoversNoWhat will be left over once the whole packs are bought.
understoodNodetail "full": every argument as the planner read it.
assumptionsNodetail "full": what the whole list assumes.
typicalRoomNoWhen a typical room was used: its id, label and a note that these are not the person's own measurements.
startUrlNoteNoWhat the startUrl link opens.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety bar is met. The description adds genuine behavior beyond that: unstated heights fall back to 2.4 m and the answer says so, price arguments are silently dropped but surfaced in the response, and the return is a short shopping list with quantity plus reason and a link. It does not cover failure modes or the detail=full size tradeoff explicitly, though the schema does.

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?

Roughly 100 words for a 157-parameter tool is economical, and it is front-loaded with the purpose before moving to invocation facts and the return shape. A couple of clauses (height default, array repetition) restate schema content and could be trimmed, but nothing is bloated.

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?

Given a fully documented 157-property schema and an output schema, the description carries only what the schema cannot: that job is the sole required input, that defaults are applied and disclosed, and that prices are deliberately ignored. The remaining gap is routing context among the siblings, which matters for a tool this large but is not strictly needed to call it correctly.

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%, so the baseline is 3. The description adds only a thin layer — 'Arguments are the named parameters of /plan.json', repeats the 2.4 m height default already documented in the height property, and notes that repeated door/window/opening values are arrays (also in the schema). It correctly signals price arguments are accepted and ignored, but that is likewise in the per-parameter docs.

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 opens with a concrete verb and resource: it 'works out the whole shopping list for one room' and enumerates the option space it covers (door/window sizes, pack sizes, L-shaped rooms, partial wall tiling). 'With every option the planner has' implicitly contrasts with quick_room_list, but it never names that sibling, so differentiation is inferred rather than stated.

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?

Call-time guidance is present — 'A job is required', repeated values go in arrays, missing heights default to 2.4 m, price arguments are ignored — but this is invocation guidance, not tool selection guidance. There is no explicit statement of when to prefer this over quick_room_list or when to escalate to ask_questions/find_guide, and the '/plan.json' reference is opaque to an agent without outside knowledge.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quick_room_listWhat to buy for a room (quick)A
Read-onlyIdempotent
Inspect

Works out how much paint, wallpaper, wall tiles, flooring, carpet, skirting, loft insulation, plasterboard, concrete, patio paving or sub-base and gravel one room or area needs, and everything else to buy for the job (preparation, tools, safety), in real UK pack sizes. Takes the job and either the room's length, width and height, or a typical room by name for a room that has not been measured; the answer then states that the measurements are typical. A height left out, for a job on the walls, is taken as 2.4 m and the answer states it. Returns a short shopping list and a link to the whole list. It does not take exact door sizes, a product's own coverage or pack size, tiling part-way up a wall or an L-shaped room. For sub-base and gravel it plans gravel over Type 1 for a driveway, and the answer lists both as taken; plan_room takes groundwork.material (Type 1 or gravel alone) and groundwork.use (a path, a shed base or a border).

NameRequiredDescriptionDefault
jobYesThe job. Required. wallpaper is the paint job with papered walls and no ceiling; tiles is the paint job with tiled walls and no ceiling; both is paint and a new floor; paint-carpet is paint and carpet from a roll; skirting is skirting and architrave; groundwork is MOT Type 1 sub-base, gravel, or gravel over Type 1 (groundwork.material).
roomNoA typical room, for a person who has not measured: bedroom-small (3 m × 2.5 m), bedroom-large (4 m × 3.5 m), living-small (4 m × 3 m), living-large (5.5 m × 4 m), kitchen-small (3 m × 2 m), kitchen-large (4.5 m × 3.5 m), bathroom-small (2 m × 1.7 m), bathroom-large (2.7 m × 2.4 m), each 2.4 m high. The answer states that these are typical measurements. Not used together with length and width, and not for a loft, a slab, a patio or a sub-base, which are not rooms.
doorsNoHow many doors. Each is taken off the wall area at a typical size.
unitsNoWhat the measurements are in: m, cm, mm or ft (feet). Metres if left out.
widthNoThe room's width, in the units.
heightNoFloor to ceiling, in the units. Used for paint, wallpaper, wall tiles, both, paint-carpet and plasterboard; if it is left out for those, a 2.4 m ceiling, a typical UK height, is taken and the answer states it.
lengthNoThe room's length, in the units.
windowsNoHow many windows. Each is taken off the wall area at a typical size.

Output Schema

NameRequiredDescription
vNoThe version number of the planner's link and answer format.
okYestrue: a list was made. false: the call was refused, and error says why.
apiNoAlways "buildbatch-assistant".
askNoWhen ok is false: the ids of the questions in ask_questions to ask the person, in order.
moreNoWhat plan_room with detail "full" adds.
nextNoWhen ok is false: what to do next.
roomNoThe room as the planner understood it: a sentence (metres, as worked out), or with detail "full" its areas and lengths.
errorNoWhen ok is false: why the call was refused, as words or as { code, message }.
firstNoWhat has to be in place before the job starts, as toBuy's items: not a thing to buy.
linesNodetail "full": every line with its working, packs, figures and each shop's search link.
linksNoWhat listUrl and startUrl open, in words.
shopsNodetail "full": the shops each line's search link goes to.
toBuyNoEach thing to buy, in the order of the list.
pricesNoThat no price is shown or used in this answer.
reviewNoHow far the figures have been checked: not yet by a tradesperson.
assumedNoWhat was taken as not given, with the value taken (a missing height is a 2.4 m ceiling).
figuresNoWhat generic, typical and user mean.
honestyNodetail "full": the formulas' versions, how far the figures have been checked, and what the shop links are.
ignoredNoArguments that were not used, with why.
listUrlNoThe whole list on buildbatch.co.uk, as a link a person can open.
notUsedNoArguments that were sent and not used, with why.
summaryNodetail "full": the counts and the short list.
toCheckNoEach thing that depends on the person's own job, as toBuy's items, with its question.
documentNo"plan-summary" for the short answer; the planner's own name for detail "full" or a refusal.
problemsNoWhen ok is false: each argument that is missing or not understood, with the id of its question in ask_questions.
startUrlNoThe planner opened on this room, to change it.
statusesNodetail "full": what each line's status means.
toAnswerNoQuestions whose answers would change the list.
warningsNoWarnings that come with the list.
leftoversNoWhat will be left over once the whole packs are bought.
understoodNodetail "full": every argument as the planner read it.
assumptionsNodetail "full": what the whole list assumes.
typicalRoomNoWhen a typical room was used: its id, label and a note that these are not the person's own measurements.
startUrlNoteNoWhat the startUrl link opens.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior. The description adds important behavioral context beyond that: default 2.4 m height with disclosure in the answer, typical-room measurements flagged as typical, output as a short shopping list plus link, and specific groundwork planning behavior.

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 description is long but front-loads the core purpose and then covers limitations and defaults. Most sentences carry useful information, though the single dense paragraph could be structured more cleanly for scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With rich annotations, full schema coverage, and an output schema, the description supplies the remaining context an agent needs: scope, limitations, default assumptions, output shape, and the plan_room alternative for groundwork. Nothing critical is missing for correct invocation.

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%, so the schema already documents all eight parameters, including enums, defaults, and measurement units. The description reinforces some semantics (height default, typical rooms, job/room interaction) but adds little beyond the schema's own parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific calculation task and enumerates the resources it covers (paint, wallpaper, tiles, flooring, etc.), plus the shopping-list output. It also distinguishes itself from plan_room for groundwork cases, so an agent can identify its role without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Gives clear when-not conditions (no exact door sizes, product coverage, part-wall tiling, L-shaped rooms) and names plan_room as the alternative for groundwork material/use choices. It does not fully route every quick-vs-detailed scenario, but the main exclusions and one key alternative are explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedplan_room10 fields changed
      • changedInput schema / properties / area / description
        Previous value: -"Loft insulation, concrete, a patio and a floor (laminate, wood, vinyl planks or floor tiles) only: the floor's area in square metres, up to 900, instead of length and width. How far it is round is then not known: the formwork, the edging or the scotia beading is a check without a length, and new skirting needs the length and width."New value: +"Loft insulation, concrete, a patio, sub-base and gravel, and a floor (laminate, wood, vinyl planks or floor tiles) only: the floor's area in square metres, up to 900, instead of length and width. How far it is round is then not known: the formwork, the edging or the scotia beading is a check without a length, and new skirting needs the length and width."
      • addedInput schema / properties / groundwork
        Added value: +{
        +  "description": "Sub-base and gravel: quick, the one value (each layer at the typical depth for its use unless a depth is given, in bags counted from typical figures that name their sources). Needed for the keys below to take effect. The room is the area: its length and width, or area, no height.",
        +  "enum": [
        +    "quick"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / groundwork.bags
        Added value: +{
        +  "description": "How the Type 1 and the gravel are bought: bulk (bulk bags of about 800 kg) or bags (25 kg bags, 20 kg for decorative chippings). Unless given, each comes in bags where 20 of them or fewer cover it, and in bulk bags above that.",
        +  "type": "string"
        +}
      • addedInput schema / properties / groundwork.depth
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Depth of the gravel in millimetres, loose; optional. Without it the use's typical depth is used, said to be typical."
        +}
      • addedInput schema / properties / groundwork.gravel
        Added value: +{
        +  "description": "Which gravel: shingle (20 mm gravel or shingle, in 25 kg bags or bulk bags) or decorative (decorative chippings, in 20 kg bags or bulk bags). Default shingle.",
        +  "enum": [
        +    "shingle",
        +    "decorative"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / groundwork.material
        Added value: +{
        +  "description": "What is laid: type1 (MOT Type 1 sub-base alone), gravel (gravel alone) or both (gravel over Type 1). Default both.",
        +  "enum": [
        +    "type1",
        +    "gravel",
        +    "both"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / groundwork.subdepth
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Depth of the Type 1 in millimetres once compacted, decided for the job; optional. Without it the use's typical depth is used, said to be typical."
        +}
      • addedInput schema / properties / groundwork.use
        Added value: +{
        +  "description": "What it is for, which sets each layer's typical depth: path (Type 1 100 mm, gravel 50 mm), driveway (Type 1 150 mm, gravel 50 mm), shed (Type 1 100 mm, gravel 50 mm), border (Type 1 100 mm, gravel 50 mm). Default driveway. Typical figures from makers' and merchants' pages, not a design.",
        +  "enum": [
        +    "path",
        +    "driveway",
        +    "shed",
        +    "border"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / job / description
        Previous value: -"The job. Required. wallpaper is the paint job with papered walls and no ceiling; tiles is the paint job with tiled walls and no ceiling; both is paint and a new floor; paint-carpet is paint and carpet from a roll; skirting is skirting and architrave."New value: +"The job. Required. wallpaper is the paint job with papered walls and no ceiling; tiles is the paint job with tiled walls and no ceiling; both is paint and a new floor; paint-carpet is paint and carpet from a roll; skirting is skirting and architrave; groundwork is MOT Type 1 sub-base, gravel, or gravel over Type 1 (groundwork.material)."
      • changedInput schema / properties / job / enum
        Previous value: -[
        -  "paint",
        -  "wallpaper",
        -  "tiles",
        -  "flooring",
        -  "carpet",
        -  "loft",
        -  "both",
        -  "paint-carpet",
        -  "skirting",
        -  "plasterboard",
        -  "concrete",
        -  "patio"
        -]New value: +[
        +  "paint",
        +  "wallpaper",
        +  "tiles",
        +  "flooring",
        +  "carpet",
        +  "loft",
        +  "both",
        +  "paint-carpet",
        +  "skirting",
        +  "plasterboard",
        +  "concrete",
        +  "patio",
        +  "groundwork"
        +]
    • Changedquick_room_list3 fields changed
      • changedInput schema / properties / job / description
        Previous value: -"The job. Required. wallpaper is the paint job with papered walls and no ceiling; tiles is the paint job with tiled walls and no ceiling; both is paint and a new floor; paint-carpet is paint and carpet from a roll; skirting is skirting and architrave."New value: +"The job. Required. wallpaper is the paint job with papered walls and no ceiling; tiles is the paint job with tiled walls and no ceiling; both is paint and a new floor; paint-carpet is paint and carpet from a roll; skirting is skirting and architrave; groundwork is MOT Type 1 sub-base, gravel, or gravel over Type 1 (groundwork.material)."
      • changedInput schema / properties / job / enum
        Previous value: -[
        -  "paint",
        -  "wallpaper",
        -  "tiles",
        -  "flooring",
        -  "carpet",
        -  "loft",
        -  "both",
        -  "paint-carpet",
        -  "skirting",
        -  "plasterboard",
        -  "concrete",
        -  "patio"
        -]New value: +[
        +  "paint",
        +  "wallpaper",
        +  "tiles",
        +  "flooring",
        +  "carpet",
        +  "loft",
        +  "both",
        +  "paint-carpet",
        +  "skirting",
        +  "plasterboard",
        +  "concrete",
        +  "patio",
        +  "groundwork"
        +]
      • changedInput schema / properties / room / description
        Previous value: -"A typical room, for a person who has not measured: bedroom-small (3 m × 2.5 m), bedroom-large (4 m × 3.5 m), living-small (4 m × 3 m), living-large (5.5 m × 4 m), kitchen-small (3 m × 2 m), kitchen-large (4.5 m × 3.5 m), bathroom-small (2 m × 1.7 m), bathroom-large (2.7 m × 2.4 m), each 2.4 m high. The answer states that these are typical measurements. Not used together with length and width, and not for a loft, a slab or a patio, which are not rooms."New value: +"A typical room, for a person who has not measured: bedroom-small (3 m × 2.5 m), bedroom-large (4 m × 3.5 m), living-small (4 m × 3 m), living-large (5.5 m × 4 m), kitchen-small (3 m × 2 m), kitchen-large (4.5 m × 3.5 m), bathroom-small (2 m × 1.7 m), bathroom-large (2.7 m × 2.4 m), each 2.4 m high. The answer states that these are typical measurements. Not used together with length and width, and not for a loft, a slab, a patio or a sub-base, which are not rooms."
  2. 4 tool updates
    • Changedask_questions1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "api": {
        +      "description": "\"buildbatch-assistant\".",
        +      "type": "string"
        +    },
        +    "conditions": {
        +      "description": "How to read each question's when and requiredWhen.",
        +      "type": "string"
        +    },
        +    "document": {
        +      "description": "\"question-script\".",
        +      "type": "string"
        +    },
        +    "error": {
        +      "description": "When ok is false: why.",
        +      "type": "string"
        +    },
        +    "humanExplanation": {
        +      "description": "A page that explains it to a person.",
        +      "type": "string"
        +    },
        +    "instructions": {
        +      "description": "Its purpose, rules and what to do after the call.",
        +      "type": "object"
        +    },
        +    "ok": {
        +      "description": "false only when the call was refused.",
        +      "type": "boolean"
        +    },
        +    "plan": {
        +      "description": "How to turn the answers into a plan_room call or a /plan.json query.",
        +      "type": "object"
        +    },
        +    "productFigures": {
        +      "description": "Questions about a product's own figures (a paint's coverage, a pack's size), and the arguments each fills.",
        +      "type": "array"
        +    },
        +    "questions": {
        +      "description": "Each question in order, with its allowed answers, whether it is required and when it applies.",
        +      "items": {
        +        "properties": {
        +          "ask": {
        +            "type": "string"
        +          },
        +          "choices": {
        +            "type": "array"
        +          },
        +          "fills": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "ifUnknown": {
        +            "type": "string"
        +          },
        +          "notes": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "required": {
        +            "type": "boolean"
        +          },
        +          "type": {
        +            "type": "string"
        +          },
        +          "whenText": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "ask"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "specification": {
        +      "description": "The OpenAPI description.",
        +      "type": "string"
        +    },
        +    "title": {
        +      "description": "What the script is for.",
        +      "type": "string"
        +    },
        +    "typicalHeightMm": {
        +      "description": "The typical ceiling height, in millimetres.",
        +      "type": "number"
        +    },
        +    "typicalOpenings": {
        +      "description": "The typical door and window sizes, by name.",
        +      "type": "array"
        +    },
        +    "typicalRooms": {
        +      "description": "The typical rooms, for a person who has not measured.",
        +      "type": "array"
        +    },
        +    "v": {
        +      "description": "The version of the script's format.",
        +      "type": "number"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedfind_guide2 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "query": "How long between coats of paint?"
        +  }
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "allGuides": {
        +      "description": "The list of every guide.",
        +      "type": "string"
        +    },
        +    "api": {
        +      "description": "On a refusal of an argument: \"buildbatch-assistant\".",
        +      "type": "string"
        +    },
        +    "error": {
        +      "description": "When ok is false: why.",
        +      "type": "string"
        +    },
        +    "guides": {
        +      "description": "Up to three guides, best first.",
        +      "items": {
        +        "properties": {
        +          "answers": {
        +            "description": "The guide's own short answers, as published.",
        +            "items": {
        +              "properties": {
        +                "answer": {
        +                  "type": "string"
        +                },
        +                "question": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "question",
        +                "answer"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "summary": {
        +            "description": "What it answers.",
        +            "type": "string"
        +          },
        +          "title": {
        +            "description": "The guide's title.",
        +            "type": "string"
        +          },
        +          "url": {
        +            "description": "Its address.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "title",
        +          "url"
        +        ],
        +        "type": "object"
        +      },
        +      "maxItems": 3,
        +      "type": "array"
        +    },
        +    "note": {
        +      "description": "Whose answers they are and how far they have been checked, or that no guide matched.",
        +      "type": "string"
        +    },
        +    "ok": {
        +      "description": "true: the guides were searched (none may match). false: the query was refused.",
        +      "type": "boolean"
        +    },
        +    "query": {
        +      "description": "The question as read.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
    • Changedplan_room2 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "door": [
        +      "0.762x1.981"
        +    ],
        +    "height": "2.4",
        +    "job": "paint",
        +    "length": "4.2",
        +    "units": "m",
        +    "wallpaint": "custom",
        +    "wallpaint.coats": "2",
        +    "wallpaint.coverage": "14",
        +    "wallpaint.extra": "10",
        +    "wallpaint.tins": "2.5,5",
        +    "width": "3.6",
        +    "window": [
        +      "1.2x1.0"
        +    ]
        +  }
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "api": {
        +      "description": "Always \"buildbatch-assistant\".",
        +      "type": "string"
        +    },
        +    "ask": {
        +      "description": "When ok is false: the ids of the questions in ask_questions to ask the person, in order.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "assumed": {
        +      "description": "What was taken as not given, with the value taken (a missing height is a 2.4 m ceiling).",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "assumptions": {
        +      "description": "detail \"full\": what the whole list assumes.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "document": {
        +      "description": "\"plan-summary\" for the short answer; the planner's own name for detail \"full\" or a refusal.",
        +      "type": "string"
        +    },
        +    "error": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "properties": {
        +            "code": {
        +              "type": "string"
        +            },
        +            "message": {
        +              "type": "string"
        +            }
        +          },
        +          "type": "object"
        +        }
        +      ],
        +      "description": "When ok is false: why the call was refused, as words or as { code, message }."
        +    },
        +    "figures": {
        +      "description": "What generic, typical and user mean.",
        +      "type": "string"
        +    },
        +    "first": {
        +      "description": "What has to be in place before the job starts, as toBuy's items: not a thing to buy.",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "honesty": {
        +      "description": "detail \"full\": the formulas' versions, how far the figures have been checked, and what the shop links are.",
        +      "type": "object"
        +    },
        +    "ignored": {
        +      "description": "Arguments that were not used, with why.",
        +      "type": "array"
        +    },
        +    "leftovers": {
        +      "description": "What will be left over once the whole packs are bought.",
        +      "type": "array"
        +    },
        +    "lines": {
        +      "description": "detail \"full\": every line with its working, packs, figures and each shop's search link.",
        +      "type": "array"
        +    },
        +    "links": {
        +      "description": "What listUrl and startUrl open, in words.",
        +      "type": "object"
        +    },
        +    "listUrl": {
        +      "description": "The whole list on buildbatch.co.uk, as a link a person can open.",
        +      "type": "string"
        +    },
        +    "more": {
        +      "description": "What plan_room with detail \"full\" adds.",
        +      "type": "string"
        +    },
        +    "next": {
        +      "description": "When ok is false: what to do next.",
        +      "type": "string"
        +    },
        +    "notUsed": {
        +      "description": "Arguments that were sent and not used, with why.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "ok": {
        +      "description": "true: a list was made. false: the call was refused, and error says why.",
        +      "type": "boolean"
        +    },
        +    "prices": {
        +      "description": "That no price is shown or used in this answer.",
        +      "type": "string"
        +    },
        +    "problems": {
        +      "description": "When ok is false: each argument that is missing or not understood, with the id of its question in ask_questions.",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "review": {
        +      "description": "How far the figures have been checked: not yet by a tradesperson.",
        +      "type": "string"
        +    },
        +    "room": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "object"
        +        }
        +      ],
        +      "description": "The room as the planner understood it: a sentence (metres, as worked out), or with detail \"full\" its areas and lengths."
        +    },
        +    "shops": {
        +      "description": "detail \"full\": the shops each line's search link goes to.",
        +      "type": "array"
        +    },
        +    "startUrl": {
        +      "description": "The planner opened on this room, to change it.",
        +      "type": "string"
        +    },
        +    "startUrlNote": {
        +      "description": "What the startUrl link opens.",
        +      "type": "string"
        +    },
        +    "statuses": {
        +      "description": "detail \"full\": what each line's status means.",
        +      "type": "object"
        +    },
        +    "summary": {
        +      "description": "detail \"full\": the counts and the short list.",
        +      "type": "object"
        +    },
        +    "toAnswer": {
        +      "description": "Questions whose answers would change the list.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "toBuy": {
        +      "description": "Each thing to buy, in the order of the list.",
        +      "items": {
        +        "properties": {
        +          "checkFirst": {
        +            "description": "What to check before buying.",
        +            "type": "string"
        +          },
        +          "examplePack": {
        +            "description": "The example pack kept beside a figure sent.",
        +            "type": "boolean"
        +          },
        +          "figures": {
        +            "description": "generic, typical or user: see figures.",
        +            "type": "string"
        +          },
        +          "figuresFrom": {
        +            "description": "A typical figure's sources and the day read.",
        +            "type": "string"
        +          },
        +          "figuresNote": {
        +            "description": "Which figures are whose.",
        +            "type": "string"
        +          },
        +          "item": {
        +            "description": "What to buy.",
        +            "type": "string"
        +          },
        +          "needed": {
        +            "description": "Paint: the litres needed before rounding up to tins.",
        +            "type": "string"
        +          },
        +          "quantity": {
        +            "description": "How much to buy, in the planner's words: whole packs as sold, a part pack rounded up (\"1 × 5 L + 1 × 2.5 L\"), or an amount to order or to cover where it is not sold in packs (\"1.32 m³ to order\").",
        +            "type": "string"
        +          },
        +          "question": {
        +            "description": "A line to check: its question and answers.",
        +            "type": "object"
        +          },
        +          "why": {
        +            "description": "How it was worked out.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "item"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "toCheck": {
        +      "description": "Each thing that depends on the person's own job, as toBuy's items, with its question.",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "typicalRoom": {
        +      "description": "When a typical room was used: its id, label and a note that these are not the person's own measurements.",
        +      "type": "object"
        +    },
        +    "understood": {
        +      "description": "detail \"full\": every argument as the planner read it.",
        +      "type": "object"
        +    },
        +    "v": {
        +      "description": "The version number of the planner's link and answer format.",
        +      "type": "number"
        +    },
        +    "warnings": {
        +      "description": "Warnings that come with the list.",
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
    • Changedquick_room_list2 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "doors": 1,
        +    "height": 2.4,
        +    "job": "paint",
        +    "length": 4,
        +    "width": 3,
        +    "windows": 1
        +  },
        +  {
        +    "job": "flooring",
        +    "room": "living-small"
        +  }
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "api": {
        +      "description": "Always \"buildbatch-assistant\".",
        +      "type": "string"
        +    },
        +    "ask": {
        +      "description": "When ok is false: the ids of the questions in ask_questions to ask the person, in order.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "assumed": {
        +      "description": "What was taken as not given, with the value taken (a missing height is a 2.4 m ceiling).",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "assumptions": {
        +      "description": "detail \"full\": what the whole list assumes.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "document": {
        +      "description": "\"plan-summary\" for the short answer; the planner's own name for detail \"full\" or a refusal.",
        +      "type": "string"
        +    },
        +    "error": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "properties": {
        +            "code": {
        +              "type": "string"
        +            },
        +            "message": {
        +              "type": "string"
        +            }
        +          },
        +          "type": "object"
        +        }
        +      ],
        +      "description": "When ok is false: why the call was refused, as words or as { code, message }."
        +    },
        +    "figures": {
        +      "description": "What generic, typical and user mean.",
        +      "type": "string"
        +    },
        +    "first": {
        +      "description": "What has to be in place before the job starts, as toBuy's items: not a thing to buy.",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "honesty": {
        +      "description": "detail \"full\": the formulas' versions, how far the figures have been checked, and what the shop links are.",
        +      "type": "object"
        +    },
        +    "ignored": {
        +      "description": "Arguments that were not used, with why.",
        +      "type": "array"
        +    },
        +    "leftovers": {
        +      "description": "What will be left over once the whole packs are bought.",
        +      "type": "array"
        +    },
        +    "lines": {
        +      "description": "detail \"full\": every line with its working, packs, figures and each shop's search link.",
        +      "type": "array"
        +    },
        +    "links": {
        +      "description": "What listUrl and startUrl open, in words.",
        +      "type": "object"
        +    },
        +    "listUrl": {
        +      "description": "The whole list on buildbatch.co.uk, as a link a person can open.",
        +      "type": "string"
        +    },
        +    "more": {
        +      "description": "What plan_room with detail \"full\" adds.",
        +      "type": "string"
        +    },
        +    "next": {
        +      "description": "When ok is false: what to do next.",
        +      "type": "string"
        +    },
        +    "notUsed": {
        +      "description": "Arguments that were sent and not used, with why.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "ok": {
        +      "description": "true: a list was made. false: the call was refused, and error says why.",
        +      "type": "boolean"
        +    },
        +    "prices": {
        +      "description": "That no price is shown or used in this answer.",
        +      "type": "string"
        +    },
        +    "problems": {
        +      "description": "When ok is false: each argument that is missing or not understood, with the id of its question in ask_questions.",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "review": {
        +      "description": "How far the figures have been checked: not yet by a tradesperson.",
        +      "type": "string"
        +    },
        +    "room": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "object"
        +        }
        +      ],
        +      "description": "The room as the planner understood it: a sentence (metres, as worked out), or with detail \"full\" its areas and lengths."
        +    },
        +    "shops": {
        +      "description": "detail \"full\": the shops each line's search link goes to.",
        +      "type": "array"
        +    },
        +    "startUrl": {
        +      "description": "The planner opened on this room, to change it.",
        +      "type": "string"
        +    },
        +    "startUrlNote": {
        +      "description": "What the startUrl link opens.",
        +      "type": "string"
        +    },
        +    "statuses": {
        +      "description": "detail \"full\": what each line's status means.",
        +      "type": "object"
        +    },
        +    "summary": {
        +      "description": "detail \"full\": the counts and the short list.",
        +      "type": "object"
        +    },
        +    "toAnswer": {
        +      "description": "Questions whose answers would change the list.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "toBuy": {
        +      "description": "Each thing to buy, in the order of the list.",
        +      "items": {
        +        "properties": {
        +          "checkFirst": {
        +            "description": "What to check before buying.",
        +            "type": "string"
        +          },
        +          "examplePack": {
        +            "description": "The example pack kept beside a figure sent.",
        +            "type": "boolean"
        +          },
        +          "figures": {
        +            "description": "generic, typical or user: see figures.",
        +            "type": "string"
        +          },
        +          "figuresFrom": {
        +            "description": "A typical figure's sources and the day read.",
        +            "type": "string"
        +          },
        +          "figuresNote": {
        +            "description": "Which figures are whose.",
        +            "type": "string"
        +          },
        +          "item": {
        +            "description": "What to buy.",
        +            "type": "string"
        +          },
        +          "needed": {
        +            "description": "Paint: the litres needed before rounding up to tins.",
        +            "type": "string"
        +          },
        +          "quantity": {
        +            "description": "How much to buy, in the planner's words: whole packs as sold, a part pack rounded up (\"1 × 5 L + 1 × 2.5 L\"), or an amount to order or to cover where it is not sold in packs (\"1.32 m³ to order\").",
        +            "type": "string"
        +          },
        +          "question": {
        +            "description": "A line to check: its question and answers.",
        +            "type": "object"
        +          },
        +          "why": {
        +            "description": "How it was worked out.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "item"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "toCheck": {
        +      "description": "Each thing that depends on the person's own job, as toBuy's items, with its question.",
        +      "items": {
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "typicalRoom": {
        +      "description": "When a typical room was used: its id, label and a note that these are not the person's own measurements.",
        +      "type": "object"
        +    },
        +    "understood": {
        +      "description": "detail \"full\": every argument as the planner read it.",
        +      "type": "object"
        +    },
        +    "v": {
        +      "description": "The version number of the planner's link and answer format.",
        +      "type": "number"
        +    },
        +    "warnings": {
        +      "description": "Warnings that come with the list.",
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ok"
        +  ],
        +  "type": "object"
        +}
  3. 1 tool update
    • Changedplan_room2 fields changed
      • changedInput schema / properties / concrete.bags / description
        Previous value: -"How the sand, aggregate or ballast of a mix on site, and the sub-base, are bought: bulk (bulk bags of about 800 kg) or bags (25 kg bags). Bulk unless given; each is counted in whole bags from a typical figure that names its source."New value: +"How the sand, aggregate or ballast of a mix on site, and the sub-base, are bought: bulk (bulk bags of about 800 kg) or bags (25 kg bags). Unless given, each comes in 25 kg bags where 20 of them or fewer cover it, and in bulk bags above that; each is counted in whole bags from a typical figure that names its source."
      • changedInput schema / properties / patio.bags / description
        Previous value: -"How the sand and the sub-base are bought: bulk (bulk bags of about 800 kg) or bags (25 kg bags). Bulk unless given; each is counted in whole bags from a typical figure that names its source."New value: +"How the sand and the sub-base are bought: bulk (bulk bags of about 800 kg) or bags (25 kg bags). Unless given, each comes in 25 kg bags where 20 of them or fewer cover it, and in bulk bags above that; each is counted in whole bags from a typical figure that names its source."
  4. 2 tool updates
    • Changedplan_room1 field changed
      • changedInput schema / properties / height / description
        Previous value: -"Floor to ceiling, in the units. Needed when walls are painted, papered, tiled or boarded (paint-carpet too); not for flooring, carpet, loft insulation, concrete or skirting alone."New value: +"Floor to ceiling, in the units. Used when walls are painted, papered, tiled or boarded (paint-carpet too); if it is left out then, a 2.4 m ceiling, a typical UK height, is taken and the answer states it. Not used for flooring, carpet, loft insulation, concrete or skirting alone."
    • Changedquick_room_list1 field changed
      • changedInput schema / properties / height / description
        Previous value: -"Floor to ceiling, in the units. Needed for paint, wallpaper, wall tiles, both, paint-carpet and plasterboard. 2.4 m is a typical UK ceiling height."New value: +"Floor to ceiling, in the units. Used for paint, wallpaper, wall tiles, both, paint-carpet and plasterboard; if it is left out for those, a 2.4 m ceiling, a typical UK height, is taken and the answer states it."
  5. 1 tool update
    • Changedplan_room1 field changed
      • changedInput schema / properties / loft.pack / description
        Previous value: -"Square metres covered by one chosen roll or pack; optional for a 100, 150, 170 or 200 mm roll, whose typical coverage (the maker's, as the shops' feeds name it) is used and said so."New value: +"Square metres covered by one chosen roll or pack; optional for a 100, 150, 170 or 200 mm roll, whose typical coverage (the maker's, as the shops' own listings name it) is used and said so."
  6. 1 tool update
    • Changedplan_room1 field changed
      • addedInput schema / properties / floor.typical
        Added value: +{
        +  "description": "Since template 1.37.0: packs, when floor.packs is one of the typical laminate sizes the planner offers beside its number, so the pack stays a typical figure that names its maker. Leave it out unless the planner wrote it.",
        +  "enum": [
        +    "packs"
        +  ],
        +  "type": "string"
        +}
  7. 1 tool update
    • Changedplan_room1 field changed
      • changedInput schema / properties / walltiles.trowel / description
        Previous value: -"The notched trowel, 6 or 12 (mm). The adhesive is counted from it; 6 when left out."New value: +"The notched trowel, 6 or 12 (mm). The adhesive is counted from it; left out, by the tile's size: 6 for a tile up to 600 mm on its long side, 12 for a larger one."
  8. 1 tool update
    • Changedplan_room1 field changed
      • changedInput schema / properties / area / description
        Previous value: -"Loft insulation, concrete and a patio only: the floor's area in square metres, up to 900, instead of length and width. How far it is round is then not known: the formwork or the edging is a check without a length."New value: +"Loft insulation, concrete, a patio and a floor (laminate, wood, vinyl planks or floor tiles) only: the floor's area in square metres, up to 900, instead of length and width. How far it is round is then not known: the formwork, the edging or the scotia beading is a check without a length, and new skirting needs the length and width."
  9. 1 tool update
    • Changedplan_room11 fields changed
      • addedInput schema / properties / alcove
        Added value: +{
        +  "description": "An alcove on a wall of the rectangle, going out: width x depth @ wall. One a wall.",
        +  "type": "string"
        +}
      • addedInput schema / properties / bay
        Added value: +{
        +  "description": "A bay on a wall of the rectangle, going out: width x depth @ wall. One a wall.",
        +  "type": "string"
        +}
      • addedInput schema / properties / breast
        Added value: +{
        +  "description": "A chimney breast on a wall of the rectangle: width x depth @ wall, in the room's units; the wall is L1, W1, L2 or W2. One a wall.",
        +  "type": "string"
        +}
      • addedInput schema / properties / laystart
        Added value: +{
        +  "description": "Floor tiles, and a patio, given as length and width or a plan (not an area), straight or brick laid: where the laying starts. centre (the middle of the room), corner (whole tiles along two walls) or house (a patio only: whole slabs along the house wall). Left out, the start needing the fewest cuts and tiles is used, or the house wall for a patio against the house; the answer says which and counts that layout.",
        +  "enum": [
        +    "centre",
        +    "corner",
        +    "house"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / p
        Added value: +{
        +  "description": "Written by the planner in a sent list link: the day of the shop prices the sender's screen used (YYYY-MM-DD), so that the screen that opens it can say when the prices have moved since. Leave it out of a call.",
        +  "type": "string"
        +}
      • addedInput schema / properties / t
        Added value: +{
        +  "description": "Written by the planner in a sent list link: the Room Refresh template version the sender's screen used, so that the screen that opens it can say when the figures have moved since. Leave it out of a call.",
        +  "type": "string"
        +}
      • addedInput schema / properties / wallpaint.colour
        Added value: +{
        +  "description": "The wall paint's colour: magnolia, or colour for a colour no partner shop sells (counted in 2.5 L tins and priced only once its price is typed). Left out: white.",
        +  "type": "string"
        +}
      • addedInput schema / properties / wallpaint.finish
        Added value: +{
        +  "description": "The wall paint's finish. Left out: matt.",
        +  "type": "string"
        +}
      • addedInput schema / properties / wallpaint.name
        Added value: +{
        +  "description": "The name of a coloured wall paint (up to 60 characters), which the shops are searched for. Read with wallpaint.colour=colour only.",
        +  "type": "string"
        +}
      • addedInput schema / properties / walltiles.above
        Added value: +{
        +  "description": "yes when the wall above tiles that stop below the ceiling is painted on the same list; no, or left out, leaves it off.",
        +  "type": "string"
        +}
      • addedInput schema / properties / walltiles.fullrun
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Metres of wall tiled to the ceiling round a bath or shower, with walltiles.height for the rest (a bathroom's two heights). Left out: none."
        +}
  10. 1 tool update
    • Changedplan_room13 fields changed
      • addedInput schema / properties / colourchange
        Added value: +{
        +  "description": "Painting jobs: is the colour going much lighter or darker? yes adds one coat to the walls. Left out, two coats are counted and the wall paint's line carries the question to ask.",
        +  "enum": [
        +    "yes",
        +    "no"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / concrete.supply / description
        Previous value: -"bags: bags of dry mix; mix: cement with sand and aggregate, mixed on site; mixed: ready-mixed concrete, delivered by the cubic metre. Mind the two: \"mix\" is mixed on site, \"mixed\" arrives mixed."New value: +"bags: bags of dry mix; mix: cement with sand and aggregate, mixed on site; mixed: ready-mixed concrete, delivered by the cubic metre. Mind the two: \"mix\" is mixed on site, \"mixed\" arrives mixed. Left out, the planner follows the slab's volume (bags up to 0.25 m³, mixed on site up to 1 m³, ready-mixed above) and the answer says what each of the three ways takes."
      • addedInput schema / properties / floor.pattern
        Added value: +{
        +  "description": "How the floor is laid: straight, brick, diagonal or herringbone. A diagonal or herringbone lay takes 15% for cuts where a straight lay takes 10%, unless floor.extra gives another figure. Left out: straight.",
        +  "type": "string"
        +}
      • addedInput schema / properties / newplaster
        Added value: +{
        +  "description": "Painting jobs: is any of it new or bare plaster? yes adds a mist coat of white contract matt on its own line and leaves the sugar soap out; no is a sound painted surface. Left out, the list is a sound room's and its primer line carries the question to ask.",
        +  "enum": [
        +    "yes",
        +    "no"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / paper.match / description
        Previous value: -"How the pattern lines up."New value: +"How the pattern lines up. straight and half-drop need paper.repeat. unsure, or left out with no repeat, is counted as a straight match with a 64 cm repeat (three drops a roll at an ordinary ceiling), which keeps the rolls from running short; the line names it."
      • changedInput schema / properties / paper.match / enum
        Previous value: -[
        -  "free",
        -  "straight",
        -  "half-drop"
        -]New value: +[
        +  "free",
        +  "straight",
        +  "half-drop",
        +  "unsure"
        +]
      • addedInput schema / properties / patio.house
        Added value: +{
        +  "description": "Whether the patio is against the house along one side: yes or no. It decides how many edges the sub-base runs 150 mm past and how much edge restraint is counted. Left out, it is counted as against the house along its longest side, and the sub-base line carries the question.",
        +  "type": "string"
        +}
      • addedInput schema / properties / skirtingoff
        Added value: +{
        +  "description": "Flooring jobs: is the skirting coming off, to go back over the new floor's edge? yes leaves the scotia beading out; no counts it in 2.4 m lengths. Left out, the beading is counted and its line carries the question to ask.",
        +  "enum": [
        +    "yes",
        +    "no"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / trim.breastdepth
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "How deep a chimney breast is, in millimetres. Left out: 350, an example depth, said to be one."
        +}
      • addedInput schema / properties / trim.breasts
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "How many chimney breasts the new skirting goes round: each adds its two returns. Left out: none."
        +}
      • changedInput schema / properties / walls.length / description
        Previous value: -"Tiles or wallpaper on some walls only (a splashback, a shower's walls, a feature wall): the total length of the walls covered, in the units. It replaces the room's perimeter for the tiles' area and the paper's drops; doors and windows are then not taken off. Left out: all the walls."New value: +"Paint, tiles or wallpaper on some walls only (a splashback, a shower's walls, a feature wall): the total length of the walls covered, in the units. It replaces the room's perimeter for the paint, the tiles' area and the paper's drops; doors and windows are then not taken off. Left out: all the walls. Sent with a height and with no length, width, plan or area, it is a wall on its own: the room is not needed (walls only: no ceiling, woodwork, floor or skirting)."
      • addedInput schema / properties / walltiles.pattern
        Added value: +{
        +  "description": "How the wall tiles are laid: straight, brick, diagonal or herringbone. A diagonal or herringbone lay takes 15% for cuts where a straight lay takes 10%, unless walltiles.extra gives another figure. Left out: straight.",
        +  "type": "string"
        +}
      • addedInput schema / properties / walltiles.reveal
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "How deep the window reveals are, in millimetres, on walls tiled to the ceiling: the reveals are tiled too. Left out: 150, an example depth, said to be one. 0 leaves them out."
        +}
  11. 2 tool updates
    • Changedplan_room28 fields changed
      • changedInput schema / properties / board.extra / description
        Previous value: -"Percent to add for cuts."New value: +"Percent to add for cuts. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used."
      • changedInput schema / properties / board.layers / description
        Previous value: -"Whole layers from the complete system specification."New value: +"Whole layers from the complete system specification. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used."
      • changedInput schema / properties / board.length / description
        Previous value: -"Board length in metres."New value: +"Board length in metres. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used."
      • changedInput schema / properties / board.width / description
        Previous value: -"Board width in metres."New value: +"Board width in metres. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used."
      • changedInput schema / properties / ceiling / description
        Previous value: -"What the ceiling gets: paint, board or none."New value: +"What the ceiling gets: paint, or board on the plasterboard job, or none. Another word is named in ignored[] and the job's own choice used."
      • changedInput schema / properties / ceilingpaint.coats / description
        Previous value: -"Coats on the tin, for the ceiling paint. Custom only."New value: +"Coats on the tin, for the ceiling paint. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples."
      • changedInput schema / properties / ceilingpaint.coverage / description
        Previous value: -"Metres squared covered by one litre in one coat, from the tin, for the ceiling paint. Custom only."New value: +"Metres squared covered by one litre in one coat, from the tin, for the ceiling paint. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples."
      • changedInput schema / properties / ceilingpaint.extra / description
        Previous value: -"Percent to add for waste and touch-ups, for the ceiling paint. Custom only."New value: +"Percent to add for waste and touch-ups, for the ceiling paint. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples."
      • changedInput schema / properties / concrete.extra / description
        Previous value: -"Percent to add for an uneven base and spillage."New value: +"Percent to add for an uneven base and spillage. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples."
      • changedInput schema / properties / concrete.supply / description
        Previous value: -"Bags of dry mix, cement with sand and aggregate mixed on site (mix), or ready-mixed concrete delivered by the cubic metre."New value: +"bags: bags of dry mix; mix: cement with sand and aggregate, mixed on site; mixed: ready-mixed concrete, delivered by the cubic metre. Mind the two: \"mix\" is mixed on site, \"mixed\" arrives mixed."
      • changedInput schema / properties / concrete.thickness / description
        Previous value: -"Slab thickness in millimetres, decided for the job. BuildBatch suggests none."New value: +"Slab thickness in millimetres, decided for the job. BuildBatch suggests none. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples."
      • changedInput schema / properties / concrete.weight / description
        Previous value: -"The weight of one bag in kilograms. Bags only."New value: +"The weight of one bag in kilograms. Bags only. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples."
      • changedInput schema / properties / concrete.yield / description
        Previous value: -"Cubic metres one bag makes, as printed on the bag. Bags only."New value: +"Cubic metres one bag makes, as printed on the bag. Bags only. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples."
      • changedInput schema / properties / floor.extra / description
        Previous value: -"Percent to add for cuts. Custom only."New value: +"Percent to add for cuts. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples."
      • changedInput schema / properties / floor.packs / description
        Previous value: -"Metres squared in one pack or box, comma separated for several sizes. A size may carry a price after \"@\": the price is accepted and ignored."New value: +"Metres squared in one pack or box, comma separated for several sizes. A size may carry a price after \"@\": the price is accepted and ignored. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples."
      • changedInput schema / properties / lengths.architrave / description
        Previous value: -"Length the architrave is sold in, in metres."New value: +"Length the architrave is sold in, in metres. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used."
      • changedInput schema / properties / lengths.skirting / description
        Previous value: -"Length the skirting is sold in, in metres."New value: +"Length the skirting is sold in, in metres. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used."
      • changedInput schema / properties / paper.length / description
        Previous value: -"Roll length in metres."New value: +"Roll length in metres. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used."
      • changedInput schema / properties / paper.width / description
        Previous value: -"Roll width in centimetres."New value: +"Roll width in centimetres. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used."
      • changedInput schema / properties / trim / description
        Previous value: -"New skirting, architrave or both, with any job. Default skirting for the skirting job, else none."New value: +"New skirting, architrave or both (skirting,architrave), with any job in a room; a loft floor, a slab and a patio take none. Default skirting for the skirting job, else none."
      • changedInput schema / properties / wallpaint.coats / description
        Previous value: -"Coats on the tin, for the wall paint. Custom only."New value: +"Coats on the tin, for the wall paint. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples."
      • changedInput schema / properties / wallpaint.coverage / description
        Previous value: -"Metres squared covered by one litre in one coat, from the tin, for the wall paint. Custom only."New value: +"Metres squared covered by one litre in one coat, from the tin, for the wall paint. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples."
      • changedInput schema / properties / wallpaint.extra / description
        Previous value: -"Percent to add for waste and touch-ups, for the wall paint. Custom only."New value: +"Percent to add for waste and touch-ups, for the wall paint. With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples."
      • changedInput schema / properties / walltiles.box / description
        Previous value: -"Metres squared in one box. Custom only."New value: +"Metres squared in one box. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used."
      • changedInput schema / properties / walltiles.extra / description
        Previous value: -"Percent to add for cuts."New value: +"Percent to add for cuts. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used."
      • changedInput schema / properties / woodpaint.coats / description
        Previous value: -"Coats on the tin, for the woodwork paint (with woodwork=paint). Custom only."New value: +"Coats on the tin, for the woodwork paint (with woodwork=paint). With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples."
      • changedInput schema / properties / woodpaint.coverage / description
        Previous value: -"Metres squared covered by one litre in one coat, from the tin, for the woodwork paint (with woodwork=paint). Custom only."New value: +"Metres squared covered by one litre in one coat, from the tin, for the woodwork paint (with woodwork=paint). With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples."
      • changedInput schema / properties / woodpaint.extra / description
        Previous value: -"Percent to add for waste and touch-ups, for the woodwork paint (with woodwork=paint). Custom only."New value: +"Percent to add for waste and touch-ups, for the woodwork paint (with woodwork=paint). With quick, a figure sent here is used and labelled as the person's; the ones not sent stay the labelled examples."
    • Changedquick_room_list3 fields changed
      • changedInput schema / properties / height / description
        Previous value: -"Floor to ceiling, in the units. Needed for paint, wallpaper and wall tiles. 2.4 m is a typical UK ceiling height."New value: +"Floor to ceiling, in the units. Needed for paint, wallpaper, wall tiles, both, paint-carpet and plasterboard. 2.4 m is a typical UK ceiling height."
      • changedInput schema / properties / room / description
        Previous value: -"A typical room, for a person who has not measured: bedroom-small (3 m × 2.5 m), bedroom-large (4 m × 3.5 m), living-small (4 m × 3 m), living-large (5.5 m × 4 m), kitchen-small (3 m × 2 m), kitchen-large (4.5 m × 3.5 m), bathroom-small (2 m × 1.7 m), bathroom-large (2.7 m × 2.4 m), each 2.4 m high. The answer states that these are typical measurements. Not used together with length and width."New value: +"A typical room, for a person who has not measured: bedroom-small (3 m × 2.5 m), bedroom-large (4 m × 3.5 m), living-small (4 m × 3 m), living-large (5.5 m × 4 m), kitchen-small (3 m × 2 m), kitchen-large (4.5 m × 3.5 m), bathroom-small (2 m × 1.7 m), bathroom-large (2.7 m × 2.4 m), each 2.4 m high. The answer states that these are typical measurements. Not used together with length and width, and not for a loft, a slab or a patio, which are not rooms."
      • changedInput schema / properties / units / description
        Previous value: -"What the measurements are in. Metres if left out."New value: +"What the measurements are in: m, cm, mm or ft (feet). Metres if left out."
  12. 1 tool update
    • Changedplan_room1 field changed
      • addedInput schema / properties / woodsurface
        Added value: +{
        +  "description": "With woodwork=paint: what the woodwork is like now. Default sound (painted before and sound). bare adds a check line for knotting, primer and undercoat; flaking adds the note about old paint.",
        +  "enum": [
        +    "sound",
        +    "bare",
        +    "flaking"
        +  ],
        +  "type": "string"
        +}
  13. 2 tool updates
    • Changedplan_room6 fields changed
      • changedInput schema / properties / area / description
        Previous value: -"Loft insulation, concrete and a patio only: the floor's area in square metres, instead of length and width. How far it is round is then not known: the formwork or the edging is a check without a length."New value: +"Loft insulation, concrete and a patio only: the floor's area in square metres, up to 900, instead of length and width. How far it is round is then not known: the formwork or the edging is a check without a length."
      • changedInput schema / properties / carpet.width / description
        Previous value: -"The fixed width of the carpet roll in metres."New value: +"The fixed width of the carpet roll in metres. Left out with carpet=quick: the standard width (4 or 5 m; 2, 3 or 4 m for sheet vinyl) that needs least roll for the room, said so on the list."
      • changedInput schema / properties / floor.trowel / description
        Previous value: -"Floor tiles: the notched trowel, 6 or 12 (mm). The adhesive is counted from it; 12 when left out."New value: +"Floor tiles: the notched trowel, 6 or 12 (mm). The adhesive is counted from it; left out, the one the adhesive maker's sheet gives for the tile's size (6 up to 300 mm on its long side, 12 above)."
      • changedInput schema / properties / job / description
        Previous value: -"The job. Required. wallpaper is the paint job with papered walls and no ceiling; tiles is the paint job with tiled walls and no ceiling; both is paint and a new floor; paint-carpet is paint and one unjoined piece of carpet; skirting is skirting and architrave."New value: +"The job. Required. wallpaper is the paint job with papered walls and no ceiling; tiles is the paint job with tiled walls and no ceiling; both is paint and a new floor; paint-carpet is paint and carpet from a roll; skirting is skirting and architrave."
      • addedInput schema / properties / walls.length
        Added value: +{
        +  "description": "Tiles or wallpaper on some walls only (a splashback, a shower's walls, a feature wall): the total length of the walls covered, in the units. It replaces the room's perimeter for the tiles' area and the paper's drops; doors and windows are then not taken off. Left out: all the walls.",
        +  "type": "string"
        +}
      • changedInput schema / properties / woodwork / description
        Previous value: -"Paint jobs only: paint when the woodwork is painted too (this room's doors, their architraves, the windows' frames and the skirting, counted from the doors and windows given and the room's perimeter, in satinwood at a typical coverage). Left out: not painted."New value: +"Paint jobs only: paint when the woodwork is painted too (this room's doors, their architraves, the windows' frames and the skirting, counted from the doors and windows given and the room's perimeter, in satinwood at a typical coverage). With walls=none and ceiling=none, the woodwork on its own. Left out: not painted."
    • Changedquick_room_list1 field changed
      • changedInput schema / properties / job / description
        Previous value: -"The job. Required. wallpaper is the paint job with papered walls and no ceiling; tiles is the paint job with tiled walls and no ceiling; both is paint and a new floor; paint-carpet is paint and one unjoined piece of carpet; skirting is skirting and architrave."New value: +"The job. Required. wallpaper is the paint job with papered walls and no ceiling; tiles is the paint job with tiled walls and no ceiling; both is paint and a new floor; paint-carpet is paint and carpet from a roll; skirting is skirting and architrave."
  14. 1 tool update
    • Changedplan_room17 fields changed
      • addedInput schema / properties / area
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Loft insulation, concrete and a patio only: the floor's area in square metres, instead of length and width. How far it is round is then not known: the formwork or the edging is a check without a length."
        +}
      • addedInput schema / properties / floor.adhesivebag
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Floor tiles: the weight of one bag of adhesive in kilograms; 20 when left out."
        +}
      • addedInput schema / properties / floor.depth
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Floor tiles: the tile's thickness in millimetres, for the grout. Left out, a typical 10 mm is used and said so."
        +}
      • addedInput schema / properties / floor.groutbag
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Floor tiles: the weight of one bag of grout in kilograms; 5 when left out."
        +}
      • addedInput schema / properties / floor.joint
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Floor tiles: the joint width in millimetres. With the tile size, the grout is counted by the makers' rule; left out, a typical 3 mm joint is used and said so."
        +}
      • addedInput schema / properties / floor.trowel
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Floor tiles: the notched trowel, 6 or 12 (mm). The adhesive is counted from it; 12 when left out."
        +}
      • addedInput schema / properties / walltiles.adhesivebag
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "The weight of one bag of adhesive in kilograms; 20 when left out."
        +}
      • addedInput schema / properties / walltiles.depth
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "The wall tile's thickness in millimetres, for the grout. Left out, a typical 8 mm is used and said so."
        +}
      • addedInput schema / properties / walltiles.groutbag
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "The weight of one bag of grout in kilograms; 5 when left out."
        +}
      • addedInput schema / properties / walltiles.joint
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "The joint width in millimetres. With the tile size, the grout is counted by the makers' rule; left out, a typical 2 mm joint is used and said so."
        +}
      • addedInput schema / properties / walltiles.trowel
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "The notched trowel, 6 or 12 (mm). The adhesive is counted from it; 6 when left out."
        +}
      • addedInput schema / properties / woodpaint
        Added value: +{
        +  "description": "Whether the woodwork paint (with woodwork=paint) uses the labelled example figures (quick) or figures read off the tin (custom). Needed for the keys below to take effect.",
        +  "enum": [
        +    "quick",
        +    "custom"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / woodpaint.coats
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Coats on the tin, for the woodwork paint (with woodwork=paint). Custom only."
        +}
      • addedInput schema / properties / woodpaint.coverage
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Metres squared covered by one litre in one coat, from the tin, for the woodwork paint (with woodwork=paint). Custom only."
        +}
      • addedInput schema / properties / woodpaint.extra
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Percent to add for waste and touch-ups, for the woodwork paint (with woodwork=paint). Custom only."
        +}
      • addedInput schema / properties / woodpaint.tins
        Added value: +{
        +  "description": "Tin sizes in litres, comma separated, for the woodwork paint (with woodwork=paint). A size may carry a price after \"@\": the price is accepted and ignored.",
        +  "type": "string"
        +}
      • addedInput schema / properties / woodwork
        Added value: +{
        +  "description": "Paint jobs only: paint when the woodwork is painted too (this room's doors, their architraves, the windows' frames and the skirting, counted from the doors and windows given and the room's perimeter, in satinwood at a typical coverage). Left out: not painted.",
        +  "enum": [
        +    "paint",
        +    "none"
        +  ],
        +  "type": "string"
        +}
  15. 1 tool update
    • Changedplan_room7 fields changed
      • addedInput schema / properties / concrete.bags
        Added value: +{
        +  "description": "How the sand, aggregate or ballast of a mix on site, and the sub-base, are bought: bulk (bulk bags of about 800 kg) or bags (25 kg bags). Bulk unless given; each is counted in whole bags from a typical figure that names its source.",
        +  "type": "string"
        +}
      • removedInput schema / properties / concrete.subdensity
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "string"
        -    }
        -  ],
        -  "description": "The sub-base material's density in tonnes a cubic metre, as the supplier gives it. With concrete.subdepth; optional. BuildBatch assumes none."
        -}
      • changedInput schema / properties / concrete.subdepth / description
        Previous value: -"Depth of the sub-base under the slab in millimetres, decided for the job. With concrete.subdensity, the sub-base is counted in tonnes; optional."New value: +"Depth of the sub-base under the slab in millimetres, decided for the job; optional. With it, the sub-base is counted in bulk bags or 25 kg bags from a typical figure that names its source."
      • addedInput schema / properties / loft.over
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Thickness in millimetres of a second roll laid across the joists over one layer of the first; optional. With it, the first roll is one layer between the joists and the rest is this roll."
        +}
      • addedInput schema / properties / loft.overpack
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Square metres one roll of the second insulation covers; optional for a 100, 150, 170 or 200 mm roll."
        +}
      • changedInput schema / properties / loft.pack / description
        Previous value: -"Square metres covered by one chosen roll or pack."New value: +"Square metres covered by one chosen roll or pack; optional for a 100, 150, 170 or 200 mm roll, whose typical coverage (the maker's, as the shops' feeds name it) is used and said so."
      • addedInput schema / properties / patio.covers
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Square metres one pack covers, from the pack, for a project pack of mixed sizes; optional, and it beats patio.pack. With it, whole packs are counted by area."
        +}
  16. 1 tool update
    • Changedplan_room6 fields changed
      • changedInput schema / properties / patio.bag / description
        Previous value: -"What one bag of cement fills in litres, from the bag or the shop; optional. With it, the cement is counted in bags."New value: +"What one bag of cement fills in litres, from the bag; optional. Without it the bags are counted from a typical 17 L a 25 kg bag, said to be typical."
      • addedInput schema / properties / patio.bags
        Added value: +{
        +  "description": "How the sand and the sub-base are bought: bulk (bulk bags of about 800 kg) or bags (25 kg bags). Bulk unless given; each is counted in whole bags from a typical figure that names its source.",
        +  "type": "string"
        +}
      • changedInput schema / properties / patio.jointing / description
        Previous value: -"Square metres one pail of jointing compound covers at your joint, from the pail; optional. With it, pails are counted."New value: +"Square metres one pail of jointing compound covers at your joint, from the pail; optional. Without it the pails are counted from a typical 7 m² a pail, said to be typical."
      • changedInput schema / properties / patio.primer / description
        Previous value: -"Square metres one tub of slurry primer covers, from the tub; optional. With it, tubs are counted."New value: +"Square metres one tub of slurry primer covers, from the tub; optional. Without it the tubs are counted from a typical 12 m² a tub, said to be typical."
      • removedInput schema / properties / patio.subdensity
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "string"
        -    }
        -  ],
        -  "description": "The sub-base material's density in tonnes a cubic metre, as the supplier gives it. With patio.subdepth; optional. BuildBatch assumes none."
        -}
      • changedInput schema / properties / patio.subdepth / description
        Previous value: -"Depth of the sub-base under the patio in millimetres, decided for the job. With patio.subdensity, the sub-base is counted in tonnes; optional."New value: +"Depth of the sub-base under the patio in millimetres, decided for the job; optional. Without it the makers' usual minimum of 100 mm is used, said to be typical."
  17. 2 tool updates
    • Changedplan_room15 fields changed
      • changedInput schema / properties / job / enum
        Previous value: -[
        -  "paint",
        -  "wallpaper",
        -  "tiles",
        -  "flooring",
        -  "carpet",
        -  "loft",
        -  "both",
        -  "paint-carpet",
        -  "skirting",
        -  "plasterboard",
        -  "concrete"
        -]New value: +[
        +  "paint",
        +  "wallpaper",
        +  "tiles",
        +  "flooring",
        +  "carpet",
        +  "loft",
        +  "both",
        +  "paint-carpet",
        +  "skirting",
        +  "plasterboard",
        +  "concrete",
        +  "patio"
        +]
      • addedInput schema / properties / patio
        Added value: +{
        +  "description": "Whether the patio uses labelled example figures (quick: a 600 × 600 mm slab, the makers' 10 mm joint, 10% for cuts, a 30 mm bed at 1 : 4) or figures entered from the slab and the guides (custom). Needed for the keys below to take effect. The room is the patio: its length and width, no height.",
        +  "enum": [
        +    "quick",
        +    "custom"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / patio.bag
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "What one bag of cement fills in litres, from the bag or the shop; optional. With it, the cement is counted in bags."
        +}
      • addedInput schema / properties / patio.bed
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Depth of the full mortar bed in millimetres, before tamping. The makers' guides give 30 to 40 mm."
        +}
      • addedInput schema / properties / patio.cement
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Parts of cement in the bed, by volume."
        +}
      • addedInput schema / properties / patio.extra
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Percent to add for cuts."
        +}
      • addedInput schema / properties / patio.joint
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Joint width in millimetres. The makers' guides give 10 mm as the minimum."
        +}
      • addedInput schema / properties / patio.jointing
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Square metres one pail of jointing compound covers at your joint, from the pail; optional. With it, pails are counted."
        +}
      • addedInput schema / properties / patio.length
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "The other side of a slab in millimetres."
        +}
      • addedInput schema / properties / patio.pack
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "How many slabs a pack holds, a whole number; optional. With it, whole packs are counted."
        +}
      • addedInput schema / properties / patio.primer
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Square metres one tub of slurry primer covers, from the tub; optional. With it, tubs are counted."
        +}
      • addedInput schema / properties / patio.sand
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Parts of sharp sand in the bed, by volume. The guides give 3 or 4 to 1 of cement."
        +}
      • addedInput schema / properties / patio.subdensity
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "The sub-base material's density in tonnes a cubic metre, as the supplier gives it. With patio.subdepth; optional. BuildBatch assumes none."
        +}
      • addedInput schema / properties / patio.subdepth
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Depth of the sub-base under the patio in millimetres, decided for the job. With patio.subdensity, the sub-base is counted in tonnes; optional."
        +}
      • addedInput schema / properties / patio.width
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "One side of a slab in millimetres."
        +}
    • Changedquick_room_list1 field changed
      • changedInput schema / properties / job / enum
        Previous value: -[
        -  "paint",
        -  "wallpaper",
        -  "tiles",
        -  "flooring",
        -  "carpet",
        -  "loft",
        -  "both",
        -  "paint-carpet",
        -  "skirting",
        -  "plasterboard",
        -  "concrete"
        -]New value: +[
        +  "paint",
        +  "wallpaper",
        +  "tiles",
        +  "flooring",
        +  "carpet",
        +  "loft",
        +  "both",
        +  "paint-carpet",
        +  "skirting",
        +  "plasterboard",
        +  "concrete",
        +  "patio"
        +]
  18. 1 tool update
    • Changedplan_room2 fields changed
      • addedInput schema / properties / concrete.subdensity
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "The sub-base material's density in tonnes a cubic metre, as the supplier gives it. With concrete.subdepth; optional. BuildBatch assumes none."
        +}
      • addedInput schema / properties / concrete.subdepth
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "number"
        +    },
        +    {
        +      "type": "string"
        +    }
        +  ],
        +  "description": "Depth of the sub-base under the slab in millimetres, decided for the job. With concrete.subdensity, the sub-base is counted in tonnes; optional."
        +}
  19. 1 tool update
    • Changedplan_room4 fields changed
      • addedInput schema / properties / concrete.aggregate
        Added value: +{
        +  "description": "Whether the aggregate is bought as all-in ballast or as sharp sand and coarse aggregate. Mixed on site only.",
        +  "enum": [
        +    "ballast",
        +    "separate"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / concrete.mix
        Added value: +{
        +  "description": "Which of the maker's published mixes the cement, sand and aggregate follow: general purpose, paving or foundation. Mixed on site only.",
        +  "enum": [
        +    "general",
        +    "paving",
        +    "foundation"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / concrete.supply / description
        Previous value: -"Bags of dry mix, or ready-mixed concrete delivered by the cubic metre."New value: +"Bags of dry mix, cement with sand and aggregate mixed on site (mix), or ready-mixed concrete delivered by the cubic metre."
      • changedInput schema / properties / concrete.supply / enum
        Previous value: -[
        -  "bags",
        -  "mixed"
        -]New value: +[
        +  "bags",
        +  "mix",
        +  "mixed"
        +]
  20. 1 tool update
    • Changedplan_room16 fields changed
      • removedInput schema / properties / bath / items / description
        Removed value: -"A bath or shower tray: a name (bath-1700, tray-900) or its length along the wall x its rim height x how far it comes into the room, in the units. The wall behind it comes off up to the rim, and its footprint off a floor being laid. The key may be repeated."
      • removedInput schema / properties / ceilingpaint.examples
        Removed value: -{
        -  "description": "Which of coats, coverage, extra and tins are still the labelled example figures. Leave it out unless the planner wrote it.",
        -  "type": "string"
        -}
      • addedInput schema / properties / detail
        Added value: +{
        +  "description": "How much to return. summary, the default: each item with its quantity and reason, what to check first and the list link. full: every line's working, pack breakdown and each shop's search link as well (20 KB or more).",
        +  "enum": [
        +    "summary",
        +    "full"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / door / items / description
        Removed value: -"One per door, the value repeated for more. A typical size by name (int-762 is a standard internal door) or width x height in the units. *2 after it means two the same."
      • removedInput schema / properties / end
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "string"
        -    }
        -  ],
        -  "description": "Written by the planner as the last pair of a list link: the number of pairs before it. Leave it out of a call."
        -}
      • removedInput schema / properties / floor.examples
        Removed value: -{
        -  "description": "Which of extra and packs are still the labelled example figures. Leave it out unless the planner wrote it.",
        -  "type": "string"
        -}
      • removedInput schema / properties / floor.underlay.price
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "string"
        -    }
        -  ],
        -  "description": "Accepted and ignored: this interface uses no prices."
        -}
      • removedInput schema / properties / lengths.architrave.price
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "string"
        -    }
        -  ],
        -  "description": "Accepted and ignored: this interface uses no prices."
        -}
      • removedInput schema / properties / lengths.skirting.price
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "string"
        -    }
        -  ],
        -  "description": "Accepted and ignored: this interface uses no prices."
        -}
      • removedInput schema / properties / opening / items / description
        Removed value: -"Any other opening to take off the walls (a garage door, an archway), as width x height or a name. The key may be repeated."
      • removedInput schema / properties / paper.price
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "string"
        -    }
        -  ],
        -  "description": "Accepted and ignored: this interface uses no prices."
        -}
      • removedInput schema / properties / v
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "string"
        -    }
        -  ],
        -  "description": "The version of the format. 1. Left out, 1 is assumed and the answer says so.",
        -  "enum": [
        -    "1"
        -  ]
        -}
      • removedInput schema / properties / wallpaint.examples
        Removed value: -{
        -  "description": "Which of coats, coverage, extra and tins are still the labelled example figures. Leave it out unless the planner wrote it.",
        -  "type": "string"
        -}
      • removedInput schema / properties / walltiles.price
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "string"
        -    }
        -  ],
        -  "description": "Accepted and ignored: this interface uses no prices."
        -}
      • changedInput schema / properties / window / description
        Previous value: -"One per window, the key repeated for more. A typical size by name or width x height in the units. Add *2 for two the same."New value: +"One per window, the value repeated for more. A typical size by name (win-standard) or width x height in the units. *2 after it means two the same."
      • removedInput schema / properties / window / items / description
        Removed value: -"One per window, the key repeated for more. A typical size by name or width x height in the units. Add *2 for two the same."

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables querying thousands of UK paint colours, finding visually equivalent alternatives across brands, planning room projects, and exploring market trends.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides a deterministic soft furnishing budget catalog and calculation tool for estimating soft decoration costs by style, rooms, and tier with zero external API dependencies.
    -
  • A
    license
    A
    quality
    A
    maintenance
    Search 170 free home renovation tools in English and Polish (material and cost calculators, contract templates, room planners, contractor directories, DIY apps) with public user ratings. No API key needed.
    3
    68 npm
    11
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources