Skip to main content
Glama
nnishad

open-splitwise

by nnishad

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 回と計算が必要

quick_add_expense が名前を ID に解決し、セント単位で正確な負担額を計算し、カテゴリを選び、1 回で投稿する

友達リストに Alice が 2 人いる

resolve_users が候補リストを返すので、エージェントはどちらかをあなたに確認する

「自分はいくら借りている?」には複数エンドポイントの集約が必要

money_summary が通貨ごとの合計を 1 回の呼び出しで返す

Splitwise が errors オブジェクト付きで 200 OK を返す

サーバーがそれを検査し、失敗は対処可能なテキスト付きのツールエラーとして表面化する — 誤った成功は決して返さない

HTTP 429 レート制限

透過的に再試行される(Retry-After を尊重し、フォールバックとして指数バックオフ)

セッション中にキー失効 / ログアウト

エラーが原因と setup_auth の実行をエージェントに伝える。新しいキーは即座に適用され、再起動は不要

33 個のツールスキーマが毎回のプロンプトで約 4k トークンを消費

遅延ツールディスカバリ: デフォルトでは必須の 7 ツールのみ公開。search_tools("expenses") で残りをフルスキーマ付きでオンデマンドに読み込む

機能

  • 完全な 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 below

https://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 を呼び出してください。」

ユーザーがキーを提供

setup_auth(api_key) は最初に /get_current_user をプローブする — 無効なキーは拒否され、保存されない。有効なキーは保存され、その所有者が報告される

キー失効 / アカウントログアウト(HTTP 401/403)

ツールは*「キーが失効、期限切れ、またはアカウントがログアウトした可能性があります…ユーザーに新しいキーを依頼し、setup_auth を呼び出してください」*と失敗する

診断

get_auth_status(){configured, source: stored|environment, masked_key}

アカウントの切り替え

logout() が保存済みの資格情報を削除する

キーの解決はリクエストごとに行われる: 保存済みの資格情報 → 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)

グループ

ツール

ワークフロー

quick_add_expense · resolve_users · money_summary

ユーザー

get_current_user · get_user · update_user

グループ

get_groups · get_group · create_group · delete_group* · undelete_group · add_user_to_group · remove_user_from_group

フレンド

get_friends · get_friend · create_friend · create_friends · delete_friend*

経費

get_expenses · get_expense · create_expense · update_expense · delete_expense* · undelete_expense

コメント

get_comments · create_comment · delete_comment*

通知

get_notifications

その他

get_currencies · get_categories

認証

setup_auth · get_auth_status · logout*

*destructiveHint=true でアノテーション済み。すべての get_* ツールは readOnlyHint=true でアノテーション済み。両方が存在する場合は、生のツールよりワークフローツールを優先すること。

レート制限

Splitwise はスロットリング時に HTTP 429 を返す。open-splitwise は自動的に再試行する: Retry-After ヘッダーをそのまま尊重し、それ以外は指数バックオフ(0.5 秒から倍増、最大 30 秒)で、デフォルトで最大 3 回試行する。エージェントがエラーを見るのは全試行を使い果たした場合のみ — そのエラーは盲目的な再試行ではなくペースを落とすよう指示する。

設定

環境変数

デフォルト

目的

SPLITWISE_API_KEY

ブートストラップキー(保存済みの資格情報が優先)

SPLITWISE_MCP_CONFIG_DIR

~/.config/splitwise-mcp

credentials.json の置き場所

SPLITWISE_MCP_MAX_RETRIES

3

表面化するまでの 429 再試行回数

SPLITWISE_MCP_LAZY

on

off にすると 33 ツールすべてを最初に登録

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 — すべての人に開かれている: 使うも、改変するも、出荷するも、販売するも自由。著作権表示だけは保持すること。

-
license - not tested
Not graded
quality - not tested
C
maintenance

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.

View all MCP Connectors

Latest Blog Posts

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