Skip to main content
Glama

Agent Hub - AI-operated public sandbox: demo data, simulated payments, no real bookings

hold_slot

STEP 4. Reserves the slot behind an offer so nobody else takes it while you decide. payload = { offer_id } (from list_offers). SIDE EFFECTS: takes exclusive, EXPIRING ownership of a real inventory slot — returns { ok, hold_id, resource_slot_id }. "Real" there is about the CONTENTION, not about the world: the grab is atomic, so one caller wins the slot and every other agent asking for the same one is refused until your hold lapses. The calendar it comes from is seeded by this organization for its demo businesses, so nothing outside this hub is reserved and no real business loses an appointment — the cost of a speculative hold is paid by other agents here. THE RESPONSE CARRIES NO EXPIRY FIELD: the hold TTL is a fixed 15 minutes counted from your call, so track it yourself. The expires_at you saw in list_offers belongs to the OFFER, not to this hold. Let the hold lapse and the slot returns to the pool; this is not yet a booking. A HOLD IS NOT CAPPED BY YOUR DAILY BOOKING LIMIT, so this can keep returning 200 to an agent that confirm_booking is already refusing — taking one then buys you nothing and parks a real slot. DO NOT BLINDLY RETRY A 409 HERE: 6 different conflicts reach it, they need OPPOSITE actions, and they fall into 3 groups. [2 YOU OWN IT] you already own the thing you are asking for and the error body carries your OWN hold_id or booking_id — the only route back to it, since no tool reads a hold or a booking back; holding another slot pins a second one, or books and charges a second one. [2 SLOT NOT FREE] the slot is not free for a reason outside this offer, and nothing of yours is held or charged — one of the two clears itself within seconds (retry the SAME offer_id), the other never does (hold a DIFFERENT offer from the list you already have; do NOT send a new intent for it). [2 OFFER LEVEL] the offer itself cannot be held, and list_offers keeps returning it — expired and slotless offers are never dropped from that list, so re-reading it loops forever and the only exit is a NEW send_intent. Read the reason: each of the 6 names its own case and says what to do about it. On this transport the reason string is REWRITTEN where it names a call: a remedy that reads "GET /intents/:id/offers" on REST reads "list_offers" here, and "POST /intents" reads "send_intent". The advice is the same one; only the name of the call is the one you can actually make. Nothing else in the string is altered. Requires the slot.hold capability, which self-registered buyers get by default.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nonceYesSingle-use random string, 1..256 chars (32 hex recommended). A nonce this agent has used before is rejected as a replay (401).
payloadYesCovered by the signature.
agent_idYesThe agent_id returned by register_agent. Call that tool first; it is the only one needing no credentials.
signatureYesHex-encoded ed25519 signature over the RFC 8785 (JCS) canonical JSON of exactly {payload, agent_id, nonce, timestamp} — the whole envelope minus this field. Sign with the private key matching the public_key you registered. Worked example, and where it actually is: https://hub.videtion.com/quickstart.mjs — 6941 bytes, zero dependencies, Node 20+, which mints an ed25519 key, canonicalises exactly these four fields and signs them, so you can diff your bytes against a call this hub accepts. https://hub.videtion.com/spec states the same rule in prose and field tables and publishes no signature to copy: it is the reference, not the example.
timestampYesEpoch MILLISECONDS (Date.now()), not seconds. Must be within +/-60 s of server time, else 401 stale timestamp.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and succeeds: it discloses exclusive expiring ownership, atomic contention, fixed 15-minute TTL, no expiry field in the response, no daily-limit cap, the six conflict groups with opposite remedies, and the required slot.hold capability.

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?

The description is long, but it is front-loaded with the core purpose and then organized into distinct operational warnings and conflict categories. Every paragraph addresses a separate real risk or decision point, so the length is earned rather than padded.

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?

There is no output schema, but the description documents the response shape ({ ok, hold_id, resource_slot_id }), the absence of an expiry field, the TTL, the 409 conflict taxonomy, the transport-specific reason rewriting, and capability requirements. Nothing an agent needs to call this correctly is missing.

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%, so the baseline is 3. The description restates that payload is { offer_id } from list_offers, but that information already appears in the schema's offer_id documentation. It adds valuable behavioral context, but not much beyond the schema for the parameters themselves.

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 opens with a specific verb and resource: 'Reserves the slot behind an offer so nobody else takes it while you decide.' It clearly separates hold from booking, and references list_offers and confirm_booking, making it easy to distinguish from sibling tools.

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?

It explicitly frames this as STEP 4 in a sequence, explains when to hold while deciding, and gives detailed when-not-to guidance: do not blindly retry 409, retry the same offer for one conflict type, hold a different offer for another, and send a new intent for offer-level conflicts. It names alternatives like list_offers, send_intent, and confirm_booking.

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.6/5.0
Disambiguation5/5

Each tool maps to a single numbered protocol step—register, intent, offer listing, hold, confirm, approve—and acts on a distinct resource. confirm_booking and approve_pending are clearly separated by buyer/seller side and by state.

Naming Consistency5/5

All six tool names are consistent verb_noun snake_case: register_agent, send_intent, list_offers, hold_slot, confirm_booking, approve_pending. The verbs clearly describe the action and the nouns the target resource.

Tool Count5/5

Six tools are well-scoped for the described buy-flow protocol: registration, intent, offers, hold, commit, and seller-side approval. No tool is redundant, and the count does not feel padded or thin.

Completeness4/5

The core buyer workflow is complete from self-registration through booking confirmation, with the seller approval branch documented. Missing read-back/cancel operations for holds and bookings are acknowledged limitations, so agents can work around them by tracking IDs and letting holds expire.

Resources