Skip to main content
Glama
mrelph

TeamSnap MCP Server

by mrelph

TeamSnap MCP 서버

Claude를 귀하의 TeamSnap 계정에 연결하는 Model Context Protocol (MCP) 서버입니다. Claude Desktop 또는 CLI에서 직접 팀, 로스터, 이벤트, 가용성, 자원봉사자 등록, 팀 커뮤니케이션을 읽고 관리하세요.

기능

  • 21개의 읽기 도구 — 팀, 로스터, 이벤트, 가용성, 위치, 연락처, 공지사항, 할당, 상대 팀, 순위, 통계, 포럼, 캘린더 및 사용자 지정 필드

  • 8개의 쓰기 도구 — RSVP 설정, 이벤트 생성/업데이트/취소, 추적 항목(간식, 자원봉사자, 카풀) 생성 및 할당, 팀 메시지 전송, 방송 이메일/푸시 공지사항 전송

  • 모든 쓰기 작업에 대한 안전 장치 — 기본적으로 preview: true가 설정되어 있어 TeamSnap을 호출하지 않고 페이로드를 반환합니다. 파괴적인 쓰기 작업은 추가로 confirm: true가 필요합니다. POST 도구는 선택적인 idempotency_key를 지원합니다. 쓰기 도구 및 안전을 참조하세요.

  • 현지화된 이벤트 시간 — 이벤트는 항상 자체 시간대로 반환됩니다. 여행을 위한 선택적 viewer-timezone 필드가 있습니다.

  • 보안 — AES-256-GCM으로 암호화된 로컬 저장소 또는 DynamoDB를 사용하는 OAuth 2.0

  • 유연한 배포 — 로컬, npx 또는 AWS Lambda를 통해 실행

Related MCP server: WHOOP MCP Server

사전 요구 사항

빠른 시작

1. TeamSnap OAuth 자격 증명 받기

  1. TeamSnap 개발자 포털로 이동합니다.

  2. 새 애플리케이션을 만듭니다.

  3. 리디렉션 URI를 설정합니다(아래 배포 옵션 참조).

  4. 클라이언트 ID클라이언트 시크릿을 기록해 둡니다.

2. 배포 방법 선택

옵션 A: 로컬 MCP 서버

개발에 가장 적합합니다. OAuth 콜백을 위해 터널(예: Cloudflare)이 필요합니다.

git clone https://github.com/mrelph/TeamSnapMCP.git
cd TeamSnapMCP
cp .env.example .env   # Add your credentials
npm install
npm run build

Claude Desktop 설정(~/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"
      }
    }
  }
}

팁: cloudflared tunnel --url http://localhost:8374를 사용하여 HTTPS 콜백 URL을 만드세요.

옵션 B: npx (AWS 배포에 연결)

AWS 백엔드가 이미 배포된 경우 가장 쉬운 옵션입니다. 로컬 복제가 필요하지 않습니다.

{
  "mcpServers": {
    "teamsnap": {
      "command": "npx",
      "args": ["-y", "teamsnap-mcp"],
      "env": {
        "TEAMSNAP_MCP_ENDPOINT": "https://your-api-id.execute-api.us-east-1.amazonaws.com/mcp"
      }
    }
  }
}

옵션 C: AWS 서버리스

영구적인 HTTPS 콜백 URL을 위해 AWS Lambda에 배포하세요. 터널이 필요하지 않습니다.

cd aws
npm install

환경 변수를 설정합니다:

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-secret

배포:

node scripts/deploy.cjs

다음이 생성됩니다:

  • API Gateway — 영구적인 HTTPS 엔드포인트

  • Lambda — MCP 서버 (Node.js 20, 256MB, 30초 타임아웃)

  • DynamoDB — TTL 자동 정리가 포함된 토큰 저장소

그런 다음 **래퍼(wrapper)**를 사용하도록 Claude Desktop을 구성합니다:

