{"server":{"name":"garagedoorscience","version":"1.0.0"},"protocolVersion":"2024-11-05","tier":"public","tools":[{"name":"diagnose","description":"Look up a homeowner's symptom in the structured diagnostic tree. Returns likely issues, urgency, typical cost range, and whether the issue is DIY-safe. Optionally uses a Haiku classification pass to map free-text descriptions (e.g. 'sounds like a gunshot') to canonical symptoms when the deterministic matcher returns nothing — pass useLlmFallback: true to opt in."},{"name":"routeByZip","description":"Look up the local partner for a homeowner ZIP or city. Returns partner name, phone, a booking URL, and a partnerId you can pass to getActivePromotions."},{"name":"getDoorStyles","description":"List garage door styles with pricing, features, and ratings. Optional filters: budget, type, maxPriceUsd. Prices are shown only where a primary source states a range; other styles say to get a written quote."},{"name":"getActivePromotions","description":"Return current promotional offers from the matched partner. Pass partnerId (from routeByZip) to filter to that partner's promos — partners without opted-in promos return an empty list. Optionally narrow by issueKey or serviceType."},{"name":"getInspectionReferencePhotos","description":"Returns curated, captioned reference photos of one garage door part, each tagged HEALTHY, WATCH or FIX, so a homeowner can compare what they see to the reference. Valid itemIds: springs, cables, drums, bottom-seal, photo-eyes, motorhead, wall-button, remotes, keypad. An itemId that is not listed returns a \"no photos\" message."},{"name":"getLab","description":"Return a preview image, title, description, and URL for one interactive Three.js lab. The preview image is a 16:9 thumbnail of the lab; the URL opens the live interactive version in a browser. Slug must be one of the catalog: science-of-garage-doors, science-of-garage-door-springs, energy-efficiency-lab, garage-door-roi, rolling-steel-lab, spring-fatigue-cold-weather, safety-systems-lab, garage-door-trainer, garage-door-anatomy, animated."},{"name":"getLabEmbed","description":"Return an iframe embed snippet for one interactive Three.js lab. Returns the iframe HTML plus the direct URL of the live lab. Slug must be one of: science-of-garage-doors, science-of-garage-door-springs, energy-efficiency-lab, garage-door-roi, rolling-steel-lab, spring-fatigue-cold-weather, safety-systems-lab, garage-door-trainer, garage-door-anatomy, animated."},{"name":"retrieveLabContext","description":"Search the garage door science labs for content relevant to a question, returning passages with citations. **Pro tier only** — requires a Bearer API key from /developers. Public-tier callers get 401."},{"name":"visualDiagnose","description":"Diagnose a garage-door problem from a homeowner's photo (inline base64 image or imageUrl). Returns the visible part, its condition, severity, a safety flag, and an optional examples gallery id. Stores the photo briefly; a daily cleanup deletes it after about two days."},{"name":"identifyOpener","description":"Identify a garage door opener brand and model from a photo of the motor head or label. Returns the matched brand, model, slug, learn button color, and confidence level. Useful for homeowners who want to find their opener in a comparison table."},{"name":"costEstimate","description":"Return a cost estimate for a known garage door issue. Requires an issueKey from the structured diagnostic tree (e.g., broken_spring, worn_rollers, sensor_misalignment). Optionally pass zip for context. Returns a repair cost range only where a primary source states one (otherwise null with a get-a-written-quote note), the DIY safety rating, and a safety note if applicable."},{"name":"submitInspection","description":"Submit a completed 24-point garage door inspection on behalf of a homeowner. Saves the inspection, returns a scored report URL and flagged items, and emails the report only if emailReport is true. If any item is marked fix and a ZIP is given, also emails a link to the report to the local partner for that ZIP. Items must be a record of itemId (e.g., springs, cables, rollers) to { status: \"ok\" | \"watch\" | \"fix\", note?: string }. Valid itemIds: springs, drums, cables, rollers, hinges, door-panels-interior, track, bottom-seal, bottom-bracket, door-panels-exterior, bottom-seal-fit, top-panel-alignment, motorhead, j-arm, emergency-release, belt-chain, sprocket, opener-carriage, header-bracket, door-bracket, wall-button, photo-eyes, remotes, keypad."}]}