Andrii Co. Notary & Apostille Assistant MCP
This MCP server allows AI assistants to interact with Andrii Co.'s notary and apostille services. It enables users to check service areas, view open appointment slots, obtain real-time price quotes, and submit booking requests for notarization, mobile signings, or apostille processing. The server handles request submission and status tracking, though final confirmation and payment occur out-of-band via the portal.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://andrii.net/mcpWhat its tools do
15 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (9)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to andrii.net ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Check service area availability for Washington State notary services
- Get a real-time price quote for mobile notarization or apostille processing
- Submit a booking request for a notary appointment or mail-in apostille
- Track the status of a submitted notary or apostille request
Source and maintenance
Protocol and capabilities
- Server
- net.andrii/booking 1.0.1
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 15 advertised
- Resources
- 4 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {},
"resources": {}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
15 advertised
book_appointment
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"service"
],
"properties": {
"notes": {
"type": [
"string",
"null"
],
"default": null,
"description": "Anything else the notary should know."
},
"address": {
"type": [
"string",
"null"
],
"default": null,
"description": "Meeting address (required for \"mobile\"; omit for office/apostille)."
},
"service": {
"type": "string",
"description": "Service: office | mobile | apostille | loan."
},
"scheduled_at": {
"type": [
"integer",
"null"
],
"format": "int64",
"default": null,
"description": "The chosen slot's `startUnix` (from search_availability). Omit for a\n\"call me to schedule\" request (no time held)."
},
"document_count": {
"type": [
"integer",
"null"
],
"format": "int64",
"default": null,
"description": "Number of documents. Default 1."
}
}
}{
"type": "object",
"required": [
"ok",
"message"
],
"properties": {
"ok": {
"type": "boolean",
"const": true
},
"status": {
"type": "string",
"description": "Account tools: the booking's status after this call (Pending after book_appointment)."
},
"message": {
"type": "string",
"description": "Customer-facing outcome; relay it as written — bookings are requests until the notary confirms."
},
"manageUrl": {
"type": [
"string",
"null"
],
"description": "Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise)."
},
"onAccount": {
"type": "boolean",
"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."
},
"reference": {
"type": "string",
"description": "Request / order reference for check_request_status (guest tools) or my_bookings (account tools)."
},
"appendedToExisting": {
"type": "boolean",
"description": "True when existing_reference was given and the request was extended, not duplicated."
},
"ourComparableQuoteCents": {
"type": "integer",
"description": "request_price_match only, when computable."
}
}
}{
"title": "Book an appointment",
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": false
}cancel_booking
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"order_id"
],
"properties": {
"order_id": {
"type": "string",
"description": "The booking's order id (from my_bookings)."
}
}
}{
"type": "object",
"required": [
"ok",
"message"
],
"properties": {
"ok": {
"type": "boolean",
"const": true
},
"status": {
"type": "string",
"description": "Account tools: the booking's status after this call (Pending after book_appointment)."
},
"message": {
"type": "string",
"description": "Customer-facing outcome; relay it as written — bookings are requests until the notary confirms."
},
"manageUrl": {
"type": [
"string",
"null"
],
"description": "Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise)."
},
"onAccount": {
"type": "boolean",
"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."
},
"reference": {
"type": "string",
"description": "Request / order reference for check_request_status (guest tools) or my_bookings (account tools)."
},
"appendedToExisting": {
"type": "boolean",
"description": "True when existing_reference was given and the request was extended, not duplicated."
},
"ourComparableQuoteCents": {
"type": "integer",
"description": "request_price_match only, when computable."
}
}
}{
"title": "Cancel a booking",
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": true
}check_request_status
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"reference"
],
"properties": {
"reference": {
"type": "string",
"description": "The reference id returned when the request was submitted (also accepts\nthe token from the emailed confirm link)."
}
}
}{
"type": "object",
"required": [
"reference",
"service",
"status",
"awaitingCustomerConfirmation",
"note"
],
"properties": {
"note": {
"type": "string"
},
"status": {
"type": "string",
"description": "Pending | Scheduled | EnRoute | InProgress | Completed | Notarized | PickedUp | Cancelled | NoShow | MergedWithOther. The STORED operator lifecycle — `Completed` means the notarial act happened (signed), not that the order is done. `note` says what the word means for the customer; read that rather than branching on this."
},
"service": {
"type": [
"string",
"null"
],
"description": "office | apostille | mobile | loan | ron | apostille_mail; null on a legacy row."
},
"reference": {
"type": "string"
},
"mergedInto": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"scheduledAt": {
"type": [
"integer",
"null"
]
},
"scheduledAtPacific": {
"type": "string"
}
},
"description": "Only for MergedWithOther: the surviving appointment's status and time."
},
"scheduledAt": {
"type": [
"integer",
"null"
],
"description": "Unix seconds."
},
"displayStatus": {
"type": "object",
"description": "The customer-facing word: {code, tone}. Code is the derived display status (Signed | Apostilled | ReadyToShip | Shipped | Complete | PartiallyComplete | DealDone | …); tone is ok | warn | err | info | neutral. Quote the code's meaning from `note`, never the stored status."
},
"requestedTime": {
"type": [
"integer",
"null"
],
"description": "Unix seconds the customer asked for on a lead, or null."
},
"scheduledAtPacific": {
"type": [
"string",
"null"
]
},
"awaitingCustomerConfirmation": {
"type": "boolean"
}
},
"description": "PII-minimal status of a request — never the address, name or notes."
}{
"title": "Check request status",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}check_service_area
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"description": "Street address, city, or ZIP to check (Washington State service area)."
},
"service": {
"type": [
"string",
"null"
],
"default": null,
"description": "\"notary\" (default) or \"apostille\" — the service-area rules differ slightly."
}
}
}{
"type": "object",
"required": [
"withinServiceArea",
"precise"
],
"properties": {
"label": {
"type": [
"string",
"null"
],
"description": "Formatted address, or null when the address could not be resolved."
},
"region": {
"type": [
"string",
"null"
]
},
"country": {
"type": [
"string",
"null"
]
},
"message": {
"type": [
"string",
"null"
],
"description": "Why the place is not bookable as given, or null."
},
"precise": {
"type": "boolean",
"description": "False when a street and city are still needed to pin the spot."
},
"distanceMiles": {
"type": "number",
"description": "Straight-line miles from the Bothell office (display only, not a routed leg)."
},
"withinServiceArea": {
"type": "boolean"
}
}
}{
"title": "Check service area",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}get_apostille_requirements
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"document"
],
"properties": {
"document": {
"type": "string",
"description": "The document in plain words (e.g. \"Washington birth certificate\",\n\"university diploma\", \"FBI background check\", \"power of attorney\")."
},
"issuing_state": {
"type": [
"string",
"null"
],
"default": null,
"description": "The US state that issued or notarized it (default Washington)."
},
"destination_country": {
"type": [
"string",
"null"
],
"default": null,
"description": "The country the apostilled document is for."
}
}
}{
"type": "object",
"required": [
"document",
"issuingState",
"category",
"eligibleForMailInAsIs",
"explanation",
"diyPath",
"ourOffer"
],
"properties": {
"diyPath": {
"type": "object",
"properties": {
"stateFee": {
"type": "string"
},
"yourself": {
"type": "string"
},
"whenToUseUs": {
"type": "string"
}
}
},
"category": {
"type": "string",
"description": "Document class: vital_record_mailin_ready, school_record, notarized_document, court_document, federal_authentication, unknown."
},
"document": {
"type": "string"
},
"ourOffer": {
"type": "object",
"properties": {
"fullServiceTiers": {
"type": "string"
},
"typicalTurnaround": {
"type": [
"object",
"null"
]
},
"typicalTurnaroundTier": {
"type": "string"
},
"mailInApostilleFromCents": {
"type": [
"integer",
"null"
]
},
"inPersonApostilleFromCents": {
"type": [
"integer",
"null"
]
}
}
},
"disclaimer": {
"type": "string"
},
"destination": {
"type": [
"object",
"null"
],
"required": [
"country",
"status"
],
"properties": {
"note": {
"type": "string"
},
"status": {
"type": "string",
"description": "member | coming_soon | non_member."
},
"country": {
"type": "string"
},
"effectiveDate": {
"type": "string",
"description": "YYYY-MM-DD the Convention enters into force for a state that joined by a dated accession: still ahead for coming_soon, already past for a recent member."
}
}
},
"explanation": {
"type": "string"
},
"howToProceed": {
"type": "string"
},
"issuingState": {
"type": "string"
},
"eligibleForMailInAsIs": {
"type": "boolean",
"description": "True when no notarial act is needed first."
}
}
}{
"title": "Check apostille requirements",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_price_quote
Calculate a server-authoritative USD price estimate before shipping — pure, no side effects, nothing booked. Use when the customer asks about cost. Accepts: `document_count`, `mobile`, `after_hours`, `apostille` plus `tier` (e.g. expedited, priority, standard, mailin); set `needs_notarization` false for already-certified records; `ua_lane` (withinUkraine | fromUsa) prices the Ukraine direct lane, `translation_docs` the in-Ukraine translation. Returns amountCents and line items; fails if `apostille` is true and `tier` is invalid (with `apostille` false, `tier` is ignored).
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"tier": {
"type": [
"string",
"null"
],
"default": null,
"description": "Apostille tier when `apostille`: expedited | priority | standard | mailin."
},
"mobile": {
"type": "boolean",
"default": false,
"description": "True if we travel to the customer (adds the flat travel fee)."
},
"ua_lane": {
"type": [
"string",
"null"
],
"default": null,
"description": "Ukraine delivery lane: withinUkraine (weekly batch, included) or\nfromUsa (direct from the USA: a flat $25, NP postage included)."
},
"apostille": {
"type": "boolean",
"default": false,
"description": "True to include a Secretary-of-State apostille."
},
"after_hours": {
"type": "boolean",
"default": false,
"description": "Mobile only: the chosen slot is after 6pm or on a weekend."
},
"document_count": {
"type": [
"integer",
"null"
],
"format": "int64",
"default": null,
"description": "Number of documents (1–20). Default 1."
},
"translation_docs": {
"type": [
"integer",
"null"
],
"format": "int64",
"default": null,
"description": "Apostille documents translated in Ukraine ($25/doc; the first doc is\nfree on the direct lane)."
},
"needs_notarization": {
"type": [
"boolean",
"null"
],
"default": null,
"description": "Set false for a mail-in apostille of already-certified public records\n(birth/marriage/death certificates) that need no notarial act."
}
}
}{
"type": "object",
"required": [
"currency",
"amountCents",
"lineItems",
"prepaymentRequired",
"howToProceed"
],
"properties": {
"currency": {
"type": "string"
},
"lineItems": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"amountCents"
],
"properties": {
"label": {
"type": "string"
},
"amountCents": {
"type": "integer"
}
}
}
},
"amountCents": {
"type": "integer"
},
"howToProceed": {
"type": "string"
},
"prepaymentRequired": {
"type": "boolean"
}
}
}{
"title": "Get price quote",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_services
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).
{
"type": "object",
"properties": {}
}{
"type": "object",
"required": [
"business",
"serviceArea",
"paymentOptions",
"paymentNote",
"services"
],
"properties": {
"business": {
"type": "string"
},
"location": {
"type": "string"
},
"services": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"description"
],
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
},
"languages": {
"type": "array",
"items": {
"type": "string"
}
},
"priceMatch": {
"type": "string"
},
"priceQuote": {
"type": "string",
"description": "Which tool gives an exact figure."
},
"paymentNote": {
"type": "string"
},
"serviceArea": {
"type": "string"
},
"paymentOptions": {
"type": "array",
"items": {
"type": "string"
}
},
"remoteOnlineNotarization": {
"type": "boolean"
}
},
"description": "Static service catalog, coverage summary and accepted payment options."
}{
"title": "List services",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_turnaround_estimate
Calculate typical turnaround — apostille processing days plus mailing and delivery legs. Ranges, never guarantees; exact appointment times come from search_availability. Use when the customer asks how long. Accepts: `service` (e.g. notarization, apostille, apostille_mail, loan_signing), optional `tier`, `shipping`, `destination_country`, `ua_lane` (withinUkraine | fromUsa — the Ukraine lane when `shipping` is omitted). Returns staged day estimates; an unknown `tier` falls back to the standard figure, not an error.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"service"
],
"properties": {
"tier": {
"type": [
"string",
"null"
],
"default": null,
"description": "Apostille speed tier when service is apostille: expedited | priority | standard."
},
"service": {
"type": "string",
"description": "Service: notarization | apostille | apostille_mail | loan_signing."
},
"ua_lane": {
"type": [
"string",
"null"
],
"default": null,
"description": "Ukraine delivery lane: withinUkraine (weekly batch) or fromUsa (direct\nfrom the USA) — each answers its `np_eta` window for a recipient whose\npostal code we do not know. Fills `shipping` when that is omitted; an\nexplicit `shipping` always wins."
},
"shipping": {
"type": [
"string",
"null"
],
"default": null,
"description": "Delivery: pickup | us | ukraine | ukraine_direct | international. If\nomitted, inferred from destination_country (apostille legs default to\nUS shipping) or from `ua_lane` (fromUsa ⇒ ukraine_direct)."
},
"destination_country": {
"type": [
"string",
"null"
],
"default": null,
"description": "Destination country (used to infer shipping when `shipping` is omitted)."
}
}
}{
"type": "object",
"required": [
"service",
"stages",
"typicalTotalDaysLow",
"typicalTotalDaysHigh",
"disclaimer"
],
"properties": {
"tier": {
"type": "string"
},
"stages": {
"type": "array",
"items": {
"type": "object",
"required": [
"stage"
],
"properties": {
"note": {
"type": "string"
},
"stage": {
"type": "string"
},
"businessDays": {
"type": "integer"
},
"calendarDaysLow": {
"type": "integer"
},
"calendarDaysHigh": {
"type": "integer"
}
}
}
},
"service": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"howToProceed": {
"type": "string"
},
"typicalTotalDaysLow": {
"type": "integer"
},
"typicalTotalDaysHigh": {
"type": "integer"
}
},
"description": "Staged day estimates — ranges, never guarantees."
}{
"title": "Estimate turnaround",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}my_bookings
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.
{
"type": "object",
"properties": {}
}{
"type": "object",
"required": [
"bookings"
],
"properties": {
"bookings": {
"type": "array",
"items": {
"type": "object",
"required": [
"orderId",
"service",
"status"
],
"properties": {
"status": {
"type": "string"
},
"orderId": {
"type": "string",
"description": "Pass to reschedule_booking / cancel_booking as order_id."
},
"service": {
"type": [
"string",
"null"
]
},
"location": {
"type": "string"
},
"scheduledAt": {
"type": [
"integer",
"null"
],
"description": "Unix seconds; null for a call-me request with no time held."
}
}
},
"description": "Latest first."
}
}
}{
"title": "My bookings",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}request_apostille
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"documents",
"name"
],
"properties": {
"name": {
"type": "string",
"description": "The customer's FULL LEGAL NAME exactly as on their government-issued ID\n(never a nickname) — apostille filings print it."
},
"email": {
"type": [
"string",
"null"
],
"default": null,
"description": "Email. Collect BOTH an email AND a phone in one question when possible;\nat least one is required."
},
"notes": {
"type": [
"string",
"null"
],
"default": null,
"description": "Anything else the notary should know."
},
"phone": {
"type": [
"string",
"null"
],
"default": null,
"description": "Phone with country code — the notary confirms fastest by phone/SMS."
},
"documents": {
"type": "string",
"description": "What documents, in plain words (e.g. \"2 birth certificates for Ukraine\")."
},
"existing_reference": {
"type": [
"string",
"null"
],
"default": null,
"description": "To ADD these documents to an EXISTING request instead of creating a\nsecond one, pass that request's reference id (with the same email/phone\nso we can verify the customer). Nothing new is created."
},
"destination_country": {
"type": [
"string",
"null"
],
"default": null,
"description": "Destination country the apostilled documents are for."
}
}
}{
"type": "object",
"required": [
"ok",
"message"
],
"properties": {
"ok": {
"type": "boolean",
"const": true
},
"status": {
"type": "string",
"description": "Account tools: the booking's status after this call (Pending after book_appointment)."
},
"message": {
"type": "string",
"description": "Customer-facing outcome; relay it as written — bookings are requests until the notary confirms."
},
"manageUrl": {
"type": [
"string",
"null"
],
"description": "Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise)."
},
"onAccount": {
"type": "boolean",
"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."
},
"reference": {
"type": "string",
"description": "Request / order reference for check_request_status (guest tools) or my_bookings (account tools)."
},
"appendedToExisting": {
"type": "boolean",
"description": "True when existing_reference was given and the request was extended, not duplicated."
},
"ourComparableQuoteCents": {
"type": "integer",
"description": "request_price_match only, when computable."
}
}
}{
"title": "Request mail-in apostille",
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": false
}request_booking
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"service",
"name"
],
"properties": {
"name": {
"type": "string",
"description": "The customer's FULL LEGAL NAME exactly as on their government-issued ID\n(never a nickname or chat display name) — notarial records and apostille\nfilings print it. Ask if you only know a first name."
},
"email": {
"type": [
"string",
"null"
],
"default": null,
"description": "Email. Collect BOTH an email AND a phone in one question when possible;\nat least one is required."
},
"notes": {
"type": [
"string",
"null"
],
"default": null,
"description": "Anything else the notary should know."
},
"phone": {
"type": [
"string",
"null"
],
"default": null,
"description": "Phone with country code (e.g. +1...). The notary confirms fastest by\nphone/SMS — ask for it even when an email is known."
},
"address": {
"type": [
"string",
"null"
],
"default": null,
"description": "Meeting address — MOBILE ONLY. Office and apostille visits automatically\nuse our Bothell office; omit this for them."
},
"service": {
"type": "string",
"description": "Service: office | mobile | apostille | loan."
},
"desired_time": {
"type": [
"string",
"null"
],
"default": null,
"description": "The wanted time in plain words, when no exact slot was chosen (rides the\nnotes; the notary confirms a real time)."
},
"document_count": {
"type": [
"integer",
"null"
],
"format": "int64",
"default": null,
"description": "Number of documents. Default 1."
},
"desired_time_unix": {
"type": [
"integer",
"null"
],
"format": "int64",
"default": null,
"description": "The chosen slot's `startUnix` from search_availability (Unix seconds).\nPass it so the request carries the exact wanted time — still a request,\nnever a hold."
},
"existing_reference": {
"type": [
"string",
"null"
],
"default": null,
"description": "To ADD to or change an EXISTING request instead of creating a second one\n(e.g. \"also apostille it\", \"make it 3 documents\"), pass that request's\nreference id here — the same email/phone must be provided so we can\nverify it's the same customer. Nothing new is created."
}
}
}{
"type": "object",
"required": [
"ok",
"message"
],
"properties": {
"ok": {
"type": "boolean",
"const": true
},
"status": {
"type": "string",
"description": "Account tools: the booking's status after this call (Pending after book_appointment)."
},
"message": {
"type": "string",
"description": "Customer-facing outcome; relay it as written — bookings are requests until the notary confirms."
},
"manageUrl": {
"type": [
"string",
"null"
],
"description": "Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise)."
},
"onAccount": {
"type": "boolean",
"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."
},
"reference": {
"type": "string",
"description": "Request / order reference for check_request_status (guest tools) or my_bookings (account tools)."
},
"appendedToExisting": {
"type": "boolean",
"description": "True when existing_reference was given and the request was extended, not duplicated."
},
"ourComparableQuoteCents": {
"type": "integer",
"description": "request_price_match only, when computable."
}
}
}{
"title": "Request a booking",
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": false
}request_price_match
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"service",
"competitor_name",
"competitor_price_usd"
],
"properties": {
"name": {
"type": "string",
"description": "The customer's name."
},
"email": {
"type": [
"string",
"null"
],
"default": null,
"description": "Email — provide an email OR a phone so we can reach them."
},
"notes": {
"type": [
"string",
"null"
],
"default": null,
"description": "Anything else the notary should know."
},
"phone": {
"type": [
"string",
"null"
],
"default": null,
"description": "Phone — provide an email OR a phone so we can reach them."
},
"service": {
"type": "string",
"description": "Service: office | mobile | apostille | apostille_mail | loan."
},
"competitor_url": {
"type": [
"string",
"null"
],
"default": null,
"description": "Link to the competitor's quote/page, if any (stored for the operator,\nnever fetched)."
},
"document_count": {
"type": [
"integer",
"null"
],
"format": "int64",
"default": null,
"description": "Number of documents, for our comparison quote. Default 1."
},
"competitor_name": {
"type": "string",
"description": "The competitor's business name."
},
"competitor_price_usd": {
"type": "number",
"format": "double",
"description": "The competitor's quoted price, in US dollars."
}
}
}{
"type": "object",
"required": [
"ok",
"message"
],
"properties": {
"ok": {
"type": "boolean",
"const": true
},
"status": {
"type": "string",
"description": "Account tools: the booking's status after this call (Pending after book_appointment)."
},
"message": {
"type": "string",
"description": "Customer-facing outcome; relay it as written — bookings are requests until the notary confirms."
},
"manageUrl": {
"type": [
"string",
"null"
],
"description": "Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise)."
},
"onAccount": {
"type": "boolean",
"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."
},
"reference": {
"type": "string",
"description": "Request / order reference for check_request_status (guest tools) or my_bookings (account tools)."
},
"appendedToExisting": {
"type": "boolean",
"description": "True when existing_reference was given and the request was extended, not duplicated."
},
"ourComparableQuoteCents": {
"type": "integer",
"description": "request_price_match only, when computable."
}
}
}{
"title": "Request a price match",
"readOnlyHint": false,
"openWorldHint": true,
"destructiveHint": false
}reschedule_booking
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"order_id",
"scheduled_at"
],
"properties": {
"order_id": {
"type": "string",
"description": "The booking's order id (from my_bookings)."
},
"scheduled_at": {
"type": "integer",
"format": "int64",
"description": "The new slot's `startUnix` (from search_availability)."
}
}
}{
"type": "object",
"required": [
"ok",
"message"
],
"properties": {
"ok": {
"type": "boolean",
"const": true
},
"status": {
"type": "string",
"description": "Account tools: the booking's status after this call (Pending after book_appointment)."
},
"message": {
"type": "string",
"description": "Customer-facing outcome; relay it as written — bookings are requests until the notary confirms."
},
"manageUrl": {
"type": [
"string",
"null"
],
"description": "Guest requests: the emailed confirm/cancel link, when one was minted (null otherwise)."
},
"onAccount": {
"type": "boolean",
"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."
},
"reference": {
"type": "string",
"description": "Request / order reference for check_request_status (guest tools) or my_bookings (account tools)."
},
"appendedToExisting": {
"type": "boolean",
"description": "True when existing_reference was given and the request was extended, not duplicated."
},
"ourComparableQuoteCents": {
"type": "integer",
"description": "request_price_match only, when computable."
}
}
}{
"title": "Reschedule a booking",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}search_availability
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"service"
],
"properties": {
"address": {
"type": [
"string",
"null"
],
"default": null,
"description": "The address to meet at — required for \"mobile\"; ignored for \"office\"."
},
"service": {
"type": "string",
"description": "\"office\" (at our office), \"mobile\" (we come to you), or \"apostille\"."
},
"document_count": {
"type": [
"integer",
"null"
],
"format": "int64",
"default": null,
"description": "Number of documents (drives the appointment length). Default 1."
}
}
}{
"type": "object",
"required": [
"resolved",
"days",
"recommended"
],
"properties": {
"days": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"windows"
],
"properties": {
"date": {
"type": "string",
"description": "YYYY-MM-DD, Pacific."
},
"closed": {
"type": "string",
"description": "Present only on a day with no bookable slot: closed | full."
},
"windows": {
"type": "array",
"items": {
"type": "object",
"required": [
"from",
"until",
"fit",
"startUnixFrom",
"startCount",
"stepSec"
],
"properties": {
"fit": {
"type": "string",
"description": "great | good | fair | far."
},
"from": {
"type": "string",
"description": "HH:MM of the first start."
},
"until": {
"type": "string",
"description": "HH:MM end of the last slot."
},
"stepSec": {
"type": "integer"
},
"afterHours": {
"type": "boolean"
},
"startCount": {
"type": "integer"
},
"startUnixFrom": {
"type": "integer"
}
}
}
}
}
}
},
"resolved": {
"type": "object",
"required": [
"withinServiceArea",
"precise"
],
"properties": {
"label": {
"type": [
"string",
"null"
],
"description": "Formatted address, or null when the address could not be resolved."
},
"region": {
"type": [
"string",
"null"
]
},
"country": {
"type": [
"string",
"null"
]
},
"message": {
"type": [
"string",
"null"
],
"description": "Why the place is not bookable as given, or null."
},
"precise": {
"type": "boolean",
"description": "False when a street and city are still needed to pin the spot."
},
"distanceMiles": {
"type": "number",
"description": "Straight-line miles from the Bothell office (display only, not a routed leg)."
},
"withinServiceArea": {
"type": "boolean"
}
}
},
"recommended": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"start",
"startUnix",
"durationMin",
"fit"
],
"properties": {
"fit": {
"type": "string",
"description": "great | good | fair | far."
},
"date": {
"type": "string"
},
"start": {
"type": "string",
"description": "HH:MM Pacific."
},
"startUnix": {
"type": "integer",
"description": "Pass to request_booking as desired_time_unix (or to book_appointment as scheduled_at)."
},
"durationMin": {
"type": "integer"
}
}
}
},
"afterHoursSurchargeCents": {
"type": "integer",
"description": "Mobile services only: the surcharge an afterHours slot adds."
}
},
"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."
}{
"title": "Find open appointment slots",
"readOnlyHint": true,
"openWorldHint": true,
"destructiveHint": false
}search_documentation
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"query"
],
"properties": {
"lang": {
"type": [
"string",
"null"
],
"default": null,
"description": "Restrict to one language. Only `en` is indexed today; any other value\nreturns no results rather than silently ignoring the filter."
},
"limit": {
"type": [
"integer",
"null"
],
"format": "uint32",
"default": null,
"minimum": 0,
"description": "How many results (default 10, max 20)."
},
"query": {
"type": "string",
"description": "What to look for. Keywords beat prose: this is a lexical index with no\nsemantic fallback, so \"mail-in apostille birth certificate\" finds the\npage that \"can I post my documents instead\" does not."
},
"section": {
"type": [
"string",
"null"
],
"default": null,
"description": "Restrict to sections whose heading contains this text (e.g. \"What it\ncosts\"). Heading TEXT, not a URL fragment — the pages carry no anchors."
}
}
}{
"type": "object",
"required": [
"query",
"count",
"results",
"note"
],
"properties": {
"note": {
"type": "string"
},
"count": {
"type": "integer"
},
"query": {
"type": "string"
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"title",
"url",
"markdownUrl",
"excerpt"
],
"properties": {
"url": {
"type": "string",
"description": "Canonical page URL to cite."
},
"title": {
"type": "string"
},
"excerpt": {
"type": "string"
},
"section": {
"type": "string"
},
"markdownUrl": {
"type": "string",
"description": "Markdown twin of the page — fetch to read it in full."
}
}
}
}
}
}{
"title": "Search documentation",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}Prompts
Not advertised
Resources
4 advertised
service-areas — Service areas
Where Andrii Co. works: counties and cities around Greater Seattle / Puget Sound, the Bothell office, and the Peace Arch cross-border option. For a specific address, call check_service_area.
resource://service-areasapostille-guide — Washington apostille guide
How a Washington apostille works: the Secretary of State process, Hague-membership basics, speed tiers with typical timelines, the mail-in path, and the honest DIY option.
resource://apostille-guidenotary-requirements — Washington notarization requirements
What a signer must bring and what a Washington notary may and may not do: acceptable ID, personal appearance, witnesses, and prohibited acts (RCW 42.45 in plain words).
resource://notary-requirementspricing-guide — Pricing guide
The published rate card: base fees, travel and after-hours fees, apostille speed tiers, and accepted payment options. For an exact figure, call get_price_quote.
resource://pricing-guide90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 317 ms
- 95th percentile latency
- 317 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 317 ms · metadata changed · 15 tool(s), 4 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http andrii-co-notary-apostille-assistant-mcp https://andrii.net/mcpCodex
codex mcp add andrii-co-notary-apostille-assistant-mcp --url https://andrii.net/mcpCursor
{
"mcpServers": {
"andrii-co-notary-apostille-assistant-mcp": {
"url": "https://andrii.net/mcp"
}
}
}Cline
{
"mcpServers": {
"andrii-co-notary-apostille-assistant-mcp": {
"type": "streamableHttp",
"url": "https://andrii.net/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"andrii-co-notary-apostille-assistant-mcp": {
"type": "http",
"url": "https://andrii.net/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http andrii-co-notary-apostille-assistant-mcp https://andrii.net/mcpClaude Desktop
https://andrii.net/mcpWindsurf
{
"mcpServers": {
"andrii-co-notary-apostille-assistant-mcp": {
"serverUrl": "https://andrii.net/mcp"
}
}
}Let your agent find its tools
Find servers like Andrii Co. Notary & Apostille Assistant MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other productivity and knowledge servers
Do you run Andrii Co. Notary & Apostille Assistant MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.