Skip to main content
Glama
README.md
# travelMCP Directory MCP Server

A hosted MCP server that lets any AI assistant search the [OmniTravel travelMCP directory](https://omnitravel.ai): MCP servers, agent skills and APIs built for the travel industry.

Published in the official MCP Registry as `ai.omnitravel/travelmcp-directory`.

**Endpoint:** `https://omnitravel.ai/mcp` (Streamable HTTP, no authentication)

## Connect

Claude Code:

```bash
claude mcp add --transport http travelmcp https://omnitravel.ai/mcp
```

Claude Desktop, Cursor or any MCP client:

```json
{
  "mcpServers": {
    "travelmcp": {
      "type": "http",
      "url": "https://omnitravel.ai/mcp"
    }
  }
}
```

Then ask your assistant things like "which MCP servers handle hotel ID mapping?" or "show me the setup docs for the room matching API".

## Tools

| Tool | Arguments | Returns |
| --- | --- | --- |
| `search_travel_tools` | `query`, `category`, `type`, `limit` (all optional) | Matching listings with tagline, category, author and URL. Typo-tolerant full-text search. |
| `get_tool_details` | `slug` | One listing in full: description, install snippet and setup documentation. |
| `list_categories` | none | Every category with its slug and listing count. |

All tools are read-only.

## Architecture

```
MCP client  ──Streamable HTTP──▶  this server  ──HTTP──▶  travelMCP JSON API  ──▶  PostgreSQL
```

The server holds no database connection. It calls the directory's public JSON API
(`https://omnitravel.ai/tm-api/v1`), which keeps this process decoupled from the
directory's schema: the catalogue can change shape without breaking the MCP layer.

Requests are handled in stateless mode, one server and transport instance per
request, which is the simplest correct pattern behind a plain reverse proxy.

## Run your own

```bash
npm install --omit=dev
cp .env.example .env      # set API_BASE if the directory API is elsewhere
node server.js            # listens on 127.0.0.1:3200
```

Environment:

| Variable | Default | Purpose |
| --- | --- | --- |
| `MCP_PORT` | `3200` | Local listen port |
| `API_BASE` | `http://127.0.0.1:3100` | Base URL of the travelMCP directory app |
| `SITE_URL` | `https://omnitravel.ai` | Public site URL, used in health output |

Behind nginx:

```nginx
location ^~ /mcp {
    proxy_pass         http://127.0.0.1:3200;
    proxy_http_version 1.1;
    proxy_set_header   Host $host;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto $scheme;
    proxy_buffering    off;
    proxy_read_timeout 300s;
}
```

## Other ways to reach the same data

| Access | URL |
| --- | --- |
| REST API | `https://omnitravel.ai/tm-api/v1` |
| Discovery manifest | `https://omnitravel.ai/.well-known/mcp.json` |
| For AI crawlers | `https://omnitravel.ai/llms.txt`, `https://omnitravel.ai/llms-full.txt` |

## About

Built by [OmniTravel](https://omnitravel.ai), a Paris-based travel technology
company working on agentic distribution, hotel ID mapping and real-time room
type mapping.

MIT licensed.