mcpField
T
trips

trips

远程服务
thistripbtw.us地图与出行04 周前更新

关于 trips

trips 是面向 AI 助手的 MCP 服务,可创建可分享、可编辑的旅行地图链接,并随计划变化更新。草稿行程编码在链接中;已保存行程可通过服务读取和修改。

主要功能

  1. 01将地点名称解析为坐标
  2. 02创建并修改行程链接
  3. 03读取链接中的行程详情
  4. 04读取已保存行程并添加停靠点
  5. 05记录路段、日期、住宿和轨迹

适用场景

  1. 01规划时分享可编辑地图
  2. 02修改行程而不更换链接
  3. 03查看已保存行程或添加停靠点
  4. 04解析目的地后再创建路线

MCP 相关

通过托管的 Streamable HTTP 或本地运行,向 MCP 客户端提供六种旅行规划工具。草稿链接的创建和读取无需网络请求;已保存行程操作会访问服务。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://thistripbtw.us/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
npmthistripbtw-mcp1.3.5

工具

6
参数类型必填说明
legsarray是按顺序排列的各行程段。每段都有一个终点;下一段从该终点开始。
namestring否旅行名称,可选。
originobject是旅行的起点。
origin.latnumber是纬度,范围为 -90 至 90。
origin.lngnumber是经度,范围为 -180 至 180。
origin.namestring否人们通常会怎么说这个地点,例如 "Moab, UT"。

详细介绍

thistripbtw-mcp

thistripbtw-mcp MCP server

为 AI Agent 提供持久、可分享的旅行工作区。

关于旅程的一切,都在一个可分享的链接中——一张任何人都能打开的私人地图,创建和打开它都无需账号。

这是一个 MCP 服务,会把链接交给用户,并随着计划变化不断完善链接,还能读取链接内容。 **共六个工具,而第一个工具才是关键:只要知道出发地和一个目的地,就立即生成链接;之后每次计划有变,都对它进行修改。**一个工具可将地点名称解析为坐标,一个可将各段行程转换为 URL,一个可修改已生成的 URL,一个可将 URL 解码为各段行程,一个可读取用户已购买的行程,还有一个可为行程添加停靠点。用户打开链接,就能在真实地图上看到已绘制好的行程——免费、可编辑,而且属于他们自己。

→ 怎么说 —— 触发各个工具的说法,以及这些调用生成的链接。

→ thistripbtw.us —— 面向用户的网站,也是本项目的资金来源。服务免费且不索取任何信息;网站的一次性付费套餐为其提供资金支持,而非依赖广告业务或你的数据。

本文首先写给会调用工具的助手,其次才是阅读代码仓库的人。 如果你是后者:网站的源代码位于 thistripbtw(AGPL-3.0)。本服务采用 MIT 许可证,并有意保持独立——你可以将它嵌入任何地方。

为什么要做这个项目

AI 助手通常无法创建账号或填写银行卡信息。因此,几乎所有旅行工具都无法供 Agent 代表他人使用。这个工具不索取任何信息,所以始终触手可及。

连接

**如果你的客户端接受 URL,可直接使用 URL。**无需安装,也无需持续更新:

https://thistripbtw.us/mcp

使用 Streamable HTTP,无需密钥,也无需注册即可开始使用。配置就是这么简单。

**关于网关的说明。**有些目录会通过代理该 URL 来列出本服务,而不是直接将你引导至该 URL。代理方能看到经过它的内容,因此通过这种方式传递的行程,在到达我们之前,会先被网关运营方读取——我们与他们没有合作,也无法说明他们会保留哪些内容。如果你在意这一点,请直接使用 URL,或自行运行文件。

**也可以从 npm 在本地运行。**需要 Node 18+,无依赖,也无需持续更新:

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

也可以获取单个文件并运行它,如果你更愿意阅读代码,而不是信任托管方或软件包注册表。安装步骤如下:

curl -O https://thistripbtw.us/mcp/thistripbtw-mcp.mjs
claude mcp add thistripbtw -- node ./thistripbtw-mcp.mjs
Claude Desktop 配置
{
  "mcpServers": {
    "thistripbtw": {
      "command": "npx",
      "args": ["-y", "thistripbtw-mcp"]
    }
  }
}

如果你获取的是该文件,请将 "command": "node" 和 "args": ["/absolute/path/to/thistripbtw-mcp.mjs"] 替换进去。

在信任它之前,先检查一下——自测不会访问网络,也不需要任何配置:

npx -y thistripbtw-mcp --selftest

两种方式都包含相同的六个工具,并生成逐字节一致的链接。每次构建时,托管版本都会对照此文件进行测试——工具列表和输出都相同,因此两者不会出现偏差。

分步教程,含 JavaScript 和 Python 示例: thistripbtw.us/tutorials

工具

