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

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

Output 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.9/5.0
Behavior4/5

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

Annotations already declare a safe, idempotent read, so the description correctly spends its words elsewhere: it discloses that taste_pending is a derived flag and defines precisely what makes it 1. It does not state default sort order or whether filtering combines with AND, which are meaningful behavioral details for a list tool.

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 sentences, front-loaded with capability and then the derived-field explanation. The taste_pending parenthetical is dense but every clause adds information an agent cannot get from the name alone; no filler.

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?

With an output schema present, the description needn't explain return values, and annotations cover the safety profile. What remains thin is ordering and filter-composition behavior, but the core call-correctly information is present.

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 coverage is 67%, so the schema already carries most parameter meaning, including a taste_pending definition nearly identical to the description's. The description adds the actionable consequence (backfill via update_shot) but says nothing about how limit/offset behave at boundaries or how multiple filters compose. Baseline 3 fits.

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 and resource ("List shot history") plus the two capabilities that matter (pagination, filtering). It does not distinguish itself from neighbors like get_stats or diagnose_shot, but the resource is concrete enough that an agent can identify the tool's job.

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?

Gives clear context for use (history retrieval with pagination/filtering) and explicitly names update_shot as the path for backfilling an owed tasting, which is real routing guidance. No exclusion rules tell the agent when to prefer get_stats or diagnose_shot instead, keeping it below a 5.

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