Skip to main content
Glama

List shots

list_shots
Read-onlyIdempotent

List shot history with support for pagination and filtering. Every shot carries a derived taste_pending flag (1 = logged with no sensory tags, no rating, and no tasted flip — the tasting is still owed and can be backfilled with update_shot).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of records to return (1-500)
offsetNoOffset for pagination
filtersNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
shotsYes
totalYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / shots / items / properties / machine_settings / additionalProperties
      Added value: +true
    • changedOutput schema / properties / shots / items / properties / machine_settings / type
      Previous value: -[
      -  "null",
      -  "string"
      -]New value: +[
      +  "object",
      +  "null"
      +]
  2. Changed2 schema fields changed
    • addedOutput schema / properties / shots / items / properties / machine_settings
      Added value: +{
      +  "type": [
      +    "null",
      +    "string"
      +  ]
      +}
    • changedOutput schema / properties / shots / items / required
      Previous value: -[
      -  "id",
      -  "pulled_at",
      -  "bean_id",
      -  "grinder_id",
      -  "machine_id",
      -  "program_id",
      -  "grind_label",
      -  "grind_components",
      -  "grind_position_value",
      -  "dose_g",
      -  "yield_g",
      -  "time_s",
      -  "flow_rate_gps",
      -  "finish_action",
      -  "drink_intent",
      -  "flavor_notes",
      -  "sensory_tags",
      -  "observations",
      -  "temp_taste",
      -  "rating",
      -  "verdict",
      -  "data_confidence",
      -  "temperature_c",
      -  "bloom_time_s",
      -  "first_drip_time_s",
      -  "beverage_g",
      -  "tds",
      -  "ey_pct",
      -  "water_id",
      -  "vessel_name",
      -  "vessel_weight_g",
      -  "favourite",
      -  "best_brew",
      -  "tasted",
      -  "bag_id",
      -  "bean_name",
      -  "taste_pending"
      -]New value: +[
      +  "id",
      +  "pulled_at",
      +  "bean_id",
      +  "grinder_id",
      +  "machine_id",
      +  "program_id",
      +  "grind_label",
      +  "grind_components",
      +  "grind_position_value",
      +  "dose_g",
      +  "yield_g",
      +  "time_s",
      +  "flow_rate_gps",
      +  "finish_action",
      +  "drink_intent",
      +  "flavor_notes",
      +  "sensory_tags",
      +  "observations",
      +  "temp_taste",
      +  "rating",
      +  "verdict",
      +  "data_confidence",
      +  "temperature_c",
      +  "bloom_time_s",
      +  "first_drip_time_s",
      +  "beverage_g",
      +  "tds",
      +  "ey_pct",
      +  "water_id",
      +  "vessel_name",
      +  "vessel_weight_g",
      +  "favourite",
      +  "best_brew",
      +  "tasted",
      +  "bag_id",
      +  "machine_settings",
      +  "bean_name",
      +  "taste_pending"
      +]
  3. Changed12 schema fields changed
    • removedOutput schema / properties / shots / items / properties / beverage_g / type
      Removed value: -"null"
    • removedOutput schema / properties / shots / items / properties / bloom_time_s / type
      Removed value: -"null"
    • removedOutput schema / properties / shots / items / properties / ey_pct / type
      Removed value: -"null"
    • removedOutput schema / properties / shots / items / properties / first_drip_time_s / type
      Removed value: -"null"
    • removedOutput schema / properties / shots / items / properties / program_id / type
      Removed value: -"null"
    • removedOutput schema / properties / shots / items / properties / rating / type
      Removed value: -"null"
    • removedOutput schema / properties / shots / items / properties / tds / type
      Removed value: -"null"
    • removedOutput schema / properties / shots / items / properties / temperature_c / type
      Removed value: -"null"
    • removedOutput schema / properties / shots / items / properties / verdict / type
      Removed value: -"null"
    • removedOutput schema / properties / shots / items / properties / vessel_name / type
      Removed value: -"null"
    • removedOutput schema / properties / shots / items / properties / vessel_weight_g / type
      Removed value: -"null"
    • removedOutput schema / properties / shots / items / properties / water_id / type
      Removed value: -"null"
  4. Changed1 schema field changed
    • changedOutput schema / properties / shots / items / properties / flavor_notes / type
      Previous value: -"string"New value: +[
      +  "string",
      +  "null"
      +]
  5. Changed3 schema fields changed
    • addedInput schema / properties / filters / properties / bag_id
      Added value: +{
      +  "description": "Filter by bag number (one purchase of a coffee)",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / shots / items / properties / bag_id
      Added value: +{
      +  "type": "integer"
      +}
    • changedOutput schema / properties / shots / items / required
      Previous value: -[
      -  "id",
      -  "pulled_at",
      -  "bean_id",
      -  "grinder_id",
      -  "machine_id",
      -  "program_id",
      -  "grind_label",
      -  "grind_components",
      -  "grind_position_value",
      -  "dose_g",
      -  "yield_g",
      -  "time_s",
      -  "flow_rate_gps",
      -  "finish_action",
      -  "drink_intent",
      -  "flavor_notes",
      -  "sensory_tags",
      -  "observations",
      -  "temp_taste",
      -  "rating",
      -  "verdict",
      -  "data_confidence",
      -  "temperature_c",
      -  "bloom_time_s",
      -  "first_drip_time_s",
      -  "beverage_g",
      -  "tds",
      -  "ey_pct",
      -  "water_id",
      -  "vessel_name",
      -  "vessel_weight_g",
      -  "favourite",
      -  "best_brew",
      -  "tasted",
      -  "bean_name",
      -  "taste_pending"
      -]New value: +[
      +  "id",
      +  "pulled_at",
      +  "bean_id",
      +  "grinder_id",
      +  "machine_id",
      +  "program_id",
      +  "grind_label",
      +  "grind_components",
      +  "grind_position_value",
      +  "dose_g",
      +  "yield_g",
      +  "time_s",
      +  "flow_rate_gps",
      +  "finish_action",
      +  "drink_intent",
      +  "flavor_notes",
      +  "sensory_tags",
      +  "observations",
      +  "temp_taste",
      +  "rating",
      +  "verdict",
      +  "data_confidence",
      +  "temperature_c",
      +  "bloom_time_s",
      +  "first_drip_time_s",
      +  "beverage_g",
      +  "tds",
      +  "ey_pct",
      +  "water_id",
      +  "vessel_name",
      +  "vessel_weight_g",
      +  "favourite",
      +  "best_brew",
      +  "tasted",
      +  "bag_id",
      +  "bean_name",
      +  "taste_pending"
      +]
  6. Changed1 schema field changed
    • addedOutput schema / properties / shots / items
      Added value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "bean_id": {
      +      "type": "integer"
      +    },
      +    "bean_name": {
      +      "type": "string"
      +    },
      +    "best_brew": {
      +      "type": "integer"
      +    },
      +    "beverage_g": {
      +      "type": "null"
      +    },
      +    "bloom_time_s": {
      +      "type": "null"
      +    },
      +    "data_confidence": {
      +      "type": "string"
      +    },
      +    "dose_g": {
      +      "type": "integer"
      +    },
      +    "drink_intent": {
      +      "type": "string"
      +    },
      +    "ey_pct": {
      +      "type": "null"
      +    },
      +    "favourite": {
      +      "type": "integer"
      +    },
      +    "finish_action": {
      +      "type": "string"
      +    },
      +    "first_drip_time_s": {
      +      "type": "null"
      +    },
      +    "flavor_notes": {
      +      "type": "string"
      +    },
      +    "flow_rate_gps": {
      +      "type": "number"
      +    },
      +    "grind_components": {
      +      "type": "string"
      +    },
      +    "grind_label": {
      +      "type": "string"
      +    },
      +    "grind_position_value": {
      +      "type": "integer"
      +    },
      +    "grinder_id": {
      +      "type": "integer"
      +    },
      +    "id": {
      +      "type": "integer"
      +    },
      +    "machine_id": {
      +      "type": "integer"
      +    },
      +    "observations": {
      +      "type": "string"
      +    },
      +    "program_id": {
      +      "type": "null"
      +    },
      +    "pulled_at": {
      +      "type": "string"
      +    },
      +    "rating": {
      +      "type": "null"
      +    },
      +    "sensory_tags": {
      +      "type": "string"
      +    },
      +    "taste_pending": {
      +      "type": "integer"
      +    },
      +    "tasted": {
      +      "type": "integer"
      +    },
      +    "tds": {
      +      "type": "null"
      +    },
      +    "temp_taste": {
      +      "type": "string"
      +    },
      +    "temperature_c": {
      +      "type": "null"
      +    },
      +    "time_s": {
      +      "type": "integer"
      +    },
      +    "verdict": {
      +      "type": "null"
      +    },
      +    "vessel_name": {
      +      "type": "null"
      +    },
      +    "vessel_weight_g": {
      +      "type": "null"
      +    },
      +    "water_id": {
      +      "type": "null"
      +    },
      +    "yield_g": {
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "pulled_at",
      +    "bean_id",
      +    "grinder_id",
      +    "machine_id",
      +    "program_id",
      +    "grind_label",
      +    "grind_components",
      +    "grind_position_value",
      +    "dose_g",
      +    "yield_g",
      +    "time_s",
      +    "flow_rate_gps",
      +    "finish_action",
      +    "drink_intent",
      +    "flavor_notes",
      +    "sensory_tags",
      +    "observations",
      +    "temp_taste",
      +    "rating",
      +    "verdict",
      +    "data_confidence",
      +    "temperature_c",
      +    "bloom_time_s",
      +    "first_drip_time_s",
      +    "beverage_g",
      +    "tds",
      +    "ey_pct",
      +    "water_id",
      +    "vessel_name",
      +    "vessel_weight_g",
      +    "favourite",
      +    "best_brew",
      +    "tasted",
      +    "bean_name",
      +    "taste_pending"
      +  ],
      +  "type": "object"
      +}
  7. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "properties": {
      +    "shots": {
      +      "type": "array"
      +    },
      +    "total": {
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "shots",
      +    "total"
      +  ],
      +  "type": "object"
      +}
  8. Changed1 schema field changed
    • addedInput schema / properties / filters / properties / taste_pending
      Added value: +{
      +  "description": "1 = shots logged without sensory tags, a rating, or the tasted flip (tasting still owed); 0 = tasted shots",
      +  "enum": [
      +    0,
      +    1
      +  ],
      +  "type": "integer"
      +}
  9. First observed

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is fully covered by structured data. The description adds the semantics of the derived taste_pending flag, but that same definition already appears in the schema's taste_pending filter description, so the added value is modest.

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?

Two tight sentences, purpose front-loaded before the derived-flag detail, with no filler. Slightly long on the taste_pending aside, which duplicates schema text.

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?

An output schema exists, so return shape need not be described. For a zero-required-parameter read-only list tool, purpose, pagination, filtering and the one non-obvious derived field are all covered; only the absence of guidance on choosing between list tools leaves a gap.

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 67%, with limit/offset and all filter fields self-documented in the schema. The description adds nothing about filter syntax, date-format edge cases, or how limit/offset interact, so it does not compensate for the remaining uncovered parameters.

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

Purpose4/5

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

States a specific verb+resource ('List shot history') and names its two capabilities (pagination, filtering), which cleanly separates it from mutation siblings like log_shot/update_shot and from aggregate tools like get_stats. It stops short of explicitly contrasting with the closest alternatives (get_dial_state, list_recipes), so it is not a 5.

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

Usage Guidelines3/5

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

The description implies usage through the taste_pending explanation and points to update_shot for backfilling owed tastings, which is genuinely useful routing. However it never states when to prefer this over get_stats or get_dial_state, and gives no exclusions or prerequisites.

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