← All MCP servers
MCP server

Flyan

mcp:victorlane/flyan

Search Ryanair flights from your AI agent. Unofficial.

Verdict
Suspicious

Risky behavior the analysis could not rule out.

Analyzed Oct 26, 2026, 12:42 UTC at 8b8c7fc
2
findings
high
highest severity
2
threat classes
45
files scanned
271/271
checks satisfied
0
package advisories

Why this verdict

  • suspicious: finding mcp-server:.:flyan/transport.py:49:IMPERSONATE
  • suspicious: finding mcp-server:.:server.json:24:SUPPLY

Security findings 2

Supply chain

highContextual risklow confidence

server.json declares package version 0.4.2 but the launch arguments run `uvx --from Flyan[mcp]` without a version pin, so the latest PyPI release (the repo itself is already at 0.4.4) is fetched and executed instead of the declared version.

"value": "Flyan[mcp]"
conceal:remotevector:metadata
Counter-argument considered

The package entry declares version 0.4.2, but the runtime argument is `Flyan[mcp]` with no version, so uvx fetches the latest release and not the declared one. The package is the declared one on PyPI, so the risk is low, but the mismatch is real and no mitigation is present.

Impersonation

infoContextual risklow confidence

The transport rotates random real-browser User-Agent strings and warms cookies against ryanair.com so requests to Ryanair's unofficial API look like browser traffic; this is disclosed in the module docstring and matches the wrapper's purpose, but it is deceptive client identification.

_USER_AGENTS = (
vector:code
Counter-argument considered

The code does rotate real-browser User-Agents to disguise API traffic as browser traffic. The docstring discloses this, but disclosure does not make deceptive client identification acceptable, and no carve-out covers it. The behavior is in executed code but is low-impact: there is no credential theft, no exfiltration, and no instruction to the agent. Since the finding is only a contextual risk, I cannot cleanly refute it on harm, undeclared, or chain grounds.

Execution chain 20

What it calls, runs, installs, reads and writes, with the line that does it.

Environment variables 1

FLYAN_CURRENCY

Files read 2

<dynamic>
<dynamic>

GitHub repositories 2

googleapis/release-please
victorlane/flyan

Network calls 3

<dynamic>
<dynamic>
www.ryanair.com
flyan/transport.py:62 · url_literal

Packages 1

pypi:Flyan[mcp]
server.json:4 · launch:server.json

URLs 11

https://github.com/victorlane/Flyan
https://glama.ai/mcp/schemas/server.json
https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json
https://services-api.ryanair.com/farfnd/v4
https://services-api.ryanair.com/farfnd/v4
https://services-api.ryanair.com/timtbl/3/schedules
https://services-api.ryanair.com/timtbl/3/schedules
https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json
https://www.ryanair.com
https://www.ryanair.com/api/views/locate/3/aggregate/all/en
https://www.ryanair.com/api/views/locate/3/aggregate/all/en

Linked repositories 1

GitHub repositories it links to or installs from, and whether their names can be taken over.

googleapis/release-please
url · not tracked