Koskamo

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.

Andrii Co. Notary & Apostille Assistant MCP logo, by Andrii Co.Vendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Andrii Co.
MCP endpoint (Streamable HTTP)
https://andrii.net/mcp
Vendor documentation

What its tools do

15 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

15 of 15 have a description · 15 of 15 declare behavior hints · 13 of 13 with parameters document them all

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

Vendor evidenceRegistry 1.0.1

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
Server-advertised capabilities
{
  "tools": {},
  "resources": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Andrii Co. — a Washington State notary public (Bothell, WA; English/Ukrainian/Russian). Bookings made here are REQUESTS the notary confirms out-of-band — never instant confirmations — and no payment is taken in chat. FAST PATH (goal: one question, one booking): collect in a SINGLE question the customer's FULL LEGAL NAME (exactly as on their government ID — never a chat display name), BOTH an email AND a phone when possible (one is required; phone confirms fastest), the service (office | mobile | apostille | loan), the meeting address (mobile only — office and apostille visits automatically use our Bothell office), and the preferred day/time. APOSTILLE ROUTING: call get_apostille_requirements first. A document that needs no notary here (eligibleForMailInAsIs: a certified vital or court record, a registrar-signed Washington public-school record, a paper already notarized in Washington) is ordered with NO appointment — give the customer ourOffer.orderPage (the apostille order page, prefilled with the destination) rather than booking a visit; request_apostille records a mail-in request for certified vital records. Only a document that still needs notarizing books an appointment with service apostille. Apostille prices: expedited $300 / priority $215 / standard $115 first document, +$75 each additional, the notarization and state fee included — no discount for a document that arrives notarized; by mail $15 per document. Timing counts from the appointment or from when the documents reach us: Expedited the next business day, Priority 3, Standard 7, by mail 10–15 business days. Delivery dates are given only where DHL ships; for Ukraine, Russia, Belarus and US addresses say it varies by carrier. search_availability already validates the service area (a separate check_service_area call is rarely needed) and is read-only, safe to call in parallel with get_price_quote. Then submit ONE booking: book_appointment when the customer is SIGNED IN (the connector carries their account), request_booking when they are not, passing the chosen slot's startUnix as scheduled_at or desired_time_unix respectively. To ADD to or change an existing request, pass existing_reference — never create a second request for the same visit. Keep the returned reference and use check_request_status whenever the customer asks about status, confirmation, or rescheduling — the notary may have updated it since. A booking made while signed in comes back with onAccount: true; say so, because the customer can then ask you to list it (my_bookings), move it (reschedule_booking) or cancel it (cancel_booking) rather than hunting for an emailed link. Payments accepted: Visa/Mastercard, PayPal, Venmo, cash, Interac e-Transfer (Canadian customers), or escrow/title-company disbursement on loan signings (a line item in closing costs). Reference resources (service areas, the apostille guide, WA notary requirements, the pricing guide) are available via resources/list — background reading; live answers (quotes, slots, a specific address) come from the tools. For anything else the site documents — service-of-process, vital records, registered agent, Form I-9, notarized screenshots, the terms and privacy notices, or the per-jurisdiction apostille handbook — call search_documentation with KEYWORDS (a state name, "registered agent", "Form I-9"), not a sentence: it is a lexical index with no semantic fallback. What it returns is prose; get_price_quote and check_service_area remain authoritative for money and coverage. Service area: Washington State primary (Greater Seattle / Puget Sound); Oregon and British Columbia apostille hand-offs; cross-border meetings at Peace Arch Park. No Remote Online Notarization.

Tools

15 advertised

book_appointment
Advertised by the server during the last successful anonymous check.
Open-world

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.

book_appointment input schema
{
  "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."
    }
  }
}
book_appointment output schema
{
  "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."
    }
  }
}
book_appointment annotations
{
  "title": "Book an appointment",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}
cancel_booking
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

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.

cancel_booking input schema
{
  "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)."
    }
  }
}
cancel_booking output schema
{
  "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."
    }
  }
}
cancel_booking annotations
{
  "title": "Cancel a booking",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": true
}
check_request_status
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

