Skip to main content
Glama

MCPFax Agent Continuity

Dead-man switch

heartbeat
Idempotent

AN AGENT CANNOT DETECT ITS OWN DEATH — from the inside, 'I stopped' and 'I am about to do the next step' are the same thing. Only something outside the process can tell them apart. Each call records a beat and arms a durable alarm for expect_within_seconds. Beat again in time and the alarm simply re-arms. Miss it and the expiry actions run EXACTLY ONCE: release_leases (the same release path a live agent uses), queue_alert (one envelope into a mailbox address you nominate), mark_failed (so resume_packet reports the death as an OBSERVED fact, not a self-report). FREE — it is a write. The alert is billed only when it is collected, by the existing inbox_poll first-delivery rule; there is no second charge. FREE — this tool never charges. Authenticate with Authorization: Bearer , or pass agent_key as an argument if your host cannot set headers. Equivalent HTTP route: POST /v1/heartbeat.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
scopeYesThe unit of work whose liveness this tracks. Namespace-scoped, and the scope resume_packet will report the death against. Example: 'permit-review-2026-08'.
disarmNoStop the switch instead of beating. Use this when the work finishes, or a completed job raises a false alarm. Default false. Example: 'false'.
agent_idNoOptional label for the beating instance, carried in the alert so a human can tell which worker died. <=64 chars. Example: 'worker-3'.
agent_keyNoYour agent_secret, if your MCP host cannot set the Authorization header. Prefer the header.
on_expiryNoWhich actions run if the next beat is late: any of 'release_leases', 'queue_alert', 'mark_failed'. Default ['mark_failed']. They always run in the order release_leases, mark_failed, queue_alert so the alert can report what was released. NOTE that release_leases can only reach leases taken with a `scope` — it reports its own blind spot rather than returning a silent empty list. Example: '["release_leases","queue_alert"]'.
notify_addressNoREQUIRED with 'queue_alert'. A registered address, 'agent:<id>' or 'agent:<id>/<box>'. WRITE-ONLY: we queue an envelope into it and never read it, exactly like send(). Example: 'agent:7k2p.../alerts'.
expect_within_secondsYesBeat again within this many seconds or the switch fires. Min 2, max 2592000 (30 days). Example: '300'.

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses many behavioral traits beyond annotations: expiry actions run exactly once, actions run in a specific order, billing details (beat is free, alert billed only on collection), and the release_leases blind spot. It also mentions auth methods and the write-only nature of notify_address. These details add significant context the annotations do not provide.

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?

The description is long but well-structured: it starts with the core concept, then mechanics, then parameter details. It front-loads the purpose and provides necessary caveats. Slight redundancy in billing statements ('FREE — it is a write' repeated as 'FREE — this tool never charges') could be trimmed, but overall it stays informative.

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?

Given the tool's complexity (7 params, no output schema, annotations present), this description is exceptionally complete. It covers purpose, usage, all parameter semantics, auth methods, billing behavior, and edge cases like the release_leases blind spot. The agent has everything needed to select and invoke the tool correctly.

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?

Although schema coverage is 100%, the description adds meaning beyond the schema: it explains the relationship between scope and resume_packet, the use case for disarm, the ordering and defaults of on_expiry, and the constraint that notify_address is required with queue_alert. This enrichment helps the agent use parameters correctly.

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?

The description clearly states the tool records a beat and arms a durable alarm for expect_within_seconds, using a specific verb (beat) and resource (dead-man switch). It distinguishes itself from siblings like lease_renew and work_done by focusing on external liveness detection, and explicitly references the release_leases and mark_failed paths as alternatives.

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?

It explains when to call: periodically to signal liveness, and disarm when work finishes. It describes when on_expiry actions run and notes the blind spot of release_leases, providing clear context. However, it does not explicitly list exclusions or alternative tools for scenarios like simple completion, though the intent is clear.

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.

TDQS

A4/5.0
Disambiguation5/5

Every tool targets a clearly distinct mechanism—barriers, budgets, checkpoints, claims, heartbeats, inboxes, leases, work queues, etc. Even closely related pairs like claim/complete, work_done/inbox_ack, and barrier_status/work_status are explicitly differentiated in their descriptions, so an agent can reliably select the right tool.

Naming Consistency4/5

The dominant pattern is object_verb (e.g., checkpoint_get, work_push, seen_add, lease_release), which is consistent and readable. A few single-word verbs (claim, complete, send) and noun-only names (resume_packet, retry_state, whoami) break the pattern, but they are few and still intuitive.

Tool Count2/5

With 33 tools, the surface is well beyond the 25-tool threshold for 'too many' and will feel heavy for agents to explore, even though the tools are organized into subdomains. The scope is broad, but the sheer number makes the server less approachable and increases the chance of misselection.

Completeness5/5

The tool set provides thorough lifecycle coverage across its domains: checkpoints get/put, work queue push/take/done/fail/status, inbox poll/ack/nack/schedule, lease acquire/renew/release, barrier create/signal/status, dedup add/check, watermark get/set, retry state, budget check/record, and idempotency claim/complete. There are no obvious dead ends or missing essential operations.

Resources