BrewMark MCP
An official MCP server provided by BrewMark that allows AI assistants to access precise coffee grinder dial settings, convert grind sizes between different grinder models, and retrieve brew method guides. It enables agents to resolve vague recipe instructions into specific, model-specific numerical settings for over 200 grinders.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://brewmark.io/api/mcpWhat you can do with it
- Convert a grind setting from one grinder model to another
- Retrieve specific dial settings for espresso, pour over, or French press
- Access brew method guides and barista recipes
- Find suitable grinders based on user preferences
Source and maintenance
Protocol and capabilities
- Server
- brewmark 1.3.0
- MCP protocol
- 2025-06-18
- Tools
- 6 advertised
- Resources
- 1 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
},
"resources": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
6 advertised
convert_grind_setting — Convert a grind setting
Translate a grind setting from one coffee grinder to another. Use whenever a recipe quotes a setting for a grinder the user does not own — "the recipe says 18 clicks on a Comandante, what is that on my Encore?". Grinder names can be written however the user said them ("Fellow Ode", "1Zpresso J-Max"); exact slugs are not required.
{
"type": "object",
"required": [
"from",
"setting",
"to"
],
"properties": {
"to": {
"type": "string",
"description": "The grinder to convert to, e.g. \"Baratza Encore\""
},
"from": {
"type": "string",
"description": "The grinder the setting is quoted for, e.g. \"Comandante C40 MK4\""
},
"setting": {
"type": [
"number",
"string"
],
"description": "The setting on the source grinder as written on it, e.g. 18. On Fellow dials the digit after the point counts marks (4.2 on an Ode is the second mark after 4); a Baratza Forte is macro number and micro letter, e.g. \"4R\"."
}
}
}{
"title": "Convert a grind setting",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_grinder_chart — Grinder settings chart
Grind settings for one grinder across every brew method. Use this for any question of the form "what grind should I use for my <grinder>", "what setting for French press on a <grinder>", or "how do I dial in my <grinder>". Returns the recommended setting and usable range for espresso, moka pot, AeroPress, pour over, siphon, steep-and-release (Clever Dripper, Hario Switch), drip, cupping, Chemex, French press and cold brew. When the user names a brew method, pass it as `method`: the answer then leads with that method, plus a starting recipe (ratio, dose, water temperature, time). The grinder can be named however the user said it.
{
"type": "object",
"required": [
"grinder"
],
"properties": {
"roast": {
"enum": [
"light",
"medium-light",
"medium",
"medium-dark",
"dark"
],
"type": "string",
"description": "Optional roast level of the coffee the user is brewing. If they name a coffee rather than a roast (\"Stumptown Hair Bender\", \"Lavazza Super Crema\"), use what you know of it; leave out when unsure. Lighter roasts move the starting setting finer, darker ones coarser."
},
"method": {
"type": "string",
"description": "Optional brew method the user asked about, as they said it: \"V60\", \"pour over\", \"French press\", \"espresso\", \"AeroPress\", \"cold brew\", \"Chemex\", \"drip\", \"moka pot\", \"siphon\", \"Clever Dripper\", \"cupping\""
},
"grinder": {
"type": "string",
"description": "Grinder name as the user said it, e.g. \"Fellow Ode\", \"Baratza Encore\", or a slug"
}
}
}{
"title": "Grinder settings chart",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}dial_in — Adjust after tasting
The next grind setting to try after the user brewed and tasted: "I used 18 on my Encore and it was sour", "my espresso is bitter at 4.5 on the Ode". Sour, weak or fast means grind finer; bitter, harsh or slow means coarser. Returns one move on that grinder's own dial. Call again after each cup, and with result "good" once it tastes right, which also adds an anonymous report (grinder, method, setting, taste, coffee) to BrewMark's per-coffee data.
{
"type": "object",
"required": [
"grinder",
"setting",
"result"
],
"properties": {
"roast": {
"enum": [
"light",
"medium-light",
"medium",
"medium-dark",
"dark"
],
"type": "string",
"description": "Optional roast level of that coffee, if known. Recorded with the report; it does not change the suggestion."
},
"coffee": {
"type": "string",
"description": "The coffee as the user named it, roaster and name: \"Stumptown Hair Bender\". Only the coffee: never the user's name or other personal details. Leave out if they have not said."
},
"method": {
"type": "string",
"description": "Brew method, e.g. \"espresso\", \"V60\", \"Kalita Wave\". Pass it whenever the user has said it; the card shows that method's recipe."
},
"result": {
"enum": [
"sour",
"bitter",
"good"
],
"type": "string",
"description": "How it tasted: sour (also weak, thin, ran fast), bitter (also harsh, dry, ran slow), or good"
},
"grinder": {
"type": "string",
"description": "Grinder name as the user said it, e.g. \"Baratza Encore\""
},
"setting": {
"type": [
"number",
"string"
],
"description": "The setting they brewed at as written on the grinder, e.g. 18. On Fellow dials 4.2 is the second mark after 4; a Baratza Forte is macro number and micro letter, e.g. \"4R\"."
}
}
}{
"title": "Adjust after tasting",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}find_grinder — Find a grinder
Shortlist coffee grinders for someone deciding which one to buy: "which grinder should I get for pour over under $200?", "a quiet grinder for espresso", "best hand grinder for travel". Ranks BrewMark's grinder finder by how they brew, budget, hand or electric, and must-haves, and returns each pick with an approximate US price, why it fits, and a link to its BrewMark buying guide. BrewMark does not sell grinders: do not use this to place an order, and for a grinder the user already owns use get_grinder_chart instead.
{
"type": "object",
"properties": {
"power": {
"enum": [
"either",
"hand",
"electric"
],
"type": "string",
"description": "Hand grinder, electric, or either (default)."
},
"budget": {
"type": "number",
"description": "Most they want to spend, in US dollars. Leave out for any price."
},
"methods": {
"type": "array",
"items": {
"enum": [
"pourover",
"aeropress",
"drip",
"french",
"cold",
"moka",
"espresso"
],
"type": "string"
},
"description": "Brew methods they will use. Leave out if they did not say."
},
"must_have": {
"type": "array",
"items": {
"enum": [
"quiet",
"travel",
"single-dose"
],
"type": "string"
},
"description": "Only if the user asked for it."
}
}
}{
"title": "Find a grinder",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}translate_recipe — Grind for a recipe on your grinder
Turn a recipe written in the open BrewMark Protocol into a setting on the user's own grinder. Use when a coffee bag or roaster gives a BrewMark code or link ("7H2KQ9", "brewmark.io/p/7H2KQ9"), or a recipe gives its grind as a BrewMark Grind Index ("BGI 38") or as an Open Brew Profile (JSON with "spec": "brewmark.obp/0.1"). Pass one of `code`, `bgi` or `profile`. Spec: https://github.com/jeffreygluck/brewmark-protocol. For a recipe that quotes a setting on another grinder, use convert_grind_setting instead.
{
"type": "object",
"required": [
"grinder"
],
"properties": {
"bgi": {
"type": "number",
"description": "Grind target on the BrewMark Grind Index, 0 (espresso fine) to 100 (very coarse); 40 is filter medium"
},
"code": {
"type": "string",
"description": "A BrewMark code from a coffee bag, or its link, e.g. \"7H2KQ9\" or \"https://brewmark.io/p/7H2KQ9\""
},
"grinder": {
"type": "string",
"description": "The user's grinder, named however they said it, e.g. \"Fellow Ode\", \"Baratza Encore\""
},
"profile": {
"type": "object",
"description": "An Open Brew Profile (spec \"brewmark.obp/0.1\"), as given by the roaster or app"
}
}
}{
"title": "Grind for a recipe on your grinder",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_grinders — List supported grinders
Every grinder BrewMark supports. Use this to check whether a grinder is covered, or to disambiguate when another tool reports more than one match. Not needed just to look up a name — the other tools accept ordinary names directly.
{
"type": "object",
"properties": {
"search": {
"type": "string",
"description": "Optional case-insensitive filter on brand or model name"
}
}
}{
"title": "List supported grinders",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
brewmark-card — BrewMark card
ui://brewmark/card-v5.html30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1287 ms
- 95th percentile latency
- 1287 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1287 ms · metadata changed · 6 tool(s), 1 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http brewmark-mcp https://brewmark.io/api/mcpCodex
codex mcp add brewmark-mcp --url https://brewmark.io/api/mcpCursor
{
"mcpServers": {
"brewmark-mcp": {
"url": "https://brewmark.io/api/mcp"
}
}
}Cline
{
"mcpServers": {
"brewmark-mcp": {
"type": "streamableHttp",
"url": "https://brewmark.io/api/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"brewmark-mcp": {
"type": "http",
"url": "https://brewmark.io/api/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http brewmark-mcp https://brewmark.io/api/mcpClaude Desktop
{
"mcpServers": {
"brewmark-mcp": {
"url": "https://brewmark.io/api/mcp"
}
}
}Windsurf
{
"mcpServers": {
"brewmark-mcp": {
"serverUrl": "https://brewmark.io/api/mcp"
}
}
}Let your agent find its tools
Find servers like BrewMark MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other productivity and knowledge servers
Do you run BrewMark MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.