Capabilities
Tip & Bill Split Calculator
Calculate a tip and divide a bill across people with optional rounding.
How this capability is exposed
- Stable ID
ursy.io:tip-split-calculator- Owning service
- URSY.io
- Runtime
- @ursy/runtime · 1.0.0
- Execution modes
- browser, node, mcp-local, remote_transient
- Remote execution
- Available at the owning service
- Remote endpoint
https://api.ursy.io/v1/run
Capability declarations describe what the service exposes. They are not a guarantee of availability or permission to execute an operation.
Accepted contract
{
"schema": "ursy.io/capability/v1",
"id": "ursy.io:tip-split-calculator",
"slug": "tip-split-calculator",
"name": "Tip & Bill Split Calculator",
"version": "1.0.0",
"summary": "Calculate a tip and divide a bill across people with optional rounding.",
"intents": [
"tip calculator split bill",
"split the bill",
"tip",
"service charge"
],
"aliases": [],
"keywords": [
"split the bill",
"tip",
"service charge"
],
"category": "everyday-tools",
"deterministic": true,
"side_effects": false,
"network_required": false,
"execution": {
"preferred": "local",
"supported": [
"browser",
"node",
"mcp-local",
"remote_transient"
],
"local_executable": true,
"remote_safe": true,
"remote_enabled": true,
"remote_endpoint": "https://api.ursy.io/v1/run"
},
"privacy": {
"input_leaves_device_by_default": false,
"payload_logged": false
},
"input_schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"bill": {
"type": "number",
"minimum": 0,
"maximum": 1000000000000000,
"description": "User-selected currency."
},
"tip": {
"type": "number",
"minimum": 0,
"maximum": 1000000000000000,
"description": "Percent."
},
"people": {
"type": "integer",
"minimum": 1,
"maximum": 1000000,
"description": "Whole people."
},
"locale": {
"type": "string",
"minLength": 2,
"maxLength": 35,
"pattern": "^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$",
"default": "en-US",
"description": "Locale for display text; numerical result fields are locale independent."
}
},
"required": [
"bill",
"tip",
"people"
],
"additionalProperties": false
},
"output_schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 26214400
},
"metrics": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"value"
],
"properties": {
"label": {
"type": "string",
"maxLength": 100
},
"value": {
"type": [
"string",
"number"
],
"maxLength": 1000
}
},
"additionalProperties": false
},
"maxItems": 10
},
"tip": {
"type": "number",
"minimum": 0,
"maximum": 1.0e+300,
"description": "Same currency as bill."
},
"total": {
"type": "number",
"minimum": 0,
"maximum": 1.0e+300,
"description": "Same currency as bill."
},
"per_person": {
"type": "number",
"minimum": 0,
"maximum": 1.0e+300,
"description": "Same currency per person."
}
},
"required": [
"text",
"metrics",
"tip",
"total",
"per_person"
],
"additionalProperties": false
},
"examples": [
{
"input": {
"bill": 80,
"tip": 15,
"people": 4
},
"output": {
"text": "Tip = bill \u00d7 rate / 100 = 12\nTotal = bill + tip = 92\nEach = total / people = 23",
"metrics": [
{
"label": "Tip",
"value": "12"
},
{
"label": "Total",
"value": "92"
},
{
"label": "Per person",
"value": "23"
}
],
"tip": 12,
"total": 92,
"per_person": 23
}
}
],
"limits": {
"max_input_bytes": 5308416,
"max_output_bytes": 26214400,
"max_json_depth": 100,
"max_csv_cells": 1000000
},
"canonical_url": "https://ursy.io/everyday-tools/tip-split-calculator/",
"descriptor_url": "https://ursy.io/wp-json/ursy-tools/v2/capabilities/tip-split-calculator",
"runtime": {
"package": "@ursy/runtime",
"version": "1.0.0",
"module": "@ursy/runtime",
"entry": "run",
"slug": "tip-split-calculator"
},
"health": {
"status": "ok",
"last_tested": "2026-09-11T17:24:33.220Z",
"runtime_version": "1.0.0",
"golden_fixtures": 1,
"node_contract_tests": 2,
"browser_verified": true,
"tests_passed": 5,
"tests_total": 5,
"test_suite": "tests/runtime-canary.test.mjs",
"browser_suite": "tests/runtime-browser.py"
},
"audit": {
"classification": "A",
"engine": "calculator",
"mode": "tip-split",
"headless_possible": true,
"notes": "Deterministic calculation/text core can be separated from the existing DOM workbench; schemas and regression fixtures remain required."
},
"assumptions": [],
"formulae": [],
"input_schema_id": "ursy.io:tip-split-calculator:input_schema",
"output_schema_id": "ursy.io:tip-split-calculator:output_schema",
"service_id": "ursy-io",
"parent_id": "",
"source_url": "https://ursy.io/wp-json/ursy-tools/v2/catalog",
"source_type": "capability_manifest",
"verified_at": "2026-10-15 05:31:11",
"revision": "df375481cb5127ddfeb9cd32e620a6584853702ccded4c835b6f31c238cedecf",
"type": "capabilities",
"source": {
"url": "https://ursy.io/wp-json/ursy-tools/v2/catalog",
"type": "capability_manifest"
},
"last_verified_at": "2026-10-15 05:31:11",
"stale": false
}