Travel Agent MCP Server
This server provides read-only lookup tools for visa and immigration information by country.
Get Visa Information (
GET_VISA_INFO_BY_COUNTRY): Retrieve visa requirements, types, fees, and FAQs for a specific country using its country code. Optionally accepts a currency code to return fee information in a preferred currency.Get Immigration Information (
GET_IMMIGRATION_INFO_BY_COUNTRY): Retrieve immigration service details and requirements for a specific country using its country code.
Used for configuration management to store API keys and base URLs securely as environment variables
Alternative package manager for installing dependencies and running scripts for the MCP server
Recommended package manager for installing dependencies and running scripts for the MCP server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Travel Agent MCP Server get visa info for Canada"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TravelAgentMCP šāļø
A monorepo of MCP (Model Context Protocol) servers for the TVA OTA platform: flight and hotel search & booking, visa and immigration requirements & booking tracking, and user account management ā built for AI travel agents.
Architecture
TravelAgentMCP/
āāā mcps/
ā āāā shared/ @travelagent-mcp/shared ā HTTP client, config, guardrails, tool helper (not a server)
ā āāā flight-mcp/ tva-flight-mcp ā search, pricing, seatmaps, booking lifecycle
ā āāā hotel-mcp/ tva-hotel-mcp ā search, availability, booking lifecycle
ā āāā visa-mcp/ tva-visa-mcp ā country requirements + booking tracking
ā āāā immigration-mcp/ tva-immigration-mcp ā service info + booking tracking
ā āāā account-mcp/ tva-account-mcp ā auth, profile, promo codes, notifications
āāā src/index.ts travelagent-mcp ā gateway that mounts all five servers' tools in one processEach mcps/* package is an independently runnable stdio MCP server with its own bin. Run the ones you need
(e.g. only tva-flight-mcp + tva-hotel-mcp for a booking widget, or only tva-visa-mcp + tva-immigration-mcp
for an advisory bot), or run the root gateway (travelagent-mcp) to get everything in one process ā this is
what the published npm package has always been, kept for backward compatibility.
One upstream API, two auth modes:
TVA OTA backend (
TVA_BASE_URL) ā flights, hotels, bookings, account, and the "client" side of visa/immigration booking tracking (updates, notifications, transactions). Most booking-management endpoints require a bearer token; guest checkout flows (book, cancel-by-UUID, verify, resend-ticket) do not.Visa/Immigration content (same
TVA_BASE_URL, authenticated viaCONTENT_API_KEYinstead of a bearer token) ā country requirements, visa types, fees and FAQs, used only byGET_VISA_INFO_BY_COUNTRY/GET_IMMIGRATION_INFO_BY_COUNTRY.
Related MCP server: orizn-visa-mcp
Guardrails
Least privilege: only user-facing endpoints are exposed. Admin/ops endpoints (booking management, refunds, revenue stats) are deliberately not wrapped as tools ā they're not appropriate for a conversational agent.
Explicit confirmation: every tool that moves money or is irreversible (
BOOK_FLIGHT,BOOK_HOTEL,CANCEL_FLIGHT_BOOKING,CANCEL_HOTEL_BOOKING,CONFIRM_FLIGHT_PAYMENT,CONFIRM_HOTEL_PAYMENT,SELECT_FLIGHT_SEAT,CHANGE_PASSWORD,CLOSE_ACCOUNT) requiresconfirm: true, which the calling agent should only set after reading the specific details back to the user.No secrets in the LLM's context:
TVA_ACCESS_TOKENis never a tool parameter ā it's read from the process environment, injected per user session by whichever agent spawns these servers.LOGIN_USER/SOCIAL_AUTH_LOGINreturn the token wrapped in a__sessionenvelope for the spawning agent to intercept and store out-of-band; the model only ever sees a plain confirmation message. Seemcps/account-mcp/src/lib/session.tsfor the contract.No raw offer replay: Amadeus flight offers are large opaque JSON blobs.
SEARCH_FLIGHTScaches each offer server-side (SQLite, seemcps/flight-mcp/src/lib/offerCache.ts) and hands the model a shortofferRefinstead ā the model never reconstructs offer JSON by hand, which would risk token bloat or silent price/fare corruption.Redaction: passwords, tokens, OTPs and card numbers are masked before anything is logged (see
mcps/shared/src/guardrails.ts).Known risk ā hotel payments:
BOOK_HOTELcurrently takes raw card details directly (the TVA hotel API has no tokenized checkout step yet). This must only be called by a client that collected card details through a secure, PCI-compliant surface ā never by prompting a user to type a card number into chat. See the tool's description for details.Rate limiting: each tool call is throttled per-process (defense against a runaway function-calling loop). This is not a substitute for persistent, cross-turn throttling ā track abuse persistently at the session layer if you need real protection.
Setup
pnpm install
cp .env.example .env # fill in TVA_BASE_URL and content-API keys
pnpm build # builds mcps/shared first, then every domain server, then the gatewayRun the gateway (all tools in one process):
pnpm startOr run a single domain server directly:
node mcps/flight-mcp/dist/index.jsTool reference
Flight (tva-flight-mcp)
SEARCH_FLIGHTS, GET_POPULAR_FLIGHT_ROUTES, GET_FLIGHT_PRICE_ANALYSIS, GET_MOST_TRAVELED_DESTINATIONS,
GET_MOST_BOOKED_DESTINATIONS, GET_BUSIEST_TRAVEL_PERIOD, GET_FLIGHT_SEATMAP_BY_OFFER,
GET_FLIGHT_SEATMAP_BY_ORDER, GET_FLIGHT_FARE_UPSELL, PREDICT_FLIGHT_CHOICE, CONFIRM_FLIGHT_PRICE,
BOOK_FLIGHT, LIST_MY_FLIGHT_BOOKINGS, GET_FLIGHT_BOOKING, VERIFY_FLIGHT_BOOKING, CANCEL_FLIGHT_BOOKING,
GET_FLIGHT_SEAT_PRICE, SELECT_FLIGHT_SEAT, RESEND_FLIGHT_TICKET, GET_FLIGHT_TICKET_DOWNLOAD_LINK,
CONFIRM_FLIGHT_PAYMENT
Hotel (tva-hotel-mcp)
SEARCH_HOTELS, SEARCH_HOTEL_CITIES, CHECK_HOTEL_AVAILABILITY, BOOK_HOTEL, LIST_MY_HOTEL_BOOKINGS,
GET_HOTEL_BOOKING, CONFIRM_HOTEL_PAYMENT, CANCEL_HOTEL_BOOKING
Visa (tva-visa-mcp)
GET_VISA_INFO_BY_COUNTRY, LIST_MY_VISA_BOOKINGS, GET_VISA_BOOKING, GET_VISA_BOOKING_BY_APPLICATION_UUID,
GET_VISA_UPDATES, GET_VISA_UPDATES_BY_BOOKING, GET_VISA_FOLLOWUP_QUESTIONS, ANSWER_VISA_FOLLOWUP,
GET_VISA_NOTIFICATIONS, MARK_VISA_NOTIFICATION_READ, GET_VISA_TRANSACTIONS, GET_VISA_TRANSACTION_DETAIL
Immigration (tva-immigration-mcp)
GET_IMMIGRATION_INFO_BY_COUNTRY, LIST_MY_IMMIGRATION_BOOKINGS, GET_IMMIGRATION_BOOKING,
GET_IMMIGRATION_UPDATES, GET_IMMIGRATION_UPDATES_BY_BOOKING, GET_IMMIGRATION_NOTIFICATIONS,
MARK_IMMIGRATION_NOTIFICATION_READ, GET_IMMIGRATION_TRANSACTIONS, GET_IMMIGRATION_TRANSACTION_DETAIL
Account (tva-account-mcp)
REGISTER_USER, LOGIN_USER, SOCIAL_AUTH_LOGIN, FORGOT_PASSWORD, RESEND_OTP, VERIFY_OTP, LOGOUT_USER,
GET_CURRENT_USER, GET_USER_PROFILE, EDIT_USER_PROFILE, CHANGE_PASSWORD, CHECK_DISCOUNT_PROMO,
GET_USER_NOTIFICATIONS, CLOSE_ACCOUNT
Consumed by
MegaMind's NomadSage travel agent spawns these servers (via stdio,
one per domain) alongside its knowledge-base search and social-mcp reply tools ā see
travel-agent/src/lib/tva-client.ts and travel-agent/src/lib/tva-session.ts in that repo.
Available Tools
2 toolsGET_IMMIGRATION_INFO_BY_COUNTRYC
Get immigration information for a specific country.
Inputs: countryCode (required).
GET_VISA_INFO_BY_COUNTRYC
Get visa information for a specific country.
Inputs: countryCode (required), currencyCode.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogā¦
TDQS
Scored across 2 tools
The two tools have unclear boundaries and significant overlap. 'Immigration information' and 'visa information' are closely related concepts in travel, and their descriptions do not clearly differentiate what each tool provides, leading to potential confusion for an agent trying to select the right one.
The tool names follow a consistent pattern of uppercase snake_case with a clear 'GET_<domain>_BY_COUNTRY' structure. Both tools use the same verb ('GET') and format, making them predictable and easy to parse.
With only 2 tools, the server feels thin for a 'Travel Agent' domain, which typically involves broader functionality like booking flights, hotels, or checking travel advisories. The limited scope suggests an incomplete or overly narrow implementation.
The server is severely incomplete for a travel agent purpose. It lacks core travel operations such as searching for flights, booking accommodations, checking weather, or providing general travel tips, leaving obvious gaps that will hinder agent workflows.
Maintenance
Related MCP Connectors
Visa requirements, fees, stay limits and extension rules for any passport and destination
Plan trips and track visa days per traveller across 39,601 entry rules
Your personal AI travel concierge ā flights, hotels, 116M+ POIs, visas, weather & more
Passport visa, entry & transit requirements for any country pair, with official government sources.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides tools to retrieve and compare detailed information about countries, including population, region, and currency data. It allows users to search for specific countries or list them by region.-
- AlicenseAqualityCmaintenanceCheck visa requirements for 39,585 passport-destination pairs in 15 languages. Returns visa type, required documents, application process, and travel tips from 136 official government sources. Free quick checks without API key.589 npm1MIT
- AlicenseAqualityCmaintenanceProvides immigration eligibility intelligence, enabling AI assistants to match user profiles to visas, compare pathways, and get country overviews using Transita's API.5339 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables querying passport visa rules for any nationality to destination pair.275 npmMIT