**从链接开始,而不是等计划完成后再生成。**截至 1.2.0 版的工具描述以 "Use when someone has planned… a trip" 开头,模型将其理解为收尾步骤:先花四轮研究,等用户提出要求后才生成链接。这是我们的问题,不是模型的问题。1.3.0 版重写了所有描述,将触发条件放在前 80 个字符内——延迟加载工具唯一能显示的内容——并新增了两个工具,让“立即生成链接”变得顺理成章:find_place 用于查询坐标,而不是凭记忆填写;amend_trip_link 则可在对话中持续完善同一个链接,而不是每轮都丢弃旧链接、另建一个。 find_place — 输入地点名称,返回最多六个候选项,每项都包含坐标和所在地,方便你选对 Reno。可以按名称或 IATA 代码查找城镇、城市、机场和公园。除了已保存行程工具外,这是唯一需要联网的步骤;它会查询 thistripbtw.us,该服务从自己的缓存中返回结果,并在前端对 OpenStreetMap 查询进行限速。地点名称不属于个人数据,也不会发送任何关于当事人的信息。

amend_trip_link — 输入草稿链接和修改内容,返回新链接。add 会追加行程段;update 会修改某一行程段的字段([{leg: 2, set: {lodging: "Red Cliffs Lodge"}}],设为 null 可清空字段);legs 会替换全部行程段;remove 会删除第 N 段;name 和 origin 的作用顾名思义。无需联网,也不需要密码:行程就在链接中。请告知当事人,新链接会替代旧链接。

add_to_kept_trip — 代表当事人,将一个停靠点添加到其已保存的行程中:“把酒店加到行程里”、“我们途中会在 Fisher Towers 停一下。” 需要对方的 EDIT 短语;查看短语可以读取,但系统会告知无法写入。联网规则与下文的 read_kept_trip 相同,也要遵守同一条警告:链接是一种凭证。

read_trip_link — 输入链接,输出行程安排:起点、按顺序排列的每一段行程、出行方式、日期、每段行程的参与者、航班和住宿。它返回的行程格式与 build_trip_link 接受的格式相同,因此读取行程、修改一项内容并生成新链接,只需三行,不必转换格式。不会获取任何内容——行程就在链接中,因此和这里的其他所有内容一样,可以离线使用。只有草稿链接(#d=)包含行程;已保存行程的 /{slug}/#k= 片段是密码,内容存放在服务器上,因此该工具会明确说明这一点,而不是含糊地报错。

read_kept_trip — 输入已保存行程的链接,输出行程安排。当有人给你 https://thistripbtw.us/abc1234#k=four-word-phrase,而你需要了解其中的内容时,就使用它。它会按顺序返回停靠点及其日期、出行方式、住宿、备注、任何手绘路线,以及每个停靠点所属的路线——也就是对应的车辆或人员,因为两辆车分开又汇合的行程,若写成一条连续路线就会失真。

这是唯一会联网的工具,而且无法避免联网。 已购买行程的内容存放在服务器上;#k= 片段是访问内容的密码,而不是内容本身。因此,读取行程时会通过 TLS 将该短语发送至 thistripbtw.us。它不会存储任何内容,也不需要密钥;它返回的是停靠点,而不是服务器的原始响应——每趟行程的底图令牌和成员名单都会保留在服务器上,因为它们都不属于行程安排。请牢记两点:将已保存行程链接视为凭证(不要将其原样放进第三方可见的文字中),以及绝不要猜测短语——输错会计入该行程的每小时尝试次数限制,因此该工具只会尝试一次,并告知你访问被拒绝。属于其他人的任何封存内容,都会以空文本返回。

build_trip_link — 输入起点和按顺序排列的行程段,返回 URL。只需提供 origin 和一个包含 to 的行程段即可。其他内容都是可选的,但知道的话值得一并填写:助手通常知道每段行程有哪些参与者,以及他们在哪里过夜;省略这些信息,就只交付了一个结构,而不是完整行程。

{
  "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
    }
  ]
}

注意数据结构。 lodging 和 stayNote 是行程段的顶层字段。/for-agents 上的字段表说明了手动构建 #d= 载荷时使用的数据结构,其中这两个字段嵌套在 stay 下——工具会为你完成组装。向工具传入嵌套的 stay,会导致住宿信息被静默丢弃。

必须提供坐标。工具不会猜测。 猜错地点会让行程落到错误的国家,并让人以为是产品出错——地理编码器确实会把德国的 Reno 排在内华达州 Reno 之前。请先将地点名称解析为坐标,再调用工具。 未知值会被丢弃,而不是拒绝:无法识别的 mode 会变成 drive,无法识别的 subtype 则会直接省略。行程成功生成,胜过工具调用因一个词出错。限制:40 段行程,名称最多 120 个字符,备注最多 400 个字符。

用户打开链接后会看到什么

