agentdraft-mcp
agentdraft-mcp — servidor MCP para AgentDraft
Un servidor MCP que expone AgentDraft — la API de operaciones para agentes de IA con bandeja de entrada, calendario sin conflictos y herramientas de auditoría — como un conjunto de herramientas que cualquier cliente de IA compatible con MCP puede invocar.
Úsalo si tu runtime de agente es Claude Desktop, Claude Code, Cursor,
Cline, una aplicación de OpenAI Agents SDK, o cualquier otro host MCP. El servidor es
un envoltorio ligero alrededor del SDK de Python agentdraft
— misma autenticación, mismos errores, misma semántica que la API REST
y los SDK de lenguaje.
Instalación
pip install agentdraft-mcpRequiere Python 3.10+ y una clave de agente avs_live_… válida del
panel de AgentDraft.
Related MCP server: Generic MCP Server for Google Workspace
Actualización
pip install -U agentdraft-mcpNotas de la versión: https://agentdraft.io/changelog
Configura tu cliente MCP
agentdraft-mcp está en PyPI, así que una vez instalado, la configuración JSON a
continuación funciona en cualquier host MCP de inmediato — sin descargas adicionales.
Claude Desktop / Claude Code — configuración JSON (recomendada)
Edita ~/Library/Application Support/Claude/claude_desktop_config.json
(macOS) o el equivalente en Windows/Linux:
{
"mcpServers": {
"agentdraft": {
"command": "agentdraft-mcp",
"env": {
"AGENTDRAFT_API_KEY": "avs_live_..."
}
}
}
}Cursor / Cline / host stdio genérico
{
"mcpServers": {
"agentdraft": {
"command": "python",
"args": ["-m", "agentdraft_mcp"],
"env": {
"AGENTDRAFT_API_KEY": "avs_live_..."
}
}
}
}Para desarrollo local contra un backend de desarrollo, también establece
AGENTDRAFT_BASE_URL=http://localhost:8080.
Claude Desktop — Extensión de Escritorio .mcpb (arrastrar y soltar)
Cada versión también incluye un paquete de Extensión de Escritorio .mcpb en
GitHub Releases. Arrastra agentdraft-mcp.mcpb a Claude Desktop
→ Configuración → Extensiones y pega tu clave API avs_live_… — sin
editar JSON, sin pip install.
Herramientas
Herramienta | Propósito |
| Confirma la clave API y devuelve la identidad del agente, prioridad, alcances y la |
| Lista los espacios abiertos para el agente que llama en [inicio, fin) |
| Reserva un espacio tentativamente (TTL de 30 s); |
| Libera una reserva para que otros agentes puedan reclamarla |
| Finaliza una reserva — comparación e intercambio atómico; |
| Cancela una reserva confirmada que el agente que llama posee |
Todas las horas son cadenas ISO 8601 (2026-06-01T14:00:00Z). Todas las
herramientas de escritura aceptan una idempotency_key para reintentos seguros. create_hold y
commit_booking también aceptan un title y invitee opcionales
({name, email, notes}) que registran para quién es el espacio — visible para el propietario en el panel.
Cómo se manifiestan los conflictos
Cuando dos agentes compiten por el mismo espacio, exactamente uno gana. Los agentes perdedores reciben un payload estructurado de superado — no un error de cadena:
{
"error": "outranked",
"winning_booking_id": "bkg_…",
"winning_agent_id": "agt_…",
"winning_agent_priority": 1,
"your_priority": 3,
"message": "Your booking was outranked. Read winning_agent_id and propose an alternate slot rather than retrying."
}Tu agente debe ramificarse en esto y proponer una alternativa, no reintentar el mismo espacio.
En qué se diferencia de los SDK de AgentDraft
SDK de Python/TS | Servidor MCP | |
Llamador | Código de aplicación que escribiste | Un cliente de IA (Claude Desktop, etc.) |
Transporte | HTTPS directo a api.agentdraft.io | stdio entre el host MCP y este proceso |
Autenticación |
| Variable de entorno |
Semántica | Igual | Igual |
Errores | Excepciones de Python tipadas | JSON estructurado en el resultado de la herramienta |
Usa el SDK cuando tú estés escribiendo el agente. Usa este servidor MCP cuando el runtime de agente de otra persona (Claude Desktop, Cursor, Cline, host MCP genérico) necesite llamar a AgentDraft en nombre de un usuario sin código personalizado.
Enlaces
Especificación del protocolo: https://agentdraft.io/spec
Documentación de la API: https://agentdraft.io/docs
Registro de cambios: https://agentdraft.io/changelog
SDK de Python:
agentdraftSDK de TypeScript:
agentdraftCódigo fuente: https://github.com/ryabinski-labs/agentdraft-mcp
Problemas: https://github.com/ryabinski-labs/agentdraft-mcp/issues
Seguridad
¿Encontraste una vulnerabilidad? Consulta SECURITY.md. No abras un problema público para un informe de seguridad.
Contribuciones
Consulta CONTRIBUTING.md. ryabinski-labs/agentdraft-mcp
es un espejo publicado de un directorio en el repositorio de aplicaciones privado de AgentDraft
— los problemas y las solicitudes de extracción se leen allí y regresan a través de la
próxima sincronización de versión.
Licencia
MIT — consulta LICENSE.
Available Tools
9 toolscancel_bookingA
Cancel a previously-committed booking owned by the calling agent. The slot becomes available to other agents immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| booking_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden; it does disclose one meaningful side effect ('the slot becomes available to other agents immediately') and an ownership authorization constraint. However, it doesn't state whether cancellation is reversible, what happens on an invalid or non-owned booking_id, or whether any confirmation is required — notable gaps for an unannotated mutation.
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, zero filler, with the identity/ownership constraint front-loaded and the downstream effect second. Nothing repeats the tool name unnecessarily.
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?
An output schema exists, so return values need no explanation, and the description covers the essential facts for a one-parameter mutation: whose resource it acts on and what the world looks like afterward. Additional detail on failure modes would help but isn't required to invoke it correctly.
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 parameter, so the description should compensate. The ownership clause adds a real semantic constraint on booking_id (it must reference a booking the caller owns), but the format/origin of the identifier is still unexplained.
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 ('Cancel') and resource ('booking') plus a scope constraint ('owned by the calling agent'), which rules out cancelling other agents' bookings. It doesn't explicitly contrast with the closely related sibling release_hold, so an agent must infer the distinction between releasing a hold and cancelling a committed booking.
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 phrase 'previously-committed booking' implies usage after commit_booking, but the description never says when to choose this over release_hold or what to do if the booking is still a hold. Usage is implied rather than stated, and no preconditions or failure conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
commit_bookingA
Finalize a booking. This is the atomic compare-and-swap at the slot level — exactly one agent succeeds per slot in any race window. Returns an outranked payload on 409.
Optional title and invitee ({name, email, notes}) record
who the slot is for; both are echoed back and shown to the owner in
the dashboard.
Set with_conferencing=True to attach a video meeting link to
the committed booking; the link is returned under conferencing.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | Yes | ||
| title | No | ||
| invitee | No | ||
| metadata | No | ||
| idempotency_key | No | ||
| with_conferencing | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses atomic compare-and-swap behavior, exactly-one-winner semantics, the 409 outranked payload, invitee echo/visibility to the owner, and conferencing link attachment. It leaves idempotency_key semantics and permission/auth expectations unexplained.
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 front-loaded with the core finalize/CAS behavior, then optional fields and conferencing. Three short paragraphs with no wasted sentences; every part adds useful invocation or behavioral context.
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?
The core commit semantics and conflict behavior are complete, and an output schema exists to cover return values. But for a 7-parameter mutation with no annotations and 0% schema coverage, the description should also explain idempotency_key, metadata, and start/end 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%, so the description must compensate for all parameter meaning. It explains title, invitee shape, and with_conferencing, but omits start/end format expectations, metadata, and critically the idempotency_key, leaving several parameters undocumented.
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 ('Finalize a booking') and adds the distinguishing concurrency semantics: atomic compare-and-swap at slot level, exactly one agent succeeds per race window. This clearly separates it from hold/cancel/approval siblings without needing their schemas.
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 description implies the usage context: commit a slot that is being finalized, with conflict behavior on 409. However, it does not explicitly say when to use this versus create_hold, or when not to use it, so the guidance remains implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_holdA
Reserve a slot tentatively. Holds expire automatically (30s TTL by default). A subsequent commit_booking on the same slot promotes the hold to a final booking.
Optional title and invitee ({name, email, notes}) record
who the slot is for; both carry through to the eventual commit.
Returns an outranked payload if a higher-priority agent already holds or has committed the slot inside the bump window.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | Yes | ||
| title | No | ||
| invitee | No | ||
| metadata | No | ||
| idempotency_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the 30-second default TTL, automatic expiration, the promotion path via commit_booking, and the outranked payload when a higher-priority agent already holds the slot. It omits permission requirements and idempotency behavior, but the key lifecycle behaviors are well covered.
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 front-loaded with the core action and TTL, then details optional fields, then conflict behavior. It is efficient with no filler, though slightly dense; a small amount of structure could improve readability.
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?
An output schema exists, so return values needn't be fully explained, but the description helpfully mentions the outranked payload. For a 6-parameter mutation tool with no annotations, the description should explain the required start/end semantics and what idempotency_key does. Its coverage of parameter behavior is incomplete.
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 compensate. It explains only two of six parameters (title and invitee with its fields) and leaves start, end, metadata, and idempotency_key completely undocumented. Partial coverage with significant gaps warrants a low score.
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: 'Reserve a slot tentatively.' It also explicitly distinguishes this tool from commit_booking by explaining that a later commit_booking promotes the hold. An agent can tell exactly what this tool does and how it differs from the commit sibling.
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 description clearly implies the usage pattern: create a hold first, then call commit_booking to finalize. It doesn't explicitly name alternatives for cases where a hold isn't needed, but the flow is unambiguous. No when-not guidance is provided, keeping it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_approvalA
Read the current state of one approval request: pending,
approved, denied, or expired, plus the reviewer's note once
resolved. Safe to poll; it never blocks.
| Name | Required | Description | Default |
|---|---|---|---|
| approval_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden and discloses key behavior: it is a read operation, it is safe to poll, it never blocks, and it returns status plus reviewer note once resolved. It does not mention authorization, rate limits, or not-found behavior, so it is strong but not fully exhaustive.
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 compact and front-loaded, first stating what is read and then adding the important non-blocking polling behavior. Every sentence adds value with no filler.
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?
The tool is simple, has one parameter, and has an output schema, so return values need not be fully described. The description covers statuses and behavior well. Its main gap is the undocumented approval_id parameter, which is the only notable omission for correct invocation.
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 schema has one required parameter, approval_id, with 0% description coverage. The tool description refers to 'one approval request' but adds no meaning about the ID format, source, or constraints. With low schema coverage, the description should compensate, but it does not.
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: reading one approval request and its current state. It enumerates the possible states and the reviewer note, making the purpose clear. It implicitly differentiates from wait_for_approval by saying it never blocks, though it does not name that sibling explicitly.
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 phrase 'Safe to poll; it never blocks' gives clear usage context: this is the non-blocking polling option. However, it does not explicitly name or contrast with wait_for_approval, nor does it state when to prefer that alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_availabilityA
List slots open to the calling agent within [start, end).
Times are ISO 8601 strings (2026-06-01T14:00:00Z). The result
is filtered through the user's focus blocks, buffer rules, and
any currently-active holds across sibling agents.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| start | Yes | ||
| include_holds | No | ||
| duration_minutes | No | ||
| granularity_minutes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does add non-obvious behavior: results are filtered through the user's focus blocks, buffer rules, and active holds across sibling agents. It does not spell out the read-only nature beyond the verb 'List', nor permissions or rate limits, but the filtering pipeline is valuable 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with the core purpose, then adds time-format and filtering details in two compact sentences. Every sentence earns its place with no repetition of the schema.
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?
An output schema exists, so return shape need not be explained, and the behavioral filtering is covered. However, for a five-parameter tool with zero schema descriptions, the missing semantics for holds, duration, and granularity make the definition incomplete for correct invocation.
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 compensate. It only clarifies that start/end are ISO 8601 strings via the '[start, end)' notation; it says nothing about include_holds (default true), duration_minutes (default 30), or granularity_minutes (default 15), leaving three of five parameters 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 ('List slots open to the calling agent') with an explicit interval scope '[start, end)'. It is clearly distinguishable from the sibling hold/booking/approval tools because it queries availability rather than mutating holds.
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 context is clear: use this to see open slots within a window, and the description notes that results are filtered by focus blocks, buffer rules, and sibling-agent holds. It does not explicitly name alternatives (e.g., create_hold) or state when not to use it, keeping it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
release_holdB
Release a previously-created hold so other agents can claim the slot before the TTL expires.
| Name | Required | Description | Default |
|---|---|---|---|
| hold_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that a hold has a TTL and that releasing it makes the slot claimable by other agents, but says nothing about idempotency, what happens when the hold_id is expired, already released, or unknown, or whether release requires ownership/auth.
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 lines with no filler; the effect (freeing the slot) is front-loaded after the verb. Slightly more could be said without bloating it, but nothing present 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?
An output schema exists, so return values need no explanation, and the one-parameter surface is small. However, for a state-changing tool with zero annotation coverage, missing error/edge-case behavior and the origin of hold_id leave the definition only minimally adequate.
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% and the single required parameter hold_id is never mentioned in the description. The agent gets no hint that hold_id comes from create_hold's response or what form it takes, so the description fails to compensate for the coverage gap.
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 (release) and resource (a previously-created hold) plus the effect: freeing the slot for other agents before TTL expiry. This implicitly links to create_hold, though it never names a sibling such as cancel_booking to disambiguate.
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 clause 'so other agents can claim the slot before the TTL expires' implies the trigger (you no longer need the slot and want to free it early), but there is no explicit when-to-use, when-not, or comparison against cancel_booking, which is the nearest alternative for undoing a booking.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_approvalA
Open a human sign-off request and return immediately.
action_type is a namespaced lowercase string such as
deploy.production, mailbox.send_external, or billing.refund.
summary is the one line a reviewer reads first; evidence is the
structured context they need to decide (target, amount, exact draft).
Returns {approval_id, status, expires_at}. Requires the
approvals:request scope.
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | ||
| evidence | No | ||
| action_type | Yes | ||
| ttl_seconds | No | ||
| idempotency_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it discloses the non-blocking semantics, the required `approvals:request` scope, and the return shape. It omits what happens on expiry, whether duplicate requests are deduplicated, and what ttl_seconds/idempotency_key actually do behaviorally.
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?
Front-loaded with the core action, then a compact parameter gloss and return/scope line. The examples earn their place by fixing the action_type convention. Slightly dense prose in the parameter paragraph, but no filler.
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?
The output schema covers the return values, so restating them is a bonus rather than a requirement. The real gap is that two of five parameters, including the idempotency control that matters for a request tool that can be retried, are left undefined in a tool with zero annotations.
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 coverage is 0%, so the description must compensate. It does well for action_type (namespaced lowercase format with three concrete examples), summary (what the reviewer reads first), and evidence (target, amount, exact draft). But ttl_seconds and idempotency_key — both meaningful for an approval request — get no explanation 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?
Specific verb+resource: 'Open a human sign-off request' plus a key behavioral modifier, 'return immediately'. This implicitly separates it from the blocking sibling wait_for_approval, though the sibling is never named explicitly.
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 phrase 'return immediately' hints that this is the fire-and-forget path and that something like wait_for_approval exists for blocking, but the agent must infer that routing. No explicit when-to-use or when-not-to-use statement, and no mention of prerequisites beyond the scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_approvalA
Wait for a human decision, bounded to 120 seconds.
The timeout is clamped to [1, 120] and the poll interval to
[1, 30] so no MCP host is left hanging. If the request is still
pending when the timeout lapses, the result carries
status: "pending" and timed_out: true; call get_approval or
wait_for_approval again to keep waiting. Proceed only when the
status is approved — denied, expired, and pending all mean stop.
| Name | Required | Description | Default |
|---|---|---|---|
| approval_id | Yes | ||
| timeout_seconds | No | ||
| poll_interval_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the load and does it well: it discloses the timeout clamp `[1, 120]`, the poll clamp `[1, 30]`, that the call blocks, and the exact `status: "pending" / timed_out: true` outcome on lapse. What it omits is the failure mode when `approval_id` is invalid or expired-upstream, and whether the blocking call has any side effect on the approval record.
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?
Front-loaded with the verb and the hard bound, and every clause carries information (clamps, pending semantics, stop conditions). Slightly padded by the line-broken formatting and the redundant re-statement that pending means stop after already saying `status: "pending"`.
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 an output schema present the description needn't enumerate return fields, yet it still explains the two fields that matter for loop control (`status`, `timed_out`) and the stop rule. The gap is the provenance and validity of the required `approval_id`, which an agent must supply correctly to call this at all.
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 coverage is 0%, so the description must compensate, and it does for two of three params by giving the legal ranges for `timeout_seconds` and `poll_interval_seconds` (bounds the schema's bare numeric types and defaults do not convey). `approval_id` is never explained — notably where it comes from, presumably `request_approval` — which keeps this from a 5.
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?
Opens with a specific verb and resource ('Wait for a human decision') plus a hard scope bound ('bounded to 120 seconds'). An agent can distinguish this blocking wait from the non-blocking sibling `get_approval` because the description explicitly frames re-calls to either as the continuation strategy.
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?
Gives explicit decision rules: 'Proceed only when the status is `approved` — denied, expired, and pending all mean stop,' which is a clear when-not. It names `get_approval` and `wait_for_approval` as follow-up options but never states the condition that should push an agent to the polling sibling instead of this blocking call, so the alternative selection is left partly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiA
Confirm the configured AGENTDRAFT_API_KEY is valid and return the calling agent's identity, priority, scopes, and the owner's timezone (so a client can render slots in the owner's zone).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it discloses that this validates credentials (implying an auth-failure path) and enumerates exactly what identity data comes back, including the owner timezone and why it matters. It stops short of saying the call itself has no side effects or what an invalid key returns, but the read-only, zero-parameter nature is evident.
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 sentences, front-loaded with the core action (confirm the key) followed by the payload. Every clause carries information — credential validation, returned fields, and the rationale for the timezone.
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?
An output schema exists, so return-field details need not be fully spelled out, and the description still summarizes them usefully. For a zero-param read tool this is nearly complete; the only missing piece is the recommended call ordering relative to the availability/booking siblings.
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 disambiguate; the baseline of 4 applies. The description correctly avoids inventing parameter behavior and instead spends its words on the returned identity fields.
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 concrete verb and resource: it validates the configured AGENTDRAFT_API_KEY and returns the calling agent's identity, priority, scopes, and the owner's timezone. That scope is unmistakable and distinct from every sibling (booking, approval, and availability tools), so an agent can select it without ambiguity.
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: 'so a client can render slots in the owner's zone' hints at a pre-flight/identity check before calling get_availability, but the description never says when to call this versus just calling get_availability, nor that it should be used to verify credentials first. No exclusions or alternatives are named.
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.
9 tool updates
v0.2.0- First observed
cancel_booking - First observed
commit_booking - First observed
create_hold - First observed
get_approval - First observed
get_availability - First observed
release_hold - First observed
request_approval - First observed
wait_for_approval - First observed
whoami
TDQS
Scored across 9 tools
Each tool targets a distinct resource+action: holds (create/release), bookings (commit/cancel), availability, identity, and approvals (request/get/wait). The only potentially close pair, get_approval vs wait_for_approval, is explicitly differentiated by non-blocking vs blocking behavior in their descriptions.
Nearly all tools follow a clean snake_case verb_noun pattern (get_availability, create_hold, commit_booking, request_approval). The single deviation is 'whoami', which is a fixed phrase rather than a verb_noun construction, but it is idiomatic and unambiguous.
Nine tools is well within the ideal 3-15 range and every tool maps to a concrete step in the booking or approval workflow. No tool feels redundant or filler.
The booking lifecycle is fully covered (availability, hold create/release, commit, cancel) and approvals support request/get/wait. Minor gaps remain: there is no list_approvals to enumerate pending requests and no way to withdraw/cancel an approval request, but agents can work around these with get_approval.
Maintenance
Related MCP Connectors
214 tools for AI agents over one MCP endpoint: image, video, audio, 3D, data, storage, mail, GPUs.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
The OpenRouter for tools. One MCP connection gives any AI agent 254 hosted tools, pay per call.
Context and control for any AI. Agent identity, scoped access, and proof across tools.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceExposes identity, tools, workflows, guardrails, and evaluation as MCP tools — so any AI agent can read and write your ecosystem programmatically.16 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to send emails, create drafts in Gmail, and append content to Google Docs via standardized MCP tools.34 npmISC
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to register, send/receive email, store encrypted credentials, emit audit events, and query behavioral trust scores via MCP tools.4 npm5MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to discover and create agents, durably submit messages with verifiable replies, and search source-linked local memory. Exposes eight authenticated tools with owner-approved OAuth, transcript-backed verification, and explicit control over history import and embedding.MIT