Skip to main content
Glama
nnishad

open-splitwise

by nnishad

open-splitwise

Превратите Splitwise в трекер расходов, ориентированный на агентов.

Открытый сервер Model Context Protocol (MCP), который позволяет любому ИИ-агенту — Hermes, Claude Desktop, Claude Code, Cursor или любому, кто говорит на MCP — читать балансы, разделять расходы из неструктурированного естественного языка, диагностировать свои собственные проблемы с аутентификацией и никогда не думать об ограничениях частоты запросов.

Python 3.11+ · MCP spec 2026-07-28 · stdio transport · 33 tools · lazy-loaded


Зачем

Существующие интеграции Splitwise передают модели сырое зеркало API и надеются на лучшее. Это предсказуемо проваливается: модель выдумывает ID категорий, неправильно делит ₹300 на троих, верит в 200 OK от Splitwise, когда запрос на самом деле не удался, или воспринимает ответ об ограничении частоты как ошибку, которую нужно агрессивно повторять.

open-splitwise исправляет это на уровне сервера:

Проблема для агентов

Что делает open-splitwise

«Разделить ужин с Алисой» требует 3–4 вызова API + арифметику

quick_add_expense преобразует имена → ID, вычисляет доли с точностью до цента, выбирает категорию, отправляет один раз

Две Алисы в вашем списке друзей

resolve_users возвращает списки кандидатов, чтобы агент спросил вас, какую выбрать

«Сколько я должен?» требует агрегации по нескольким конечным точкам

money_summary возвращает итоги по каждой валюте одним вызовом

Splitwise возвращает 200 OK с объектом errors

Сервер проверяет это; сбои отображаются как ошибки инструмента с полезным текстом — никогда ложного успеха

Ограничения частоты HTTP 429

Повторяются незаметно (учитывается Retry-After, экспоненциальная задержка как запасной вариант)

Ключ отозван / выход из системы в середине сессии

Ошибки сообщают агенту причину и необходимость запустить setup_auth; новые ключи применяются мгновенно, без перезапуска

Схемы 33 инструментов сжигают ~4k токенов в каждом запросе

Ленивое обнаружение инструментов: по умолчанию доступны только 7 основных инструментов; search_tools("expenses") загружает остальные по требованию с полными схемами

Related MCP server: Splitwise MCP Server

Возможности

  • Полное покрытие API — все 27 конечных точек официальной спецификации Splitwise OpenAPI 3.0, по одному инструменту на каждую, точные имена.

  • Слой рабочих процессов — высокоуровневые инструменты, чтобы одно высказывание соответствовало одному вызову.

  • Самостоятельный жизненный цикл аутентификации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

Получите ключ API на https://secure.splitwise.com/apps (Настройки аккаунта → Ключи 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. Начните с четырех инструментов рабочего процесса/аутентификации выше; добавляйте сырые инструменты API только при необходимости — фильтрация по серверам в Hermes сохраняет поверхность инструментов небольшой.

Жизненный цикл аутентификации

Сервер спроектирован так, что агенты сами диагностируют и исправляют аутентификацию, запрашивая у вас только секрет:

Ситуация

Поведение, видимое агенту

Нет ключа нигде

Каждый инструмент завершается ошибкой: «Ключ API Splitwise не настроен. Попросите пользователя создать его на 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 ≠ success: 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

Условия использования

Самообслуживаемый API Splitwise является некоммерческим согласно их условиям API. Ваш ключ API предоставляет полный доступ к вашему аккаунту — относитесь к нему как к паролю. Этот проект является независимой интеграцией и не связан с Splitwise Inc. и не одобрен ею.

Дорожная карта

  • Загрузка чеков при создании расхода

  • Помощник по расходам в нескольких валютах с учетом конвертации

  • Сводки повторяющихся расходов в виде MCP-подсказки

  • Опциональный потоковый HTTP-транспорт для размещенных/многопользовательских развертываний (+OAuth2)

  • Публикация на PyPI (uvx open-splitwise)

Вклад

Приветствуются PR — пожалуйста, соблюдайте дисциплину TDD (сначала тесты падают, затем проходят), пишите описания инструментов для моделей и никогда не логируйте секреты.

