Andrii Co. Notary & Apostille Assistant
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Book a Washington notary or apostille appointment, get a quote, and track it, via AI assistant.
| Author | net.andrii |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 474 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"Andrii Co. Notary & Apostille Assistant": {
"url": "https://andrii.net/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (15)
book_appointmentSchedule 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.
Parameters:
service(required) — string — Service: office | mobile | apostille | loan.notes— ['string', 'null'] — Anything else the notary should know.address— ['string', 'null'] — Meeting address (required for "mobile"; omit for office/apostille).scheduled_at— ['integer', 'null'] — The chosen slot's `startUnix` (from search_availability). Omit for a "call me to schedule" request (no time held).document_count— ['integer', 'null'] — Number of documents. Default 1.
Hints: read-only no · destructive no · idempotent not declared · open-world yes
cancel_bookingdestructiveCancel 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.
Parameters:
order_id(required) — string — The booking's order id (from my_bookings).
Hints: read-only no · destructive yes · idempotent not declared · open-world yes
check_request_statusread-onlyCheck 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.
Parameters:
reference(required) — string — The reference id returned when the request was submitted (also accepts the token from the emailed confirm link).
Hints: read-only yes · destructive no · idempotent not declared · open-world no
check_service_arearead-onlyCheck 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.
Parameters:
address(required) — string — Street address, city, or ZIP to check (Washington State service area).service— ['string', 'null'] — "notary" (default) or "apostille" — the service-area rules differ slightly.
Hints: read-only yes · destructive no · idempotent not declared · open-world yes
get_apostille_requirementsread-onlyCheck 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.
Parameters:
document(required) — string — The document in plain words (e.g. "Washington birth certificate", "university diploma", "FBI background check", "power of attorney").issuing_state— ['string', 'null'] — The US state that issued or notarized it (default Washington).destination_country— ['string', 'null'] — The country the apostilled document is for.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_price_quoteread-onlyCalculate a server-authoritative USD price estimate before shipping — pure, no side effects, nothing booked. Use when the customer asks about cost. Accepts: `document_count`, `mobile`, `after_hours`, `apostille` plus `tier` (e.g. expedited, priority, standard, mailin); set `needs_notarization` false for already-certified records; `ua_lane` (withinUkraine | fromUsa) prices the Ukraine direct lane, `translation_docs` the in-Ukraine translation. Returns amountCents and line items; fails if `apostille` is true and `tier` is invalid (with `apostille` false, `tier` is ignored).
Parameters:
tier— ['string', 'null'] — Apostille tier when `apostille`: expedited | priority | standard | mailin.mobile— boolean — True if we travel to the customer (adds the flat travel fee).ua_lane— ['string', 'null'] — Ukraine delivery lane: withinUkraine (weekly batch, included) or fromUsa (direct: NP postage estimate + the $25 dispatch fee).apostille— boolean — True to include a Secretary-of-State apostille.after_hours— boolean — Mobile only: the chosen slot is after 6pm or on a weekend.document_count— ['integer', 'null'] — Number of documents (1–20). Default 1.translation_docs— ['integer', 'null'] — Apostille documents translated in Ukraine ($20/doc; the first doc is free on the direct lane).needs_notarization— ['boolean', 'null'] — Set false for a mail-in apostille of already-certified public records (birth/marriage/death certificates) that need no notarial act.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_servicesread-onlyList 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).
Hints: read-only yes · destructive no · idempotent not declared · open-world no
get_turnaround_estimateread-onlyCalculate typical turnaround — apostille processing days plus mailing and delivery legs. Ranges, never guarantees; exact appointment times come from search_availability. Use when the customer asks how long. Accepts: `service` (e.g. notarization, apostille, apostille_mail, loan_signing), optional `tier`, `shipping`, `destination_country`, `ua_lane` (withinUkraine | fromUsa — the Ukraine lane when `shipping` is omitted). Returns staged day estimates; an unknown `tier` falls back to the standard figure, not an error.
Parameters:
service(required) — string — Service: notarization | apostille | apostille_mail | loan_signing.tier— ['string', 'null'] — Apostille speed tier when service is apostille: expedited | priority | standard.ua_lane— ['string', 'null'] — Ukraine delivery lane: withinUkraine (weekly batch, 7–14 days) or fromUsa (direct from the USA, 7–10 days). Fills `shipping` when that is omitted; an explicit `shipping` always wins.shipping— ['string', 'null'] — Delivery: pickup | us | ukraine | ukraine_direct | international. If omitted, inferred from destination_country (apostille legs default to US shipping) or from `ua_lane` (fromUsa ⇒ ukraine_direct).destination_country— ['string', 'null'] — Destination country (used to infer shipping when `shipping` is omitted).
Hints: read-only yes · destructive no · idempotent not declared · open-world no
my_bookingsread-onlyList 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.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
request_apostilleSubmit 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.
Parameters:
documents(required) — string — What documents, in plain words (e.g. "2 birth certificates for Ukraine").name(required) — string — The customer's FULL LEGAL NAME exactly as on their government-issued ID (never a nickname) — apostille filings print it.email— ['string', 'null'] — Email. Collect BOTH an email AND a phone in one question when possible; at least one is required.notes— ['string', 'null'] — Anything else the notary should know.phone— ['string', 'null'] — Phone with country code — the notary confirms fastest by phone/SMS.existing_reference— ['string', 'null'] — To ADD these documents to an EXISTING request instead of creating a second one, pass that request's reference id (with the same email/phone so we can verify the customer). Nothing new is created.destination_country— ['string', 'null'] — Destination country the apostilled documents are for.
Hints: read-only no · destructive no · idempotent not declared · open-world yes
request_bookingSubmit 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.
Parameters:
service(required) — string — Service: office | mobile | apostille | loan.name(required) — string — The customer's FULL LEGAL NAME exactly as on their government-issued ID (never a nickname or chat display name) — notarial records and apostille filings print it. Ask if you only know a first name.email— ['string', 'null'] — Email. Collect BOTH an email AND a phone in one question when possible; at least one is required.notes— ['string', 'null'] — Anything else the notary should know.phone— ['string', 'null'] — Phone with country code (e.g. +1...). The notary confirms fastest by phone/SMS — ask for it even when an email is known.address— ['string', 'null'] — Meeting address — MOBILE ONLY. Office and apostille visits automatically use our Bothell office; omit this for them.desired_time— ['string', 'null'] — The wanted time in plain words, when no exact slot was chosen (rides the notes; the notary confirms a real time).document_count— ['integer', 'null'] — Number of documents. Default 1.desired_time_unix— ['integer', 'null'] — The chosen slot's `startUnix` from search_availability (Unix seconds). Pass it so the request carries the exact wanted time — still a request, never a hold.existing_reference— ['string', 'null'] — To ADD to or change an EXISTING request instead of creating a second one (e.g. "also apostille it", "make it 3 documents"), pass that request's reference id here — the same email/phone must be provided so we can verify it's the same customer. Nothing new is created.
Hints: read-only no · destructive no · idempotent not declared · open-world yes
request_price_matchRequest 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.
Parameters:
name(required) — string — The customer's name.service(required) — string — Service: office | mobile | apostille | apostille_mail | loan.competitor_name(required) — string — The competitor's business name.competitor_price_usd(required) — number — The competitor's quoted price, in US dollars.email— ['string', 'null'] — Email — provide an email OR a phone so we can reach them.notes— ['string', 'null'] — Anything else the notary should know.phone— ['string', 'null'] — Phone — provide an email OR a phone so we can reach them.competitor_url— ['string', 'null'] — Link to the competitor's quote/page, if any (stored for the operator, never fetched).document_count— ['integer', 'null'] — Number of documents, for our comparison quote. Default 1.
Hints: read-only no · destructive no · idempotent not declared · open-world yes
reschedule_bookingMove 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.
Parameters:
order_id(required) — string — The booking's order id (from my_bookings).scheduled_at(required) — integer — The new slot's `startUnix` (from search_availability).
Hints: read-only no · destructive no · idempotent yes · open-world yes
search_availabilityread-onlyFind 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.
Parameters:
service(required) — string — "office" (at our office), "mobile" (we come to you), or "apostille".address— ['string', 'null'] — The address to meet at — required for "mobile"; ignored for "office".document_count— ['integer', 'null'] — Number of documents (drives the appointment length). Default 1.
Hints: read-only yes · destructive no · idempotent not declared · open-world yes
search_documentationread-onlySearch 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.
Parameters:
query(required) — string — What to look for. Keywords beat prose: this is a lexical index with no semantic fallback, so "mail-in apostille birth certificate" finds the page that "can I post my documents instead" does not.lang— ['string', 'null'] — Restrict to one language. Only `en` is indexed today; any other value returns no results rather than silently ignoring the filter.limit— ['integer', 'null'] — How many results (default 10, max 20).section— ['string', 'null'] — Restrict to sections whose heading contains this text (e.g. "What it costs"). Heading TEXT, not a URL fragment — the pages carry no anchors.
Hints: read-only yes · destructive no · idempotent not declared · open-world no
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.