codeforces-mcp
codeforces-mcp
MCP-сервер, который даёт агентам для написания кода доступ к тренировочным данным Codeforces. Он помогает разобраться в своих слабых тегах и находить задачи, которые вы ещё не решали.
Сервер работает в режиме чтения, использует публичный API Codeforces и не требует аутентификации Codeforces. Он работает с VS Code Copilot, Claude Desktop/Code и другими MCP-клиентами, поддерживающими stdio-серверы.
Возможности
Находить задачи по рейтингу и тегу, при необходимости исключая уже решённые задачи пользователя.
Ранжировать теги хэндла по доле решённых задач и среднему рейтингу решённых.
Просматривать последние посылки и фильтровать их по вердикту.
Смотреть профиль пользователя и историю рейтинга.
Выводить список ближайших соревнований.
Возвращать результаты в читаемом Markdown или структурированном JSON.
Локально кэшировать ответы API и соблюдать разумную частоту запросов.
Related MCP server: cf-mcp-orange
Требования
Python 3.10 или новее
Хэндл Codeforces для инструментов, связанных с конкретным пользователем
VS Code с GitHub Copilot Agent mode, 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 она может указывать прямо на созданное виртуальное окружение:
{
"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 о чём-то вроде:
Найди для хэндл-хэндла
найди и нерешённых задач по DP рейтинга 1300–1500.
Сервер использует stdio, поэтому сервер запускается и останавливается по мере необходимости. Не запускайте вторую копию вручную, пока 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
Показывает текущий рейтинг хэндла, максимальный рейтинг, звание и организацию.
{
"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Если вы установили в другое виртуальное окружение, обновите путь command в mcp.json.
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 для переписывания всех коммитов текущей ветки к 14 и 15 июля 2026 года. Он создаёт резервную ветку перед вторжением в историю:
bash rebase-commits-to-july.shРабочее дерево должно быть чистым, и скрипт должен запускаться из ветки с названием — запускаться из именованной ветки. Он переписывает идентификаторы коммитов, поэтому без согласования не используйте его в общей ветке. Чтобы восстановить исходную вершину, используйте резервную ветку, которую напечатал скрипт:
git reset --hard backup/pre-date-rebase-<timestamp>Прочтите SPEC.md перед изменением поведения инструмента. Он определяет контракты и критерии приёмки, и каждый критерий соответствует контрактному тесту.
Структура проекта
Путь | Назначение |
| HTTP-клиент, кэширование И rate limiting |
| Типизированные модели ввода/вывода |
| Логика инструментов, независимо от MCP |
| Регистрация и форматирование MCP |
| Офлайн-контрактные тесты с фикстурами |
| Опциональные тесты на расхождения с реальным состоянием |
| Кейсы оценки поведения агентов |
Публикация
Откройте информацию о баге или предлагаемом изменении поведения.
Обновите
SPEC.mdи его контрактный тест перед изменением поведения.Держите логику инструментов в
src/codeforces_mcp/tools/без MCP-импортов.Запустите проверки для разработчика и включите соответствующие тестовые выводы в pull request.
Пожалуйста, избегайте коммитов виртуальных окружений, кэшей, артефактов сборки или API-записей, содержащих персональные данные. Файл .gitexclude/repository уже исключает созданные этим проектом локальные артефакты разработки.
Связанная документация
SPEC.md — контракты инструментов и проектные решения
docs/TECHNICAL-OVERVIEW.md — архитектура и детали реализации
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to participate in CodeChef contests by fetching problems, generating and testing solutions in a secure sandbox, and submitting answers.
- AlicenseAqualityBmaintenanceA complete, all-in-one MCP server for Codeforces, enabling AI assistants to access user profiles, compare users, search problems, get practice recommendations, and more.8MIT
- AlicenseNot gradedqualityAmaintenanceEnables searching and retrieving metadata for Codeforces problems by title, id, rating, or tag, and provides service health status.MIT
- AlicenseNot gradedqualityBmaintenanceA 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
Related MCP Connectors
Search Codeforces problems and inspect public problem metadata through the official Codeforces API.
Search AtCoder problems and fetch public problem statements through MCP.
Codeforces competitive programming users, contests, problems
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Faysal-star/codeforces-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server