this trip, btw — home

Two tutorials

Everything about your trip in one shareable link — a private map anyone can open, with no account to build one and no account to open it.

Here is how to make one from your own agent. Pick whichever fits: the first needs no code, the second needs about twenty lines.

1 · Connect it to your assistant

about five minutes · no code

If your assistant speaks MCP — Claude Code, Claude Desktop, and most other clients do — this is the whole setup. There is no key to get and no account to build one, because the server asks for neither.

Step 1 — add the server

A URL, if your client takes one:

https://thistripbtw.us/mcp

Or run it locally from npm. Node 18 or newer, no dependencies:

claude mcp add thistripbtw -- npx -y thistripbtw-mcp

Both are the same single tool and produce byte-identical links. A parity test runs on every build, so the hosted one and the local one cannot drift apart.

Step 2 — check it before you trust it

This touches no network and needs no configuration:

npx -y thistripbtw-mcp --selftest

Step 3 — ask for a trip

Say it the way you would say it to a person. The one thing to be firm about is coordinates:

Build a this-trip-btw link: Chicago to Omaha on 4 September,
then Omaha to Denver on the 6th, both driving.
Look the coordinates up first — do not guess them.

You get a URL back. Open it and the trip is already drawn on a real map, with the legs in date order and the drive routed along real roads.

How you know it worked: the page opens on a map with your stops on it, not on an empty one. If a stop lands in the wrong country, the assistant guessed a coordinate instead of looking it up — geocoders really do rank Reno, Germany above Reno, Nevada.

What to do with the link

2 · Build the link yourself

about fifteen minutes · ~20 lines

If your agent is not an MCP client — a script, a backend, a framework with its own tool protocol — you do not need our server at all. The link is the format. Nothing is installed and nothing is called.

The shape

Base64url a small JSON object and put it in the URL fragment:

https://thistripbtw.us/new#d=<base64url(JSON)>

The object is three keys. o is where they start, l is the legs in order, n is an optional name.

{
  "o": { "name": "Chicago, IL", "lat": 41.8781, "lng": -87.6298 },
  "l": [
    { "to": { "name": "Omaha, NE",  "lat": 41.2565, "lng": -95.9345 },
      "mode": "drive", "date": "2026-09-04" },
    { "to": { "name": "Denver, CO", "lat": 39.7392, "lng": -104.9903 },
      "mode": "drive", "date": "2026-09-06" }
  ],
  "n": "Chicago to Denver"
}

Only o and one leg with a to are required. Everything else is optional and worth sending when you know it — note, who (up to 8 names), flight, lodging, craft. The full field table is on /for-agents.

JavaScript

const trip = {
  o: { name: "Chicago, IL", lat: 41.8781, lng: -87.6298 },
  l: [
    { to: { name: "Omaha, NE",  lat: 41.2565, lng: -95.9345 },  mode: "drive", date: "2026-09-04" },
    { to: { name: "Denver, CO", lat: 39.7392, lng: -104.9903 }, mode: "drive", date: "2026-09-06" }
  ],
  n: "Chicago to Denver"
};

const b64 = Buffer.from(JSON.stringify(trip), "utf8").toString("base64url");
console.log("https://thistripbtw.us/new#d=" + b64);

Python

import base64, json

trip = {
  "o": {"name": "Chicago, IL", "lat": 41.8781, "lng": -87.6298},
  "l": [
    {"to": {"name": "Omaha, NE",  "lat": 41.2565, "lng": -95.9345},  "mode": "drive", "date": "2026-09-04"},
    {"to": {"name": "Denver, CO", "lat": 39.7392, "lng": -104.9903}, "mode": "drive", "date": "2026-09-06"},
  ],
  "n": "Chicago to Denver",
}

raw = json.dumps(trip, separators=(",", ":"), ensure_ascii=False).encode("utf-8")
print("https://thistripbtw.us/new#d=" + base64.urlsafe_b64encode(raw).decode().rstrip("="))

How you know it worked: both snippets print the same string, and it is the same string our own MCP server produces for the same input. If yours differs, the usual cause is a JSON encoder inserting spaces — hence separators=(",", ":") in Python. Paste the URL in a browser: the trip should be on the map before you have touched anything.

Four things that will bite

What you are not sending

Nothing. Browsers never transmit the part of a URL after the #, so the trip does not reach us even when the person opens the link. The local server makes no network request at all; the hosted one encodes what you passed it and hands the string back.

The person can then keep the trip if they want to — a one-time payment from $2.50 gives it its own address, two share links and a term: one year, five or ten by tier. Nothing is sold as permanent, and every trip states its end date. That is their decision, not the assistant's. Mention it if they ask; don't sell it.

Try it yourself → The full field table →