Content
# scanner-fly
A single-file Rust binary that compares six flight websites at once, providing search results, deals, and direct links. The same binary can be used as a CLI tool or as an MCP stdio server.
## Tool List
## Compare Websites
| Website | CLI Provided Information |
| --- | --- |
| [LuckyGlide](https://luckyglide.vercel.app) | Real-time lowest prices for nearby dates; conditionally book through MyRealTrip; LuckyGlide homepage as a reference link |
| [CatchFrog](https://catchfrog.ai) | Deals with significant price drops; deep links with filled-in routes, dates, and accommodation days |
| [Google Flights](https://www.google.com/travel/flights) | Real-time search prices and links |
| [Naver Flights](https://flight.naver.com) | Comparison links with filled-in search conditions |
| [Skyscanner](https://www.skyscanner.co.kr) | Comparison links with filled-in search conditions |
| [Skiplagged](https://skiplagged.com) | Comparison links with filled-in search conditions |
## Screenshots
The following two screenshots are real captures of the release binary running, not illustrations or composites.


## Build
Requires Rust 1.85 or higher stable toolchain.
```bash
cargo build --release
```
The generated single-file binary is located at:
```text
target/release/scanner-fly
```
The following example assumes `scanner-fly` is in your `PATH`. If running directly, replace `scanner-fly` with `./target/release/scanner-fly`.
```bash
cargo install --path .
scanner-fly --help
```
The project is distributed under the MIT license, with statically linked native TLS code and vendored dependencies' licenses included in `THIRD_PARTY_NOTICES.md` and `licenses/`.
## CLI Usage
All five CLI commands support `--json`. `--open` is available for `search`, `deals`, `links`, and `multi-city`, but not `compare-fares`. `search --open` and `links --open` open seven URLs: six comparison websites and a MyRealTrip booking link with filled-in conditions.
### Flight Search
```bash
scanner-fly search \
--from ICN \
--to NRT \
--depart 2026-09-15 \
--return 2026-09-19 \
--adults 1
```
`search` aggregates data from MyRealTrip, Google Flights, and six comparison websites, along with a MyRealTrip booking link.
### Multi-City Flights
```bash
scanner-fly multi-city \
--leg YVR,YLW,2026-09-10 \
--leg YLW,SFO,2026-09-12 \
--leg SFO,JFK,2026-09-15 \
--adults 1 \
--json
```
`--leg` can be repeated, with the format `ORIGIN,DESTINATION,YYYY-MM-DD`. At least two legs are required.
### Deals
```bash
scanner-fly deals \
--from ICN \
--region Asia \
--trip-days 4 \
--days 30 \
--top 20
```
`--from` defaults to `ICN`, `--days` defaults to 30, and `--top` defaults to 20.
### Direct Links
```bash
scanner-fly links \
--from ICN \
--to NRT \
--depart 2026-09-15 \
--return 2026-09-19 \
--adults 1
```
### JSON Output
Adding `--json` to `search`, `deals`, or `links` outputs structured JSON.
```bash
scanner-fly search \
--from ICN \
--to NRT \
--depart 2026-09-15 \
--return 2026-09-19 \
--json
scanner-fly deals --from ICN --top 5 --json
scanner-fly links \
--from ICN \
--to NRT \
--depart 2026-09-15 \
--return 2026-09-19 \
--json
```
## MCP Server
The `mcp` command runs the same binary as an MCP stdio server.
```bash
scanner-fly mcp
```
The MCP client needs to start the server process itself.
### Claude Code
```bash
claude mcp add \
--transport stdio \
--scope user \
scanner-fly \
-- /absolute/path/to/scanner-fly mcp
```
### Codex
```bash
codex mcp add scanner-fly -- /absolute/path/to/scanner-fly mcp
codex mcp get scanner-fly
```
### Senpi
Create a `.senpi/mcp.json` file in the project root.
```json
{
"mcpServers": {
"scanner-fly": {
"type": "stdio",
"command": "/absolute/path/to/scanner-fly",
"args": ["mcp"]
}
}
}
```
### OMP
Create a `.omp/mcp.json` file in the project root.
```json
{
"mcpServers": {
"scanner-fly": {
"type": "stdio",
"command": "/absolute/path/to/scanner-fly",
"args": ["mcp"]
}
}
}
```
## Limitations
* Prices are snapshots and may change.
* Some websites may return `403` or `429` errors.
* The binary does not use a browser or any sidecar processes.
## compare-fares: Single-Leg USD Snapshots
`compare-fares` scans Google Flights and Skiplagged for single-leg Economy USD prices.
```bash
scanner-fly compare-fares --from YLW --to SFO --start 2026-09-12 --days 7 --adults 1 --currency USD --json
```
Results include a `delta_minor` value, which is the difference between Google Flights and Skiplagged prices.
### Status Codes
| Status | Meaning |
| --- | --- |
| `available` | Exact USD supplier snapshot accepted. |
| `eligible` | Two eligible observations have the same identity and are within a 5-minute interval. |
| `skiplagged_cheaper_case` | A cheaper Skiplagged price was found through a forced rebooking. |
| `no_eligible_cheaper_case_found` | No cheaper Skiplagged price found. |
| `scan_inconclusive` | The scan was inconclusive due to errors or rate limiting. |
## Native Build Requirements
The project uses a custom `reqwest` client and a Chrome136 simulation `wreq` client.
```bash
sudo apt-get install -y build-essential cmake perl pkg-config libclang-dev binutils
```
The binary is a single executable file and does not require a browser or any sidecar processes.