Live · Model Context Protocol

Run your tennis team from a chat window.

Your roster, schedule, availability, lineups, and scores already live in TLT. The MCP server hands them to Claude, ChatGPT, or any AI chat bot, so the captain work happens in conversation instead of across six browser tabs on a Saturday night.

Add this server to your MCP client

https://mcp.tennisleaguetoolkit.com/mcp
  1. Paste the URL where your client asks for a remote MCP server.
  2. Sign in to TLT and pick the teams and scopes to approve.
  3. Start asking. Revoke access from settings whenever you want.

In the chat window

What it looks like mid-season

Pick a thread, or type your own question below.

Pick a thread. Every transcript below is shown in full.

Claude · Tennis League Toolkit

Is everyone on the lineup for Sunday registered on USTA?

  • Looking up Sunday's match
  • Checking USTA registration for the lineup

No. Eight of nine are good, but Nina F. isn't on the USTA team roster yet.

Dana K.Registered
Alex M.Registered
Marco T.Registered
Nina F.Not registered
Line 3 · Sun 9:00 AM vs Gates Tennis1 to fix

She's the only one. Want me to email her the club registration link?

Show the MCP tool calls
get_matches({ teamId: 42 })
get_registration_status({ teamId: 42 })
→ { "Nina F.": "NOT_REGISTERED", ... }

Marco just texted, he can't make Sunday. Can you send out a sub request for him?

  • Finding Marco on the roster
  • Opening a sub request for Line 3

Done. Marco is marked unavailable, his slot on Line 3 is open, and the request went out to 3 eligible teammates who said they're free Sunday.

Sub request · Line 3 · Sun 9:00 AM
OutMarco T.
EmailedPriya D., Owen R., Jordan P.
First to accept takes the lineAwaiting replies

I'll leave the line empty until someone accepts. Ask me any time for the status.

Show the MCP tool calls
create_sub_request({
  teamId: 42, matchLineId: 917,
  memberId: 311, reason: "Work conflict"
})
→ { subRequest: {...}, eligibleSubCount: 3 }

Line 1 went 6–4, 7–5. Line 2 was 6–2, 6–3. Line 3 we lost 4–6, 3–6. Can you enter these and submit to USTA?

  • Recording the three line scores
  • Opening TennisLink and filling the form

Scores are in TLT. Here's what the USTA “Record A Score” page looks like filled in. Nothing has been submitted yet.

TennisLink preview · captured live
Record A Score · Match #2214887
Line 1 Doubles6–4, 7–5W
Line 2 Doubles6–2, 6–3W
Line 3 Doubles4–6, 3–6L
Team resultWin 2–1

This is irreversible once filed. Submit it?

You confirm every irreversible action.

Yes!

  • Submitting to TennisLink

Filed. USTA confirmed the result, a 2–1 win. Your standings row updates on tonight's sync.

Show the MCP tool calls
submit_usta_score_preview({ teamId: 42, matchId: 88 })
→ { screenshot: "...", snapshot: {...} }   // review only

finalize_usta_score_submission({
  teamId: 42, matchId: 88, snapshot
})   // approval-gated, irreversible

Who's in for Saturday? Put together a lineup and leave the extras on standby.

  • Reading availability for Saturday
  • Filling three doubles lines
  • Adding standbys

Eight said yes, one said no, and you need six. Here's a lineup using only players who are in:

Line 1Dana K. / Riya S.
Line 2Alex M. / Nina F.
Line 3Jordan P. / Marco T.
StandbyPriya D., Owen R.
8 available · 6 spotsSaved to TLT

Say the word and I'll send the Google Calendar invites to the six plus both standbys.

Show the MCP tool calls
get_availabilities({ teamId: 42, matchId: 91 })
update_lineups({ teamId: 42, matchId: 91, lines: [...] })
set_player_standby({ teamId: 42, matchId: 91, memberId: 308 })

Illustrative transcript. Tool names, arguments and the approval step mirror the real MCP server.

Guardrails

You stay the captain

OAuth, not a pasted key

Your client signs in through TLT and you approve scopes on a consent screen. No tokens copied around.

Team-scoped grants

Approve one team or all of them. Reading the roster is a different permission from editing lineups or sending email.

Irreversible means confirmed

Filing a score to TennisLink is a two-call flow: a preview you inspect, then an approval-gated submit.

Visible and revocable

Every connected client is listed in your TLT settings with its scopes and last-used date. Revoke in one click.

Questions

Before you connect

What is an MCP server?

MCP (Model Context Protocol) is an open standard for connecting AI assistants to outside systems. TLT runs a remote MCP server, so a client like Claude reads your team's data and takes actions through a defined set of tools instead of guessing.

Which MCP clients work with it?

Any client that supports remote MCP servers over Streamable HTTP with OAuth, including Claude and Claude Code. Add https://mcp.tennisleaguetoolkit.com/mcp and sign in when prompted.

What can it see?

Only the teams and scopes you approved at sign-in. You can review or revoke any client from the AI Integrations page in TLT settings.

Do my players need accounts?

No. Players answer availability, sub requests, and score prompts from a personal link sent by email or text. The MCP server works the captain's side of that same data. See how the rest of TLT works →

Bring your team into the chat

TLT is live today and currently invite-only. Tell us about your team and we'll follow up.

Request an invite