Skip to main content
Glama

Server Details

Split court costs, settle up and plan fair rotations for pickup games. Free.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
99.9% over 22 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Server Listing
Sahadeva

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation4/5

rotation_plan is clearly distinct (court scheduling), and the three cost tools have documented boundaries (settle_up for 'who owes whom' with prepaid amounts, split_costs for a single booking, split_series for recurring sessions). There is mild overlap since split_costs also produces settle-up payments, but the descriptions steer selection well.

Naming Consistency4/5

All names use snake_case and are readable, with three following a verb_noun pattern (settle_up, split_costs, split_series). rotation_plan is a minor deviation in ordering (noun_verb) but still fits the overall convention.

Tool Count4/5

Four tools is a tight, well-scoped set for pickup-game logistics covering both rotation planning and cost splitting. It is on the lean side but each tool earns its place with no redundancy.

Completeness4/5

Covers the core lifecycle: rotation planning, single-event splitting, recurring-series splitting, and settlement. Roster/player management and payment recording are implicit inputs rather than tools, which is a minor gap but not a dead end.

Available Tools

4 tools
rotation_planRotation planA
Read-onlyIdempotent
Inspect

Plan fair player rotations for pickup games: who plays on each court every round and who sits out, balancing games played across the roster. Use when more players show up than court spots. Does not split money; for costs use split_costs or split_series.

NameRequiredDescriptionDefault
courtsNoNumber of courts in use at once (default 1)
roundsYesNumber of rounds to schedule, 1-50
playersYesUnique roster names, at least capacity x courts of them, e.g. ["Asha","Dev","Mira","Sam","Lee","Kai"]
capacityYesPlayers per court: 2 for singles, 4 for doubles, 10 for 5v5 basketball

Output Schema

NameRequiredDescription
noteYesWhether the rotation is perfectly balanced
formatYesFormat label with players per side and courts, e.g. '2v2 on 2 court(s)' for capacity 4 (doubles), '1v1' for capacity 2; odd capacity shows 'N player(s) per court'
roundsYesNumber of rounds scheduled
fairnessYesGames-played balance across the roster
scheduleYesOne entry per round

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is covered structurally. The description adds genuinely useful behavioral intent beyond that: the fairness objective (balancing games played) and that the plan covers both court assignments and sit-outs. It does not discuss determinism of tie-breaking or how many rounds constrain output, but with annotations and an output schema present the bar is lower.

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 tight sentences with zero filler: purpose and output first, then the usage trigger, then the explicit boundary against sibling tools. Each sentence earns its place and the most decision-relevant information is front-loaded.

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 annotations covering the safety profile and an output schema covering return shape, the description only needs to convey purpose, trigger, and boundaries — all of which it does. Minor gap: it does not hint that the roster must be at least capacity × courts (a real failure mode), though that constraint is stated in the schema.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter is documented in the schema itself (courts default, rounds 1-50, capacity meaning for singles/doubles/5v5, players roster). The description adds no syntax or format detail beyond that, so the baseline 3 for a fully documented schema is correct.

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 and resource ('Plan fair player rotations for pickup games') and spells out the concrete output semantics: who plays on each court every round, who sits out, and that games played are balanced across the roster. It also explicitly distinguishes itself from the money-oriented siblings by declaring 'Does not split money,' so an agent can separate it from split_costs/split_series without opening any 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 an explicit trigger condition ('Use when more players show up than court spots') and names the correct alternatives for the adjacent money domain ('for costs use split_costs or split_series'). That is direct when-to-use plus when-to-use-something-else routing, leaving little to inference.

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

settle_upSettle upA
Read-onlyIdempotent
Inspect

Given a shared total and who already paid what, compute each player's balance and the minimal set of payments (who pays whom, how much) to settle everyone. Use when the question is 'who owes whom'. For recurring sessions with different attendees use split_series.

