HoldKit
Server Details
Idempotency keys, locks, timers, and inboxes for agents over MCP. No payments.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 14 tools
Each namespace (idem, inbox, keys, kv, lock, timer) targets a distinct primitive, so cross-namespace selection is clear. The one real overlap is inbox.poll vs inbox.wait, which are functionally identical in this MVP since block_ms is capped at 0, forcing agents to guess which to use.
Every tool follows a strict namespace.verb pattern (idem.begin, inbox.ack, kv.set, lock.acquire), making the owner and action immediately readable. Verb choices within a namespace (begin/commit, acquire/release, set/cancel) are natural lifecycle pairs rather than inconsistencies.
Fourteen tools spread across six small namespaces (2-4 each) is well-scoped for a durability-primitives server. Every tool maps to a concrete operation with no filler.
Primitives lack lifecycle tails: keys.create has no revoke/list, timers and locks offer no list or inspect, and idem.begin has no abort. kv and inbox are reasonably covered, but the missing key revocation in particular is a gap agents cannot work around.
Available Tools
14 toolsidem.beginBegin idempotencyBInspect
Start an idempotency key or return the prior outcome. fingerprint is a hex hash.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| scope | Yes | ||
| ttl_s | No | ||
| fingerprint | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false; the description usefully adds that a repeat call returns the prior outcome rather than re-executing, which is real behavioral value. However it says nothing about what happens on a fingerprint mismatch, how ttl_s affects the stored key, whether the key is reserved or reused, or what an error looks like — all critical for an idempotency primitive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and the conditional return, with no filler. It is on the edge of under-specification rather than bloat, but nothing written is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must define the response, yet 'the prior outcome' is left undefined — an agent cannot tell whether it receives a status, a stored value, or a token. Combined with unexplained 'scope' semantics and an undocumented ttl_s default, the definition is too thin for a four-parameter stateful primitive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four parameters, so the description must compensate and largely doesn't: 'key', 'scope', and 'ttl_s' are not explained at all. The one note, 'fingerprint is a hex hash', merely restates the regex pattern already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Start an idempotency key') plus the key semantic twist ('or return the prior outcome'), which tells an agent this call may be a no-op. It doesn't explicitly name idem.commit as the counterpart, so the sibling pairing must be inferred from the adjective 'begin'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'begin' suggests a two-phase pattern with idem.commit, but the description never says when to call this versus committing, nor whether calling begin twice with the same key is expected. No exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
idem.commitCommit idempotencyBInspect
Store the outcome reference for an idempotency key. scope (max 64) and owner are optional. When owner is omitted, the caller key hash is sent.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| owner | No | ||
| scope | No | ||
| result_ref | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the write-safety profile is covered. The description adds one genuinely useful behavioral detail the annotations cannot: when owner is omitted the caller key hash is used. It omits duplicate-commit behavior, overwrite semantics, and failure modes, which matter for a write tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the core action front-loaded and optional-parameter notes after it. No padding, though 'scope (max 64)' restates schema maxLength rather than earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A four-parameter mutation tool with no output schema and zero schema description coverage needs more than this: the meaning of result_ref and the identity/format of key are never explained, and the outcome of a successful commit (what gets stored, when it is reused by idem.begin) is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It covers scope (including the max-64 constraint, which merely repeats the schema) and the owner default, but says nothing about the two required parameters, key and result_ref, leaving their format and meaning undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Store the outcome reference for an idempotency key.' An agent can distinguish it from idem.begin by the commit-vs-begin naming, but the description never explicitly contrasts the two phases, so the differentiation is by inference rather than statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the name and the paired sibling idem.begin. There is no explicit 'call this after idem.begin' sequencing, no note on whether committing an already-committed key is an error or an overwrite, and no mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inbox.ackAck inboxCDestructiveInspect
Mark inbox events done.
| Name | Required | Description | Default |
|---|---|---|---|
| inbox_id | Yes | ||
| event_ids | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description 'mark done' sounds benign and does not disclose irreversibility, whether acked events are retrievable, or whether repeated acks are safe (relevant given the idem.* siblings). For a destructive mutation it adds essentially no context beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely short and front-loaded with no wasted words, but at four words the brevity reflects under-specification rather than efficiency. There is room for another clause on effects or preconditions without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, two-parameter mutation with no output schema and no parameter documentation, the description leaves out the effect on acked events, the batch size limit, and error/partial-failure behavior. An agent could call it, but not confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% with two required parameters (inbox_id, event_ids) and a maxItems=50 cap. The description says nothing about the parameters — the plural 'events' hints at event_ids but neither the batch limit nor the inbox identifier is explained anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb+resource pair ('mark inbox events done') is specific enough to identify the operation as acknowledging events in an inbox, which distinguishes it from siblings like inbox.poll and inbox.wait. However, 'done' is ambiguous — it doesn't say whether events are removed, moved to an archive, or merely flagged, which matters for how an agent interprets the effect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to ack versus poll, wait, or create, and no preconditions are stated. An agent must infer the workflow position of this tool entirely from the name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inbox.createCreate inboxBInspect
Create an inbox. Returns webhook and A2A URLs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds the useful return detail of webhook and A2A URLs, which is genuine context. It remains silent on idempotency (relevant given the idem.* siblings), whether repeated calls create duplicate inboxes, and any auth or quota constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the action front-loaded and the return value second. There is no padding, though the description is arguably too thin for a provisioning call rather than too long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description's mention of returned webhook and A2A URLs is essential and correctly included. However, for a creation tool whose siblings include idempotency primitives, the description omits whether the operation is idempotent or repeatable, leaving an agent unsure about retry safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document and the baseline is 4. The JSON schema is an empty object and the description correctly does not invent parameter behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create an inbox'), which is distinguishable from the sibling read-side tools inbox.ack, inbox.poll, and inbox.wait. It does not mention how it relates to the other create-style siblings (keys.create, idem.begin), so differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus other setup tools such as keys.create or the idempotency pair idem.begin/idem.commit. An agent must infer from the name alone that this is the provisioning step before polling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inbox.pollPoll inboxCRead-onlyInspect
Read inbox events after a cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| inbox_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered, but the description adds almost nothing behavioral: it does not say whether the call returns immediately or blocks, whether an empty result is possible, or what the pagination/next-cursor behavior is. Given inbox.wait sits right next to it, the blocking-vs-polling distinction is exactly what the description needed to disclose and does not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Six words, front-loaded with the verb and no filler or redundancy. Its brevity is disciplined, though the compression is achieved by omitting information rather than by tight editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Three parameters, no output schema, and no annotation coverage of pagination behavior — the agent cannot tell from this definition how to page, what the default limit is, or whether the response carries a next cursor. For a cursor-driven poll tool where those details determine correct usage, the description is under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three parameters, so the description carries the burden and only gestures at 'cursor' without saying whether it is exclusive/inclusive, opaque, or how it is obtained. The 'limit' parameter (max 50) and required 'inbox_id' get no semantic treatment at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('inbox events') plus a scoping qualifier ('after a cursor'), so the agent knows the operation. However, it does not differentiate itself from the sibling inbox.wait, which is the critical ambiguity for a poll tool — whether the call blocks or returns immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus inbox.wait or inbox.ack, no prerequisite/permission notes, no guidance on polling cadence or how to carry the cursor forward. The only implied usage is the 'after a cursor' phrase, which an agent must interpret on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inbox.waitWait inboxBRead-onlyInspect
Poll an inbox. block_ms is accepted and capped at 0 in this MVP, so the call returns current events.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | ||
| block_ms | No | ||
| inbox_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely useful context beyond that: block_ms is accepted but capped at 0, so despite the "wait" name the call returns immediately with current events. That disclosure prevents an agent from expecting blocking behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and immediately followed by the most surprising behavioral fact. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and 0% schema coverage, so the description should describe the return shape and cursor semantics. It conveys that current events are returned but says nothing about what those events look like or how cursor advances, leaving a real gap for a polling tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 3 params, so the description must compensate. It does explain block_ms semantics (capped at 0, effectively a no-op), but cursor and inbox_id are left completely undocumented, and cursor is the key pagination parameter for a polling tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a verb and resource ("Poll an inbox"), but it calls the tool "poll" while a sibling is literally named inbox.poll, so it fails to differentiate this tool from that one. An agent cannot tell from the description why it would choose inbox.wait over inbox.poll.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus inbox.poll, or how the returned events relate to inbox.ack. The only usage-ish statement is that block_ms is a no-op, which is behavior, not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keys.createCreate caller keyAInspect
Mint a pf_ caller key bound to one HoldKit namespace.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the agent knows this is a non-destructive write action. The description adds useful context about the key prefix and namespace binding, but omits important behavior such as permissions required, whether the key is returned only once, and lifetime.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence with no wasted words. It communicates the essential purpose efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter creation tool with no output schema, the description is minimally adequate about what is created and how it is scoped. It does not explain what the caller receives (e.g., the secret key value), how the namespace is determined without an input parameter, or relevant auth/secret-handling expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so there is no input schema detail for the description to add and the baseline is 4. The mention of namespace binding is meaningful context, though it does not clarify how the namespace is selected given the empty input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (Mint), a specific artifact (pf_ caller key), and a binding scope (one HoldKit namespace). An agent can understand exactly what this tool creates without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the action: call this when you need a caller key bound to a namespace. However, the description does not state prerequisites, when not to use it, or how it relates to any sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kv.deleteDelete valueDDestructiveInspect
Delete a value.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, so the description's low bar is somewhat reduced. However, it adds nothing beyond them: it does not say whether the delete is idempotent, what happens when the key is absent, or that the removal is irreversible. For a destructive mutation, that silence is a real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is one short sentence with no filler, but brevity here is under-specification rather than concision. There is no front-loaded detail an agent can act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive single-parameter mutation with no output schema and no schema descriptions, the description must carry nearly the full burden and fails. Missing are idempotency, behavior on missing keys, irreversibility, and error/return expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter key, so the description must compensate and it does not. Worse, it talks about deleting a "value" while the parameter is named "key", which can mislead an agent about what to pass.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description "Delete a value" merely rephrases the name kv.delete and the title "Delete value" – it is effectively tautological. It gives no scope, no differentiation from siblings like kv.get or kv.set, and the word "value" is vaguer than the schema's "key".
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of when not to use it, and no reference to any alternative among the many siblings (kv.get, kv.set, keys.create). The agent learns nothing about the conditions that should select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kv.getGet valueCRead-onlyInspect
Read a small value.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered, but the description adds almost nothing beyond that. "Small" hints at a value-size constraint without stating a limit, and there is no disclosure of missing-key behavior, error responses, or whether values are strings/binary. For a key-value read, the miss case is the single most important behavior to disclose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five words, no padding and front-loaded, so nothing needs cutting. But brevity here is under-specification rather than efficiency: there is room for one or two more sentences carrying real information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description bears the burden of explaining what comes back — the value's type, the not-found case, size limits — and it does none of that. Against a 14-tool sibling set with parallel kv.set/kv.delete, this leaves the agent guessing on both input and return semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter `key`, and the description never mentions it or its format (namespace prefix, key length, case sensitivity). The description therefore fails to compensate for the schema gap; only the tool name implies a key-based lookup.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Read a small value" gives a verb (read) and a resource (value), so the basic operation is inferable, but it never mentions the key namespace, lookup semantics, or how it differs from siblings like inbox.poll or kv.set. The word "small" is unexplained and carries no actionable meaning. Vague purpose rather than tautology, but far from distinguishing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool, no prerequisites, and no mention of alternatives such as kv.set or kv.delete. The agent must infer from the name alone that this is the read counterpart to the write tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kv.setSet valueBInspect
Write a small value with a TTL. Emails and card numbers are rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| ttl_s | Yes | ||
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so the safety profile is already covered. The description does add genuine value beyond that: values are size-limited and content is screened for PII. However, it says nothing about overwrite semantics or what happens when the TTL expires.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste; the storage constraint is front-loaded ahead of the validation caveat. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter write tool with no output schema and no parameter descriptions, the definition does too little: the size limit for 'small', overwrite behavior, and error conditions on PII rejection are all unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so all three required parameters (key, value, ttl_s) are undocumented by the schema. The description gestures at 'value' and TTL but never quantifies 'small', gives no unit or bounds for ttl_s beyond the schema's integer constraint, and says nothing about key format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (write a value into the key-value store) plus the defining constraint (TTL, small values). It is clearly distinguishable from kv.get and kv.delete, though it doesn't explicitly name those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is a negative constraint (emails and card numbers are rejected); there is no statement of when to use this over idem.begin or timer.set, nor any prerequisites. Usage must be inferred from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lock.acquireAcquire lockCInspect
Take a lease lock. Returns a fencing token.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| owner | No | ||
| ttl_s | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context with "lease" and "fencing token," but it omits critical lock semantics such as blocking vs non-blocking acquisition, contention behavior, and TTL expiry effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short, front-loaded sentences with no wasted text, and the return value is stated immediately. It is efficient, though the extreme terseness leaves too much implicit for a lock tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation-adjacent lock tool with three undocumented parameters, no output schema, and minimal annotations, the description is too sparse. It should explain owner semantics, TTL behavior, and what happens when the lock is already held.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for three parameters, so the description must compensate. "Lease lock" weakly hints at ttl_s and "lock" hints at name, but owner is completely unexplained and no parameter format or constraints are clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ("Take a lease lock") and adds a useful return detail ("Returns a fencing token"). It does not explicitly distinguish itself from the sibling lock.release, but the acquire-vs-release distinction is inferable from the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites, and no mention of what to do if acquisition fails or contention occurs. The agent must infer usage entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lock.releaseRelease lockCDestructiveInspect
Release a lock with its fencing token.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| fencing | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the mutation risk is covered structurally. The phrase "with its fencing token" hints at a conditional/safety-checked release, which is useful, but the description never says what happens on a fencing mismatch, whether the lock must be held, or whether release is idempotent — the substantive behavior an agent needs for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, but its brevity comes at the cost of the semantics the tool needs. It is concise without being informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive two-parameter mutation with no output schema and zero parameter documentation, the description omits the return/outcome (does it report success or throw on stale token?), the fencing-token contract, and the required lock-holding precondition. Too much is missing relative to the operation's risk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load, yet it only glosses `fencing` as a token and says nothing about `name` being the lock identifier. It never states that the fencing value must be the one returned by lock.acquire, or what an incorrect value does.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("Release a lock") and its counterpart lock.acquire in the sibling list makes the split obvious. It stops short of explicitly differentiating itself from siblings or describing what release does to the lock state, so a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to release versus letting a lock expire, no prerequisite that the caller must hold the lock, and no mention of the alternate outcome when the fencing token is stale. The agent is left to infer all invocation conditions from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
timer.cancelCancel timerCDestructiveInspect
Cancel a timer.
| Name | Required | Description | Default |
|---|---|---|---|
| timer_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, so safety profile is known, but the description adds no context beyond them: it doesn't say whether cancellation is irreversible, whether it errors when the timer_id is unknown or already fired, or who may cancel another's timer. With annotations covering only the safety flag, the description contributes nothing extra.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with zero waste, but brevity here reflects under-specification rather than disciplined conciseness — there is no front-loaded scope or constraint to be concise about.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive mutation with no output schema and undocumented parameters needs the description to cover irreversibility, error conditions, and id provenance. None of that is present, so an agent cannot call it correctly without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required timer_id, so the description should explain its format or origin (e.g. the id returned by timer.set). It does not, and the parameter name alone carries all the meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Cancel a timer" restates the tool name and title verbatim; it states a verb and resource but adds nothing, and it makes no attempt to distinguish cancel from the sibling timer.set (the pair an agent must choose between).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, when-not-to-use, or alternative is named. It doesn't say whether cancel should be used on an already-fired timer, or how it relates to timer.set, leaving routing entirely to the agent's prior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
timer.setSet timerCInspect
Schedule a durable timer. Delivery URLs must be public https.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| delay_s | Yes | ||
| payload | Yes | ||
| inbox_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive mutation, so safety is covered. The description adds one genuinely useful constraint — delivery URLs must be public https — which is an external accessibility requirement not otherwise discoverable. However, it says nothing about retry behavior on failed delivery, whether timers survive restarts ("durable" is asserted but undefined), maximum practical delay, or whether the timer can be cancelled afterward.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the core purpose is front-loaded ahead of the constraint. The brevity is efficient, though the second sentence is a terse fragment that could carry one or two more load-bearing details without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four parameters at 0% schema coverage and no output schema, the description should explain the delivery-mode choice, payload/delay semantics, and at least what identifier is returned so the agent can later cancel. None of that is present, leaving an agent unable to call the tool correctly from the definition alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden, and it only gestures at the url parameter via "Delivery URLs." It never explains delay_s units/semantics, the payload format or content type, what inbox_id does, or the mutually exclusive delivery modes (url vs inbox_id) despite both existing in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Schedule a durable timer"), and "durable" hints at persistence, which distinguishes it from transient scheduling. It does not explicitly differentiate from the sibling timer.cancel, but the create-vs-cancel split is inferable from the names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of timer.cancel as the counterpart for removal, and no explanation of when to deliver via url versus inbox_id. The only guidance present is a constraint (public https URLs) rather than a usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
14 tool updates
- First observed
idem.begin - First observed
idem.commit - First observed
inbox.ack - First observed
inbox.create - First observed
inbox.poll - First observed
inbox.wait - First observed
keys.create - First observed
kv.delete - First observed
kv.get - First observed
kv.set - First observed
lock.acquire - First observed
lock.release - First observed
timer.cancel - First observed
timer.set
Related MCP Connectors
- llm-busOAuthcom.llm-bus
Coordinate multiple AI agents over MCP: atomic claims, leases, shared ledger, handoffs, tasks.
Sandboxes, storage, secrets, queues, timers, locks, inboxes and run ledger for AI bots. One MCP.
Host any HTTP API as MCP tools with a tamper-evident cross-agent settlement ledger.
MCP-first toolbox for agents: KV storage, auth, queue, and utility tools. Free in early access.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to claim, heartbeat, submit, split, park, and resume atomic work-queue tasks, with fencing tokens and receipts, while storing and versioning records and content-addressed files through MCP.MIT
- FlicenseNot gradedqualityCmaintenanceDurable MCP control plane for coordinating agent networks, with message ledger, idempotent delivery, and cryptographic identity for each orchestrator.-
- AlicenseNot gradedqualityBmaintenanceEnables enterprise agent fleets to register workers, dispatch tasks by capability, monitor continuous heartbeat telemetry, trip automated circuit breakers, and recover from checkpointed state through a zero-dependency MCP server.7MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for AgentPay — the payment gateway for autonomous AI agents. Fund a wallet once, give your agent the key, and it discovers, provisions, and pays for tool APIs on its own. One key, every tool.112 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.