MCP server for Splitwise integration with AI-powered voice expense logging
Server has 7 tools with mixed quality. Most tools have descriptions (good), but parameter schemas are incomplete or missing type information. voice_command and text_command lack input validation guidance. add_expense has complex split_map parameter with no type constraints or validation rules. delete_expense is destructive but lacks confirmation/dry-run pattern. No tool annotations (readOnlyHint/destructiveHint) present. Error messages are generic ('error: {e}') rather than actionable recovery guidance. Output schemas are undocumented, LLMs cannot predict response structure for chaining.
Add an expense to Splitwise, supporting unequal splits, groups, and precise control. Args: amount: The total cost (e.g., "70", "10.50"). description: A brief description. friend_names: Friends to split with. Can be empty if using `group_name`. split_map: Optional dict for unequal splits. Keys=Names (or 'me'), Values=Amount/Percentage. Example: {'me': '40%', 'Alice': '60%'} or {'me': '10', 'Bob': '20'} group_name: Optional group to add expense to. payer_name: Optional name of who paid. Defaults to 'me'. exclude_names: Optional list of names to exclude from a group split.
Configure the Splitwise client with API credentials. You must provide either (consumer_key AND consumer_secret) OR api_key.
Delete an expense by its ID.
List all friends of the current user on Splitwise. Returns a formatted string list of friends.
Log in using an existing OAuth2 Access Token. Useful for integrations where authentication is handled externally (e.g. ChatGPT).
add_expense split_map parameter lacks type constraints and validation rules. Accepts dict but no documentation of valid key/value formats (percentage vs absolute amount, name resolution). LLMs will hallucinate invalid split configurations.
delete_expense is destructive but has no confirmation/dry-run pattern. No tool annotation (destructiveHint). Agents can permanently delete expenses without safeguards.
Error handling is generic ('error: {e}'). No actionable recovery guidance. When configure_splitwise fails, LLM gets 'Configuration failed: {e}' with no hint to check key format, call login_with_token, or retry.
Output schemas undocumented. voice_command returns a string; add_expense returns a string with ID embedded. LLMs cannot parse structured responses or chain tools reliably.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Process a text command for Splitwise. Interprets natural language text using Gemini and executes Splitwise actions. Use this when you already have text (e.g., from a chat message) instead of audio.
Process a voice command for Splitwise. Accepts base64-encoded audio (WAV or MP3 format), transcribes it using Deepgram, processes the intent using Gemini, and executes Splitwise actions.
configure_splitwise and login_with_token accept credentials as parameters. Credentials should use server-side secret injection (environment variables). Secrets in params leak into logs and traces.