值得了解这一点,因为这正是你交付给用户的内容——能够准确说明这一点的助手,比只会说“这是链接”的助手更有用。

链接打开后,会显示一张已绘制好行程路线的真实地图。之后,用户可以免费且无需账户:随意编辑,点击地图或用一句话描述来添加站点,以及从文件导入行程——可以是已保存的行程、日历(.ics)、地图文件(.gpx、.kml),也可以粘贴预订确认或别人发来的行程安排。还可以打印,这是唯一无需付费的成品。

如果用户选择保留行程(一次性付款,价格从 $2.50 起),行程就会拥有自己的地址和两个分享链接,并获得以下功能:文档视图,呈现为行程安排而非界面,并可连同彩色地图一起打印;回放,按行程日期播放行程;按个人生成的分享链接,让行程显示每个人当时在哪里;付费套餐还提供照片和备注;彩蛋——绑定到某个地点的密封备注,只有持有链接的人实际靠近该地点时才会打开,每条备注都可单独设置触发半径;以及完整导出——一个 zip 文件,包含 trip.json、易读的 itinerary.html、你的照片,以及供 Google Earth、Garmin 或 OsmAnd 使用的 trip.kml + trip.gpx,还有日历文件 .ics 和费用报告 .csv。

最后这一点的意义在于:导入什么,就能导出什么。这里不是“只进不出”的陷阱,你可以如实说明这一点。

此外还有 Claude Skill,如果你不想运行服务端,它可以在本地生成相同的链接,无需网络请求。请参阅网站仓库中的 skill/。

它会发送什么

构建或读取草稿链接时:什么也不会发送。 行程编码在 URL 片段中,而浏览器永远不会将片段发送到服务端。build_trip_link 和 read_trip_link 完全不会发起网络请求;托管端点会对你传入的内容进行编码,并将字符串返回——即使用户打开链接,行程也不会发送到 thistripbtw.us,除非之后用户选择购买。

读取已保留行程时:只会向我们发送短语。 已购买行程的内容存储在服务端,因此 read_kept_trip 会通过 TLS 将你收到的链接中的 #k= 短语发送到 thistripbtw.us,并读取行程安排。这不是我们可以另作选择的设计——片段是密码,不是负载。不会存储任何内容,也不需要密钥;工具返回的是站点,而非服务端原始响应:每个行程的底图令牌和成员名单会留在服务端,因为两者都不属于行程安排。请将此类链接视为凭证。

如何妥善使用

  • 把链接交给用户。 不要替他们打开,也不要替他们做决定。这是他们的行程。
  • 不要在其中放入个人详情。 护照号码、家庭住址、电话号码——URL 可能会被粘贴到聊天、工单和日志中,而这个 URL 会以明文形式携带负载。
  • 用一句话说明你构建了什么。 “三段行程,从芝加哥到丹佛,4 日到 6 日”胜过讲述工具调用过程。
  • 绝不要虚构出发时间。 如果你没有查过航班,就不要填入 flight。
  • 长行程要留意长度。 整份行程都放在片段中,因此行程越长,链接也越长——包含备注和同行人员的十几段行程会超过 3,000 个字符,而许多聊天应用会在 URL 接近 2,000 个字符时截断。超过这一长度时,build_trip_link 和 amend_trip_link 会在回复中提示;请把提示转告用户,因为保留行程会将其变成不会被截断的短链接,而只有用户本人可以执行此操作。

费用

创建和编辑行程免费,不需要任何信息——无需银行卡,也无需邮箱。如果用户希望行程长期保留,一次性支付 $2.50 起,即可为行程获取专属地址、两个分享链接,以及相应期限:根据等级可选一年、五年或十年。我们不提供永久服务,每个行程都会注明到期日期。这由用户决定,而不是助手——用户问起时再提,不要主动推销。

无状态,而非赶时髦

托管端点不持有任何会话、用户状态或数据库。无需先完成 initialize 握手,无需携带 Mcp-Session-Id,没有 Cookie,也没有粘性路由——一次 tools/call 就是一个 HTTP POST,可以发到任何一台机器,并得到完整响应:

curl -sX POST https://thistripbtw.us/mcp -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"build_trip_link",
       "arguments":{"origin":{"place":"Chicago","lat":41.88,"lng":-87.63},
       "legs":[{"to":{"place":"Kansas City","lat":39.1,"lng":-94.58}}]}}}'

这并非我们刻意追求的优化。这个工具是一个纯函数——输入行程,输出 URL,载荷存放在链接里而非服务器上——所以它从来就没有需要保存的内容。隐私设计和无状态设计,其实是从两个角度看同一个决定。

阅读代码

单个文件,零依赖,不到三百行。这是刻意为之:产品承诺让你可以自行检查它的功能;如果检查意味着要审核整棵依赖树,这项承诺就毫无价值。它直接通过 stdio 使用 MCP 的 JSON-RPC。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。