Skip to main content
Glama

Andrii Co. Notary & Apostille Assistant

Server Details

Book a Washington notary or apostille appointment, get a quote, and track it, via AI assistant.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.4/5.0

Scored across 15 tools

Disambiguation4/5

Most tools cleanly map to distinct actions like pricing, availability, requirements, booking management, and status checks. The only real overlap is book_appointment vs request_booking and check_service_area vs search_availability, but the signed-in versus guest split and area-only versus slot-search use cases are explicitly described.

Naming Consistency4/5

Tool names are consistently lowercase snake_case and mostly follow a verb_noun pattern such as get_, request_, check_, cancel_, and reschedule_. The main deviation is my_bookings, which is a noun phrase instead of list_my_bookings, and the slight noun inconsistency between book_appointment and cancel_booking/reschedule_booking.

Tool Count5/5

15 tools is at the upper end of the typical range, but the domain is broad enough to justify it: booking, guest requests, apostille intake, pricing, turnaround, service area, and documentation search. Each tool covers a distinct customer need, and none feel like redundant filler.

Completeness5/5

The tool set covers the full customer journey: requirements, area validation, availability, pricing, booking, apostille submission, price matching, status tracking, and signed-in booking management. Both guest and authenticated flows have lifecycle support, so agents can complete common scenarios without obvious dead ends.

Available Tools

15 tools
book_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoAnything else the notary should know.
addressNoMeeting address (required for "mobile"; omit for office/apostille).
serviceYesService: office | mobile | apostille | loan.
scheduled_atNoThe chosen slot's `startUnix` (from search_availability). Omit for a "call me to schedule" request (no time held).
document_countNoNumber of documents. Default 1.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
statusNoAccount tools: the booking's status after this call (Pending after book_appointment).
messageYesCustomer-facing outcome; relay it as written — bookings are requests until the notary confirms.
manageUrlNoGuest requests: the emailed confirm/cancel link, when one was minted (null otherwise).
onAccountNoTrue 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.
referenceNoRequest / order reference for check_request_status (guest tools) or my_bookings (account tools).
appendedToExistingNoTrue when existing_reference was given and the request was extended, not duplicated.
ourComparableQuoteCentsNorequest_price_match only, when computable.

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_bookingA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
order_idYesThe booking's order id (from my_bookings).

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
statusNoAccount tools: the booking's status after this call (Pending after book_appointment).
messageYesCustomer-facing outcome; relay it as written — bookings are requests until the notary confirms.
manageUrlNoGuest requests: the emailed confirm/cancel link, when one was minted (null otherwise).
onAccountNoTrue 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.
referenceNoRequest / order reference for check_request_status (guest tools) or my_bookings (account tools).
appendedToExistingNoTrue when existing_reference was given and the request was extended, not duplicated.
ourComparableQuoteCentsNorequest_price_match only, when computable.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_statusA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
referenceYesThe reference id returned when the request was submitted (also accepts the token from the emailed confirm link).

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteYes
statusYesPending | 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.
serviceYesoffice | apostille | mobile | loan | ron | apostille_mail; null on a legacy row.
referenceYes
mergedIntoNoOnly for MergedWithOther: the surviving appointment's status and time.
scheduledAtNoUnix seconds.
requestedTimeNoUnix seconds the customer asked for on a lead, or null.
scheduledAtPacificNo
awaitingCustomerConfirmationYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and destructiveHint annotations, the description discloses meaningful behaviors: no authentication required, PII-minimal output, Pacific-time fields, and a not-found error for bad references. This gives an agent realistic expectations for invocation and response handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, followed by when to use it, the parameter, output characteristics, and error behavior. Every sentence earns its place and no filler is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one required parameter, full schema coverage, an output schema, and safety annotations already present, the description adds the remaining context an agent needs: authentication requirements, PII boundaries, time zone, and failure mode. Nothing important appears missing.

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

Parameters3/5

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

Schema coverage is 100% and the schema's property description already explains that `reference` accepts the submission id or the emailed token. The description essentially restates this, adding no new semantic information beyond what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Check what became of a previously submitted request.' It also distinguishes from sibling tools by enumerating the status transitions it covers (confirmed, moved, cancelled, merged), making its role as a read-only status lookup unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use the tool: 'Use when the customer asks whether the notary confirmed, moved, cancelled, or merged it.' It also notes that no sign-in is needed, but it does not name sibling alternatives or explicitly describe when not to use it, so it stops short of a full when/when-not guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_service_areaA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressYesStreet address, city, or ZIP to check (Washington State service area).
serviceNo"notary" (default) or "apostille" — the service-area rules differ slightly.

