Skip to main content
Glama

codeforces-mcp

코딩 에이전트에게 Codeforces 연습 데이터에 대한 접근을 제공하는 MCP 서버입니다. 취약한 태그를 파악하고 아직 풀지 않은 문제를 찾는 데 도움을 줍니다.

이 서버는 읽기 전용이며, 공개 Codeforces API를 사용하고 Codeforces 인증이 필요하지 않습니다. VS Code Copilot, Claude Desktop/Code 및 stdio 서버를 지원하는 기타 MCP 클라이언트와 함께 동작합니다.

기능

  • 난이도와 태그로 문제를 찾고, 선택적으로 특정 사용자가 이미 해결한 문제를 제외할 수 있습니다.

  • 핸들의 태그를 해결율과 평균 해결 난이도 순으로 순위화합니다.

  • 최근 제출 내역을 확인하고 채점 결과(verdict)로 필터링합니다.

  • 사용자 프로필과 레이팅 기록을 조회합니다.

  • 다가오는 콘테스트 목록을 표시합니다.

  • 결과를 읽기 쉬운 Markdown 또는 구조화된 JSON으로 반환합니다.

  • 상위 응답을 로컬에 캐시하고 적절한 요청 속도를 준수합니다.

Related MCP server: DevAssist MCP Server

요구 사항

  • Python 3.10 이상

  • 사용자별 도구를 위한 Codeforces 핸들

  • GitHub Copilot 에이전트 모드가 있는 VS Code, Claude 또는 기타 MCP 호환 클라이언트

API 키는 필요하지 않습니다.

설치

리포지토리를 클론하고 가상 환경을 생성합니다.

git clone https://github.com/<owner>/codeforces-mcp.git
cd codeforces-mcp
python -m venv .venv

환경을 활성화합니다.

# Windows PowerShell
.\.venv\Scripts\Activate.ps1
# macOS/Linux
source .venv/bin/activate

패키지를 설치합니다.

python -m pip install -e .

개발 목적으로는 테스트 및 린트 의존성도 함께 설치합니다.

python -m pip install -e ".[dev]"

설치가 완료되면 가상 환경 안에 codeforces-mcp 명령이 생성됩니다.

VS Code Copilot과 사용

리포지토리에는 .vscode/mcp.json 워크스페이스 설정이 포함되어 있습니다. Windows에서는 체크아웃된 venv를 바로 가리킬 수 있습니다.

{
  "servers": {
    "codeforces": {
      "type": "stdio",
      "command": "E:\\path\\to\\codeforces-mcp\\.venv\\Scripts\\codeforces-mcp.exe"
    }
  }
}

경로를 실제 클론 위치로 바꾸세요. macOS/Linux의 경우 다음을 사용합니다.

{
  "servers": {
    "codeforces": {
      "type": "stdio",
      "command": "/path/to/codeforces-mcp/.venv/bin/codeforces-mcp"
    }
  }
}

VS Code에서:

  1. 명령 팔레트에서 MCP: Open Workspace Folder Configuration를 실행합니다.

  2. codeforces 서버 항목을 추가하거나 업데이트합니다.

  3. Copilot Chat을 열고 Agent 모드로 전환합니다.

  4. 도구 메뉴를 열고 codeforces 서버를 시작하거나 활성화한 후 도구를 허용합니다.

그런 다음 Copilot에게 이렇게 요청해 보세요.

3.141f 라는 핸들의 1300-1500 난이도의 풀지 않은 DP 문제 5개를 찾아줘.

서버는 stdio를 사용하므로 VS Code가 필요에 따라 시작하고 중지합니다. Copilot이 연결된 동안 수동으로 서버를 하나 더 실행하지 마세요.

Claude 및 사용

venv를 활성화한 후 Claude Code에 명령을 등록하세요.

claude mcp add codeforces -- codeforces-mcp

명령어가 PATH에 없으면 실행 파일을 직접 사용하세요.

claude mcp add codeforces -- .\.venv\Scripts\codeforces-mcp.exe

macOS/Linux에 해당하는 명령은 다음과 같습니다.

claude mcp add codeforces -- .venv/bin/codeforces-mcp

도구

모든 도구는 읽기 전용이며 response_format을 지원합니다. "markdown"(기본값) 또는 "json"을 값으로 가집니다.

codeforces_search_problems

문제를 가장 쉬운 것부터 찾습니다. 해당 handle의 채점 결과가 OK인 문제를 표시에서 제외하려면 exclude_solved_by에 handle을 설정하세요.

파라미터

기본값

설명

min_rating

없음

최소 난이도, 800 ~ 3500

max_rating

