Andrii Co. Notary & Apostille Assistant
Server Details
Book a Washington notary or apostille appointment, get a quote, and track it, via AI assistant.
- Status
- Healthy
- Uptime
- 97.9% over 54 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 15 tools
Each tool targets a distinct resource or action, and the only near-overlap (book_appointment vs request_booking) is explicitly resolved by sign-in state in both descriptions. Other tools (pricing, turnaround, requirements, coverage, docs) address clearly separate customer questions.
Nearly all names follow a snake_case verb_noun pattern (book_appointment, cancel_booking, get_price_quote). 'my_bookings' is the lone noun-phrase outlier, which is a minor inconsistency but does not harm readability.
15 tools sit at the top of the well-scoped range and each maps to a real workflow (booking, apostille, pricing, service info, documentation). No tool appears redundant or trivial for the breadth of the notary/apostille domain.
The surface covers the full booking lifecycle (search, book/request, list, reschedule, cancel, status), apostille eligibility and submission, pricing/turnaround, service-area checks, price matching, and documentation search. No obvious gap exists for the stated domain.
Available Tools
15 toolsbook_appointmentAInspect
Schedule an appointment tied to the signed-in customer's account — still a request until the notary confirms it, never guaranteed. PREFER this over request_booking whenever the customer is signed in: only a booking on their own account can later be listed, rescheduled or cancelled through this connector. Guests go through request_booking. Accepts: service (e.g. office, mobile, apostille, loan), scheduled_at — a slot's startUnix from search_availability, omitted for a call-me request — plus address for mobile, notes, document_count. Returns a Pending reference; fails if not signed in.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Anything else the notary should know. | |
| address | No | Meeting address (required for "mobile"; omit for office/apostille). | |
| service | Yes | Service: office | mobile | apostille | loan. | |
| scheduled_at | No | The chosen slot's `startUnix` (from search_availability). Omit for a "call me to schedule" request (no time held). | |
| document_count | No | Number of documents. Default 1. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | Account tools: the booking's status after this call (Pending after book_appointment). |
| message | Yes | Customer-facing outcome; relay it as written — bookings are requests until the notary confirms. |
| manageUrl | No | Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise). |
| onAccount | No | True when the request was filed on the signed-in customer's own account — they can then list it with my_bookings and change it with reschedule_booking / cancel_booking. Absent or false means a guest request, managed through the emailed link. |
| reference | No | Request / order reference for check_request_status (guest tools) or my_bookings (account tools). |
| appendedToExisting | No | True when existing_reference was given and the request was extended, not duplicated. |
| ourComparableQuoteCents | No | request_price_match only, when computable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important contextual info: appointments are requests pending notary confirmation, never guaranteed; returns a Pending reference; fails if not signed in. These are useful beyond the annotations, which already set readOnlyHint=false and destructiveHint=false. However, the description doesn't warn about potential side effects beyond creating a pending request, and doesn't explain what happens if confirmation fails or what 'fails if not signed in' entails (error type, partial state). No contradiction with 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?
The description is compact and front-loaded with the most important decision rule (prefer over request_booking when signed in), followed by parameter highlights and return/error behavior. Every sentence earns its place; 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?
Given the output schema exists and annotations declare openWorldHint=true, the description covers the key behavioral context: pending status, signed-in requirement, guest fallback, and parameter specifics. It could mention what happens on failure in more detail, but for selecting and invoking the tool correctly, it's nearly complete.
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 100%, so the schema already documents all parameters. The description adds usage nuance: scheduled_at should be 'a slot's startUnix from search_availability, omitted for a call-me request', and address is for mobile. This adds value, but it largely paraphrases the schema descriptions. Baseline 3 is appropriate.
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 clearly states the action ('Schedule an appointment'), ties it to the signed-in customer's account, and differentiates it from request_booking. It also lists the key parameters (service, scheduled_at, address, notes, document_count) and the return type, making the tool's purpose unmistakable.
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 explicitly instructs to prefer this tool over request_booking when the customer is signed in, and directs guests to request_booking. It also notes that only a booking on the customer's own account can later be listed, rescheduled, or cancelled, providing clear decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_bookingADestructiveInspect
Cancel a booking on the signed-in account — Pending or Scheduled only. Use when the visit is no longer needed; guests cancel via their emailed manage link instead. Accepts: order_id (e.g. copied from my_bookings). Returns a cancellation notice; fails if the booking is not yours, is neither Pending nor Scheduled, or not signed in.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | The booking's order id (from my_bookings). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | Account tools: the booking's status after this call (Pending after book_appointment). |
| message | Yes | Customer-facing outcome; relay it as written — bookings are requests until the notary confirms. |
| manageUrl | No | Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise). |
| onAccount | No | True when the request was filed on the signed-in customer's own account — they can then list it with my_bookings and change it with reschedule_booking / cancel_booking. Absent or false means a guest request, managed through the emailed link. |
| reference | No | Request / order reference for check_request_status (guest tools) or my_bookings (account tools). |
| appendedToExisting | No | True when existing_reference was given and the request was extended, not duplicated. |
| ourComparableQuoteCents | No | request_price_match only, when computable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructive behavior, and the description adds concrete constraints: it only succeeds on Pending/Scheduled bookings, fails when the booking is not yours or the user is not signed in, and returns a cancellation notice. This meaningfully supplements the structured hints without contradicting them.
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-load the core action and then cover usage trigger, exclusions, accepted parameter, and failure conditions. Every clause adds decision-relevant information with no filler or redundant explanation.
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 one-parameter destructive tool with an output schema, the description covers purpose, preconditions, failure modes, and result. An agent has enough information to select and invoke this correctly, including knowing not to use it for guests or non-Pending/Scheduled bookings.
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 100% and the only parameter, order_id, is already described as 'The booking's order id (from my_bookings).' The description repeats this by saying 'e.g. copied from my_bookings,' but does not add new semantic details such as format, length, or validation rules.
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: 'Cancel a booking on the signed-in account' and immediately scopes it to 'Pending or Scheduled only.' This clearly identifies the operation and distinguishes it from sibling tools like book_appointment and reschedule_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?
Explicitly states the trigger: 'Use when the visit is no longer needed,' and provides an exclusion for guests: 'guests cancel via their emailed manage link instead.' It also lists preconditions such as the booking being yours, Pending/Scheduled, and the user being signed in.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_request_statusARead-onlyInspect
Check what became of a previously submitted request — no sign-in needed, guests welcome. Use when the customer asks whether the notary confirmed, moved, cancelled, or merged it. Accepts: reference — the id returned at submission or the token from the emailed confirm link. Returns the service plus status and timing (PII-minimal — never address, name, or notes; Pacific time, e.g. scheduledAtPacific). Fails if the reference is wrong — a not found reply.
| Name | Required | Description | Default |
|---|---|---|---|
| reference | Yes | The reference id returned when the request was submitted (also accepts the token from the emailed confirm link). |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| status | Yes | Pending | Scheduled | EnRoute | InProgress | Completed | Notarized | PickedUp | Cancelled | NoShow | MergedWithOther. The STORED operator lifecycle — `Completed` means the notarial act happened (signed), not that the order is done. `note` says what the word means for the customer; read that rather than branching on this. |
| service | Yes | office | apostille | mobile | loan | ron | apostille_mail; null on a legacy row. |
| reference | Yes | |
| mergedInto | No | Only for MergedWithOther: the surviving appointment's status and time. |
| scheduledAt | No | Unix seconds. |
| displayStatus | No | The customer-facing word: {code, tone}. Code is the derived display status (Signed | Apostilled | ReadyToShip | Shipped | Complete | PartiallyComplete | DealDone | …); tone is ok | warn | err | info | neutral. Quote the code's meaning from `note`, never the stored status. |
| requestedTime | No | Unix seconds the customer asked for on a lead, or null. |
| scheduledAtPacific | No | |
| awaitingCustomerConfirmation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnlyHint/destructiveHint annotations: discloses the auth profile (no sign-in), the privacy posture of the response (PII-minimal, never address/name/notes), timezone convention (Pacific, e.g. scheduledAtPacific), and the failure mode (not-found on a bad reference). This is rich, actionable 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?
Front-loads purpose, then usage, then parameter and return/failure notes in a tight paragraph with no filler. Slightly dense with parenthetical asides, but every clause earns 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?
For a one-parameter read tool with an output schema, the description supplies everything else an agent needs: eligibility, trigger conditions, input variants, privacy constraints, timezone, and error behavior. Nothing material is missing.
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 100% and the sole `reference` parameter is already documented in the schema. The description restates that it accepts the submission id or the emailed confirm-link token, adding little beyond what the schema says. Baseline 3 is correct when the schema carries the parameter definition.
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+resource ('check what became of a previously submitted request') and immediately scopes it apart from siblings by noting it needs no sign-in while other booking tools (my_bookings) do. An agent can tell what it does and who it serves 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?
Gives a concrete trigger ('use when the customer asks whether the notary confirmed, moved, cancelled, or merged it') and an access condition (guests welcome, no sign-in). It does not explicitly name a when-not or a sibling alternative, so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_service_areaARead-onlyInspect
Check whether an address sits inside our Washington coverage and resolves precisely enough to book. Use when the customer wants an area answer without searching slots — search_availability already validates the area itself. Accepts: address (e.g. a Seattle street or ZIP) and optional service — notary or apostille rules differ. Returns withinServiceArea, distanceMiles, precise; if the address cannot be resolved the message says not found.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Street address, city, or ZIP to check (Washington State service area). | |
| service | No | "notary" (default) or "apostille" — the service-area rules differ slightly. |
Output Schema
| Name | Required | Description |
|---|---|---|
| label | No | Formatted address, or null when the address could not be resolved. |
| region | No | |
| country | No | |
| message | No | Why the place is not bookable as given, or null. |
| precise | Yes | False when a street and city are still needed to pin the spot. |
| distanceMiles | No | Straight-line miles from the Bothell office (display only, not a routed leg). |
| withinServiceArea | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only and non-destructive nature. The description goes beyond annotations by disclosing the return fields (withinServiceArea, distanceMiles, precise) and the failure behavior ('if the address cannot be resolved the message says not found'). It adds meaningful behavioral context, though it doesn't detail resolution thresholds or geocoding 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?
Three sentences with each one earning its place: purpose and scope, usage guidance with alternative, then parameter and return behavior. The information is front-loaded, and there is no filler or 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?
For a two-parameter read-only tool with an output schema and clear annotations, the description covers everything an agent needs: use case, parameter semantics, return values, and not-found handling. No critical information is missing.
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?
Input schema already covers both parameters with 100% description coverage, so the baseline is 3. The description adds extra value by giving an example of an acceptable address ('a Seattle street or ZIP') and explaining why service matters ('notary or apostille rules differ'), supplementing the schema with practical usage 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?
The description opens with a specific verb and resource: 'Check whether an address sits inside our Washington coverage and resolves precisely enough to book.' It also immediately differentiates itself from the sibling search_availability, so an agent knows exactly what this tool does and what it does not do.
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 explicitly states when to use this tool: 'Use when the customer wants an area answer without searching slots' and names the alternative, search_availability, which 'already validates the area itself.' It also notes that the optional service parameter changes notary vs. apostille rules, giving the agent clear selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_apostille_requirementsARead-onlyInspect
Check whether a document can get an apostille and how: certified vital records mail in as-is, private papers (e.g. a diploma or POA) need notarization first, federal ones go to the US Department of State. Use when the customer asks is this apostillable. Accepts: document in plain words, optional issuing_state, destination_country. Returns the category, the honest do-it-yourself path and our offer; unclear wording yields an unknown category, never an error.
| Name | Required | Description | Default |
|---|---|---|---|
| document | Yes | The document in plain words (e.g. "Washington birth certificate", "university diploma", "FBI background check", "power of attorney"). | |
| issuing_state | No | The US state that issued or notarized it (default Washington). | |
| destination_country | No | The country the apostilled document is for. |
Output Schema
| Name | Required | Description |
|---|---|---|
| diyPath | Yes | |
| category | Yes | Document class: vital_record_mailin_ready, needs_notarized_copy, notarized_document, court_document, federal_authentication, unknown. |
| document | Yes | |
| ourOffer | Yes | |
| disclaimer | No | |
| destination | No | |
| explanation | Yes | |
| howToProceed | No | |
| issuingState | Yes | |
| eligibleForMailInAsIs | Yes | True when no notarial act is needed first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and destructive annotations, the description discloses the three-path processing logic, the exact contents of the response (category, DIY path, offer), and the edge-case guarantee that unclear wording yields an 'unknown' category rather than an error. This is substantial 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?
The description is a single dense paragraph that front-loads purpose, then covers categories, trigger, parameters, and behavior. Every clause carries distinct information, and there is no filler or repetition of schema content.
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?
Given that an output schema is present, the description does not need to detail return fields. It fully covers input expectations, decision categories, the DIY path, and the fallback behavior, making it complete for an informational lookup 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 coverage is 100% with meaningful descriptions for all three parameters, so the baseline is 3. The description adds only that 'document' should be in plain words and that the other two are optional, which is minor and mostly redundant with the schema's default null values.
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: 'Check whether a document can get an apostille and how,' and immediately distinguishes the three document categories (vital records, private papers, federal). This makes it clear what the tool does and separates it from action-oriented siblings like request_apostille.
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?
It explicitly names the trigger condition: 'Use when the customer asks is this apostillable,' which is clear and precise. It does not explicitly name when not to use this tool or call out alternatives, but the trigger is specific enough that an agent can route correctly against sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_quoteARead-onlyInspect
Calculate a server-authoritative USD price estimate before shipping — pure, no side effects, nothing booked. Use when the customer asks about cost. Accepts: document_count, mobile, after_hours, apostille plus tier (e.g. expedited, priority, standard, mailin); set needs_notarization false for already-certified records; ua_lane (withinUkraine | fromUsa) prices the Ukraine direct lane, translation_docs the in-Ukraine translation. Returns amountCents and line items; fails if apostille is true and tier is invalid (with apostille false, tier is ignored).
| Name | Required | Description | Default |
|---|---|---|---|
| tier | No | Apostille tier when `apostille`: expedited | priority | standard | mailin. | |
| mobile | No | True if we travel to the customer (adds the flat travel fee). | |
| ua_lane | No | Ukraine delivery lane: withinUkraine (weekly batch, included) or fromUsa (direct: NP postage estimate + the $25 dispatch fee). | |
| apostille | No | True to include a Secretary-of-State apostille. | |
| after_hours | No | Mobile only: the chosen slot is after 6pm or on a weekend. | |
| document_count | No | Number of documents (1–20). Default 1. | |
| translation_docs | No | Apostille documents translated in Ukraine ($20/doc; the first doc is free on the direct lane). | |
| needs_notarization | No | Set false for a mail-in apostille of already-certified public records (birth/marriage/death certificates) that need no notarial act. |
Output Schema
| Name | Required | Description |
|---|---|---|
| currency | Yes | |
| lineItems | Yes | |
| amountCents | Yes | |
| howToProceed | Yes | |
| prepaymentRequired | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/destructiveHint=false, and the description reinforces this with 'pure, no side effects, nothing booked'. Beyond that it discloses a genuine error mode ('fails if `apostille` is true and `tier` is invalid') and the tier-ignored-when-apostille-false rule, which annotations cannot convey.
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 dense sentences, front-loaded with purpose and safety, then parameters, then return/failure behavior. Efficient and well ordered, though the parameter sentence is long and list-like.
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 annotations covering safety and an output schema covering amountCents/line items, the description fills the remaining gaps: parameter interactions and failure conditions. The only omission is how it relates to request_price_match, a meaningful ambiguity given the sibling set.
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 100%, so baseline would be 3, but the description adds cross-parameter semantics the schema lacks: tier examples, the ua_lane choice and its pricing effect, the first-doc-free interaction of translation_docs with the direct lane, and the needs_notarization condition.
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+resource ('Calculate a server-authoritative USD price estimate') and immediately scopes it with 'pure, no side effects, nothing booked', which distinguishes it from the booking siblings. An agent can tell this is a pre-sale quote tool and not an action tool 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?
Gives a clear trigger: 'Use when the customer asks about cost.' However, it never addresses the obvious alternative in the sibling list, request_price_match, leaving the agent to guess which pricing tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_servicesARead-onlyInspect
List the service catalog — Washington notary and apostille offerings with USD prices and accepted payment options (e.g. card, PayPal, Venmo, cash). Optional — the server instructions already summarize the flow; use when the customer asks what we offer or how to pay. Takes: no arguments. Returns services plus payment notes — a static catalog (no error if repeated).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| business | Yes | |
| location | No | |
| services | Yes | |
| languages | No | |
| priceMatch | No | |
| priceQuote | No | Which tool gives an exact figure. |
| paymentNote | Yes | |
| serviceArea | Yes | |
| paymentOptions | Yes | |
| remoteOnlineNotarization | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only and non-destructive behavior. The description adds that this is a static catalog with no error if repeated, which conveys idempotency, and states the return shape (services plus payment notes). This is useful beyond the annotations, though it does not detail response structure further.
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: purpose, then usage context, then I/O and behavior. Every sentence earns its place, and the note about the server instructions is an efficient way to manage optional invocation.
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?
Given the zero-parameter, read-only, static nature of this tool and an existing output schema, the description covers all necessary decision points: when to call it, what it returns, and that repeated calls are harmless. Nothing important is missing.
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 has zero parameters, and the schema shows an empty properties object, so the baseline is 4. The description reinforces this with 'Takes: no arguments,' leaving no ambiguity for the agent.
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 begins with the specific verb 'List' and a concrete resource: the service catalog for Washington notary and apostille offerings, including prices and payment options. This clearly distinguishes it from siblings like get_price_quote, which targets a specific quote, and get_apostille_requirements, which targets requirements.
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 explicitly says to use it when the customer asks what the business offers or how to pay, and notes the tool is optional because server instructions already summarize the flow. It provides clear trigger conditions but does not name alternatives or give explicit when-not-to-use exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_turnaround_estimateARead-onlyInspect
Calculate typical turnaround — apostille processing days plus mailing and delivery legs. Ranges, never guarantees; exact appointment times come from search_availability. Use when the customer asks how long. Accepts: service (e.g. notarization, apostille, apostille_mail, loan_signing), optional tier, shipping, destination_country, ua_lane (withinUkraine | fromUsa — the Ukraine lane when shipping is omitted). Returns staged day estimates; an unknown tier falls back to the standard figure, not an error.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | No | Apostille speed tier when service is apostille: expedited | priority | standard. | |
| service | Yes | Service: notarization | apostille | apostille_mail | loan_signing. | |
| ua_lane | No | Ukraine delivery lane: withinUkraine (weekly batch, 7–14 days) or fromUsa (direct from the USA, 7–10 days). Fills `shipping` when that is omitted; an explicit `shipping` always wins. | |
| shipping | No | Delivery: pickup | us | ukraine | ukraine_direct | international. If omitted, inferred from destination_country (apostille legs default to US shipping) or from `ua_lane` (fromUsa ⇒ ukraine_direct). | |
| destination_country | No | Destination country (used to infer shipping when `shipping` is omitted). |
Output Schema
| Name | Required | Description |
|---|---|---|
| tier | No | |
| stages | Yes | |
| service | Yes | |
| disclaimer | Yes | |
| howToProceed | No | |
| typicalTotalDaysLow | Yes | |
| typicalTotalDaysHigh | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuinely useful behavior: results are ranges and never guarantees, and an unknown `tier` silently falls back to the standard figure rather than erroring — a non-obvious failure mode an agent would otherwise mis-handle.
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 purpose before the alternative and the parameter recap. The single dense paragraph packs a lot in but every clause carries operational content; it is slightly over-stuffed rather than wasteful.
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, return shape need not be explained, yet the description still notes 'staged day estimates' and the fallback semantics. Combined with explicit alternatives and the range-not-guarantee caveat, an agent has everything needed to call and interpret this read-only estimate 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 100%, so the baseline is 3; the description still adds value by giving concrete `service` examples (notarization, apostille, apostille_mail, loan_signing) and restating that `ua_lane` supplies the Ukraine lane when `shipping` is omitted, plus the unknown-tier fallback. It stops short of documenting destination_country inference beyond a pointer.
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+resource (calculate turnaround) and immediately defines what the estimate comprises: apostille processing days plus mailing and delivery legs. It also separates itself from the sibling search_availability, so an agent can distinguish estimate vs. exact availability without opening either 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?
'Use when the customer asks how long' gives an explicit trigger, and 'exact appointment times come from search_availability' names the alternative and the condition that routes to it. The boundary between this tool and the availability lookup is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
my_bookingsARead-onlyInspect
List every booking on the signed-in customer's own account, sorted by scheduled time, latest first. Use when an authenticated customer asks what is scheduled, or to grab an order_id before reschedule_booking or cancel_booking. Takes: no arguments. Returns orderId, service, status, scheduledAt, location per row (e.g. Scheduled vs Pending); fails if not signed in.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| bookings | Yes | Latest first. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds sorting behavior, return fields (orderId, service, status, scheduledAt, location), status examples, and a clear authentication failure mode. This goes well beyond the annotation defaults and gives agents a precise picture of what the call does.
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 sentences, each with a distinct role: purpose, usage triggers, and arguments/return/error. Front-loaded with the core behavior and 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?
Covers purpose, sort order, use cases, return fields, status examples, and authentication requirement. With an output schema present and no parameters, nothing an agent needs to invoke it correctly is missing.
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 the empty schema already covers everything. The description's 'Takes: no arguments' is redundant but harmless. For 0-param tools the baseline is 4.
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 ('List'), a clear resource ('every booking on the signed-in customer's own account'), and adds sorting order. The phrase 'own account' distinguishes it from any broader booking view, and no sibling tool overlaps with this read-only list.
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?
Explicitly says 'Use when an authenticated customer asks what is scheduled' and 'to grab an order_id before reschedule_booking or cancel_booking.' It names the exact sibling tools it feeds into, and the failure condition 'fails if not signed in' implies when it should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_apostilleAInspect
Submit a mail-in apostille request — a lead for already-certified Washington public records needing NO notarization (e.g. birth or marriage certificates). Use when get_apostille_requirements says they qualify. Requires: documents, name, and an email or phone; the notary replies with mailing instructions and a quote — nothing charged until approved. Pass existing_reference to extend an open request. Returns a reference; fails if the name or a valid contact is missing.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The customer's FULL LEGAL NAME exactly as on their government-issued ID (never a nickname) — apostille filings print it. | |
| No | Email. Collect BOTH an email AND a phone in one question when possible; at least one is required. | ||
| notes | No | Anything else the notary should know. | |
| phone | No | Phone with country code — the notary confirms fastest by phone/SMS. | |
| documents | Yes | What documents, in plain words (e.g. "2 birth certificates for Ukraine"). | |
| existing_reference | No | To ADD these documents to an EXISTING request instead of creating a second one, pass that request's reference id (with the same email/phone so we can verify the customer). Nothing new is created. | |
| destination_country | No | Destination country the apostilled documents are for. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | Account tools: the booking's status after this call (Pending after book_appointment). |
| message | Yes | Customer-facing outcome; relay it as written — bookings are requests until the notary confirms. |
| manageUrl | No | Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise). |
| onAccount | No | True when the request was filed on the signed-in customer's own account — they can then list it with my_bookings and change it with reschedule_booking / cancel_booking. Absent or false means a guest request, managed through the emailed link. |
| reference | No | Request / order reference for check_request_status (guest tools) or my_bookings (account tools). |
| appendedToExisting | No | True when existing_reference was given and the request was extended, not duplicated. |
| ourComparableQuoteCents | No | request_price_match only, when computable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behaviors well beyond the annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false): it reveals this creates a lead, not a confirmed order; that the notary asynchronously 'replies with mailing instructions and a quote'; that 'nothing charged until approved'; that existing_reference extends an open request; and that it 'fails if the name or a valid contact is missing.' This gives the agent a realistic model of the tool's side effects and non-deterministic human-in-the-loop behavior, which openWorldHint alone does not convey.
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?
Roughly four sentences contain the core purpose, the gating condition, required fields, the async reply flow, pricing behavior, extension semantics, and failure modes. The most important constraint (what this tool is for) is front-loaded, and every sentence adds non-redundant information. No filler or restatement of the title.
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 7-parameter, 2-required tool with a rich output schema, the description is complete: it covers eligibility, prerequisites, the asynchronous process, approval/payment semantics, the extension path, the return value ('Returns a reference'), and failure conditions. Nothing an agent needs to decide whether and how to call it is left unstated.
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 100%, so baseline is 3. The description adds only marginal parameter insight beyond the schema: it reinforces that 'an email or phone' is required (already stated in the email property's schema description) and ties failure to missing name/contact. It does not add format, syntax, or value details beyond what the schema already documents.
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: 'Submit a mail-in apostille request — a lead for already-certified Washington public records needing NO notarization.' The scope is sharply delimited (mail-in, certified records, no notarization), which clearly separates it from siblings like request_booking, request_price_match, and get_apostille_requirements. The eligibility boundary ('already-certified', 'NO notarization') makes the tool's identity unambiguous.
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 gives an explicit when-to-use condition tied to a named sibling: 'Use when get_apostille_requirements says they qualify.' The 'already-certified ... needing NO notarization' phrasing implicitly states when-not-to-use (records still needing notarization or certification), and the lead-based nature distinguishes it from booking/price-match siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_bookingAInspect
Submit a booking request — a lead, NOT a confirmed appointment; the notary follows up. Use when ready to book AND the customer is not signed in; a signed-in customer goes through book_appointment instead. Requires: service (e.g. office, mobile, loan), the FULL LEGAL NAME as on government ID, and an email or phone (collect both). Pass the chosen startUnix from search_availability as desired_time_unix; to modify an open request pass existing_reference, never a duplicate. Returns a reference for check_request_status; fails if the name or a valid contact is missing.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The customer's FULL LEGAL NAME exactly as on their government-issued ID (never a nickname or chat display name) — notarial records and apostille filings print it. Ask if you only know a first name. | |
| No | Email. Collect BOTH an email AND a phone in one question when possible; at least one is required. | ||
| notes | No | Anything else the notary should know. | |
| phone | No | Phone with country code (e.g. +1...). The notary confirms fastest by phone/SMS — ask for it even when an email is known. | |
| address | No | Meeting address — MOBILE ONLY. Office and apostille visits automatically use our Bothell office; omit this for them. | |
| service | Yes | Service: office | mobile | apostille | loan. | |
| desired_time | No | The wanted time in plain words, when no exact slot was chosen (rides the notes; the notary confirms a real time). | |
| document_count | No | Number of documents. Default 1. | |
| desired_time_unix | No | The chosen slot's `startUnix` from search_availability (Unix seconds). Pass it so the request carries the exact wanted time — still a request, never a hold. | |
| existing_reference | No | To ADD to or change an EXISTING request instead of creating a second one (e.g. "also apostille it", "make it 3 documents"), pass that request's reference id here — the same email/phone must be provided so we can verify it's the same customer. Nothing new is created. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | Account tools: the booking's status after this call (Pending after book_appointment). |
| message | Yes | Customer-facing outcome; relay it as written — bookings are requests until the notary confirms. |
| manageUrl | No | Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise). |
| onAccount | No | True when the request was filed on the signed-in customer's own account — they can then list it with my_bookings and change it with reschedule_booking / cancel_booking. Absent or false means a guest request, managed through the emailed link. |
| reference | No | Request / order reference for check_request_status (guest tools) or my_bookings (account tools). |
| appendedToExisting | No | True when existing_reference was given and the request was extended, not duplicated. |
| ourComparableQuoteCents | No | request_price_match only, when computable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses critical behavior: the booking is not a confirmed appointment, the notary follows up, passing existing_reference modifies rather than creates a duplicate, and the call fails if name or valid contact is missing. This is substantial behavioral context that the boolean annotations alone cannot convey.
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 dense but every clause earns its place: core distinction, usage condition, required inputs, cross-tool parameter provenance, modification behavior, and failure conditions. Key information is front-loaded, with the most important distinction stated first.
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 tool with 10 parameters and an output schema, the description covers the essential decision criteria, required fields, cross-tool dependencies, modification semantics, and what the caller receives for follow-up. The rich input schema and output schema handle the remaining details, so nothing needed to call the tool correctly is missing.
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 100%, so the schema already documents parameters well and the baseline is 3. The description adds meaningful semantics by requiring the FULL LEGAL NAME, insisting both email and phone be collected, tying desired_time_unix to search_availability's startUnix, and explaining existing_reference as an edit mechanism with 'never a duplicate'.
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 ('Submit a booking request') and immediately clarifies that this is a lead, not a confirmed appointment. It also distinguishes itself from the sibling book_appointment, leaving no ambiguity about what the tool does.
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?
Explicitly says when to use this tool ('ready to book AND the customer is not signed in') and when not to ('a signed-in customer goes through book_appointment instead'). It also connects to search_availability for the time parameter and check_request_status for the returned reference, giving clear routing and follow-up guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_price_matchAInspect
Request a price-match review of a competitor's WRITTEN quote from a comparable licensed notary — it never sets our price automatically. Use when the customer found a cheaper offer. Requires: competitor_name, competitor_price_usd, service (e.g. office, mobile, apostille), name, and an email or phone. Returns a logged reference and, where computable, our comparable quote; the notary decides within one business day. Fails if the name or a valid contact is missing.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The customer's name. | |
| No | Email — provide an email OR a phone so we can reach them. | ||
| notes | No | Anything else the notary should know. | |
| phone | No | Phone — provide an email OR a phone so we can reach them. | |
| service | Yes | Service: office | mobile | apostille | apostille_mail | loan. | |
| competitor_url | No | Link to the competitor's quote/page, if any (stored for the operator, never fetched). | |
| document_count | No | Number of documents, for our comparison quote. Default 1. | |
| competitor_name | Yes | The competitor's business name. | |
| competitor_price_usd | Yes | The competitor's quoted price, in US dollars. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | Account tools: the booking's status after this call (Pending after book_appointment). |
| message | Yes | Customer-facing outcome; relay it as written — bookings are requests until the notary confirms. |
| manageUrl | No | Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise). |
| onAccount | No | True when the request was filed on the signed-in customer's own account — they can then list it with my_bookings and change it with reschedule_booking / cancel_booking. Absent or false means a guest request, managed through the emailed link. |
| reference | No | Request / order reference for check_request_status (guest tools) or my_bookings (account tools). |
| appendedToExisting | No | True when existing_reference was given and the request was extended, not duplicated. |
| ourComparableQuoteCents | No | request_price_match only, when computable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals that the notary decides within one business day, that the tool does not automatically set prices, that it returns a logged reference and a comparable quote when computable, and that it fails without a name or valid contact. This is substantial behavioral context beyond the annotations, with no contradiction.
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 dense sentences with no filler; the core purpose and the most important caveat are front-loaded. Every sentence contributes actionable operational 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?
With full schema coverage and an output schema present, the description adds exactly what is missing: when to use it, what happens after invocation, the human-decision timing, and failure conditions. An agent has enough to select, invoke, and set expectations 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 coverage is 100%, so the schema already documents all parameters. The description adds meaningful constraints: the email-or-phone requirement, service examples, and the failure condition when contact info is missing, which enriches rather than merely repeats 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?
Description names a specific action (request a price-match review), a specific target (a competitor's written quote from a comparable licensed notary), and a key scoping caveat: it never sets the price automatically. This distinguishes it from quote and booking siblings even without naming them.
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?
"Use when the customer found a cheaper offer" gives a direct trigger, and the written-quote/comparable-notary qualifiers narrow applicability. It does not explicitly say when not to use it or name sibling alternatives, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reschedule_bookingAIdempotentInspect
Move one of the signed-in customer's own bookings to a new slot. Use when an authenticated customer wants a different time: find the order_id via my_bookings, take a fresh startUnix from search_availability (e.g. a morning slot), send it as scheduled_at. Returns a done confirmation; fails if the new time is not genuinely available, the booking is not yours, or not signed in.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | The booking's order id (from my_bookings). | |
| scheduled_at | Yes | The new slot's `startUnix` (from search_availability). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| status | No | Account tools: the booking's status after this call (Pending after book_appointment). |
| message | Yes | Customer-facing outcome; relay it as written — bookings are requests until the notary confirms. |
| manageUrl | No | Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise). |
| onAccount | No | True when the request was filed on the signed-in customer's own account — they can then list it with my_bookings and change it with reschedule_booking / cancel_booking. Absent or false means a guest request, managed through the emailed link. |
| reference | No | Request / order reference for check_request_status (guest tools) or my_bookings (account tools). |
| appendedToExisting | No | True when existing_reference was given and the request was extended, not duplicated. |
| ourComparableQuoteCents | No | request_price_match only, when computable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a non-read, non-destructive, idempotent operation. The description adds valuable behavior beyond that: it returns a done confirmation and fails under specific conditions (unavailable slot, not your booking, not signed in). It does not mention idempotency details, but the annotation covers that, so the bar is met and exceeded slightly.
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 a single dense sentence, but every clause earns its place: purpose, usage trigger, parameter sourcing, return signal, and failure modes. It is front-loaded with the core action and contains 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?
With an output schema present, the description does not need to explain return structure. It fully covers how to obtain both parameters, when to invoke, expected confirmation, and failure conditions. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description repeats the schema provenance (order_id from my_bookings, scheduled_at from search_availability) and adds a minor 'fresh' nuance, but it does not provide meaningful new semantics beyond what the schema already states.
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 opens with a specific verb+resource: 'Move one of the signed-in customer's own bookings to a new slot.' It clearly distinguishes from siblings like book_appointment (new booking) and cancel_booking, and the 'own bookings' phrase separates it from any admin-style rescheduling.
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?
It explicitly says 'Use when an authenticated customer wants a different time' and gives a concrete workflow: find order_id via my_bookings, get a fresh startUnix from search_availability, send it as scheduled_at. It also states failure conditions including incorrect ownership and missing authentication, which effectively tells the agent when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_availabilityARead-onlyInspect
Find open appointment slots (validating the meeting area too). Use when the customer wants a time. Requires: service (office, mobile, apostille); mobile needs an address, e.g. a Bothell street. Returns resolved location, up to 7 recommended slots with startUnix, and per-day windows — the k-th start is startUnixFrom + k*stepSec for k < startCount; hand the picked startUnix to request_booking as desired_time_unix. An ungeocodable address is flagged not found.
| Name | Required | Description | Default |
|---|---|---|---|
| address | No | The address to meet at — required for "mobile"; ignored for "office". | |
| service | Yes | "office" (at our office), "mobile" (we come to you), or "apostille". | |
| document_count | No | Number of documents (drives the appointment length). Default 1. |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | Yes | |
| resolved | Yes | |
| recommended | Yes | |
| afterHoursSurchargeCents | No | Mobile services only: the surcharge an afterHours slot adds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses concrete behavior: meeting-area validation, resolved location, up to 7 slot recommendations, per-day windows, the exact start-time formula, and the ungeocodable-address error case. This gives the agent a strong behavioral model.
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 front-loads the purpose, then packs only high-value usage, return, and error behavior into a compact paragraph. Every clause adds information; there is no filler or 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?
Given the output schema exists and the parameter schema is fully documented, the description covers the remaining operational details an agent needs: when to call it, how service/address interact, what the response contains, how to pass the result onward, and how errors surface.
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 100%, so the schema already documents service, address, and document_count fully. The description adds a helpful example address and states the relationship between service and address, but these largely restate what the schema already says, so it does not significantly raise the baseline.
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 opens with the exact action and resource: finding open appointment slots, plus the additional validation of the meeting area. This clearly separates it from related tools like request_booking or check_service_area.
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?
It gives an explicit trigger ("Use when the customer wants a time") and explains the required service and address dependency for mobile appointments. It also directs the picked startUnix to request_booking, but it does not list explicit when-not cases or compare alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_documentationARead-onlyInspect
Search the text of andrii.co — every service page, the terms and privacy notices, and the 110-jurisdiction apostille handbook (who issues an apostille, accepted documents, forms, offices, fees, payment). Use for reference questions the other tools do not answer, and to cite a page. Accepts: query (keywords, not prose — there is no semantic matching), optional lang, section, limit. Returns ranked page excerpts with a URL and a Markdown URL to read in full; no match is an empty list. Reference text, not a live quote — use get_price_quote and check_service_area for what we charge and where we go.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Restrict to one language. Only `en` is indexed today; any other value returns no results rather than silently ignoring the filter. | |
| limit | No | How many results (default 10, max 20). | |
| query | Yes | What to look for. Keywords beat prose: this is a lexical index with no semantic fallback, so "mail-in apostille birth certificate" finds the page that "can I post my documents instead" does not. | |
| section | No | Restrict to sections whose heading contains this text (e.g. "What it costs"). Heading TEXT, not a URL fragment — the pages carry no anchors. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| count | Yes | |
| query | Yes | |
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only and non-destructive behavior. The description adds meaningful behavioral detail beyond that: lexical matching with no semantic fallback, returns ranked excerpts with a URL and Markdown URL, empty list on no match, and the caveat that this is reference text, not a live quote. No contradiction with 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?
Five dense sentences, each earning its place: scope first, usage next, params, return behavior, and exclusions. No filler or repetition; the most important scoping information is front-loaded.
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?
Covers purpose, content scope, usage context, parameter constraints, return behavior, and distinctions from siblings. With an output schema present and annotations covering safety, nothing an agent needs to decide when and how to call it is missing.
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 100%, so the baseline is 3. The description reinforces that query should be keywords and mentions optional lang, section, and limit, but it does not add new semantic information beyond what the schema already provides. The 'keywords, not prose' emphasis is helpful but redundant with the schema's own guidance.
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: 'Search the text of andrii.co', enumerating content (service pages, terms, privacy notices, apostille handbook). It distinguishes itself from siblings by saying it is for 'reference questions the other tools do not answer' and explicitly names get_price_quote and check_service_area as alternatives.
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?
Explicitly says when to use this tool: 'Use for reference questions the other tools do not answer, and to cite a page.' It also provides a clear exclusion: 'not a live quote — use get_price_quote and check_service_area for what we charge and where we go.'
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.
3 tool updates
- Changed
check_request_status2 fields changed- added
Output schema / properties / displayStatusAdded value: +{ + "description": "The customer-facing word: {code, tone}. Code is the derived display status (Signed | Apostilled | ReadyToShip | Shipped | Complete | PartiallyComplete | DealDone | …); tone is ok | warn | err | info | neutral. Quote the code's meaning from `note`, never the stored status.", + "type": "object" +} - changed
Output schema / properties / status / descriptionPrevious value: -"Pending | Scheduled | EnRoute | InProgress | Completed | Notarized | PickedUp | Cancelled | NoShow | MergedWithOther. `note` says what the word means for the customer; read that rather than branching on this."New value: +"Pending | Scheduled | EnRoute | InProgress | Completed | Notarized | PickedUp | Cancelled | NoShow | MergedWithOther. The STORED operator lifecycle — `Completed` means the notarial act happened (signed), not that the order is done. `note` says what the word means for the customer; read that rather than branching on this."
- Changed
get_price_quote2 fields changed- added
Input schema / properties / translation_docsAdded value: +{ + "default": null, + "description": "Apostille documents translated in Ukraine ($20/doc; the first doc is\nfree on the direct lane).", + "format": "int64", + "type": [ + "integer", + "null" + ] +} - added
Input schema / properties / ua_laneAdded value: +{ + "default": null, + "description": "Ukraine delivery lane: withinUkraine (weekly batch, included) or\nfromUsa (direct: NP postage estimate + the $25 dispatch fee).", + "type": [ + "string", + "null" + ] +}
- Changed
get_turnaround_estimate2 fields changed- changed
Input schema / properties / shipping / descriptionPrevious value: -"Delivery: pickup | us | ukraine | international. If omitted, inferred from\ndestination_country (apostille legs default to US shipping)."New value: +"Delivery: pickup | us | ukraine | ukraine_direct | international. If\nomitted, inferred from destination_country (apostille legs default to\nUS shipping) or from `ua_lane` (fromUsa ⇒ ukraine_direct)." - added
Input schema / properties / ua_laneAdded value: +{ + "default": null, + "description": "Ukraine delivery lane: withinUkraine (weekly batch, 7–14 days) or\nfromUsa (direct from the USA, 7–10 days). Fills `shipping` when that\nis omitted; an explicit `shipping` always wins.", + "type": [ + "string", + "null" + ] +}
15 tool updates
- Changed
book_appointment1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "appendedToExisting": { + "description": "True when existing_reference was given and the request was extended, not duplicated.", + "type": "boolean" + }, + "manageUrl": { + "description": "Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise).", + "type": [ + "string", + "null" + ] + }, + "message": { + "description": "Customer-facing outcome; relay it as written — bookings are requests until the notary confirms.", + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "onAccount": { + "description": "True when the request was filed on the signed-in customer's own account — they can then list it with my_bookings and change it with reschedule_booking / cancel_booking. Absent or false means a guest request, managed through the emailed link.", + "type": "boolean" + }, + "ourComparableQuoteCents": { + "description": "request_price_match only, when computable.", + "type": "integer" + }, + "reference": { + "description": "Request / order reference for check_request_status (guest tools) or my_bookings (account tools).", + "type": "string" + }, + "status": { + "description": "Account tools: the booking's status after this call (Pending after book_appointment).", + "type": "string" + } + }, + "required": [ + "ok", + "message" + ], + "type": "object" +}
- Changed
cancel_booking1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "appendedToExisting": { + "description": "True when existing_reference was given and the request was extended, not duplicated.", + "type": "boolean" + }, + "manageUrl": { + "description": "Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise).", + "type": [ + "string", + "null" + ] + }, + "message": { + "description": "Customer-facing outcome; relay it as written — bookings are requests until the notary confirms.", + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "onAccount": { + "description": "True when the request was filed on the signed-in customer's own account — they can then list it with my_bookings and change it with reschedule_booking / cancel_booking. Absent or false means a guest request, managed through the emailed link.", + "type": "boolean" + }, + "ourComparableQuoteCents": { + "description": "request_price_match only, when computable.", + "type": "integer" + }, + "reference": { + "description": "Request / order reference for check_request_status (guest tools) or my_bookings (account tools).", + "type": "string" + }, + "status": { + "description": "Account tools: the booking's status after this call (Pending after book_appointment).", + "type": "string" + } + }, + "required": [ + "ok", + "message" + ], + "type": "object" +}
- Changed
check_request_status1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "description": "PII-minimal status of a request — never the address, name or notes.", + "properties": { + "awaitingCustomerConfirmation": { + "type": "boolean" + }, + "mergedInto": { + "description": "Only for MergedWithOther: the surviving appointment's status and time.", + "properties": { + "scheduledAt": { + "type": [ + "integer", + "null" + ] + }, + "scheduledAtPacific": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "type": "object" + }, + "note": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "requestedTime": { + "description": "Unix seconds the customer asked for on a lead, or null.", + "type": [ + "integer", + "null" + ] + }, + "scheduledAt": { + "description": "Unix seconds.", + "type": [ + "integer", + "null" + ] + }, + "scheduledAtPacific": { + "type": [ + "string", + "null" + ] + }, + "service": { + "description": "office | apostille | mobile | loan | ron | apostille_mail; null on a legacy row.", + "type": [ + "string", + "null" + ] + }, + "status": { + "description": "Pending | Scheduled | EnRoute | InProgress | Completed | Notarized | PickedUp | Cancelled | NoShow | MergedWithOther. `note` says what the word means for the customer; read that rather than branching on this.", + "type": "string" + } + }, + "required": [ + "reference", + "service", + "status", + "awaitingCustomerConfirmation", + "note" + ], + "type": "object" +}
- Changed
check_service_area1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "country": { + "type": [ + "string", + "null" + ] + }, + "distanceMiles": { + "description": "Straight-line miles from the Bothell office (display only, not a routed leg).", + "type": "number" + }, + "label": { + "description": "Formatted address, or null when the address could not be resolved.", + "type": [ + "string", + "null" + ] + }, + "message": { + "description": "Why the place is not bookable as given, or null.", + "type": [ + "string", + "null" + ] + }, + "precise": { + "description": "False when a street and city are still needed to pin the spot.", + "type": "boolean" + }, + "region": { + "type": [ + "string", + "null" + ] + }, + "withinServiceArea": { + "type": "boolean" + } + }, + "required": [ + "withinServiceArea", + "precise" + ], + "type": "object" +}
- Changed
get_apostille_requirements1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "category": { + "description": "Document class: vital_record_mailin_ready, needs_notarized_copy, notarized_document, court_document, federal_authentication, unknown.", + "type": "string" + }, + "destination": { + "properties": { + "country": { + "type": "string" + }, + "effectiveDate": { + "type": "string" + }, + "note": { + "type": "string" + }, + "status": { + "description": "member | coming_soon | non_member.", + "type": "string" + } + }, + "required": [ + "country", + "status" + ], + "type": [ + "object", + "null" + ] + }, + "disclaimer": { + "type": "string" + }, + "diyPath": { + "properties": { + "stateFee": { + "type": "string" + }, + "whenToUseUs": { + "type": "string" + }, + "yourself": { + "type": "string" + } + }, + "type": "object" + }, + "document": { + "type": "string" + }, + "eligibleForMailInAsIs": { + "description": "True when no notarial act is needed first.", + "type": "boolean" + }, + "explanation": { + "type": "string" + }, + "howToProceed": { + "type": "string" + }, + "issuingState": { + "type": "string" + }, + "ourOffer": { + "properties": { + "fullServiceTiers": { + "type": "string" + }, + "inPersonApostilleFromCents": { + "type": [ + "integer", + "null" + ] + }, + "mailInApostilleFromCents": { + "type": [ + "integer", + "null" + ] + }, + "typicalTurnaround": { + "type": [ + "object", + "null" + ] + }, + "typicalTurnaroundTier": { + "type": "string" + } + }, + "type": "object" + } + }, + "required": [ + "document", + "issuingState", + "category", + "eligibleForMailInAsIs", + "explanation", + "diyPath", + "ourOffer" + ], + "type": "object" +}
- Changed
get_price_quote1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "amountCents": { + "type": "integer" + }, + "currency": { + "type": "string" + }, + "howToProceed": { + "type": "string" + }, + "lineItems": { + "items": { + "properties": { + "amountCents": { + "type": "integer" + }, + "label": { + "type": "string" + } + }, + "required": [ + "label", + "amountCents" + ], + "type": "object" + }, + "type": "array" + }, + "prepaymentRequired": { + "type": "boolean" + } + }, + "required": [ + "currency", + "amountCents", + "lineItems", + "prepaymentRequired", + "howToProceed" + ], + "type": "object" +}
- Changed
get_services1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "description": "Static service catalog, coverage summary and accepted payment options.", + "properties": { + "business": { + "type": "string" + }, + "languages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "location": { + "type": "string" + }, + "paymentNote": { + "type": "string" + }, + "paymentOptions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "priceMatch": { + "type": "string" + }, + "priceQuote": { + "description": "Which tool gives an exact figure.", + "type": "string" + }, + "remoteOnlineNotarization": { + "type": "boolean" + }, + "serviceArea": { + "type": "string" + }, + "services": { + "items": { + "properties": { + "description": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "description" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "business", + "serviceArea", + "paymentOptions", + "paymentNote", + "services" + ], + "type": "object" +}
- Changed
get_turnaround_estimate1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "description": "Staged day estimates — ranges, never guarantees.", + "properties": { + "disclaimer": { + "type": "string" + }, + "howToProceed": { + "type": "string" + }, + "service": { + "type": "string" + }, + "stages": { + "items": { + "properties": { + "businessDays": { + "type": "integer" + }, + "calendarDaysHigh": { + "type": "integer" + }, + "calendarDaysLow": { + "type": "integer" + }, + "note": { + "type": "string" + }, + "stage": { + "type": "string" + } + }, + "required": [ + "stage" + ], + "type": "object" + }, + "type": "array" + }, + "tier": { + "type": "string" + }, + "typicalTotalDaysHigh": { + "type": "integer" + }, + "typicalTotalDaysLow": { + "type": "integer" + } + }, + "required": [ + "service", + "stages", + "typicalTotalDaysLow", + "typicalTotalDaysHigh", + "disclaimer" + ], + "type": "object" +}
- Changed
my_bookings1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "bookings": { + "description": "Latest first.", + "items": { + "properties": { + "location": { + "type": "string" + }, + "orderId": { + "description": "Pass to reschedule_booking / cancel_booking as order_id.", + "type": "string" + }, + "scheduledAt": { + "description": "Unix seconds; null for a call-me request with no time held.", + "type": [ + "integer", + "null" + ] + }, + "service": { + "type": [ + "string", + "null" + ] + }, + "status": { + "type": "string" + } + }, + "required": [ + "orderId", + "service", + "status" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "bookings" + ], + "type": "object" +}
- Changed
request_apostille1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "appendedToExisting": { + "description": "True when existing_reference was given and the request was extended, not duplicated.", + "type": "boolean" + }, + "manageUrl": { + "description": "Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise).", + "type": [ + "string", + "null" + ] + }, + "message": { + "description": "Customer-facing outcome; relay it as written — bookings are requests until the notary confirms.", + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "onAccount": { + "description": "True when the request was filed on the signed-in customer's own account — they can then list it with my_bookings and change it with reschedule_booking / cancel_booking. Absent or false means a guest request, managed through the emailed link.", + "type": "boolean" + }, + "ourComparableQuoteCents": { + "description": "request_price_match only, when computable.", + "type": "integer" + }, + "reference": { + "description": "Request / order reference for check_request_status (guest tools) or my_bookings (account tools).", + "type": "string" + }, + "status": { + "description": "Account tools: the booking's status after this call (Pending after book_appointment).", + "type": "string" + } + }, + "required": [ + "ok", + "message" + ], + "type": "object" +}
- Changed
request_booking1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "appendedToExisting": { + "description": "True when existing_reference was given and the request was extended, not duplicated.", + "type": "boolean" + }, + "manageUrl": { + "description": "Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise).", + "type": [ + "string", + "null" + ] + }, + "message": { + "description": "Customer-facing outcome; relay it as written — bookings are requests until the notary confirms.", + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "onAccount": { + "description": "True when the request was filed on the signed-in customer's own account — they can then list it with my_bookings and change it with reschedule_booking / cancel_booking. Absent or false means a guest request, managed through the emailed link.", + "type": "boolean" + }, + "ourComparableQuoteCents": { + "description": "request_price_match only, when computable.", + "type": "integer" + }, + "reference": { + "description": "Request / order reference for check_request_status (guest tools) or my_bookings (account tools).", + "type": "string" + }, + "status": { + "description": "Account tools: the booking's status after this call (Pending after book_appointment).", + "type": "string" + } + }, + "required": [ + "ok", + "message" + ], + "type": "object" +}
- Changed
request_price_match1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "appendedToExisting": { + "description": "True when existing_reference was given and the request was extended, not duplicated.", + "type": "boolean" + }, + "manageUrl": { + "description": "Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise).", + "type": [ + "string", + "null" + ] + }, + "message": { + "description": "Customer-facing outcome; relay it as written — bookings are requests until the notary confirms.", + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "onAccount": { + "description": "True when the request was filed on the signed-in customer's own account — they can then list it with my_bookings and change it with reschedule_booking / cancel_booking. Absent or false means a guest request, managed through the emailed link.", + "type": "boolean" + }, + "ourComparableQuoteCents": { + "description": "request_price_match only, when computable.", + "type": "integer" + }, + "reference": { + "description": "Request / order reference for check_request_status (guest tools) or my_bookings (account tools).", + "type": "string" + }, + "status": { + "description": "Account tools: the booking's status after this call (Pending after book_appointment).", + "type": "string" + } + }, + "required": [ + "ok", + "message" + ], + "type": "object" +}
- Changed
reschedule_booking1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "appendedToExisting": { + "description": "True when existing_reference was given and the request was extended, not duplicated.", + "type": "boolean" + }, + "manageUrl": { + "description": "Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise).", + "type": [ + "string", + "null" + ] + }, + "message": { + "description": "Customer-facing outcome; relay it as written — bookings are requests until the notary confirms.", + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + }, + "onAccount": { + "description": "True when the request was filed on the signed-in customer's own account — they can then list it with my_bookings and change it with reschedule_booking / cancel_booking. Absent or false means a guest request, managed through the emailed link.", + "type": "boolean" + }, + "ourComparableQuoteCents": { + "description": "request_price_match only, when computable.", + "type": "integer" + }, + "reference": { + "description": "Request / order reference for check_request_status (guest tools) or my_bookings (account tools).", + "type": "string" + }, + "status": { + "description": "Account tools: the booking's status after this call (Pending after book_appointment).", + "type": "string" + } + }, + "required": [ + "ok", + "message" + ], + "type": "object" +}
- Changed
search_availability1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "description": "Open slots over the booking horizon (Pacific time). `recommended` is what to offer; `days[].windows` encodes every bookable start losslessly: the k-th start is startUnixFrom + k*stepSec for k < startCount.", + "properties": { + "afterHoursSurchargeCents": { + "description": "Mobile services only: the surcharge an afterHours slot adds.", + "type": "integer" + }, + "days": { + "items": { + "properties": { + "closed": { + "description": "Present only on a day with no bookable slot: closed | full.", + "type": "string" + }, + "date": { + "description": "YYYY-MM-DD, Pacific.", + "type": "string" + }, + "windows": { + "items": { + "properties": { + "afterHours": { + "type": "boolean" + }, + "fit": { + "description": "great | good | fair | far.", + "type": "string" + }, + "from": { + "description": "HH:MM of the first start.", + "type": "string" + }, + "startCount": { + "type": "integer" + }, + "startUnixFrom": { + "type": "integer" + }, + "stepSec": { + "type": "integer" + }, + "until": { + "description": "HH:MM end of the last slot.", + "type": "string" + } + }, + "required": [ + "from", + "until", + "fit", + "startUnixFrom", + "startCount", + "stepSec" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "date", + "windows" + ], + "type": "object" + }, + "type": "array" + }, + "recommended": { + "items": { + "properties": { + "date": { + "type": "string" + }, + "durationMin": { + "type": "integer" + }, + "fit": { + "description": "great | good | fair | far.", + "type": "string" + }, + "start": { + "description": "HH:MM Pacific.", + "type": "string" + }, + "startUnix": { + "description": "Pass to request_booking as desired_time_unix (or to book_appointment as scheduled_at).", + "type": "integer" + } + }, + "required": [ + "date", + "start", + "startUnix", + "durationMin", + "fit" + ], + "type": "object" + }, + "type": "array" + }, + "resolved": { + "properties": { + "country": { + "type": [ + "string", + "null" + ] + }, + "distanceMiles": { + "description": "Straight-line miles from the Bothell office (display only, not a routed leg).", + "type": "number" + }, + "label": { + "description": "Formatted address, or null when the address could not be resolved.", + "type": [ + "string", + "null" + ] + }, + "message": { + "description": "Why the place is not bookable as given, or null.", + "type": [ + "string", + "null" + ] + }, + "precise": { + "description": "False when a street and city are still needed to pin the spot.", + "type": "boolean" + }, + "region": { + "type": [ + "string", + "null" + ] + }, + "withinServiceArea": { + "type": "boolean" + } + }, + "required": [ + "withinServiceArea", + "precise" + ], + "type": "object" + } + }, + "required": [ + "resolved", + "days", + "recommended" + ], + "type": "object" +}
- Changed
search_documentation1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "count": { + "type": "integer" + }, + "note": { + "type": "string" + }, + "query": { + "type": "string" + }, + "results": { + "items": { + "properties": { + "excerpt": { + "type": "string" + }, + "markdownUrl": { + "description": "Markdown twin of the page — fetch to read it in full.", + "type": "string" + }, + "section": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "description": "Canonical page URL to cite.", + "type": "string" + } + }, + "required": [ + "title", + "url", + "markdownUrl", + "excerpt" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "query", + "count", + "results", + "note" + ], + "type": "object" +}
1 tool update
- Added
search_documentation
14 tool updates
- First observed
book_appointment - First observed
cancel_booking - First observed
check_request_status - First observed
check_service_area - First observed
get_apostille_requirements - First observed
get_price_quote - First observed
get_services - First observed
get_turnaround_estimate - First observed
my_bookings - First observed
request_apostille - First observed
request_booking - First observed
request_price_match - First observed
reschedule_booking - First observed
search_availability
Related MCP Connectors
Washington property evidence and transaction math for software and AI assistants.
Automate eSignature workflows and signing tasks via natural language commands.
Prepare USPS Certified Mail letters from any AI assistant; a person reviews, pays and authorizes.
Answer small-business customer questions from FAQs, list open appointment times, and book them.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to manage document signing workflows via natural language, including creating envelopes, uploading documents, analyzing contracts, and verifying blockchain anchors.835 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEnables voice assistants to find nearby service providers, connect users to live video representatives for natural conversation, and handle appointment booking. It also returns confirmed bookings so the assistant can add them to its calendar.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to search for sworn and qualified interpreters and manage on-site, phone, and video assignments on behalf of a customer account. Supports creating booking requests, selecting available interpreters, reading booking and payment status, requesting changes, and cancelling bookings.MIT

warp-agent-mcpofficial
AlicenseAqualityDmaintenanceQuote, book, and track real LTL, FTL, cargo van, and box-truck freight through the Warp network - 20 tools, in-chat login, Stripe-charged bookings, and real carrier dispatch. Quoting is keyless; booking needs a free Warp account with a card on file.20809 npm5MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.