Skip to main content
Glama
nnishad

open-splitwise

by nnishad

open-splitwise

Splitwise를 에이전트 네이티브 비용 추적기로 바꾸세요.

오픈 Model Context Protocol(MCP) 서버로, Hermes, Claude Desktop, Claude Code, Cursor 또는 MCP를 말하는 모든 AI 에이전트가 잔액을 읽고, 지저분한 자연어에서 비용을 분할하고, 자체 인증 문제를 진단하고, 속도 제한을 신경 쓸 필요가 없게 해줍니다.

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와 저녁 식사 분할"은 3–4번의 API 호출 + 산술이 필요함

quick_add_expense가 이름 → ID를 해석하고, 센트 단위 정확한 분담액을 계산하고, 카테고리를 고르고, 한 번에 게시함

친구 목록에 Alice가 두 명 있음

resolve_users가 후보 목록을 반환하여 에이전트가 당신에게 어느 쪽인지 묻게 함

"내가 얼마를 갚아야 하지?"는 다중 엔드포인트 집계가 필요함

money_summary가 통화별 합계를 한 번의 호출로 반환함

Splitwise가 errors 객체와 함께 200 OK를 반환함

서버가 이를 확인함; 실패는 실행 가능한 텍스트가 있는 도구 오류로 표면화됨 — 거짓 성공은 없음

HTTP 429 속도 제한

보이지 않게 재시도됨(Retry-After 준수, 지수 백오프 폴백)

키가 폐기됨 / 세션 중 로그아웃됨

오류가 에이전트에게 원인과 setup_auth 실행을 알려줌; 새 키는 재시작 없이 즉시 적용됨

33개 도구 스키마가 모든 프롬프트에서 ~4k 토큰을 소모함

지연 도구 탐색: 기본적으로 필수 도구 7개만 노출됨; search_tools("expenses")가 전체 스키마와 함께 나머지를 요청 시 로드함

기능

  • 완전한 API 커버리지 — 공식 Splitwise OpenAPI 3.0 스펙의 27개 엔드포인트 전체, 각각 하나의 도구, 충실한 이름.

  • 워크플로 계층 — 단일 발화가 단일 호출로 이어지도록 하는 고수준 도구.

  • 셀프 서비스 인증 수명주기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자리 문자열로 된 금액; 나머지 센트 분배, 합계는 항상 정확

  • 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