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/mcpA few lines of config and your AI is talking to Meridian. Pick your client.
$ claude mcp add --transport http meridian https://usemeridian.app/mcp$ gemini mcp add --transport http meridian https://usemeridian.app/mcp// ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"meridian": { "url": "https://usemeridian.app/mcp" }
}
}// Settings → MCP → Add server (or .cursor/mcp.json)
{
"mcpServers": {
"meridian": { "url": "https://usemeridian.app/mcp" }
}
}Settings → Custom connectors → Add Name meridian URL https://usemeridian.app/mcp Transport Streamable HTTP
Settings → Connectors → Add custom connector Name meridian URL https://usemeridian.app/mcp Transport Streamable HTTP Auth OAuth (or None for read-only)
Transport Streamable HTTP URL https://usemeridian.app/mcp Auth Optional bearer token (get one at /integrations)
The skill bundles the readiness loop so your assistant knows when and how to call these tools. Works in Claude Code, Claude.ai web, Cursor, Codex CLI, and Goose.
Five commands from your terminal. meridian login + meridian check NG-GB hit the same tools you'd wire into an AI client.
Stripe-shaped reference for auth, versioning, pagination, and the Requirements API contract.
17 tools. Expand any row to see what it does and what it accepts.
A few terms you'll see
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.
passport_isorequiredISO-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_isorequiredISO-3166 alpha-2 code of the destination country (e.g., 'TH' for Thailand, 'DE' for Germany, 'US' for United States). Case-insensitive.
residence_isooptionalOptional 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.
purposeoptionalOptional 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.
passport_isorequiredISO-3166 alpha-2 passport country.
destination_isorequiredISO-3166 alpha-2 destination country.
residence_isooptionalOptional ISO-3166 alpha-2 residence country (where the traveler lives long-term). Defaults to passport_iso when omitted.
purposerequiredTravel purpose (e.g. tourism, business).
sentimentrequiredThumbs up = positive; thumbs down = negative. For route requests (kind='request'), use 'negative'.
kindrequired'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).
bodyoptionalOptional 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.
passportoptionalOptional ISO-3166 alpha-2 passport country. Falls back to the user's vault passport when authenticated; elicited from the user when missing and unauthenticated.
destinationoptionalOptional 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.
purposeoptionalOptional 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.
visa_application_idrequiredApplication 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.
include_archivedoptionalInclude cancelled/withdrawn applications.
limitoptionalMax 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).
destination_isorequiredDestination country (ISO-3166 alpha-2).
visa_typerequiredVisa category (e.g. 'tourist', 'business').
trip_detailsoptionalOptional 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'.
visa_application_idrequiredApplication public_id ('vsa_*') or numeric DB id.
sectionrequiredSection key. Use applications_get to discover the data shape.
dataoptionalFull section write. Shape depends on the section.
accept_suggestionoptionalApply a stashed extraction suggestion to a single field. Provide {field, doc_id} matching an entry from vault.extraction_suggestions[section].
dismiss_suggestionoptionalClear 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.
visa_application_idrequiredThe visa application public_id ('vsa_*') or numeric DB id. For task-scoped tokens, must match the task's linked application.
portal_urloptionalOptional: the consulate application portal URL. Auto-resolved from the route when omitted. Must be https://.
verification_emailoptionalOptional 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_blockersoptionalWhen 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.
visa_application_idrequiredThe visa application public_id ('vsa_*') or numeric DB id.
outcomeoptionalOne of: 'submitted', 'withdrawn', 'approved', 'rejected'. When omitted, the tool elicits the value from the user.
notesoptionalOptional 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.
visa_application_idrequiredThe 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.
visa_application_idrequiredThe 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.
visa_application_idrequiredApplication public_id ('vsa_*') or numeric DB id.
requirement_idoptionalOptional. 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).
visa_application_idrequiredApplication public_id ('vsa_*') or numeric DB id.
document_idoptionalBIND mode: existing document public_id ('doc_*'). Mutually exclusive with file_base64 / file_url / document_type.
document_typeoptionalUPLOAD mode: document type.
file_base64optionalUPLOAD mode: base64-encoded file content. Supply this or file_url.
file_urloptionalUPLOAD mode: pre-signed URL the server fetches. Supply this or file_base64.
filenameoptionalUPLOAD mode: original filename.
content_typeoptionalUPLOAD mode: MIME type (image/jpeg, image/png, application/pdf).
requirement_idoptionalOptional. 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).
visa_application_idrequiredApplication public_id ('vsa_*') or numeric DB id.
document_idrequiredDocument 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.
visa_application_idrequiredApplication this task is tied to.
task_typerequiredNon-reserved task type. form_fill and appointment_book are rejected here.
portal_urloptionalURL the worker opens (https only).
verification_emailoptionalEmail 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.
visa_application_idrequiredThe visa application public_id ('vsa_*') or numeric DB id.
consulate_refoptionalOptional. The consulate or visa-center the appointment is for (e.g. 'VFS-Lagos-DE').
locationoptionalOptional. Human-readable location of the appointment.
slot_windowoptionalOptional preferred date window, e.g. {earliest: '2026-07-01', latest: '2026-07-31'}. The worker picks an available slot inside it.
verification_emailoptionalOptional 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.
appointment_idrequiredThe appointment public_id ('apt_*') or numeric DB id.
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.