NameRequiredDescriptionDefault
sharesNoOptional positive relative weights, one per participant in the same order, e.g. [2,1,1]; omit for an equal split
currencyNoCurrency code used only for display, e.g. USD, EUR, GBP (default USD)
total_costYesTotal court/venue cost in currency units, e.g. 96 for $96.00
participantsYesAt least 2 players with unique names; include 'paid' for anyone who already paid, e.g. [{"name":"Asha","paid":96},{"name":"Dev"}]

Output Schema

NameRequiredDescription
noteYesPlain-language summary of the settlement
balancesYesPer-player paid, owed share and net balance
currencyYesCurrency code used for display
transfersYesMinimal list of payments that settles the group
total_costYesTotal shared cost, rounded to cents
transfer_countYesNumber of payments in transfers

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is fully covered structurally. The description adds only that the output is a minimal payment set, which is also implied by the output schema, so incremental behavioral disclosure is modest.

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?

Two sentences: the core computation first, then the routing rule. No filler, no repetition of the schema, and the most decision-relevant content is front-loaded.

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

Completeness5/5

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

An output schema exists, so return values need not be described; annotations carry the safety profile; the schema fully documents all four parameters. Nothing an agent needs to select or call this tool is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3; the schema already documents total_cost, participants, paid, shares, and currency with examples. The description restates the total/paid concept but adds no format or edge-case detail beyond the schema.

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 computation: given a total and prior payments, compute balances and the minimal settlement payments. That verb+resource phrasing makes it immediately distinguishable from split_costs/split_series, which partition a cost rather than net out balances.

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

Usage Guidelines4/5

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

Explicitly gives the trigger ('Use when the question is "who owes whom"') and routes one alternative (split_series for recurring sessions with different attendees). It does not differentiate against split_costs or rotation_plan, which are plausible near-neighbors, so it falls short of a full when/when-not map.

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

split_costsSplit costsA
Read-onlyIdempotent
Inspect

Split one total court or venue cost across players, equally or by relative weights, and show each player's share plus the fewest payments to settle up. Use for a single booking or event. For recurring sessions with changing attendance use split_series.

NameRequiredDescriptionDefault
sharesNoOptional positive relative weights, one per participant in the same order, e.g. [2,1,1]; omit for an equal split
currencyNoCurrency code used only for display, e.g. USD, EUR, GBP (default USD)
total_costYesTotal court/venue cost in currency units, e.g. 96 for $96.00
participantsYesAt least 2 players with unique names; include 'paid' for anyone who already paid, e.g. [{"name":"Asha","paid":96},{"name":"Dev"}]

Output Schema

NameRequiredDescription
noteYesPlain-language summary of the split
splitYesWhether the split was equal or by relative weights
currencyYesCurrency code used for display
per_headYesEqual share per player, or null for a weighted split
settle_upYesFewest payments that settle everyone (empty if nobody paid yet or all square)
total_costYesTotal cost that was split, rounded to cents
participantsYesPer-player paid, owed share and balance

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds behavioral value beyond that by disclosing what the computation produces — per-player shares and a minimized set of settlement payments — which is not implied by the annotations. It stops short of any detail on ordering, rounding, or error behavior when weights do not match participants.

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 tight sentences: the action and its output first, then scope, then the alternative. Every sentence earns its place and the routing information is front-loaded.

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

Completeness5/5

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

For a pure computation tool with a complete input schema and an output schema, the description supplies everything an agent still needs: what it computes, what it returns conceptually, and when to pick it over split_series. Nothing required for correct invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents total_cost, participants, paid, shares, and currency with examples. The description only echoes the equal-vs-weights distinction, adding no syntax, ordering, or default detail beyond the schema. Baseline 3 is correct when the schema carries the parameter burden.

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 (one total court/venue cost) plus the two modes (equally or by relative weights) and the output (each share plus fewest settling payments). It also names the sibling split_series as the thing it is not, so an agent can distinguish it without opening a 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?

Explicit scope statement — 'Use for a single booking or event' — paired with an explicit exclusion and alternative: 'For recurring sessions with changing attendance use split_series.' Both the when and the when-not are stated, leaving nothing to inference.

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

split_seriesSplit seriesA
Read-onlyIdempotent
Inspect

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.

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

