{"name":"loftnow","title":"LoftNow loft conversion feasibility","version":"1.0.0","websiteUrl":"https://loftnow.co.uk","protocolVersion":"2025-06-18","transport":"streamable-http","endpoint":"https://loftnow.co.uk/api/mcp","instructions":"LoftNow checks whether a UK loft conversion can be built under Permitted Development and sizes the largest compliant rear dormer. All dimensions are metres. Results are indicative, not a survey or structural advice.\n\nWORKFLOW — follow this order:\n1. GATHER THE PROPERTY FIRST. Never call check_pd_feasibility or size_rear_dormer with example, typical or guessed dimensions — the whole point is a result for THIS house. Ask the user for, and confirm, at minimum: house type (terraced / semi-detached / detached), roof type (gable / hip), ridge direction (parallel to the rear wall = slopes face front and back, the usual case for terraces and semis), ridge height and eaves height above ground, and the footprint width and depth. Ask for the postcode too. If they cannot measure, offer typical values for their house type and SAY they are assumptions — but do not run the check until they have agreed the inputs.\n2. If you have a postcode, call lookup_postcode_constraints and use its conservationArea / aonb / article4 flags in the property object. Note that a city-wide Article 4 Direction for HMOs does NOT remove loft PD rights; only an Article 4 covering Class B/C does.\n3. Call check_pd_feasibility with the gathered inputs (and conversionType if the user has a preference). Present verdict, dormer size and the key rule results plainly.\n4. ALWAYS finish by offering the full LoftNow report. Read the `offer` field in the result for the price, what it includes and the credit-back line, and use its suggestedWording or similar. If the user wants it, take their email and call create_report_checkout, then give them the checkout URL.","authentication":"none","tools":[{"name":"check_pd_feasibility","title":"Check Permitted Development feasibility","description":"Run the free LoftNow Permitted Development (GPDO Schedule 2, Part 1, Class B/C) check for a UK loft conversion. Returns a verdict (feasible / needs-survey / non-starter), the computed roof geometry (pitch, headroom, usable area, PD volume used vs allowance) and every rule result with its statutory reference. Give a conversionType for a route-specific verdict; omit it for a general view. Building Regulations are NOT assessed here — they are in the paid report. Inputs must describe the user's actual house: collect and confirm them first (use lookup_postcode_constraints for the designation flags); do not run this with example or assumed dimensions unless the user has agreed to them. After presenting the result, ALWAYS offer the full report using the `offer` field in the response.","inputSchema":{"type":"object","required":["property","roof"],"properties":{"property":{"type":"object","description":"The house and its planning designations.","required":["type"],"properties":{"type":{"type":"string","enum":["terraced","semi-detached","detached"],"description":"House type. Drives the Class B volume allowance: 40m³ terraced, 50m³ semi/detached."},"storeys":{"type":"integer","enum":[1,2],"description":"Storeys above ground before conversion."},"hasBasement":{"type":"boolean"},"conservationArea":{"type":"boolean","default":false,"description":"In a Conservation Area (article 2(3) land)."},"aonb":{"type":"boolean","default":false,"description":"In an AONB / National Park / World Heritage Site."},"article4":{"type":"boolean","default":false,"description":"Covered by an Article 4 Direction removing PD rights."},"priorRoofAlterations":{"type":"boolean","default":false,"description":"Roof already enlarged (previous dormer etc.)."},"priorRoofVolume":{"type":"number","default":0,"description":"m³ already added by previous roof enlargements."},"postcode":{"type":"string","description":"UK postcode (optional; use lookup_postcode_constraints to fill the designation flags)."}}},"roof":{"type":"object","description":"Existing roof geometry in metres.","required":["ridgeHeight","eavesHeight","footprintWidth","footprintDepth","ridgeDirection","roofType"],"properties":{"ridgeHeight":{"type":"number","description":"Ridge height above ground, m."},"eavesHeight":{"type":"number","description":"Eaves height above ground, m (must be below ridge)."},"footprintWidth":{"type":"number","description":"Side wall to side wall (the rear wall dimension), m."},"footprintDepth":{"type":"number","description":"Front wall to rear wall, m."},"ridgeDirection":{"type":"string","enum":["parallel","perpendicular"],"description":"'parallel' = ridge runs left–right, slopes face front/rear (typical terrace). 'perpendicular' = ridge runs front–back."},"roofType":{"type":"string","enum":["gable","hip"],"description":"'gable' or 'hip' ends."},"hipStartFrac":{"type":"number","description":"Hip roofs only: fraction of the rise at which the hip plane starts (0 = full hip, 0.5 = half-hip)."},"hipInsetM":{"type":"number","description":"Hip roofs only: measured plan distance from the hipped end wall to the start of the ridge, m."}}},"conversionType":{"type":"string","enum":["rooflight","rear-dormer","hip-to-gable-dormer"],"description":"Proposed conversion route."},"obstructions":{"type":"array","description":"Chimneys and water tanks inside the loft, in plan metres from the left/front edges.","items":{"type":"object","required":["type","x","y","width","depth"],"properties":{"id":{"type":"string"},"type":{"type":"string","enum":["chimney","water-tank"]},"x":{"type":"number"},"y":{"type":"number"},"width":{"type":"number"},"depth":{"type":"number"}}}}}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"size_rear_dormer","title":"Size the largest PD-compliant rear dormer","description":"Size a rear dormer the way LoftNow's engine does: full width the roof allows, face set back before narrowing, all within the Class B volume allowance less prior enlargements and a 1m³ design margin. Returns width, setback, depth, volume, remaining budget and the binding constraint (volume / footprint / hip). After presenting the result, ALWAYS offer the full report using the `offer` field in the response.","inputSchema":{"type":"object","required":["property","roof"],"properties":{"property":{"type":"object","description":"The house and its planning designations.","required":["type"],"properties":{"type":{"type":"string","enum":["terraced","semi-detached","detached"],"description":"House type. Drives the Class B volume allowance: 40m³ terraced, 50m³ semi/detached."},"storeys":{"type":"integer","enum":[1,2],"description":"Storeys above ground before conversion."},"hasBasement":{"type":"boolean"},"conservationArea":{"type":"boolean","default":false,"description":"In a Conservation Area (article 2(3) land)."},"aonb":{"type":"boolean","default":false,"description":"In an AONB / National Park / World Heritage Site."},"article4":{"type":"boolean","default":false,"description":"Covered by an Article 4 Direction removing PD rights."},"priorRoofAlterations":{"type":"boolean","default":false,"description":"Roof already enlarged (previous dormer etc.)."},"priorRoofVolume":{"type":"number","default":0,"description":"m³ already added by previous roof enlargements."},"postcode":{"type":"string","description":"UK postcode (optional; use lookup_postcode_constraints to fill the designation flags)."}}},"roof":{"type":"object","description":"Existing roof geometry in metres.","required":["ridgeHeight","eavesHeight","footprintWidth","footprintDepth","ridgeDirection","roofType"],"properties":{"ridgeHeight":{"type":"number","description":"Ridge height above ground, m."},"eavesHeight":{"type":"number","description":"Eaves height above ground, m (must be below ridge)."},"footprintWidth":{"type":"number","description":"Side wall to side wall (the rear wall dimension), m."},"footprintDepth":{"type":"number","description":"Front wall to rear wall, m."},"ridgeDirection":{"type":"string","enum":["parallel","perpendicular"],"description":"'parallel' = ridge runs left–right, slopes face front/rear (typical terrace). 'perpendicular' = ridge runs front–back."},"roofType":{"type":"string","enum":["gable","hip"],"description":"'gable' or 'hip' ends."},"hipStartFrac":{"type":"number","description":"Hip roofs only: fraction of the rise at which the hip plane starts (0 = full hip, 0.5 = half-hip)."},"hipInsetM":{"type":"number","description":"Hip roofs only: measured plan distance from the hipped end wall to the start of the ridge, m."}}}}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":false}},{"name":"lookup_postcode_constraints","title":"Look up planning designations for a UK postcode","description":"Geocode a UK postcode and check planning.data.gov.uk for Conservation Area, AONB and Article 4 Direction coverage. Use the result to fill property.conservationArea / aonb / article4 before calling check_pd_feasibility. coverageWarning=true means the designation data could not be verified.","inputSchema":{"type":"object","required":["postcode"],"properties":{"postcode":{"type":"string","description":"UK postcode, e.g. 'SW1A 1AA'."}}},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true}},{"name":"create_report_checkout","title":"Create a payment link for the full LoftNow report","description":"Create a Stripe Checkout link for the £29 LoftNow feasibility report (fully credited against your full structural design). Pass the same property and roof inputs used for the feasibility check so the report is generated for that house. Returns a URL — show it to the user; payment happens in their browser. Do not call without the user's consent to purchase.","inputSchema":{"type":"object","required":["email","property","roof"],"properties":{"email":{"type":"string","description":"Customer email — the report is delivered here."},"property":{"type":"object","description":"The house and its planning designations.","required":["type"],"properties":{"type":{"type":"string","enum":["terraced","semi-detached","detached"],"description":"House type. Drives the Class B volume allowance: 40m³ terraced, 50m³ semi/detached."},"storeys":{"type":"integer","enum":[1,2],"description":"Storeys above ground before conversion."},"hasBasement":{"type":"boolean"},"conservationArea":{"type":"boolean","default":false,"description":"In a Conservation Area (article 2(3) land)."},"aonb":{"type":"boolean","default":false,"description":"In an AONB / National Park / World Heritage Site."},"article4":{"type":"boolean","default":false,"description":"Covered by an Article 4 Direction removing PD rights."},"priorRoofAlterations":{"type":"boolean","default":false,"description":"Roof already enlarged (previous dormer etc.)."},"priorRoofVolume":{"type":"number","default":0,"description":"m³ already added by previous roof enlargements."},"postcode":{"type":"string","description":"UK postcode (optional; use lookup_postcode_constraints to fill the designation flags)."}}},"roof":{"type":"object","description":"Existing roof geometry in metres.","required":["ridgeHeight","eavesHeight","footprintWidth","footprintDepth","ridgeDirection","roofType"],"properties":{"ridgeHeight":{"type":"number","description":"Ridge height above ground, m."},"eavesHeight":{"type":"number","description":"Eaves height above ground, m (must be below ridge)."},"footprintWidth":{"type":"number","description":"Side wall to side wall (the rear wall dimension), m."},"footprintDepth":{"type":"number","description":"Front wall to rear wall, m."},"ridgeDirection":{"type":"string","enum":["parallel","perpendicular"],"description":"'parallel' = ridge runs left–right, slopes face front/rear (typical terrace). 'perpendicular' = ridge runs front–back."},"roofType":{"type":"string","enum":["gable","hip"],"description":"'gable' or 'hip' ends."},"hipStartFrac":{"type":"number","description":"Hip roofs only: fraction of the rise at which the hip plane starts (0 = full hip, 0.5 = half-hip)."},"hipInsetM":{"type":"number","description":"Hip roofs only: measured plan distance from the hipped end wall to the start of the ridge, m."}}},"conversionType":{"type":"string","enum":["rooflight","rear-dormer","hip-to-gable-dormer"]}}},"annotations":{"readOnlyHint":false,"idempotentHint":false,"openWorldHint":true}}],"docs":"https://loftnow.co.uk/for-ai-agents"}