open-splitwise
open-splitwise
Splitwise をエージェントネイティブな経費トラッカーに変える。
あらゆる AI エージェント — Hermes、Claude Desktop、Claude Code、Cursor、または MCP を話せるものなら何でも — が残高を読み取り、雑然とした自然言語から経費を割り勘し、自身の認証問題を診断し、レート制限を気にする必要がない、オープンな Model Context Protocol(MCP) サーバー。
Python 3.11+ · MCP spec 2026-07-28 · stdio transport · 33 tools · lazy-loaded
なぜ
既存の Splitwise インテグレーションは、モデルに生の API ミラーを渡してうまくいくことを願うだけだ。それは予測可能な形で失敗する: モデルがカテゴリ ID をでっち上げ、₹300 を 3 人で誤って割り勘し、実際には失敗したリクエストなのに Splitwise の 200 OK を信じ、レート制限の応答を積極的に再試行すべきバグとして扱う。
open-splitwise はこれをサーバーレイヤーで修正する:
エージェントにとっての問題 | open-splitwise が行うこと |
「Alice と夕食を割り勘」には API 呼び出しが 3〜4 回と計算が必要 |
|
友達リストに Alice が 2 人いる |
|
「自分はいくら借りている?」には複数エンドポイントの集約が必要 |
|
Splitwise が | サーバーがそれを検査し、失敗は対処可能なテキスト付きのツールエラーとして表面化する — 誤った成功は決して返さない |
HTTP 429 レート制限 | 透過的に再試行される( |
セッション中にキー失効 / ログアウト | エラーが原因と |
33 個のツールスキーマが毎回のプロンプトで約 4k トークンを消費 | 遅延ツールディスカバリ: デフォルトでは必須の 7 ツールのみ公開。 |
機能
完全な API カバレッジ — 公式 Splitwise OpenAPI 3.0 仕様の全 27 エンドポイントを、それぞれ 1 ツールとして、忠実な名前で提供。
ワークフローレイヤー — 1 つの発話が 1 回の呼び出しに対応する高レベルツール。
セルフサービス認証ライフサイクル —
setup_authはキーを保存する前に Splitwise に対してライブで検証する(誤ったキーは決して永続化されない)。get_auth_statusは設定内容を説明し、logoutは資格情報を消去する。セッション途中での再認証も機能する。正直なエラー — すべての失敗モード(人物が解決できない、負担額の合計不一致、不明なカテゴリ、失効したキー、再試行の枯渇)は、何が起きたかと次に何をすべきかを正確に伝えるテキストを返す。
デフォルト安全なアノテーション — 読み取りは
readOnlyHintを、破壊的な削除はdestructiveHintを、MCP 2026-07-28 セマンティクスに従って保持する。ツールはキャッシュに優しいディスカバリのため決定的な順序で登録される。ローカル優先のシークレット — API キーは
~/.config/splitwise-mcp/credentials.jsonにモード0600で保存され、アトミックに書き込まれ、決してエコーバックされない(マスクされたプレビューのみ)。
クイックスタート
git clone https://github.com/<you>/open-splitwise.git
cd open-splitwise
uv syncスタンドアロンで実行(stdio):
uv run open-splitwise # starts with no key configured — see auth belowhttps://secure.splitwise.com/apps で API キーを取得 (アカウント設定 → API キー)。
任意の MCP クライアントに接続
汎用 stdio ブロック(Claude Desktop の claude_desktop_config.json、Claude Code の .mcp.json、Cursor など):
{
"mcpServers": {
"splitwise": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/open-splitwise", "run", "open-splitwise"],
"env": { "SPLITWISE_API_KEY": "<optional: preconfigure>" }
}
}
}Hermes Agent に接続
~/.hermes/config.yaml に追加:
mcp_servers:
splitwise:
command: "uv"
args: ["--directory", "/absolute/path/to/open-splitwise", "run", "open-splitwise"]
env:
SPLITWISE_API_KEY: "<optional>"
tools:
include: [quick_add_expense, resolve_users, money_summary, get_auth_status]
prompts: false
resources: falseその後 /reload-mcp を実行。上記の 4 つのワークフロー/認証ツールから始め、必要なときだけ生の API ツールを追加する — Hermes のサーバー単位フィルタリングによりツール面は小さく保たれる。
認証ライフサイクル
このサーバーは、エージェントが認証を自ら診断・修正し、あなたにシークレットだけを尋ねるように設計されている:
状況 | エージェントから見える動作 |
どこにもキーがない | すべてのツールが失敗する: 「Splitwise API キーが設定されていません。secure.splitwise.com/apps でキーを生成するようユーザーに依頼し、setup_auth を呼び出してください。」 |
ユーザーがキーを提供 |
|
キー失効 / アカウントログアウト(HTTP 401/403) | ツールは*「キーが失効、期限切れ、またはアカウントがログアウトした可能性があります…ユーザーに新しいキーを依頼し、setup_auth を呼び出してください」*と失敗する |
診断 |
|
アカウントの切り替え |
|
キーの解決はリクエストごとに行われる: 保存済みの資格情報 → SPLITWISE_API_KEY 環境変数 → なし。保存したばかりのキーは実行中のプロセスに即座に反映される — 再起動はゼロ。
資格情報は ~/.config/splitwise-mcp/credentials.json(モード 0600)に置かれる。ディレクトリは SPLITWISE_MCP_CONFIG_DIR で上書きできる(テストや複数プロファイル構成に便利)。
エージェントの使いやすさ
You: "add dinner 900 split with alice and bob@x.com, groceries"
Agent: quick_add_expense(description="Dinner", cost="900.00",
participants=["alice", "bob@x.com"],
category_name="groceries")
Server: resolves alice→12? two matches! → error listing Alice A (id 10), Alice Wood (id 12)
Agent: "Which Alice?" → you answer → re-call succeeds
Server: { status: created, expense_id: 99123,
splits: [ "Nikhil paid 900.00 INR",
"Alice A owes 300.00 INR",
"Bob B owes 300.00 INR" ] }quick_add_expense— 名前/部分名/メールアドレス/ID を受け付ける。均等割りは余りのセントを決定的に分配して計算。カスタムowed_sharesは合計が正確になるよう検証。支払い者はデフォルトで含まれる(消費していない場合はinclude_payer_in_split=false)。通貨はプロフィールからデフォルト設定。resolve_users— メール完全一致、フルネーム一致、一意のファーストネーム、部分文字列フォールバック。曖昧な場合は推測せず候補を返す。money_summary— 通貨ごとのowed_to_you/you_owe/net、フレンドレベルの残高、自分が関わるグループの簡易債務。
ツールリファレンス(33)
グループ | ツール |
ワークフロー |
|
ユーザー |
|
グループ |
|
フレンド |
|
経費 |
|
コメント |
|
通知 |
|
その他 |
|
認証 |
|
* は destructiveHint=true でアノテーション済み。すべての get_* ツールは readOnlyHint=true でアノテーション済み。両方が存在する場合は、生のツールよりワークフローツールを優先すること。
レート制限
Splitwise はスロットリング時に HTTP 429 を返す。open-splitwise は自動的に再試行する: Retry-After ヘッダーをそのまま尊重し、それ以外は指数バックオフ(0.5 秒から倍増、最大 30 秒)で、デフォルトで最大 3 回試行する。エージェントがエラーを見るのは全試行を使い果たした場合のみ — そのエラーは盲目的な再試行ではなくペースを落とすよう指示する。
設定
環境変数 | デフォルト | 目的 |
| – | ブートストラップキー(保存済みの資格情報が優先) |
|
|
|
|
| 表面化するまでの 429 再試行回数 |
|
|
|
Splitwise の癖を吸収
配列パラメータを Splitwise の変則的な
users__{index}__{property}エンコーディングにフラット化200 OK≠ 成功: すべての変更操作でerrors{}/success:falseを検査金額は小数 2 桁の 10 進文字列。余りのセントは分配され、合計は常に正確
category_idはサブカテゴリである必要がある — ファジーな名前解決で強制残高/債務は事前計算済みの
balance[]/simplified_debtsから読み取る(再計算はしない)「精算」は
payment:trueの経費にすぎない(専用エンドポイントは存在しない)OAuth2 は存在するが意図的にスコープ外: 個人用 API キーがエージェントがユーザーに尋ねるフローに適合。OAuth はリダイレクト URI + ブラウザが必要(ホスト型デプロイのみ)
アーキテクチャ
┌─────────────── any MCP client ───────────────┐
│ Hermes / Claude Desktop / Cursor / … │
└──────────────────┬───────────────────────────┘
│ JSON-RPC over stdio
┌──────────────────▼───────────────────────────┐
│ server.py — FastMCP app, 33 tools │
│ workflows · raw endpoints · auth lifecycle │
├──────────────────────────────────────────────┤
│ client.py — async REST client │
│ bearer auth (per-request key resolution) │
│ param flattening · success verification │
│ transparent 429 retry/backoff │
├──────────────────────────────────────────────┤
│ auth.py — credentials.json (0600, atomic) │
└──────────────────┬───────────────────────────┘
│ HTTPS
secure.splitwise.com/api/v3.0開発
uv run pytest # 54 tests: client, rate limits, auth, workflows, lazy loading, MCP semantics
uv run python scripts/smoke_stdio.py # real subprocess: handshake, discovery, live auth-failure pathsテストファースト(厳格な TDD)で構築: 上記のすべての動作は、最初に失敗するテストから始まる由来を持つ。構成:
src/open_splitwise/
client.py # REST client: auth provider, flattening, retry, error mapping
auth.py # credential storage
server.py # FastMCP definitions: workflows + raw + auth tools
tests/
scripts/smoke_stdio.py利用規約
Splitwise のセルフサービス API は、同社の API 利用規約により非商用である。あなたの API キーはアカウントへの完全なアクセスを許可する — パスワードのように扱うこと。このプロジェクトは独立したインテグレーションであり、Splitwise Inc. とは提携しておらず、同社の承認も受けていない。
ロードマップ
経費作成時のレシートアップロード
換算対応の複数通貨経費ヘルパー
MCP プロンプトとしての定期経費サマリー
ホスト型/マルチユーザーデプロイ向けのオプションの Streamable HTTP トランスポート(+OAuth2)
PyPI への公開(
uvx open-splitwise)
コントリビューション
PR 歓迎 — TDD の規律(テストが最初に失敗し、その後成功する)を守り、ツールの説明はモデル向けに書き、シークレットをログに記録しないこと。
ライセンス
MIT — すべての人に開かれている: 使うも、改変するも、出荷するも、販売するも自由。著作権表示だけは保持すること。
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Connect AI agents to bank accounts, transactions, balances, and investments.
Log, query, and edit expenses, budgets, and accounts in Ledgy from any MCP-compatible AI assistant.
Live & historical FX rates and currency conversion for AI agents. No API keys.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nnishad/open-splitwise-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server