check_request_status input schema
{
  "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)."
    }
  }
}
check_request_status output schema
{
  "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."
}
check_request_status annotations
{
  "title": "Check request status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
check_service_area
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

check_service_area input schema
{
  "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."
    }
  }
}
check_service_area output schema
{
  "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"
    }
  }
}
check_service_area annotations
{
  "title": "Check service area",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
get_apostille_requirements
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_apostille_requirements input schema
{
  "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."
    }
  }
}
get_apostille_requirements output schema
{
  "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."
    }
  }
}
get_apostille_requirements annotations
{
  "title": "Check apostille requirements",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
get_price_quote
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

get_price_quote input schema
{
  "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."
    }
  }
}
get_price_quote output schema
{
  "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"
    }
  }
}
get_price_quote annotations
{
  "title": "Get price quote",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
get_services
Advertised by the server during the last successful anonymous check.
Advertised read-only

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

get_services input schema
{
  "type": "object",
  "properties": {}
}
get_services output schema
{
  "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."
}
get_services annotations
{
  "title": "List services",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
get_turnaround_estimate
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_turnaround_estimate input schema
{
  "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)."
    }
  }
}
get_turnaround_estimate output schema
{
  "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."
}
get_turnaround_estimate annotations
{
  "title": "Estimate turnaround",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
my_bookings
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

my_bookings input schema
{
  "type": "object",
  "properties": {}
}
my_bookings output schema
{
  "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."
    }
  }
}
my_bookings annotations
{
  "title": "My bookings",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
request_apostille
Advertised by the server during the last successful anonymous check.
Open-world

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.

request_apostille input schema
{
  "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."
    }
  }
}
request_apostille output schema
{
  "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."
    }
  }
}
request_apostille annotations
{
  "title": "Request mail-in apostille",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}
request_booking
Advertised by the server during the last successful anonymous check.
Open-world

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.

request_booking input schema
{
  "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."
    }
  }
}
request_booking output schema
{
  "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."
    }
  }
}
request_booking annotations
{
  "title": "Request a booking",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}
request_price_match
Advertised by the server during the last successful anonymous check.
Open-world

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.

request_price_match input schema
{
  "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."
    }
  }
}
request_price_match output schema
{
  "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."
    }
  }
}
request_price_match annotations
{
  "title": "Request a price match",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}
reschedule_booking
Advertised by the server during the last successful anonymous check.
Open-world

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.

reschedule_booking input schema
{
  "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)."
    }
  }
}
reschedule_booking output schema
{
  "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."
    }
  }
}
reschedule_booking annotations
{
  "title": "Reschedule a booking",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
search_availability
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

search_availability input schema
{
  "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."
    }
  }
}
search_availability output schema
{
  "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."
}
search_availability annotations
{
  "title": "Find open appointment slots",
  "readOnlyHint": true,
  "openWorldHint": true,
  "destructiveHint": false
}
search_documentation
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

search_documentation input schema
{
  "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."
    }
  }
}
search_documentation output schema
{
  "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."
          }
        }
      }
    }
  }
}
search_documentation annotations
{
  "title": "Search documentation",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

4 advertised

service-areas — Service areas

Advertised by the server during the last successful anonymous check.

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.

service-areas URI
resource://service-areas

MIME type: text/markdown

apostille-guide — Washington apostille guide

Advertised by the server during the last successful anonymous check.

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.

apostille-guide URI
resource://apostille-guide

MIME type: text/markdown

notary-requirements — Washington notarization requirements

Advertised by the server during the last successful anonymous check.

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

notary-requirements URI
resource://notary-requirements

MIME type: text/markdown

pricing-guide — Pricing guide

Advertised by the server during the last successful anonymous check.

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.

pricing-guide URI
resource://pricing-guide

MIME type: text/markdown

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

Too few checks for a percentage yet (1 of 1 answered).

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

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http andrii-co-notary-apostille-assistant-mcp https://andrii.net/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add andrii-co-notary-apostille-assistant-mcp --url https://andrii.net/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable andrii-co-notary-apostille-assistant-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "andrii-co-notary-apostille-assistant-mcp": {
      "url": "https://andrii.net/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "andrii-co-notary-apostille-assistant-mcp": {
      "type": "streamableHttp",
      "url": "https://andrii.net/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start andrii-co-notary-apostille-assistant-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "andrii-co-notary-apostille-assistant-mcp": {
      "type": "http",
      "url": "https://andrii.net/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http andrii-co-notary-apostille-assistant-mcp https://andrii.net/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://andrii.net/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.

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.

Claim this listing