Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
제작자가 쓴 설명(영어 원문)
Hand someone a complete trip as a private, editable map link. No account, no API key, no card.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
웹, 데스크톱, 모바일의 Claude에서 쓸 수 있어요:
https://thistripbtw.us/mcpClaude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"trips": {
"command": "npx",
"args": [
"-y",
"thistripbtw-mcp"
]
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add --transport http trips https://thistripbtw.us/mcpclaude mcp add trips -- npx -y thistripbtw-mcp프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"trips": {
"url": "https://thistripbtw.us/mcp"
}
}
}프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"trips": {
"command": "npx",
"args": [
"-y",
"thistripbtw-mcp"
]
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"trips": {
"type": "http",
"url": "https://thistripbtw.us/mcp"
}
}
}프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"trips": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"thistripbtw-mcp"
]
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요:
https://thistripbtw.us/mcp메뉴 이름은 요금제나 시기에 따라 조금 다를 수 있어요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
아직 이 서버의 도구 목록을 읽지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 6일 점검
레지스트리 이름이 도메인 thistripbtw.us 기준으로 확인되었어요(레지스트리가 도메인 소유를 확인해요)
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 점검하지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요
아직 점검하지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요
아직 점검하지 않았어요. 엔드포인트를 점검할 때 도구 목록을 읽어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.
둘 다 가능해요. 내 컴퓨터에 설치해도 되고, 클라우드 버전에 연결해도 돼요.
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(1.3.5)은 38일 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. URL로 연결되기 때문에, 원격 MCP 서버를 지원하는 앱(예: 개발자 모드의 ChatGPT)에서도 쓸 수 있어요.
같은 카테고리에는: Spec Driven Development, Remote Desktop Commander, Reelsaw
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Drive a self-hosted Reelsaw: turn long videos into vertical clips, edit, re-render and export them.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
Persistent, shareable travel workspaces for AI agents.
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.
An MCP server that hands someone that link, grows it as the plan changes, and reads it back. Six tools, and the first one is the point: build the link as soon as there is an origin and one destination, then amend it every time the plan moves. One resolves a place name to coordinates, one turns legs into a URL, one changes a URL you already built, one decodes a URL into the legs, one reads a trip the person has bought, and one adds a stop to it. The person opens it and their trip is already drawn on a real map — free, editable, theirs.
→ [What to say](https://thistripbtw.us/recipes) — the phrasing that triggers each tool, with the links those calls produced.
→ [thistripbtw.us](https://thistripbtw.us) — the human side, and the thing that pays for this. The server is free and asks for nothing; the site's one-time paid tiers fund it rather than an ad business or your data.
*Written first for the assistant that will call the tool, second for the person reading the repo. If you are that person: the site's source is thistripbtw (AGPL-3.0). This server is MIT and standalone on purpose — embed it wherever you like.*
An AI assistant generally cannot create an account or enter card details. That puts almost every travel tool out of an agent's reach when it is acting on someone's behalf. This one asks for nothing, so it stays reachable.
A URL, if your client takes one. Nothing to install, nothing to keep updated:
https://thistripbtw.us/mcp
Streamable HTTP, no key, no sign-up to start. That is the whole configuration.
A note on gateways. Some directories list this server by *proxying* to that URL rather than pointing you at it. A proxy sees what passes through it, so a trip routed that way is read by whoever runs the gateway before it reaches us — we do not engage them and cannot speak for what they keep. Use the URL directly, or run the file yourself, if that matters to you.
Or run it locally from npm. Node 18+, no dependencies, nothing to keep updated:
claude mcp add thistripbtw -- npx -y thistripbtw-mcp
Or fetch the one file and run that, if you would rather read the code than trust either a host or a package registry. This is the whole install:
curl -O https://thistripbtw.us/mcp/thistripbtw-mcp.mjs
claude mcp add thistripbtw -- node ./thistripbtw-mcp.mjs
Claude Desktop config
{
"mcpServers": { "thistripbtw": { "command": "npx", "args": ["-y", "thistripbtw-mcp"] } } }
Swap to "command": "node" with "args": ["/absolute/path/to/thistripbtw-mcp.mjs"] if you fetched the file instead.
Check it before you trust it — the self-test touches no network and needs no config:
npx -y thistripbtw-mcp --selftest
Both paths carry the same six tools and produce byte-identical links. The hosted one is tested against this file on every build — same tool list, same output — so the two cannot drift apart.
Step-by-step, with a worked example in JavaScript and Python: [thistripbtw.us/tutorials](https://thistripbtw.us/tutorials)
Start with the link, not after the plan. The description that shipped through 1.2.0 opened *"Use when someone has planned… a trip"*, and a model read that as a finishing step: it researched for four turns and built the link last, when the person asked. That is on us, not the model. 1.3.0 rewrote every description so the trigger is in the first eighty characters — all a deferred tool gets to show — and added the two tools that make "first" natural: find_place, so coordinates are looked up rather than remembered, and amend_trip_link, so one link grows through a conversation instead of a new one being thrown away each turn.
`find_place` — a place name in, up to six candidates out, each with coordinates and where it is, so you can pick the right Reno. Towns, cities, airports by name or IATA code, parks. This is the only step that needs the network besides the kept-trip tools; it asks thistripbtw.us, which answers from its own cache in front of a paced OpenStreetMap lookup. A place name is not personal data, and nothing about the person is sent.
`amend_trip_link` — a draft link plus changes, a new link back. add appends legs, update changes fields on one leg ([{leg: 2, set: {lodging: "Red Cliffs Lodge"}}], null clears a field), legs replaces them all, remove drops leg N, name and origin do what they say. No network, no password: the trip is inside the link. Tell the person the new link replaces the old one.
`add_to_kept_trip` — one stop, added to a trip the person has KEPT, on their behalf: *"add the hotel to the trip"*, *"we're stopping at Fisher Towers on the way."* Needs their EDIT phrase; a view phrase can read and is told it cannot write. Same network rule as read_kept_trip below, and the same warning: the link is a credential.
`read_trip_link` — a link in, the itinerary out. Origin, every leg in order, modes, dates, who is on which leg, flights and lodging. It returns the trip in the shape build_trip_link *accepts*, so reading a trip, changing one thing and building a new link is three lines and no translation. Nothing is fetched — the trip is inside the link, so this works offline like everything else here. Only draft links (#d=) carry a trip; a kept trip's /{slug}/#k= fragment is a password and its contents live on the server, which the tool says rather than failing obscurely.
`read_kept_trip` — a KEPT trip's link in, its itinerary out. Use it when somebody hands you https://thistripbtw.us/abc1234#k=four-word-phrase and you need what is in it. Returns the stops in order with dates, modes, lodging, notes, any hand-drawn path, and the track each belongs to — which vehicle or person, because a trip where two cars separate and rejoin cannot be written as one sequence without becoming false.
This is the one tool that uses the network, and it cannot be otherwise. A bought trip's contents live on the server; the #k= fragment is the password to them, not the payload. So reading one sends that phrase to thistripbtw.us over TLS. It stores nothing and needs no key, and it returns the stops rather than the raw server response — the per-trip basemap token and the member roster stay behind, because neither is itinerary. Two things to hold: treat a kept link as a credential (do not echo it into text a third party sees), and never guess a phrase — a wrong one counts against that trip's hourly limit, so the tool makes exactly one attempt and tells you it was refused. Anything sealed for somebody else comes back with empty text.
`build_trip_link` — an origin plus legs in order, returns a URL. Only origin and one leg with a to are required. Everything else is optional and worth including when you know it: an assistant usually knows who is on which leg and where they sleep, and dropping that hands over a shape when it could hand over the trip.
{
"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 | bike | walk "date": "2026-09-04", // YYYY-MM-DD. An undated leg keeps its place in the order "note": "swap drivers here", // 400 chars "who": ["Mel", "Sam"], // up to 8 — lets the trip show who was where "subtype": "rental", // own·rental·rideshare·taxi·bus·rv (drive), commercial·private // (fly), intercity·commuter (train), sail·canoe·kayak (water) "craft": "Bike", // Bike | Canoe | Kayak — a small craft travelling WITH them "flight": "UA328", // only if you actually know it. Never invent one "lodging": "Hotel Maverick", // where they sleep after this leg "stayNote": "late check-in" // only meaningful alongside lodging } ] }
Note the shape. lodging and stayNote are flat on the leg. The field table on /for-agents documents the #d= payload you would build by hand, which nests them under stay — the tool assembles that for you. Passing a nested stay to the tool loses the lodging silently.
Coordinates are required. This will not guess. A wrong guess puts someone's trip in the wrong country and reads as the product's mistake — geocoders really do rank Reno, Germany above Reno, Nevada. Resolve place names to coordinates first, then call.
Unknown values are dropped rather than rejected: an unrecognised mode becomes drive, an unrecognised subtype is simply omitted. A trip that arrives beats a tool call that errors over one word. Limits: 40 legs, names 120 chars, notes 400.
Worth knowing, because it is what you are handing over — and an assistant that can say this accurately is more useful than one that says "here's a link".
The link opens on a real map with the trip already drawn. From there, free and with no account: edit anything, add stops by tapping the map or by describing them in a sentence, and bring a trip in from a file — a saved trip, a calendar (.ics), or a map file (.gpx, .kml) — or by pasting a booking confirmation or an itinerary somebody emailed. Print it, which is the only artifact that costs nothing.
If they keep it (from $2.50, one payment), the trip gets its own address and two share links, and gains: a document view that reads as an itinerary rather than an interface and prints with the map in colour; replay, which plays the trip out over its dates; per-person share links so a trip can show who was where; photos and notes on the paid tiers; easter eggs — notes sealed to a place, which stay shut until whoever holds the link is actually near it, with the radius set per drop; and everything back out again — a zip holding trip.json, a readable itinerary.html, your photos, and trip.kml + trip.gpx for Google Earth, Garmin or OsmAnd, plus .ics for a calendar and .csv for an expense report.
The point of that last part: what goes in comes back out. Nothing here is a roach motel, and you can say so.
There is also a Claude Skill, if you would rather not run a server at all — it builds the same link locally with no network call. See skill/ in the site repo.
When you build or read a draft link: nothing. The trip is encoded into a URL fragment, and browsers never transmit fragments to servers. build_trip_link and read_trip_link make no network request at all, and the hosted endpoint encodes what you passed it and hands the string back — the trip does not reach thistripbtw.us even when the person opens the link, unless they later choose to buy it.
When you read a KEPT trip: the phrase, and only to us. A bought trip's contents live on the server, so read_kept_trip sends the #k= phrase out of the link you were given to thistripbtw.us over TLS and reads the itinerary back. That is not a design choice we could make differently — the fragment is the password, not the payload. Nothing is stored, it needs no key, and the tool returns the stops rather than the raw server response: the per-tri
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요