Master upholsterer's reference book and trade calculators: fabric, leather, foam, buttoning, costs.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Ask a practical upholstery question and get an answer grounded strictly in the text of The Working Upholsterer’s Bible by Shaun Greenwood (master upholsterer, AMUSF accredited) — traditional and modern techniques, materials, UK fire regulations, projects and pricing. Answers cite the source chapter URL on learntoupholster.com.
The upholstery question, in plain English (max 300 characters).
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http upholsterers-bible https://learntoupholster.com/mcp
Ask a practical upholstery question and get an answer grounded strictly in the text of The Working Upholsterer’s Bible by Shaun Greenwood (master upholsterer, AMUSF accredited) — traditional and modern techniques, materials, UK fire regulations, projects and pricing. Answers cite the source chapter URL on learntoupholster.com.
| Argument | Type | Description |
|---|---|---|
| question* | string | The upholstery question, in plain English (max 300 characters). |
{
"type": "object",
"required": [
"question"
],
"properties": {
"question": {
"type": "string",
"description": "The upholstery question, in plain English (max 300 characters)."
}
}
}Work out a deep-buttoned diamond layout: how many buttons, the marking grid on the base, the wider grid on the fabric, and the cut size of the cover. The fabric grid is always larger than the base grid because fabric has to travel down into each button pull — get that wrong and the panel is ruined. Use for buttoned headboards, Chesterfields, ottomans and buttoned chair backs.
| Argument | Type | Description |
|---|---|---|
| depth | string | Button depth, which sets the fabric fullness. shallow 13 mm, medium 19 mm, deep 32 mm per diamond each way. Default medium. |
| turn_cm | number | Turnings to wrap the frame. Default 5 cm. |
| border_cm | number | Plain unbuttoned border around the diamonds. Default 0. |
| area_width_cm* | number | Width of the area to be buttoned, excluding any plain border. |
| area_height_cm* | number | Height of the area to be buttoned. |
| diamond_width_cm* | number | Roughly how wide you want each diamond. Gets adjusted to fit the area evenly. |
| diamond_height_cm* | number | Roughly how tall you want each diamond. |
| fullness_width_mm | number | Only with depth "custom". |
| fullness_height_mm | number | Only with depth "custom". |
{
"type": "object",
"required": [
"area_width_cm",
"area_height_cm",
"diamond_width_cm",
"diamond_height_cm"
],
"properties": {
"depth": {
"enum": [
"shallow",
"medium",
"deep",
"custom"
],
"type": "string",
"description": "Button depth, which sets the fabric fullness. shallow 13 mm, medium 19 mm, deep 32 mm per diamond each way. Default medium."
},
"turn_cm": {
"type": "number",
"description": "Turnings to wrap the frame. Default 5 cm."
},
"border_cm": {
"type": "number",
"description": "Plain unbuttoned border around the diamonds. Default 0."
},
"area_width_cm": {
"type": "number",
"description": "Width of the area to be buttoned, excluding any plain border."
},
"area_height_cm": {
"type": "number",
"description": "Height of the area to be buttoned."
},
"diamond_width_cm": {
"type": "number",
"description": "Roughly how wide you want each diamond. Gets adjusted to fit the area evenly."
},
"diamond_height_cm": {
"type": "number",
"description": "Roughly how tall you want each diamond."
},
"fullness_width_mm": {
"type": "number",
"description": "Only with depth \"custom\"."
},
"fullness_height_mm": {
"type": "number",
"description": "Only with depth \"custom\"."
}
}
}Work out how much fabric a reupholstery job needs, in metres and yards. Use this whenever someone asks how much fabric, cloth or material to buy for a chair, sofa, stool, headboard or cushion. Two ways to call it: give a piece name for a rule-of-thumb figure, or give a list of panels with their measurements for a proper cut-list estimate. Handles non-standard fabric widths and pattern repeats. Returns a buy-this-much figure rounded up to the half metre, because cloth is cut in practical lengths.
| Argument | Type | Description |
|---|---|---|
| piece | string | Furniture type, e.g. "wing-back armchair", "3-seat sofa", "drop-in dining seat", "footstool". Options: drop-in dining seat, stuffover dining chair, carver dining armchair, bedroom slipper chair, nursing chair, tub chair, club armchair, wing-back armchair, recliner armchair, loveseat, 2-seat sofa, 3-seat sofa, 4-seat sofa, corner sofa, chaise longue, dressing-table stool, footstool, window seat cushion, large ottoman, headboard single, headboard double, headboard king, deep-buttoned headboard double |
| panels | array | Optional. Measured panels for an accurate estimate. Overrides "piece" if given. |
| fabric_width_cm | number | Roll width. Default 137 cm, the usual UK upholstery width. American 54-inch cloth is the same thing. |
| seam_allowance_cm | number | Turnings added to every edge of every panel in measured mode. Default 5 cm. |
| pattern_repeat_allowance | number |
Convert an upholstery job into hides of leather. Leather is sold by the hide in square feet, not by the metre, and hides are an irregular shape with unusable belly and edges, so the conversion is not obvious. Use whenever someone asks how much leather, or how many hides, a chair or sofa needs. Accounts for the finish (aniline leathers cut less economically because every mark shows) and for deep buttoning. Returns square feet, square metres, and hides both as halves and as whole hides.
| Argument | Type | Description |
|---|---|---|
| piece | string | Furniture type. Options: drop-in dining seat, dining chair seat and back, occasional chair, club armchair, wing-back armchair, recliner armchair, 2-seat sofa, 3-seat sofa, 4-seat sofa, footstool, ottoman, headboard double, boxed seat cushion |
| finish | string | Default pigmented / corrected grain. |
| fabric_metres | number | Alternative to "piece": the metres of 137 cm fabric the job would take. |
| deep_buttoning | boolean | Adds 30%. |
| hide_size_sqft | number | Average hide size. Default 50 sq ft. |
{
"type": "object",
"properties": {
"piece": {
"type": "string",
"description": "Furniture type. Options: drop-in dining seat, dining chair seat and back, occasional chair, club armchair, wing-back armchair, recliner armchair, 2-seat sofa, 3-seat sofa, 4-seat sofa, footstool, ottoman, headboard double, boxed seat cushion"
},
"finish": {
"enum": [
"pigmented",
"semi-aniline",
"aniline"
],
"type": "string",
"description": "Default pigmented / corrected grain."
},
"fabric_metres": {
"type": "number",
"description": "Alternative to \"piece\": the metres of 137 cm fabric the job would take."
},
"deep_buttoning": {
"type": "boolean",
"description": "Adds 30%."
},
"hide_size_sqft": {
"type": "number",
"description": "Average hide size. Default 50 sq ft."
}
}
}Work out what the UK fire regulations require for a specific upholstery job. Covers two separate regimes that people mix up: the Furniture and Furnishings (Fire) (Safety) Regulations 1988 as amended, which govern domestic furniture supplied in the course of business, and BS 7176, which sets hazard categories for contract and public seating. Use for any question about whether a fabric can be used, whether a job is exempt, what CMHR foam is, what crib 5 means, pre-1950 antiques, caravans, holiday lets, or what paperwork to keep. Gives informational guidance, not legal advice.
| Argument | Type | Description |
|---|---|---|
| item | string | Domestic regime. What kind of item. |
| made | string | Domestic regime. When the piece was made. |
| regime | string | domestic = the 1988 Regulations (homes, lettings, caravans, resale). contract = BS 7176 hazard categories (hotels, pubs, care homes, hospitals). Default domestic. |
| sleeping | boolean | Contract regime. Are the premises also used for sleeping? |
| situation | string | Domestic regime. "hobby" means working on your own furniture for your own home. |
| environment | string | Contract regime. low = offices, schools, museums. medium = hotels, pubs, restaurants, care homes, hospitals. high = offshore, some hospital wards. very-high = secure psychiatric, prison cells. |
Estimate what reupholstering a piece of furniture costs, broken into labour, fabric, sundries and contingency, with a bench-hours figure. Use this for "how much does it cost to reupholster X", "is it worth reupholstering", and for comparing a professional job against doing it yourself. Distinguishes a modern re-cover (strip to the frame and rebuild in foam and modern materials) from a traditional rebuild (webbing, springs, hair, stitched edges), which is typically two to three times the hours. Returns a range, not a single number, because no two chairs are the same underneath.
| Argument | Type | Description |
|---|---|---|
| build | string | Modern re-cover or traditional rebuild. Default modern where available. |
| piece* | string | Furniture type. Options: drop-in dining seat, stuffover dining chair, carver dining armchair, bedroom slipper chair, tub chair, club armchair, wing-back armchair, recliner armchair, loveseat, 2-seat sofa, 3-seat sofa, 4-seat sofa, chaise longue, chesterfield sofa, footstool, window seat cushion, large ottoman, headboard double |
| currency | string | Default GBP. |
| hourly_rate | number | Workshop labour rate. Default 80 (GBP), a typical UK trade rate in 2026. |
| frame_repair | boolean | Loose joints, broken rails, re-gluing. |
| deep_buttoning | boolean |
Search the Learn to Upholster Business Hub: practical guidance on making a living from upholstery, as opposed to how to do the work. Covers what to charge and how to build an hourly rate, whether to charge for estimates, quoting and hidden damage, customer-supplied fabric, explaining price to customers, finding first customers, declining work, and uncollected furniture. Use for any question about pricing, quoting, profitability, customers, or running an upholstery workshop as a business. Returns the canonical short answer for each match plus the URL of the full article. Written by a working AMUSF-accredited upholsterer.
| Argument | Type | Description |
|---|---|---|
| topic | string | What the question is about, e.g. "hourly rate", "customer supplied fabric", "turning down work", "not making money". |
| list_all | boolean | Return every article in the Business Hub instead of searching. Useful for seeing what is covered. |
{
"type": "object",
"properties": {
"topic": {
"type": "string",
"description": "What the question is about, e.g. \"hourly rate\", \"customer supplied fabric\", \"turning down work\", \"not making money\"."
},
"list_all": {
"type": "boolean",
"description": "Return every article in the Business Hub instead of searching. Useful for seeing what is covered."
}
}
}Give the right foam specification for a job: density in kg/m3, hardness in newtons, depth in mm, foam type, wadding wrap, and the UK fire requirement. Use whenever someone asks what foam to buy, how thick, how firm, or why their cushions went flat. Density and hardness are different things and people constantly confuse them: density is how long it lasts, hardness is how it feels. This tool keeps them apart.
| Argument | Type | Description |
|---|---|---|
| depth_cm | number | Optional. Cushion front-to-back measurement. |
| width_cm | number | Optional. Cushion width, for a cut size. |
| application* | string | What the foam is for. Options: sofa seat, sofa back, dining seat, headboard, bench, footstool, mattress, outdoor, contract seat |
| thickness_mm | number | Optional. Override the recommended thickness. |
{
"type": "object",
"required": [
"application"
],
"properties": {
"depth_cm": {
"type": "number",
"description": "Optional. Cushion front-to-back measurement."
},
"width_cm": {
"type": "number",
"description": "Optional. Cushion width, for a cut size."
},
"application": {
"type": "string",
"description": "What the foam is for. Options: sofa seat, sofa back, dining seat, headboard, bench, footstool, mattress, outdoor, contract seat"
},
"thickness_mm": {
"type": "number",
"description": "Optional. Override the recommended thickness."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 15, 2026.
| Multiplier for matching a pattern. 1 = plain cloth (default). Trade allowances: 1.10 for a repeat up to 20 cm, 1.15 for 20-40 cm, 1.25 for 40-70 cm. |
{
"type": "object",
"properties": {
"piece": {
"type": "string",
"description": "Furniture type, e.g. \"wing-back armchair\", \"3-seat sofa\", \"drop-in dining seat\", \"footstool\". Options: drop-in dining seat, stuffover dining chair, carver dining armchair, bedroom slipper chair, nursing chair, tub chair, club armchair, wing-back armchair, recliner armchair, loveseat, 2-seat sofa, 3-seat sofa, 4-seat sofa, corner sofa, chaise longue, dressing-table stool, footstool, window seat cushion, large ottoman, headboard single, headboard double, headboard king, deep-buttoned headboard double"
},
"panels": {
"type": "array",
"items": {
"type": "object",
"required": [
"width_cm",
"height_cm"
],
"properties": {
"name": {
"type": "string",
"description": "e.g. \"Inside back\", \"Seat\", \"Outside arm\""
},
"quantity": {
"type": "integer",
"description": "How many of this panel. Default 1."
},
"width_cm": {
"type": "number"
},
"height_cm": {
"type": "number"
}
}
},
"description": "Optional. Measured panels for an accurate estimate. Overrides \"piece\" if given."
},
"fabric_width_cm": {
"type": "number",
"description": "Roll width. Default 137 cm, the usual UK upholstery width. American 54-inch cloth is the same thing."
},
"seam_allowance_cm": {
"type": "number",
"description": "Turnings added to every edge of every panel in measured mode. Default 5 cm."
},
"pattern_repeat_allowance": {
"type": "number",
"description": "Multiplier for matching a pattern. 1 = plain cloth (default). Trade allowances: 1.10 for a repeat up to 20 cm, 1.15 for 20-40 cm, 1.25 for 40-70 cm."
}
}
}| cover_evidence | string | What fire evidence you have for the cover fabric. composite = certificated with the actual filling. alone = fabric-only certificate. vinyl = contract vinyl or FR leather. unknown = no provenance. |
{
"type": "object",
"properties": {
"item": {
"enum": [
"seating",
"mattress",
"garden",
"baby",
"other"
],
"type": "string",
"description": "Domestic regime. What kind of item."
},
"made": {
"enum": [
"pre-1950",
"post-1950",
"unknown"
],
"type": "string",
"description": "Domestic regime. When the piece was made."
},
"regime": {
"enum": [
"domestic",
"contract"
],
"type": "string",
"description": "domestic = the 1988 Regulations (homes, lettings, caravans, resale). contract = BS 7176 hazard categories (hotels, pubs, care homes, hospitals). Default domestic."
},
"sleeping": {
"type": "boolean",
"description": "Contract regime. Are the premises also used for sleeping?"
},
"situation": {
"enum": [
"recover",
"new",
"secondhand",
"letting",
"caravan",
"hobby"
],
"type": "string",
"description": "Domestic regime. \"hobby\" means working on your own furniture for your own home."
},
"environment": {
"enum": [
"low",
"medium",
"high",
"very-high",
"unknown"
],
"type": "string",
"description": "Contract regime. low = offices, schools, museums. medium = hotels, pubs, restaurants, care homes, hospitals. high = offshore, some hospital wards. very-high = secure psychiatric, prison cells."
},
"cover_evidence": {
"enum": [
"composite",
"alone",
"vinyl",
"unknown"
],
"type": "string",
"description": "What fire evidence you have for the cover fabric. composite = certificated with the actual filling. alone = fabric-only certificate. vinyl = contract vinyl or FR leather. unknown = no provenance."
}
}
}| Adds 25% to hours and material for buttoning, where the piece allows it. |
| fabric_price_per_metre | number | Cost of the chosen cloth per metre. Use 0 if the customer supplies their own fabric. |
{
"type": "object",
"required": [
"piece"
],
"properties": {
"build": {
"enum": [
"modern",
"traditional"
],
"type": "string",
"description": "Modern re-cover or traditional rebuild. Default modern where available."
},
"piece": {
"type": "string",
"description": "Furniture type. Options: drop-in dining seat, stuffover dining chair, carver dining armchair, bedroom slipper chair, tub chair, club armchair, wing-back armchair, recliner armchair, loveseat, 2-seat sofa, 3-seat sofa, 4-seat sofa, chaise longue, chesterfield sofa, footstool, window seat cushion, large ottoman, headboard double"
},
"currency": {
"enum": [
"GBP",
"USD",
"EUR",
"AUD",
"CAD",
"NZD"
],
"type": "string",
"description": "Default GBP."
},
"hourly_rate": {
"type": "number",
"description": "Workshop labour rate. Default 80 (GBP), a typical UK trade rate in 2026."
},
"frame_repair": {
"type": "boolean",
"description": "Loose joints, broken rails, re-gluing."
},
"deep_buttoning": {
"type": "boolean",
"description": "Adds 25% to hours and material for buttoning, where the piece allows it."
},
"fabric_price_per_metre": {
"type": "number",
"description": "Cost of the chosen cloth per metre. Use 0 if the customer supplies their own fabric."
}
}
}