Лицензия

MIT — открыто для всех: используйте, изменяйте, публикуйте, продавайте. Просто сохраните уведомление об авторских правах.

Available Tools

7 tools
get_auth_statusA
Read-only

Report whether a Splitwise API key is configured, where it came from (stored credential vs environment), and a masked preview. Use this to diagnose auth failures.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, so the description doesn't need to restate that. It adds meaningful context beyond the annotation by specifying what the report contains (configured status, source, masked preview), which helps an agent understand the tool's output. There is no mention of side effects, but given the read-only hint, none are expected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff. The first sentence front-loads the core purpose and outputs, while the second sentence gives the practical use case. Every word earns its place, making it easy to scan and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter diagnostic tool, the description is complete. It tells the agent what it reports, where the information comes from, and when to use it. No output schema exists, but the description's list of reported items (configured status, source, masked preview) sufficiently covers what the agent can expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, and schema coverage is 100%, so the schema fully documents the parameter space. Baseline for such tools is 4, and the description appropriately doesn't try to add parameter details that don't exist. The description focuses on behavior rather than parameters, which is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Report' and identifies the exact resource: whether a Splitwise API key is configured, its source, and a masked preview. This clearly distinguishes it from sibling tools like setup_auth and logout, which perform different actions. An agent can immediately understand what this tool does without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states 'Use this to diagnose auth failures,' providing a clear directive for when to call this tool. While it doesn't mention alternatives by name, the intent is unmistakable and aligned with the diagnostic nature of the tool, separating it from setup or logout operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

logoutA
Destructive

Remove the stored Splitwise API key (log out). Environment-provided keys cannot be removed here and remain active as fallback.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide destructiveHint=true, and the description adds meaningful context beyond that: the exact behavior (removing stored key) and the edge case that environment-provided keys are unaffected. This is valuable operational information an agent needs before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that delivers the core action first and the fallback limitation second. Every word earns its place; there is no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple no-parameter logout tool, the description is nearly complete: it states the action, the limitation, and the persistent fallback behavior. It does not mention return values, but given the simplicity and destructive nature, the absence is not a significant gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so schema coverage is trivially 100%. With 0 parameters, the baseline is 4 because there is no parameter behavior to explain. The description adds no parameter details, which is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Remove the stored Splitwise API key' and equates it with 'log out'. It names the specific resource (stored API key) and is distinct from siblings like setup_auth and get_auth_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool (to remove a stored key) and importantly identifies a key limitation: environment-provided keys cannot be removed and remain active as fallback. It does not explicitly name alternative tools but the use case is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

money_summaryA
Read-only

One-call financial overview: per-currency totals of what you are owed vs what you owe across all friends, plus each friend's balance and simplified group debts. Replaces manual aggregation over get_friends/get_groups.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description adds meaningful behavioral context: it aggregates across all friends, reports totals per currency, breaks out owed vs owe, includes per-friend balances, and includes simplified group debts. It does not explain the simplification algorithm or auth prerequisites, but it discloses the core behavior sufficiently.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that front-loads the core value proposition ('One-call financial overview') and then enumerates the exact outputs. Every phrase earns its place and there is no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter read-only tool, the description is largely complete: it states scope, output categories, and even the alternative it replaces. The lack of an output schema means exact field names are not disclosed, but that is not essential for selecting and invoking this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is no parameter burden for the description to carry. The baseline for no-parameter tools is 4, and the description contains nothing misleading or unnecessary about inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific resource and purpose: a one-call financial overview with per-currency owed/owe totals, per-friend balances, and simplified group debts. It also distances itself from manual aggregation over get_friends/get_groups, making it easy for an agent to know what this tool uniquely provides.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says this replaces manual aggregation over get_friends/get_groups, giving a concrete when-to-use signal. It doesn't spell out when not to use it or name direct sibling alternatives, but the use case is clear enough for a no-parameter read-only tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

quick_add_expenseA

