@pipeworx/codeforces

Connect: https://gateway.pipeworx.io/codeforces/mcp · Install: one-click buttons

Tools: 8

Codeforces public read API MCP — competitive programming users, contests, problems, submissions. Keyless.

Tools

  • user(handles[]) — profile(s) by handle (up to 10k)
  • user_rating(handle) — full rating history for a user
  • user_status(handle, count?) — recent submissions for a user
  • contest_list(gym?) — all contests (regular or gym)
  • contest_standings(contest_id, handles?, from?, count?) — final scoreboard + problem list for one contest
  • problemset(tags?, problemset_name?) — problemset + recent submissions stats
  • recent_actions(max_count?) — recent global actions feed
  • blog_entry_view(blog_id) — full blog entry by id

Standings paging is done here, not upstream

Codeforces rejects from, count and handles on public standings — it answers HTTP 400 with “Non-gym contest standings for non-admin users are available only via anonymous GET requests with no extra parameters”. The only request it accepts is the bare ?contestId=<id>, which returns the entire scoreboard (2.7 MB for contest 1000, 14 MB for contest 2000).

So contest_standings streams that response and slices it here: from/count page the rows and handles filters them, with the same meaning they had before. Nothing is held in memory beyond the window you asked for. Two consequences worth knowing:

  • Without a handles filter the read stops as soon as your window is full, so the response carries has_more: true instead of total_rows — the participant count is genuinely unknown at that point. Ask for a window past the end of the scoreboard, or pass handles, and you get total_rows.
  • Gym contests are not available at all. Codeforces serves gym standings only to an authenticated Codeforces account and this pack is keyless, so it returns {found: false, reason: "gym_contest_requires_codeforces_account"} rather than an error.

Data source

https://codeforces.com/api/

Tools

  • user — User profile(s) by handle (up to 10000 semicolon-separated).
  • user_rating — Full rating history for a user.
  • user_status — Codeforces competitive-programming API — the submission history of one Codeforces handle, newest first, paged with from/count. Each submission carries the contest and problem it targeted, the judge ve
  • contest_list — All contests. Pass gym=true for gym contests.
  • contest_standings — Codeforces competitive-programming API — the final scoreboard of one Codeforces round: every participant’s rank, handle, total points, penalty, hack counts and per-problem results, plus the contest me
  • problemset — Problemset + per-problem submission counts. Optional tag filter.
  • recent_actions — Codeforces competitive-programming site — the global recent-actions feed, the newest blog entries and comments posted anywhere on Codeforces. Each action returns its timestamp plus the blog entry (tit
  • blog_entry_view — Full blog entry by id.

Tools

  • blog_entry_view — Full blog entry by id.
  • contest_list — All contests. Pass gym=true for gym contests.
  • contest_standings — Codeforces competitive-programming API — the final scoreboard of one Codeforces round: every participant's rank, handle, total points, penalty, hack counts and per-problem results, plus the contest me
  • problemset — Problemset + per-problem submission counts. Optional tag filter.
  • recent_actions — Codeforces competitive-programming site — the global recent-actions feed, the newest blog entries and comments posted anywhere on Codeforces. Each action returns its timestamp plus the blog entry (tit
  • user — User profile(s) by handle (up to 10000 semicolon-separated).
  • user_rating — Full rating history for a user.
  • user_status — Codeforces competitive-programming API — the submission history of one Codeforces handle, newest first, paged with from/count. Each submission carries the contest and problem it targeted, the judge ve

Regenerated from source · build September 10, 2026