codeforces-mcp
codeforces-mcp
一个 MCP 服务器,为编码智能体提供 Codeforces 练习数据的访问。它可以帮助你了解自己的薄弱标签(tags),并找出你尚未解决的题目。
该服务器是只读的,使用公共 Codeforces API,无需任何 Codeforces 认证。它可与 VS Code Copilot、Claude Desktop/Code 以及其他支持 stdio 服务器的 MCP 客户端配合使用。
功能
按评分和标签查找题目,并可选地排除某个用户已解决的题目。
按通过率和平均已解决评分对某个用户名的标签进行排序。
查看最近的提交记录,并按评判结果(verdict)过滤。
查看用户的个人资料和评分历史。
列出即将到来的比赛。
以可读的 Markdown 或结构化 JSON 返回结果。
在本地缓存上游响应,并强制一个礼貌的请求速率。
Related MCP server: DevAssist MCP Server
环境要求
Python 3.10 或更高版本
用于用户相关工具的 Codeforces 用户名(handle)
带有 GitHub Copilot Agent 模式的 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 .开发模式下,同时安装测试和 lint 依赖:
python -m pip install -e ".[dev]"安装完成后会在虚拟环境中创建 codeforces-mcp 命令。
与 VS Code Copilot 一起使用
仓库包含位于 .vscode/mcp.json 的工作区配置。在 Windows 上,它可以直接指向检出的虚拟环境:
{
"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 中:
在命令面板中运行
MCP: Open Workspace Folder Configuration。添加或更新
codeforces服务器条目。打开 Copilot Chat 并切换到 Agent 模式。
打开工具菜单,启动或启用
codeforces服务器,并允许这些工具。
然后可以这样向 Copilot 提问:
帮用户
3.141f找 5 道评分在对解题结果(OK)中尚未解决的 DP 题目。
服务器使用 stdio,因此 VS Code 会在需要时自动启动或停止它。在 Copilot 连接期间,请勿手动再启动一个副本。
与 Claude 一起使用
激活虚拟环境后,将该命令注册到 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
按难度从易到难查找题目。设置 exclude_solved_by 可隐藏该用户名下评判结果为 OK 的题目。
参数 | 默认值 | 说明 |
| 无 | 最低评分,范围从 800 到 3500 |
| 无 | 最高评分,范围从 800 到 3500 |
|
| 最多 10 个 Codeforces 标签 |
|
| 使用 |
| 无 | 排除该 Codeforces 用户名已解决的题目 |
|
| 返回的结果数量,范围从 1 到 100 |
|
| 跳过的匹配结果数 |
|
|
|
示例请求:
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_tag_performance
计算某个用户名的每个标签下的尝试次数、通过数、通过率和评分。结果按通过率从低到高排序。min_attempted 可避免极小的样本在排序中占主导地位。
{
"handle": "3.141f",
"min_attempted": 8,
"response_format": "markdown"
}codeforces_recent_submissions
列出某个用户名的最新提交记录。使用 verdict(如 WRONG_ANSWER、TIME_LIMIT_EXCEEDED 或 OK)对列表进行过滤。
{
"handle": "3.141f",
"verdict": "WRONG_ANSWER",
"limit": 10
}codeforces_user_profile
显示某个用户名的当前评分、最高评分、段位(rank)和所属组织。
{
"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 约为每两秒一个请求。客户端会强制速率限制,并默认将响应存储于 ~/.cache/codeforces-mcp。缓存生命周期反映数据变化的频率:题目集合为六小时,提交记录为五分钟,用户资料为一小时。
故障排除
服务器无法启动
检查 MCP 配置所使用的环境中是否存在该可执行文件:
Test-Path .\.venv\Scripts\codeforces-mcp.exe./.venv/bin/codeforces-mcp如果你安装到了另一个虚拟环境,请更新 mcp.json 中的 command 路径。
Codeforces 返回错误
检查用户名的拼写,并稍后重试。服务器会将可操作的 Codeforces 错误注释透传给客户端。公共 API 也可能暂时受到速率限制或不可用。
开发
提交变更前先运行确定性检查:
ruff check .
mypy src/
pytest tests/contract -q
python eval/run_eval.py实际调用 Codeforces 的在线测试为可选:
pytest -m live -q重写本地提交日期
仓库中包含 rebase-commits-to-july.sh,用于将当前分支的所有提交重写到 2026 年 7 月 14 日至 15 日之间。它在改写历史前会先创建备份分支:
bash rebase-commits-to-july.sh工作树必须干净,且脚本必须在已命名分支上运行。该脚本会重写提交 ID,因此不要在未经协调的情况下用于共享分支。要恢复原始顶端提交,可使用脚本输出的备份分支:
git reset --hard backup/pre-date-rebase-<timestamp>在更改工具行为之前,请阅读 SPEC.md。它定义了契约和验收标准,每个标准都有对应的契约测试。
项目结构
路径 | 用途 |
| HTTP 客户端、缓存、速率限制 |
| 有类型的输入输出模型 |
| 与 MCP 无关的工具逻辑 |
| MCP 注册与格式化 |
| 基于离线 fixture 的契约测试 |
| 可选的线上漂移测试 |
| 智能体行为评估用例 |
参与贡献
对于 bug 或行为变更建议,先开启 issue。
在更改行为之前,先更新
SPEC.md及其契约测试。保持
src/codeforces_mcp/tools/中的工具逻辑不依赖 MCP 的导入。提交前运行开发检查,并在 pull request 中包含相关测试输出。
请避免提交虚拟环境、缓存、构建输出或包含个人数据的 API 录音。仓库的 .gitignore 已排除了本项目创建的本地开发文件。
相关文档
SPEC.md - 工具契约与设计决策
docs/TECHNICAL-OVERVIEW.md - 架构与实现细节
Available Tools
6 toolscodeforces_rating_historyARead-onlyIdempotent
Contest-by-contest rating changes for a handle, oldest first, with deltas.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Return only the most recent N contests | |
| handle | Yes | Codeforces handle, e.g. '3.141f' | |
| response_format | No | 'markdown' for a readable table, 'json' for structured data | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_submissionsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum submissions to return | |
| handle | Yes | Codeforces handle, e.g. '3.141f' | |
| verdict | No | Filter by verdict, e.g. 'WRONG_ANSWER', 'TIME_LIMIT_EXCEEDED', 'OK' | |
| response_format | No | 'markdown' for a readable table, 'json' for structured data | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_problemsARead-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".
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Codeforces tags, e.g. ['dp','greedy']. Empty means any. | |
| limit | No | Maximum problems to return | |
| offset | No | Problems to skip, for pagination | |
| max_rating | No | Highest problem rating, inclusive | |
| min_rating | No | Lowest problem rating, inclusive | |
| tags_match | No | 'any' = at least one tag, 'all' = every tag | any |
| response_format | No | 'markdown' for a readable table, 'json' for structured data | markdown |
| exclude_solved_by | No | Hide problems this handle already solved, e.g. '3.141f' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_performanceARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Codeforces handle, e.g. '3.141f' | |
| min_attempted | No | Ignore tags with fewer attempts than this, so a 0/1 tag cannot top the weakness ranking | |
| response_format | No | 'markdown' for a readable table, 'json' for structured data | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_contestsARead-onlyIdempotent
Contests that have not started yet, soonest first, with start time and duration.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum contests to return | |
| response_format | No | 'markdown' for a readable table, 'json' for structured data | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_profileARead-onlyIdempotent
Public profile for a Codeforces handle: rating, max rating, rank, organization.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | Codeforces handle, e.g. '3.141f' | |
| response_format | No | 'markdown' for a readable table, 'json' for structured data | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
v0.1.0- First observed
codeforces_rating_history - First observed
codeforces_recent_submissions - First observed
codeforces_search_problems - First observed
codeforces_tag_performance - First observed
codeforces_upcoming_contests - First observed
codeforces_user_profile
TDQS
Scored across 6 tools
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.
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.
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.
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
Related MCP Connectors
Search GitHub, npm, PyPI, StackOverflow, ArXiv from one MCP — built for coding agents.
Knowledge Network for AI Agents and creators: Search, rate, and review programming guides via MCP
Search and inspect source-pinned agent skills, plugins and tools through a free public MCP.
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
Related MCP Servers
- AlicenseAqualityDmaintenanceA complete, all-in-one MCP server for Codeforces, enabling AI assistants to access user profiles, compare users, search problems, get practice recommendations, and more.83MIT
- AlicenseNot gradedqualityCmaintenanceA 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
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to access Codeforces public data (users, contests, problems, etc.) via natural language or direct tool calls through Pipeworx gateway.439 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables analyzing Codeforces activity through local MCP tools, including weekly practice summaries, problem recommendations, user comparisons, weak-topic detection, contest tracking, and rating progress.-