Agent-friendly expense creation from messy input. Participants can be names, partial names ('alice'), emails or user IDs; they are resolved automatically. Splits equally among participants plus the payer by default (set include_payer_in_split=false when the payer did not consume); pass owed_shares like {"Alice": "100.00"} for custom amounts that must sum to cost. category_name is fuzzy-matched against Splitwise categories; currency defaults to your default currency. Returns who owes what.

ParametersJSON Schema
NameRequiredDescriptionDefault
costYes
dateNo
detailsNo
paid_byNome
group_idNo
descriptionYes
owed_sharesNo
participantsYes
category_nameNo
currency_codeNo
include_payer_in_splitNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral burden. It discloses automatic participant resolution, equal-split default, payer-inclusion behavior, the custom owed_shares sum constraint, fuzzy category matching, currency defaulting, and the return value ('who owes what'). This is rich transparency, though it omits edge-case behavior like unresolvable participants or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a dense but well-organized paragraph. It front-loads the core purpose and then efficiently covers the most important configurable behaviors. Each sentence earns its place; there is no filler. It is a bit long, but justified by the need to document 11 parameters without schema aid.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 11 parameters, no output schema, and no annotations, the description is notably complete. It covers participant resolution, splitting defaults, custom shares, category handling, currency defaulting, and return shape. Minor gaps remain (e.g., what happens when participant resolution fails, group_id semantics, cost string format), but the core usage is well covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does. It explains the flexible formats for participants (names, partial names, emails, IDs), the meaning of include_payer_in_split, the required sum constraint for owed_shares, and the fuzzy-matching behavior of category_name. Some parameters like cost format and group_id semantics are left to inference, but the description adds substantial meaning to the most nuanced parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('expense creation') and the resource ('expense'), with a distinctive angle: 'Agent-friendly expense creation from messy input.' This differentiates it from the sibling tools, which are auth-related (setup_auth, get_auth_status, logout), discovery (search_tools, resolve_users), or summary (money_summary). The purpose is unambiguous and specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its usage by highlighting 'messy input' and automatic resolution, suggesting it is the go-to tool for flexible or unnormalized participant input. However, it never explicitly contrasts with alternatives or states when not to use it. It provides parameter-level guidance (e.g., include_payer_in_split=false when the payer did not consume) but no tool-selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_usersA
Read-only

Resolve human-friendly identifiers (names, partial names, emails, user IDs, 'me') into Splitwise user IDs. Ambiguous names return candidate lists so you can ask the user which one they meant.

ParametersJSON Schema
NameRequiredDescriptionDefault
queriesYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint annotation, the description discloses that ambiguous names return candidate lists for user disambiguation. It also communicates the accepted input varieties (partial names, emails, 'me'). This adds meaningful behavioral context without contradicting the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences contain zero filler and front-load the core purpose, with the behavioral nuance about ambiguous names added as a secondary sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description should clarify the return format. It mentions candidate lists for ambiguous cases but does not specify their structure, nor what happens for unambiguous matches or not-found cases. The single-parameter design keeps the gap modest, but some important call semantics remain undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the undocumented 'queries' parameter. It explains what query strings represent and the range of acceptable values, though it does not explicitly describe array semantics or limits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool resolves human-friendly identifiers (names, partial names, emails, user IDs, 'me') into Splitwise user IDs, with a specific verb and resource. It is easily distinguished from sibling tools like quick_add_expense or money_summary, as it is the only identifier-resolution tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied: use when you need to convert a user identifier into a Splitwise user ID. However, it does not explicitly state when to use this tool vs alternatives, nor does it mention any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_toolsA