없음

최대 난이도, 800 ~ 3500

tags

[]

Codeforces 태그 최대 20개

tags_match

"any"

모든 태그를 강제하려면 "all" 사용

exclude_solved_by

없음

해결한 문제를 제외할 Codeforces 핸들

limit

20

결과 개수, 1 ~ 100

offset

0

건너뛸 일치 결과 개수

response_format

"markdown"

"markdown" 또는 "json"

요청 예시:

Find 5 unsolved dp problems rated 1300-1500 for 3.141f.

동일한 인자:

{
  "min_rating": 1300,
  "max_rating": 1500,
  "tags": ["dp"],
  "exclude_solved_by": "3.141f",
  "limit": 5
}

codeforces_get_tag_performance

핸들에 대해 태그별 시도 횟수, 해결 횟수, 해결율, 난이도를 계산합니다. 결과는 해결율이 가장 높은 약한 태그부터 정렬됩니다. min_attempted가 아주 작은 표본이 순위를 주도하는 것을 방지합니다.

{
  "handle": "3.141f",
  "min_attempted": 8,
  "response_format": "markdown"
}

codeforces_recent_submissions

핸들의 가장 최근 제출을 나열합니다. WRONG_ANSWER, TIME_LIMIT_EXCEEDED 또는 OK 같은 verdict 값을 사용하여 목록을 필터링할 수 있습니다.

{
  "handle": "3.141f",
  "verdict": "WRONG_ANSWER",
  "limit": 10
}

codeforces_user_profile

핸들의 현재 레이팅, 최대 레이팅, 등급, 소속을 표시합니다.

{
  "handle": "3.141f"
}

codeforces_rating_history

콘테스트별 레이팅 변동을 오래된 순서대로 표시합니다. limit을 설정하면 가장 최근 콘테스트만 반환합니다.

{
  "handle": "3.141f",
  "limit": 10
}

codeforces_upcoming_contests

아직 시작되지 않은 콘테스트를 빠른 순서대로 나열합니다.

{
  "limit": 5
}

출력 예

**5 of 208 matching problems** (offset 0, more available)

| Rating | Problem | Tags | Link |
| --- | --- | --- | --- |
| 1300 | 189A - Cut Ribbon | brute force, dp | https://codeforces.com/problemset/problem/189/A |
| 1300 | 234C - Weather | dp, implementation | https://codeforces.com/problemset/problem/234/C |
| 1300 | 416B - Art Union | brute force, dp, implementation | https://codeforces.com/problemset/problem/416/B |

JSON 형식에는 동일한 데이터가 테일 형식으로 포함되어 있어 결과를 프로그래밍 방식으로 처리하는 애플리케이션에 적합합니다.

캐시 및 요율 제한

