{"openapi":"3.1.0","info":{"title":"Brew API","version":"0.1.0","description":"A brewery directory (live, Open Brewery DB) plus homebrewing calculators (ABV, IBU, SRM color, priming sugar) and a 26-style beer-style guide.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://brew.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/brew/docs"},"termsOfService":"https://connectorbay.com/brew/terms"},"servers":[{"url":"https://brew.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/brew/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/brewery_search":{"post":{"operationId":"brewery_search","summary":"Search Open Brewery DB (live) for breweries by name, city, state and/or type. Use for \"find breweries in","description":"Search Open Brewery DB (live) for breweries by name, city, state and/or type. Use for \"find breweries in\n    Denver\", \"micro breweries in Vermont\", \"search for Stone brewery\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Brewery name (partial match).","examples":["stone","dog"],"title":"Query"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter by city.","examples":["Portland","Denver"],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Filter by US state or international province.","examples":["California","Oregon"],"title":"State"},"brewery_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"micro | nano | regional | brewpub | large | planning | bar | contract | proprietor | closed","title":"Brewery Type"},"limit":{"default":15,"description":"Max results.","maximum":50,"minimum":1,"title":"Limit","type":"integer"}},"title":"brewery_searchArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/brewery_by_id":{"post":{"operationId":"brewery_by_id","summary":"Full detail for one brewery by its Open Brewery DB id: name, type, full address, coordinates, phone and","description":"Full detail for one brewery by its Open Brewery DB id: name, type, full address, coordinates, phone and\n    website. Use after brewery_search to get more detail on a specific result.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"A brewery's Open Brewery DB id (from brewery_search, breweries_near, or random_brewery).","title":"Id","type":"string"}},"required":["id"],"title":"brewery_by_idArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/breweries_near":{"post":{"operationId":"breweries_near","summary":"The closest breweries to a latitude/longitude, nearest first (Open Brewery DB's distance sort). Use for","description":"The closest breweries to a latitude/longitude, nearest first (Open Brewery DB's distance sort). Use for\n    \"breweries near me\" once you have coordinates.","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"latitude":{"maximum":90,"minimum":-90,"title":"Latitude","type":"number"},"longitude":{"maximum":180,"minimum":-180,"title":"Longitude","type":"number"},"limit":{"default":10,"description":"Max results.","maximum":50,"minimum":1,"title":"Limit","type":"integer"}},"required":["latitude","longitude"],"title":"breweries_nearArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/random_brewery":{"post":{"operationId":"random_brewery","summary":"One random brewery from Open Brewery DB. Use for \"surprise me with a brewery\", \"pick a random brewery\".","description":"One random brewery from Open Brewery DB. Use for \"surprise me with a brewery\", \"pick a random brewery\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"random_breweryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/abv_calculator":{"post":{"operationId":"abv_calculator","summary":"Alcohol by volume from original and final gravity, both the simple homebrew rule-of-thumb ((OG−FG)×131.25)","description":"Alcohol by volume from original and final gravity, both the simple homebrew rule-of-thumb ((OG−FG)×131.25)\n    and a more accurate formula for strong beers. Use for \"ABV for OG 1.060 FG 1.012\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"original_gravity":{"description":"OG, e.g. 1.050.","exclusiveMaximum":1.25,"exclusiveMinimum":0.98,"title":"Original Gravity","type":"number"},"final_gravity":{"description":"FG, e.g. 1.010.","exclusiveMaximum":1.25,"exclusiveMinimum":0.98,"title":"Final Gravity","type":"number"}},"required":["original_gravity","final_gravity"],"title":"abv_calculatorArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/ibu_estimate":{"post":{"operationId":"ibu_estimate","summary":"Estimated bitterness in IBU using the Tinseth formula, given a hop schedule (weight in oz, alpha-acid %,","description":"Estimated bitterness in IBU using the Tinseth formula, given a hop schedule (weight in oz, alpha-acid %,\n    boil time in minutes per addition), batch size and original gravity. Use for \"IBU for 1 oz 6% AA hops boiled 60\n    minutes in 5 gallons at 1.050\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"hop_additions":{"description":"List of {weight_oz, alpha_acid_pct, time_min}.","examples":[[{"alpha_acid_pct":6.0,"time_min":60,"weight_oz":1.0}]],"items":{"additionalProperties":true,"type":"object"},"title":"Hop Additions","type":"array"},"batch_size_gal":{"description":"Post-boil batch size in US gallons.","exclusiveMinimum":0,"title":"Batch Size Gal","type":"number"},"original_gravity":{"description":"Batch OG, e.g. 1.050.","exclusiveMaximum":1.25,"exclusiveMinimum":0.98,"title":"Original Gravity","type":"number"}},"required":["hop_additions","batch_size_gal","original_gravity"],"title":"ibu_estimateArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/srm_color_calculator":{"post":{"operationId":"srm_color_calculator","summary":"Estimated beer color in SRM using the Morey equation, from a grain bill (weight in lb, plus either a grain's","description":"Estimated beer color in SRM using the Morey equation, from a grain bill (weight in lb, plus either a grain's\n    own °Lovibond or a name from the bundled grain-color table). Use for \"color of 9 lb pale malt and 1 lb chocolate\n    malt in 5.5 gallons\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"grain_bill":{"description":"List of {weight_lb, lovibond} or {weight_lb, name} (name looked up in the bundled grain-color table).","examples":[[{"name":"pale 2-row","weight_lb":9.0},{"name":"chocolate malt","weight_lb":1.0}]],"items":{"additionalProperties":true,"type":"object"},"title":"Grain Bill","type":"array"},"batch_size_gal":{"description":"Batch size in US gallons.","exclusiveMinimum":0,"title":"Batch Size Gal","type":"number"}},"required":["grain_bill","batch_size_gal"],"title":"srm_color_calculatorArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/priming_sugar_calculator":{"post":{"operationId":"priming_sugar_calculator","summary":"Grams (and ounces) of priming sugar to reach a target CO2 level for bottle conditioning, accounting for CO2","description":"Grams (and ounces) of priming sugar to reach a target CO2 level for bottle conditioning, accounting for CO2\n    already dissolved at the beer's temperature. Use for \"priming sugar for 5 gallons at 2.5 volumes at 68°F\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"batch_size_gal":{"description":"Batch size in US gallons.","exclusiveMinimum":0,"title":"Batch Size Gal","type":"number"},"target_co2_volumes":{"description":"Target CO2, e.g. 2.4 for most American ales, 2.6–2.8 for Belgians, 1.5–2.0 for English cask ales.","exclusiveMinimum":0,"maximum":6,"title":"Target Co2 Volumes","type":"number"},"beer_temp_f":{"description":"The beer's current or warmest-recent temperature in °F (residual CO2 depends on this).","maximum":90,"minimum":32,"title":"Beer Temp F","type":"number"},"sugar_type":{"default":"corn_sugar","description":"corn_sugar | table_sugar | dme","title":"Sugar Type","type":"string"}},"required":["batch_size_gal","target_co2_volumes","beer_temp_f"],"title":"priming_sugar_calculatorArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/beer_style_guide":{"post":{"operationId":"beer_style_guide","summary":"Typical OG/FG/ABV/IBU/SRM ranges and a short description for 26 common beer styles, or the full list. Use for","description":"Typical OG/FG/ABV/IBU/SRM ranges and a short description for 26 common beer styles, or the full list. Use for\n    \"what's a typical IBU range for a saison\", \"list beer styles\", \"describe a Vienna lager\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"style":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A style name, e.g. 'american ipa', 'saison', 'dry irish stout'; omit to list all styles.","title":"Style"}},"title":"beer_style_guideArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/style_match":{"post":{"operationId":"style_match","summary":"Given any combination of OG, FG, IBU and SRM, ranks the bundled beer styles by how well they fit — use it","description":"Given any combination of OG, FG, IBU and SRM, ranks the bundled beer styles by how well they fit — use it\n    after computing stats with the other tools, or with your own measured numbers. Use for \"my beer is\n    1.052/1.010, 42 IBU, 8 SRM — what style is that\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"og":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Measured or computed original gravity, e.g. 1.052.","title":"Og"},"fg":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Measured or computed final gravity, e.g. 1.010.","title":"Fg"},"ibu":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Estimated or measured IBU.","title":"Ibu"},"srm":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Estimated or measured SRM color.","title":"Srm"}},"title":"style_matchArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}