{
  "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. 인증

Claude에게 **"Connect to TeamSnap"**이라고 말하세요.

OAuth 로그인을 위한 브라우저 창이 열립니다. 승인하면 연결됩니다.

사용 가능한 도구

도구

설명

필수 인수

teamsnap_auth

OAuth를 통해 TeamSnap에 연결

teamsnap_auth_status

연결 상태 확인

teamsnap_logout

연결 해제

teamsnap_list_teams

모든 팀 나열

teamsnap_get_team

팀 세부 정보 (스포츠, 시간대, 공개 사이트)

team_id

teamsnap_get_roster

연락처 정보, 사진이 포함된 선수 + 코치

team_id

teamsnap_get_events

도착/기간/유니폼/현지화된 시간이 포함된 이벤트

team_id

teamsnap_get_event

위치가 포함된 단일 이벤트

event_id

teamsnap_get_location

경기장 주소, 지도 링크, 주차 참고 사항

location_id 또는 event_id

teamsnap_get_availability

그룹화된 이벤트 RSVP 상태

event_id

teamsnap_get_member_availability

이벤트 전반에 걸친 한 멤버의 RSVP

member_id

teamsnap_get_contacts

부모/보호자 연락처 (이메일 + 전화번호)

member_id 또는 team_id

teamsnap_get_announcements

최근 방송 이메일 + 알림 + 메시지

team_id

teamsnap_get_assignments

간식/자원봉사자/카풀 등록

team_id 또는 event_id

teamsnap_get_opponents

상대 팀 기록이 포함된 상대 카탈로그

team_id

teamsnap_get_results_and_standings

팀 기록 + 디비전 순위

team_id

teamsnap_get_stats

팀/멤버/이벤트 통계

team_id

teamsnap_get_forum_topics

팀 포럼 토론 주제

team_id

teamsnap_get_forum_posts

포럼 주제의 게시물

topic_id

teamsnap_get_calendar_urls

iCal/webcal 피드 (전체 또는 게임 전용)

team_id

teamsnap_get_custom_data

리그/팀 사용자 지정 필드 값

team_id 또는 member_id

teamsnap_set_availability

이벤트에 대한 멤버의 RSVP 설정 (기본값: 미리보기)

event_id, member_id, status

teamsnap_update_tracked_item_status

추적 항목 상태 업데이트 (기본값: 미리보기)

tracked_item_status_id, status

teamsnap_create_tracked_item

간식/자원봉사자/카풀 추적 항목 생성 (기본값: 미리보기)

team_id, name

teamsnap_assign_tracked_item

멤버에게 추적 항목 할당 (기본값: 미리보기)

tracked_item_id, member_id

teamsnap_create_event

새 이벤트 생성 (기본값: 미리보기)

team_id, name, start_date

teamsnap_update_event

이벤트 업데이트 또는 취소; 취소 시 확인 필요

event_id, patch

teamsnap_send_team_message

인앱 팀 메시지 게시 (기본값: 미리보기)

team_id, body

teamsnap_send_announcement

이메일/알림 방송 전송; 전송 시 확인 필요

team_id, channel, subject, body

가용성 상태 코드

teamsnap_get_availability 도구는 API에서 반환된 TeamSnap status_code 필드를 기반으로 멤버를 네 가지 범주로 그룹화합니다:

상태

숫자 코드

문자열 코드

의미

yes

1

"yes"

멤버가 가능함으로 표시됨

no

0

"no"

멤버가 거절함 (참석 안 함)

maybe

2

"maybe"

멤버가 불확실함

noResponse

null/absent

멤버가 응답하지 않음

참고: "거절"을 의미하는 숫자 코드 0은 JavaScript에서 falsy 값입니다. 서버는 status_code를 읽을 때 논리 OR(||) 연산자 대신 null 병합(??) 연산자를 사용하여 숫자 0이 "응답 없음"으로 넘어가지 않고 "아니오"로 올바르게 분류되도록 합니다.

쓰기 도구 및 안전

Phase 2에서는 TeamSnap 데이터를 수정할 수 있는 8개의 쓰기 도구가 추가되었습니다. 이 도구들은 일관된 안전 장치를 따릅니다:

  • 기본적으로 preview: true. 모든 쓰기 도구는 실제로 TeamSnap을 호출하지 않고 전송할 페이로드를 반환하므로 먼저 검토할 수 있습니다. 커밋하려면 preview: false를 전달하세요.

  • 파괴적인 작업에 대해 confirm: true 필요. teamsnap_send_announcement는 항상 확인이 필요하며, teamsnap_update_event는 패치가 is_canceled: true로 설정될 때만 확인이 필요합니다.

  • POST 도구를 위한 idempotency_key. 제공한 값을 키로 사용하는 60초 메모리 내 중복 제거 캐시(선택 사항). Lambda에서는 최선의 노력(짧은 함수 수명)으로 작동합니다.

  • 재인증. Phase 2 이전에 인증한 경우 기존 토큰에는 read 범위만 있습니다. 첫 번째 쓰기 작업 시 reauthentication_required가 반환됩니다. teamsnap_auth를 다시 실행하여 read write 토큰을 받으세요. 읽기 작업은 계속 작동합니다.

예시: 미리보기 → 커밋 흐름

You: "RSVP Mark as 'yes' for event 12345"
Claude (calls teamsnap_set_availability with defaults):
  { preview: true, would_patch: "availability 987", with: { status: "yes", status_code: 1, notes: null } }
You: "Looks right, do it"
Claude (calls teamsnap_set_availability with preview: false):
  { status: "yes", event_id: 12345, member_id: 67890, notes: null }

예시 프롬프트

읽기:

  • "TeamSnap에 어떤 팀이 있나요?"

  • "Jr Kraken의 로스터를 보여줘"

  • "이번 달에 예정된 게임이 무엇인가요?"

  • "토요일 게임에 누가 참석 가능한가요?"

  • "토요일 게임에 누가 거절했나요?"

쓰기 (먼저 미리보기, 나중에 커밋):

  • "토요일 게임에 내 RSVP를 'yes'로 설정하는 것을 미리보기 해줘" → 페이로드 검토 → "맞아, 실행해"

  • "다음 주 이벤트를 위해 '경기 후 간식'이라는 간식 등록을 만들어줘"

  • "'이번 토요일 유니폼은 흰색입니다'라는 팀 메시지를 게시해줘"

  • "일요일 우천 취소에 대한 팀 공지사항을 초안으로 작성해줘 — 내가 확인하기 전까지는 보내지 마"

아키텍처

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 API

환경 변수

변수

필수

기본값

설명

TEAMSNAP_CLIENT_ID

예 (로컬)

OAuth 클라이언트 ID

TEAMSNAP_CLIENT_SECRET

예 (로컬)

OAuth 클라이언트 시크릿

TEAMSNAP_CALLBACK_PORT

아니요

8374

로컬 OAuth 콜백 포트

TEAMSNAP_REDIRECT_URI

아니요

리디렉션 URI 재정의 (터널용)

TEAMSNAP_MCP_ENDPOINT

AWS 래퍼 전용

API Gateway 엔드포인트 URL

TEAMSNAP_TIMEZONE

아니요

개인 ("뷰어") 시간대. 이벤트는 항상 자체 시간대로 현지화됩니다(API에서). 이 변수가 다른 IANA 시간대로 설정되면 도구가 두 번째 viewer 필드를 추가하여 둘 다 볼 수 있게 합니다. 여행 시 유용합니다.

보안

  • 암호화 — AES-256-GCM(scrypt 키 파생)으로 암호화된 로컬 토큰

  • OAuth 범위 — TeamSnap에 read write 범위 요청; 쓰기 작업은 preview/confirm 뒤에 보호됨 ( 쓰기 도구 및 안전 참조)

  • 하드코딩된 자격 증명 없음 — 모든 시크릿은 환경 변수에서 로드됨

  • CSRF 보호 — OAuth 상태 매개변수 검증

  • 자동 정리 — DynamoDB TTL이 10분 후 만료된 보류 중인 인증을 제거

  • 파일 권한0600(소유자 전용)으로 저장된 로컬 자격 증명

개발

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 wrapper

AWS 배포

cd aws
npm install
npm run build           # Bundle with esbuild
node scripts/deploy.cjs # Deploy to AWS

라이선스

MIT

Available Tools

9 tools
teamsnap_authB

Authenticate with TeamSnap. Opens a browser window for OAuth login. Credentials are loaded from environment variables (TEAMSNAP_CLIENT_ID, TEAMSNAP_CLIENT_SECRET) or can be passed as arguments.

ParametersJSON Schema
NameRequiredDescriptionDefault
client_idNoYour TeamSnap OAuth client ID (optional if set in environment)
client_secretNoYour TeamSnap OAuth client secret (optional if set in environment)

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses key behavioral traits: opens a browser window (interactive UI), uses OAuth flow, and supports credential sources. However, it lacks details about what happens after authentication (token storage, session duration), error handling, or whether this is a one-time setup vs recurring operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise with two sentences that each add value. The first sentence states the core purpose and mechanism. The second explains credential sources. No wasted words, though it could be slightly more structured by separating the environment variable names for clarity.

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

Completeness3/5

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

For an authentication tool with no annotations and no output schema, the description covers the essential 'what' and 'how' but lacks completeness. It doesn't explain what successful authentication enables (access to other tools), what the output looks like, error scenarios, or prerequisites. Given the complexity of OAuth flows, more context would be helpful.

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 both parameters as optional credentials. The description adds value by explaining the environment variable alternatives (TEAMSNAP_CLIENT_ID, TEAMSNAP_CLIENT_SECRET) and clarifying these are OAuth credentials. This provides context beyond the schema's basic descriptions, warranting a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Authenticate with TeamSnap' using OAuth login. It specifies the authentication method (browser-based OAuth) which distinguishes it from other authentication approaches. However, it doesn't explicitly differentiate from its sibling 'teamsnap_auth_status' which likely checks authentication status rather than initiating it.

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

Usage Guidelines3/5

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

The description implies when to use this tool (when authentication is needed) and mentions alternative credential sources (environment variables vs arguments). However, it doesn't provide explicit guidance on when NOT to use it (e.g., if already authenticated) or clearly differentiate from 'teamsnap_auth_status' for checking existing authentication.

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

teamsnap_auth_statusA

Check the current TeamSnap authentication status. Returns whether you are connected and user info if authenticated.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that the tool returns authentication status and user info, which is useful behavioral context. However, it lacks details on error handling, rate limits, or other operational traits, leaving gaps in transparency.

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?

The description is two concise sentences that are front-loaded with the main purpose and follow with return details. Every sentence adds value without waste, making it efficient and well-structured.

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?

Given the tool's low complexity (0 parameters, no output schema, no annotations), the description is mostly complete by stating what it does and what it returns. However, without an output schema, it could benefit from more detail on the return format (e.g., structure of user info), slightly reducing completeness.

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?

The tool has 0 parameters, and schema description coverage is 100%, so no parameter information is needed. The description appropriately does not discuss parameters, earning a baseline score of 4 for not adding unnecessary details.

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?

The description clearly states the tool's purpose with specific verbs ('check') and resources ('TeamSnap authentication status'), and distinguishes it from siblings by focusing on authentication status rather than data retrieval or authentication actions like 'teamsnap_auth' or 'teamsnap_logout'.

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?

The description implies usage context by mentioning it returns 'whether you are connected and user info if authenticated,' suggesting it's used to verify authentication state. However, it does not explicitly state when to use it versus alternatives like 'teamsnap_auth' for initiating authentication or other data tools that might require authentication.

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

teamsnap_get_availabilityB

Get availability responses for an event. Shows who is available, unavailable, or hasn't responded.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesThe TeamSnap event ID

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states what data is retrieved but doesn't mention authentication requirements (implied by sibling tools), rate limits, pagination, error handling, or response format. For a read operation in an API context, this leaves significant behavioral gaps, though it correctly implies a read-only action without contradiction.

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?

The description is extremely concise and front-loaded: a single sentence that directly states the tool's function and output. Every word earns its place with no redundancy or fluff. It efficiently communicates the core purpose without unnecessary elaboration.

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

Completeness3/5

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

Given the tool's moderate complexity (retrieving structured availability data), lack of annotations, and no output schema, the description is minimally adequate. It covers what data is fetched but misses important context like authentication needs, response structure, and error cases. It's complete enough to understand the basic purpose but insufficient for reliable agent invocation without additional assumptions.

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?

The input schema has 100% description coverage, with the single parameter 'event_id' fully documented in the schema. The description doesn't add any parameter-specific details beyond what's in the schema (e.g., format examples or constraints). According to scoring rules, when schema coverage is high (>80%), the baseline is 3 even without param info in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get availability responses for an event' with specific details about what it shows ('who is available, unavailable, or hasn't responded'). It distinguishes from siblings like teamsnap_get_event or teamsnap_get_events by focusing on availability data rather than general event information. However, it doesn't explicitly contrast with all sibling tools, keeping it at 4 rather than 5.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing authentication first via teamsnap_auth), nor does it clarify if this should be used before or after getting event details with teamsnap_get_event. There's no explicit 'when-not' or alternative tool suggestions, leaving usage context unclear.

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

