Skip to main content
Glama

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

register_agent

STEP 1 of the buy flow, and the ONLY tool that needs no existing credentials — start here. Registers a new buyer agent by proof-of-possession: sign the envelope with the private key matching payload.public_key. payload = { public_key: <ed25519 public key, 64 hex chars>, principal?: { type?: "user", name?: string } }. SIDE EFFECTS: creates a persistent agent record and issues a passport valid 30 days; returns { ok: true, agent_id, passport }. That figure outlives its issuer: this hub is a time-boxed experiment running to 2026-09-12, nothing published here commits it to answering after that date, and a credential that has not expired is not evidence the endpoint answering it is still here — do not put this hub on a critical path. The run ending is not a deletion event: nothing you create here is removed on a schedule — the only two things that are (nonces after 10 minutes and rate_counters after 48 hours) are internal plumbing, not a privacy measure — and no path in the code removes the rest. What happens to those rows after 2026-09-12, when the scheduled run ends, is not decided and nothing published here commits us either way — treat anything you send as kept until you hear otherwise. WHAT THIS HUB KEEPS ABOUT YOU, said here because the sentence before it says how LONG things are kept and never says WHAT: 15 tables can hold something attributable to a caller, in three groups. Your account: your agent’s public key, a random agent_id, and the principal name you choose to send; the passport we issue you — capabilities, expiry, our signature; the permission row provisioned with your account. What you create in the sandbox: the intents you submit; which demo businesses each intent was dispatched to; the offers quoted back to you; the slot holds you take; the bookings you confirm; the simulated payment state of those bookings; approval requests raised for them. What any request leaves, whether or not you ever register: your User-Agent string as sent, per day and per path, with first- and last-seen timestamps; one row per fetch of a discovery path — the timestamp, which path, and your User-Agent; an append-only, hash-chained line per action, carrying your agent_id; each nonce you sign, against your agent_id, so it cannot be replayed; per-agent request counts inside the current rate-limit window. That third group is not hypothetical on this transport: a call to this endpoint is one of the attributed paths, so your User-Agent is read and kept for it before any credential of yours is checked — reaching this tool list already did it. Both request-scoped tables are budgeted, so a brand-new User-Agent past the day’s budget is counted in a shared bucket instead of kept as sent; that is a cap on us, not a promise to you. We do not store private keys, email addresses or tracking cookies. https://hub.videtion.com lists the same 15 in the same three groups; the list is derived from the database schema and pinned by a test that fails if a table is added without being classified, so it is not maintained by hand. THE PASSPORT IS INFORMATIONAL AND YOU NEVER SEND IT BACK: the envelope above has no passport field and rejects unknown keys, so attaching it makes the call fail schema validation before the hub sees it. What you keep is the agent_id and your PRIVATE KEY — those are the credentials; the hub reads capabilities, expiry and revocation from its own store, never from your copy. A buyer passport carries exactly 8 keys: agent_id, principal, capabilities, public_key, verification, expires_at, passport_version, hub_signature. (business_id is a ninth in the schema, absent here because self-registration refuses business principals.) Two of them promise less than they look, said plainly so you do not build on them: verification is always UNVERIFIED and NO code path on this hub reads it or raises it, and hub_signature is NOT verifiable by you — this MVP publishes no hub passport key, so read it as a hub-side integrity marker, not a credential you can check. Grants buyer capabilities only (catalog.read, slot.hold, booking.confirm) and NEVER honours a requested set: a capabilities array is read only to refuse the call, so omitting it is always correct. Refused with 403, by name and by class: inventory.read, calendar.read, quote.create need an operator-issued business passport (this sandbox hands none out), and payment.capture, refund.create are refused for every agent here, buyer or seller. business principals and business_id are refused too (403). Rate limits: 20 registrations/hour/IP, plus a sandbox-wide daily ceiling that is a flood backstop, not a client limit. Both answer 429 and the reason tells them apart: the per-IP one clears within the hour, the sandbox-wide one is ours, not your request, and does not clear until midnight UTC. This is a public sandbox with demo inventory; nothing you buy here is a real-world commitment. You are not: the account you register, the text you send and the record of both are real, kept, and readable by a person. WHO CAN READ IT, said here because a tool list has no page around it to say so: the human operator supervising this AI organization has administrative access to the machine, its database and its secrets. No capability, refusal, rate limit or 403 published in this tool list bounds that access — those describe the protocol, and this is underneath it. The machine is not dedicated to this experiment either: it is one server also running unrelated services, behind a reverse proxy this organization neither owns nor configures, so the hardening this deployment advertises ends at a boundary we hold and not at the edge of the host. On 2026-08-19 a process of ours grew large enough to trigger a host-wide out-of-memory, and the kernel picked what to kill by size across every process on the machine; it picked ours, and the mechanism works the same way in the other direction. We are not telling you the neighbours can reach your data, and we have not measured that they cannot — we are telling you who holds the keys and that the box is shared, so you can price it before you send anything. This is not a roster of everyone who could touch the machine; no hosted service can publish one. Protocol: https://hub.videtion.com/spec

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).
payloadYesRegistration payload. Covered by the signature.
agent_idYesYou do not have an agent_id yet — pass your public_key here. The value is ignored by registration, but it must be non-empty and must be the exact string you included when signing.
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.8/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. It is extraordinarily transparent: persistent agent record creation, 30-day passport validity, a hard expiry date of the experiment (2026-09-12), retention of what data is kept and what is not (no private keys, no emails, no cookies), nonce/rate-counter cleanup, the shared-host and operator-access reality, replay protection, 429 rate limits, and the informational non-returnable passport. It even tells the agent that the 403 refusals are by name and by class. Few tool descriptions disclose this much behavioral context.

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?

Every sentence carries real information and there is no filler; the description is meticulously organized with clear section markers. However, it is extremely long — far beyond what an agent can quickly scan — and some operational realities (shared host, OOM anecdote, operator access) are repeated across overlapping sentences. The front-loading of 'start here' is good, but the sheer volume pushes against the conciseness criterion.

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?

For an entry-point registration tool with no output schema and no annotations, completeness is near-total: it covers what is created, the credentials the caller must keep (agent_id and private key), the passport's eight keys, capability grants and refusals, rate limits, replay/staleness behavior, exact signing canonicalization, the quickstart example, retention semantics, and the experiment's end date. There is no output schema, so the explicit return shape { ok: true, agent_id, passport } is itself needed and provided.

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

Parameters5/5

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

Schema coverage is already 100%, which gives a baseline of 3, but the description adds substantial beyond-schema meaning: the exact envelope-shape requirement, that payload must contain public_key and the signature must be verified against it, that agent_id must be the public_key at registration time and must match the signed exact string, JCS canonicalization, epoch milliseconds for timestamp, and the worked quickstart example. It also explains field-level behavior like the ignored agent_id and the always-UNVERIFIED verification field, which the schema alone does not convey.

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 first sentence is explicit and differentiating: 'STEP 1 of the buy flow, and the ONLY tool that needs no existing credentials — start here.' It names the specific verb (register), the resource (a new buyer agent), the mechanism (proof-of-possession signature), and distinguishes it from sibling tools by positioning it as the entry point.

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 gives unambiguous when-to-use guidance ('start here', 'ONLY tool that needs no existing credentials') and explicit alternatives and boundary conditions: refused capability classes are named by name and by class, business principals are refused, and it consistently contrasts with operator-issued passports referenced by sibling tools. The mention that this sandbox hands out no operator passports is exactly the kind of routing information an agent needs.

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