NameRequiredDescription
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

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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • Changedrotation_plan1 field changed
      • changedOutput schema / properties / format / description
        Previous value: -"Format label built from capacity and courts, e.g. '4v4 on 2 court(s)'"New value: +"Format label with players per side and courts, e.g. '2v2 on 2 court(s)' for capacity 4 (doubles), '1v1' for capacity 2; odd capacity shows 'N player(s) per court'"
  2. 4 tool updates
    • Changedrotation_plan13 fields changed
      • changedInput schema / properties / capacity / description
        Previous value: -"Players per court (2 singles, 4 doubles)"New value: +"Players per court: 2 for singles, 4 for doubles, 10 for 5v5 basketball"
      • addedInput schema / properties / capacity / minimum
        Added value: +1
      • changedInput schema / properties / capacity / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / courts / description
        Previous value: -"Number of courts available for the rotation plan"New value: +"Number of courts in use at once (default 1)"
      • addedInput schema / properties / courts / minimum
        Added value: +1
      • changedInput schema / properties / courts / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / players / description
        Previous value: -"Roster names"New value: +"Unique roster names, at least capacity x courts of them, e.g. [\"Asha\",\"Dev\",\"Mira\",\"Sam\",\"Lee\",\"Kai\"]"
      • addedInput schema / properties / players / minItems
        Added value: +2
      • changedInput schema / properties / rounds / description
        Previous value: -"Number of rounds to be scheduled in the rotation plan"New value: +"Number of rounds to schedule, 1-50"
      • addedInput schema / properties / rounds / maximum
        Added value: +50
      • addedInput schema / properties / rounds / minimum
        Added value: +1
      • changedInput schema / properties / rounds / type
        Previous value: -"number"New value: +"integer"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "fairness": {
        +      "description": "Games-played balance across the roster",
        +      "properties": {
        +        "max_games": {
        +          "description": "Most games any player gets",
        +          "type": "integer"
        +        },
        +        "min_games": {
        +          "description": "Fewest games any player gets",
        +          "type": "integer"
        +        },
        +        "spread": {
        +          "description": "max_games minus min_games",
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "min_games",
        +        "max_games",
        +        "spread"
        +      ],
        +      "type": "object"
        +    },
        +    "format": {
        +      "description": "Format label built from capacity and courts, e.g. '4v4 on 2 court(s)'",
        +      "type": "string"
        +    },
        +    "note": {
        +      "description": "Whether the rotation is perfectly balanced",
        +      "type": "string"
        +    },
        +    "rounds": {
        +      "description": "Number of rounds scheduled",
        +      "type": "integer"
        +    },
        +    "schedule": {
        +      "description": "One entry per round",
        +      "items": {
        +        "properties": {
        +          "courts": {
        +            "description": "Players on each court this round",
        +            "items": {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            "type": "array"
        +          },
        +          "round": {
        +            "description": "Round number starting at 1",
        +            "type": "integer"
        +          },
        +          "sitting": {
        +            "description": "Players sitting out this round",
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          }
        +        },
        +        "required": [
        +          "round",
        +          "courts",
        +          "sitting"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "format",
        +    "rounds",
        +    "fairness",
        +    "schedule",
        +    "note"
        +  ],
        +  "type": "object"
        +}
    • Changedsettle_up11 fields changed
      • changedInput schema / properties / currency / description
        Previous value: -"Currency code, as a string, ISO 4217"New value: +"Currency code used only for display, e.g. USD, EUR, GBP (default USD)"
      • changedInput schema / properties / participants / description
        Previous value: -"List of participant names, as strings in an array"New value: +"At least 2 players with unique names; include 'paid' for anyone who already paid, e.g. [{\"name\":\"Asha\",\"paid\":96},{\"name\":\"Dev\"}]"
      • addedInput schema / properties / participants / items / properties / name / description
        Added value: +"Player name, unique within the list, e.g. 'Asha'"
      • addedInput schema / properties / participants / items / properties / paid / description
        Added value: +"Amount this player already paid toward the total, in currency units (default 0)"
      • addedInput schema / properties / participants / items / properties / paid / minimum
        Added value: +0
      • addedInput schema / properties / participants / minItems
        Added value: +2
      • changedInput schema / properties / shares / description
        Previous value: -"Each participant's share of the total cost, as numbers in an array"New value: +"Optional positive relative weights, one per participant in the same order, e.g. [2,1,1]; omit for an equal split"
      • addedInput schema / properties / shares / items / exclusiveMinimum
        Added value: +0
      • changedInput schema / properties / total_cost / description
        Previous value: -"Total amount spent, as a number"New value: +"Total court/venue cost in currency units, e.g. 96 for $96.00"
      • addedInput schema / properties / total_cost / exclusiveMinimum
        Added value: +0
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "balances": {
        +      "description": "Per-player paid, owed share and net balance",
        +      "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"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "paid",
        +          "owed",
        +          "balance"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "currency": {
        +      "description": "Currency code used for display",
        +      "type": "string"
        +    },
        +    "note": {
        +      "description": "Plain-language summary of the settlement",
        +      "type": "string"
        +    },
        +    "total_cost": {
        +      "description": "Total shared cost, rounded to cents",
        +      "type": "number"
        +    },
        +    "transfer_count": {
        +      "description": "Number of payments in transfers",
        +      "type": "integer"
        +    },
        +    "transfers": {
        +      "description": "Minimal list of payments that settles the group",
        +      "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",
        +    "balances",
        +    "transfers",
        +    "transfer_count",
        +    "note"
        +  ],
        +  "type": "object"
        +}
    • Changedsplit_costs11 fields changed
      • changedInput schema / properties / currency / description
        Previous value: -"Currency code for display, default USD"New value: +"Currency code used only for display, e.g. USD, EUR, GBP (default USD)"
      • changedInput schema / properties / participants / description
        Previous value: -"Players in the split"New value: +"At least 2 players with unique names; include 'paid' for anyone who already paid, e.g. [{\"name\":\"Asha\",\"paid\":96},{\"name\":\"Dev\"}]"
      • addedInput schema / properties / participants / items / properties / name / description
        Added value: +"Player name, unique within the list, e.g. 'Asha'"
      • addedInput schema / properties / participants / items / properties / paid / description
        Added value: +"Amount this player already paid toward the total, in currency units (default 0)"
      • addedInput schema / properties / participants / items / properties / paid / minimum
        Added value: +0
      • addedInput schema / properties / participants / minItems
        Added value: +2
      • changedInput schema / properties / shares / description
        Previous value: -"Optional relative weights, one per participant"New value: +"Optional positive relative weights, one per participant in the same order, e.g. [2,1,1]; omit for an equal split"
      • addedInput schema / properties / shares / items / exclusiveMinimum
        Added value: +0
      • changedInput schema / properties / total_cost / description
        Previous value: -"Total court/venue cost"New value: +"Total court/venue cost in currency units, e.g. 96 for $96.00"
      • addedInput schema / properties / total_cost / exclusiveMinimum
        Added value: +0
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "currency": {
        +      "description": "Currency code used for display",
        +      "type": "string"
        +    },
        +    "note": {
        +      "description": "Plain-language summary of the split",
        +      "type": "string"
        +    },
        +    "participants": {
        +      "description": "Per-player paid, owed share and balance",
        +      "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"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "paid",
        +          "owed",
        +          "balance"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "per_head": {
        +      "description": "Equal share per player, or null for a weighted split",
        +      "type": [
        +        "number",
        +        "null"
        +      ]
        +    },
        +    "settle_up": {
        +      "description": "Fewest payments that settle everyone (empty if nobody paid yet or all square)",
        +      "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"
        +    },
        +    "split": {
        +      "description": "Whether the split was equal or by relative weights",
        +      "enum": [
        +        "equal",
        +        "weighted"
        +      ],
        +      "type": "string"
        +    },
        +    "total_cost": {
        +      "description": "Total cost that was split, rounded to cents",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "currency",
        +    "total_cost",
        +    "split",
        +    "per_head",
        +    "participants",
        +    "settle_up",
        +    "note"
        +  ],
        +  "type": "object"
        +}
    • Changedsplit_series15 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"
        +}
  3. 4 tool updates
    • Changedrotation_plan1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "balance": {
        -      "description": "Balance of games played by each player",
        -      "properties": {
        -        "players": {
        -          "description": "List of players with their respective games played",
        -          "items": {
        -            "properties": {
        -              "gamesPlayed": {
        -                "description": "The number of games the player has played",
        -                "type": "number"
        -              },
        -              "name": {
        -                "description": "The player's name",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "name",
        -              "gamesPlayed"
        -            ],
        -            "type": "object"
        -          },
        -          "type": "array"
        -        }
        -      },
        -      "required": [
        -        "players"
        -      ],
        -      "type": "object"
        -    },
        -    "rounds": {
        -      "description": "List of rounds with players assigned to each court",
        -      "items": {
        -        "properties": {
        -          "courts": {
        -            "description": "List of courts with players assigned to each",
        -            "items": {
        -              "properties": {
        -                "courtNumber": {
        -                  "description": "The court number",
        -                  "type": "number"
        -                },
        -                "players": {
        -                  "description": "List of players assigned to this court",
        -                  "items": {
        -                    "type": "string"
        -                  },
        -                  "type": "array"
        -                }
        -              },
        -              "required": [
        -                "courtNumber",
        -                "players"
        -              ],
        -              "type": "object"
        -            },
        -            "type": "array"
        -          },
        -          "roundNumber": {
        -            "description": "The round number",
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "roundNumber",
        -          "courts"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "rounds",
        -    "balance"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedsettle_up1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "balances": {
        -      "description": "The net balance for each participant after settling up.",
        -      "items": {
        -        "properties": {
        -          "balance": {
        -            "description": "The net balance for the participant.",
        -            "type": "number"
        -          },
        -          "name": {
        -            "description": "The name of the participant.",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "name",
        -          "balance"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "transactions": {
        -      "description": "The minimal set of transactions to settle up all balances.",
        -      "items": {
        -        "properties": {
        -          "amount": {
        -            "description": "The amount being transferred.",
        -            "type": "number"
        -          },
        -          "from": {
        -            "description": "The name of the participant paying.",
        -            "type": "string"
        -          },
        -          "to": {
        -            "description": "The name of the participant receiving.",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "from",
        -          "to",
        -          "amount"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "balances",
        -    "transactions"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedsplit_costs1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "currency": {
        -      "description": "The currency code used for display.",
        -      "type": "string"
        -    },
        -    "individual_costs": {
        -      "description": "The cost owed by each participant.",
        -      "items": {
        -        "properties": {
        -          "amount": {
        -            "description": "The amount each participant owes.",
        -            "type": "number"
        -          },
        -          "name": {
        -            "description": "The name of the participant.",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "name",
        -          "amount"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "settlements": {
        -      "description": "The list of settle-up payments to balance the costs.",
        -      "items": {
        -        "properties": {
        -          "amount": {
        -            "description": "The amount to be paid.",
        -            "type": "number"
        -          },
        -          "payee": {
        -            "description": "The name of the person receiving the payment.",
        -            "type": "string"
        -          },
        -          "payer": {
        -            "description": "The name of the person making the payment.",
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "payer",
        -          "payee",
        -          "amount"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    "total_cost": {
        -      "description": "The total cost that was split.",
        -      "type": "number"
        -    }
        -  },
        -  "required": [
        -    "total_cost",
        -    "currency",
        -    "settlements",
        -    "individual_costs"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedsplit_series1 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
  4. 3 tool updates
    • Changedrotation_plan2 fields changed
      • addedInput schema / properties / courts / description
        Added value: +"Number of courts available for the rotation plan"
      • addedInput schema / properties / rounds / description
        Added value: +"Number of rounds to be scheduled in the rotation plan"
    • Changedsettle_up4 fields changed
      • addedInput schema / properties / currency / description
        Added value: +"Currency code, as a string, ISO 4217"
      • addedInput schema / properties / participants / description
        Added value: +"List of participant names, as strings in an array"
      • addedInput schema / properties / shares / description
        Added value: +"Each participant's share of the total cost, as numbers in an array"
      • addedInput schema / properties / total_cost / description
        Added value: +"Total amount spent, as a number"
    • Changedsplit_series4 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"
  5. 4 tool updates
    • Changedrotation_plan1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "balance": {
        +      "description": "Balance of games played by each player",
        +      "properties": {
        +        "players": {
        +          "description": "List of players with their respective games played",
        +          "items": {
        +            "properties": {
        +              "gamesPlayed": {
        +                "description": "The number of games the player has played",
        +                "type": "number"
        +              },
        +              "name": {
        +                "description": "The player's name",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "name",
        +              "gamesPlayed"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "players"
        +      ],
        +      "type": "object"
        +    },
        +    "rounds": {
        +      "description": "List of rounds with players assigned to each court",
        +      "items": {
        +        "properties": {
        +          "courts": {
        +            "description": "List of courts with players assigned to each",
        +            "items": {
        +              "properties": {
        +                "courtNumber": {
        +                  "description": "The court number",
        +                  "type": "number"
        +                },
        +                "players": {
        +                  "description": "List of players assigned to this court",
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "required": [
        +                "courtNumber",
        +                "players"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "roundNumber": {
        +            "description": "The round number",
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "roundNumber",
        +          "courts"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "rounds",
        +    "balance"
        +  ],
        +  "type": "object"
        +}
    • Changedsettle_up1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "balances": {
        +      "description": "The net balance for each participant after settling up.",
        +      "items": {
        +        "properties": {
        +          "balance": {
        +            "description": "The net balance for the participant.",
        +            "type": "number"
        +          },
        +          "name": {
        +            "description": "The name of the participant.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "balance"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "transactions": {
        +      "description": "The minimal set of transactions to settle up all balances.",
        +      "items": {
        +        "properties": {
        +          "amount": {
        +            "description": "The amount being transferred.",
        +            "type": "number"
        +          },
        +          "from": {
        +            "description": "The name of the participant paying.",
        +            "type": "string"
        +          },
        +          "to": {
        +            "description": "The name of the participant receiving.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "from",
        +          "to",
        +          "amount"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "balances",
        +    "transactions"
        +  ],
        +  "type": "object"
        +}
    • Changedsplit_costs1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "currency": {
        +      "description": "The currency code used for display.",
        +      "type": "string"
        +    },
        +    "individual_costs": {
        +      "description": "The cost owed by each participant.",
        +      "items": {
        +        "properties": {
        +          "amount": {
        +            "description": "The amount each participant owes.",
        +            "type": "number"
        +          },
        +          "name": {
        +            "description": "The name of the participant.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "name",
        +          "amount"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "settlements": {
        +      "description": "The list of settle-up payments to balance the costs.",
        +      "items": {
        +        "properties": {
        +          "amount": {
        +            "description": "The amount to be paid.",
        +            "type": "number"
        +          },
        +          "payee": {
        +            "description": "The name of the person receiving the payment.",
        +            "type": "string"
        +          },
        +          "payer": {
        +            "description": "The name of the person making the payment.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "payer",
        +          "payee",
        +          "amount"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "total_cost": {
        +      "description": "The total cost that was split.",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "total_cost",
        +    "currency",
        +    "settlements",
        +    "individual_costs"
        +  ],
        +  "type": "object"
        +}
    • Changedsplit_series1 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"
        +}
  6. 4 tool updates
    • First observedrotation_plan
    • First observedsettle_up
    • First observedsplit_costs
    • First observedsplit_series

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to organize weekly football games by creating balanced teams and fixtures, managing squads and invites, setting games, tracking availability, entering results, and sharing vote links.
    1
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server that helps track expenses and calculate reimbursements for social events, making it easy to settle balances between friends.
    11
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Enables group expense management and fair settlement via MCP, allowing creation of groups, recording expenses, viewing balances, and computing minimal transfers to settle debts.
    8
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources