{"server":{"name":"io.github.everyai-com/court-split","title":"CourtSplit","$schema":"https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json","remotes":[{"url":"https://court-split.magicteams.ai/mcp","type":"streamable-http"}],"version":"1.0.0","repository":{"url":"https://github.com/everyai-com/sahadeva","source":"github"},"description":"Split court costs, settle up and plan fair rotations for pickup games. Free."},"_meta":{"io.modelcontextprotocol.registry/official":{"status":"active","isLatest":true,"updatedAt":"2026-10-04T12:30:03.723969Z","publishedAt":"2026-10-04T12:30:03.723969Z","statusChangedAt":"2026-10-04T12:30:03.723969Z"},"dev.protogrid/connectability":{"class":"R0","autonomous":true,"human_steps":[],"preferred":{"kind":"remote","idx":0},"remotes":[{"idx":0,"url":"https://court-split.magicteams.ai/mcp","transport":"streamable-http","templated":false,"headers":[],"auth":{"type":"none","location":null,"secret_name":null,"oauth":null},"protocol":{"supported_versions":["2026-07-28","2025-11-25","2025-06-18","2025-03-26","2024-11-05"],"stateless":true},"health":{"reachable":true,"uptime_30d":1,"latency_ms_p50":219,"consecutive_failures":0,"last_probe_at":"2026-10-20T06:46:38.091Z","last_ok_at":"2026-10-20T06:46:38.091Z"}}],"packages":[]},"dev.protogrid/tools":[{"name":"rotation_plan","title":"Rotation plan","description":"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.","annotations":{"title":"Rotation plan","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T06:46:38.091Z"},{"name":"settle_up","title":"Settle up","description":"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.","annotations":{"title":"Settle up","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T06:46:38.091Z"},{"name":"split_costs","title":"Split costs","description":"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.","annotations":{"title":"Split costs","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T06:46:38.091Z"},{"name":"split_series","title":"Split series","description":"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.","annotations":{"title":"Split series","readOnlyHint":true,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false},"source":"probe","observed_at":"2026-10-20T06:46:38.091Z"}],"dev.protogrid/trust":{"score":90,"components":{"hygiene":80,"liveness":100,"freshness":100,"provenance":80},"drivers":["+repository","+namespace-matches-repo","+reachable","+uptime-100%","+updated-16d-ago","-duplicate-repo(15 names)"],"flags":["duplicate-repo"],"blocked":false,"computed_at":"2026-10-20T08:16:33.341Z","disclaimer":"Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed."},"dev.protogrid/quality":{"score":79,"label":"good","components":{"auth":null,"hygiene":100,"protocol":88,"stability":25,"dependencies":null},"checks":[{"id":"protocol.modern","detail":"supports 2026-07-28 (server/discover)","status":"pass","category":"protocol"},{"id":"protocol.stateless","detail":"answers without a session","status":"pass","category":"protocol"},{"id":"protocol.transport","detail":"streamable HTTP","status":"pass","category":"protocol"},{"id":"protocol.list_ttl","detail":"tools/list carries no ttlMs, so clients re-fetch it","status":"warn","category":"protocol"},{"id":"auth.prm","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.as_metadata","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.cimd","detail":"no remote uses OAuth","status":"na","category":"auth"},{"id":"auth.secret_in_url","detail":"no templated URL","status":"na","category":"auth"},{"id":"tools.descriptions","detail":"every tool has a description","status":"pass","category":"hygiene"},{"id":"tools.description_length","detail":"descriptions are concise","status":"pass","category":"hygiene"},{"id":"tools.schemas","detail":"every tool has an object input schema","status":"pass","category":"hygiene"},{"id":"tools.annotations","detail":"4 of 4 tools declare readOnlyHint or destructiveHint","status":"pass","category":"hygiene"},{"id":"tools.directory_hints","detail":"every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint","status":"pass","category":"hygiene"},{"id":"tools.token_cost","detail":"about 1,361 tokens to load every tool","status":"pass","category":"hygiene"},{"id":"tools.api_dump","detail":"tools are not a one-to-one API dump","status":"pass","category":"hygiene"},{"id":"stability.changes","detail":"9 tool changes in 30 days","status":"warn","category":"stability"},{"id":"stability.rug_pull","detail":"8 tools kept their name but changed most of their description in 30 days; review before trusting them","status":"fail","category":"stability"},{"id":"deps.known_vulns","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.mcp_sdk_version","detail":"no npm or PyPI package","status":"na","category":"dependencies"},{"id":"deps.resolvable","detail":"no npm or PyPI package","status":"na","category":"dependencies"}],"drivers":["-stability.rug_pull","~protocol.list_ttl","~stability.changes"],"flags":[],"tool_count":4,"token_estimate":1361,"tools_hash":"3907aa632c66bea2ba3913f75bab1aed","tools_changed_at":"2026-10-10T21:51:55.187Z","computed_at":"2026-10-20T07:53:49.483Z","disclaimer":"Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed."},"dev.protogrid/identity":{"canonical_id":"io.github.everyai-com/court-split","aliases":["io.github.everyai-com/ai-ready","io.github.everyai-com/fee-fighter","io.github.everyai-com/festival-finder","io.github.everyai-com/flight-fix","io.github.everyai-com/invoice-gen","io.github.everyai-com/league-night","io.github.everyai-com/lease-break","io.github.everyai-com/party-plan","io.github.everyai-com/recipe-scale","io.github.everyai-com/report-raja"],"alias_count":14,"repository_key":"github:everyai-com/sahadeva","owner":{"verified":false,"method":null,"since":null}}},"next_actions":[{"action":"list_tools","description":"Every current tool with input schemas","href":"/v1/servers/io.github.everyai-com%2Fcourt-split/tools","arguments":{"name":"io.github.everyai-com/court-split"}},{"action":"get_connection","description":"Minimal connection block for the preferred remote or package","href":"/v1/servers/io.github.everyai-com%2Fcourt-split/connection?target=mcpServers","arguments":{"name":"io.github.everyai-com/court-split","target":"mcpServers"}},{"action":"search","description":"Find other servers by intent","href":"/v1/search?q={query}","arguments":{"q":"{query}"}}]}