Skip to main content
Glama

Handover

handover
Idempotent

Call this when the user says 'wrap up this session', 'continue in another AI', or 'hand this over to '. For AI switching, create a resumable handoff with the same session. For client delivery, return one proof link with verifiable receipts. Pass continue_from to chain off a job you picked up. AER-1 receipt, verifiable offline.

Input Schema

NameRequiredDescriptionDefault
refNoOptional referral source to preserve as source_ref on the saved handover.
_refNoOptional handover referral ID from your install link.
goalNoThe objective this handover should help the recipient continue.
loopNoRun a proof loop. Defaults to true for jobs with at least two steps, false otherwise.
workNoPaste work to save as a supplied-work receipt, without claiming it was independently checked.
anchorNoWhether to request an optional external anchor for the handover receipt; defaults to true.
redactNoPrivacy settings for masking, hashing, or omitting selected fields.
shieldNoWhether to run the handover content shield check; defaults to true.
dry_runNoPreview the proposed handover without publishing it.
not_runNoChecks or actions that were not run as part of this work.
paymentNoOptional caller-supplied x402 payment metadata; it does not itself prove settlement.
sourcesNoReference URLs related to the work being handed over.
summaryNoConcise account of what has been completed so far.
brandingNoOptional display name, logo URL, and accent color for the handover page.
recipientNoDisplay name or label for the person, agent, or AI receiving this handover.Your recipient
thread_idNoOptional continuity thread ID to associate with this handover.
_zambo_keyNoOptional opaque Zambo access capability. Never place it in a URL or public log.
next_stepsNoOrdered, actionable steps for the recipient to continue the work.
step_areasNoWork-area labels mapped to receipt IDs; each entry identifies one receipt and its area.
visibilityNoWho can open the handover: public, unlisted by link, or private.public
_session_idNoOptional stable bot-job ID. Reuse it across calls to bind a Day Pass and keep the job ledger together.
not_checkedNoRelevant items that were not independently checked.
receipt_idsNoIDs of existing receipts to attach as evidence for the handed-over work.
client_prefsNoClient constraints to carry forward, such as areas where AI must not be used.
deliverablesNoNamed outputs to include, with an optional URL, content, or SHA-256 hash.
step_sourcesNoSources by original receipt ID. Reachability is checked by Zambo, not accuracy.
_caller_labelNoOptional caller label recorded as a caller-reported claim in the receipt.zambo-starter
allowed_toolsNoOptional tool names to allow for the recipient's continuation.
continue_fromNoChain off a handover picked up through handover_accept in this same job session.
_caller_handleNoOpaque anonymous continuity handle returned during initialize. Reuse it across MCP sessions; it is not payment authorization.
recipient_typeNoRecipient category: human, agent, or AI. Defaults to human.human
creator_payment_urlNoOptional creator-owned payment link shown to the client only after acceptance. Zambo does not hold or process this payment.
exclude_receipt_idsNoReceipt IDs to leave out of this handover.
_continuity_ai_labelNoOptional self-reported AI client label for the private continuity timeline. Zambo does not independently verify the client.
acknowledge_warningsNoPublish only after reviewing missing evidence or a failed/risky shield scan. Warning labels stay visible.

Output Schema

