Skip to main content
Glama

counterpart_print_progress

Read-onlyIdempotent

Reads cached Bambu printer state and current job progress—percent, time left, layers, temperatures, filament, HMS messages—without querying the printer; reports offline if unreachable.

Instructions

Counterpart contract (counterpart/1): the printer's state, current job (name, task id, percent, time left, layers, stage words), temperatures, active filament and problems with Bambu's HMS messages and links. Read from the MQTT report this server keeps, so a held session asks the printer nothing; observedAt is when the printer sent it. An unreachable printer reports state offline. Read-only; not a safety check.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "counterpart_print_progress"
  }
}

Input Schema

NameRequiredDescriptionDefault
hostNoHostname or IP of the printer (default: value from env)
bambu_modelNoPrinter model; defaults to BAMBU_MODEL. Used for the chamber sensor and Bambu's per-model messages.
bambu_tokenNoAccess token (default: value from env)
bambu_serialNoSerial number (default: value from env)

Output Schema

NameRequiredDescriptionDefault
jobNo
stateYes
tempsNo
contractYes
problemsYes
observedAtYesWhen the printer reported this (MQTT report time), ISO 8601.
activeFilamentNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv1.1.51

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover readOnlyHint, idempotentHint and destructiveHint, so the safety profile is known. The description adds genuinely non-derivable behavior: data comes from a cached MQTT report rather than a live query, observedAt reflects when the printer sent it (a staleness signal), and an unreachable printer yields state 'offline' rather than an error. That is real added context beyond the annotations.

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-loads the contract identifier and the payload contents, then follows with operational caveats about caching and offline state. Dense but every clause carries information; the parenthetical field list is efficient. Slightly jargon-heavy ('counterpart/1', 'HMS', 'stage words') but not padded.

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 read tool with a rich output schema, the description need not explain return values, and it correctly fills the gaps that matter: data source, staleness semantics via observedAt, offline behavior, and read-only nature. The one missing piece is routing guidance versus the near-duplicate sibling status tools.

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 100% across all four parameters, so host, bambu_model, bambu_token and bambu_serial are already explained, including the env-var defaults. The description adds no parameter-level meaning of its own (e.g. whether host must match a live MQTT session), so the baseline 3 applies.

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?

Names the specific resource (counterpart/1 printer progress) and enumerates the contents: state, current job fields (name, task id, percent, time left, layers, stage words), temperatures, active filament, and HMS problems. That is a clear verb-plus-resource statement an agent can match to a 'what is the printer doing' need. It does not, however, distinguish itself from siblings like get_printer_status or counterpart_printer_info, which appear to cover overlapping ground.

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?

Provides useful context ('read from the MQTT report this server keeps, so a held session asks the printer nothing') that implicitly tells the agent when this is cheap to call, and adds a partial exclusion ('not a safety check'). But it never states when to prefer this over get_printer_status or counterpart_printer_info, so the agent must infer the choice from tool names.

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