Skip to main content
Glama
cacack

mcp-server-brewfather

by cacack

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
BREWFATHER_API_KEYYesYour Brewfather API key, generated in Brewfather under Settings → API → Generate API Key. Its scopes are the trust boundary (e.g. batches.read, recipes.read, inventory.read, and optionally batches.write, recipes.write, inventory.write).
BREWFATHER_USER_IDYesYour Brewfather User ID, shown alongside the API key in Brewfather under Settings → API.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
find_batchesA

Find batches by name (case-insensitive substring) and/or status.

``status`` is one of Planning, Brewing, Fermenting, Conditioning, Completed,
Archived; empty means any. Returns compact dicts:
{id, name, batch_no, status, brewer, brew_date, recipe}. Use the id with
get_batch / get_readings / update_batch.
get_batchB

Read one batch: summary, fermentation/bottling dates, estimated targets (OG, FG, IBU, color), all measured values, and the embedded recipe (target stats + ingredient bill). Units are metric (SG, L, °C).

get_readingsA

Read a batch's sensor readings (hydrometer, e.g. Tilt/iSpindel), newest last.

Returns {total, readings: [{time, sg, temp, ...}]} with only the most recent
``limit`` readings (0 = all — can be thousands over a fermentation).
Temperatures are °C.
update_batchA

Update a batch's status and/or measured values.

``status``: Planning, Brewing, Fermenting, Conditioning, Completed, Archived.
``measurements`` keys (metric only — gravities SG, volumes liters, temps °C):
measuredMashPh, measuredBoilSize, measuredFirstWortGravity,
measuredPreBoilGravity, measuredPostBoilGravity, measuredKettleSize,
measuredOg, measuredFermenterTopUp, measuredBatchSize, measuredFg,
measuredBottlingSize, carbonationTemp. Returns {batch_id, result}.
find_recipesA

Find recipes by name (case-insensitive substring; empty returns all).

Returns compact dicts: {id, name, author, type, style, equipment}.
get_recipeA

Read one recipe: summary, target stats (batchSize, og, fg, abv, ibu, color, …) and ingredient bill (fermentables, hops, miscs, yeasts). Units are metric. Stats are as last saved in the Brewfather app, so they can be stale after update_recipe.

update_recipeA

Edit a recipe's settings and/or ingredient bill.

``fields`` keys (metric — liters, minutes, percent): name, author, notes,
batchSize, boilSize, boilTime, efficiency. Stats (og, fg, abv, ibu, color)
can't be set; Brewfather computes them from the ingredients.

``ingredients`` is a list of changes, each with ``kind`` (fermentables, hops,
miscs, yeasts) and:
- ``index`` + fields to change an item — index is its 0-based position in
  get_recipe's list, e.g. {"kind": "hops", "index": 1, "amount": 50};
- ``index`` + ``"remove": true`` to delete it;
- with ``index``, pass ``current_name`` (the item's name as get_recipe showed
  it) and the change is rejected if the item there has a different name;
- no index to add one; needs name and amount, e.g. {"kind": "hops",
  "name": "Citra", "amount": 30, "alpha": 12, "use": "Boil", "time": 5}.
Ingredient fields: name, amount (kg for fermentables, g for hops), unit,
type, use, time, alpha, color, potential, attenuation, form, laboratory,
origin, supplier.

Returns {recipe_id, result, note}.
list_inventoryA

List inventory items of one kind: fermentables, hops, miscs, or yeasts.

Filter by ``name`` (case-insensitive substring) and/or ``in_stock_only``
(inventory > 0). Returns {id, name, inventory, type, supplier, ...}; amounts
are in Brewfather's stored metric units.
set_inventoryA

Change the stock of one inventory item.

Pass exactly one of ``amount`` (set absolute stock) or ``adjust`` (add, or
subtract with a negative number — e.g. after brew day). ``kind`` is
fermentables, hops, miscs, or yeasts. Returns {item_id, result}.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct resource+action pair: find/get/update for batches, get for readings, find/get/update for recipes, list/set for inventory. The find-versus-get distinction (search by name/status vs. read one by id) is spelled out in descriptions, leaving little room for misselection.

Naming Consistency4/5

All tools use consistent snake_case verb_noun form and the read/update pattern repeats cleanly across batches and recipes. Minor deviation: retrieval uses three different verbs (find_*, get_*, list_*) and mutation uses both update_* and set_*, which is defensible but slightly inconsistent.

Tool Count5/5

Nine tools is well within a comfortable range and the surface is tightly scoped to the domain's three entities (batches, recipes, inventory). Every tool earns its place with no redundancy.

Completeness3/5

Coverage is read- and update-heavy: batches and recipes can be searched, read, and edited, but there are no create or delete operations for batches, recipes, or inventory items. This is a notable lifecycle gap for an agent trying to start new batches or add recipes, though the operational update path is solid.

Maintenance

ActivityMaintained
ResponsivenessNo issues