# CourtSplit

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

- name: io.github.everyai-com/court-split
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 90/100 flags: duplicate-repo
- quality: 79/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.everyai-com%2Fcourt-split
- tools: https://api.protogrid.dev/v1/servers/io.github.everyai-com%2Fcourt-split/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "court-split": {
      "type": "http",
      "url": "https://court-split.magicteams.ai/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 80
- drivers: +repository +namespace-matches-repo +reachable +uptime-100% +updated-16d-ago -duplicate-repo(15 names)
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 79/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list carries no ttlMs, so clients re-fetch it

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 4 of 4 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 1,361 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 9 tool changes in 30 days
- fail `stability.rug_pull`: 8 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 4, about 1,361 tokens to load them all
- tool set hash: 3907aa632c66bea2ba3913f75bab1aed
- tools last changed: 2026-10-10T21:51:55.187Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.everyai-com/court-split.svg)](https://protogrid.dev/servers/io.github.everyai-com/court-split)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-10 `rotation_plan` changed (outputSchema)
- 2026-10-10 `rotation_plan` changed (description, inputSchema, outputSchema, annotations) **meaning changed**
  - before: Generate a balanced rotation plan for pickup games. Use when you need to schedule multiple rounds with equal playtime. Do NOT use when you need to split a series of games between two teams, use split_series.
  - after: 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.
- 2026-10-10 `split_series` changed (description, inputSchema, outputSchema, annotations) **meaning changed**
  - before: Split a series of sessions among attendees; use when sessions are recurring with varying attendees, not when splitting a single event among all players (use settle_up).
  - after: 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.
- 2026-10-10 `settle_up` changed (description, inputSchema, outputSchema, annotations) **meaning changed**
  - before: Calculate the minimal payments to settle up balances among participants. Use when you need to resolve debts after a shared expense. Do NOT use when you need to plan a series of payments over time, use rotation_plan instead.
  - after: 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.
- 2026-10-10 `split_costs` changed (description, inputSchema, outputSchema, annotations) **meaning changed**
  - before: Split a total cost among players when you need to divide expenses fairly. Not for tracking ongoing series; use `split_series` instead.
  - after: 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.
- 2026-10-06 `rotation_plan` changed (title, description, inputSchema, outputSchema, annotations) **meaning changed**
  - before: Plan fair rotations for pickup games: who plays each round, who sits out, and games-played balance across the roster.
  - after: Generate a balanced rotation plan for pickup games. Use when you need to schedule multiple rounds with equal playtime. Do NOT use when you need to split a series of games between two teams, use split_series.
- 2026-10-06 `split_series` changed (title, description, inputSchema, outputSchema, annotations) **meaning changed**
  - before: Account for recurring sessions where different players attend different days: each session splits only among its attendees; returns who owes what and settle-up payments.
  - after: Split a series of sessions among attendees; use when sessions are recurring with varying attendees, not when splitting a single event among all players (use settle_up).
- 2026-10-06 `settle_up` changed (title, description, inputSchema, outputSchema, annotations) **meaning changed**
  - before: Given who paid what for a total cost, compute balances and the minimal set of payments to settle everyone.
  - after: Calculate the minimal payments to settle up balances among participants. Use when you need to resolve debts after a shared expense. Do NOT use when you need to plan a series of payments over time, use rotation_plan instead.
- 2026-10-06 `split_costs` changed (title, description, outputSchema, annotations) **meaning changed**
  - before: Split one total cost across players (equally or by relative weights) and show who owes what plus the fewest settle-up payments.
  - after: Split a total cost among players when you need to divide expenses fairly. Not for tracking ongoing series; use `split_series` instead.

Full history: https://api.protogrid.dev/v1/servers/io.github.everyai-com%2Fcourt-split/changes

## Remotes

- https://court-split.magicteams.ai/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (4)

- `rotation_plan`: 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.
- `settle_up`: 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.
- `split_costs`: 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.
- `split_series`: 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.
