MCP server, live.
You're looking at it.

Visa rules, application prep, and automated form-fills for any AI assistant that speaks MCP. Drop this URL into Claude, ChatGPT, Cursor, or anywhere else.

https://usemeridian.app/mcp
17 toolsFree visa lookups, no key neededToken unlocks applications, vault, and the Computer worker

Install

A few lines of config and your AI is talking to Meridian. Pick your client.

bash
$ claude mcp add --transport http meridian https://usemeridian.app/mcp

What your AI gets

17 tools. Expand any row to see what it does and what it accepts.

Static · pre-fetch

A few terms you'll see

Application.
A tracked visa application: one trip, one destination.
Vault.
Your identity store: passport, employer, travel history.
Meridian Computer.
A browser agent that fills out the consulate portal on your behalf.
Corridor.
Passport country + destination (e.g., NG to GB).

Visa requirements for a route (passport country → destination country): documents, fee, processing time, visa-free eligibility. Pass residence_iso when the user lives outside their passport country (residence-permit rules apply). If the passport country is unknown, ask before calling.

Parameters
  • passport_isorequired
    string

    ISO-3166 alpha-2 code of the traveler's passport country (e.g., 'NG', 'DK', 'GB'). Case-insensitive. IMPORTANT: when called with a user-scoped token, Meridian uses the passport on file in the user's vault and ignores this value if it differs. The response includes route.passport_iso_source: 'vault' means we used the stored passport (disclose to user, e.g. 'I'll look this up on your NG passport on file'); 'request' means we used your value. If you don't know the user's passport country and there's no vault, ask before calling.

  • destination_isorequired
    string

    ISO-3166 alpha-2 code of the destination country (e.g., 'TH' for Thailand, 'DE' for Germany, 'US' for United States). Case-insensitive.

  • residence_isooptional
    string

    Optional ISO-3166 alpha-2 code of where the traveler currently lives long-term, separate from their passport country. Examples: 'DK' (Danish resident), 'DE' (German resident). Case-insensitive. When present, Meridian applies residence-permit reciprocity rules (Schengen permit → free movement in Schengen, etc). Defaults to passport country when omitted, preserving existing behavior.

  • purposeoptional
    string

    Optional travel purpose: 'tourism', 'business', 'study', 'transit', 'medical', 'visiting family'. Narrows the document list to the matching visa category and surfaces a mismatch warning if the route doesn't cover that purpose.

Log feedback on a route we returned (kind=feedback) or request a route we don't cover yet (kind=request, when requirements_lookup returned found=false). Requests use sentiment=negative.

Parameters
  • passport_isorequired
    string

    ISO-3166 alpha-2 passport country.

  • destination_isorequired
    string

    ISO-3166 alpha-2 destination country.

  • residence_isooptional
    string

    Optional ISO-3166 alpha-2 residence country (where the traveler lives long-term). Defaults to passport_iso when omitted.

  • purposerequired
    string

    Travel purpose (e.g. tourism, business).

  • sentimentrequired
    string

    Thumbs up = positive; thumbs down = negative. For route requests (kind='request'), use 'negative'.

  • kindrequired
    string

    'feedback' = comment on a route we returned. 'request' = log a route or location we don't yet cover (use when requirements_lookup returned found=false or insufficient data).

  • bodyoptional
    string

    Optional free-text body, max 500 chars. PII-screened on save. For requests, capture what the user is trying to do (visa class, urgency, where they live).

Tell the user whether they're ready to apply on a given route: a ready or not-yet verdict with the per-check detail behind it. Passport and destination fall back to the user's saved info or are elicited when missing. Read-only. For an existing visa application, use applications_evaluate.

Parameters
  • passportoptional
    string

    Optional ISO-3166 alpha-2 passport country. Falls back to the user's vault passport when authenticated; elicited from the user when missing and unauthenticated.

  • destinationoptional
    string

    Optional ISO-3166 alpha-2 destination country. Elicited from the user when missing: the tool returns a structured prompt the agent can surface to ask the user.

  • purposeoptional
    string

    Optional travel purpose used to refine the route's data.

Read one visa application: profile, trip details, status, and latest Computer task_id (when one is running). Pass task_id to tasks/get for live progress.

Parameters
  • visa_application_idrequired
    string | integer

    Application public_id ('vsa_*') or numeric DB id.

List the authenticated user's visa applications. Returns the most-recently-updated first. Cancelled/withdrawn applications are hidden unless include_archived is true.

Parameters
  • include_archivedoptional
    boolean

    Include cancelled/withdrawn applications.

  • limitoptional
    integer

    Max applications to return (1-100).

Start a tracked visa application for the authenticated user. Use once the user has chosen to apply (for general 'what do I need' questions, call requirements_lookup).

Parameters
  • destination_isorequired
    string

    Destination country (ISO-3166 alpha-2).

  • visa_typerequired
    string

    Visa category (e.g. 'tourist', 'business').

  • trip_detailsoptional
    object

    Optional trip data (purpose, dates, accommodations, sponsors).

Write a named section on a visa application. Three shapes: `data` for a full section write; `accept_suggestion: {field, doc_id}` to apply a stashed extraction suggestion to a single field; `dismiss_suggestion: {field, doc_id}` to clear a stash entry without changing the field. Section data is recorded with source 'mcp_agent'; accept_suggestion is recorded with source 'extraction'.

Parameters
  • visa_application_idrequired
    string | integer

    Application public_id ('vsa_*') or numeric DB id.

  • sectionrequired
    string

    Section key. Use applications_get to discover the data shape.

  • dataoptional

    Full section write. Shape depends on the section.

  • accept_suggestionoptional
    object

    Apply a stashed extraction suggestion to a single field. Provide {field, doc_id} matching an entry from vault.extraction_suggestions[section].

  • dismiss_suggestionoptional
    object

    Clear a stashed suggestion without changing the field. Same shape as accept_suggestion.

File a ready visa application via Meridian Computer (the browser agent that fills the consulate portal). Runs readiness gating: soft blockers return a non-error blocked envelope unless override_soft_blockers; hard blockers raise validation_error. For self-filed visa applications, use applications_report_status. Idempotent.

Parameters
  • visa_application_idrequired
    string | integer

    The visa application public_id ('vsa_*') or numeric DB id. For task-scoped tokens, must match the task's linked application.

  • portal_urloptional
    string

    Optional: the consulate application portal URL. Auto-resolved from the route when omitted. Must be https://.

  • verification_emailoptional
    string

    Optional override for the email Meridian Computer uses for portal verification. Defaults to the user's provisioned Meridian inbox so receipts route through Resend.

  • override_soft_blockersoptional
    boolean

    When true, bypass soft submission blockers (no readiness check, stale check, not-ready verdict). Hard blockers still apply.

Tell Meridian what's happened with a visa application. Records 'submitted' (the user filed it themselves, no Computer dispatch), 'approved' / 'rejected' (embassy decided), or 'withdrawn' (user pulled it post-submission). When called without an outcome, the tool elicits the status from the user via a structured prompt. The 'submitted' outcome bypasses readiness checks because the user has already filed the visa application; readiness is moot at that point. To submit via Meridian Computer instead (with full readiness validation), call applications_apply.

Parameters
  • visa_application_idrequired
    string | integer

    The visa application public_id ('vsa_*') or numeric DB id.

  • outcomeoptional
    string

    One of: 'submitted', 'withdrawn', 'approved', 'rejected'. When omitted, the tool elicits the value from the user.

  • notesoptional
    string

    Optional free-text notes about the outcome (e.g., embassy reason for rejection, date of submission).

Cancel a draft or ready visa application. Refuses post-submission (use applications_report_status with outcome='withdrawn') and refuses when a Computer task is running (cancel it via tasks/cancel first). Idempotent.

Parameters
  • visa_application_idrequired
    string | integer

    The visa application public_id ('vsa_*') or numeric DB id.

Score a specific visa application's readiness to submit. Runs the same eight deterministic checks as requirements_evaluate, but against the visa application's vault, applying_from_iso, destination_iso, and trip_details. Use this once a visa application exists. For general readiness against a route without an application, call requirements_evaluate instead. Returns an overall_score (0-100), per-check status, and a readiness flag. Pure read: no record is persisted.

Parameters
  • visa_application_idrequired
    string | integer

    The visa application public_id ('vsa_*') or numeric DB id. For task-scoped tokens, must match the task's linked visa application.

List documents attached to a visa application. Optional requirement_id filters to docs that satisfy a specific document requirement on this route.

Parameters
  • visa_application_idrequired
    string | integer

    Application public_id ('vsa_*') or numeric DB id.

  • requirement_idoptional
    string

    Optional. Filter to docs matching this requirement (req_*).

Attach a document to a visa application. Two modes: UPLOAD (supply file_base64 or file_url + document_type) or BIND EXISTING (supply document_id alone). Re-uploading the same document_type on the same visa application replaces the existing file on the same record (one passport per visa application).

Parameters
  • visa_application_idrequired
    string | integer

    Application public_id ('vsa_*') or numeric DB id.

  • document_idoptional
    string

    BIND mode: existing document public_id ('doc_*'). Mutually exclusive with file_base64 / file_url / document_type.

  • document_typeoptional
    string

    UPLOAD mode: document type.

  • file_base64optional
    string

    UPLOAD mode: base64-encoded file content. Supply this or file_url.

  • file_urloptional
    string

    UPLOAD mode: pre-signed URL the server fetches. Supply this or file_base64.

  • filenameoptional
    string

    UPLOAD mode: original filename.

  • content_typeoptional
    string

    UPLOAD mode: MIME type (image/jpeg, image/png, application/pdf).

  • requirement_idoptional
    string

    Optional. Claims a requirement (req_*) so coverage roll-ups mark the slot satisfied.

Remove a document from a visa application. Owner-only. Refuses once the visa application is submitted (the document trail is locked at submission for audit integrity).

Parameters
  • visa_application_idrequired
    string | integer

    Application public_id ('vsa_*') or numeric DB id.

  • document_idrequired
    string

    Document public_id ('doc_*') to delete.

Run Meridian Computer on a non-visa task tied to a visa application (custom portal, ancillary form). For visa form-fill, use applications_apply; for appointment booking, use appointments_book.

Parameters
  • visa_application_idrequired
    string | integer

    Application this task is tied to.

  • task_typerequired
    string

    Non-reserved task type. form_fill and appointment_book are rejected here.

  • portal_urloptional
    string

    URL the worker opens (https only).

  • verification_emailoptional
    string

    Email used for portal verification challenges.

Dispatch Meridian Computer to book a consulate or visa-center appointment slot on the user's behalf. Use when the user wants Meridian to secure an appointment. Requires an existing visa application (call applications_create first). Idempotent: returns the in-flight booking if one is already running. After dispatch, call appointments_get to check whether the slot is confirmed.

Parameters
  • visa_application_idrequired
    string | integer

    The visa application public_id ('vsa_*') or numeric DB id.

  • consulate_refoptional
    string

    Optional. The consulate or visa-center the appointment is for (e.g. 'VFS-Lagos-DE').

  • locationoptional
    string

    Optional. Human-readable location of the appointment.

  • slot_windowoptional
    object

    Optional preferred date window, e.g. {earliest: '2026-07-01', latest: '2026-07-31'}. The worker picks an available slot inside it.

  • verification_emailoptional
    string

    Optional email address the booking portal uses for verification challenges.

Read one appointment booking: status, consulate, slot time, and confirmation number once booked. Use after appointments_book to surface progress to the user.

Parameters
  • appointment_idrequired
    string | integer

    The appointment public_id ('apt_*') or numeric DB id.

Want full access?

Free tools work with no key. Applications, vault edits, and the Meridian Computer worker are in private beta. Drop your email below for early access.