Output Schema

ParametersJSON Schema
NameRequiredDescription
labelNoFormatted address, or null when the address could not be resolved.
regionNo
countryNo
messageNoWhy the place is not bookable as given, or null.
preciseYesFalse when a street and city are still needed to pin the spot.
distanceMilesNoStraight-line miles from the Bothell office (display only, not a routed leg).
withinServiceAreaYes

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_requirementsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentYesThe document in plain words (e.g. "Washington birth certificate", "university diploma", "FBI background check", "power of attorney").
issuing_stateNoThe US state that issued or notarized it (default Washington).
destination_countryNoThe country the apostilled document is for.

Output Schema

ParametersJSON Schema
NameRequiredDescription
diyPathYes
categoryYesDocument class: vital_record_mailin_ready, needs_notarized_copy, notarized_document, court_document, federal_authentication, unknown.
documentYes
ourOfferYes
disclaimerNo
destinationNo
explanationYes
howToProceedNo
issuingStateYes
eligibleForMailInAsIsYesTrue when no notarial act is needed first.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_quoteA
Read-only
Inspect

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. Returns amountCents and line items; fails if apostille is true and tier is invalid (with apostille false, tier is ignored).

ParametersJSON Schema
NameRequiredDescriptionDefault
tierNoApostille tier when `apostille`: expedited | priority | standard | mailin.
mobileNoTrue if we travel to the customer (adds the flat travel fee).
apostilleNoTrue to include a Secretary-of-State apostille.
after_hoursNoMobile only: the chosen slot is after 6pm or on a weekend.
document_countNoNumber of documents (1–20). Default 1.
needs_notarizationNoSet false for a mail-in apostille of already-certified public records (birth/marriage/death certificates) that need no notarial act.

Output Schema

ParametersJSON Schema
NameRequiredDescription
currencyYes
lineItemsYes
amountCentsYes
howToProceedYes
prepaymentRequiredYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the readOnlyHint and destructiveHint annotations by explicitly stating there are no side effects, nothing is booked, the estimate is server-authoritative, it returns amountCents and line items, and it fails under a specific invalid combination of apostille and tier. This is rich, useful 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences carry purpose, usage, parameter guidance, return behavior, and an edge case without wasted words. The most important safety information is front-loaded, and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With six optional parameters, a complete input schema, and an output schema available, the description covers all key decision points: when to call, what side effects to expect, key parameter interactions, and failure behavior. No critical context is missing for an agent to invoke this tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaningful cross-parameter semantics: it explains the apostille/tier relationship, notes that tier is ignored when apostille is false, and ties needs_notarization=false to already-certified records. This goes beyond simply restating the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Calculate a server-authoritative USD price estimate before shipping.' It also clarifies this is not a booking ('pure, no side effects, nothing booked'), which distinguishes it clearly from sibling tools like book_appointment, request_booking, and request_price_match.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'Use when the customer asks about cost,' which gives a clear trigger condition. It does not name alternative tools or explain when not to use it, but the context—comparing against booking and request siblings—makes the intended usage reasonably clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_servicesA
Read-only
Inspect

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).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
businessYes
locationNo
servicesYes
languagesNo
priceMatchNo
priceQuoteNoWhich tool gives an exact figure.
paymentNoteYes
serviceAreaYes
paymentOptionsYes
remoteOnlineNotarizationNo

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_estimateA
Read-only
Inspect

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. Returns staged day estimates; an unknown tier falls back to the standard figure, not an error.

ParametersJSON Schema
NameRequiredDescriptionDefault
tierNoApostille speed tier when service is apostille: expedited | priority | standard.
serviceYesService: notarization | apostille | apostille_mail | loan_signing.
shippingNoDelivery: pickup | us | ukraine | international. If omitted, inferred from destination_country (apostille legs default to US shipping).
destination_countryNoDestination country (used to infer shipping when `shipping` is omitted).

Output Schema

