Skip to main content
Glama

get_job

Read-only

Poll an async job: status, real engine stage, progress, ETA, result/error.

    Poll after poll_after_seconds until status is "succeeded" (result holds the full
    generate body) or "failed" (error holds the typed envelope). Only the owning
    account can read a job; a foreign/unknown id is not_found (no existence leak).
    Returns {job_id, status, stage, progress_pct, eta_seconds, elapsed_ms,
    poll_after_seconds, result, error}. Errors: unauthorized, not_found, rate_limited.
    

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
job_idYesThe job's id, as returned by start_generate_job (or by a generate_hooks call that auto-jobbed on deadline_ms). Account-scoped: an id you do not own reads as not_found.
api_keyNoAPI key for this call. Omit to fall back to the Authorization: Bearer / X-API-Key request header (streamable-HTTP only), then the VHGENGINE_API_KEY env var (the stdio default). No key resolvable -> unauthorized.
result_viewNoUse compact for source evidence and costs with less response text. Full preserves every audit receipt. Views never rerun or recharge research.full

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
errorNoOn failure: the same typed error envelope a synchronous call returns. details.cancelled true means YOU cancelled it with cancel_job, not a fault.
stageNoThe real engine stage while running (e.g. brief, draft, judge).
job_idNoThe job polled.
resultNoOn success: the FULL generate (or batch) body, always full-verbosity. At standard/full, a judge-ranked smart hook may also carry {shape, phone_test, say_it}; a judge-ranked research hook carries receipts {persona, shape, phone_test, say_it, pattern_source}. pattern_source is null when no measured opener was attributed, otherwise its nested provenance is the authoritative actual platform, source surface, transcript method, language, route, media, and origin-time record. Minimal keeps persona and shape, plus phone_test only when it is the warning value 'fail'. result_view=compact projects V1 research to source evidence, citations, limitations, cost and an execution summary. Full is the compatible default; changing views never executes research again. Other job types retain their existing body.
statusNoqueued (waiting on a worker), running, recovery_required (a hook-research V2 job fenced on ambiguous vendor settlement; operator recovery owns it), succeeded (see `result`), failed (see `error`). Stop polling on the last two.
elapsed_msNoMilliseconds since the job started running.
eta_secondsNoEstimated seconds remaining.
progress_pctNo0-100 progress within the run.
hook_instancesNoImmutable non-prose served-occurrence identities. Profile-bound queued/running work returns an empty list; a successful result returns one row per served hook.
poll_after_secondsNoHow long to wait before polling again.
resolved_creator_profileNoExact immutable creator-profile binding used by this occurrence. Null/absent for inline or unprofiled generation.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / result_view
      Added value: +{
      +  "default": "full",
      +  "description": "Use compact for source evidence and costs with less response text. Full preserves every audit receipt. Views never rerun or recharge research.",
      +  "enum": [
      +    "full",
      +    "compact"
      +  ],
      +  "title": "Result View",
      +  "type": "string"
      +}
    • changedOutput schema / properties / result / description
      Previous value: -"On success: the FULL generate (or batch) body, always full-verbosity. At standard/full, a judge-ranked smart hook may also carry {shape, phone_test, say_it}; a judge-ranked research hook carries receipts {persona, shape, phone_test, say_it, pattern_source}. pattern_source is null when no measured opener was attributed, otherwise its nested provenance is the authoritative actual platform, source surface, transcript method, language, route, media, and origin-time record. Minimal keeps persona and shape, plus phone_test only when it is the warning value 'fail'."New value: +"On success: the FULL generate (or batch) body, always full-verbosity. At standard/full, a judge-ranked smart hook may also carry {shape, phone_test, say_it}; a judge-ranked research hook carries receipts {persona, shape, phone_test, say_it, pattern_source}. pattern_source is null when no measured opener was attributed, otherwise its nested provenance is the authoritative actual platform, source surface, transcript method, language, route, media, and origin-time record. Minimal keeps persona and shape, plus phone_test only when it is the warning value 'fail'. result_view=compact projects V1 research to source evidence, citations, limitations, cost and an execution summary. Full is the compatible default; changing views never executes research again. Other job types retain their existing body."
  2. Changed1 schema field changed
    • changedOutput schema / properties / status / description
      Previous value: -"queued (waiting on a worker), running, succeeded (see `result`), failed (see `error`). Stop polling on the last two."New value: +"queued (waiting on a worker), running, recovery_required (a hook-research V2 job fenced on ambiguous vendor settlement; operator recovery owns it), succeeded (see `result`), failed (see `error`). Stop polling on the last two."
  3. Changed1 schema field changed
    • changedOutput schema / properties / result / description
      Previous value: -"On success: the FULL generate (or batch) body, always full-verbosity. At standard/full, a judge-ranked smart hook may also carry {shape, phone_test, say_it}; a judge-ranked research hook carries receipts {persona, shape, phone_test, say_it, pattern_source}. pattern_source is null when no measured opener was attributed, otherwise its nested provenance is the authoritative actual platform, language, route, media, and origin-time record. Minimal keeps persona and shape, plus phone_test only when it is the warning value 'fail'."New value: +"On success: the FULL generate (or batch) body, always full-verbosity. At standard/full, a judge-ranked smart hook may also carry {shape, phone_test, say_it}; a judge-ranked research hook carries receipts {persona, shape, phone_test, say_it, pattern_source}. pattern_source is null when no measured opener was attributed, otherwise its nested provenance is the authoritative actual platform, source surface, transcript method, language, route, media, and origin-time record. Minimal keeps persona and shape, plus phone_test only when it is the warning value 'fail'."
  4. Changed2 schema fields changed
    • addedOutput schema / properties / hook_instances
      Added value: +{
      +  "description": "Immutable non-prose served-occurrence identities. Profile-bound queued/running work returns an empty list; a successful result returns one row per served hook.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "commission_id": {
      +        "pattern": "^com_[0-9a-f]{24}$",
      +        "type": "string"
      +      },
      +      "hook_id": {
      +        "pattern": "^hook_[0-9a-f]{8}$",
      +        "type": "string"
      +      },
      +      "hook_instance_id": {
      +        "pattern": "^hki_[0-9a-f]{24}$",
      +        "type": "string"
      +      },
      +      "item_index": {
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "served_rank": {
      +        "minimum": 1,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "hook_instance_id",
      +      "hook_id",
      +      "commission_id",
      +      "item_index",
      +      "served_rank"
      +    ],
      +    "type": "object"
      +  },
      +  "type": [
      +    "array",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / resolved_creator_profile
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Exact immutable creator-profile binding used by this occurrence. Null/absent for inline or unprofiled generation.",
      +  "properties": {
      +    "commission_schema_version": {
      +      "const": 3,
      +      "type": "integer"
      +    },
      +    "profile_id": {
      +      "pattern": "^cpr_[0-9a-f]{24}$",
      +      "type": "string"
      +    },
      +    "profile_snapshot_schema_version": {
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "version": {
      +      "minimum": 1,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "profile_id",
      +    "version",
      +    "profile_snapshot_schema_version",
      +    "commission_schema_version"
      +  ],
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
  5. Changed1 schema field changed
    • changedOutput schema / properties / result / description
      Previous value: -"On success: the FULL generate (or batch) body, always full-verbosity."New value: +"On success: the FULL generate (or batch) body, always full-verbosity. At standard/full, a judge-ranked smart hook may also carry {shape, phone_test, say_it}; a judge-ranked research hook carries receipts {persona, shape, phone_test, say_it, pattern_source}. pattern_source is null when no measured opener was attributed, otherwise its nested provenance is the authoritative actual platform, language, route, media, and origin-time record. Minimal keeps persona and shape, plus phone_test only when it is the warning value 'fail'."
  6. Changed5 schema fields changed
    • addedInput schema / properties / api_key / description
      Added value: +"API key for this call. Omit to fall back to the Authorization: Bearer / X-API-Key request header (streamable-HTTP only), then the VHGENGINE_API_KEY env var (the stdio default). No key resolvable -> unauthorized."
    • addedInput schema / properties / job_id / description
      Added value: +"The job's id, as returned by start_generate_job (or by a generate_hooks call that auto-jobbed on deadline_ms). Account-scoped: an id you do not own reads as not_found."
    • addedOutput schema / description
      Added value: +"The live state of one async job, and its result once finished."
    • addedOutput schema / properties
      Added value: +{
      +  "elapsed_ms": {
      +    "description": "Milliseconds since the job started running.",
      +    "type": [
      +      "number",
      +      "null"
      +    ]
      +  },
      +  "error": {
      +    "description": "On failure: the same typed error envelope a synchronous call returns. details.cancelled true means YOU cancelled it with cancel_job, not a fault.",
      +    "type": [
      +      "object",
      +      "null"
      +    ]
      +  },
      +  "eta_seconds": {
      +    "description": "Estimated seconds remaining.",
      +    "type": [
      +      "number",
      +      "null"
      +    ]
      +  },
      +  "job_id": {
      +    "description": "The job polled.",
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "poll_after_seconds": {
      +    "description": "How long to wait before polling again.",
      +    "type": [
      +      "number",
      +      "null"
      +    ]
      +  },
      +  "progress_pct": {
      +    "description": "0-100 progress within the run.",
      +    "type": [
      +      "number",
      +      "null"
      +    ]
      +  },
      +  "result": {
      +    "description": "On success: the FULL generate (or batch) body, always full-verbosity.",
      +    "type": [
      +      "object",
      +      "null"
      +    ]
      +  },
      +  "stage": {
      +    "description": "The real engine stage while running (e.g. brief, draft, judge).",
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "status": {
      +    "description": "queued (waiting on a worker), running, succeeded (see `result`), failed (see `error`). Stop polling on the last two.",
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  }
      +}
    • removedOutput schema / title
      Removed value: -"get_jobDictOutput"
  7. Changed1 schema field changed
    • addedInput schema / additionalProperties
      Added value: +false
  8. First observed

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses account scoping and the deliberate not_found behavior for foreign ids ('no existence leak'), the terminal status semantics, the fixed error set (unauthorized, not_found, rate_limited), and the shape of the success payload. That is materially more than the annotations provide.

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?

Front-loaded one-line summary, then a tightly packed block covering the polling loop, authorization model, return shape and errors. No filler sentences; every clause carries new information.

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?

An output schema exists so return values need not be re-explained, yet the description still summarizes the payload and error envelopes. Combined with annotations and full schema coverage, an agent has everything needed to call and interpret this tool correctly.

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%, so job_id, api_key and result_view are already fully documented in the schema. The description adds no parameter-level detail beyond what the schema states, 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?

The first sentence gives a concrete verb and resource ('Poll an async job') plus the exact payload fields returned, so the agent immediately knows what the tool does. However, it never contrasts itself with the obvious sibling alternatives wait_for_job and list_jobs, which is the differentiation a 5 requires.

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?

Clear context is given: poll repeatedly using the returned poll_after_seconds until the status is 'succeeded' or 'failed'. Ownership rules are also stated. What is missing is the routing decision against wait_for_job (which presumably blocks server-side rather than requiring the caller to loop).

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