Skip to main content
Glama
basis1: Excel engine for AI agents (formulas, recalculation, audit)

basis1: Excel engine for AI agents (formulas, recalculation, audit)

Official

Stream job output

stream_job
Read-only

Check or read a workbook parse job started by submit_job: return completed NDJSON records, wait up to 60 seconds, get status-only details, or skip already-read records with since.

Instructions

Check on or read a parse job started by submit_job. By default it returns the job's NDJSON records once it has completed: the same output parse_workbook returns, one JSON record per line. Pass wait_seconds (up to 60) to wait that long for a job still processing; if it is still processing after that, the call fails with job_not_ready, so call again. Pass status_only: true to get the status instead, without waiting: {job_id, status, created_at, updated_at, expires_at, bytes_in, records_out, stream_url, error}, where status is "processing", "completed" or "failed". A failed job returns its parse error, and an unknown or expired job_id, or one submitted with another API key, fails with not_found. Everything after since comes back in one result, with no paging; pass since to skip records you already have. parse_workbook returns its result directly and needs no job.

Input Schema

NameRequiredDescriptionDefault
sinceNoNumber of records to skip from the start (the 0-based index of the first record to return; default 0)
job_idYesJob ID returned by submit_job
status_onlyNoReturn the job's status instead of its records, without waiting (default false)
wait_secondsNoSeconds to wait for a job that is still processing (0-60, default 0: don't wait)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv0.3.2
    • changedInput schema / properties / since / description
      Previous value: -"Record index to resume from"New value: +"Number of records to skip from the start (the 0-based index of the first record to return; default 0)"
    • addedInput schema / properties / status_only
      Added value: +{
      +  "description": "Return the job's status instead of its records, without waiting (default false)",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / wait_seconds
      Added value: +{
      +  "description": "Seconds to wait for a job that is still processing (0-60, default 0: don't wait)",
      +  "maximum": 60,
      +  "minimum": 0,
      +  "type": "integer"
      +}
  2. First observedv0.3.1

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare readOnlyHint and openWorldHint; the description goes well beyond them with a wait ceiling of 60 seconds, the job_not_ready retry contract, the not_found condition for unknown, expired, or other-key jobs, and the fact that a failed job surfaces its parse error. It also discloses the no-paging model and the exact shape of the status payload.

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?

Purpose and default behavior are front-loaded before the parameter guidance, and each sentence carries distinct semantics. It is dense with semicolon-joined clauses, which makes it a slightly heavy read, but there is no filler or repetition.

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 no output schema, the description compensates by enumerating the status object fields and status values and by describing the record output as NDJSON. Error conditions and the absence of paging are both covered, which is everything an agent needs to call this correctly and interpret the result.

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 meaning the schema does not: it explains that 'since' skips already-seen records and that everything after it returns in one unpaged result, and it ties wait_seconds to the job_not_ready failure. Remaining schema-level details (0-based index, default 0) are already in the parameter descriptions, so this stops short of a 5.

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?

The opening sentence gives a specific verb and resource ('Check on or read a parse job started by submit_job') and immediately frames it against the sibling that created the job. It further distinguishes itself from parse_workbook by contrasting their output ('the same output parse_workbook returns') and their lifecycle ('parse_workbook returns its result directly and needs no job').

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?

It states the default behavior, when to pass wait_seconds, when to pass status_only, and when to skip this tool entirely in favor of parse_workbook. It also names the retry pattern explicitly ('if it is still processing after that, the call fails with job_not_ready, so call again'), leaving nothing to inference.

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