ParametersJSON Schema
NameRequiredDescription
tierNo
stagesYes
serviceYes
disclaimerYes
howToProceedNo
typicalTotalDaysLowYes
typicalTotalDaysHighYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the readOnly/destructive annotations: results are ranges, never guarantees; returns are staged day estimates; and an unknown tier falls back to the standard figure rather than erroring. These are non-obvious behaviors an agent must know before invoking the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the primary purpose and core behavioral caveat appear first, followed by a concise parameter list and the fallback behavior. Every sentence adds useful information; there is no filler or repetition of schema defaults.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only estimation tool with four parameters, full schema coverage, and an output schema, the description covers the essential context: what it computes, how to use it, how it differs from the exact-availability tool, and what happens with invalid tier input. 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is met. The description adds extra semantic value by giving concrete service examples, noting the fallback behavior for unknown tier values, and framing the parameters as contributing to 'processing days plus mailing and delivery legs.' This goes slightly beyond the schema's property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and object ('Calculate typical turnaround') and clearly defines the resource as an estimate of apostille processing plus mailing/delivery legs. It also distinguishes itself from search_availability, which provides exact appointment times, so an agent can tell them apart immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool ('Use when the customer asks how long') and when not to rely on it ('exact appointment times come from search_availability'). This gives clear decision criteria and names the alternative tool, leaving no ambiguity about selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

my_bookingsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
bookingsYesLatest first.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe customer's FULL LEGAL NAME exactly as on their government-issued ID (never a nickname) — apostille filings print it.
emailNoEmail. Collect BOTH an email AND a phone in one question when possible; at least one is required.
notesNoAnything else the notary should know.
phoneNoPhone with country code — the notary confirms fastest by phone/SMS.
documentsYesWhat documents, in plain words (e.g. "2 birth certificates for Ukraine").
existing_referenceNoTo 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_countryNoDestination country the apostilled documents are for.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
statusNoAccount tools: the booking's status after this call (Pending after book_appointment).
messageYesCustomer-facing outcome; relay it as written — bookings are requests until the notary confirms.
manageUrlNoGuest requests: the emailed confirm/cancel link, when one was minted (null otherwise).
onAccountNoTrue 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.
referenceNoRequest / order reference for check_request_status (guest tools) or my_bookings (account tools).
appendedToExistingNoTrue when existing_reference was given and the request was extended, not duplicated.
ourComparableQuoteCentsNorequest_price_match only, when computable.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe 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.
emailNoEmail. Collect BOTH an email AND a phone in one question when possible; at least one is required.
notesNoAnything else the notary should know.
phoneNoPhone with country code (e.g. +1...). The notary confirms fastest by phone/SMS — ask for it even when an email is known.
addressNoMeeting address — MOBILE ONLY. Office and apostille visits automatically use our Bothell office; omit this for them.
serviceYesService: office | mobile | apostille | loan.
desired_timeNoThe wanted time in plain words, when no exact slot was chosen (rides the notes; the notary confirms a real time).
document_countNoNumber of documents. Default 1.
desired_time_unixNoThe 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_referenceNoTo 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

