Skip to main content
Glama

craft

Queue a crafting job (auto-routes to your own/faction facility, or hand-crafts at the Station Workshop) (Must be docked. Ordinary recipes require crafting and storage service; package recipes use the rules described below. Crafting is no longer instant: it queues a job that runs over subsequent ticks (check progress by calling craft with no recipe_id). You do NOT need to poll: each tick a job deposits finished output you get a 'crafting_update' notification (category 'crafting' in get_notifications) naming exactly what was made and where, with runs_remaining and a completed flag — so re-issuing the same craft because 'nothing happened yet' only stacks a duplicate job. 'quantity' is the number of OUTPUT ITEMS you want, rounded up to a whole number of production runs (a recipe that yields several items per run may make a few extra). Materials are escrowed from your station storage at enqueue (NOT cargo) and outputs are delivered to station storage on completion — deposit your inputs to storage first. Auto-routing defaults to preset "fast": it picks the soonest finish across your OWN, your FACTION's, ALLIED-granted (free to you, queued at external priority), and — for facility-only recipes — public facilities. Ownership only breaks ties, so it can pick another player's public facility over your own idle one, and a public route prepays that facility's per-run rental fee. Pass preset "prefer_own" to stay on your own/faction/ally-granted facility and rent a public one only when none can run it, "cheap" (lowest fee you would actually pay — own and faction facilities are free to you, so they always win), "workshop" to force hand-crafting at the Station Workshop (speed scales with crafting/refining skill; also the fallback when no facility is available), or facility_id to target one. The Station Workshop is hand-crafting (your own labor, not the station's facility): its jobs advance only while you stay docked at that base and pause if you undock, resuming when you return — whereas a job at a real production facility you own or rent keeps running while you're away. deliver_to=faction crafts from/to faction storage (needs manage treasury permission), and deliver_to=faction: pulls inputs from and deposits outputs into a specific faction Storage Extension bucket; and if you leave deliver_to off and your own storage/credits can't cover the job, it automatically draws from your faction's storage/treasury when you're allowed to spend them. Renting another player's public facility prepays a per-run fee. COST CHECK: add dry_run=true to get a quote — the materials, labor, and rental fee the job would cost, the venue it auto-routes to, whether you can afford it, and the ETA — without queuing or spending anything (not supported with bulk jobs). Use 'recycle' to reverse a recipe at a recycler. BULK: pass jobs=[{recipe_id, quantity, facility_id?, preset?, deliver_to?, source?, package_ids?, output_package_label?}, ...] to queue many crafts in one action (up to 50 facilities at once instead of one job per tick) — each entry is queued independently and the response reports per-job success/failure. Each entry accepts the same package_ids (source inputs from packages) and output_package_label (seal outputs into a new package) fields as a single craft. QUEUE & CANCEL: call craft with no recipe_id to list your queued jobs, their IDs, and each job's current deliver_to — that is the portable form and it works on every transport. (The legacy WebSocket v1 payload also accepts an explicit "action":"queue" field, but the v2 REST/MCP/WebSocket transports reserve "action" for routing and strip it from the request body — which is why it is absent from the v2 request schema — so a v2 request that sets it alongside a recipe_id queues a craft instead of listing.) Pass job_id= to cancel a queued job and refund its unconsumed inputs, labor, and fees (the same operation as facility action=job_cancel). Pass job_ids=[id1,id2,...] to cancel several at once (per-job success/failure). RETARGET: pass job_id= together with deliver_to=<storage|faction|faction:bucket> to redirect a queued or running job's REMAINING output to a different store at the same station without cancelling it — the recipe, quantity, source, escrow, cost, venue, ETA, and queue position are all unchanged, and runs already delivered stay where they landed. Only the job's own orderer may retarget it (a facility owner may cancel a rental order but not redirect its output), the new destination is permission-checked exactly as it is at queue time, and pack_package/unpack_package jobs cannot be retargeted. PACKAGE INPUTS/OUTPUT: package_ids=[...] sources the craft's inputs from those packages (raw id or package:) instead of loose storage — they must all sit in the source location and their pooled contents must equal the recipe inputs times quantity EXACTLY (no shortage or overage, no storage backfill), or it's rejected before anything is consumed. output_package_label="..." holds the outputs and, on completion, seals the whole job's output into one new package with that label in the destination, consuming one cargo_container; cancelling instead refunds the inputs with no package. The package id is pre-generated: both the queue response and the completion crafting_update return output_package_id, so you never need to poll storage to find the sealed package. Both need an accessible Logistics facility (your own, your faction's, a public rental, or a station-owned one), and with output_package_label the total output must fit one package (size <= 100). Add dry_run=true to preview a packaged craft — it reports the exact inputs and cost, the output package it would seal, and whether every gate (exact match, Logistics, a container, single-package size, destination room) would pass, without consuming anything. Not supported with bulk jobs. PACKAGE RECIPES: recipe_id=pack_package takes items, label, source, and target; it consumes one cargo_container, packs at most 100 total item size, and requires Logistics. recipe_id=unpack_package takes package_id, source, and target; A Logistics facility is fast, returns the container, and uses that facility's normal access/rental rules without requiring the station's generic crafting service. preset="workshop" is much slower, consumes the container, and requires the station's crafting service. source/target accept storage, cargo, faction, or faction:; target defaults to source (deliver_to is an alias). Package jobs use this same queue and job_id cancellation.)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
jobsNoBulk mode: queue many crafts in one action. Each entry accepts the same input-sourcing and output-packaging fields as a single craft — package_ids to source inputs from packages, output_package_label to seal outputs into a new package — plus items, package_id, label, and target. Each job commits independently with partial success. Max 50.
countNoAlias for quantity (used when quantity is not set).
itemsNoFor pack_package: selected items to pack; total unpacked size may not exceed 100.
labelNoFor pack_package: player-authored package label.
actionNoUse action='queue' to list your current crafting jobs instead of queuing a new one, action='cancel' to cancel the job named by job_id (passing a bare job_id implies cancel too), or action='retarget' to send the job named by job_id somewhere else (job_id + deliver_to implies retarget too).
job_idNoAct on this queued job instead of crafting. Call craft with no recipe_id to list your job IDs. job_id alone cancels it (refunding its unconsumed inputs, labor, and rental fee); job_id together with deliver_to instead redirects the job's REMAINING output to that destination, keeping its recipe, runs, escrow, cost, and queue position.
presetNoAuto-routing preset. 'fast' (default) picks the soonest finish across your own, faction, ally-granted, and (for facility-only recipes) public facilities; ownership only breaks ties, so it can pick another player's public facility over your own idle one, and a public route prepays that facility's per-run rental fee. 'cheap' picks the lowest fee you would actually pay — your own and your faction's facilities are free to you, so they always win. 'prefer_own' keeps the job on your own (then faction, then ally-granted) facility and only rents a public one when you have none that can run it. With no facility at all, jobs hand-craft at the Station Workshop; 'workshop' forces hand-crafting even when you have a facility.
sourceNoWhere inputs and labor/rental credits are pulled FROM. Same values as deliver_to: 'storage', 'faction', or 'faction:<bucket>'. Defaults to deliver_to, so inputs and outputs share one store unless you set them differently — e.g. source='storage' deliver_to='faction:Crafting' pulls from your personal storage and deposits into a faction bucket.
targetNoFor package recipes: output destination (storage, cargo, faction, or faction:<bucket>); defaults to source. deliver_to is accepted as an alias.
dry_runNoReturn a cost+time quote (materials, labor, rental fee, auto-routed venue, ETA) without queuing or spending anything. Not supported with bulk jobs.
job_idsNoBulk cancel: cancel many queued jobs in one action. Each ID is cancelled independently with per-job success/failure, so one bad ID doesn't sink the batch. Refunds the unconsumed escrow of every cancelled job.
quantityNoNumber of output items to make (default 1). Rounded up to a whole number of production runs, so a recipe that yields several items per run may produce a few extra.
recipe_idNoRecipe ID to craft (use catalog with type=recipes to see available recipes). Inputs are escrowed from station storage at enqueue.
deliver_toNoOutput destination: 'storage' (default), 'faction' (faction main store — requires manage treasury permission), or 'faction:<bucket name or id>' for a specific faction Storage Extension bucket. Pass it alongside job_id to redirect an ALREADY QUEUED job's remaining output there instead of queuing anything new.
package_idNoFor unpack_package: package instance ID to unpack.
session_idYesYour session ID from login/register
facility_idNoRoute to a specific facility ID (overrides auto-selection).
package_idsNoSource this craft's inputs from these packages (raw id or 'package:<id>' form) instead of loose storage items. The packages must all sit in the resolved source location, and their pooled contents must equal the recipe inputs (× quantity) EXACTLY — any shortage or overage is rejected before anything is consumed (no storage/cargo backfill). Their empty cargo_containers are reclaimed only when an accessible Logistics facility is present.
output_package_labelNoBundle the outputs into one package: instead of depositing outputs loose per run, the job holds them and seals them into a single new package with this label in the destination on completion, consuming one cargo_container. Requires an accessible Logistics facility, and the total output size across all runs must fit one package (<= 100). Cancelling refunds the inputs and produces no package.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / preset / description
      Previous value: -"Auto-routing preset: 'fast' (fewest ticks, default) picks the best facility globally, so a busy own facility may route to an idle public rental. 'cheap' picks the lowest fee you would actually pay — your own and your faction's facilities are free to you, so they always win. Use 'prefer_own' to keep the job on your own (then faction, then ally-granted) facility and only rent a public one when you have none that can run it. Auto-routing otherwise prefers your own facility, then your faction's, then one an allied faction has granted you access to (free to you, but queued at external priority), then a public rental, and only hand-crafts at the Station Workshop if none is available. Use 'workshop' to force hand-crafting even when you have a facility."New value: +"Auto-routing preset. 'fast' (default) picks the soonest finish across your own, faction, ally-granted, and (for facility-only recipes) public facilities; ownership only breaks ties, so it can pick another player's public facility over your own idle one, and a public route prepays that facility's per-run rental fee. 'cheap' picks the lowest fee you would actually pay — your own and your faction's facilities are free to you, so they always win. 'prefer_own' keeps the job on your own (then faction, then ally-granted) facility and only rents a public one when you have none that can run it. With no facility at all, jobs hand-craft at the Station Workshop; 'workshop' forces hand-crafting even when you have a facility."
  2. Added
  3. Removed
  4. Changed1 schema field changed
    • changedInput schema / properties / job_id / description
      Previous value: -"Act on this queued job instead of crafting. Use action='queue' to list your job IDs. job_id alone cancels it (refunding its unconsumed inputs, labor, and rental fee); job_id together with deliver_to instead redirects the job's REMAINING output to that destination, keeping its recipe, runs, escrow, cost, and queue position."New value: +"Act on this queued job instead of crafting. Call craft with no recipe_id to list your job IDs. job_id alone cancels it (refunding its unconsumed inputs, labor, and rental fee); job_id together with deliver_to instead redirects the job's REMAINING output to that destination, keeping its recipe, runs, escrow, cost, and queue position."
  5. Changed4 schema fields changed
    • changedInput schema / properties / action / description
      Previous value: -"Use action='queue' to list your current crafting jobs instead of queuing a new one, or action='cancel' to cancel the job named by job_id (passing a bare job_id implies cancel too)."New value: +"Use action='queue' to list your current crafting jobs instead of queuing a new one, action='cancel' to cancel the job named by job_id (passing a bare job_id implies cancel too), or action='retarget' to send the job named by job_id somewhere else (job_id + deliver_to implies retarget too)."
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "queue",
      -  "cancel"
      -]New value: +[
      +  "queue",
      +  "cancel",
      +  "retarget"
      +]
    • changedInput schema / properties / deliver_to / description
      Previous value: -"Output destination: 'storage' (default), 'faction' (faction main store — requires manage treasury permission), or 'faction:<bucket name or id>' for a specific faction Storage Extension bucket."New value: +"Output destination: 'storage' (default), 'faction' (faction main store — requires manage treasury permission), or 'faction:<bucket name or id>' for a specific faction Storage Extension bucket. Pass it alongside job_id to redirect an ALREADY QUEUED job's remaining output there instead of queuing anything new."
    • changedInput schema / properties / job_id / description
      Previous value: -"Cancel this queued job (refunding its unconsumed inputs, labor, and rental fee) instead of crafting. Use action='queue' to list your job IDs. Setting job_id implies cancel."New value: +"Act on this queued job instead of crafting. Use action='queue' to list your job IDs. job_id alone cancels it (refunding its unconsumed inputs, labor, and rental fee); job_id together with deliver_to instead redirects the job's REMAINING output to that destination, keeping its recipe, runs, escrow, cost, and queue position."
  6. Changed20 schema fields changed
    • addedInput schema / properties / action
      Added value: +{
      +  "description": "Use action='queue' to list your current crafting jobs instead of queuing a new one, or action='cancel' to cancel the job named by job_id (passing a bare job_id implies cancel too).",
      +  "enum": [
      +    "queue",
      +    "cancel"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / count
      Added value: +{
      +  "description": "Alias for quantity (used when quantity is not set).",
      +  "type": "integer"
      +}
    • changedInput schema / properties / deliver_to / description
      Previous value: -"Where to deliver crafted items: 'cargo' (default), 'storage' (station storage), or 'faction' (faction storage — requires Faction Workshop facility and manage treasury permission; inputs also come from faction storage)."New value: +"Output destination: 'storage' (default), 'faction' (faction main store — requires manage treasury permission), or 'faction:<bucket name or id>' for a specific faction Storage Extension bucket."
    • removedInput schema / properties / deliver_to / enum
      Removed value: -[
      -  "cargo",
      -  "storage",
      -  "faction"
      -]
    • addedInput schema / properties / dry_run
      Added value: +{
      +  "description": "Return a cost+time quote (materials, labor, rental fee, auto-routed venue, ETA) without queuing or spending anything. Not supported with bulk jobs.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / facility_id
      Added value: +{
      +  "description": "Route to a specific facility ID (overrides auto-selection).",
      +  "type": "string"
      +}
    • addedInput schema / properties / items
      Added value: +{
      +  "description": "For pack_package: selected items to pack; total unpacked size may not exceed 100.",
      +  "items": {
      +    "properties": {
      +      "item_id": {
      +        "type": "string"
      +      },
      +      "quantity": {
      +        "minimum": 1,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "item_id",
      +      "quantity"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / job_id
      Added value: +{
      +  "description": "Cancel this queued job (refunding its unconsumed inputs, labor, and rental fee) instead of crafting. Use action='queue' to list your job IDs. Setting job_id implies cancel.",
      +  "type": "string"
      +}
    • addedInput schema / properties / job_ids
      Added value: +{
      +  "description": "Bulk cancel: cancel many queued jobs in one action. Each ID is cancelled independently with per-job success/failure, so one bad ID doesn't sink the batch. Refunds the unconsumed escrow of every cancelled job.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / jobs
      Added value: +{
      +  "description": "Bulk mode: queue many crafts in one action. Each entry accepts the same input-sourcing and output-packaging fields as a single craft — package_ids to source inputs from packages, output_package_label to seal outputs into a new package — plus items, package_id, label, and target. Each job commits independently with partial success. Max 50.",
      +  "items": {
      +    "properties": {
      +      "deliver_to": {
      +        "type": "string"
      +      },
      +      "facility_id": {
      +        "type": "string"
      +      },
      +      "items": {
      +        "items": {
      +          "properties": {
      +            "item_id": {
      +              "type": "string"
      +            },
      +            "quantity": {
      +              "minimum": 1,
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "item_id",
      +            "quantity"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "label": {
      +        "maxLength": 255,
      +        "type": "string"
      +      },
      +      "output_package_label": {
      +        "description": "Seal this entry's outputs into a single new package with this label on completion, consuming one cargo_container. Requires an accessible Logistics facility; total output must fit one package (<= 100).",
      +        "maxLength": 255,
      +        "type": "string"
      +      },
      +      "package_id": {
      +        "type": "string"
      +      },
      +      "package_ids": {
      +        "description": "Source this entry's inputs from these packages (raw id or 'package:<id>' form) instead of loose storage. Pooled contents must equal the recipe inputs (× quantity) EXACTLY, with no storage/cargo backfill.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "preset": {
      +        "type": "string"
      +      },
      +      "quantity": {
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "recipe_id": {
      +        "type": "string"
      +      },
      +      "source": {
      +        "type": "string"
      +      },
      +      "target": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "recipe_id"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / label
      Added value: +{
      +  "description": "For pack_package: player-authored package label.",
      +  "maxLength": 255,
      +  "type": "string"
      +}
    • addedInput schema / properties / output_package_label
      Added value: +{
      +  "description": "Bundle the outputs into one package: instead of depositing outputs loose per run, the job holds them and seals them into a single new package with this label in the destination on completion, consuming one cargo_container. Requires an accessible Logistics facility, and the total output size across all runs must fit one package (<= 100). Cancelling refunds the inputs and produces no package.",
      +  "maxLength": 255,
      +  "type": "string"
      +}
    • addedInput schema / properties / package_id
      Added value: +{
      +  "description": "For unpack_package: package instance ID to unpack.",
      +  "type": "string"
      +}
    • addedInput schema / properties / package_ids
      Added value: +{
      +  "description": "Source this craft's inputs from these packages (raw id or 'package:<id>' form) instead of loose storage items. The packages must all sit in the resolved source location, and their pooled contents must equal the recipe inputs (× quantity) EXACTLY — any shortage or overage is rejected before anything is consumed (no storage/cargo backfill). Their empty cargo_containers are reclaimed only when an accessible Logistics facility is present.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / preset
      Added value: +{
      +  "description": "Auto-routing preset: 'fast' (fewest ticks, default) picks the best facility globally, so a busy own facility may route to an idle public rental. 'cheap' picks the lowest fee you would actually pay — your own and your faction's facilities are free to you, so they always win. Use 'prefer_own' to keep the job on your own (then faction, then ally-granted) facility and only rent a public one when you have none that can run it. Auto-routing otherwise prefers your own facility, then your faction's, then one an allied faction has granted you access to (free to you, but queued at external priority), then a public rental, and only hand-crafts at the Station Workshop if none is available. Use 'workshop' to force hand-crafting even when you have a facility.",
      +  "enum": [
      +    "fast",
      +    "cheap",
      +    "prefer_own",
      +    "workshop"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / quantity / description
      Previous value: -"Number of times to craft (1-10, default 1). Batch craft to save actions. If cargo is full, crafted items overflow to station storage."New value: +"Number of output items to make (default 1). Rounded up to a whole number of production runs, so a recipe that yields several items per run may produce a few extra."
    • changedInput schema / properties / recipe_id / description
      Previous value: -"Recipe ID to craft (use catalog with type=recipes to see available recipes). Materials are pulled from cargo first, then station storage if available."New value: +"Recipe ID to craft (use catalog with type=recipes to see available recipes). Inputs are escrowed from station storage at enqueue."
    • addedInput schema / properties / source
      Added value: +{
      +  "description": "Where inputs and labor/rental credits are pulled FROM. Same values as deliver_to: 'storage', 'faction', or 'faction:<bucket>'. Defaults to deliver_to, so inputs and outputs share one store unless you set them differently — e.g. source='storage' deliver_to='faction:Crafting' pulls from your personal storage and deposits into a faction bucket.",
      +  "type": "string"
      +}
    • addedInput schema / properties / target
      Added value: +{
      +  "description": "For package recipes: output destination (storage, cargo, faction, or faction:<bucket>); defaults to source. deliver_to is accepted as an alias.",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "session_id",
      -  "recipe_id"
      -]New value: +[
      +  "session_id"
      +]
  7. Changed1 schema field changed
    • addedInput schema / properties / deliver_to
      Added value: +{
      +  "description": "Where to deliver crafted items: 'cargo' (default), 'storage' (station storage), or 'faction' (faction storage — requires Faction Workshop facility and manage treasury permission; inputs also come from faction storage).",
      +  "enum": [
      +    "cargo",
      +    "storage",
      +    "faction"
      +  ],
      +  "type": "string"
      +}
  8. Changed2 schema fields changed
    • removedInput schema / properties / count
      Removed value: -{
      -  "description": "Number of times to craft (1-10, default 1). Batch craft to save actions. If cargo is full, crafted items overflow to station storage.",
      -  "type": "integer"
      -}
    • addedInput schema / properties / quantity
      Added value: +{
      +  "description": "Number of times to craft (1-10, default 1). Batch craft to save actions. If cargo is full, crafted items overflow to station storage.",
      +  "type": "integer"
      +}
  9. Changed1 schema field changed
    • changedInput schema / properties / recipe_id / description
      Previous value: -"Recipe ID to craft (use get_recipes to see available recipes). Materials are pulled from cargo first, then station storage if available."New value: +"Recipe ID to craft (use catalog with type=recipes to see available recipes). Materials are pulled from cargo first, then station storage if available."
  10. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false, so the description carries nearly the whole burden, and it delivers: escrow from station storage at enqueue, tick-based job progress, a crafting_update notification with runs_remaining/completed, workshop jobs pausing on undock, permission checks on retarget, and refunds on cancel. It loses a point for one internal inconsistency — it claims 'action' is 'absent from the v2 request schema' while the schema actually exposes an 'action' enum.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The primary purpose is front-loaded in the first clause, but the remainder is a single enormous parenthetical wall of text mixing queue, cancel, retarget, bulk, dry-run, and package recipes. Substantively dense but structurally unparseable, with heavy repetition of the same rules between schema and description.

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?

For a 19-parameter tool with no output schema, the description covers modes, prerequisites (must be docked, storage/Logistics requirements), cost preview via dry_run, per-job bulk results, and the completion notification payload. An agent has enough to invoke the right mode correctly in essentially every case.

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 real cross-parameter semantics: quantity rounds up to whole runs and may over-produce, source defaults to deliver_to (with a worked example), preset trade-offs between own/faction/ally/public facilities, and the exact-match rule for package_ids. Much of it still mirrors schema text, so it does not reach the top.

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?

Opens with a concrete verb+resource ('Queue a crafting job') and immediately scopes the auto-routing behavior. It also names siblings and their roles ('Use recycle to reverse a recipe', 'check progress by calling craft with no recipe_id'), so an agent can tell it apart from recycle/catalog without opening schemas.

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?

Explicitly covers alternatives and conditions: no recipe_id lists jobs, job_id cancels, job_id+deliver_to retargets, recycle is for reversing, preset values select routing, dry_run gives a quote, jobs=[...] is bulk mode, and pack/unpack recipes use specific fields. When-to-use and when-to-redirect is spelled out, not implied.

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