BuildBatch
Server Details
UK DIY shopping lists for one room: paint, wallpaper, tiles, flooring and more, in real packs.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 4 tools
plan_room and quick_room_list both produce room shopping lists, but their descriptions clearly draw the boundary (full option set vs. simplified/typical-room estimation), and ask_questions/find_guide are clearly distinct. Only the two planning tools could plausibly be confused, and the descriptions disambiguate them well.
All four tools follow a consistent snake_case verb_noun pattern (ask_questions, find_guide, plan_room, quick_room_list). No mixing of conventions or vague single-word names.
Four tools is a lean but reasonable surface for a room-planning/quantity domain, with each tool covering a distinct capability (questions, guides, full plan, quick plan). Slightly thin, but nothing feels padded or missing at the count level.
The set covers discovery (guides, question script) and both detailed and quick planning with shopping lists and shop links, so core workflows are reachable. Gaps are minor—e.g. no explicit tool for price lookup or retrieving prior plans—but these are acknowledged in the descriptions.
Available Tools
4 toolsask_questionsQuestions for a BuildBatch room planARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuinely useful context the annotations do not: the payload is a static ~24 KB script and it takes no arguments. It stops short of 5 by not saying anything about the return format or how the script should be consumed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero padding, with the identity and content of the returned script front-loaded. 'Takes no arguments' mildly duplicates the empty schema, a small redundancy that keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return value and does so adequately: an ordered question list with allowed answers, required flags, and conditional applicability, plus a size hint. Format details (JSON structure, how to interpret conditionals) are the only notable omission for an otherwise simple, argument-free reader.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. The description confirms 'Takes no arguments', which is consistent with the empty schema and prevents an agent from hunting for optional inputs, but adds no further semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it returns BuildBatch's full ordered question script for a room plan, and even enumerates what the script contains (questions, allowed answers, required flags, applicability conditions). That is far more than a restatement of the name. It does not explicitly contrast itself with siblings like quick_room_list or plan_room, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a detailed room plan' implies the context in which this script is needed, which faintly distinguishes it from the lightweight quick_room_list sibling, but there is no explicit when-to-use, when-not-to-use, or named alternative. Usage must be inferred.
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 guideARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The question, in plain words. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower; the description still adds real behavioral context by disclosing the result cap ('up to three') and the shape of what comes back (each guide's own short answers and its address).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence carrying purpose, examples and return shape, followed by one short negative-scope sentence. No filler, and the core purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only lookup with no output schema, the description supplies enough: scope, admission criteria for queries, result count and content. Minor gaps remain, such as behavior when no guides match or how to broaden a failing query.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description goes beyond the schema's terse 'The question, in plain words' by showing the kinds of natural-language questions the query parameter accepts, which helps the agent phrase input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (finds) and resource (BuildBatch's guides), scoped to decorating/flooring questions, and illustrates with concrete question types. It also stakes out a clear boundary ('does not work out quantities for a room') that separates it from plan_room.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The concrete example questions ('how long between coats', 'how many tiles in a square metre') tell the agent exactly when this tool applies, and the closing sentence gives an explicit when-not boundary. It stops short of naming the alternative tool that should handle quantity work.
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)Read-onlyIdempotentInspect
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. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| job | Yes | 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. | |
| area | No | 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. | |
| bath | No | 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. | |
| door | No | 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. | |
| have | No | Line ids, comma separated, to mark Already have before the list is made. The ids are in the answer's lines. Rarely needed. | |
| loft | No | Whether 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. | |
| name | No | What the room is called. Optional. It is carried into the links the answer gives, where the person can also add it themselves. | |
| need | No | Line ids, comma separated, to mark Need before the list is made. The ids are in the answer's lines. Rarely needed. | |
| plan | No | A 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. | |
| trim | No | 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. | |
| board | No | Whether the plasterboard uses labelled example figures (quick) or figures from the board and system specification (custom). Needed for the keys below to take effect. | |
| check | No | Line ids, comma separated, to mark Check first before the list is made. The ids are in the answer's lines. Rarely needed. | |
| floor | No | Whether the flooring uses the labelled example figures (quick) or figures read off the pack (custom). Needed for the keys below to take effect. | |
| paper | No | Whether the wallpaper is the labelled example roll (quick) or read off the label (custom). Needed for the keys below to take effect. | |
| patio | No | 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. | |
| units | No | What length, width, height and the doors are measured in. Default m. In ft write 13ft9in, or 13 for whole feet. | |
| walls | No | What the walls get. The job sets it, so it is rarely needed: paint, wallpaper, tiles, board or none. | |
| width | No | The other side of the floor, in the units. Not needed when plan is given. | |
| carpet | No | Whether 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. | |
| detail | No | 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). | |
| ground | No | Whether the floor is on the ground floor. Default unsure. Used by flooring jobs. | |
| height | No | 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. | |
| length | No | One side of the floor, in the units. A length may carry its own unit (360cm, 4200mm). Not needed when plan is given. | |
| window | No | 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. | |
| ceiling | No | 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. | |
| fitting | No | How the floor is fitted. Default unsure. Used by flooring jobs. | |
| lengths | No | Whether 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. | |
| opening | No | 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. | |
| surface | No | What the painted surfaces are like now. Default sound, the planner's own default. Used by painting jobs. | |
| concrete | No | Whether 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. | |
| subfloor | No | What is under a new floor. Default unsure. Used by flooring jobs. | |
| woodwork | No | 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. | |
| loft.over | No | 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. | |
| loft.pack | No | 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. | |
| patio.bag | No | 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. | |
| patio.bed | No | Depth of the full mortar bed in millimetres, before tamping. The makers' guides give 30 to 40 mm. | |
| wallpaint | No | Whether the wall paint uses the labelled example figures (quick) or figures read off the tin (custom). Needed for the keys below to take effect. | |
| walltiles | No | Whether the wall tiles are the labelled example box (quick) or read off the box (custom). Needed for the keys below to take effect. | |
| woodpaint | No | 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. | |
| board.skim | No | Metres squared one bag of finish plaster covers, from the bag. | |
| loft.depth | No | Thickness of one new mineral-wool layer in millimetres, from the chosen roll. | |
| loft.extra | No | Percent to add for cuts and fitting. | |
| newplaster | No | 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. | |
| not-needed | No | Line ids, comma separated, to mark Not needed before the list is made. The ids are in the answer's lines. Rarely needed. | |
| patio.bags | No | 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. | |
| patio.pack | No | How many slabs a pack holds, a whole number; optional. With it, whole packs are counted. | |
| patio.sand | No | Parts of sharp sand in the bed, by volume. The guides give 3 or 4 to 1 of cement. | |
| board.extra | No | 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. | |
| board.width | No | Board width in metres. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used. | |
| carpet.step | No | The step in metres in which the shop sells the cut length. | |
| floor.depth | No | Floor tiles: the tile's thickness in millimetres, for the grout. Left out, a typical 10 mm is used and said so. | |
| floor.extra | No | 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. | |
| floor.grout | No | Floor tiles: metres squared one bag of grout covers. | |
| floor.joint | No | 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. | |
| floor.packs | No | 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. | |
| floor.tileh | No | Floor tiles: the other side of a tile, in millimetres (with floor.tilew). | |
| floor.tilew | No | Floor 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.target | No | Chosen target insulation depth in millimetres. | |
| paper.match | No | 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. | |
| paper.paste | No | Rolls one packet of paste does. | |
| paper.width | No | Roll width in centimetres. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used. | |
| patio.extra | No | Percent to add for cuts. | |
| patio.house | No | 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. | |
| patio.joint | No | Joint width in millimetres. The makers' guides give 10 mm as the minimum. | |
| patio.width | No | One side of a slab in millimetres. | |
| skirtingoff | No | 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. | |
| woodsurface | No | 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. | |
| board.finish | No | How the boards will be finished. | |
| board.fixing | No | How the boards will be fixed. | |
| board.layers | No | 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. | |
| board.length | No | Board length in metres. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used. | |
| carpet.width | No | 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. | |
| ceilingpaint | No | Whether the ceiling paint uses the labelled example figures (quick) or figures read off the tin (custom). Needed for the keys below to take effect. | |
| colourchange | No | 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. | |
| concrete.mix | No | Which of the maker's published mixes the cement, sand and aggregate follow: general purpose, paving or foundation. Mixed on site only. | |
| floor.trowel | No | 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). | |
| paper.length | No | Roll length in metres. Custom only: with quick the example is used, and a figure sent here is named in ignored[] as not used. | |
| paper.repeat | No | Pattern repeat in centimetres. 0 or left out for none. | |
| patio.cement | No | Parts of cement in the bed, by volume. | |
| patio.covers | No | 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. | |
| patio.length | No | The other side of a slab in millimetres. | |
| patio.primer | No | 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. | |
| trim.breasts | No | How many chimney breasts the new skirting goes round: each adds its two returns. Left out: none. | |
| walls.length | No | 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). | |
| concrete.bags | No | 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. | |
| concrete.step | No | The step in cubic metres the supplier sells ready-mixed concrete in. Ready-mixed only; optional. | |
| floor.pattern | No | 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. | |
| loft.existing | No | Existing insulation depth in millimetres. | |
| loft.overpack | No | Square metres one roll of the second insulation covers; optional for a 100, 150, 170 or 200 mm roll. | |
| walltiles.box | No | 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. | |
| board.adhesive | No | Wall boards one bag of plasterboard adhesive fixes, from its instructions. | |
| concrete.extra | No | 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. | |
| concrete.yield | No | 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. | |
| floor.adhesive | No | Floor tiles: metres squared one bag of adhesive covers. | |
| floor.covering | No | What the floor is. Default laminate. | |
| floor.groutbag | No | Floor tiles: the weight of one bag of grout in kilograms; 5 when left out. | |
| floor.underlay | No | Whether underlay is needed. | |
| patio.jointing | No | 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. | |
| patio.subdepth | No | 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. | |
| wallpaint.tins | No | Tin sizes in litres, comma separated, for the wall paint. A size may carry a price after "@": the price is accepted and ignored. | |
| woodpaint.tins | No | 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. | |
| carpet.covering | No | What 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.underlay | No | Metres squared covered by one chosen underlay roll or pack. | |
| concrete.supply | No | 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. | |
| concrete.weight | No | 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. | |
| wallpaint.coats | No | 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. | |
| wallpaint.extra | No | 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. | |
| walltiles.depth | No | The wall tile's thickness in millimetres, for the grout. Left out, a typical 8 mm is used and said so. | |
| walltiles.extra | No | 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. | |
| walltiles.grout | No | Metres squared one bag of grout covers. | |
| walltiles.joint | No | 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. | |
| walltiles.tileh | No | The other side of a wall tile, in millimetres (with walltiles.tilew). | |
| walltiles.tilew | No | One side of a wall tile, in millimetres, for a count of tiles (with walltiles.tileh). Optional; the boxes are still counted by area. | |
| woodpaint.coats | No | 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. | |
| woodpaint.extra | No | 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. | |
| carpet.allowance | No | The trimming allowance in metres, added once to each room measurement. | |
| carpet.direction | No | Which way the pile or pattern must run. Not decided lets the planner show the smaller one-piece cut that fits. | |
| lengths.skirting | No | 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. | |
| trim.breastdepth | No | How deep a chimney breast is, in millimetres. Left out: 350, an example depth, said to be one. | |
| walltiles.height | No | Metres up the wall the tiles go. Left out: to the ceiling. | |
| walltiles.reveal | No | 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. | |
| walltiles.trowel | No | The notched trowel, 6 or 12 (mm). The adhesive is counted from it; 6 when left out. | |
| ceilingpaint.tins | No | Tin sizes in litres, comma separated, for the ceiling paint. A size may carry a price after "@": the price is accepted and ignored. | |
| concrete.subdepth | No | 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. | |
| floor.adhesivebag | No | Floor tiles: the weight of one bag of adhesive in kilograms; 20 when left out. | |
| walltiles.pattern | No | 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. | |
| ceilingpaint.coats | No | 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. | |
| ceilingpaint.extra | No | 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. | |
| concrete.aggregate | No | Whether the aggregate is bought as all-in ballast or as sharp sand and coarse aggregate. Mixed on site only. | |
| concrete.thickness | No | 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. | |
| lengths.architrave | No | 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. | |
| wallpaint.coverage | No | 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. | |
| walltiles.adhesive | No | Metres squared one bag of adhesive covers. | |
| walltiles.groutbag | No | The weight of one bag of grout in kilograms; 5 when left out. | |
| woodpaint.coverage | No | 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. | |
| floor.underlay.roll | No | Metres squared in one roll of underlay. | |
| ceilingpaint.coverage | No | 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. | |
| walltiles.adhesivebag | No | The weight of one bag of adhesive in kilograms; 20 when left out. |
quick_room_listWhat to buy for a room (quick)Read-onlyIdempotentInspect
Works out how much paint, wallpaper, wall tiles, flooring, carpet, skirting, loft insulation, plasterboard, concrete or patio paving one room 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. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| job | Yes | 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. | |
| room | No | 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. | |
| doors | No | How many doors. Each is taken off the wall area at a typical size. | |
| units | No | What the measurements are in: m, cm, mm or ft (feet). Metres if left out. | |
| width | No | The room's width, in the units. | |
| height | No | 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. | |
| length | No | The room's length, in the units. | |
| windows | No | How many windows. Each is taken off the wall area at a typical size. |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
- Changed
plan_room28 fields changed- changed
Input schema / properties / board.extra / descriptionPrevious 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." - changed
Input schema / properties / board.layers / descriptionPrevious 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." - changed
Input schema / properties / board.length / descriptionPrevious 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." - changed
Input schema / properties / board.width / descriptionPrevious 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." - changed
Input schema / properties / ceiling / descriptionPrevious 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." - changed
Input schema / properties / ceilingpaint.coats / descriptionPrevious 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." - changed
Input schema / properties / ceilingpaint.coverage / descriptionPrevious 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." - changed
Input schema / properties / ceilingpaint.extra / descriptionPrevious 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." - changed
Input schema / properties / concrete.extra / descriptionPrevious 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." - changed
Input schema / properties / concrete.supply / descriptionPrevious 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." - changed
Input schema / properties / concrete.thickness / descriptionPrevious 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." - changed
Input schema / properties / concrete.weight / descriptionPrevious 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." - changed
Input schema / properties / concrete.yield / descriptionPrevious 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." - changed
Input schema / properties / floor.extra / descriptionPrevious 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." - changed
Input schema / properties / floor.packs / descriptionPrevious 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." - changed
Input schema / properties / lengths.architrave / descriptionPrevious 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." - changed
Input schema / properties / lengths.skirting / descriptionPrevious 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." - changed
Input schema / properties / paper.length / descriptionPrevious 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." - changed
Input schema / properties / paper.width / descriptionPrevious 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." - changed
Input schema / properties / trim / descriptionPrevious 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." - changed
Input schema / properties / wallpaint.coats / descriptionPrevious 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." - changed
Input schema / properties / wallpaint.coverage / descriptionPrevious 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." - changed
Input schema / properties / wallpaint.extra / descriptionPrevious 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." - changed
Input schema / properties / walltiles.box / descriptionPrevious 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." - changed
Input schema / properties / walltiles.extra / descriptionPrevious 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." - changed
Input schema / properties / woodpaint.coats / descriptionPrevious 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." - changed
Input schema / properties / woodpaint.coverage / descriptionPrevious 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." - changed
Input schema / properties / woodpaint.extra / descriptionPrevious 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."
- Changed
quick_room_list3 fields changed- changed
Input schema / properties / height / descriptionPrevious 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." - changed
Input schema / properties / room / descriptionPrevious 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." - changed
Input schema / properties / units / descriptionPrevious 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."
1 tool update
- Changed
plan_room1 field changed- added
Input schema / properties / woodsurfaceAdded 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" +}
2 tool updates
- Changed
plan_room6 fields changed- changed
Input schema / properties / area / descriptionPrevious 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." - changed
Input schema / properties / carpet.width / descriptionPrevious 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." - changed
Input schema / properties / floor.trowel / descriptionPrevious 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)." - changed
Input schema / properties / job / descriptionPrevious 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." - added
Input schema / properties / walls.lengthAdded 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" +} - changed
Input schema / properties / woodwork / descriptionPrevious 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."
- Changed
quick_room_list1 field changed- changed
Input schema / properties / job / descriptionPrevious 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."
1 tool update
- Changed
plan_room17 fields changed- added
Input schema / properties / areaAdded 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." +} - added
Input schema / properties / floor.adhesivebagAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Floor tiles: the weight of one bag of adhesive in kilograms; 20 when left out." +} - added
Input schema / properties / floor.depthAdded 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." +} - added
Input schema / properties / floor.groutbagAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Floor tiles: the weight of one bag of grout in kilograms; 5 when left out." +} - added
Input schema / properties / floor.jointAdded 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." +} - added
Input schema / properties / floor.trowelAdded 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." +} - added
Input schema / properties / walltiles.adhesivebagAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The weight of one bag of adhesive in kilograms; 20 when left out." +} - added
Input schema / properties / walltiles.depthAdded 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." +} - added
Input schema / properties / walltiles.groutbagAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The weight of one bag of grout in kilograms; 5 when left out." +} - added
Input schema / properties / walltiles.jointAdded 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." +} - added
Input schema / properties / walltiles.trowelAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The notched trowel, 6 or 12 (mm). The adhesive is counted from it; 6 when left out." +} - added
Input schema / properties / woodpaintAdded 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" +} - added
Input schema / properties / woodpaint.coatsAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Coats on the tin, for the woodwork paint (with woodwork=paint). Custom only." +} - added
Input schema / properties / woodpaint.coverageAdded 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." +} - added
Input schema / properties / woodpaint.extraAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Percent to add for waste and touch-ups, for the woodwork paint (with woodwork=paint). Custom only." +} - added
Input schema / properties / woodpaint.tinsAdded 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" +} - added
Input schema / properties / woodworkAdded 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" +}
1 tool update
- Changed
plan_room7 fields changed- added
Input schema / properties / concrete.bagsAdded 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" +} - removed
Input schema / properties / concrete.subdensityRemoved 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." -} - changed
Input schema / properties / concrete.subdepth / descriptionPrevious 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." - added
Input schema / properties / loft.overAdded 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." +} - added
Input schema / properties / loft.overpackAdded 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." +} - changed
Input schema / properties / loft.pack / descriptionPrevious 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." - added
Input schema / properties / patio.coversAdded 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." +}
1 tool update
- Changed
plan_room6 fields changed- changed
Input schema / properties / patio.bag / descriptionPrevious 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." - added
Input schema / properties / patio.bagsAdded 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" +} - changed
Input schema / properties / patio.jointing / descriptionPrevious 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." - changed
Input schema / properties / patio.primer / descriptionPrevious 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." - removed
Input schema / properties / patio.subdensityRemoved 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." -} - changed
Input schema / properties / patio.subdepth / descriptionPrevious 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."
2 tool updates
- Changed
plan_room15 fields changed- changed
Input schema / properties / job / enumPrevious 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" +] - added
Input schema / properties / patioAdded 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" +} - added
Input schema / properties / patio.bagAdded 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." +} - added
Input schema / properties / patio.bedAdded 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." +} - added
Input schema / properties / patio.cementAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Parts of cement in the bed, by volume." +} - added
Input schema / properties / patio.extraAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Percent to add for cuts." +} - added
Input schema / properties / patio.jointAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Joint width in millimetres. The makers' guides give 10 mm as the minimum." +} - added
Input schema / properties / patio.jointingAdded 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." +} - added
Input schema / properties / patio.lengthAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The other side of a slab in millimetres." +} - added
Input schema / properties / patio.packAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "How many slabs a pack holds, a whole number; optional. With it, whole packs are counted." +} - added
Input schema / properties / patio.primerAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Square metres one tub of slurry primer covers, from the tub; optional. With it, tubs are counted." +} - added
Input schema / properties / patio.sandAdded 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." +} - added
Input schema / properties / patio.subdensityAdded 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." +} - added
Input schema / properties / patio.subdepthAdded 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." +} - added
Input schema / properties / patio.widthAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "One side of a slab in millimetres." +}
- Changed
quick_room_list1 field changed- changed
Input schema / properties / job / enumPrevious 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" +]
1 tool update
- Changed
plan_room2 fields changed- added
Input schema / properties / concrete.subdensityAdded 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." +} - added
Input schema / properties / concrete.subdepthAdded 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." +}
1 tool update
- Changed
plan_room4 fields changed- added
Input schema / properties / concrete.aggregateAdded 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" +} - added
Input schema / properties / concrete.mixAdded 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" +} - changed
Input schema / properties / concrete.supply / descriptionPrevious 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." - changed
Input schema / properties / concrete.supply / enumPrevious value: -[ - "bags", - "mixed" -]New value: +[ + "bags", + "mix", + "mixed" +]
1 tool update
- Changed
plan_room16 fields changed- removed
Input schema / properties / bath / items / descriptionRemoved 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." - removed
Input schema / properties / ceilingpaint.examplesRemoved 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" -} - added
Input schema / properties / detailAdded 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" +} - removed
Input schema / properties / door / items / descriptionRemoved 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." - removed
Input schema / properties / endRemoved 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." -} - removed
Input schema / properties / floor.examplesRemoved value: -{ - "description": "Which of extra and packs are still the labelled example figures. Leave it out unless the planner wrote it.", - "type": "string" -} - removed
Input schema / properties / floor.underlay.priceRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ], - "description": "Accepted and ignored: this interface uses no prices." -} - removed
Input schema / properties / lengths.architrave.priceRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ], - "description": "Accepted and ignored: this interface uses no prices." -} - removed
Input schema / properties / lengths.skirting.priceRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ], - "description": "Accepted and ignored: this interface uses no prices." -} - removed
Input schema / properties / opening / items / descriptionRemoved 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." - removed
Input schema / properties / paper.priceRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ], - "description": "Accepted and ignored: this interface uses no prices." -} - removed
Input schema / properties / vRemoved 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" - ] -} - removed
Input schema / properties / wallpaint.examplesRemoved 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" -} - removed
Input schema / properties / walltiles.priceRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "string" - } - ], - "description": "Accepted and ignored: this interface uses no prices." -} - changed
Input schema / properties / window / descriptionPrevious 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." - removed
Input schema / properties / window / items / descriptionRemoved 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."
2 tool updates
- Changed
plan_room3 fields changed- changed
Input schema / properties / door / descriptionPrevious value: -"One per door, the key repeated for more. A typical size by name (the names are in /ask.json) or width x height in the units. Add *2 for two the same."New 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." - changed
Input schema / properties / door / items / descriptionPrevious value: -"One per door, the key repeated for more. A typical size by name (the names are in /ask.json) or width x height in the units. Add *2 for two the same."New 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." - changed
Input schema / properties / name / descriptionPrevious value: -"What the room is called. Do not send one: it is carried into the links the answer gives, and the person can add it there."New value: +"What the room is called. Optional. It is carried into the links the answer gives, where the person can also add it themselves."
- Changed
quick_room_list4 fields changed- changed
Input schema / properties / doors / descriptionPrevious value: -"How many doors. Each is taken off the wall area at a typical size; plan_room takes exact sizes."New value: +"How many doors. Each is taken off the wall area at a typical size." - changed
Input schema / properties / height / descriptionPrevious value: -"Floor to ceiling, in the units. Paint, wallpaper and wall tiles need it; ask the person, and if they do not know, 2.4 m is typical (say so)."New value: +"Floor to ceiling, in the units. Needed for paint, wallpaper and wall tiles. 2.4 m is a typical UK ceiling height." - changed
Input schema / properties / room / descriptionPrevious 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. Say to the person that it is typical, not their room. Leave out when length and width are given."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." - changed
Input schema / properties / windows / descriptionPrevious value: -"How many windows. Each is taken off the wall area at a typical size; plan_room takes exact sizes."New value: +"How many windows. Each is taken off the wall area at a typical size."
2 tool updates
- Added
find_guide - Added
quick_room_list
1 tool update
- Changed
plan_room1 field changed- added
Input schema / properties / carpet.coveringAdded value: +{ + "description": "What 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.", + "enum": [ + "carpet", + "vinyl" + ], + "type": "string" +}
1 tool update
- Changed
plan_room9 fields changed- added
Input schema / properties / concreteAdded value: +{ + "description": "Whether 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.", + "enum": [ + "quick", + "custom" + ], + "type": "string" +} - added
Input schema / properties / concrete.extraAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Percent to add for an uneven base and spillage." +} - added
Input schema / properties / concrete.stepAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The step in cubic metres the supplier sells ready-mixed concrete in. Ready-mixed only; optional." +} - added
Input schema / properties / concrete.supplyAdded value: +{ + "description": "Bags of dry mix, or ready-mixed concrete delivered by the cubic metre.", + "enum": [ + "bags", + "mixed" + ], + "type": "string" +} - added
Input schema / properties / concrete.thicknessAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Slab thickness in millimetres, decided for the job. BuildBatch suggests none." +} - added
Input schema / properties / concrete.weightAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The weight of one bag in kilograms. Bags only." +} - added
Input schema / properties / concrete.yieldAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Cubic metres one bag makes, as printed on the bag. Bags only." +} - changed
Input schema / properties / height / descriptionPrevious 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 or skirting alone."New 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." - changed
Input schema / properties / job / enumPrevious value: -[ - "paint", - "wallpaper", - "tiles", - "flooring", - "carpet", - "loft", - "both", - "paint-carpet", - "skirting", - "plasterboard" -]New value: +[ + "paint", + "wallpaper", + "tiles", + "flooring", + "carpet", + "loft", + "both", + "paint-carpet", + "skirting", + "plasterboard", + "concrete" +]
1 tool update
- Changed
plan_room5 fields changed- added
Input schema / properties / bathAdded value: +{ + "description": "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.", + "items": { + "description": "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.", + "type": "string" + }, + "maxItems": 50, + "type": "array" +} - added
Input schema / properties / floor.tilehAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Floor tiles: the other side of a tile, in millimetres (with floor.tilew)." +} - added
Input schema / properties / floor.tilewAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Floor tiles: one side of a tile, in millimetres, for a count of tiles (with floor.tileh). Optional; the boxes are still counted by area." +} - added
Input schema / properties / walltiles.tilehAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "The other side of a wall tile, in millimetres (with walltiles.tilew)." +} - added
Input schema / properties / walltiles.tilewAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "One side of a wall tile, in millimetres, for a count of tiles (with walltiles.tileh). Optional; the boxes are still counted by area." +}
2 tool updates
- First observed
ask_questions - First observed
plan_room
Related MCP Connectors
Every UK paint colour, matched across brands by ΔE and priced; palettes, planner projects, trends.
Plans flooring, trim and wallpaper orders from computed cut layouts. Free, read-only, no account.
41Browse and book local tradespeople in the UK.
Compare products, prices and current offers across UK retailers to find the best deal.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables querying thousands of UK paint colours, finding visually equivalent alternatives across brands, planning room projects, and exploring market trends.-
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to perform renovation tasks such as calculating tile quantities and listing common tile sizes.-
- FlicenseNot gradedqualityCmaintenanceProvides a deterministic soft furnishing budget catalog and calculation tool for estimating soft decoration costs by style, rooms, and tier with zero external API dependencies.-
- AlicenseAqualityAmaintenanceOpen-source home design and floor plan editor for AI agents: draw walls and rooms, place furniture, doors and windows, build kitchens and wardrobes, check lighting, ergonomics, electrical and plumbing against building codes, and render the plan, 3D views or photorealistic images. Runs in the desktop app, the browser or the hosted server, and every change can be undone.5712Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.