Skip to main content
Glama
dragosh29

Breww MCP server

by dragosh29

Stock levels

stock_levels
Read-onlyIdempotent

Retrieve current stock for ingredients, packaging, merchandise, and finished products, with optional filters for location, expiry, batch, or product name.

Instructions

Current stock. Two sources: (1) stock items (ingredients, packaging, chemicals, guest beer, merchandise) currently in stock, per stock item and location, from GET /stock-received/ with is_empty=False (quantities in kg, litres or units depending on the item's tracking type); (2) finished products, from GET /products/ with include_fields=quantity_in_stock_in_format, a conditionally included field that Breww's API guide names but its spec does not define, so the value is passed through exactly as returned. The API has no location filter on stock received, so location_id is applied here after fetching.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
whatNoWhich stock to reportall
expiring_byNoOnly lots with an expiry date on or before this date (API parameter `expiry_date__lte`)
location_idNoOnly this location (filtered here; the API has no location parameter on stock received)
max_resultsNoMost lots and most products to read
include_lotsNoAlso list the individual lots (batch code, expiry, quantity)
stock_item_idNoOnly this stock item (API parameter `stock_item`)
batch_code_containsNoPart of the stock lot's batch code (API parameter `batch_code__contains`)
product_name_containsNoPart of the product name, for product stock (API parameter `name__contains`)

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as a safe, idempotent read, and the description adds substantial context beyond them: the exact upstream endpoints, the fact that location filtering is applied client-side because the API has no such filter, unit semantics (kg/litres/units by tracking type), and a caveat that quantity_in_stock_in_format is an undefined pass-through field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core answer ('Current stock') followed by the two sources, and every clause carries operational information. It is dense and slightly long, but no sentence is filler; the pass-through warning in particular earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 optional parameters and no output schema, the description supplies the missing context: where data comes from, how units are expressed, the undefined-field caveat, and why location filtering happens locally. An agent can call this correctly without further inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful interpretation: it explains that the two sources drive `what`, that quantities vary by tracking type, and it corroborates the non-obvious client-side nature of `location_id`. It does not add syntax detail beyond the schema for filters like expiring_by.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource ('current stock') and immediately disambiguates scope by naming two distinct data sources (stock items via /stock-received/, finished products via /products/). This clearly separates it from siblings like list_batches or list_products, which cover only one of those domains.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what each source covers and ties them to item categories (ingredients, packaging, chemicals, guest beer, merchandise), giving the agent enough to pick the right scope via `what`. It stops short of naming explicit when-not-to-use conditions or sibling alternatives such as list_batches for lot-level queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.