在 ChatGPT 和 Claude 裡使用 Splitease

Splitease 是一個群組分帳工具——共享連結、多幣別、免註冊。上週我們推出了 MCP(Model Context Protocol)server,讓 AI 助手可以直接操作你的行程資料。這篇文章說明在實際使用上這代表什麼。

為什麼要把分帳移進對話視窗?

旅行中打字很痛苦。你在計程車上,一手拿著三種幣別混用的紙本收據,另一手拿著手機,要:

  1. 打開 app
  2. 點「新增花費」
  3. 輸入描述
  4. 點幣別下拉選單,找到 IDR
  5. 輸入金額,後面加三個零
  6. 選誰付的
  7. 選分帳方式
  8. 儲存

八個步驟,全在六吋螢幕上完成。比較一下:

「在我們的峇里島行程加一筆花費——機場計程車 IDR 50,000,Emilie 付的,平均分攤」

一句話。AI 處理表單填寫。這就是價值所在。

還有一個比較不明顯的第二種使用情境:查詢旅行中的花費。「目前為止最大的支出是什麼?」或是「Danny 總共花了多少?」這些自然語言問題,用手機 app 要點進篩選和排序才能回答——而 AI 一次 tool call 就搞定。

如何設定

Splitease 在 /.well-known/mcp/server-card.json 發布了一個探索檔案,裡面列出根端點(用於建立行程)和行程專屬端點(用於其他操作)。

Claude Desktop:

{
  "mcpServers": {
    "splitease": {
      "type": "http",
      "url": "https://splitease.tillmac.com/api/mcp"
    }
  }
}

就這樣。一個連接器,永久有效。新行程不需要新的連接器——AI 代理人把 tripId 當參數傳入。

ChatGPT Custom GPT:

在 Configure → Actions 裡,匯入 https://splitease.tillmac.com/openapi.json。在 Instructions 加上:「當使用者提供 Splitease 行程 URL 時,解析 tripId。使用 MCP 端點呼叫工具——把請求包在 JSON-RPC 2.0 格式裡。」

一段真實對話

(下方的行程名稱和數字看起來真實,但是為了說明而捏造的。)

我: 幫我建一個 Splitease 行程,名字叫「峇里島五天」,結算幣別 TWD。
Claude: [呼叫 create-trip] 完成。「峇里島五天」(TWD)行程在 /trip/abc-123。要我加成員嗎?
我: 加 Danny 和 Emilie。
Claude: [呼叫兩次 add-member] Danny 和 Emilie 已加入。
我: 第一筆花費——烏布別墅三晚,IDR 4,500,000,Emilie 付的,平均分攤。
Claude: [呼叫 create-expense——自動抓取 IDR→TWD 匯率] 已記錄。IDR 4,500,000 ≈ TWD 8,720,平均分攤所以 Danny 這筆欠 Emilie TWD 4,360。
我: 目前為止排除住宿的最大支出是什麼?
Claude: [呼叫 list-expenses,過濾掉別墅/飯店/Airbnb,依 amountInBase 排序] 非住宿類最大支出是「衝浪課」,TWD 2,400。

AI 代理人批次呼叫工具(每個回合可多次 tool invocation)、處理幣別換算、做摘要。使用者完全沒有打開 app。

值得一提的是:AI 在這裡並沒有做什麼聰明的事。它呼叫的正是你在網頁 UI 操作時會打到的同一組端點。智慧的部分只在於解析——「Emilie 付的」→ paidBy: "Emilie",「平均分攤」→ splitMethod: "equal"。這是 AI 擅長的事,也正是行動裝置上八步驟表單難以做到的。

什麼時候要回到網頁 UI

MCP 介面對CRUD 操作已完整支援,但有些事情視覺上更合適:

用 AI 做記錄,用網頁做審閱和最終結算。

設計取捨

幾個影響整合方式的決策:

Link-as-token 授權。 Splitease 沒有用戶帳號、沒有 OAuth。URL 裡的 tripId 就是授權範圍——持有連結的人都有讀寫權限。我們把這個模型帶進了 MCP——tripId 要麼在 URL 路徑裡(行程專屬端點),要麼作為工具參數傳入(根端點)。沒有 bearer token,沒有 session 狀態。

這和所有 MCP 最佳實踐指南的建議完全相反。我們這樣做是因為它符合產品本身。加入 OAuth 會製造不值得的摩擦——Splitease 的核心價值主張是「免註冊」,我們寧可在「安全性」使用情境失去 20%,也不願因為摩擦在普通用戶失去 80%。

混合端點。 根端點 /api/mcp 暴露全部 8 個工具(包含 create-trip);行程專屬端點 /api/mcp/{tripId} 暴露 7 個(不含 create-trip——已有 tripId 了)。一個 MCP 連接器,每次請求動態帶入 tripId。進階使用者如果想要每個行程獨立的連接器,可以使用行程專屬形式。

不用 SDK。 MCP server 是約 200 行手刻的 JSON-RPC 2.0 over HTTP。我們考慮過 @vercel/mcp-adapter,但這個協定夠簡單,adapter 帶來的價值不足以抵消一個依賴的成本。直接用 POST handler 加一個 method 的 switch 就涵蓋了 initializetools/listtools/call。就這樣。

破壞性操作不暴露。 delete-tripremove-member 刻意不在工具列表裡。delete-expense 有暴露,但描述裡明確告訴 LLM 在呼叫前要先和用戶確認。我們在測試中發現,「你確定要刪除嗎?」這類提示很容易被用戶不小心接受。把破壞性 API 排除在代理人介面之外;這些操作讓使用者回到網頁操作。

試試看

如果你已有 Splitease 行程,把你的 AI 助手指向 https://splitease.tillmac.com/api/mcp 然後叫它做點什麼。如果還沒有,直接問 AI:「幫我建一個 Splitease 行程。」現在整個 onboarding 就是這樣。