ParametersJSON Schema
NameRequiredDescription
okYes
statusNoAccount tools: the booking's status after this call (Pending after book_appointment).
messageYesCustomer-facing outcome; relay it as written — bookings are requests until the notary confirms.
manageUrlNoGuest requests: the emailed confirm/cancel link, when one was minted (null otherwise).
onAccountNoTrue 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.
referenceNoRequest / order reference for check_request_status (guest tools) or my_bookings (account tools).
appendedToExistingNoTrue when existing_reference was given and the request was extended, not duplicated.
ourComparableQuoteCentsNorequest_price_match only, when computable.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe customer's name.
emailNoEmail — provide an email OR a phone so we can reach them.
notesNoAnything else the notary should know.
phoneNoPhone — provide an email OR a phone so we can reach them.
serviceYesService: office | mobile | apostille | apostille_mail | loan.
competitor_urlNoLink to the competitor's quote/page, if any (stored for the operator, never fetched).
document_countNoNumber of documents, for our comparison quote. Default 1.
competitor_nameYesThe competitor's business name.
competitor_price_usdYesThe competitor's quoted price, in US dollars.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
statusNoAccount tools: the booking's status after this call (Pending after book_appointment).
messageYesCustomer-facing outcome; relay it as written — bookings are requests until the notary confirms.
manageUrlNoGuest requests: the emailed confirm/cancel link, when one was minted (null otherwise).
onAccountNoTrue 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.
referenceNoRequest / order reference for check_request_status (guest tools) or my_bookings (account tools).
appendedToExistingNoTrue when existing_reference was given and the request was extended, not duplicated.
ourComparableQuoteCentsNorequest_price_match only, when computable.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_bookingA
Idempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
order_idYesThe booking's order id (from my_bookings).
scheduled_atYesThe new slot's `startUnix` (from search_availability).

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
statusNoAccount tools: the booking's status after this call (Pending after book_appointment).
messageYesCustomer-facing outcome; relay it as written — bookings are requests until the notary confirms.
manageUrlNoGuest requests: the emailed confirm/cancel link, when one was minted (null otherwise).
onAccountNoTrue 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.
referenceNoRequest / order reference for check_request_status (guest tools) or my_bookings (account tools).
appendedToExistingNoTrue when existing_reference was given and the request was extended, not duplicated.
ourComparableQuoteCentsNorequest_price_match only, when computable.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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_availabilityA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNoThe address to meet at — required for "mobile"; ignored for "office".
serviceYes"office" (at our office), "mobile" (we come to you), or "apostille".
document_countNoNumber of documents (drives the appointment length). Default 1.

Output Schema

ParametersJSON Schema
NameRequiredDescription
daysYes
resolvedYes
recommendedYes
afterHoursSurchargeCentsNoMobile services only: the surcharge an afterHours slot adds.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_documentationA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoRestrict to one language. Only `en` is indexed today; any other value returns no results rather than silently ignoring the filter.
limitNoHow many results (default 10, max 20).
queryYesWhat 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.
sectionNoRestrict 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

ParametersJSON Schema
NameRequiredDescription
noteYes
countYes
queryYes
resultsYes

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 15 tool updates
    • Changedbook_appointment1 field changed
      • changedOutput 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"
        +}
    • Changedcancel_booking1 field changed
      • changedOutput 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"
        +}
    • Changedcheck_request_status1 field changed
      • changedOutput 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"
        +}
    • Changedcheck_service_area1 field changed
      • changedOutput 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"
        +}
    • Changedget_apostille_requirements1 field changed
      • changedOutput 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"
        +}
    • Changedget_price_quote1 field changed
      • changedOutput 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"
        +}
    • Changedget_services1 field changed
      • changedOutput 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"
        +}
    • Changedget_turnaround_estimate1 field changed
      • changedOutput 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"
        +}
    • Changedmy_bookings1 field changed
      • changedOutput 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"
        +}
    • Changedrequest_apostille1 field changed
      • changedOutput 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"
        +}
    • Changedrequest_booking1 field changed
      • changedOutput 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"
        +}
    • Changedrequest_price_match1 field changed
      • changedOutput 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"
        +}
    • Changedreschedule_booking1 field changed
      • changedOutput 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"
        +}
    • Changedsearch_availability1 field changed
      • changedOutput 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"
        +}
    • Changedsearch_documentation1 field changed
      • changedOutput 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"
        +}
  2. 1 tool update
    • Addedsearch_documentation
  3. 14 tool updates
    • First observedbook_appointment
    • First observedcancel_booking
    • First observedcheck_request_status
    • First observedcheck_service_area
    • First observedget_apostille_requirements
    • First observedget_price_quote
    • First observedget_services
    • First observedget_turnaround_estimate
    • First observedmy_bookings
    • First observedrequest_apostille
    • First observedrequest_booking
    • First observedrequest_price_match
    • First observedreschedule_booking
    • First observedsearch_availability

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to access Washington State Legislature data for bill tracking, committee meetings, legislator lookup, and legislative document retrieval via conversational interfaces.
    9
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Provides source-dated Washington property evidence and transaction math, including REET, seller scenarios, and research packets, for software and AI assistants.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides offline access to Washington State's Revised Code of Washington (RCW) and Washington Administrative Code (WAC) for AI agents. Enables fast retrieval, full-text search, and navigation of all Washington state laws through natural language queries.
    1
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to manage document signing workflows via natural language, including creating envelopes, uploading documents, analyzing contracts, and verifying blockchain anchors.
    8
    23 npm
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources