mcp-flight-search
Integrates with SerpAPI Google Flights to search for flights between airports, supporting one-way and round-trip itineraries
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., "@mcp-flight-searchfind flights from JFK to LAX on 2024-12-15"
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.
MCP Flight Search
An MCP server that searches Google Flights through SerpApi, for Claude, Cursor and other MCP clients. One-way and round-trip searches by IATA airport code, with prices, durations, stops and times.
Requirements
Python 3.10 or later (or uv)
A SerpApi key in
SERP_API_KEY(serpapi.com has a free tier)
Related MCP server: Google-Flights-MCP-Server
Use it from an MCP client
Add it to your client's MCP configuration (Claude Desktop, Claude Code, Cursor, ...):
{
"mcpServers": {
"flight-search": {
"command": "uvx",
"args": ["mcp-flight-search"],
"env": { "SERP_API_KEY": "your-serpapi-key" }
}
}
}Or install it with pip install mcp-flight-search and use "command": "mcp-flight-search".
Run it yourself
export SERP_API_KEY="your-serpapi-key"
mcp-flight-search # stdio (default)
mcp-flight-search --connection_type http --port 3001 # Streamable HTTP at http://127.0.0.1:3001/mcpLOG_LEVEL=DEBUG shows more detail on stderr. The API key is never logged.
With Docker:
docker build -t mcp-flight-search .
docker run -i --rm -e SERP_API_KEY=your-serpapi-key mcp-flight-searchTools
Tool | What it does |
| Flights between two airports. |
| Checks the server is running and reports its version. |
Development
uv sync
uv run pytest
uv run ruff check .License
MIT
Available Tools
2 toolssearch_flights_toolSearch flightsARead-only
Search Google Flights for one-way or round-trip flights between two airports.
| Name | Required | Description | Default |
|---|---|---|---|
| origin | Yes | IATA airport code, such as JFK or LAX | |
| destination | Yes | IATA airport code, such as JFK or LAX | |
| return_date | No | Return date for a round trip, YYYY-MM-DD | |
| outbound_date | Yes | Departure date, YYYY-MM-DD |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile and external-service nature are covered. The description adds that it queries Google Flights and supports round trips, but says nothing about result volume, rate limits, caching, or failure modes for a live external search.
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?
A single front-loaded sentence with no filler, stating the action, provider, and trip types before any detail. Every clause earns its place for a tool of this simplicity.
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?
With an output schema present, return values need no explanation, and annotations cover safety and openness; the schema fully documents all four parameters. The only real gap is the absence of usage context, so the definition is nearly but not fully complete.
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 coverage is 100%, with each parameter fully documented (IATA codes with patterns, date formats, return_date defaulting to null). The description's 'one-way or round-trip' phrasing hints at how return_date is used but adds no format or syntax detail beyond the schema, so the baseline 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 names a specific verb ('Search'), a specific resource ('Google Flights'), and the supported trip shapes ('one-way or round-trip flights between two airports'). It is far more specific than a tautology, though it does not explicitly distinguish itself from any alternative since the only sibling (server_status) is unrelated.
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?
Usage is only implied: 'search flights' plus the required origin/destination/outbound_date schema makes the intent obvious, but the description never states when to use this tool, when not to, or any prerequisites. There is no competing sibling to route against, so the omission is low-impact.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server_statusServer statusARead-only
Check that the flight search server is running.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered and the description only needs to add context. It adds that this probes the flight search server specifically, but says nothing about what a failed check looks like or how results should be interpreted beyond the output schema.
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?
A single front-loaded sentence with no filler, perfectly sized for a no-argument probe. Every word 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?
With an output schema present, the description needn't explain return values, and a zero-param health check needs little more. The only mild gap is not indicating how to act on a negative result (retry, abort, report).
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 tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The empty schema plus the sentence leaves no ambiguity about invocation.
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?
States a specific verb ('Check') and a precise resource ('the flight search server is running'), which is a health/liveness probe rather than a search — clearly distinct in kind from search_flights_tool. It doesn't explicitly name the sibling, but the action and object are 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?
For a zero-parameter health check the intended usage is largely self-evident, so guidance is implied rather than stated. It never says when to call it (before a search? on error?) or that there are no alternatives, leaving the agent to infer context.
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.
2 tool updates
- First observed
search_flights_tool - First observed
server_status
TDQS
Scored across 2 tools
The two tools serve entirely distinct purposes: one performs a flight search, the other reports server health. There is no plausible way to confuse them, and the descriptions make the boundary explicit.
Both names are snake_case, but the convention is inconsistent: 'search_flights_tool' uses a redundant '_tool' suffix and a verb_verb_noun shape, while 'server_status' is a plain noun phrase. Readable, but the pattern isn't predictable.
Two tools is thin for a flight search server; the health-check tool arguably doesn't earn a slot as a first-class tool. It's a borderline-surface rather than an extreme mismatch.
Flight search is covered, but obvious adjacent operations are absent: airport/location lookup, date-range or fare-calendar search, multi-city itineraries, and filtering/sorting of results. An agent can do the core task but will hit dead ends on common follow-ups.
Maintenance
Related MCP Connectors
Search and compare flight offers through a cache-aware Streamable HTTP MCP server for AI agents.
Flight search MCP server providing search, pagination, and itinerary details for AI assistants.
Google Flights search data: fares, routes, stops, and price insights via a hosted MCP server.
Geo-based flight search MCP server. Find more flights between any two places on earth
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that connects to Amadeus API, enabling AI assistants to search flights, analyze prices, find best travel deals, and plan multi-city trips.4 npm6MIT
- AlicenseNot gradedqualityNot gradedmaintenanceThis MCP server allows an AI assistants to search for flight information online using Google Flights. It can find flights for specific dates or search through a range of dates to find all options or just the cheapest ones available.27-
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables flight searching, booking, and payment processing. It also provides access to resources like user profiles, pricing rules, and company travel policies.MIT
- FlicenseNot gradedqualityDmaintenanceAn interactive travel planning server that integrates flight searching, weather forecasting, and route calculation through external APIs like Amadeus and OpenWeather. It uses the Model Context Protocol to enable AI assistants to autonomously manage travel logistics and discover local services.-