Discover the hidden raw Splitwise tools on demand (lazy loading keeps this server's default token footprint tiny).

With no query: returns a compact group index. With a query (e.g. 'expenses', 'groups', 'notifications' or a tool name): returns matching tools WITH their full input schemas and registers them into this session so they can be called directly. enable=false only reports. After enabling, clients that support tools/list_changed refresh automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
enableNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so well. It discloses the side effect of registering tools into the session, the meaning of enable=false, the lazy-loading design, and the automatic tools/list_changed refresh after enabling. These are significant behavioral traits beyond the basic function.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the tool's purpose, and uses parallel 'With no query...' / 'With a query...' structure for instant comprehension. Every sentence carries useful information; the parenthetical on lazy loading is brief and justifies the design without bloating the text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter meta-tool with no annotations and no output schema, the description is nearly complete. It covers both modes, side effects, and refresh behavior, but doesn't detail the structure of the 'compact group index' or the exact response format for matching tools, which an agent might need for downstream parsing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides only names and defaults with 0% description coverage, so the description must explain the parameters and does so thoroughly. It explains query semantics (no query vs. query examples) and enable semantics (default true, enable=false only reports), adding substantial meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Discover') and resource ('hidden raw Splitwise tools'), and clearly distinguishes the tool from action-oriented siblings by explaining it is a meta-tool for discovering/registering tools. The two operational modes (with and without query) are precisely described, leaving no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: no query returns a group index, a query returns matching tools with schemas and registers them, and enable=false reports only. It does not explicitly name alternatives or when-not-to-use conditions, but the sibling tools are not interchangeable with a discovery tool, so the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

setup_authA

Configure or replace the Splitwise API key. Validates the key against Splitwise before saving, so a wrong key is never stored. Ask the user to generate a personal API key at https://secure.splitwise.com/apps and pass it here.

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the key is validated before saving and a wrong key is never stored, which is important behavioral context. It also provides a specific URL for key generation. It does not mention what happens on success (e.g., confirmation), but the core behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, with the purpose front-loaded, followed by validation behavior and user instruction. Every sentence adds value, and there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter setup tool, the description covers the purpose, the input source, and the validation side effect. It does not explicitly describe the output (none defined) or error scenarios, but the core usage is fully captured. Sibling tools exist for status checks, but that does not detract from completeness here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate for the undocumented api_key parameter. It does: it defines the key as the Splitwise API key, explains how to obtain it, and notes that validation occurs. This goes well beyond the bare schema field name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Configure or replace') and a clear resource ('Splitwise API key'). It also states the validation action, making the tool's purpose unmistakable. It is clearly distinct from siblings like get_auth_status and logout, which deal with status and session termination.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes it clear this tool is used when the user needs to set up or replace the API key, and instructs the agent to ask the user for a key. It gives clear context but does not explicitly mention when NOT to use it or name alternative tools, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 7 tool updatesv0.1.0
    • First observedget_auth_status
    • First observedlogout
    • First observedmoney_summary
    • First observedquick_add_expense
    • First observedresolve_users
    • First observedsearch_tools
    • First observedsetup_auth

TDQS

A4.4/5.0
Disambiguation5/5

Each visible tool has a clearly distinct role: auth setup/status/logout form a lifecycle, resolve_users handles identifier mapping, quick_add_expense creates expenses, and money_summary provides balances. search_tools is explicitly a discovery/meta tool, so there is no meaningful overlap between tools.

Naming Consistency4/5

Most tools follow a clear verb_noun snake_case pattern such as setup_auth, get_auth_status, resolve_users, quick_add_expense, and search_tools. logout and money_summary deviate slightly as a bare verb and a noun-noun phrase, but the naming remains easily predictable.

Tool Count5/5

Seven tools is a well-scoped count for this server. It covers authentication, user lookup, expense creation, financial summary, and dynamic tool discovery without unnecessary bloat, and the lazy-loading design keeps the default surface compact.

Completeness4/5

The visible high-level tools cover auth, user resolution, expense creation, and summary, which handles common Splitwise workflows. search_tools explicitly exposes hidden raw tools for expenses, groups, and notifications, mitigating most gaps, though direct visible listing/update/delete expense helpers would make common management tasks more straightforward.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage Splitwise expenses with atomic duplicate prevention, smart fuzzy matching, and support for flexible split ratios between two people.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables conversational control of Splitwise accounts through Claude AI, allowing users to add expenses, check group balances, record settlements, and manage payment splits using natural language commands. Supports multiple currencies and flexible splitting methods including equal, exact, and percentage-based divisions.
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables natural language management of Splitwise expenses, groups, and friends via the Model Context Protocol, with dual authentication and fuzzy name resolution.
    11
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables managing Splitwise expenses and generating premium spending analytics with category breakdowns, trends, and settlement optimization through natural language.
    MIT

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