Back to the catalog

VoyageHacks

Multilingual travel guides, gear picks and booking links for AI travel agents.

Open source Repository Open in the app JSON README (API)

About

Multilingual travel guides, gear picks and booking links for AI travel agents.

Details

Kind
MCP servers
Topic
Maps, weather & travel
Publisher
com.voyagehacks
Origin
official
Category
ferramentas
Transport
http
Version
2.1.0
Last push
2026-08-31T18:14:19Z
Repository state
ativo
Language
JavaScript
License
MIT
Added
2026-08-29 03:01:27
Updated
2026-08-29 18:00:29
Origin id
com.voyagehacks/travel

README

# VoyageHacks MCP Server

The official [Model Context Protocol](https://modelcontextprotocol.io) server for
[VoyageHacks.com](https://voyagehacks.com), a travel publisher with about 680
fact-checked guides in each of 11 languages, covering flights, airline reviews,
hotels, destinations, car rental, trains, airport transfers, eSIM, travel VPN,
travel credit cards and travel gear.

**Live endpoint:** `https://voyagehacks.com/mcp`
**Version:** 2.1.0
**Docs:** <https://voyagehacks.com/en/mcp-server/>

Stateless Streamable HTTP transport (JSON-RPC 2.0 over POST, single JSON
responses, no SSE, no sessions), no authentication. Any MCP client can connect
and start calling tools immediately. A `GET` returns 405 by design: the server
offers no SSE stream, which is what the Streamable HTTP specification asks for
in that case.

Listed on the [official MCP Registry](https://registry.modelcontextprotocol.io)
as `com.voyagehacks/travel`.

## Connect

**Claude Code**

```bash
claude mcp add --transport http voyagehacks https://voyagehacks.com/mcp
```

**Claude.ai / Claude Desktop:** Settings, Connectors, Add custom connector,
`https://voyagehacks.com/mcp`, authentication "No authentication".

**ChatGPT:** Settings, Connectors, add `https://voyagehacks.com/mcp`, no auth.

**Perplexity** (Pro, Max, Enterprise): Settings, Connectors, Custom connector,
Remote, `https://voyagehacks.com/mcp`, authentication "None".

**Gemini Enterprise:** create a custom MCP server data store with the HTTPS
endpoint and "No Authentication". The transport is StreamableHTTP, which is what
Gemini Enterprise requires.

**MCP Inspector**

```bash
npx @modelcontextprotocol/inspector
```

## Tools

All twelve are read-only, annotated `readOnlyHint: true` and
`destructiveHint: false`, and have no side effect outside their response. Each
declares an `outputSchema` and returns `structuredContent` alongside readable text.

| Tool | What it does |
| --- | --- |
| `search_articles` | Full-text search over the guides in one language, with an optional section filter |
| `get_article` | One page as Markdown, plus its title, language, section, publication date and last-updated date read from the page itself |
| `search_travel_gear` | Search the VoyageHacks travel gear catalog, about 320 products picked across roughly 50 published buying guides |
| `recommend_travel_gear` | Turn a trip description into a packing kit, one product per category, with optional structured hints |
| `get_flight_links` | Flight search links for a route and dates |
| `get_hotel_links` | Hotel search links for a city, dates, guests and rooms |
| `get_car_rental_links` | Car and scooter rental comparison links |
| `get_airport_transfer_links` | Airport taxi and pre-booked transfer links |
| `get_esim_links` | Travel eSIM store links for a destination |
| `get_travel_vpn_links` | Travel VPN links |
| `get_credit_card_links` | American Express links for a country, plus verified German fee figures |
| `get_booking_links` | Several categories of one trip in a single call, filtered by `include` |

Every vertical tool also returns up to 4 matching VoyageHacks guides in the
requested language, so agents can cite full articles alongside the links.

**Languages:** `en`, `de`, `fr`, `es`, `it`, `pl`, `cs`, `ja`, `nl`, `pt`, `zh`.
Every tool takes a `lang` parameter, defaulting to `en`. Each language is an
independently written version of the guide, not a machine translation.

## Profiles

| Profile | Endpoint | Tools |
| --- | --- | --- |
| full (default) | `https://voyagehacks.com/mcp` | 12 |
| research | `https://voyagehacks.com/mcp?profile=research` | 10 |
| guides | `https://voyagehacks.com/mcp?profile=guides` | 4 |

The research profile omits `get_travel_vpn_links` and `get_credit_card_links`,
whose links land on a subscription signup and a financial-product application.
It exists for app directories whose guidelines restrict linking to pages that
initiate a subscription or purchase.

The guides profile goes further and omits every booking tool, leaving
`search_articles`, `get_article`, `search_travel_gear` and
`recommend_travel_gear`. Its only outbound purchases are Amazon product pages for
physical travel gear, so it satisfies directories that allow commerce for physical
goods only. It also serves its own `initialize` instructions, which describe the
four tools it actually has rather than the full twelve.

Each profile is addressable two ways: `/mcp?profile=guides` and `/mcp/guides` are
the same handler. The path form exists because the OpenAI plugin submission portal
rejects a query string in its MCP Server URL field.

An unrecognized profile, in either form, falls back to the full tool set, so a typo
can never silently serve fewer tools than intended.

## What it does not do

The server returns published editorial content and search links. It has no live
fares, no live room rates, no availability check, no star ratings or review
counts, and it cannot make a booking or take a payment.

The travel gear catalog is VoyageHacks' own editorial selection, not a search of
all of Amazon. It carries **no prices, ratings, review counts or stock**: the
Amazon Product Advertising API is not enabled for this account, so any such value
would be invented. The tools never return those fields.

## Limits

About 90 requests per minute per IP, 256 KB per request body, 25 messages per
JSON-RPC batch, articles truncated at 60,000 characters. Over the rate limit the
server returns HTTP 429 with `Retry-After`. See [SECURITY.md](SECURITY.md).

## Markdown for agents

The whole site is agent-readable, not just this server:

- `get_article` returns any page as Markdown.
- Any page on voyagehacks.com returns Markdown directly when requested with an
  `Accept: text/markdown` header (edge middleware, browsers are unaffected).
- Discovery files:
  [`/.well-known/mcp/server-card.json`](https://voyagehacks.com/.well-known/mcp/server-card.json),
  [`/llms.txt`](https://voyagehacks.com/llms.txt),
  [`/.well-known/agent-skills/index.json`](https://voyagehacks.com/.well-known/agent-skills/index.json),
  [`/.well-known/api-catalog`](https://voyagehacks.com/.well-known/api-catalog),
  [`/auth.md`](https://voyagehacks.com/auth.md).

## Transparency

VoyageHacks is an affiliate-funded publisher. Some booking and shopping links
returned by these tools are affiliate links (Booking.com through CJ Affiliate,
Amazon Associates, Travelpayouts, American Express referral). VoyageHacks may
earn a commission from qualifying bookings or purchases at no additional cost to
the user.

Every commercial tool states this in its `description`, and every commercial
response repeats it in both its text content and `structuredContent.disclosure`,
so an assistant can disclose it to the end user. The word "affiliate" is kept out
of tool `name` and `title` values because agents route on those strings and it
measurably suppresses selection; it belongs in the description and the response,
which is where disclosure obligations actually attach.

Article content is free to read, with no paywall and no authentication.

## Self-hosting

This is a Cloudflare Pages Function (`functions/mcp.js`). To run your own instance:

1. Deploy the `functions/` directory with a Cloudflare Pages project.
2. The server reads its content live from the site it fronts: a Hugo build that
   emits `/<lang>/index.json` (search index) and `/<lang>/gear.json` (gear
   catalog). Point the `SITE` constant at your deployment.
3. Replace the affiliate constants near the top of `mcp.js` (Travelpayouts
   marker, CJ ids, Amazon tag, Amex links) with your own program ids.

This repository mirrors the production function. The only intentional difference
is the import on line 37: production imports `htmlToMarkdown` from the site's
`_middleware.js`, this mirror from its own `html-to-markdown.js`. If you fork it,
keep the affiliate constants in sync with your own site config.

## Privacy, terms and support

- Privacy policy: <https://voyagehacks.com/en/privacy/>
- Terms of use: <https://voyagehacks.com/en/terms/>
- Security policy: [SECURITY.md](SECURITY.md)
- Support and security reports: support@voyagehacks.com

## License

[MIT](LICENSE)

More