The TeamSnap MCP Server connects Claude to your TeamSnap account, allowing you to access and manage sports team data through natural language.
Authenticate with TeamSnap via OAuth 2.0 (
teamsnap_auth), check connection status (teamsnap_auth_status), or disconnect (teamsnap_logout)List all teams you have access to, including names, IDs, sport, division, and season info (
teamsnap_list_teams)Get detailed team information for a specific team by ID (
teamsnap_get_team)View rosters including player and coach names, jersey numbers, positions, and roles (
teamsnap_get_roster)Browse events such as games, practices, and other activities, with optional date range filtering (
teamsnap_get_events), or get details for a specific event (teamsnap_get_event)Check availability/RSVPs for any event, categorizing responses as available, declined, uncertain, or no response (
teamsnap_get_availability)Secure data handling via AES-256-GCM encrypted token storage, read-only TeamSnap access, and CSRF protection
Flexible deployment — run locally, via
npx, or serverlessly on AWS Lambda with API Gateway and DynamoDB for persistent token storage
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@TeamSnap MCP ServerWhat games do we have scheduled this month?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TeamSnap MCP Server
A Model Context Protocol (MCP) server that connects Claude to your TeamSnap account. Access your teams, rosters, events, and availability data directly from Claude Desktop or CLI.
Features
Teams — List and view all your TeamSnap teams
Rosters — Get player and coach information
Events — View games, practices, and other events with date filtering
Availability — Check who's available for events, with correct handling of all RSVP states including numeric status codes
Secure — OAuth 2.0 with AES-256-GCM encrypted local storage or DynamoDB
Flexible Deployment — Run locally, via npx, or on AWS Lambda
Prerequisites
Node.js >= 18
A TeamSnap Developer OAuth application (Client ID + Secret)
Quick Start
1. Get TeamSnap OAuth Credentials
Create a new application
Set the redirect URI (see deployment options below)
Note your Client ID and Client Secret
2. Choose Your Deployment
Option A: Local MCP Server
Best for development. Requires a tunnel (e.g., Cloudflare) for the OAuth callback.
git clone https://github.com/mrelph/TeamSnapMCP.git
cd TeamSnapMCP
cp .env.example .env # Add your credentials
npm install
npm run buildAdd to Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"teamsnap": {
"command": "node",
"args": ["/path/to/TeamSnapMCP/dist/index.js"],
"env": {
"TEAMSNAP_CLIENT_ID": "your-client-id",
"TEAMSNAP_CLIENT_SECRET": "your-client-secret",
"TEAMSNAP_REDIRECT_URI": "https://your-tunnel-url/callback"
}
}
}
}Tip: Use
cloudflared tunnel --url http://localhost:8374to create an HTTPS callback URL.
Option B: npx (Connects to AWS Deployment)
Easiest option if the AWS backend is already deployed. No local clone needed.
{
"mcpServers": {
"teamsnap": {
"command": "npx",
"args": ["-y", "teamsnap-mcp"],
"env": {
"TEAMSNAP_MCP_ENDPOINT": "https://your-api-id.execute-api.us-east-1.amazonaws.com/mcp"
}
}
}
}Option C: AWS Serverless
Deploy to AWS Lambda for a permanent HTTPS callback URL — no tunnels needed.
cd aws
npm installSet environment variables:
export AWS_ACCESS_KEY_ID=your-aws-key
export AWS_SECRET_ACCESS_KEY=your-aws-secret
export AWS_REGION=us-east-1
export TEAMSNAP_CLIENT_ID=your-client-id
export TEAMSNAP_CLIENT_SECRET=your-client-secretDeploy:
node scripts/deploy.cjsThis creates:
API Gateway — Permanent HTTPS endpoint
Lambda — MCP server (Node.js 20, 256MB, 30s timeout)
DynamoDB — Token storage with TTL auto-cleanup
Then configure Claude Desktop to use the wrapper:
{
"mcpServers": {
"teamsnap": {
"command": "node",
"args": ["/path/to/TeamSnapMCP/dist/wrapper.js"],
"env": {
"TEAMSNAP_MCP_ENDPOINT": "https://your-api-id.execute-api.us-east-1.amazonaws.com/mcp"
}
}
}
}3. Authenticate
Tell Claude: "Connect to TeamSnap"
A browser window will open for OAuth login. Once you authorize, you're connected.
Available Tools
Tool | Description | Parameters |
| Connect to TeamSnap via OAuth |
|
| Check connection status | — |
| Disconnect and clear credentials | — |
| List all your teams | — |
| Get team details |
|
| Get players and coaches |
|
| Get team events |
|
| Get event details |
|
| Get event RSVP status for all members |
|
Availability Status Codes
The teamsnap_get_availability tool groups members into four categories based on the TeamSnap status_code field returned by the API:
Status | Numeric code | String code | Meaning |
|
|
| Member marked as available |
|
|
| Member declined (not attending) |
|
|
| Member is uncertain |
| null/absent | — | Member has not responded |
Note: The numeric code
0for "declined" is a falsy value in JavaScript. The server uses nullish coalescing (??) rather than the logical OR (||) operator when readingstatus_codeto ensure that a numeric0is correctly categorized as "no" rather than silently falling through to "no response".
Example Prompts
"What teams do I have in TeamSnap?"
"Show me the roster for the Jr Kraken"
"What games do we have scheduled this month?"
"Who's available for Saturday's game?"
"Who has declined Saturday's game?"
Architecture
Local Deployment:
Claude Desktop <--stdio--> MCP Server (Node.js)
|
TeamSnap API
|
localhost:8374 (OAuth callback)
AWS Deployment:
Claude Desktop <--stdio--> Wrapper --HTTPS--> API Gateway
|
Lambda
| |
DynamoDB TeamSnap APIEnvironment Variables
Variable | Required | Default | Description |
| Yes (local) | — | OAuth Client ID |
| Yes (local) | — | OAuth Client Secret |
| No |
| Local OAuth callback port |
| No | — | Override redirect URI (for tunnels) |
| AWS wrapper only | — | API Gateway endpoint URL |
Security
Encryption — Local tokens encrypted with AES-256-GCM (scrypt key derivation)
Read-only — Only
readscope requested from TeamSnapNo hardcoded credentials — All secrets loaded from environment variables
CSRF protection — OAuth state parameter validation
Auto-cleanup — DynamoDB TTL removes stale pending auth after 10 minutes
File permissions — Local credentials saved with
0600(owner-only)
Development
npm install # Install dependencies
npm run build # Compile TypeScript
npm run dev # Watch mode
node dist/index.js # Run local server
node dist/wrapper.js # Run AWS wrapperAWS deployment
cd aws
npm install
npm run build # Bundle with esbuild
node scripts/deploy.cjs # Deploy to AWSLicense
MIT
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.