A tip pool calculator and tip out calculator for restaurant, bar, cafe and salon staff.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Use this when the user wants a tip out calculator: servers or bartenders tip out a percent of their sales or tips to support staff (bussers, bartenders, hosts, food runners, barbacks). Takes each server's sales and/or tips and the tip-out rules (e.g. busser 3% of sales, bar 1.5% of sales), plus optional support staff with roles and hours. Returns each server's tip-out per role (rounded to the cent), what each server keeps, each support person's share by hours with largest-remainder rounding so it adds up to what was tipped out, warnings, and a printable PDF tip-out sheet with signature lines plus a CSV. Does not give legal advice, compute wages or taxes, or connect to a POS. Do not use for a shared pool split by hours (use calculate_tip_pool) or for a bill split among diners.
Servers or bartenders who tip out, each with sales and/or tips. Array of {name, sales, tips}, or pasted lines, e.g. [{"name":"Ana","sales":1850,"tips":340}] or "Ana sales 1850 tips 340\nBen sales 1420 tips 260".
Who gets what share, e.g. "busser 3% of sales, bartender 1.5% of sales, host 1% of sales" or [{"role":"busser","percent":3,"basis":"sales"}]. A plain 3 or "3%" means 3% to the support staff as one group.
Optional title for the tip-out sheet, e.g. "Saturday dinner".
ISO currency code, default USD, e.g. EUR.
Optional people receiving the tip-out, with role and hours, e.g. [{"name":"Kim","role":"busser","hours":6}]. Each role's tip-out is split among its people by hours (equal if no hours).
"sales" or "tips": what a percent without "of sales" or "of tips" is taken from. Default: sales when every server has sales, else tips.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http tip-pool https://tip-pool.zovo.one/mcp
Use this when the user wants a tip out calculator: servers or bartenders tip out a percent of their sales or tips to support staff (bussers, bartenders, hosts, food runners, barbacks). Takes each server's sales and/or tips and the tip-out rules (e.g. busser 3% of sales, bar 1.5% of sales), plus optional support staff with roles and hours. Returns each server's tip-out per role (rounded to the cent), what each server keeps, each support person's share by hours with largest-remainder rounding so it adds up to what was tipped out, warnings, and a printable PDF tip-out sheet with signature lines plus a CSV. Does not give legal advice, compute wages or taxes, or connect to a POS. Do not use for a shared pool split by hours (use calculate_tip_pool) or for a bill split among diners.
| Argument | Type | Description |
|---|---|---|
| label | string | null | Optional title for the tip-out sheet, e.g. "Saturday dinner". |
| servers* | any | Servers or bartenders who tip out, each with sales and/or tips. Array of {name, sales, tips}, or pasted lines, e.g. [{"name":"Ana","sales":1850,"tips":340}] or "Ana sales 1850 tips 340\nBen sales 1420 tips 260". |
| currency | string | null | ISO currency code, default USD, e.g. EUR. |
| tip_outs* | any | Who gets what share, e.g. "busser 3% of sales, bartender 1.5% of sales, host 1% of sales" or [{"role":"busser","percent":3,"basis":"sales"}]. A plain 3 or "3%" means 3% to the support staff as one group. |
| support_staff | any | Optional people receiving the tip-out, with role and hours, e.g. [{"name":"Kim","role":"busser","hours":6}]. Each role's tip-out is split among its people by hours (equal if no hours). |
| tip_out_basis | string | null | "sales" or "tips": what a percent without "of sales" or "of tips" is taken from. Default: sales when every server has sales, else tips. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"servers",
"tip_outs"
],
"properties": {
"label": {
"type": [
"string",
"null"
],
"description": "Optional title for the tip-out sheet, e.g. \"Saturday dinner\"."
},
"servers": {
"anyOf": [
{
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "Person's name, e.g. \"Ana\"."
},
"role": {
"type": [
"string",
"null"
],
"description": "Role or position, e.g. \"server\", \"busser\", \"bartender\", \"stylist\"."
},
"hours": {
"type": [
"number",
"string",
"null"
],
"description": "Hours worked, e.g. 6.5, \"6:30\" or \"6h 30m\"."
},
"shift": {
"type": [
"string",
"null"
],
"description": "Shift or day this row belongs to, for a week view, e.g. \"Mon\" or \"Fri dinner\"."
},
"points": {
"type": [
"number",
"string",
"null"
],
"description": "Tip points for the points method, e.g. 2 or 1.5."
}
},
"additionalProperties": {}
}
]
}
},
{
"type": "string"
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
],
"description": "Servers or bartenders who tip out, each with sales and/or tips. Array of {name, sales, tips}, or pasted lines, e.g. [{\"name\":\"Ana\",\"sales\":1850,\"tips\":340}] or \"Ana sales 1850 tips 340\\nBen sales 1420 tips 260\"."
},
"currency": {
"type": [
"string",
"null"
],
"description": "ISO currency code, default USD, e.g. EUR."
},
"tip_outs": {
"anyOf": [
{
"type": "array",
"items": {}
},
{
"type": "string"
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
{
"type": "number"
}
],
"description": "Who gets what share, e.g. \"busser 3% of sales, bartender 1.5% of sales, host 1% of sales\" or [{\"role\":\"busser\",\"percent\":3,\"basis\":\"sales\"}]. A plain 3 or \"3%\" means 3% to the support staff as one group."
},
"support_staff": {
"anyOf": [
{
"anyOf": [
{
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "Person's name, e.g. \"Ana\"."
},
"role": {
"type": [
"string",
"null"
],
"description": "Role or position, e.g. \"server\", \"busser\", \"bartender\", \"stylist\"."
},
"hours": {
"type": [
"number",
"string",
"null"
],
"description": "Hours worked, e.g. 6.5, \"6:30\" or \"6h 30m\"."
},
"shift": {
"type": [
"string",
"null"
],
"description": "Shift or day this row belongs to, for a week view, e.g. \"Mon\" or \"Fri dinner\"."
},
"points": {
"type": [
"number",
"string",
"null"
],
"description": "Tip points for the points method, e.g. 2 or 1.5."
}
},
"additionalProperties": {}
}
]
}
},
{
"type": "string"
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
]
},
{
"type": "null"
}
],
"description": "Optional people receiving the tip-out, with role and hours, e.g. [{\"name\":\"Kim\",\"role\":\"busser\",\"hours\":6}]. Each role's tip-out is split among its people by hours (equal if no hours)."
},
"tip_out_basis": {
"type": [
"string",
"null"
],
"description": "\"sales\" or \"tips\": what a percent without \"of sales\" or \"of tips\" is taken from. Default: sales when every server has sales, else tips."
}
}
}Use this when the user wants a tip pool calculator: split pooled tips among restaurant, bar, cafe or salon staff by hours worked (how to split tips by hours), by points x hours, by role percentage (e.g. 70% servers, 20% bussers, 10% bar, then by hours inside each role), or equally. Accepts cash and card tips with an optional card fee percent, a staff list as objects or pasted text/CSV, and an optional week view (shift_tips plus a shift on each staff row). Returns each person's share in cents with largest-remainder rounding so shares add up to the pool, the per-hour rate, an explanation, warnings (e.g. a manager in the pool), and a printable PDF tip sheet with signature lines plus a CSV. Does not give legal advice, decide who may be in a pool, compute wages or taxes, or connect to a POS. Do not use for splitting a restaurant bill among diners.
| Argument | Type | Description |
|---|---|---|
| label | string | null | Optional title for the tip sheet, e.g. "Friday dinner, Oct 23" or "Week of Oct 19". |
| staff | any | Everyone sharing the pool. Array of {name, role, hours, points, shift}, or one pasted block (one person per line, CSV with a header row is fine), e.g. [{"name":"Ana","role":"server","hours":6.5},{"name":"Ben","role":"busser","hours":5}] or "Ana server 6.5\nBen busser 5". |
| method | string | null | How to split: "hours" (by hours worked), "points" (points x hours), "role_percent" (fixed percent per role, e.g. 70/20/10, then by hours inside each role), or "equal". Default: chosen from the data (role_percentages -> role_percent, points -> points, hours -> hours, else equal). |
| shifts | any | Alternative week view: one item per shift with its own tips and staff, e.g. [{"label":"Fri","total_tips":600,"staff":"Ana 5, Ben 5"},{"label":"Sat","total_tips":900,"staff":"Ana 6, Cara 6"}]. |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 8, 2026.
| currency | string | null | ISO currency code, default USD, e.g. EUR, GBP, CAD. |
| round_to | string | null | "cent" (default) or "dollar" to pay whole dollars in cash; any coins left over are reported, not assigned. |
| card_tips | number | string | null | Credit card tips, e.g. 820.50. Optional; the card fee applies to these. |
| cash_tips | number | string | null | Cash tips, e.g. 420. Optional. |
| shift_tips | any | Week view: tips per shift, with each staff row's shift set, e.g. {"Mon":420,"Tue":385.5} or "Mon 420, Tue 385.50". Each shift is split on its own, then totals are added per person. |
| total_tips | number | string | null | Total tips to split (cash plus card), e.g. 1240.50 or "$1,240.50". Leave out when cash_tips and card_tips are given, or when shift_tips is used. |
| role_points | any | Points per role for the points method when people have no points of their own, e.g. {"server":10,"bartender":8,"busser":5}. |
| card_fee_percent | number | string | null | Card processing fee percent to deduct from card tips before splitting, e.g. 2.9. Default none. |
| role_percentages | any | Percent of the pool per role for method role_percent, e.g. {"server":70,"busser":20,"bartender":10} or "servers 70%, bussers 20%, bar 10%". |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"label": {
"type": [
"string",
"null"
],
"description": "Optional title for the tip sheet, e.g. \"Friday dinner, Oct 23\" or \"Week of Oct 19\"."
},
"staff": {
"anyOf": [
{
"anyOf": [
{
"type": "array",
"items": {
"anyOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "Person's name, e.g. \"Ana\"."
},
"role": {
"type": [
"string",
"null"
],
"description": "Role or position, e.g. \"server\", \"busser\", \"bartender\", \"stylist\"."
},
"hours": {
"type": [
"number",
"string",
"null"
],
"description": "Hours worked, e.g. 6.5, \"6:30\" or \"6h 30m\"."
},
"shift": {
"type": [
"string",
"null"
],
"description": "Shift or day this row belongs to, for a week view, e.g. \"Mon\" or \"Fri dinner\"."
},
"points": {
"type": [
"number",
"string",
"null"
],
"description": "Tip points for the points method, e.g. 2 or 1.5."
}
},
"additionalProperties": {}
}
]
}
},
{
"type": "string"
},
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
]
},
{
"type": "null"
}
],
"description": "Everyone sharing the pool. Array of {name, role, hours, points, shift}, or one pasted block (one person per line, CSV with a header row is fine), e.g. [{\"name\":\"Ana\",\"role\":\"server\",\"hours\":6.5},{\"name\":\"Ben\",\"role\":\"busser\",\"hours\":5}] or \"Ana server 6.5\\nBen busser 5\"."
},
"method": {
"type": [
"string",
"null"
],
"description": "How to split: \"hours\" (by hours worked), \"points\" (points x hours), \"role_percent\" (fixed percent per role, e.g. 70/20/10, then by hours inside each role), or \"equal\". Default: chosen from the data (role_percentages -> role_percent, points -> points, hours -> hours, else equal)."
},
"shifts": {
"anyOf": [
{
"type": "array",
"items": {}
},
{
"type": "null"
}
],
"description": "Alternative week view: one item per shift with its own tips and staff, e.g. [{\"label\":\"Fri\",\"total_tips\":600,\"staff\":\"Ana 5, Ben 5\"},{\"label\":\"Sat\",\"total_tips\":900,\"staff\":\"Ana 6, Cara 6\"}]."
},
"currency": {
"type": [
"string",
"null"
],
"description": "ISO currency code, default USD, e.g. EUR, GBP, CAD."
},
"round_to": {
"type": [
"string",
"null"
],
"description": "\"cent\" (default) or \"dollar\" to pay whole dollars in cash; any coins left over are reported, not assigned."
},
"card_tips": {
"type": [
"number",
"string",
"null"
],
"description": "Credit card tips, e.g. 820.50. Optional; the card fee applies to these."
},
"cash_tips": {
"type": [
"number",
"string",
"null"
],
"description": "Cash tips, e.g. 420. Optional."
},
"shift_tips": {
"anyOf": [
{
"anyOf": [
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
{
"type": "string"
},
{
"type": "array",
"items": {}
}
]
},
{
"type": "null"
}
],
"description": "Week view: tips per shift, with each staff row's shift set, e.g. {\"Mon\":420,\"Tue\":385.5} or \"Mon 420, Tue 385.50\". Each shift is split on its own, then totals are added per person."
},
"total_tips": {
"type": [
"number",
"string",
"null"
],
"description": "Total tips to split (cash plus card), e.g. 1240.50 or \"$1,240.50\". Leave out when cash_tips and card_tips are given, or when shift_tips is used."
},
"role_points": {
"anyOf": [
{
"anyOf": [
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"number",
"string"
]
}
},
{
"type": "string"
},
{
"type": "array",
"items": {}
}
]
},
{
"type": "null"
}
],
"description": "Points per role for the points method when people have no points of their own, e.g. {\"server\":10,\"bartender\":8,\"busser\":5}."
},
"card_fee_percent": {
"type": [
"number",
"string",
"null"
],
"description": "Card processing fee percent to deduct from card tips before splitting, e.g. 2.9. Default none."
},
"role_percentages": {
"anyOf": [
{
"anyOf": [
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"number",
"string"
]
}
},
{
"type": "string"
},
{
"type": "array",
"items": {}
}
]
},
{
"type": "null"
}
],
"description": "Percent of the pool per role for method role_percent, e.g. {\"server\":70,\"busser\":20,\"bartender\":10} or \"servers 70%, bussers 20%, bar 10%\"."
}
}
}