Codeforces API는 약 2초에 13개의 요청으로 문서화되어 있습니다. 클라이언트는 요청 속도를 강제하며 기본적으로 ~/.cache/net```/codeforces-mcp에 응답을 저장합니다. 캐시 수명은 데이터가 자주 변경되는 빈도를 반영합니다. 문제 세트는 6시간, 제출은 5분, 사용자 프로필은 1시간입니다.

이슈 해결

지정된 서버가 시작되지 않는 경우

MCP 설정에서 사용하는 환경에 실행 파일이 존재하는지 확인하세요.

Test-Path .\.venv\Scripts\codeforces-mcp.exe
./.venv/bin/codeforces-mcp

다른 venv에 설치한 경우 mcp.json 파일의 command 경로를 업데이트하세요.

Codeforces에서 오류를 반환하는 경우

핸들의 철자를 확인하고 잠시 후 다시 시도하세요. 서버는 실제 도움이 되는 Codeforces 오류 메시지를 그대로 클라이언트에 전달합니다. 공용 API가 일시적으로 요청이 제한되거나 사용할 수 없을 수도 있습니다.

개발

변경 사항을 제출하기 전에 확실한 검사를 실행하세요.

ruff check .
mypy src/
pytest tests/contract -q
python eval/run_eval.py

라이브 테스트는 Codeforces를 실제로 호출하며 옵트인 방식으로 실행합니다.

pytest -m live -q

로컬 커밋 날짜 다시쓰기

이 저장소에는 현재 브랜치의 커밋 날짜를 2026년 7월 14일과 15일 사이로 다시 쓰는 rebase-commits-to-july.sh 스크립트가 포함되어 있습니다. 이 스크립트는 히스토리를 변경하기 전에 백업 브랜치를 생성합니다.

bash rebase-commits-to-july.sh

작업 트리는 깨끗해야 하며 스크립트는 이름이 있는 브랜치에서 실행해야 합니다. 커밋 aaaaddd를 다시 작성하므로 공유 브랜치에서는 사전 합의 없이 실행하지 않습니다. 되돌리려면 스크립트가 출력한 백업 브랜치를 사용하세요.

git reset --hard backup/pre-date-rebase-<timestamp>

도구 동작을 변경하기 전에 SPEC.md를 읽어 이를 토대와 계약을 정의합니다. 계약 테스트에 대응하는 계약 항목도 포함합니다.

프로젝트 구조

경로

용도

src/data_집어_mcp/client.py

HTTP 클라이언트, 캐싱, 요청 속도 제한

src/codeforces_mcp/data.py

타입이 지정된 입출력 모델

src/codeforces_mcp/tools.py

MCP 독립적인 도구 로직

src/codeforces_mcp/server.py

MCP 등록 및 서식 지정

tests/contract/

오프라인 픽스처 기반 계약 테스트

tests/live/

옵트인 상위 합동 테스트

eval/

에이전트 동작 평가 케이스

기여

  1. 버그 또는 제안된 동작 변경에 대해 이슈를 등록하세요.

  2. 동작을 변경하기 전에 SPEC.md와 그에 대한 계약 테스트를 업데이트하세요.

  3. 도구 로직은 src/codeforces_mcp/tools/ 디렉터리에 MCP import 없이 유지하세요.

  4. 개발 검사를 실행하고 관련 테스트 결과를 Pull Request에 담아 보내기세요.

가상 환경, 캐시, 빌드 출력 또는 개인 정보가 포함된 API 녹음본을 커밋하지 마세요. 저장소의 .gitignore는 이 프로젝트에서 생성되는 로컬 개발 산출물을 이미 제외합니다.

관련 문서

Available Tools

6 tools
codeforces_rating_historyA
Read-onlyIdempotent

Contest-by-contest rating changes for a handle, oldest first, with deltas.

NameRequiredDescriptionDefault
limitNoReturn only the most recent N contests
handleYesCodeforces handle, e.g. '3.141f'
response_formatNo'markdown' for a readable table, 'json' for structured datamarkdown

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety and idempotency. The description adds the ordering and delta details, which is useful but minimal. No contradiction with annotations.

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?

A single, front-loaded sentence conveys the core purpose without wasted words. It efficiently conveys the resource, ordering, and the deltas detail.

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?

For a simple tool with one required parameter, full schema coverage, and an output schema, the description sufficiently explains the purpose. The only minor gap is that it doesn't describe return format specifics, but the output schema covers that need.

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%, and all parameters (handle, limit, response_format) already have descriptions. The tool description does not add meaning beyond the schema, so the baseline 3 is appropriate.

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 fetches contest-by-contest rating changes for a given handle, specifies ordering (oldest first), and includes deltas. This distinguishes it from sibling tools like user_profile (overall rating) and recent_submissions (submissions).

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 does not mention when not to use it, nor does it reference sibling tools. Users are left to infer suitable contexts from the purpose alone.

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

codeforces_recent_submissionsA
Read-onlyIdempotent

List a handle's most recent submissions, newest first.

Filter by verdict to pull up recent failures for review. Each row links to the submission on Codeforces so the code itself can be read.

NameRequiredDescriptionDefault
limitNoMaximum submissions to return
handleYesCodeforces handle, e.g. '3.141f'
verdictNoFilter by verdict, e.g. 'WRONG_ANSWER', 'TIME_LIMIT_EXCEEDED', 'OK'
response_formatNo'markdown' for a readable table, 'json' for structured datamarkdown

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover read-only and non-destructive behavior. The description adds useful behavioral context: results are ordered newest first, and each row links to the submission on Codeforces so the code can be read. This goes beyond what annotations alone provide and contains 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.

Conciseness5/5

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

The description is a tight two sentences with no redundant words. The primary purpose is front-loaded in the first sentence, and the second sentence adds a focused filtering tip and a detail about links to code. Each sentence earns its place.

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 100% schema coverage, existing annotations, and presence of an output schema, the description fills the remaining gaps: ordering, the verdict filter use case, and the link-to-code behavior. An agent has everything needed to decide when to call and how to interpret results, though one could imagine explicit exclusion of sibling tools, which is not necessary here.

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 already documents all four parameters with clear descriptions (100% coverage), so the description does not need to explain them. It does add a practical tip for the 'verdict' parameter (using it to review failures), but adds nothing for 'limit' or 'response_format' beyond what the schema states. This matches the baseline for full schema coverage.

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 opens with a specific verb ('List') and resource ('a handle's most recent submissions') and specifies order ('newest first'). It is clearly distinct from sibling tools that deal with problems, ratings, contests, and user profiles, so an agent can differentiate without ambiguity.

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 provides a concrete, actionable use case ('Filter by verdict to pull up recent failures for review') that tells an agent when this tool is appropriate. It does not explicitly mention alternatives or when not to use it, but the purpose is specific enough that no exclusions are necessary.

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

codeforces_search_problemsA
Read-onlyIdempotent

Find Codeforces problems by rating band and tags, easiest first.

Set exclude_solved_by to a handle to hide problems that handle has already solved. The Codeforces website cannot express that filter, which is the main reason to reach for this tool: it turns "problems tagged dp rated 1300-1500" into "problems I could actually still practise".

NameRequiredDescriptionDefault
tagsNoCodeforces tags, e.g. ['dp','greedy']. Empty means any.
limitNoMaximum problems to return
offsetNoProblems to skip, for pagination
max_ratingNoHighest problem rating, inclusive
min_ratingNoLowest problem rating, inclusive
tags_matchNo'any' = at least one tag, 'all' = every tagany
response_formatNo'markdown' for a readable table, 'json' for structured datamarkdown
exclude_solved_byNoHide problems this handle already solved, e.g. '3.141f'

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already carry readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds behavioral value: the 'easiest first' ordering and the semantic of exclude_solved_by. It does not contradict annotations and adds useful context beyond the structured fields.

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?

Two concise paragraphs, the first stating the core purpose and the second adding the key differentiator. Every sentence earns its place, and the critical filter is highlighted up front. No filler.

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

Completeness5/5

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

For a search tool with an output schema, the description covers all essential behavior: rating band, tags, ordering, and the unique exclude filter. Nothing an agent needs to invoke it correctly is missing.

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?

Schema description coverage is 100%, so the schema documents every parameter. The description adds meaning beyond the schema for exclude_solved_by, explaining its practical significance and why it's the main reason to use this tool. That lifts it above the baseline 3.

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 opens with a clear verb+resource statement: 'Find Codeforces problems by rating band and tags, easiest first.' It specifies the criteria and ordering, and its function is immediately distinguishable from the sibling tools (which cover performance, submissions, profiles, history, and contests).

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 explains when to reach for this tool by highlighting the unique value of the exclude_solved_by filter that 'the Codeforces website cannot express.' This gives a concrete use case, but it does not explicitly contrast with sibling tools or state exclusions, so it stops short of a 5.

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

codeforces_tag_performanceA
Read-onlyIdempotent

Rank a handle's problem tags by solve rate, weakest first.

Computed from full submission history and deduplicated per problem, so grinding one problem twelve times counts once. Use it to decide what to practise: the lowest solve rates with a meaningful number of attempts are the real gaps. Codeforces exposes no endpoint for this.

NameRequiredDescriptionDefault
handleYesCodeforces handle, e.g. '3.141f'
min_attemptedNoIgnore tags with fewer attempts than this, so a 0/1 tag cannot top the weakness ranking
response_formatNo'markdown' for a readable table, 'json' for structured datamarkdown

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses important behavioral details: computation from full submission history, deduplication per problem (so repeated attempts count once), and the emphasis on 'meaningful number of attempts' via min_attempted. This adds context not present in annotations, making invocation expectations clear.

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 three sentences, each earning its place: the first states the core purpose, the second explains the computational nuance, and the third gives practical usage guidance. The purpose is front-loaded, and there is no redundancy.

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

Completeness5/5

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

For a read-only analysis tool with an output schema (not shown but present), the description fully covers what the tool does, how results are derived, and when to use it. It omits nothing an agent needs to select and invoke the tool correctly; remaining details like response_format are handled by the schema.

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?

All parameters are fully described in the schema (100% coverage), so the baseline of 3 applies. The description adds a minor tie-in by referring to 'meaningful number of attempts' which aligns with min_attempted, but it does not provide new semantic details beyond the schema definitions.

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 states a specific action ('Rank a handle's problem tags by solve rate, weakest first') with a clear resource (problem tags of a handle). It distinguishes from siblings by specifying the computed nature and the lack of a Codeforces endpoint, which other tools likely do not cover.

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 provides clear use context ('Use it to decide what to practise') and explains the deduplication logic that affects ranking. It does not explicitly name alternatives or state when not to use it, but it does imply uniqueness by noting Codeforces exposes no endpoint for this, giving adequate guidance for choosing it over similar tools.

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

codeforces_upcoming_contestsA
Read-onlyIdempotent

Contests that have not started yet, soonest first, with start time and duration.

NameRequiredDescriptionDefault
limitNoMaximum contests to return
response_formatNo'markdown' for a readable table, 'json' for structured datamarkdown

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive). The description adds behavioral context beyond those annotations by specifying that results are sorted soonest first and include start time and duration. This tells the agent exactly what to expect in the output, which is valuable. No additional behavioral disclosures (e.g., pagination, rate limits) are necessary for such a simple read-only tool.

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?

A single sentence that leads with the essential information ('Contests that have not started yet') and includes ordering and output fields. No fluff, no redundant wording. It is appropriately sized and front-loaded.

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

Completeness5/5

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

The tool is simple with an output schema present, so return values do not need to be described. Annotations cover safety, and the description covers the core behavior. Sibling tools are clearly differentiated. For an agent to invoke this tool correctly, it has all necessary information: what it returns, how it sorts, and the parameter constraints are in the schema. No gaps.

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 coverage is 100%: both parameters (limit and response_format) have clear descriptions in the schema. The tool description does not add any extra meaning to the parameters. Since the schema already fully documents them, the baseline of 3 applies.

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 states a clear verb+resource: it lists contests that haven't started, with a specific ordering (soonest first) and the fields included (start time and duration). This distinguishes it sharply from sibling tools like codeforces_search_problems or codeforces_rating_history, which serve entirely different purposes. There is no ambiguity about what this tool returns.

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: it is for upcoming contests. However, it does not explicitly mention when to use it versus alternatives or any exclusions. Sibling tools are clearly different, so the context is obvious, but there is no explicit routing guidance. This fits the 'implied usage' level.

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

codeforces_user_profileA
Read-onlyIdempotent

Public profile for a Codeforces handle: rating, max rating, rank, organization.

NameRequiredDescriptionDefault
handleYesCodeforces handle, e.g. '3.141f'
response_formatNo'markdown' for a readable table, 'json' for structured datamarkdown

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds that the profile is 'public' and enumerates the data fields, which is slightly beyond annotations but does not disclose other behaviors like error handling or data freshness. With annotations present, the added value is moderate.

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 focused sentence that front-loads the core purpose and lists key fields. There is no redundancy or filler; every word contributes to understanding what the tool does.

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?

For a simple read-only profile tool, the description is nearly complete. The output schema exists, so return values don't need explanation. The description could mention the lack of filtering or performance implications, but given the straightforward nature and other structured metadata, the information is sufficient.

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 provides full descriptions for both parameters (handle with example, response_format with explanation). The description adds no additional parameter-specific meaning, so the baseline of 3 applies given 100% schema coverage.

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 retrieves a public profile for a Codeforces handle and lists the specific fields returned (rating, max rating, rank, organization). This is a distinct purpose, easily differentiated from siblings like rating_history or recent_submissions.

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 for getting profile data but does not provide explicit when-to-use guidance or contrast with sibling tools such as codeforces_rating_history (for historical trends) or codeforces_search_problems. No exclusions or alternatives are mentioned, leaving the agent to infer context.

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.

  1. 6 tool updatesv0.1.0
    • First observedcodeforces_rating_history
    • First observedcodeforces_recent_submissions
    • First observedcodeforces_search_problems
    • First observedcodeforces_tag_performance
    • First observedcodeforces_upcoming_contests
    • First observedcodeforces_user_profile

TDQS

A4.1/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct concern: problem search, tag-based performance analytics, recent submissions, user profile, rating history, and upcoming contests. There is no meaningful overlap or ambiguity between any pair of tools.

Naming Consistency4/5

All names share the codeforces_ prefix and use snake_case, which makes them easy to predict and group. The pattern is not strictly verb_noun throughout, but the deviations are minor and do not hurt readability.

Tool Count5/5

Six tools is a well-scoped size for a Codeforces companion server. Each tool covers a meaningful aspect of Codeforces usage without redundancy or bloat.

Completeness4/5

The surface covers the main Codeforces workflows: finding problems, analyzing weaknesses, reviewing submissions, checking profile progression, and seeing upcoming contests. A direct problem-statement or contest-problem listing tool would improve completeness, but the current set has no critical dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A complete, all-in-one MCP server for Codeforces, enabling AI assistants to access user profiles, compare users, search problems, get practice recommendations, and more.
    8
    3
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A production-ready MCP server for GitHub and competitive programming (Codeforces) that enables AI assistants to fetch user profiles, repository stats, contest history, and personalized problem recommendations.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables analyzing Codeforces activity through local MCP tools, including weekly practice summaries, problem recommendations, user comparisons, weak-topic detection, contest tracking, and rating progress.
    -