NameRequiredDescriptionDefault
okYes
idsYes
nextYes
tierNo
urlsYes
errorNo
graphNo
activeNo
resultYesThe tool's observed JSON value or plain-text result.
intentsNo
next_upNo
paymentNo
day_passNo
today_urlNo
expires_atNo
human_lineYes
next_stepsNo
daily_recapNo
renew_nudgeNo
unlock_linkNo
seconds_leftNo
resume_statusNo
resumed_resultNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed22 schema fields changed
    • addedInput schema / properties / allowed_tools / description
      Added value: +"Optional tool names to allow for the recipient's continuation."
    • addedInput schema / properties / anchor / description
      Added value: +"Whether to request an optional external anchor for the handover receipt; defaults to true."
    • addedInput schema / properties / branding / description
      Added value: +"Optional display name, logo URL, and accent color for the handover page."
    • addedInput schema / properties / client_prefs / description
      Added value: +"Client constraints to carry forward, such as areas where AI must not be used."
    • addedInput schema / properties / deliverables / description
      Added value: +"Named outputs to include, with an optional URL, content, or SHA-256 hash."
    • addedInput schema / properties / dry_run / description
      Added value: +"Preview the proposed handover without publishing it."
    • addedInput schema / properties / exclude_receipt_ids / description
      Added value: +"Receipt IDs to leave out of this handover."
    • addedInput schema / properties / goal / description
      Added value: +"The objective this handover should help the recipient continue."
    • addedInput schema / properties / next_steps / description
      Added value: +"Ordered, actionable steps for the recipient to continue the work."
    • addedInput schema / properties / not_checked / description
      Added value: +"Relevant items that were not independently checked."
    • addedInput schema / properties / not_run / description
      Added value: +"Checks or actions that were not run as part of this work."
    • addedInput schema / properties / payment / description
      Added value: +"Optional caller-supplied x402 payment metadata; it does not itself prove settlement."
    • addedInput schema / properties / receipt_ids / description
      Added value: +"IDs of existing receipts to attach as evidence for the handed-over work."
    • addedInput schema / properties / recipient / description
      Added value: +"Display name or label for the person, agent, or AI receiving this handover."
    • addedInput schema / properties / recipient_type / description
      Added value: +"Recipient category: human, agent, or AI. Defaults to human."
    • addedInput schema / properties / redact / description
      Added value: +"Privacy settings for masking, hashing, or omitting selected fields."
    • addedInput schema / properties / shield / description
      Added value: +"Whether to run the handover content shield check; defaults to true."
    • addedInput schema / properties / sources / description
      Added value: +"Reference URLs related to the work being handed over."
    • addedInput schema / properties / step_areas / description
      Added value: +"Work-area labels mapped to receipt IDs; each entry identifies one receipt and its area."
    • addedInput schema / properties / summary / description
      Added value: +"Concise account of what has been completed so far."
    • addedInput schema / properties / thread_id / description
      Added value: +"Optional continuity thread ID to associate with this handover."
    • addedInput schema / properties / visibility / description
      Added value: +"Who can open the handover: public, unlisted by link, or private."
  2. Changed1 schema field changed
    • changedInput schema / properties / recipient_type / enum
      Previous value: -[
      -  "human",
      -  "agent"
      -]New value: +[
      +  "human",
      +  "agent",
      +  "ai"
      +]
  3. Changed2 schema fields changed
    • addedInput schema / properties / _caller_handle
      Added value: +{
      +  "description": "Opaque anonymous continuity handle returned during initialize. Reuse it across MCP sessions; it is not payment authorization.",
      +  "maxLength": 64,
      +  "type": "string"
      +}
    • addedInput schema / properties / _caller_label / default
      Added value: +"zambo-starter"
  4. Changed1 schema field changed
    • changedOutput schema / properties / graph / properties / aer / const
      Previous value: -"draft-zambo-aer1-25"New value: +"draft-zambo-aer1-26"
  5. Changed1 schema field changed
    • changedOutput schema / properties / graph / properties / aer / const
      Previous value: -"draft-zambo-aer1-24"New value: +"draft-zambo-aer1-25"
  6. Changed2 schema fields changed
    • addedInput schema / properties / creator_payment_url
      Added value: +{
      +  "description": "Optional creator-owned payment link shown to the client only after acceptance. Zambo does not hold or process this payment.",
      +  "format": "uri",
      +  "maxLength": 2048,
      +  "type": "string"
      +}
    • changedOutput schema / properties / graph / properties / aer / const
      Previous value: -"draft-zambo-aer1-23"New value: +"draft-zambo-aer1-24"
  7. Changed1 schema field changed
    • addedInput schema / properties / ref
      Added value: +{
      +  "description": "Optional referral source to preserve as source_ref on the saved handover.",
      +  "maxLength": 200,
      +  "minLength": 1,
      +  "type": "string"
      +}
  8. Changed1 schema field changed
    • changedOutput schema / properties / graph / properties / aer / const
      Previous value: -"draft-zambo-aer1-22"New value: +"draft-zambo-aer1-23"
  9. Changed1 schema field changed
    • changedOutput schema / properties / graph / properties / aer / const
      Previous value: -"draft-zambo-aer1-21"New value: +"draft-zambo-aer1-22"
  10. Changed1 schema field changed
    • addedInput schema / properties / continue_from
      Added value: +{
      +  "description": "Chain off a handover picked up through handover_accept in this same job session.",
      +  "format": "uuid",
      +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$",
      +  "type": "string"
      +}
  11. Changed1 schema field changed
    • changedOutput schema / properties / graph / properties / aer / const
      Previous value: -"draft-zambo-aer1-20"New value: +"draft-zambo-aer1-21"
  12. Changed2 schema fields changed
    • addedInput schema / properties / sources
      Added value: +{
      +  "default": [],
      +  "items": {
      +    "anyOf": [
      +      {
      +        "format": "uri",
      +        "maxLength": 2048,
      +        "type": "string"
      +      },
      +      {
      +        "properties": {
      +          "ref": {
      +            "format": "uri",
      +            "maxLength": 2048,
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "ref"
      +        ],
      +        "type": "object"
      +      }
      +    ]
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
    • addedOutput schema / properties / next_steps
      Added value: +{
      +  "items": {},
      +  "minItems": 1,
      +  "type": "array"
      +}
  13. Changed16 schema fields changed
    • addedInput schema / properties / _ref
      Added value: +{
      +  "description": "Optional handover referral ID from your install link.",
      +  "format": "uuid",
      +  "type": "string"
      +}
    • addedInput schema / properties / client_prefs
      Added value: +{
      +  "properties": {
      +    "no_ai_for": {
      +      "default": [],
      +      "items": {
      +        "maxLength": 200,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "maxItems": 50,
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / loop
      Added value: +{
      +  "description": "Run a proof loop. Defaults to true for jobs with at least two steps, false otherwise.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / step_areas
      Added value: +{
      +  "default": [],
      +  "items": {
      +    "properties": {
      +      "area": {
      +        "maxLength": 200,
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "receipt_id": {
      +        "format": "uuid",
      +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "receipt_id",
      +      "area"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 500,
      +  "type": "array"
      +}
    • addedInput schema / properties / step_sources
      Added value: +{
      +  "default": [],
      +  "description": "Sources by original receipt ID. Reachability is checked by Zambo, not accuracy.",
      +  "items": {
      +    "properties": {
      +      "receipt_id": {
      +        "format": "uuid",
      +        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$",
      +        "type": "string"
      +      },
      +      "sources": {
      +        "items": {
      +          "properties": {
      +            "ref": {
      +              "maxLength": 2048,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "ref"
      +          ],
      +          "type": "object"
      +        },
      +        "maxItems": 20,
      +        "type": "array"
      +      }
      +    },
      +    "required": [
      +      "receipt_id",
      +      "sources"
      +    ],
      +    "type": "object"
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
    • changedOutput schema / additionalProperties
      Previous value: -falseNew value: +true
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": true,
      +  "anyOf": [
      +    {
      +      "required": [
      +        "next_call"
      +      ]
      +    },
      +    {
      +      "required": [
      +        "next_url"
      +      ]
      +    }
      +  ],
      +  "properties": {
      +    "code": {
      +      "type": "string"
      +    },
      +    "next_call": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "args": {
      +          "type": "object"
      +        },
      +        "tool": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "tool",
      +        "args"
      +      ],
      +      "type": "object"
      +    },
      +    "next_step": {
      +      "type": "string"
      +    },
      +    "next_url": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "next_step"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / graph
      Added value: +{
      +  "properties": {
      +    "aer": {
      +      "const": "draft-zambo-aer1-20"
      +    },
      +    "schema": {
      +      "const": "zambo.graph/1"
      +    }
      +  },
      +  "required": [
      +    "schema",
      +    "aer",
      +    "nodes",
      +    "edges",
      +    "retries",
      +    "sources",
      +    "summary"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / human_line / maxLength
      Added value: +200
    • addedOutput schema / properties / human_line / pattern
      Added value: +"^[^\\r\\n]*$"
    • addedOutput schema / properties / ids
      Added value: +{
      +  "additionalProperties": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / next
      Added value: +{
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedOutput schema / properties / ok
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / renew_nudge
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / urls
      Added value: +{
      +  "additionalProperties": {
      +    "type": "string"
      +  },
      +  "type": "object"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "result"
      -]New value: +[
      +  "result",
      +  "ok",
      +  "human_line",
      +  "next",
      +  "ids",
      +  "urls"
      +]
  14. Changed3 schema fields changed
    • addedInput schema / properties / recipient / default
      Added value: +"Your recipient"
    • addedInput schema / properties / work
      Added value: +{
      +  "description": "Paste work to save as a supplied-work receipt, without claiming it was independently checked.",
      +  "maxLength": 64000,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • removedInput schema / required
      Removed value: -[
      -  "recipient"
      -]
  15. Changed17 schema fields changed
    • addedInput schema / properties / allowed_tools
      Added value: +{
      +  "default": [],
      +  "items": {
      +    "maxLength": 120,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "maxItems": 150,
      +  "type": "array"
      +}
    • addedInput schema / properties / next_steps
      Added value: +{
      +  "default": [],
      +  "items": {
      +    "maxLength": 2000,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "maxItems": 10,
      +  "type": "array"
      +}
    • addedInput schema / properties / recipient_type
      Added value: +{
      +  "default": "human",
      +  "enum": [
      +    "human",
      +    "agent"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / active
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / daily_recap
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / day_pass
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / expires_at
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / human_line
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / intents
      Added value: +{
      +  "items": {
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / next_up
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / payment
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / resume_status
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / resumed_result
      Added value: +{
      +  "type": "object"
      +}
    • addedOutput schema / properties / seconds_left
      Added value: +{
      +  "type": [
      +    "number",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / tier
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / today_url
      Added value: +{
      +  "type": "string"
      +}
    • addedOutput schema / properties / unlock_link
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  16. Added

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare a non-read-only, idempotent, non-destructive, open-world write, so the safety profile is covered. The description adds that the result is one proof link backed by an AER-1 receipt verifiable offline, which is real value. It omits consequential behavior for a publishing tool: the default visibility is public, dry_run exists as a preview path, redaction/shield defaults apply, and acceptance gating is not mentioned.

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?

Four short sentences, front-loaded with the trigger conditions before the mode distinctions. Terminology like 'AER-1 receipt' is unglossed and the trailing 'verifiable offline' fragment is cryptic, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/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 explained, and the schema documents every parameter. But for a 35-parameter publishing tool with open-world effects, the description never mentions the public-visibility default, the dry_run preview, or privacy controls — an agent could publish sensitive data without the description warning it off.

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 35 parameters, so the schema carries parameter meaning and the baseline is 3. The description only adds semantics for continue_from ('chain off a job you picked up') and implicitly for session continuity; the other 34 parameters — redaction, visibility, payment, shield, dry_run — get no description-level framing.

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 resource (a handover) and two concrete modes: a resumable AI-to-AI handoff with the same session, and a client-facing proof link with verifiable receipts. An agent can distinguish the two output shapes without opening the schema. It stops short of naming sibling tools (handover_list, handover_status, handover_accept) to complete the routing picture.

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 literal user trigger phrases ('wrap up this session', 'continue in another AI', 'hand this over to <client>'), which is unusually concrete guidance, plus a condition for continue_from (chaining off a job picked up via handover_accept). It offers no exclusions and does not say when to prefer handover_list/status instead of creating one.

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.