Skip to main content
Glama

When a long run stops to ask a human, record the question, the answer and who approved it as one signed, dated record

handoff_record
Read-onlyIdempotent

A long-running agent stopped and asked a human. Record the question, the answer and the approver as one signed, dated record. Send the question (run_id, agent_id, asked_at, text; optionally signed by the agent's key) and the answer (the same run_id, question_hash = SHA-256 of the canonical question, decision approve, deny or answer, text, approver_id, approver_key, answered_at, sig by the approver's Ed25519 key). Optionally send expected_approver / expected_agent (public keys you trust). Get back valid or invalid, every check with pass or fail, and a record signed by LLPRO with the time we saw it, checkable offline. We do not keep the documents you send. It does not show who the approver is, that they saw the question as written, or that answered_at is true. Free.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "question": "<question>",
      "answer": "<answer>"
    },
    "name": "handoff_record"
  }
}

Input Schema

NameRequiredDescriptionDefault
answerYes
questionYes
expected_agentNothe agent public key you expect; if it differs (or the question is unsigned) the record is invalid
expected_approverNothe approver public key you expect; if it differs the record is invalid

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4/5.0
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive, closed-world), the description discloses the response shape (valid/invalid plus per-check pass/fail plus an LLPRO-signed, offline-checkable record) and its retention behavior ('We do not keep the documents you send'). It also states the limits of what the record proves: not who the approver is, not that they saw the question as written, not that answered_at is true. That is unusually rich disclosure for a mutation-shaped tool with readOnlyHint=true, and nothing contradicts the annotations.

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

Conciseness3/5

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

Purpose and privacy caveat are front-loaded, and no sentence is pure filler. But the long parenthetical field enumerations largely restate the input schema, making a single dense paragraph that an agent must parse for the genuinely new information (hash rule, expected-key behavior, non-retention, proof limits).

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 carries the return-value burden and does so: valid/invalid, every individual check, and a signed record with the observation timestamp, checkable offline. Combined with the stated non-goals, an agent knows what it gets back and what the result does not establish, which is complete for a two-object, nested-input tool.

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 only 50%, but the description compensates by explaining the composite structure: the question group (run_id, agent_id, asked_at, text, optional agent key/sig) and the answer group sharing run_id, with question_hash defined as SHA-256 of the canonical question and sig bound to the canonical JSON without sig. It also explains the purpose of expected_approver/expected_agent as trusted keys whose mismatch invalidates the record, though that overlaps with what the schema already says.

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 opening pair of sentences names a specific verb and resource: record a stopped agent's question, the human's answer, and the approver as one signed, dated record. An agent can tell this is a handoff/approval attestation tool rather than a pure verification tool. It does not explicitly differentiate itself from near-neighbours such as run_record_verify or witness_record, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The scenario sentence ('A long-running agent stopped and asked a human') gives a clear implied trigger, and the signing/expected-key notes hint at the verification use case. However, there is no explicit when-not guidance and no named alternative (e.g. a verify-only sibling) for an agent that already holds a record. Usage is inferable rather than stated.

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