Skip to main content
Glama

Register an espresso machine

register_machine

Register an espresso or alternative preparation machine. It becomes the active machine only when no machine is in use (none active, or the active one archived); otherwise call set_active with its machine_id to switch to it. The active field of the reply says which.

Input Schema

NameRequiredDescriptionDefault
nameYesMachine name/model, e.g. Dedica EC685
notesNo
photoNoPhoto path or URL
toolsNoJSON or comma-separated tools, e.g., paper filters, flow control, metal mesh
archivedNo1 if archived, 0 if active
prep_typeNoPreparation equipment type. One of: espresso_machine, lever_press, moka_pot, aeropress, french_press, v60_dripper, cold_brew. Lower snake_case.
catalog_idNoOptional: the maintenance catalog model this is (the `id` of a catalog row, e.g. rancilio-silvia), when it was registered from the catalog. Its maintenance then comes from that model's researched record. "none" says it is not in the catalog.
prep_styleNoPreparation style. One of: espresso, filter, immersion, percolation. Only "espresso" is diagnosed by the dialing engine (G8). Anything else is recorded but never dialed, so do not guess this field.
boiler_typeNo
hardness_dhNoOptional: the TOTAL hardness (GH) of the water this machine runs on, in °dH (German degrees; ppm as CaCO3 ÷ 17.85), as a test strip reports it. Picks the band of a maker's hardness table for descaling and filter life
control_typeYes
connected_deviceNoMetadata mapping to smart hardware APIs
basket_size_gramsNo
built_in_grinder_idNoid of a grinder built into this machine (bean-to-cup / integrated grinder)

Output Schema

NameRequiredDescriptionDefault
activeYes
statusYes
messageYes
machine_idYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / catalog_id / description
      Previous value: -"Optional — the maintenance catalog model this is (the `id` of a catalog row, e.g. rancilio-silvia), when it was registered from the catalog. Its maintenance then comes from that model's researched record. \"none\" says it is not in the catalog."New value: +"Optional: the maintenance catalog model this is (the `id` of a catalog row, e.g. rancilio-silvia), when it was registered from the catalog. Its maintenance then comes from that model's researched record. \"none\" says it is not in the catalog."
    • changedInput schema / properties / hardness_dh / description
      Previous value: -"Optional — the TOTAL hardness (GH) of the water this machine runs on, in °dH (German degrees; ppm as CaCO3 ÷ 17.85), as a test strip reports it. Picks the band of a maker's hardness table for descaling and filter life"New value: +"Optional: the TOTAL hardness (GH) of the water this machine runs on, in °dH (German degrees; ppm as CaCO3 ÷ 17.85), as a test strip reports it. Picks the band of a maker's hardness table for descaling and filter life"
    • changedInput schema / properties / prep_style / description
      Previous value: -"Preparation style. One of: espresso, filter, immersion, percolation. Only \"espresso\" is diagnosed by the dialing engine (G8) — anything else is recorded but never dialed, so do not guess this field."New value: +"Preparation style. One of: espresso, filter, immersion, percolation. Only \"espresso\" is diagnosed by the dialing engine (G8). Anything else is recorded but never dialed, so do not guess this field."
  2. Changed2 schema fields changed
    • addedOutput schema / properties / active
      Added value: +{
      +  "type": "boolean"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "status",
      -  "machine_id",
      -  "message"
      -]New value: +[
      +  "status",
      +  "machine_id",
      +  "active",
      +  "message"
      +]
  3. Changed2 schema fields changed
    • addedInput schema / properties / catalog_id
      Added value: +{
      +  "description": "Optional — the maintenance catalog model this is (the `id` of a catalog row, e.g. rancilio-silvia), when it was registered from the catalog. Its maintenance then comes from that model's researched record. \"none\" says it is not in the catalog.",
      +  "type": "string"
      +}
    • addedInput schema / properties / hardness_dh
      Added value: +{
      +  "description": "Optional — the TOTAL hardness (GH) of the water this machine runs on, in °dH (German degrees; ppm as CaCO3 ÷ 17.85), as a test strip reports it. Picks the band of a maker's hardness table for descaling and filter life",
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
  4. Changed3 schema fields changed
    • changedInput schema / properties / prep_style / description
      Previous value: -"Preparation style category, e.g., espresso, filter, immersion"New value: +"Preparation style. One of: espresso, filter, immersion, percolation. Only \"espresso\" is diagnosed by the dialing engine (G8) — anything else is recorded but never dialed, so do not guess this field."
    • changedInput schema / properties / prep_type / description
      Previous value: -"Preparation equipment type, e.g., espresso_machine, v60_dripper, French_press"New value: +"Preparation equipment type. One of: espresso_machine, lever_press, moka_pot, aeropress, french_press, v60_dripper, cold_brew. Lower snake_case."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "machine_id": {
      +      "type": "integer"
      +    },
      +    "message": {
      +      "type": "string"
      +    },
      +    "status": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "status",
      +    "machine_id",
      +    "message"
      +  ],
      +  "type": "object"
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / built_in_grinder_id
      Added value: +{
      +  "description": "id of a grinder built into this machine (bean-to-cup / integrated grinder)",
      +  "type": "integer"
      +}
  6. Changed1 schema field changed
    • changedInput schema / properties / tools / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
  7. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare a non-read-only, non-destructive, non-idempotent write, but say nothing about the side effect of activation state; the description adds that meaningful behavior and points at the reply's `active` field to confirm it. It does not cover duplicate-name handling or validation failures, which is the remaining gap for a creation tool.

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

Conciseness5/5

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

Three tight sentences with zero filler; the activation condition, which is the only non-obvious consequence of the call, is front-loaded right after the purpose statement.

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

Completeness4/5

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

For a 14-parameter, 2-required creation tool with an output schema, the description covers the one behavior an agent cannot infer from structured data: the conditional activation. Return values are covered by the output schema, so the remaining uncovered params (notes, boiler_type, basket_size_grams) are a minor omission rather than a blocking one.

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

Parameters3/5

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

Schema description coverage is 71% and is unusually rich (catalog_id, hardness_dh, prep_style all carry their own semantics and warnings), so the baseline is a 3. The description itself adds no parameter-level meaning beyond what the schema already states, relying entirely on the structured fields.

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?

Names a specific verb (register) and resource (espresso or alternative preparation machine), and immediately scopes it against the neighbouring alternatives by naming set_active for the switch case. An agent can distinguish it from update_machine and register_grinder without opening the schema.

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

Usage Guidelines5/5

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

States the exact condition under which the new machine becomes active (none active, or the active one archived) and the explicit alternative when that condition fails: call set_active with its machine_id. This is the when/when-not/alternative triad in two sentences.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources