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
- Give it to the person. Don't open it for them. It is their trip.
- Keep personal details out of it. Passport numbers, home addresses,
phone numbers — URLs get pasted into chats, tickets and logs.
- Never invent a departure time. If the flight was not looked up, leave
it out.
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
- Coordinates are required and we will not guess. A wrong guess puts
someone's trip in the wrong country and reads as our mistake. Resolve place names first.
- Strip the
= padding and use the URL-safe alphabet
(- and _, not + and /).
- Dates are
YYYY-MM-DD, no time and no zone. An undated
leg keeps its place in the order rather than sorting to the end.
- It goes in the fragment, after the
#. Put it in a query
string and you have just sent someone's itinerary to a server. See below.
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.