Context7
Up-to-date docs for AI agents
Descripción del creador (original en inglés)
Flexible multi-leg, multi-airport flight search - cheapest valid combination across an itinerary.
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
TRAVELPAYOUTS_TOKEN, SERPAPI_KEY, RIHLA_PROFILELos valores marcados como secretos son llaves de tu cuenta. Nunca los compartas ni los pegues en un chat.
Necesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"rihla": {
"command": "uvx",
"args": [
"rihla-mcp"
],
"env": {
"TRAVELPAYOUTS_TOKEN": "your-value",
"SERPAPI_KEY": "your-value",
"RIHLA_PROFILE": "your-value"
}
}
}
}Ejecuta esto en tu terminal
claude mcp add rihla --env TRAVELPAYOUTS_TOKEN=your-value --env SERPAPI_KEY=your-value --env RIHLA_PROFILE=your-value -- uvx rihla-mcpCompleta los valores vacíos antes de ejecutarlo.
Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"rihla": {
"command": "uvx",
"args": [
"rihla-mcp"
],
"env": {
"TRAVELPAYOUTS_TOKEN": "your-value",
"SERPAPI_KEY": "your-value",
"RIHLA_PROFILE": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"rihla": {
"type": "stdio",
"command": "uvx",
"args": [
"rihla-mcp"
],
"env": {
"TRAVELPAYOUTS_TOKEN": "your-value",
"SERPAPI_KEY": "your-value",
"RIHLA_PROFILE": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
RIHLA_PROFILE envEsta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub leojg, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
Debes completar: TRAVELPAYOUTS_TOKEN, SERPAPI_KEY
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (0.1.0) llegó al registro hace 4 meses.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Python (uv) en tu computadora.
En la misma categoría: Context7, Codebase Memory, Exa
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
Up-to-date docs for AI agents
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
Rihla (رحلة), *"the journey."* Named for Ibn Battuta's 14th-century travelogue —
the record of history's farthest-traveling explorer, who left Tangier for Mecca and
kept going for 29 years and 75,000 miles.
Flexible multi-leg, multi-airport flight search that finds the cheapest route across an entire itinerary — available as a CLI and as an MCP server for AI agents.
Consumer flight sites price one leg at a time. Rihla treats the whole trip as a single optimization problem:
*"Leave Montevideo — or Buenos Aires, it's a ferry ride away — around September 15
for Europe. Stay 20–30 days, then Japan for 15, then home. What's the cheapest
combination?"*
That query has three legs, flexible airports on both ends of each, a flexible departure window, and stay-duration constraints linking the legs. Rihla prices each leg's date×airport grid once, then finds the cheapest valid combinations in pure local compute — so even a 3–4 leg flexible query costs only a handful of API calls.
1. 1,297 USD (44 days door-to-door)
MVD -> AMS 2026-09-08 $ 383 [mock, cached] AA AA127 FRA -> NRT 2026-10-07 $ 481 [mock, cached] KL KL411 HND -> EZE 2026-10-22 $ 433 [mock, cached] AZ AZ933
Note the airport substitution at work: it enters Europe through Amsterdam, leaves from Frankfurt, and flies home into Buenos Aires — each leg independently picks the cheapest airport pair from its sets.
Requires Python ≥ 3.10.
pip install rihla # CLI
pip install "rihla[mcp]" # CLI + MCP server
Runs offline out of the box (no keys needed — a deterministic mock data source):
RIHLA_PROFILE=mock rihla # the canonical demo trip above
rihla examples/queries/canonical.json # same trip, from a query file rihla -i # build a query interactively
For live prices, copy .env.example to .env and add at least a Travelpayouts token (free). See Data sources.
A query is a small JSON file: your origin airports, the ordered stops, a departure window for the first leg, and how long to stay at each stop. Downstream date windows are derived — you never hand-compute "if I leave Sep 15 and stay 20–30 days, when do I fly to Tokyo?"
{
"origins": ["MVD", "EZE", "AEP"], "stops": ["EUROPE", ["NRT", "HND"], "MVD_AREA"], "earliest": "2026-09-08", "latest": "2026-09-22", "stays": [[20, 30], [15, 15]], "date_step": 3, "top": 5 }
EUROPE (MAD, BCN, LIS, CDG, FCO, AMS, FRA), TOKYO (NRT, HND), MVD_AREA (MVD, EZE, AEP). Make the last stop your origin set to fly home.[min, max] nights at each intermediate stop (len(stays) == len(stops) - 1).USD).rihla -i walks you through these questions and prints the resulting JSON to save for reuse. Add --links to any run to show booking URLs.
Rihla is honest about data quality rather than pretending everything is bookable:
cached when the price is indicative (Travelpayouts data is aggregated search history, not a live fare) versus a real, bookable fare (SerpApi / Google Flights).Ranking is price-only in v0.1. Open-jaw within a region is allowed by default (enter Europe at one city, leave from another); the cost of repositioning inside the region is not modeled.
| Source | Role | Cost | Notes |
|---|---|---|---|
| Travelpayouts / Aviasales | Primary | Free | Cached, redistribution-licensed. A month of prices per call, so the call budget stays tiny. Prices indicative; coverage follows route popularity. |
| SerpApi (Google Flights) | Fill | 250 free searches/mo (BYO key) | Real bookable fares; fills routes Travelpayouts misses. Only spent on uncovered routes. |
| Mock | Offline | — | Deterministic fake prices for development and demos. |
Configure via .env (see .env.example) or environment variables: TRAVELPAYOUTS_TOKEN, SERPAPI_KEY, and RIHLA_PROFILE:
local (default) — every source whose key is set, including SerpApi.hosted — redistribution-licensed sources only (SerpApi disabled: it scrapes Google, so do not serve it from a public hosted instance).mock — force the offline fetcher, no network.With no keys set, Rihla falls back to the mock source and says so.
Rihla ships an MCP server (stdio) so agents like Claude can run trip searches:
pip install "rihla[mcp]"
claude mcp add rihla -- rihla-mcp # Claude Code
or in any MCP client config:
{
"mcpServers": { "rihla": { "command": "rihla-mcp", "env": { "TRAVELPAYOUTS_TOKEN": "your-token", "SERPAPI_KEY": "your-key" } } } }
(The server also loads a .env from its working directory, so env is optional if you run it from a checkout.)
It exposes two read-only tools with an enforced etiquette:
mcp-name: io.github.leojg/rihla
Leg prices are independent — the MVD→Europe fare doesn't depend on the Tokyo dates. So Rihla fetches each leg's date×airport grid once, then enumerates valid date combinations (respecting the stay constraints) entirely in memory. The combinatorial explosion lives in local compute, not in API calls.
core.py data model + the pure optimizer (no I/O)
fetchers/ PriceFetcher protocol: Mock / Travelpayouts / SerpApi + merge places.py airport sets / regions api.py search_trip: serializable query in, result dict out cli.py thin CLI over search_trip mcp_server.py thin MCP wrapper over the same seam
Adding a data source (Duffel, Kiwi, …) is one more class implementing a one-method protocol: quote(origin, dest, day) -> Quote.
Scope (v0.1): flight search only — no lodging, no booking or payments, single adult, one cabin. Search returns booking links, never handles the transaction.
git clone https://github.com/leojg/rihla && cd rihla
pip install -e ".[dev,mcp]" pytest # offline, no keys needed ruff check .
Licensed under the Apache License 2.0 — see LICENSE.