startgg-mcp-server
startgg-mcp-server
start.gg GraphQL API용 Model Context Protocol 서버입니다. MCP 클라이언트(Claude Code, Claude Desktop 등)가 자연어를 사용하여 start.gg의 모든 게임에 대한 토너먼트, 이벤트, 참가자, 세트, 순위, 스트림을 조회할 수 있게 해줍니다.
이게 무엇인가요?
start.gg는 강력하지만 복잡한 GraphQL API를 제공합니다: entrant vs participant vs player, 정수 세트 상태, 복잡도 제한이 있는 페이지네이션, epoch 타임스탬프 등이 그것입니다. 이 서버는 해당 API를 소수의 MCP 도구로 감싸며 다음과 같은 특징을 제공합니다:
정규화된 출력 — 세트가 원시 GraphQL 중첩 구조 대신
{ round, state: "COMPLETED", entrant1: { gamerTag, seed }, score, winnerEntrantId, ... }형태로 반환됩니다URL 해석 — start.gg URL을 붙여넣으면 토너먼트/이벤트 id를 돌려받습니다
start.gg의 문서화된 한도에 맞춰 조정된 내장 속도 제한, 재시도, 캐싱
이 서버는 게임에 종속되지 않습니다. 게임별 로직(예: Smash 업셋 감지)은 그 위에 구축되는 애플리케이션에 속합니다 — examples/smash-ultimate-watcher를 참조하세요.
Related MCP server: faceit-mcp
기능
탐색, 토너먼트, 이벤트, 플레이어, 스트림, URL 해석을 다루는 15개의 읽기 전용 도구
모든 도구에 대한 입력 검증(Zod) — 잘못된 id, 과도한 페이지 크기, 잘못된 형식의 URL은 API에 도달하지 않습니다
슬라이딩 윈도우 속도 제한기(기본 75회/60초, start.gg의 80회 대비), 지수 백오프 재시도,
Retry-After지원메타데이터 쿼리를 위한 짧은 TTL 인메모리 캐시
타입화된 오류 코드:
AUTH_ERROR,RATE_LIMITED,NOT_FOUND,INVALID_INPUT,STARTGG_GRAPHQL_ERROR,NETWORK_ERROR,INTERNAL_ERRORGraphQL 문서는 코드와 분리되어
graphql/파일에 보관API 토큰은 출력, 로그, 오류 메시지에 절대 나타나지 않습니다
요구 사항
Node.js >= 20
start.gg API 토큰
start.gg API 토큰 받기
start.gg에 로그인합니다
**개발자 설정**을 엽니다 (프로필 → 개발자 설정)
개인 액세스 토큰을 생성하고 복사합니다
토큰을 비밀번호처럼 취급하세요. 이 서버는 STARTGG_TOKEN 환경 변수에서만 토큰을 읽습니다.
설치
git clone https://github.com/tomo789/startgg-mcp-server.git
cd startgg-mcp-server
npm install
npm run buildMCP 클라이언트 설정
Claude Code (CLI)
claude mcp add startgg --env STARTGG_TOKEN=YOUR_TOKEN -- node /path/to/startgg-mcp-server/dist/cli.jsClaude Desktop
claude_desktop_config.json에 추가합니다:
{
"mcpServers": {
"startgg": {
"command": "node",
"args": ["/path/to/startgg-mcp-server/dist/cli.js"],
"env": {
"STARTGG_TOKEN": "YOUR_TOKEN"
}
}
}
}stdio 서버를 지원하는 모든 MCP 클라이언트는 동일한 방식으로 작동합니다: STARTGG_TOKEN을 설정한 상태에서 node dist/cli.js(또는 npm으로 설치한 경우 startgg-mcp-server 바이너리)를 실행하면 됩니다.
사용 가능한 도구
탐색
도구 | 용도 |
| 이름으로 비디오게임 id 찾기 (예: "Super Smash Bros. Ultimate" → 1386) |
| 일반 토너먼트 검색: 이름, 비디오게임, 국가/주, 날짜 범위, 예정/종료, 등록 오픈 |
| 아직 종료되지 않은 토너먼트(진행 중 포함), 가장 빠른 순, 일수 창 포함 |
| 하나의 비디오게임 id에 대한 토너먼트 (예정 / 종료 / 전체) |
토너먼트
도구 | 용도 |
| 세부 정보, 일정, 장소, 이벤트 목록, 구성된 스트림 |
| 토너먼트의 이벤트(브래킷), 선택적으로 비디오게임으로 필터링 |
| 토너먼트 수준 참가자(참석자); 이벤트별 시드는 |
| 스트림 대기열: 스트림(파생된 Twitch URL 포함)과 각각에 할당된 세트 |
이벤트
도구 | 용도 |
| 페이즈(Pools, Top 8 등)와 페이즈 id를 포함한 이벤트 세부 정보 |
| 시드, 플레이어, DQ 플래그가 포함된 참가자; 페이지네이션 또는 |
| 순위 (Top 8은 |
| 정규화된 세트; 상태, 페이즈, 라운드, 참가자, VOD 존재 여부로 필터링 |
플레이어
도구 | 용도 |
| id로 플레이어 조회: 게이머 태그, 접두사, 연결된 사용자 |
| 여러 토너먼트에 걸친 플레이어의 최근 세트 |
유틸리티
도구 | 용도 |
| start.gg URL/슬러그 → |
토너먼트/이벤트 도구는 숫자 id, 슬러그, 또는 전체 start.gg URL 중 하나를 허용합니다 — resolve_startgg_url을 명시적으로 호출할 필요는 거의 없지만, id가 필요할 때 사용할 수 있습니다.
정규화된 세트 구조
{
"id": 106877974,
"round": "Grand Final",
"roundNumber": 3,
"state": "COMPLETED",
"stateRaw": 3,
"completedAt": "2026-08-24T07:19:34.000Z",
"entrant1": {
"entrantId": 24480092,
"name": "LittleMacMain",
"seed": 5,
"players": [{ "playerId": 3655189, "gamerTag": "LittleMacMain", "prefix": "" }],
"score": 2
},
"entrant2": { "...": "same shape" },
"score": { "entrant1": 2, "entrant2": 3, "displayScore": "LittleMacMain 2 - RenSuø 3" },
"winnerEntrantId": 24481002,
"phase": { "id": 1994001, "name": "Bracket" },
"vodUrl": null
}실제 API에 근거한 참고 사항:
roundNumber < 0은 패자 브래킷을 의미하며,round는 사람이 읽을 수 있는 이름입니다점수
-1은 start.gg의 실격 표시입니다시작되지 않은 "미리보기" 세트는
"preview_3430499_2_0"같은 문자열 id를 가집니다state이름은 정수stateRaw에서 디코딩되며, 둘 다 항상 반환됩니다entrant1/entrant2는players배열을 사용하므로 더블스/팀도 변경 없이 작동합니다
예시
연결 후 MCP 클라이언트에 물어볼 수 있는 것들:
Find upcoming Super Smash Bros. Ultimate tournaments this week.
Get the entrants and seeds for this start.gg tournament URL:
https://www.start.gg/tournament/.../event/...
Show me completed sets from Top 8 of that event.
Which streams are assigned to sets at this tournament?
What were the biggest seed upsets in this event?독립 실행형 예제 애플리케이션(비디오게임 조회 → 예정 토너먼트 → 세트 → 시드 차이 기반 업셋 후보)은 examples/smash-ultimate-watcher에 있습니다.
환경 변수
변수 | 필수 | 기본값 | 용도 |
| 예 | — | start.gg API 토큰 |
| 아니요 |
| 예약됨. 아직 쓰기 도구가 없으며, 플래그는 공지만 기록합니다 |
| 아니요 |
| 60초 창당 요청 수 (하드 상한 80) |
| 아니요 |
| 요청당 HTTP 타임아웃 |
| 아니요 |
|
|
API 엔드포인트는 의도적으로 환경을 통해 구성할 수 없습니다: 토큰은 api.start.gg로만 전송됩니다. 클라이언트를 라이브러리로 사용할 때(테스트, 도구)는 StartggClient 생성자를 통해 apiUrl/fetchFn을 주입하세요.
STARTGG_TOKEN이 없어도 서버는 시작되고 도구를 나열하지만, 모든 호출은 해결 방법을 설명하는 명확한 AUTH_ERROR를 반환합니다.
보안
토큰은 환경에서만 읽히며,
api.start.gg로만 전송되고, 도구 출력, 로그, 오류 메시지에 절대 포함되지 않습니다모든 도구는 읽기 전용이며, 변경 작업은 구현되어 있지 않습니다
.env파일은 git에서 제외됩니다..env.example을 템플릿으로 사용하세요사용자 입력은 요청이 구성되기 전에 스키마 검증됩니다
속도 제한
start.gg는 60초당 80회 요청과 요청당 최대 1000개 객체를 허용합니다. 이 서버는:
요청 한도 아래로 슬라이딩 윈도우 예산을 유지합니다 (기본 75/60초)
429(Retry-After준수) 및 일시적인 5xx 오류를 지수 백오프로 최대 3회 재시도합니다 — GraphQL 오류는 절대 재시도하지 않습니다응답이 1000개 객체 복잡도 한도 아래에 머물도록 도구별로
perPage를 제한합니다 (세트는 비용이 높습니다: 각각 ~26+ 객체, 따라서perPage <= 30)fetchAll을 고정 페이지 예산으로 제한하고 조기 중단 시truncated: true를 보고합니다
개발
npm run dev # run from source (tsx)
npm run build # compile to dist/
npm run typecheck # tsc --noEmit
npm run lint # eslint
npm run format # prettierGraphQL 문서는 graphql/*.graphql에 있습니다 (도메인당 하나의 파일, 파일당 여러 명명된 작업; 요청은 operationName으로 작업을 선택합니다). 실제 API에 대해 검증된 스키마 사실은 docs/startgg-api-notes.md에 기록되어 있습니다 — 필드를 추가하기 전에 읽어보세요.
테스트
npm test # unit tests (fixtures/mocks only, no network)
STARTGG_INTEGRATION=1 STARTGG_TOKEN=... npm test # + 2 live API smoke tests
STARTGG_TOKEN=... node scripts/smoke.mjs # full stdio end-to-end smoke (~10 live requests)단위 테스트는 URL 해석기, 정규화기, 입력 검증, 페이지네이션, GraphQL/HTTP 오류 처리, 속도 제한기, 캐시를 다룹니다.
라이선스
Available Tools
15 toolsget_eventGet eventARead-only
Get one event (bracket) of a tournament: name, start time, state, entrant count, videogame, parent tournament, and its phases (e.g. Pools, Top 8) with phase ids you can pass to get_event_sets phaseIds.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full start.gg event URL, e.g. https://www.start.gg/tournament/genesis-9/event/ultimate-singles. | |
| slug | No | Event slug in the form "tournament/<t>/event/<e>". | |
| eventId | No | Numeric start.gg event id. Provide exactly one locator. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes the read-only nature. The description adds value beyond that by disclosing the exact output fields (name, start time, state, entrant count, videogame, parent tournament, phases) and including a practical note about phase ids for use in get_event_sets. It does not contradict annotations and provides adequate behavioral context for a single-item get operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the primary purpose ('Get one event') before listing the output fields and the sibling pointer. Every clause adds value, with no filler or repetition. It is efficiently structured and easily scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, single-item retrieval with no output schema, the description covers the essentials: what is returned (detailed field list) and how the phase ids can be reused. It lacks explicit mention of error conditions or authorization requirements, but those are not significantly needed for a simple get. The output list is sufficiently descriptive for an agent to interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full descriptions for all three parameters (url, slug, eventId), with 100% schema_description_coverage. The description does not add any parameter-specific semantics or clarify the 'exactly one locator' constraint beyond what the schema states. Since the schema carries the burden, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear verb+resource: 'Get one event (bracket) of a tournament.' It explicitly distinguishes from siblings by specifying 'one event' and enumerates the exact data returned (name, start time, state, entrant count, videogame, parent tournament, phases). This strongly differentiates it from get_tournament_events (list) and get_event_sets (sets).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool by explaining what it returns and how the returned phase ids can be passed to get_event_sets. This implicitly guides agents on the workflow. However, it does not explicitly state when NOT to use it (e.g., 'if you need all events, use get_tournament_events'), so it falls short of the highest bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_entrantsGet event entrantsBRead-only
List an event's entrants with their seed (initialSeedNum), players (gamer tags), and disqualification flag. Supports pagination or fetchAll.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full start.gg event URL, e.g. https://www.start.gg/tournament/genesis-9/event/ultimate-singles. | |
| name | No | Filter entrants by name/tag (contains match). | |
| page | No | Page number, 1-based. Default 1. | |
| slug | No | Event slug in the form "tournament/<t>/event/<e>". | |
| eventId | No | Numeric start.gg event id. Provide exactly one locator. | |
| perPage | No | Results per page, max 100. Default 50. | |
| fetchAll | No | Fetch all pages (up to a safety cap) instead of one page. Ignores the page argument. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and the description aligns by describing a read-only listing. It adds behavioral details about pagination and fetchAll support, and identifies the output fields. However, it does not disclose the fetchAll safety cap or other operational limits, leaving partial transparency despite the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: the first states the purpose and output, the second the pagination/fetchAll functionality. All information is front-loaded with zero redundant words, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core listing behavior and output, but omits the critical requirement to provide exactly one locator (url, slug, or eventId) and does not mention the fetchAll safety cap. Given the tool has 7 optional parameters and no required ones, this gap could lead to incorrect calls. It is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3. The description adds minimal parameter insight—it mentions 'Supports pagination or fetchAll' and the output fields, but does not clarify the locator requirement (exactly one of url/slug/eventId), which is only noted in the eventId description. No significant extra semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'an event's entrants', and specifies the returned fields (seed, players, disqualification flag). It is specific enough to be distinguished from siblings like get_tournament_entrants by the 'event' scope, though it does not explicitly mention alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus sibling tools such as get_tournament_entrants or get_event_standings. The mention of pagination/fetchAll offers usage options but does not address alternative selection, so the agent gets no help in choosing between related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_setsGet event setsARead-only
List an event's sets (matches) in a normalized form: round, state (COMPLETED/ACTIVE/...), both entrants with seeds and players, per-entrant score (-1 = DQ), winner, phase, and VOD URL when available. Filter by state, phaseIds (from get_event's phases, e.g. Top 8), round, or entrants.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full start.gg event URL, e.g. https://www.start.gg/tournament/genesis-9/event/ultimate-singles. | |
| page | No | Page number, 1-based. Default 1. | |
| slug | No | Event slug in the form "tournament/<t>/event/<e>". | |
| state | No | Set states to include: names ("CREATED", "ACTIVE", "COMPLETED", ...) or raw integers (1-7). COMPLETED = finished sets. | |
| hasVod | No | Only sets that have a VOD. | |
| eventId | No | Numeric start.gg event id. Provide exactly one locator. | |
| perPage | No | Results per page, max 30. Default 20. | |
| fetchAll | No | Fetch all pages (up to a safety cap) instead of one page. Ignores the page argument. | |
| phaseIds | No | Only sets in these phase ids (get_event lists phases). | |
| showByes | No | Include bye sets. Default false. | |
| sortType | No | start.gg set sort order. RECENT = most recently completed first. | |
| entrantIds | No | Only sets involving these entrant ids. | |
| roundNumber | No | Only sets with this numeric round (negative = losers bracket). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true already provided, the description adds valuable context about the output format (normalized fields, score -1 for DQ) and the fact that it filters. It does not contradict the annotation and clarifies what data is returned, which helps the agent set expectations. No side effects or rate limits are mentioned, but the read-only nature is covered by annotations, so the description adds meaningful detail beyond the bare hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence that front-loads the core purpose and then packs in the output fields and filters. Every word earns its place; there is no fluff or redundancy. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 13 parameters and no output schema, the description provides a thorough overview of the return format and filter options, which is crucial for an agent to know what to expect. It does not explicitly describe pagination behavior (e.g., fetchAll safety cap), but the input schema covers that per-parameter. Given the complexity, the description is quite complete, leaving only minor gaps like rate limits or error cases that are not typically in tool descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 13 parameters already have detailed descriptions. The tool description adds minimal parameter-specific meaning—it mentions filtering by state, phaseIds, round, and entrants, but the schema already explains these (e.g., entry for phaseIds states 'get_event lists phases'). The description does not clarify parameter formats or interactions beyond what the schema provides, so it lands at the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'List an event's sets (matches)' which is a specific verb, resource, and scope. It enumerates the normalized fields (round, state, entrants, scores, winner, phase, VOD URL) and lists filters, making it unmistakable what this tool does and how it differs from siblings like get_player_sets or get_stream_queue.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies this is for listing sets for a specific event, and it references get_event for phaseIds, indicating a relationship. However, it does not explicitly state when to prefer this over get_player_sets or other sibling tools, nor does it exclude any conditions. The guidance is implied rather than explicit, so it's a solid 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_standingsGet event standingsARead-only
Get an event's standings (final or current placements), best first. Includes each entrant's seed so upsets are visible. Use perPage 8 for Top 8.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full start.gg event URL, e.g. https://www.start.gg/tournament/genesis-9/event/ultimate-singles. | |
| page | No | Page number, 1-based. Default 1. | |
| slug | No | Event slug in the form "tournament/<t>/event/<e>". | |
| eventId | No | Numeric start.gg event id. Provide exactly one locator. | |
| perPage | No | Results per page, max 100. Default 25. | |
| fetchAll | No | Fetch all pages (up to a safety cap) instead of one page. Ignores the page argument. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds meaningful behavioral context: it states ordering (best first), includes seed data for visibility of upsets, and implies support for both final and current placements. These details go beyond the annotation and help an agent anticipate the output format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no redundancy: the first states the core purpose, the second adds a distinctive detail (seed inclusion), and the third provides a practical usage tip. The most important info is front-loaded, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with a detailed schema (including locator alternatives and pagination controls), the description is reasonably complete. It does not describe the exact return structure, but since there is no output schema and the tool's purpose is straightforward, this is not a critical gap. The usage tip and detail about seeds round out the essential context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters already have descriptions in the schema. The tool description adds only the perPage usage tip, which is helpful but does not significantly expand on parameter meaning. Baseline of 3 is appropriate since the description adds marginal value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves an event's standings with final or current placements, ordered best first, and includes seed information. This is a specific verb+resource that distinguishes it from siblings like get_event or get_event_entrants, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete usage hint ('Use perPage 8 for Top 8') that gives practical guidance. However, it does not explicitly mention alternatives or when not to use this tool compared to similar ones like get_event_entrants, though the purpose is clear enough to infer appropriate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playerGet playerARead-only
Get a start.gg player by numeric player id: gamer tag, team prefix, and linked user. Player ids appear in set/entrant results (players[].playerId).
| Name | Required | Description | Default |
|---|---|---|---|
| playerId | Yes | Numeric start.gg player id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: true, so the safety profile is covered. The description adds the returned fields (gamer tag, team prefix, linked user) but does not disclose failure modes, rate limits, or other behavioral traits. Since read-only behavior is annotated, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with zero fluff. The main action is front-loaded, and the additional context about id provenance is placed after the primary statement. Every sentence contributes necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-id tool with readOnly annotation and no output schema, the description covers the essentials: what the tool returns and where to get the id. It could mention error behavior (e.g., player not found) but that is not crucial for a basic lookup. The description is complete enough for agents to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents playerId ('Numeric start.gg player id') at 100% coverage. The description adds extra value by explaining where to find valid player ids ('set/entrant results (players[].playerId)'), which goes beyond the schema and helps the agent invoke the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), resource ('start.gg player'), and selection method ('by numeric player id'), and lists the key returned fields. This clearly distinguishes it from sibling tools like get_player_sets, which returns sets rather than player details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides context on when to use the tool by explaining how to obtain the required playerId: 'Player ids appear in set/entrant results (players[].playerId).' This implies usage when you have a player id from those sources. It does not explicitly name alternatives or when-not-to-use, but the guidance is sufficient for a simple lookup tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_player_setsGet player setsARead-only
Get a player's recent sets across tournaments (most recent first), in the same normalized set form as get_event_sets, plus the event and tournament each set belongs to. Filter by set state (e.g. COMPLETED).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based. Default 1. | |
| state | No | Set states to include: names ("CREATED", "ACTIVE", "COMPLETED", ...) or raw integers (1-7). COMPLETED = finished sets. | |
| perPage | No | Results per page, max 20. Default 10. | |
| playerId | Yes | Numeric start.gg player id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
ReadOnlyHint=true already signals a safe read operation; the description adds behavioral specifics beyond that: ordering ('most recent first'), format normalization ('same normalized set form as get_event_sets'), and enrichment ('plus the event and tournament each set belongs to'). This gives the agent expectations for output shape and ordering without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core purpose is front-loaded, and the comparison to get_event_sets and mention of included fields are stated efficiently. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with full schema coverage and no output schema, the description covers all essential aspects: what it returns, ordering, format reference, and filter capability. It leaves nothing an agent needs to call it correctly, relying on the schema for parameter specifics and the annotations for safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal value beyond schema: it references filtering by state (e.g., COMPLETED) which maps to the 'state' parameter, but does not elaborate on syntax or defaults. The schema already handles parameter documentation adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get'), a specific resource ('a player's recent sets across tournaments'), and key characteristics: most recent first, normalized set form, and inclusion of event/tournament. It clearly distinguishes from get_event_sets by comparing the form, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage context by referencing get_event_sets and specifying that sets are across tournaments (rather than within a single event). However, it does not explicitly state when to prefer this over get_event_sets or other alternatives. The guidance is clear enough for an agent to infer intent, but lacks explicit 'when not to use' directions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stream_queueGet stream queueARead-only
Get a tournament's stream queue: each stream (source, channel name, derived URL for Twitch) with the sets currently assigned to it. Returns empty queues when nothing is queued. For the list of configured streams regardless of queue, use get_tournament.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full start.gg tournament URL, e.g. https://www.start.gg/tournament/genesis-9. | |
| slug | No | Tournament slug, e.g. "genesis-9" or "tournament/genesis-9". | |
| tournamentId | No | Numeric start.gg tournament id. Provide exactly one locator. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds the non-obvious behavior of returning empty queues when nothing is queued. It also discloses the exact structure of each stream entry (source, channel name, derived URL), providing valuable context beyond the annotation's safety hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundant information. The primary purpose and return details are front-loaded in the first sentence, and the alternative tool is named in the second. Every word earns its place with no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the return format and the empty-queue behavior, which is important. It names the alternative tool for a different query. However, it does not mention pagination, sorting, or any filtering, but for a stream queue tool this is likely acceptable. Given no output schema, the description's detail is fairly complete, though a mention of the locator requirement could be redundant since schema already covers it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described (url, slug, tournamentId) and the requirement to provide exactly one locator stated in the schema. The description adds no additional parameter semantics beyond what the schema already provides, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('a tournament's stream queue'), and details the content (streams with source, channel name, derived URL and assigned sets). It also explicitly distinguishes from get_tournament by saying 'For the list of configured streams regardless of queue, use get_tournament,' which clearly differentiates it from a sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly points to the alternative tool get_tournament for a different need (list of configured streams). It also clarifies that empty queues are returned, implying when to use this for queue status. This provides clear context and an explicit exclusion, making usage straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tournamentGet tournamentARead-only
Get one tournament's details: schedule, venue/location, registration, its events (with videogame and entrant counts), and its configured streams. Identify the tournament by numeric id, slug, or start.gg URL.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full start.gg tournament URL, e.g. https://www.start.gg/tournament/genesis-9. | |
| slug | No | Tournament slug, e.g. "genesis-9" or "tournament/genesis-9". | |
| tournamentId | No | Numeric start.gg tournament id. Provide exactly one locator. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description does not need to restate safety. The description adds useful context about the return content (schedule, venue, events, streams) but does not disclose any edge cases, rate limits, or behavioral quirks beyond that. With annotations covering the read-only nature, a 3 is appropriate as the description provides some but not rich behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence that front-loads the purpose and lists the detailed contents, then immediately covers the identification methods. There is zero filler, and every phrase contributes to the agent's understanding. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with a clear result description and no output schema, the description covers the essentials: what it returns and how to identify the tournament. The only minor gap is that it does not explicitly state that exactly one locator must be provided, but that constraint is present in the schema. Given no output schema and straightforward usage, this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters have descriptive text, including the note that exactly one locator should be provided. The description reinforces the locator types (numeric id, slug, URL) but adds little beyond the schema. Baseline 3 is correct when the schema already documents parameters well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets one tournament's details and enumerates the specific content: schedule, venue/location, registration, events with videogame and entrant counts, and streams. It names three locator types (numeric id, slug, URL). This distinguishes it from sibling tools like get_tournament_events (events only) and get_tournament_entrants (entrants only), so an agent can select it without opening other schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the general-purpose tool for full tournament details, but it does not explicitly state when to use it over alternatives like get_tournament_events. There are no exclusions or comparisons to siblings. The absence of explicit 'use this when...' guidance leaves some inference to the agent, though the clarity of the purpose partially compensates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tournament_entrantsGet tournament participantsARead-only
List a tournament's registered participants (attendees) with gamer tags. Note: these are tournament-level registrations; for per-event entrants with seeding, use get_event_entrants instead.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full start.gg tournament URL, e.g. https://www.start.gg/tournament/genesis-9. | |
| page | No | Page number, 1-based. Default 1. | |
| slug | No | Tournament slug, e.g. "genesis-9" or "tournament/genesis-9". | |
| perPage | No | Results per page, max 100. Default 50. | |
| gamerTag | No | Filter participants by gamer tag (contains match). | |
| tournamentId | No | Numeric start.gg tournament id. Provide exactly one locator. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares the safe read-only nature, so the bar is lower. The description adds context by clarifying that these are tournament-level registrations (not per-event) and that the results include gamer tags, which is helpful beyond the annotation but not extensive. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The primary purpose is stated first, and the crucial usage distinction is delivered in the second sentence. Well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with a fully documented schema and a readOnlyHint annotation, the description covers the core need: what it lists and when to use it instead of get_event_entrants. It does not mention pagination or return format, but those are inferable from the schema (page/perPage) and the read-only nature, making minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description need not repeat parameter details. The description does not add additional parameter guidance beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the operation 'List' and the resource 'tournament's registered participants (attendees) with gamer tags', and differentiates it from the sibling get_event_entrants by noting the tournament-level scope. This is a clear, specific action and resource with sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool versus get_event_entrants: 'these are tournament-level registrations; for per-event entrants with seeding, use get_event_entrants instead.' This provides clear when-to-use and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tournament_eventsGet tournament eventsARead-only
List the events (brackets) of a tournament, optionally filtered to one videogame id. Use the returned event id or slug with get_event_entrants / get_event_sets / get_event_standings.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Full start.gg tournament URL, e.g. https://www.start.gg/tournament/genesis-9. | |
| slug | No | Tournament slug, e.g. "genesis-9" or "tournament/genesis-9". | |
| videogameId | No | Only events for this videogame id. | |
| tournamentId | No | Numeric start.gg tournament id. Provide exactly one locator. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already signals a safe, read-only operation. The description adds value by stating that the tool lists events (brackets) and can be filtered by videogame id, and that each returned event carries an id and slug suitable for later calls. This goes beyond the annotation by clarifying the output's role and the filtering capability, without contradicting the read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence. It front-loads the primary action ('List the events'), states the optional filter, and immediately provides actionable guidance on using the results. There is no fluff, repetition, or irrelevant details—every phrase contributes to the tool's purpose and usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey what the tool returns and how to interpret it. It does so by stating 'List the events ... Use the returned event id or slug', implying each event has an id and slug. It also mentions the optional videogame filter. However, it does not mention pagination, ordering, or a default (unfiltered) behavior, which a list endpoint might require. Given the read-only annotation and the simplicity of the operation, this is a minor gap, so a 4 is appropriate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: all four parameters (url, slug, videogameId, tournamentId) have meaningful descriptions, including examples and the constraint to provide exactly one locator. The description's mention of 'optionally filtered to one videogame id' paraphrases the videogameId parameter but does not add new semantics. Per the rubric, with high schema coverage the baseline is 3, and the description does not exceed that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb 'List' and a clear resource 'events (brackets) of a tournament', and notes an optional filter by videogame id. It also points to downstream tools (get_event_entrants / get_event_sets / get_event_standings) that use the returned event id or slug, which clearly differentiates it from sibling tools like get_tournament or get_event that operate at different granularities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: this tool is a precursor to retrieving entrants, sets, or standings using the event id or slug. It implicitly tells the agent when to use this tool (when you need a list of events for a tournament) and how to chain it with other tools. It does not explicitly state when NOT to use it (e.g., if you already have an event id, use get_event directly), but the direction to downstream tools gives sufficient practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tournaments_by_videogameGet tournaments by videogameARead-only
List tournaments for a specific videogame id. timeframe selects upcoming (default), past, or all; combine with afterDate/beforeDate and location filters as needed.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based. Default 1. | |
| perPage | No | Results per page, max 100. Default 25. | |
| addrState | No | State/province code as used by start.gg, e.g. "CA", "TX". | |
| afterDate | No | ISO-8601 date/time (e.g. "2026-08-24" or "2026-08-24T00:00:00Z") or Unix epoch seconds. | |
| timeframe | No | Which tournaments to include. Default upcoming. | |
| beforeDate | No | ISO-8601 date/time (e.g. "2026-08-24" or "2026-08-24T00:00:00Z") or Unix epoch seconds. | |
| countryCode | No | Two-letter ISO country code, e.g. "US", "JP". | |
| videogameId | Yes | Videogame id from search_videogames. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description does not need to cover safety. It adds the default for timeframe ('upcoming') and the ability to combine filters, but this mostly repeats schema info. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the primary action front-loaded, followed by filtering details. No wasted words; efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a list operation with a rich schema covering all parameters, the description is adequate. It does not mention pagination (page/perPage) or return format, but the absence of an output schema and the simplicity of the tool make this acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are well-documented. The description adds value by suggesting a combination pattern ('combine with afterDate/beforeDate and location filters as needed') and clarifies the default timeframe, which is reinforced but not redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (tournaments for a specific videogame id), and the description clearly differentiates from siblings by requiring videogameId. The scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies when to use it (for a specific videogame) and describes optional filters, but does not explicitly name alternatives like get_upcoming_tournaments or search_tournaments. Clear enough to route an agent, though not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_upcoming_tournamentsGet upcoming tournamentsARead-only
List tournaments that have not ended yet (including ones in progress), soonest first. Filter by videogame id (get it from search_videogames), country/state, and a time window in days.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number, 1-based. Default 1. | |
| perPage | No | Results per page, max 100. Default 25. | |
| addrState | No | State/province code as used by start.gg, e.g. "CA", "TX". | |
| withinDays | No | Only tournaments starting within this many days from now. Default 30. | |
| countryCode | No | Two-letter ISO country code, e.g. "US", "JP". | |
| videogameId | No | Videogame id, e.g. 1386 for Smash Ultimate. | |
| videogameIds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares the operation is read-only, so the description doesn't need to cover that. It adds value by disclosing the result set criteria (not ended, including in-progress) and the sort order (soonest first), which are behavioral traits beyond the annotation. It also hints at the filter mechanics, making the tool's runtime behavior more predictable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with zero filler. The primary purpose is front-loaded, and the filter capabilities are summarized in one compact sentence. Every word adds value, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 optional parameters and no output schema, the description covers the essential context: what is returned (upcoming tournaments), ordering, and available filters. It does not explicitly mention pagination defaults, but the schema describes those. The mention of the videogame id source and the time window covers the most critical parameters. It is sufficiently complete for an agent to understand the tool's core behavior without missing major aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 86%, so the schema documents most parameters well. The description adds a specific hint on how to obtain the videogame id (from search_videogames), which is useful. However, it does not clarify pagination semantics or the optionality of all filters in full detail; the schema already covers that. The added value is marginal but positive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists tournaments that have not ended (including in-progress), sorted soonest first, which precisely distinguishes it from search_tournaments or get_tournaments_by_videogame. The inclusion of the in-progress nuance and the mention of filters make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context (upcoming tournaments with optional filters) and even directs the agent to search_videogames for the videogame id, but it does not explicitly contrast with sibling tools like search_tournaments or get_tournaments_by_videogame. An agent might need to infer when to use this versus a search that could return ended tournaments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_startgg_urlResolve start.gg URLARead-only
Turn a start.gg tournament or event URL (or slug) into internal ids and slugs. Example: "https://www.start.gg/tournament/genesis-9/event/ultimate-singles" -> { type: event, tournamentId, eventId, ... }. Use this first when the user pastes a start.gg link, then call the other tools with the returned ids.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | start.gg URL, path, or slug to resolve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description doesn't need to restate that. It adds a helpful output example but discloses no further behavioral traits (e.g., error handling, rate limits, or edge cases like invalid slugs). This is adequate but not rich beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus a compact example with zero filler. The core action is front-loaded, and the example is tightly scoped. Every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter resolver with no output schema, the description gives purpose, usage, and a return-shape hint via the example. It doesn't mention error behavior, but that is a minor gap given the tool's simplicity and the read-only annotation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already describes 'URL, path, or slug'. The description adds specificity by stating 'tournament or event URL (or slug)' and provides a concrete example that clarifies the expected format, going slightly beyond the schema description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Turn... into'), a resource (start.gg URL/slug), and the exact output (internal ids and slugs). The concrete example clarifies the input and output shape, and it is clearly distinct from the sibling search/get tools, which operate on identifiers rather than URLs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use this tool first when a start.gg link is pasted, then call other tools with the returned ids. This provides a clear workflow and sequencing, leaving no ambiguity about when to select this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_tournamentsSearch tournamentsARead-only
Search start.gg tournaments with flexible filters: name, videogame ids, country/state, date range (afterDate/beforeDate on start time), upcoming/past, open registration.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Tournament name to search for. | |
| page | No | Page number, 1-based. Default 1. | |
| past | No | Only tournaments that already ended. | |
| sortBy | No | Sort order for tournaments. | |
| perPage | No | Results per page, max 100. Default 25. | |
| regOpen | No | Only tournaments with open registration. | |
| upcoming | No | Only tournaments that have not ended yet (start.gg's filter also includes tournaments currently in progress). | |
| addrState | No | State/province code as used by start.gg, e.g. "CA", "TX". | |
| afterDate | No | Only tournaments starting after this. | |
| beforeDate | No | Only tournaments starting before this. | |
| countryCode | No | Two-letter ISO country code, e.g. "US", "JP". | |
| videogameId | No | Filter to one videogame id. | |
| videogameIds | No | Filter to several videogame ids. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true already informs the agent this is a safe read operation. The description adds minimal behavioral context beyond the filter enumeration—no mention of pagination limits, result ordering defaults, or any side effects. Since the annotation covers the safety aspect and the description doesn't contradict it, a 3 is appropriate; extra behavioral detail would have been beneficial but isn't strictly necessary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the core purpose first and then lists the filter classes. There is no fluff or redundancy; every element earns its place. It is concise yet information-dense, ideal for agent consumption.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 13 parameters and no output schema, the description covers the essential filter categories without enumerating each parameter. It omits details like default sorting or pagination behavior, but those are documented in the input schema. The description is sufficient for an agent to understand the tool's scope and select appropriate filters, though it could mention the result shape or any relationship to streaming tournaments. Slight room for improvement, but not incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter documented. The description adds value by grouping filters into semantic categories ('date range (afterDate/beforeDate on start time)', 'upcoming/past', 'open registration'), which helps the agent quickly infer combinational intent. This grouping goes beyond the individual descriptions and slightly elevates the score above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Search start.gg tournaments' with a clear verb and resource, and enumerates the flexible filter categories (name, videogame ids, location, date range, upcoming/past, registration). This makes the tool's purpose unambiguous and distinguishes it from sibling tools that target specific subsets like upcoming or per-videogame tournaments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly frames the tool as a general, filter-driven search ('flexible filters'), implying it is the go-to for broad tournament discovery. However, it does not explicitly state when to prefer this over the specific sibling tools (e.g., get_upcoming_tournaments), leaving the routing decision partially to the agent. This is a minor gap rather than misleading guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_videogamesSearch videogamesARead-only
Search start.gg's videogame catalog by name and get videogame ids. Use this first to find the id for a game (e.g. "Super Smash Bros. Ultimate" -> 1386), then pass that id to tournament discovery tools.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Game name to search for, e.g. "Street Fighter 6". | |
| page | No | Page number, 1-based. Default 1. | |
| perPage | No | Results per page, max 100. Default 25. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description does not repeat that. It adds value by disclosing the return type (ids) and providing an example mapping, which enriches understanding without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the purpose and usage, with no redundant words. Every sentence earns its place and the example adds immediate clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple search tool with read-only annotation, fully documented parameters, and a description covering purpose, usage, and next step. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with all parameters described (name, page, perPage). The description adds a concrete example for the name parameter and confirms the pagination defaults are not explained beyond schema, which is the baseline for fully documented schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search), resource (start.gg's videogame catalog), and output (videogame ids). It clearly distinguishes itself from the sibling tournament tools and positions itself as a prerequisite step for those tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs the agent to use this tool first to obtain an id and then pass that id to tournament discovery tools, including a concrete example. This gives clear when-to-use guidance and implies the alternative tools that follow.
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.
15 tool updates
v0.1.0- First observed
get_event - First observed
get_event_entrants - First observed
get_event_sets - First observed
get_event_standings - First observed
get_player - First observed
get_player_sets - First observed
get_stream_queue - First observed
get_tournament - First observed
get_tournament_entrants - First observed
get_tournament_events - First observed
get_tournaments_by_videogame - First observed
get_upcoming_tournaments - First observed
resolve_startgg_url - First observed
search_tournaments - First observed
search_videogames
TDQS
Scored across 15 tools
Each tool targets a distinct resource and action, with clear differentiators even among similar tools (e.g., search_tournaments vs. get_upcoming_tournaments). Descriptions explicitly note when to use each, such as tournament-level vs. event-level entrants, preventing confusion.
All tool names follow a consistent verb_noun pattern in snake_case (search_, get_, resolve_). The verbs are simple and uniform, making the set highly predictable and easy to navigate.
With 15 tools, the server is well-scoped for the start.gg domain, covering search, tournament details, events, players, streams, and URL resolution. Each tool has a clear purpose, and the count is within the ideal range for coherence without bloat.
The tool set provides comprehensive read-only coverage of the start.gg platform, including videogame search, tournament discovery, detailed tournament and event queries, entrant/standings/set retrieval, player history, stream queues, and URL resolution. No obvious gaps for the apparent use case.
Maintenance
Related MCP Connectors
Find MCP servers, APIs, tools and skills by intent. Free key: POST /api/agents/register
Live AI-native web search with citations. One tool for every MCP client. Flat per-request pricing.
Search your video library with natural language and retrieve relevant moments through MCP.
Find MCP servers, skills, plugins, agents, prompts and rules for any task.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides access to the Start.gg GraphQL API for querying tournament information, event standings, and player statistics. It also enables bracket management tasks like retrieving match sets and reporting winners through natural language.1Apache 2.0
- AlicenseAqualityDmaintenanceEnables AI assistants to query the FACEIT platform for players, matches, hubs, and tournaments through typed MCP tools generated from the FACEIT Data API v4.64MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to query Riot Games data such as accounts, summoners, match history, and champion mastery via natural language.209 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables querying Chess.com player profiles, ratings, game histories, and leaderboard rankings through a natural language MCP interface.443 npmMIT