teamsnap_get_eventC

Get detailed information about a specific event.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesThe TeamSnap event ID

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves information but doesn't mention whether it's read-only, requires authentication, has rate limits, or what the output format might be. This leaves significant gaps in understanding the tool's behavior beyond the basic purpose.

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?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to parse quickly, which is ideal for conciseness.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete. It doesn't address behavioral aspects like authentication needs, error handling, or return values, which are crucial for a tool that likely requires authentication (based on sibling tools like 'teamsnap_auth'). This leaves the agent with insufficient context for reliable use.

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?

The input schema has 100% description coverage, with the single parameter 'event_id' clearly documented as 'The TeamSnap event ID'. The description doesn't add any extra meaning beyond this, such as format examples or constraints, but the schema provides adequate baseline information, justifying a score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('detailed information about a specific event'), making the purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'teamsnap_get_events' (which likely lists multiple events), leaving room for ambiguity about when to use one versus the other.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, such as 'teamsnap_get_events' for listing events or other sibling tools. It lacks context about prerequisites (e.g., authentication status) or exclusions, leaving the agent to infer usage based on the tool name alone.

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

teamsnap_get_eventsB

Get events (games, practices, etc.) for a team. Optionally filter by date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idYesThe TeamSnap team ID
start_dateNoFilter events starting from this date (ISO 8601 format, e.g., 2024-01-01)
end_dateNoFilter events until this date (ISO 8601 format)

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves events with optional date filtering, but lacks critical details: it doesn't specify if this is a read-only operation, what permissions are required, whether it supports pagination or rate limits, or what the return format looks like. For a tool with no annotations, this is a significant gap in transparency.

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?

The description is extremely concise with two sentences that directly state the purpose and key functionality (filtering). Every word earns its place, and it's front-loaded with the core action, making it efficient and well-structured without any wasted text.

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

Completeness3/5

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

Given the tool's moderate complexity (3 parameters, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose and filtering option, but lacks details on authentication needs, response format, error handling, or sibling tool distinctions. With no annotations or output schema, more context would be beneficial for a complete understanding.

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?

The schema description coverage is 100%, with clear descriptions for all three parameters (team_id, start_date, end_date), including format details for dates. The description adds marginal value by mentioning optional date range filtering, but doesn't provide additional semantics beyond what the schema already covers, such as how filtering works or default behaviors. Baseline 3 is appropriate given high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('events for a team') with examples of event types ('games, practices, etc.'), making the purpose specific and understandable. However, it doesn't explicitly distinguish this tool from its sibling 'teamsnap_get_event' (singular), which might retrieve a single event, leaving some ambiguity in sibling differentiation.

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

Usage Guidelines3/5

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

The description implies usage by mentioning optional filtering by date range, which suggests when to use this tool for date-based queries. However, it doesn't provide explicit guidance on when to use this vs. alternatives like 'teamsnap_get_event' or 'teamsnap_list_teams', nor does it mention prerequisites such as authentication, leaving usage context partially implied.

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

teamsnap_get_rosterB

Get the roster (players and coaches) for a team. Returns member names, jersey numbers, positions, and roles.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idYesThe TeamSnap team ID

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool returns data (member names, jersey numbers, etc.), implying a read-only operation, but doesn't cover critical aspects like authentication requirements, error handling, rate limits, or data format specifics. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

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?

The description is concise and well-structured in two sentences: the first states the purpose and resource, and the second specifies the return data. Every sentence adds value without redundancy, making it easy to scan and understand quickly. No extraneous information is included.

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

Completeness3/5

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

Given the tool's low complexity (1 parameter, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose and return data, but lacks details on authentication, error cases, or sibling tool relationships. Without annotations or output schema, more context on behavior would improve completeness, but it meets the minimum for a simple read operation.

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?

The input schema has 100% description coverage, with the 'team_id' parameter fully documented in the schema. The description doesn't add any parameter-specific details beyond what the schema provides (e.g., it doesn't explain how to obtain the team ID or validate it). With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get the roster (players and coaches) for a team.' It specifies the verb ('Get'), resource ('roster'), and scope ('for a team'), though it doesn't explicitly differentiate from siblings like 'teamsnap_get_team' or 'teamsnap_get_events'. The mention of returned data (names, jersey numbers, etc.) adds clarity, but sibling distinction is not addressed.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication status), compare to sibling tools (e.g., 'teamsnap_get_team' for team details vs. roster), or specify contexts like needing a team ID first. Usage is implied by the purpose but lacks explicit when/when-not instructions.

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

teamsnap_get_teamC

Get detailed information about a specific team.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idYesThe TeamSnap team ID

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure but offers minimal information. It states the tool retrieves 'detailed information' but doesn't specify what that includes (e.g., team metadata, members, settings), whether it requires authentication (implied by sibling tools like 'teamsnap_auth'), or how errors are handled. This leaves significant gaps for a tool that likely interacts with an external API.

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?

The description is a single, clear sentence that efficiently conveys the core purpose without unnecessary words. It is front-loaded with the essential action and resource, making it easy to parse. There is no wasted verbiage or redundant information.

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

Completeness2/5

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

For a tool with no annotations, no output schema, and minimal behavioral details, the description is insufficiently complete. It doesn't address key contextual aspects like authentication requirements, error conditions, response format, or how it differs from sibling tools beyond the obvious resource focus. This leaves the agent with significant uncertainty about proper invocation and result interpretation.

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?

The input schema has 100% description coverage, with the single parameter 'team_id' documented as 'The TeamSnap team ID'. The description adds no additional parameter semantics beyond what the schema provides, such as format examples or sourcing instructions. Given the high schema coverage, a baseline score of 3 is appropriate as the description doesn't compensate but also doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('detailed information about a specific team'), making the purpose unambiguous. It distinguishes from siblings like 'teamsnap_list_teams' by specifying retrieval of a single team's details rather than listing multiple teams. However, it doesn't explicitly contrast with other get operations like 'teamsnap_get_event' or 'teamsnap_get_roster' beyond the resource type.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., authentication status), compare it to 'teamsnap_list_teams' for scenarios where the team ID is unknown, or indicate when other get tools might be more appropriate. Usage is implied only by the tool name and description context.

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

teamsnap_list_teamsB

List all TeamSnap teams you have access to. Returns team names, IDs, sport, division, and season info.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the return data (team names, IDs, etc.) but lacks details on permissions required, rate limits, pagination, error handling, or whether it's read-only/destructive. For a tool with zero annotation coverage, this leaves significant gaps in understanding its operational behavior.

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?

The description is two concise sentences: one stating the action and scope, another detailing the return data. It's front-loaded with the core purpose and wastes no words, making it efficient and easy to parse for an AI agent.

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

Completeness3/5

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

Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is adequate but incomplete. It covers the purpose and return data, yet without annotations or output schema, it misses behavioral aspects like authentication needs or response format details. For a list tool, this is minimally viable but has clear gaps in context.

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?

The tool has 0 parameters, with schema description coverage at 100%. The description doesn't need to add parameter details, and it appropriately avoids discussing non-existent inputs. A baseline of 4 is applied since no parameters exist, and the description doesn't mislead about inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List all TeamSnap teams') and resource ('teams'), specifying it returns team names, IDs, sport, division, and season info. It distinguishes from siblings like 'teamsnap_get_team' (singular) by indicating it lists all accessible teams, but doesn't explicitly contrast with other list-like tools (e.g., 'teamsnap_get_events' for events).

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

Usage Guidelines3/5

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

The description implies usage when needing to list all accessible teams, with 'you have access to' suggesting permission-based filtering. However, it doesn't provide explicit when-to-use guidance versus alternatives like 'teamsnap_get_team' for a specific team or other sibling tools, leaving context somewhat inferred rather than stated.

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

teamsnap_logoutA

Disconnect from TeamSnap and clear stored credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the action ('Disconnect and clear stored credentials'), which implies a destructive operation that removes authentication data. However, it lacks details on effects like whether this logs out all sessions, requires re-authentication for subsequent calls, or has any side effects on other tools.

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?

The description is a single, efficient sentence that front-loads the key action ('Disconnect from TeamSnap') and adds necessary context ('clear stored credentials'). There is zero waste, and every word earns its place in conveying the tool's purpose.

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

Completeness3/5

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

Given the tool's complexity (simple logout with 0 parameters) and no annotations or output schema, the description is minimally complete. It states what the tool does but lacks details on behavioral aspects like confirmation prompts, error handling, or what happens post-logout. For a destructive operation, more context would be helpful.

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?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description does not add parameter details, which is appropriate. Baseline is 4 for 0 parameters, as it compensates by not introducing unnecessary information.

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?

The description clearly states the specific action ('Disconnect from TeamSnap') and the resource affected ('stored credentials'), distinguishing it from sibling tools like teamsnap_auth or teamsnap_auth_status which handle authentication rather than disconnection. It uses precise verbs and identifies exactly what gets cleared.

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?

The description implies usage context by mentioning 'clear stored credentials,' suggesting it should be used when ending a session or revoking access. However, it does not explicitly state when to use this tool versus alternatives like teamsnap_auth_status for checking auth state, or provide exclusions for when not to use it.

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. Dates show when Glama detected each change.

  1. 9 tool updatesv0.1.0
    • First observedteamsnap_auth
    • First observedteamsnap_auth_status
    • First observedteamsnap_get_availability
    • First observedteamsnap_get_event
    • First observedteamsnap_get_events
    • First observedteamsnap_get_roster
    • First observedteamsnap_get_team
    • First observedteamsnap_list_teams
    • First observedteamsnap_logout

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose targeting specific resources and actions, such as authentication (auth, auth_status, logout), event management (get_event, get_events, get_availability), and team/roster operations (list_teams, get_team, get_roster). There is no overlap or ambiguity between tools, making it easy for an agent to select the correct one.

Naming Consistency5/5

All tool names follow a consistent 'teamsnap_' prefix with a clear verb_noun pattern (e.g., teamsnap_get_event, teamsnap_list_teams). The naming is uniform throughout, using snake_case consistently without any deviations or mixed conventions, which enhances predictability and readability.

Tool Count5/5

With 9 tools, the server is well-scoped for managing TeamSnap resources like authentication, teams, events, and rosters. Each tool serves a distinct and necessary function, avoiding bloat or thin coverage, making the count appropriate for the domain's typical operations.

Completeness4/5

The tool set provides strong coverage for core TeamSnap workflows, including authentication, listing and retrieving teams, events, and rosters, with event availability as a bonus. Minor gaps exist, such as no tools for creating or updating events, teams, or roster members, but agents can still perform essential read and authentication tasks effectively.

Maintenance

ActivityStale
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mrelph/TeamSnapMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server