open-splitwise
open-splitwise
Convierte Splitwise en un rastreador de gastos nativo para agentes.
Un servidor abierto del Model Context Protocol (MCP) que permite a cualquier agente de IA — Hermes, Claude Desktop, Claude Code, Cursor, o cualquier cosa que hable MCP — leer saldos, dividir gastos a partir de lenguaje natural desordenado, diagnosticar sus propios problemas de autenticación y no preocuparse nunca por los límites de tasa.
Python 3.11+ · MCP spec 2026-07-28 · stdio transport · 33 tools · lazy-loaded
Por qué
Las integraciones existentes de Splitwise le dan al modelo un espejo crudo de la API y esperan lo mejor. Eso falla de maneras predecibles: el modelo inventa IDs de categoría, divide mal ₹300 entre tres, cree en el 200 OK de Splitwise cuando la solicitud realmente falló, o trata una respuesta de límite de tasa como un error que debe reintentar agresivamente.
open-splitwise soluciona esto en la capa del servidor:
Problema para los agentes | Lo que hace open-splitwise |
«Dividir la cena con Alice» requiere 3–4 llamadas a la API + aritmética |
|
Dos Alices en tu lista de amigos |
|
«¿Cuánto debo?» necesita agregación de múltiples endpoints |
|
Splitwise devuelve | El servidor lo comprueba; los fallos aparecen como errores de herramienta con texto accionable — nunca un falso éxito |
Límites de tasa HTTP 429 | Se reintenta de forma invisible (se respeta |
Clave revocada / sesión cerrada a mitad de sesión | Los errores le dicen al agente la causa y que ejecute |
33 esquemas de herramientas queman ~4k tokens en cada prompt | Descubrimiento perezoso de herramientas: solo se exponen 7 herramientas esenciales por defecto; |
Características
Cobertura completa de la API — los 27 endpoints de la especificación oficial Splitwise OpenAPI 3.0, una herramienta para cada uno, nombres fieles.
Capa de flujo de trabajo — herramientas de alto nivel para que una sola expresión se corresponda con una sola llamada.
Ciclo de vida de autenticación de autoservicio —
setup_authvalida una clave en vivo contra Splitwise antes de almacenarla (las claves incorrectas nunca se persisten),get_auth_statusexplica qué está configurado,logoutborra las credenciales. La reautenticación funciona a mitad de sesión.Errores honestos — cada modo de fallo (persona no resuelta, discrepancia en la suma de participaciones, categoría desconocida, clave revocada, reintentos agotados) devuelve texto que le dice al agente exactamente qué ocurrió y qué hacer a continuación.
Anotaciones seguras por defecto — las lecturas llevan
readOnlyHint, los borrados destructivos llevandestructiveHint, según la semántica de MCP 2026-07-28. Las herramientas se registran en orden determinista para un descubrimiento amigable con la caché.Secretos locales primero — la clave de API se almacena en
~/.config/splitwise-mcp/credentials.json, modo0600, escrituras atómicas, nunca se devuelve (solo vistas previas enmascaradas).
Inicio rápido
git clone https://github.com/<you>/open-splitwise.git
cd open-splitwise
uv syncEjecútalo de forma independiente (stdio):
uv run open-splitwise # starts with no key configured — see auth belowObtén una clave de API en https://secure.splitwise.com/apps (Configuración de la cuenta → Claves de API).
Conecta cualquier cliente MCP
Bloque stdio genérico (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>" }
}
}
}Conecta Hermes Agent
Añade a ~/.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: falseLuego /reload-mcp. Comienza con las cuatro herramientas de flujo de trabajo/autenticación anteriores; añade herramientas de API crudas solo cuando sea necesario — el filtrado por servidor de Hermes mantiene la superficie de herramientas pequeña.
Ciclo de vida de autenticación
El servidor está diseñado para que los agentes diagnostiquen y arreglen la autenticación por sí mismos, pidiéndote solo el secreto:
Situación | Comportamiento visible para el agente |
Sin clave en ningún sitio | Toda herramienta falla con: «No hay ninguna clave de API de Splitwise configurada. Pide al usuario que genere una en secure.splitwise.com/apps y luego llama a setup_auth.» |
El usuario proporciona una clave |
|
Clave revocada / cuenta desconectada (HTTP 401/403) | Las herramientas fallan con «la clave puede haber sido revocada, expirada, o la cuenta se desconectó… pide al usuario una clave nueva y llama a setup_auth» |
Diagnóstico |
|
Cambiar de cuenta |
|
La resolución de claves ocurre por solicitud: credencial almacenada → variable de entorno SPLITWISE_API_KEY → ninguna. Una clave recién guardada surte efecto inmediatamente en el proceso en ejecución — cero reinicios.
Las credenciales viven en ~/.config/splitwise-mcp/credentials.json (modo 0600). Sobrescribe el directorio con SPLITWISE_MCP_CONFIG_DIR (útil para pruebas o configuraciones de múltiples perfiles).
Ergonomía para agentes
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— acepta nombres/nombres parciales/emails/IDs; las participaciones iguales se calculan con los céntimos restantes distribuidos de forma determinista; lasowed_sharespersonalizadas se validan para que sumen exactamente; el pagador se incluye por defecto (include_payer_in_split=falsecuando no consumió); la moneda se toma por defecto de tu perfil.resolve_users— coincidencia exacta de email, coincidencia de nombre completo, nombre propio único, respaldo por subcadena; la ambigüedad devuelve candidatos en lugar de adivinar.money_summary—owed_to_you/you_owe/netpor moneda, saldos a nivel de amigos y deudas simplificadas de grupo que te involucran.
Referencia de herramientas (33)
Grupo | Herramientas |
Flujos de trabajo |
|
Usuarios |
|
Grupos |
|
Amigos |
|
Gastos |
|
Comentarios |
|
Notificaciones |
|
Otros |
|
Autenticación |
|
* anotadas con destructiveHint=true; todas las herramientas get_* anotadas con readOnlyHint=true. Prefiere las herramientas de flujo de trabajo sobre sus contrapartes crudas cuando ambas existan.
Límites de tasa
Splitwise responde HTTP 429 cuando se limita la tasa. open-splitwise reintenta automáticamente: se respeta la cabecera Retry-After tal cual; de lo contrario, retroceso exponencial (0,5 s duplicando, con tope de 30 s), hasta 3 intentos por defecto. Los agentes ven un error solo si se agotan todos los intentos — y ese error dice que se ralentice, no que reintente a ciegas.
Configuración
Variable de entorno | Por defecto | Propósito |
| – | Clave de arranque (las credenciales almacenadas tienen prioridad) |
|
| Dónde vive |
|
| Intentos de reintento 429 antes de mostrar el error |
|
|
|
Peculiaridades de Splitwise manejadas por ti
Los parámetros de matriz se aplanan a la extraña codificación
users__{index}__{property}de Splitwise200 OK ≠ éxito: se compruebaerrors{}/success:falseen cada mutaciónDinero como cadenas decimales con 2 decimales; los céntimos restantes se distribuyen, las sumas siempre exactas
category_iddebe ser una subcategoría — se aplica mediante resolución difusa de nombresLos saldos/deudas se leen de
balance[]/simplified_debtsprecalculados (nunca se recalculan)«Settle up» es solo un gasto con
payment:true(no existe un endpoint dedicado)OAuth2 existe pero está deliberadamente fuera de alcance: las claves de API personales encajan en el flujo de agente-pregunta-al-usuario; OAuth necesita una URI de redirección + navegador (solo implementaciones alojadas)
Arquitectura
┌─────────────── 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.0Desarrollo
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 pathsConstruido con test-first (TDD estricto): cada comportamiento anterior tiene una procedencia de prueba que falla primero. Estructura:
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.pyTérminos de uso
La API de autoservicio de Splitwise es no comercial según sus términos de API. Tu clave de API otorga acceso completo a tu cuenta — trátala como una contraseña. Este proyecto es una integración independiente y no está afiliado ni respaldado por Splitwise Inc.
Hoja de ruta
Subida de recibos al crear gastos
Asistente de gastos multidivisa con conocimiento de conversión
Resúmenes de gastos recurrentes como prompt de MCP
Transporte HTTP Streamable opcional para implementaciones alojadas/multiusuario (+OAuth2)
Publicar en PyPI (
uvx open-splitwise)
Contribuciones
Se aceptan PRs — por favor mantén la disciplina TDD (las pruebas fallan primero, luego pasan), mantén las descripciones de herramientas escritas para modelos, y nunca registres secretos.
Licencia
MIT — abierto para todos: úsalo, modifícalo, publícalo, véndelo. Solo conserva el aviso de copyright.
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