Skip to main content
Glama

Split series

split_series
Read-onlyIdempotent

Split a series of recurring sessions where attendance varies: each session's cost is shared only by that session's attendees, then payments already made are netted into balances and minimal settle-up transfers. Use for weekly games or leagues. For a single event use split_costs.

Input Schema

NameRequiredDescriptionDefault
playersNoOptional full roster, so players who missed every session still appear with a zero balance
currencyNoCurrency code used only for display, e.g. USD (default USD)
paymentsNoOptional list of who already paid what across the series, e.g. [{"name":"Asha","paid":120}]
sessionsYesSessions in order, each with its cost and the names who attended

Output Schema

NameRequiredDescriptionDefault
noteYesExplanation of how the series was split
playersYesPer-player paid, owed, balance and sessions attended
currencyYesCurrency code used for display
sessionsYesPer-session cost breakdown
transfersYesFewest payments that settle everyone
total_costYesSum of all session costs
session_countYesNumber of sessions processed

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed15 schema fields changed
    • changedInput schema / properties / currency / description
      Previous value: -"Currency code (ISO 4217) for all transactions"New value: +"Currency code used only for display, e.g. USD (default USD)"
    • changedInput schema / properties / payments / description
      Previous value: -"Array of payment objects, each with payer, payee, and amount"New value: +"Optional list of who already paid what across the series, e.g. [{\"name\":\"Asha\",\"paid\":120}]"
    • addedInput schema / properties / payments / items / properties / name / description
      Added value: +"Player who paid, e.g. the person who fronted court fees"
    • addedInput schema / properties / payments / items / properties / paid / description
      Added value: +"Total amount this player has paid across the series, in currency units"
    • addedInput schema / properties / payments / items / properties / paid / minimum
      Added value: +0
    • changedInput schema / properties / payments / items / required
      Previous value: -[
      -  "name"
      -]New value: +[
      +  "name",
      +  "paid"
      +]
    • changedInput schema / properties / players / description
      Previous value: -"Array of player names or IDs"New value: +"Optional full roster, so players who missed every session still appear with a zero balance"
    • changedInput schema / properties / sessions / description
      Previous value: -"Array of session objects, each with date, attendees, and cost"New value: +"Sessions in order, each with its cost and the names who attended"
    • addedInput schema / properties / sessions / items / properties / attendees / description
      Added value: +"Unique names of players present at this session"
    • addedInput schema / properties / sessions / items / properties / attendees / minItems
      Added value: +1
    • addedInput schema / properties / sessions / items / properties / cost / description
      Added value: +"Cost of this session in currency units, e.g. 60"
    • addedInput schema / properties / sessions / items / properties / cost / exclusiveMinimum
      Added value: +0
    • addedInput schema / properties / sessions / items / properties / label / description
      Added value: +"Optional session label, e.g. 'Tue 7pm' (default 'session N')"
    • addedInput schema / properties / sessions / minItems
      Added value: +1
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "currency": {
      +      "description": "Currency code used for display",
      +      "type": "string"
      +    },
      +    "note": {
      +      "description": "Explanation of how the series was split",
      +      "type": "string"
      +    },
      +    "players": {
      +      "description": "Per-player paid, owed, balance and sessions attended",
      +      "items": {
      +        "properties": {
      +          "balance": {
      +            "description": "paid minus owed; positive = gets money back, negative = owes money",
      +            "type": "number"
      +          },
      +          "name": {
      +            "description": "Player name",
      +            "type": "string"
      +          },
      +          "owed": {
      +            "description": "This player's fair share of the cost",
      +            "type": "number"
      +          },
      +          "paid": {
      +            "description": "Amount this player paid",
      +            "type": "number"
      +          },
      +          "sessions_played": {
      +            "description": "Number of sessions this player attended",
      +            "type": "integer"
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "paid",
      +          "owed",
      +          "balance",
      +          "sessions_played"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "session_count": {
      +      "description": "Number of sessions processed",
      +      "type": "integer"
      +    },
      +    "sessions": {
      +      "description": "Per-session cost breakdown",
      +      "items": {
      +        "properties": {
      +          "attendees": {
      +            "description": "Number of attendees",
      +            "type": "integer"
      +          },
      +          "cost": {
      +            "description": "Session cost",
      +            "type": "number"
      +          },
      +          "label": {
      +            "description": "Session label",
      +            "type": "string"
      +          },
      +          "per_head": {
      +            "description": "Cost per attendee for this session",
      +            "type": "number"
      +          }
      +        },
      +        "required": [
      +          "label",
      +          "cost",
      +          "attendees",
      +          "per_head"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "total_cost": {
      +      "description": "Sum of all session costs",
      +      "type": "number"
      +    },
      +    "transfers": {
      +      "description": "Fewest payments that settle everyone",
      +      "items": {
      +        "properties": {
      +          "amount": {
      +            "description": "Amount to transfer, rounded to cents",
      +            "type": "number"
      +          },
      +          "from": {
      +            "description": "Player who pays",
      +            "type": "string"
      +          },
      +          "to": {
      +            "description": "Player who receives",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "from",
      +          "to",
      +          "amount"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "currency",
      +    "total_cost",
      +    "session_count",
      +    "sessions",
      +    "players",
      +    "transfers",
      +    "note"
      +  ],
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -{
      -  "properties": {
      -    "individualOwed": {
      -      "additionalProperties": {
      -        "type": "number"
      -      },
      -      "description": "Amount each player owes after all settlements.",
      -      "type": "object"
      -    },
      -    "individualPaid": {
      -      "additionalProperties": {
      -        "type": "number"
      -      },
      -      "description": "Amount each player has paid.",
      -      "type": "object"
      -    },
      -    "settlements": {
      -      "description": "List of individual settlements between players.",
      -      "items": {
      -        "properties": {
      -          "amount": {
      -            "description": "The amount of money to be transferred from 'from' to 'to'.",
      -            "type": "number"
      -          },
      -          "currency": {
      -            "description": "The currency in which the amount is specified.",
      -            "type": "string"
      -          },
      -          "from": {
      -            "description": "The name of the player who owes money.",
      -            "type": "string"
      -          },
      -          "to": {
      -            "description": "The name of the player who is owed money.",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "from",
      -          "to",
      -          "amount",
      -          "currency"
      -        ],
      -        "type": "object"
      -      },
      -      "type": "array"
      -    },
      -    "summary": {
      -      "description": "Summary of the total amounts owed and paid.",
      -      "properties": {
      -        "totalCost": {
      -          "description": "The total cost of all sessions.",
      -          "type": "number"
      -        },
      -        "totalOwed": {
      -          "description": "The total amount still owed after payments.",
      -          "type": "number"
      -        },
      -        "totalPaid": {
      -          "description": "The total amount paid by all players.",
      -          "type": "number"
      -        }
      -      },
      -      "required": [
      -        "totalCost",
      -        "totalPaid",
      -        "totalOwed"
      -      ],
      -      "type": "object"
      -    }
      -  },
      -  "required": [
      -    "summary",
      -    "settlements",
      -    "individualOwed",
      -    "individualPaid"
      -  ],
      -  "type": "object"
      -}New value: +null
  3. Changed4 schema fields changed
    • addedInput schema / properties / currency / description
      Added value: +"Currency code (ISO 4217) for all transactions"
    • addedInput schema / properties / payments / description
      Added value: +"Array of payment objects, each with payer, payee, and amount"
    • addedInput schema / properties / players / description
      Added value: +"Array of player names or IDs"
    • addedInput schema / properties / sessions / description
      Added value: +"Array of session objects, each with date, attendees, and cost"
  4. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "individualOwed": {
      +      "additionalProperties": {
      +        "type": "number"
      +      },
      +      "description": "Amount each player owes after all settlements.",
      +      "type": "object"
      +    },
      +    "individualPaid": {
      +      "additionalProperties": {
      +        "type": "number"
      +      },
      +      "description": "Amount each player has paid.",
      +      "type": "object"
      +    },
      +    "settlements": {
      +      "description": "List of individual settlements between players.",
      +      "items": {
      +        "properties": {
      +          "amount": {
      +            "description": "The amount of money to be transferred from 'from' to 'to'.",
      +            "type": "number"
      +          },
      +          "currency": {
      +            "description": "The currency in which the amount is specified.",
      +            "type": "string"
      +          },
      +          "from": {
      +            "description": "The name of the player who owes money.",
      +            "type": "string"
      +          },
      +          "to": {
      +            "description": "The name of the player who is owed money.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "from",
      +          "to",
      +          "amount",
      +          "currency"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "summary": {
      +      "description": "Summary of the total amounts owed and paid.",
      +      "properties": {
      +        "totalCost": {
      +          "description": "The total cost of all sessions.",
      +          "type": "number"
      +        },
      +        "totalOwed": {
      +          "description": "The total amount still owed after payments.",
      +          "type": "number"
      +        },
      +        "totalPaid": {
      +          "description": "The total amount paid by all players.",
      +          "type": "number"
      +        }
      +      },
      +      "required": [
      +        "totalCost",
      +        "totalPaid",
      +        "totalOwed"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "summary",
      +    "settlements",
      +    "individualOwed",
      +    "individualPaid"
      +  ],
      +  "type": "object"
      +}
  5. First observed

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this a read-only, idempotent, non-destructive computation, so safety is covered. The description goes beyond them by disclosing the actual computation model: per-session cost sharing by that session's attendees, netting of payments already made, and minimal settle-up transfers, which tells the agent what the numbers mean. It stops short of stating rounding or edge-case handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, all load-bearing: mechanism first, typical use second, sibling routing last. No restatement of the tool name or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering the safety profile, the description only needs to convey intent and routing, which it does. Minor gaps remain around rounding of indivisible shares and degenerate inputs (e.g. a session with attendees absent from the roster), but nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning to two parameters: it clarifies that 'attendees' determines who bears each session's cost and that 'payments' are netted against those shares rather than subtracted per session. That linkage is not expressed in the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (split) and resource (a series of recurring sessions) and specifies the scope that makes it distinct: per-session attendee sharing rather than whole-series pooling. It also names the sibling it is not (split_costs) for the single-event case, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives both a positive trigger ('Use for weekly games or leagues') and an explicit alternative for the adjacent case ('For a single event use split_costs'). The only unaddressed siblings are settle_up and rotation_plan, which are not the near-miss here.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources