Zovo Tip Pool Calculator MCP
A tip pool calculator and tip out calculator for restaurant, bar, cafe and salon staff. It splits pooled tips by hours, points or role and works out tip-outs to the cent, with a printable tip sheet.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://tip-pool.zovo.one/mcpWhat its tools do
2 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (2)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Split tips by hours worked, by points x hours, by role percentage, or equally
- Calculate tip-outs where servers tip out a percent of sales or tips to other staff
- Handle cash and card tips with an optional card processing fee deducted
- Generate printable PDF tip sheets with signature lines and CSV exports
Source and maintenance
Protocol and capabilities
- Server
- tip-pool 1.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 2 advertised
- Resources
- 1 advertised
- Resource templates
- 1 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
2 advertised
calculate_tip_pool — Calculate tip pool
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.
{
"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%\"."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"label",
"method",
"method_label",
"currency",
"pool",
"people",
"roles",
"shifts",
"explanation",
"assumptions",
"warnings",
"note",
"downloads"
],
"properties": {
"note": {
"type": "string"
},
"pool": {
"type": "object",
"required": [
"cash_tips",
"card_tips",
"card_fee_percent",
"card_fee",
"total_tips",
"net_pool",
"distributed",
"leftover",
"total_hours",
"rate_per_hour",
"formatted"
],
"properties": {
"card_fee": {
"type": "string"
},
"leftover": {
"type": "string"
},
"net_pool": {
"type": "string"
},
"card_tips": {
"type": [
"string",
"null"
]
},
"cash_tips": {
"type": [
"string",
"null"
]
},
"formatted": {
"type": "object",
"required": [
"total_tips",
"net_pool",
"distributed",
"card_fee"
],
"properties": {
"card_fee": {
"type": "string"
},
"net_pool": {
"type": "string"
},
"total_tips": {
"type": "string"
},
"distributed": {
"type": "string"
}
},
"additionalProperties": false
},
"total_tips": {
"type": "string"
},
"distributed": {
"type": "string"
},
"total_hours": {
"type": [
"string",
"null"
]
},
"rate_per_hour": {
"type": [
"string",
"null"
]
},
"card_fee_percent": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
},
"label": {
"type": "string"
},
"roles": {
"type": "array",
"items": {
"type": "object",
"required": [
"role",
"percent",
"amount",
"people"
],
"properties": {
"role": {
"type": "string"
},
"amount": {
"type": "string"
},
"people": {
"type": "number"
},
"percent": {
"type": "string"
}
},
"additionalProperties": false
}
},
"method": {
"type": "string"
},
"people": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"role",
"hours",
"points",
"share_percent",
"amount",
"formatted"
],
"properties": {
"name": {
"type": "string"
},
"role": {
"type": [
"string",
"null"
]
},
"hours": {
"type": [
"string",
"null"
]
},
"amount": {
"type": "string"
},
"points": {
"type": [
"string",
"null"
]
},
"formatted": {
"type": "string"
},
"share_percent": {
"type": "string"
}
},
"additionalProperties": false
}
},
"shifts": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"total_tips",
"net_pool",
"distributed",
"people",
"rate_per_hour"
],
"properties": {
"label": {
"type": "string"
},
"people": {
"type": "number"
},
"net_pool": {
"type": "string"
},
"total_tips": {
"type": "string"
},
"distributed": {
"type": "string"
},
"rate_per_hour": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}
},
"currency": {
"type": "string"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"downloads": {
"type": "object",
"required": [
"pdf",
"csv"
],
"properties": {
"csv": {
"type": "string"
},
"pdf": {
"type": "string"
}
},
"additionalProperties": false
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"explanation": {
"type": "string"
},
"method_label": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Calculate tip pool",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}calculate_tip_out — Calculate tip-out
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.
{
"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."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"label",
"currency",
"tip_outs",
"servers",
"support_staff",
"unassigned",
"totals",
"explanation",
"assumptions",
"warnings",
"note",
"downloads"
],
"properties": {
"note": {
"type": "string"
},
"label": {
"type": "string"
},
"totals": {
"type": "object",
"required": [
"sales",
"tips",
"tip_out",
"keeps",
"received",
"formatted_tip_out"
],
"properties": {
"tips": {
"type": [
"string",
"null"
]
},
"keeps": {
"type": [
"string",
"null"
]
},
"sales": {
"type": [
"string",
"null"
]
},
"tip_out": {
"type": "string"
},
"received": {
"type": "string"
},
"formatted_tip_out": {
"type": "string"
}
},
"additionalProperties": false
},
"servers": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"sales",
"tips",
"tip_outs",
"tip_out_total",
"keeps"
],
"properties": {
"name": {
"type": "string"
},
"tips": {
"type": [
"string",
"null"
]
},
"keeps": {
"type": [
"string",
"null"
]
},
"sales": {
"type": [
"string",
"null"
]
},
"tip_outs": {
"type": "array",
"items": {
"type": "string"
}
},
"tip_out_total": {
"type": "string"
}
},
"additionalProperties": false
}
},
"currency": {
"type": "string"
},
"tip_outs": {
"type": "array",
"items": {
"type": "object",
"required": [
"role",
"percent",
"basis",
"total",
"people"
],
"properties": {
"role": {
"type": "string"
},
"basis": {
"type": "string"
},
"total": {
"type": "string"
},
"people": {
"type": "number"
},
"percent": {
"type": "string"
}
},
"additionalProperties": false
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"downloads": {
"type": "object",
"required": [
"pdf",
"csv"
],
"properties": {
"csv": {
"type": "string"
},
"pdf": {
"type": "string"
}
},
"additionalProperties": false
},
"unassigned": {
"type": "array",
"items": {
"type": "object",
"required": [
"role",
"amount"
],
"properties": {
"role": {
"type": "string"
},
"amount": {
"type": "string"
}
},
"additionalProperties": false
}
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"explanation": {
"type": "string"
},
"support_staff": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"role",
"hours",
"amount"
],
"properties": {
"name": {
"type": "string"
},
"role": {
"type": [
"string",
"null"
]
},
"hours": {
"type": [
"string",
"null"
]
},
"amount": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"title": "Calculate tip-out",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
tip-pool-widget — Zovo Tip Pool Calculator view
Interactive view for Zovo Tip Pool Calculator.
ui://widget/tip-pool-v1-1.0.0-1c3b41556be68f2426def2251395fb5469f638178080819f7531911a6f7b6763.htmltip-pool-widget-legacy — Zovo Tip Pool Calculator view (previous versions)
ui://widget/tip-pool-{version}.html30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 725 ms
- 95th percentile latency
- 725 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 725 ms · metadata changed · 2 tool(s), 1 resource(s), 1 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http zovo-tip-pool-calculator-mcp https://tip-pool.zovo.one/mcpCodex
codex mcp add zovo-tip-pool-calculator-mcp --url https://tip-pool.zovo.one/mcpCursor
{
"mcpServers": {
"zovo-tip-pool-calculator-mcp": {
"url": "https://tip-pool.zovo.one/mcp"
}
}
}Cline
{
"mcpServers": {
"zovo-tip-pool-calculator-mcp": {
"type": "streamableHttp",
"url": "https://tip-pool.zovo.one/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"zovo-tip-pool-calculator-mcp": {
"type": "http",
"url": "https://tip-pool.zovo.one/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http zovo-tip-pool-calculator-mcp https://tip-pool.zovo.one/mcpClaude Desktop
https://tip-pool.zovo.one/mcpWindsurf
{
"mcpServers": {
"zovo-tip-pool-calculator-mcp": {
"serverUrl": "https://tip-pool.zovo.one/mcp"
}
}
}Let your agent find its tools
Find servers like Zovo Tip Pool Calculator MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.