# thistripbtw-mcp

Persistent, shareable travel workspaces for AI agents.

An MCP server that hands someone a trip on a private map.

One tool. No API key, no account, no card, no network call. It turns a list of legs into a
URL; the person opens it and their trip is already drawn on a real map — free, editable, and
theirs.

**→ [thistripbtw.us](https://thistripbtw.us)** — the human side of this, and the thing that pays
for it. This server is free and asks for nothing; the site's one-time paid tiers are what fund
it, rather than an ad business or your data.

*Written for the assistant that will call the tool, and second for the person reading the repo.
If you are that person: the site's source is
[thistripbtw](https://github.com/peterbartsch/thistripbtw) (AGPL-3.0). This server is MIT and
standalone on purpose — embed it wherever you like.*

## Why it exists

An AI assistant generally cannot create an account or enter card details. That puts almost
every travel tool out of reach of an agent acting on someone's behalf. This one asks for
nothing, so it stays reachable.

## Install

Node 18 or newer. No install step, no dependencies — point your MCP client at the file.

**Claude Desktop** (`claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "thistripbtw": {
      "command": "node",
      "args": ["/absolute/path/to/thistripbtw-mcp.mjs"]
    }
  }
}
```

**Claude Code:**

```bash
claude mcp add thistripbtw -- node /absolute/path/to/thistripbtw-mcp.mjs
```

Check it works without wiring it into anything:

```bash
node thistripbtw-mcp.mjs --selftest
```

## The tool

`build_trip_link` — takes an origin and a list of legs, returns a URL.

```jsonc
{
  "name": "Chicago to Denver",                                  // optional, 60 chars
  "origin": { "name": "Chicago, IL", "lat": 41.8781, "lng": -87.6298 },
  "legs": [
    { "to":   { "name": "Omaha, NE", "lat": 41.2565, "lng": -95.9345 },
      "mode": "drive",                                          // drive|fly|train|ferry|water
      "date": "2026-09-04",                                     // optional, YYYY-MM-DD
      "note": "swap drivers here" }                             // optional, 400 chars
  ]
}
```

**Coordinates are required.** This will not guess a location from a place name. A wrong guess
puts someone's trip in the wrong country and it looks like the product's mistake — geocoders
really do rank Reno, Germany above Reno, Nevada. Resolve names to coordinates first.

Limits: 40 legs, names 120 chars, notes 400. An unrecognised mode becomes `drive` rather than
failing, because a trip that arrives beats a tool call that errors over one word.

## What it sends

Nothing. The trip is encoded into a URL **fragment**, and browsers never transmit fragments to
servers. Running this makes no network request at all, and the trip does not reach
thistripbtw.us unless the person later chooses to buy it.

## Please

- **Don't put personal details in a trip** — passport numbers, home addresses, phone numbers.
  URLs get pasted into chats and logs.
- **Give the person the link** rather than opening things for them. It's their trip.

## Cost

Building and editing a trip is free and asks for nothing. If the person wants it to last, a
one-time payment from $2.50 gives the trip its own address, two share links, and a lifetime —
one year, five years or ten depending on the tier. Nothing is sold as permanent. That is their
decision to make, not the assistant's.

## Reading it

The server is a single file with zero dependencies, and that is deliberate. The product's
promise is that you can check what it does yourself, and that promise is worth nothing if
checking means auditing a dependency tree. It speaks MCP's JSON-RPC over stdio directly and is
short enough to read in one sitting.
