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.

Input Schema

NameRequiredDescriptionDefault
refNoOptional referral source to preserve as source_ref on the saved handover.
_refNoOptional handover referral ID from your install link.
goalNo
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.
anchorNo
redactNo
shieldNo
dry_runNo
not_runNo
paymentNo
sourcesNo
summaryNo
brandingNo
recipientNoYour recipient
thread_idNo
_zambo_keyNoOptional opaque Zambo access capability. Never place it in a URL or public log.
next_stepsNo
step_areasNo
visibilityNopublic
_session_idNoOptional stable bot-job ID. Reuse it across calls to bind a Day Pass and keep the job ledger together.
not_checkedNo
receipt_idsNo
client_prefsNo
deliverablesNo
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_toolsNo
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_typeNohuman
creator_payment_urlNoOptional creator-owned payment link shown to the client only after acceptance. Zambo does not hold or process this payment.
exclude_receipt_idsNo
_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. Changed1 schema field changed
    • changedInput schema / properties / recipient_type / enum
      Previous value: -[
      -  "human",
      -  "agent"
      -]New value: +[
      +  "human",
      +  "agent",
      +  "ai"
      +]
  2. 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"
  3. Changed1 schema field changed
    • changedOutput schema / properties / graph / properties / aer / const
      Previous value: -"draft-zambo-aer1-25"New value: +"draft-zambo-aer1-26"
  4. Changed1 schema field changed
    • changedOutput schema / properties / graph / properties / aer / const
      Previous value: -"draft-zambo-aer1-24"New value: +"draft-zambo-aer1-25"
  5. 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"
  6. 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"
      +}
  7. Changed1 schema field changed
    • changedOutput schema / properties / graph / properties / aer / const
      Previous value: -"draft-zambo-aer1-22"New value: +"draft-zambo-aer1-23"
  8. Changed1 schema field changed
    • changedOutput schema / properties / graph / properties / aer / const
      Previous value: -"draft-zambo-aer1-21"New value: +"draft-zambo-aer1-22"
  9. 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"
      +}
  10. Changed1 schema field changed
    • changedOutput schema / properties / graph / properties / aer / const
      Previous value: -"draft-zambo-aer1-20"New value: +"draft-zambo-aer1-21"
  11. 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"
      +}
  12. 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"
      +]
  13. 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"
      -]
  14. 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"
      +  ]
      +}
  15. Added

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true, openWorldHint=true), and the description adds the important 'one proof link with verifiable receipts' framing plus the chaining rule. However, it never discloses that the artifact is published with visibility defaulting to 'public', that shield/redaction run by default, or that acknowledge_warnings gates publication despite warnings — material behavior for a publishing tool with 35 parameters.

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?

Four short sentences, trigger phrases front-loaded, and each sentence adds a distinct fact (triggers, AI-switch mode, client-delivery mode, chaining). Zero filler.

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

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even granting the output schema covers return values, this is a 35-parameter, nested, publication-producing tool with a public-by-default artifact, and the description explains none of that machinery — no mention of redaction defaults, payment fields, dry_run, or how 'AI switch' vs 'client delivery' is expressed in parameters. Adequate as a trigger router, inadequate as a definition for the tool's actual surface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 37% across 35 parameters, so the description must compensate — it does not. It explains only continue_from; the complex surface (redact modes, shield, payment/x402, dry_run, visibility, deliverables, acknowledge_warnings) is left entirely to a partially documented schema, leaving an agent to infer how the two advertised modes are actually selected via parameters.

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 description concretely states the two things this tool produces: a resumable session handoff for AI switching, and a single proof link with verifiable receipts for client delivery. That is specific enough to distinguish it from siblings like handover_accept or handover_status, though it never states a plain verb+resource (e.g. 'create a handover') and the name 'handover' carries much of the load.

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?

Strong trigger-based routing: 'wrap up this session', 'continue in another AI', 'hand this over to <client>' map directly onto the two operating modes, and 'Pass continue_from to chain off a job you picked up' tells the agent how to continue an accepted handover. Missing only explicit exclusions (when to use handover_status/handover_list instead).

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