Partly Exact Split
Split expenses in cents with equal/weighted shares and payer advances. No account or payments.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"exact-split": {
"url": "https://partly-exact-split.paul-brousses.workers.dev/mcp"
}
}
}Remote endpoints
https://partly-exact-split.paul-brousses.workers.dev/mcpstreamable-httpWhat it can do
Tool inventory
Tools (1)
🟢calculate_shared_expenses(currency, participants, expenses)
Calculate balances and reimbursement suggestions for 2–30 participants across 1–100 expenses with different payers and equal or weighted shares. Uses integer cents, deterministic largest-remainder allocation, and offsets debts. Supported single currencies: EUR, USD, GBP, CHF, CAD; no conversion. The tool is stateless and cannot access accounts, fetch data, store results or transfer money. Use aliases when possible.
Input Schema
{
"type": "object",
"properties": {
"currency": {
"type": "string",
"enum": [
"EUR",
"USD",
"GBP",
"CHF",
"CAD"
]
},
"participants": {
"minItems": 2,
"maxItems": 30,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9_-]{0,39}$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"description": "Display label or alias. Do not include bank, email or other sensitive identifiers."
}
},
"required": [
"id",
"name"
],
"additionalProperties": false
}
},
"expenses": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"amountCents": {
"type": "integer",
"minimum": 1,
"maximum": 100000000,
"description": "Positive integer minor units: 18.34 becomes 1834. Never pass floating currency values."
},
"payerId": {
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9_-]{0,39}$"
},
"shares": {
"type": "object",
"propertyNames": {
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9_-]{0,39}$"
},
"additionalProperties": {
"type": "integer",
"minimum": 1,
"maximum": 10000
},
"description": "Participant IDs mapped to positive whole-number weights. Omit a participant to exclude them; all 1 means equal shares."
}
},
"required": [
"amountCents",
"payerId",
"shares"
],
"additionalProperties": false
}
}
},
"required": [
"currency",
"participants",
"expenses"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Output Schema
{
"type": "object",
"properties": {
"currency": {
"type": "string",
"enum": [
"EUR",
"USD",
"GBP",
"CHF",
"CAD"
]
},
"totalCents": {
"type": "integer",
"minimum": 1,
"maximum": 1000000000
},
"participants": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9_-]{0,39}$"
},
"name": {
"type": "string"
},
"paidCents": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"owedCents": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"balanceCents": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"id",
"name",
"paidCents",
"owedCents",
"balanceCents"
],
"additionalProperties": false
}
},
"transfers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fromId": {
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9_-]{0,39}$"
},
"toId": {
"type": "string",
"pattern": "^[a-zA-Z][a-zA-Z0-9_-]{0,39}$"
},
"amountCents": {
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
}
},
"required": [
"fromId",
"toId",
"amountCents"
],
"additionalProperties": false
}
}
},
"required": [
"currency",
"totalCents",
"participants",
"transfers"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Community
Evidence