agentdraft-mcp
agentdraft-mcp — AgentDraft용 MCP 서버
MCP 서버로서 인박스, 충돌 없는 캘린더, 감사 도구를 갖춘 AI 에이전트용 ops API인 AgentDraft를 MCP를 인식하는 모든 AI 클라이언트가 호출할 수 있는 도구 집합으로 노출합니다.
에이전트 런타임이 Claude Desktop, Claude Code, Cursor, Cline, OpenAI Agents SDK 앱 또는 기타 MCP 호스트라면 이 서버를 사용하세요. 이 서버는 agentdraft Python SDK의 얇은 래퍼로, REST API 및 언어 SDK와 동일한 인증, 동일한 오류, 동일한 의미 체계를 제공합니다.
설치
pip install agentdraft-mcpPython 3.10+와 AgentDraft 대시보드에서 발급된 유효한 avs_live_… 에이전트 키가 필요합니다.
Related MCP server: Generic MCP Server for Google Workspace
업그레이드
pip install -U agentdraft-mcp릴리스 노트: https://agentdraft.io/changelog
MCP 클라이언트 구성
agentdraft-mcp는 PyPI에 있으므로 설치만 하면 아래 JSON 구성이 별도의 다운로드 없이 모든 MCP 호스트에서 바로 작동합니다.
Claude Desktop / Claude Code — JSON 구성 (권장)
~/Library/Application Support/Claude/claude_desktop_config.json(macOS) 또는 Windows/Linux의 해당 파일을 편집하세요:
{
"mcpServers": {
"agentdraft": {
"command": "agentdraft-mcp",
"env": {
"AGENTDRAFT_API_KEY": "avs_live_..."
}
}
}
}Cursor / Cline / 일반 stdio 호스트
{
"mcpServers": {
"agentdraft": {
"command": "python",
"args": ["-m", "agentdraft_mcp"],
"env": {
"AGENTDRAFT_API_KEY": "avs_live_..."
}
}
}
}개발 백엔드를 대상으로 한 로컬 개발 시 AGENTDRAFT_BASE_URL=http://localhost:8080도 설정하세요.
Claude Desktop — .mcpb 데스크톱 확장 프로그램 (끌어서 놓기)
각 릴리스에는 GitHub Releases에 .mcpb 데스크톱 확장 번들도 포함되어 있습니다. agentdraft-mcp.mcpb를 Claude Desktop → 설정 → 확장 프로그램으로 끌어다 놓고 avs_live_… API 키를 붙여넣으면 됩니다 — JSON 편집도 pip install도 필요 없습니다.
도구
도구 | 용도 |
| API 키를 확인하고 에이전트의 ID, 우선순위, 범위, 소유자의 |
| 호출 에이전트가 사용할 수 있는 [start, end) 구간의 슬롯을 나열합니다 |
| 슬롯을 임시로 예약합니다(30초 TTL). 선택적 |
| 다른 에이전트가 가져갈 수 있도록 홀드를 해제합니다 |
| 예약을 확정합니다 — 원자적 compare-and-swap. 선택적 |
| 호출 에이전트가 소유한 확정 예약을 취소합니다 |
모든 시간은 ISO 8601 문자열(2026-06-01T14:00:00Z)입니다. 모든 쓰기 도구는 안전한 재시도를 위해 idempotency_key를 허용합니다. create_hold와 commit_booking은 또한 슬롯이 누구를 위한 것인지 기록하는 선택적 title 및 invitee({name, email, notes})를 허용하며, 이 정보는 대시보드에서 소유자에게 표시됩니다.
충돌이 표시되는 방식
두 에이전트가 동일한 슬롯을 차지하기 위해 경쟁하면 정확히 하나만 승리합니다. 패배한 에이전트는 문자열 오류가 아닌 구조화된 outranked 페이로드를 받습니다:
{
"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."
}에이전트는 이 페이로드를 기준으로 분기하여 동일한 슬롯을 재시도하지 말고 대안을 제안해야 합니다.
AgentDraft SDK와의 차이점
Python/TS SDK | MCP 서버 | |
호출자 | 직접 작성한 앱 코드 | AI 클라이언트(Claude Desktop 등) |
전송 방식 | api.agentdraft.io로 직접 HTTPS | MCP 호스트와 이 프로세스 간의 stdio |
인증 |
|
|
의미 체계 | 동일함 | 동일함 |
오류 | 타입화된 Python 예외 | 도구 결과의 구조화된 JSON |
에이전트를 직접 작성하는 경우에는 SDK를 사용하세요. 다른 사람의 에이전트 런타임(Claude Desktop, Cursor, Cline, 일반 MCP 호스트)이 커스텀 코드 없이 사용자를 대신하여 AgentDraft를 호출해야 하는 경우에는 이 MCP 서버를 사용하세요.
링크
프로토콜 사양: https://agentdraft.io/spec
API 문서: https://agentdraft.io/docs
Python SDK:
agentdraftTypeScript SDK:
agentdraft
보안
취약점을 발견하셨나요? SECURITY.md를 참조하세요. 보안 신고는 공개 이슈로 열지 마십시오.
기여
CONTRIBUTING.md를 참조하세요. ryabinski-labs/agentdraft-mcp는 AgentDraft의 비공개 애플리케이션 저장소에 있는 디렉터리의 공개 미러입니다 — 이슈와 풀 리퀘스트는 해당 저장소에서 확인되며 다음 릴리스 동기화를 통해 다시 반영됩니다.
라이선스
MIT — 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