Splitwise MCP server for AI agents

Live

OAUTH 2.0

SHARED EXPENSES

Accounting & Finance

Splitwise gives your agent shared expense tracking: add and split expenses across groups and friends, check who owes whom, manage groups and members, and comment on expenses.

  • Per-user credentials: each call uses the actual user's token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Splitwise
agent · Acme Q3
Run
Who owes me money on Splitwise right now?
S
splitwise_get_friends
94ms
Expense agent
3 friends owe you $214.00 in total. Sam owes the most, $120.00, mostly from the Tahoe Trip group.
Sources: 9 Splitwise friends
splitwise
9 friends
18:29
Message Claude...

Tools your expense agent reaches for on Splitwise, scoped per user.

CALL ANY TOOL
27 tools for shared expenses in Splitwise: create, split, and update expenses, list groups, friends, and balances, add people to groups, comment on expenses, and restore deleted expenses or groups.
splitwise_add_user_to_group
Add user to group
Add a person to a Splitwise group, by user ID or by name and email. Returns success, the added user, and any errors. A 200 response alone does not mean success; check the success value. Use create_group to start a new group. Pass either user_id, or first_name, last_name and email together.
Parameters
Name
Type
Required
Description
group_id
integer
Required
ID of the group to add the person to.
email
string
Optional
Email of the person to add. Required with first_name and last_name when user_id is not given.
first_name
string
Optional
First name of the person to add. Required with last_name and email when user_id is not given.
last_name
string
Optional
Last name of the person to add. Required with first_name and email when user_id is not given.
user_id
integer
Optional
ID of an existing Splitwise user to add. Use this or the name and email fields.
splitwise_create_comment
Create comment
splitwise_create_expense
Create expense
splitwise_create_friend
Create friend
splitwise_create_friends
Create friends
splitwise_create_group
Create group
splitwise_delete_comment
Delete comment
splitwise_delete_expense
Delete expense
splitwise_delete_friend
Delete friend
splitwise_delete_group
Delete group
splitwise_get_categories
Get categories
splitwise_get_comments
Get comments
splitwise_get_currencies
Get currencies
splitwise_get_current_user
Get current user
splitwise_get_expense
Get expense
splitwise_get_expenses
Get expenses
splitwise_get_friend
Get friend
splitwise_get_friends
Get friends
splitwise_get_group
Get group
splitwise_get_groups
Get groups
splitwise_get_notifications
Get notifications
splitwise_get_user
Get user
splitwise_remove_user_from_group
Remove user from group
splitwise_undelete_expense
Undelete expense
splitwise_undelete_group
Undelete group
splitwise_update_expense
Update expense
splitwise_update_user
Update user
Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Splitwise tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["splitwise"], toolNames: [
    "splitwise_get_groups",
    "splitwise_create_expense",
    "splitwise_get_expenses"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "Add a $180 dinner to the Tahoe Trip group split equally and show the group's expenses" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["splitwise"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "Add a $180 dinner to the Tahoe Trip group split equally and show the group's expenses" }],
  tools,
});

// Execute the tool call with the user's vaulted Splitwise OAuth token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["splitwise"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Add a $180 dinner to the Tahoe Trip group split equally and show the group's expenses" }],
  tools,
});

// Tool call runs with the user's vaulted Splitwise OAuth token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["splitwise"] }, pageSize: 100,
});

const agent = new Agent({
  name: "expense_agent",
  model: "gemini-2.5-pro",
  instruction: "Splitwise tools scoped to this user",
  tools,
});

await agent.run("Add a $180 dinner to the Tahoe Trip group split equally and show the group's expenses");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Splitwise tool. Click to copy, paste into your agent, done.
Expenses
Copy the prompt
Copied
Add a $180 dinner to the Tahoe Trip group, split equally.
Copy the prompt
Copied
Change last night's taxi expense to $42.
Copy the prompt
Copied
List expenses in the Roommates group from this month.
Balances
Copy the prompt
Copied
Who owes me money right now?
Copy the prompt
Copied
What is my balance with Sam?
Copy the prompt
Copied
Show recent activity on my account.
Groups and friends
Copy the prompt
Copied
Create a group called Lisbon 2026.
Copy the prompt
Copied
Add leo@example.com to the Lisbon 2026 group.
Copy the prompt
Copied
Restore the expense I deleted by mistake.
SEE HOW AUTH WORKS
Each user signs in to Splitwise once, and Scalekit stores and refreshes their tokens. Credentials stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Splitwise
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Splitwise
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Splitwise
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Splitwise
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other accounting and finance connectors.
Engineering Teams
Slack triage
Polls Slack for new messages, classifies bugs and support requests with a LangGraph router, files GitHub issues or Zendesk tickets, and confirms in the thread.
Test other agents
See the same per-user auth pattern across other accounting and finance connectors.
ENGINEERING
Slack triage agent
Classify new Slack messages as bugs or support requests, file the GitHub issue or Zendesk ticket, and reply in the thread.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Splitwise token looks fine in a demo. In production every expense and group change looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Splitwise today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Splitwise as the user or through a shared service account?
As the user. Each user signs in to Splitwise once, and Scalekit stores and refreshes their tokens. Expenses, comments, and group changes the agent makes are attributed to that user in your audit trail, not a shared service account.
Where is the Splitwise OAuth token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Refresh is automatic. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Splitwise?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the expense and balance tools without splitwise_delete_group, which deletes a group and all of its expenses. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Splitwise access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Whose expenses can the agent see?
Only what the signed-in user can see in Splitwise: expenses visible to them, their friends and balances, and the groups they belong to. splitwise_get_current_user returns that user's profile.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""splitwise"": {
""url"": ""https://mcp.scalekit.com/splitwise"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.splitwise]
url = ""https://mcp.scalekit.com/splitwise""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""splitwise"": {
""url"": ""https://mcp.scalekit.com/splitwise"",
""type"": ""http""
}
}
}