Amadeus MCP Server
Click on "Install 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., "@Amadeus MCP ServerFind flights from JFK to LAX on April 10"
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.
Amadeus MCP Server
A Model Context Protocol (MCP) server that provides access to Amadeus Travel API functionality, including flights, hotels, tours, and city information with automatic USD currency conversion.
Features
Flight Search: Search for flights with detailed information (prices in USD, airlines, duration, stops)
City Information: Get city details including coordinates and IATA codes
Tours & Activities: Discover activities and tours by location with USD pricing
Hotel Search: Find hotels with ratings and locations
Live Exchange Rates: Automatic currency conversion to USD for all prices
Related MCP server: Amadeus MCP Server
Prerequisites
Node.js 18 or higher
Amadeus API credentials (get them from Amadeus for Developers)
Installation
Install from npm
npm install -g @fiqcodes/amadeus-mcp-serverInstall from source
# Clone the repository
git clone https://github.com/fiqcodes/amadeus-mcp-server.git
cd amadeus-mcp-server
# Install dependencies
npm install
# Build the project
npm run build
# Link globally (optional)
npm linkConfiguration
1. Get Amadeus API Credentials
Go to Amadeus for Developers
Sign up or log in
Create a new app in the dashboard
Copy your API Key and API Secret
2. Configure Claude Desktop
Add the server to your Claude Desktop configuration file:
On macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
On Windows: %APPDATA%\Claude\claude_desktop_config.json
On Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"amadeus": {
"command": "amadeus-mcp-server",
"env": {
"AMADEUS_API_KEY": "your_api_key_here",
"AMADEUS_API_SECRET": "your_api_secret_here"
}
}
}
}Or if running from source:
{
"mcpServers": {
"amadeus": {
"command": "node",
"args": ["/absolute/path/to/amadeus-mcp-server/build/index.js"],
"env": {
"AMADEUS_API_KEY": "your_api_key_here",
"AMADEUS_API_SECRET": "your_api_secret_here"
}
}
}
}3. Restart Claude Desktop
Completely quit and reopen Claude Desktop for the changes to take effect.
Available Tools
1. get_flights
Search for flight offers between cities. All prices returned in USD.
Parameters:
origin(required): Origin airport IATA code (e.g., "JFK", "CGK")destination(required): Destination airport IATA code (e.g., "LAX", "DPS")departureDate(required): Departure date (YYYY-MM-DD)returnDate(optional): Return date for round trips (YYYY-MM-DD)adults(optional): Number of adults (default: 1)travelClass(optional): ECONOMY, PREMIUM_ECONOMY, BUSINESS, FIRSTmaxResults(optional): Max results to return (default: 5)
Example with Claude:
Find me flights from Jakarta (CGK) to Bali (DPS) on January 20, 20262. get_city
Get information about a city including name, country, IATA code, and geographic coordinates.
Parameters:
cityName(required): Name of the city
Example with Claude:
Get information about Tokyo3. get_tours_activities
Search for tours and activities by location. Prices automatically converted to USD.
Parameters:
latitude(required): Latitude coordinatelongitude(required): Longitude coordinateradius(optional): Search radius in km (default: 1)
Example with Claude:
Find activities in Paris at coordinates 48.8566, 2.35224. get_hotels
Search for hotels in a city using IATA code.
Parameters:
cityCode(required): City IATA code (e.g., "PAR", "NYC", "LON")checkInDate(optional): Check-in date (YYYY-MM-DD)checkOutDate(optional): Check-out date (YYYY-MM-DD)adults(optional): Number of guests (default: 1)radius(optional): Search radius (default: 5)radiusUnit(optional): KM or MILE (default: KM)ratings(optional): Filter by ratings (e.g., "3,4,5")priceRange(optional): Price range (e.g., "50-200")
Example with Claude:
Find hotels in Paris for March 15-20, 2026Usage with Claude
Once configured, you can ask Claude naturally:
"Find cheap flights from New York to London next month"
"Show me activities in Tokyo"
"What hotels are available in Paris for my trip?"
"Get me flight options from Jakarta to Singapore on January 25th"
Claude will automatically use the appropriate tools and present the results in a user-friendly format.
Development
Running in development mode
npm run devThis will watch for changes and rebuild automatically.
Testing the server
Test the API integration:
export AMADEUS_API_KEY="your_key"
export AMADEUS_API_SECRET="your_secret"
npm run build && node build/test-amadeus.jsUsing MCP Inspector
npx @modelcontextprotocol/inspector node build/index.jsCurrency Conversion
The server automatically fetches live exchange rates from exchangerate-api.com and caches them for 24 hours. All non-USD prices are converted and returned with both original and USD amounts:
{
"price": {
"amount": "199.0",
"currencyCode": "EUR",
"usdAmount": 218.90,
"originalAmount": 199.0,
"originalCurrency": "EUR"
}
}Project Structure
amadeus-mcp-server/
├── src/
│ ├── index.ts # Main server implementation
│ └── test-amadeus.ts # Test script
├── build/ # Compiled JavaScript (generated)
├── package.json
├── tsconfig.json
├── README.md
└── .gitignoreTroubleshooting
"Authentication failed"
Verify your API key and secret are correct
Check if the environment variables are properly set in Claude config
Ensure you're using valid Amadeus credentials (test or production)
"Tool not found" or tools not showing
Make sure the server is properly configured in
claude_desktop_config.jsonVerify the path is absolute (not relative)
Restart Claude Desktop completely (quit and reopen)
Check Claude logs: Help → View Logs
"Rate limit exceeded"
Amadeus test API has rate limits (free tier)
Wait a few minutes before retrying
Consider upgrading to production API for higher limits
Build errors
rm -rf node_modules package-lock.json build
npm install
npm run buildAPI Documentation
For more details about the Amadeus API:
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Fork the repository
Create your feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'Add some amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Note: This MCP server uses the Amadeus Test API by default. For production use, update the BASE_URL in the code to https://api.amadeus.com and use production credentials.
Available Tools
4 toolsget_cityA
Search for city information including name, country, region, IATA code, and geographic coordinates.
| Name | Required | Description | Default |
|---|---|---|---|
| cityName | Yes | Name of the city to search for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose safety and behavior. It states a read-only 'search' operation and lists the data included, implying a safe query with no side effects. However, it does not mention potential edge cases, rate limits, or whether partial matches are allowed, leaving some behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the action and expected output fields. No filler words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter search tool without an output schema, the description covers the search action and the expected data fields. However, it does not clarify whether the result is a single city or a list, and it omits error or not-found behavior. Given the low complexity, this is a minor gap, so it earns a 4.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for the single parameter cityName with a clear description. The tool description repeats that a city name is used for searching but adds no additional semantics about format, case sensitivity, or matching behavior, so it does not exceed the baseline schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Search' and names the resource 'city information', explicitly listing the fields (name, country, region, IATA code, geographic coordinates). This clearly distinguishes it from sibling tools like get_flights, which focus on flights.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The sibling names imply a context of travel-related queries, but the description itself does not state when city lookup is appropriate or mention alternatives. This is implied usage rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flightsA
Search for flight offers between two cities. Returns flight details including airlines, prices in USD, flight IDs, duration, stops, and travel class.
| Name | Required | Description | Default |
|---|---|---|---|
| adults | No | Number of adult passengers (default: 1) | |
| origin | Yes | Origin airport IATA code (e.g., 'JFK', 'LAX') | |
| maxResults | No | Maximum number of results to return (default: 5) | |
| returnDate | No | Optional return date in YYYY-MM-DD format for round trips | |
| destination | Yes | Destination airport IATA code (e.g., 'LHR', 'CDG') | |
| travelClass | No | Travel class: ECONOMY, PREMIUM_ECONOMY, BUSINESS, FIRST | |
| departureDate | Yes | Departure date in YYYY-MM-DD format |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions the search nature and return fields, but lacks details on limits, pagination, error handling, or explicit read-only confirmation. The term 'search' implies a read operation, but more context would be valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the purpose, the second lists the return fields. It is front-loaded, concise, and contains no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with no output schema and no annotations, the description is adequate but minimal. It lists what will be returned but does not address edge cases, usage constraints, or behavior beyond the basic search, leaving some gaps for a 7-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all 7 parameters with 100% description coverage. The description adds no parameter-specific meaning beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search for flight offers between two cities' with a specific verb and resource, and differentiates from sibling tools (city, tours, hotels). It also lists the return fields, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (flight search) but does not explicitly mention alternatives or exclusions. Sibling tool names make the different use cases obvious, so it earns a 4 for clear context without explicit exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_hotelsA
Search for hotels in a city using the city's IATA code. Returns hotel information including names, ratings, and locations.
| Name | Required | Description | Default |
|---|---|---|---|
| adults | No | Number of adult guests (default: 1) | |
| radius | No | Search radius (default: 5) | |
| ratings | No | Filter by ratings (e.g., '3,4,5') | |
| cityCode | Yes | City IATA code (e.g., 'PAR' for Paris, 'NYC' for New York) | |
| priceRange | No | Price range filter (e.g., '50-200') | |
| radiusUnit | No | Unit for radius: KM or MILE (default: KM) | |
| checkInDate | No | Check-in date in YYYY-MM-DD format | |
| checkOutDate | No | Check-out date in YYYY-MM-DD format |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It states it returns hotel information but does not disclose any limitations, error handling, authentication needs, or boundary behaviors like filtering by radius. It is not misleading, but it lacks depth beyond the obvious read-only search nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that are direct and front-loaded with the core action and key input. No filler or redundancy, earning full credit.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the purpose and gives a partial output summary (names, ratings, locations). With 8 parameters, it does not explain how filters interact, but the schema covers them fully. Since there is no output schema, the description's brief return-value note is helpful, though a bit thin for a tool with many optional filters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds no new parameter-level semantics beyond restating the cityCode usage (already in the schema). Baseline 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function ('Search for hotels in a city using the city's IATA code') and specifies the output ('names, ratings, and locations'). It differentiates from sibling tools like get_flights and get_tours_activities by focusing on hotels, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for hotel searches in a city, which gives clear context for when to use it. However, it does not explicitly exclude alternatives or mention conditions like 'use this for hotels, not flights,' so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tours_activitiesA
Search for tours and activities in a specific location using latitude and longitude coordinates. Prices are converted to USD.
| Name | Required | Description | Default |
|---|---|---|---|
| radius | No | Search radius in kilometers (default: 1) | |
| latitude | Yes | Latitude of the location | |
| longitude | Yes | Longitude of the location |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full disclosure burden. It only discloses that 'Prices are converted to USD,' which is a minor behavioral detail. It does not mention how results are sorted, pagination, return format, or any potential side effects. This is insufficient for a fully transparent description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, with the main purpose front-loaded and a single extra detail (USD conversion) appended. No unnecessary words or repetition; every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with no output schema and no annotations, the description covers the core action and a notable side-effect (USD conversion), but omits expected behaviors like return type or result list characteristics. It is adequate for simple usage but has gaps that an agent might need to probe.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (radius, latitude, longitude). The description adds no new parameter-specific information beyond what is in the schema; it only restates that coordinates are used. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Search for' with a clear resource ('tours and activities') and a precise location scoping ('using latitude and longitude coordinates'). It clearly distinguishes from siblings like get_flights and get_hotels by focusing on tour/activity content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when searching for tours/activities at a coordinate) but does not explicitly state when not to use it or mention alternatives. No direct exclusions or contrast with sibling tools, so usage guidance is merely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
v1.0.0- First observed
get_city - First observed
get_flights - First observed
get_hotels - First observed
get_tours_activities
TDQS
Each tool targets a distinct travel domain: flights, city info, tours/activities, and hotels. There is no overlap in their intended purposes.
All tool names follow the consistent get_<noun> pattern, making the interface predictable and easy to navigate.
With 4 tools, the set is well-scoped for a travel search server. Each tool serves a clear and essential function without redundancy or bloat.
The tools cover the main search needs for travel (flights, hotels, activities, and city info). However, they are all read-only and lack booking or management capabilities, which would be a natural next step for a full travel service.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Give AI assistants access to real-time data. Search the web, compare flights, find hotels, and more.
Search award flights and cash fares, optimize points, and predict fares inside ChatGPT and Claude.
Your personal AI travel concierge — flights, hotels, 116M+ POIs, visas, weather & more
Personal AI travel agent. Points optimization, live flight/hotel/award search, trip planning.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables comprehensive travel planning by integrating Google Travel Services and Amadeus GDS for dual flight and hotel searches, plus event discovery, weather forecasting, currency conversion, and location services. Combines consumer-friendly search with professional travel industry data for optimal trip planning.6MIT
- AlicenseNot gradedqualityDmaintenanceEnables flight search capabilities through the Amadeus Flight Offers Search API, allowing users to search for flights between locations with specified dates using natural language queries.1MIT
- AlicenseNot gradedqualityDmaintenanceProvides access to 50+ Amadeus Travel APIs for AI assistants to search and book flights, hotels, activities, and ground transfers, along with travel analytics, price predictions, and comprehensive travel reference data.23MIT
- AlicenseNot gradedqualityCmaintenanceIntegrates with Amadeus Flight Offers Search API to provide flight search capabilities through natural language interfaces, enabling users to search for flight options between two locations with specific dates.58MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/fiqcodes/amadeus-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server