Open Brewery DB is a free dataset and API with public information on breweries, cideries, brewpubs, and bottleshops
The goal of Open Brewery DB is to maintain an open-source, community-driven dataset and provide a public API for brewery-related data.
It is our belief that public information should be freely accessible for the betterment of the community and the happiness of web developers and data analysts.
Open Brewery DB provides a public, read-only Model Context Protocol server so AI agents can search and explore the brewery dataset without translating requests into REST API calls.
The server uses Streamable HTTP and does not require authentication. Requests are limited to 60 per minute per IP address. Paginated tools return 10 results by default and accept at most 50 results per page.
| Tool | Description |
|---|---|
list-breweries |
Browse breweries with structured location, type, name, ID, distance, and sorting filters. |
get-brewery |
Retrieve a brewery by UUID. |
search-breweries |
Perform full-text brewery searches. |
get-brewery-metadata |
Count filtered breweries by state or province, country, and brewery type. |
In Claude Desktop or Claude on the web, open Settings, select Connectors, choose
Add custom connector, and enter https://api.openbrewerydb.org/mcp.
Claude Code users can connect from a terminal:
claude mcp add --transport http open-brewery-db https://api.openbrewerydb.org/mcp
Add the remote server to opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"servers": {
"open-brewery-db": {
"type": "remote",
"url": "https://api.openbrewerydb.org/mcp"
}
}
}
}
Add the HTTP server to your user or workspace mcp.json:
{
"servers": {
"open-brewery-db": {
"type": "http",
"url": "https://api.openbrewerydb.org/mcp"
}
}
}
b54b16e1-ac3b-4bff-a11f-f7ae9ddc27e0.If a client receives HTTP 429 Too Many Requests, wait for the Retry-After period before making
more requests. MCP clients discover the current input and output schema for each tool directly from
the server. HTTP 503 Service Unavailable indicates that the MCP server has been temporarily
disabled by the Open Brewery DB operators.
This API is not authenticated.
Returns a paginated list of breweries based on optional filters and sorting.
curl --request GET \
--get "https://api.openbrewerydb.org/v1/breweries" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"per_page\": 1,
\"page\": 22,
\"sort\": \"architecto\",
\"by_city\": \"n\",
\"by_country\": \"g\",
\"by_dist\": \"architecto\",
\"by_dist_radius\": 22,
\"by_dist_unit\": \"mi\",
\"by_ids\": \"g\",
\"by_name\": \"z\",
\"by_postal\": \"m\",
\"by_state\": \"i\",
\"by_type\": \"architecto\",
\"exclude_types\": \"architecto\"
}"
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 120
x-ratelimit-remaining: 119
vary: Origin
{
"message": "The sort contains an invalid sort field. Valid fields are: id, name, brewery_type, type, city, state_province, postal_code, country. (and 9 more errors)",
"errors": {
"sort": [
"The sort contains an invalid sort field. Valid fields are: id, name, brewery_type, type, city, state_province, postal_code, country."
],
"by_city": [
"The by city field must be at least 3 characters."
],
"by_country": [
"The by country field must be at least 3 characters."
],
"by_dist": [
"The by dist must be a valid coordinate pair (latitude,longitude)."
],
"by_ids": [
"The by ids field must be at least 3 characters."
],
"by_name": [
"The by name field must be at least 3 characters."
],
"by_postal": [
"The by postal field must be at least 3 characters."
],
"by_state": [
"The by state field must be at least 3 characters."
],
"by_type": [
"The by_type contains invalid brewery type: architecto"
],
"exclude_types": [
"The exclude_types contains invalid brewery type: architecto"
]
}
}
Takes the same filters as List Breweries.
curl --request GET \
--get "https://api.openbrewerydb.org/v1/breweries/meta" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"per_page\": 1,
\"page\": 22,
\"sort\": \"architecto\",
\"by_city\": \"n\",
\"by_country\": \"g\",
\"by_dist\": \"architecto\",
\"by_dist_radius\": 22,
\"by_dist_unit\": \"mi\",
\"by_ids\": \"g\",
\"by_name\": \"z\",
\"by_postal\": \"m\",
\"by_state\": \"i\",
\"by_type\": \"architecto\",
\"exclude_types\": \"architecto\"
}"
curl --request GET \
--get "https://api.openbrewerydb.org/v1/breweries/random" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"size\": 1
}"
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 120
x-ratelimit-remaining: 117
vary: Origin
[
{
"id": "44dbdaea-02c1-4459-b259-0605a7a219b8",
"name": "Sun Up Brewing Co.",
"brewery_type": "brewpub",
"address_1": "322 E Camelback Rd",
"address_2": null,
"address_3": null,
"city": "Phoenix",
"state_province": "Arizona",
"postal_code": "85012-1614",
"country": "United States",
"longitude": -112.0687773,
"latitude": 33.50950925,
"phone": "6026708924",
"website_url": "http://sunup.beer",
"state": "Arizona",
"street": "322 E Camelback Rd"
}
]
The search performs partial, case-insensitive matching against brewery names.
curl --request GET \
--get "https://api.openbrewerydb.org/v1/breweries/search" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"per_page\": 1,
\"query\": \"n\"
}"
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 120
x-ratelimit-remaining: 116
vary: Origin
{
"message": "The query field must be at least 3 characters.",
"errors": {
"query": [
"The query field must be at least 3 characters."
]
}
}
The ID of the brewery.
curl --request GET \
--get "https://api.openbrewerydb.org/v1/breweries/ae7b3174-8be8-4d53-a3a5-9b8240970eea" \
--header "Content-Type: application/json" \
--header "Accept: application/json" cache-control: max-age=86400, public
content-type: application/json
x-ratelimit-limit: 120
x-ratelimit-remaining: 115
vary: Origin
{
"id": "ae7b3174-8be8-4d53-a3a5-9b8240970eea",
"name": "'s",
"brewery_type": "brewpub",
"address_1": "Friesener Straße 1",
"address_2": null,
"address_3": null,
"city": "Kronach",
"state_province": "Bayern",
"postal_code": "96317",
"country": "Germany",
"longitude": 11.327765,
"latitude": 50.241246,
"phone": "+49 9261 628000",
"website_url": "http://www.antla.de",
"state": "Bayern",
"street": "Friesener Straße 1"
}