Skip to main content
Glama

An MCP server that exposes the Repovive competitive-programming platform to any MCP client (Claude Desktop, Claude Code, IDE extensions, …). Built with FastMCP v3 and httpx.

It provides 102 tools, 11 resources (1 templated), and 8 prompts covering problems, contests, ratings, courses, blog posts, direct messages, notifications, mock-interview info, Vive points, account/profile management, real code submission, contest standings, production problem/contest authoring in Repovive's build editor, and a built-in local judge — with built-in version control over everything it edits, all behind scoped bearer authentication when served over HTTP.

Every tool has been tested end-to-end — read/write tools against the live Repovive API, submission verified with a real Accepted verdict, and the authoring/judge tools by generating full contests and running every reference solution to Accepted.


Contents


Related MCP server: cf-mcp-orange

How it works

  1. Connect your MCP client (Claude Desktop, Claude Code, an IDE) to the server over stdio or HTTP.

  2. Read & author — browse problems and contests, or generate and draft new ones in Repovive's build editor.

  3. Judge locally — verify a solution against its tests with the built-in judge before anything leaves your machine.

  4. Submit / publish — submit for a real verdict, or (with approval) publish a draft to a contest.

What you can do

  • Browse & read problems — list a contest's problems with full statements, constraints, I/O formats, time/memory limits, tags, and sample test cases.

  • Explore contests — list upcoming/ongoing/past contests, view details, check and manage your registrations, get invite links.

  • Submit & track — submit a solution for a real verdict, read your submission history, and pull a contest's ranking, results and announcements.

  • Ratings — page and filter the global leaderboard by country / name / tier.

  • Courses & blog — list courses and posts; manage course editors/metadata (with the right permissions).

  • Community — read/send direct messages, manage conversations and blocks, read and mark notifications.

  • Interviews & Vive — read mock-interview pricing/capacity/sessions; view Vive earn methods and create a Vive checkout link.

  • Account — who am I, profile, update country, search users, sign out.

  • Scoped access — hand out keys that can read but not submit, author but not publish, or call the platform but not run code on your host.

  • Undo your edits — every change to a draft, contest, course or profile is versioned automatically, with a diff and a one-call rollback.

  • Author for production — create problem drafts in Repovive's editor and fill in statement, tests, model solution, editorial and validator; generate and verify whole rounds; judge solutions locally — see Authoring.

System architecture

Submitting code

repovive_submit_solution submits to POST /api/code/submit and polls until the verdict is final — a real submission recorded on your account. Verify locally first with repovive_judge_solution; Repovive rate-limits submissions to roughly 10 per minute.

repovive_submit_solution(contest_id="<24-hex>", problem_slug="remainder-count",
                         source=..., language="pypy")
#  -> {"submissionId": "...", "status": "Accepted", "passed": 18, "total": 18}

Language ids for submission follow the Judge0 set (python 71, pypy 220, cpp 54, java 62, …), which differs from the problem editor's own ids — the tool maps names for you. repovive_list_my_submissions lists your submission history.

Submission and verdict flow

Notes. The curated problem sets (Classics / FAANG / Quant / Math) are premium content served only through the website, so their problem lists are not available via the API — repovive_list_problem_sets returns their metadata and website URLs; for API-readable problems use contests (repovive_list_contest_problems). A problem like/dislike vote endpoint exists but keys on browser-URL identifiers that can't be resolved reliably from the public API, so it is intentionally not exposed.


Quick start

pip install repovive-mcp               # or, from a clone: pip install -e .

export REPOVIVE_EMAIL="you@example.com"
export REPOVIVE_PASSWORD="your-password"
python -m repovive_mcp                  # stdio transport (or: repovive-mcp)

Then point your MCP client at it (see below) and try repovive_whoami or repovive_list_contests.

Serving it over HTTP instead? You also need an access token, because the port would otherwise let anyone act as your Repovive account — see Access control.

export REPOVIVE_MCP_AUTH_TOKEN="$(make auth-token)"
make run-http                          # or: docker compose up --build

Install

Requires Python ≥ 3.10.

pip install repovive-mcp

Or from a clone, for development:

python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"   # fastmcp>=3, httpx, pytest, ruff

Prefer a container? Images are published multi-arch, signed, and carry an SBOM:

docker pull ghcr.io/dwin-gharibi/repovive-mcp:latest

Run it directly (stdio transport):

export REPOVIVE_EMAIL="you@example.com"
export REPOVIVE_PASSWORD="your-password"
python -m repovive_mcp          # or: repovive-mcp

Access control

Two different things are being authenticated, and it is worth keeping them apart:

What it is

Configured with

Repovive account

who the server acts as on the platform

REPOVIVE_EMAIL + REPOVIVE_PASSWORD, or REPOVIVE_TOKEN

MCP access

who may call this server

REPOVIVE_MCP_AUTH_TOKEN (or ..._TOKENS, or JWT settings)

Over stdio your MCP client spawns the process, so the process boundary is the trust boundary and there is nothing to configure. Over HTTP the server refuses to start without an access token — an open port there is an open door to your account: submitting code, sending direct messages, deleting contests.

export REPOVIVE_MCP_AUTH_TOKEN="$(python -c 'import secrets; print(secrets.token_urlsafe(32))')"

Callers then send Authorization: Bearer <token>. You can store a sha256:<hex> digest instead of the secret itself, hand out several keys with different privileges, or verify JWTs from your own issuer.

Scopes. Every tool declares what it needs, and a caller without that scope doesn't get an error — the tool is simply absent from tools/list, so a model never sees a capability it can't use.

Scope

Grants

repovive:read

Problems, contests, standings, leaderboard, posts, courses, inbox.

repovive:write

Mutating your account: DMs, blocks, notifications, profile, registrations, Vive checkout.

repovive:submit

Real submissions recorded against your account.

repovive:author

Creating and editing problem drafts.

repovive:admin

Contest and course administration; deletions.

repovive:execute

Running code on the server host (local judge, generators).

repovive:history

Reading the action log and revision history, and rolling a change back.

# a read-only key for a dashboard, and a full key for your own agent
export REPOVIVE_MCP_AUTH_TOKENS='{
  "sha256:<hex>": {"client_id": "dashboard", "scopes": ["repovive:read"]},
  "sha256:<hex>": {"client_id": "agent"}
}'

Full details — digests, expiry, JWT settings, and the REPOVIVE_MCP_ALLOW_ANONYMOUS escape hatch for a port already behind an authenticating proxy — in docs/SECURITY.md.

Configure your MCP client

Add a server entry. Example (Claude Desktop claude_desktop_config.json / Claude Code mcp config):

{
  "mcpServers": {
    "repovive": {
      "command": "python",
      "args": ["-m", "repovive_mcp"],
      "env": {
        "REPOVIVE_EMAIL": "you@example.com",
        "REPOVIVE_PASSWORD": "your-password"
      }
    }
  }
}

If you installed into a virtualenv, point command at that interpreter (e.g. /path/to/.venv/bin/python) or use the repovive-mcp console script.

For a server you're running over HTTP, point the client at the endpoint and pass the access token:

{
  "mcpServers": {
    "repovive": {
      "type": "http",
      "url": "https://mcp.example.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_ACCESS_TOKEN" }
    }
  }
}

Tool reference

All tools are prefixed repovive_. Read tools accept response_format (markdown default, or json) where a summary view is useful. Each carries the access scope it needs (see Access control). The list below is grouped by area; the always-current, auto-generated reference — with per-tool scopes and full descriptions — is docs/TOOLS.md.

Tool map

Account & profile (7)

Tool

Description

repovive_whoami

Current account (id, role, premium, Vive, streaks).

repovive_get_my_profile

Profile document (job role, org, socials, location).

repovive_update_my_location

Update profile country (idempotent).

repovive_search_users

Find users by name (for DMs).

repovive_list_my_documents

Your uploaded documents.

repovive_build_version

Deployed build/release info (no auth).

repovive_logout

Invalidate session (auto re-auth next call).

Problems (4)

Tool

Description

repovive_list_problem_sets

Curated sets (Classics/FAANG/Quant/Math) + URLs.

repovive_list_contest_problems

All problems in a contest (summaries or full).

repovive_get_problem

One problem: statement, constraints, limits, samples.

repovive_get_problem_workspace_url

Browser URL to solve/submit a problem.

Contests & ratings (12)

Tool

Description

repovive_list_contests

List contests, filter by upcoming/ongoing/past.

repovive_get_contest

One contest by number or id.

repovive_get_contest_registrations

Your registrations & permissions.

repovive_register_for_contest

Register (normal or virtual).

repovive_get_contest_invite_link

Shareable invite link.

repovive_check_invite_eligibility

Invite eligibility.

repovive_get_contest_permissions

List collaborators (admin).

repovive_set_contest_permission

Grant a role (admin).

repovive_remove_contest_permission

Revoke a role (admin).

repovive_update_contest

Edit contest settings (admin).

repovive_delete_contest

Delete a contest (admin, destructive).

repovive_get_leaderboard

Global ratings leaderboard (paged/filtered).

Standings & results (4)

Tool

Description

repovive_get_contest_ranking

Final standings for a contest.

repovive_get_contest_results

Your per-problem results in a contest.

repovive_get_contest_announcements

Contest announcements/clarifications.

repovive_get_problem_submissions

Submissions for one contest problem.

Submissions (3)

Tool

Description

repovive_submit_solution

Submit a solution and await the verdict (real submission).

repovive_list_my_submissions

Your submission history.

repovive_get_submission

Read a submission's status/verdict by id.

Content — courses & blog (8)

Tool

Description

repovive_list_posts

Blog posts (paged).

repovive_get_post_categories

Blog categories.

repovive_list_courses

Courses with your enrollment.

repovive_get_course_editors

List course editors.

repovive_add_course_editor

Add an editor.

repovive_remove_course_editor

Remove an editor (destructive).

repovive_update_course_details

Update title/description/tags.

repovive_set_course_visibility

Public/private (admin).

Community — notifications & DMs (14)

Tool

Description

repovive_list_notifications

In-app notifications.

repovive_get_unread_notifications_count

Unread count.

repovive_mark_notifications_read

Mark notifications read.

repovive_list_conversations

DM conversations.

repovive_get_conversation_messages

Messages in a conversation.

repovive_send_direct_message

Send a message.

repovive_start_conversation

Start a conversation.

repovive_mark_conversation_read

Mark a conversation read.

repovive_delete_conversation

Delete a conversation (destructive).

repovive_delete_direct_message

Delete a message (destructive).

repovive_get_unread_dm_count

Total unread DMs.

repovive_list_blocked_users

Blocked users.

repovive_block_user

Block a user.

repovive_unblock_user

Unblock a user (destructive).

Interviews & Vive (5)

Tool

Description

repovive_get_interview_prices

Mock-interview prices.

repovive_check_interview_capacity

Interview capacity.

repovive_list_interview_sessions

Your interview sessions.

repovive_get_vive_earn_methods

Ways to earn Vive.

repovive_create_vive_checkout

Create a Vive purchase link (no charge).

Authoring & judge — local (11)

Tool

Description

repovive_list_problem_templates

Built-in problem generators.

repovive_generate_problem

Generate a complete, self-consistent problem.

repovive_new_problem_template

Empty problem skeleton + field reference.

repovive_validate_problem

Validate a problem against the schema.

repovive_judge_solution

Run a solution against tests (local judge).

repovive_available_judge_languages

Languages the host can run.

repovive_build_contest

Generate + validate + judge a whole contest.

repovive_list_house_templates

Generators that match Repovive's published style.

repovive_generate_house_problem

Generate a house-style problem.

repovive_check_house_style

Check a problem against house conventions.

repovive_build_house_round

Assemble & verify a full house-style round.

Problem editor — build sessions (25)

Tool

Description

repovive_build_list_sessions / repovive_build_create_session

List / create problem drafts.

repovive_build_update_problem_info

Slug, difficulty, limits, interactive flag.

repovive_build_update_statement

Statement, I/O format, constraints.

repovive_build_add_testcases / list_testcases / clear_testcases / delete_testcase

Manage draft test cases.

repovive_build_set_solutions / get_solutions

Model & alternative solutions (language→judgeId).

repovive_build_set_learn_pages

Editorial / learn pages.

repovive_build_set_validator / set_custom_checker

Input validator, custom checker.

repovive_build_set_generator / set_gen_data / delete_generator / update_sources

Generators, gen-data, sources.

repovive_build_prepare_judge_target / run_status / cancel_run

Generate & verify tests.

repovive_build_push_problem

Push a whole generated problem into a draft.

repovive_build_author_complete_problem

Metadata+statement+tests+solution+editorial+validator in one call.

repovive_build_delete_session

Delete a problem draft (destructive).

repovive_build_list_admin_contests / repovive_build_add_to_contest

Publish step (explicit).

History & revisions (9)

Tool

Description

repovive_list_history

Browse the local log of state-changing calls.

repovive_get_history_entry

One entry in full, with its (redacted) arguments.

repovive_history_status

Where the database lives, what it holds, retention limits.

repovive_list_revisions

An entity's saved versions, newest first.

repovive_get_revision

One revision including its full snapshot.

repovive_diff_revisions

What changed between two revisions, field by field.

repovive_restore_revision

Roll back to a revision (or into a different entity).

repovive_undo_last_change

Step one change back.

repovive_purge_history

Delete history entries (destructive).

Drafts are not visible on the platform until reviewed; publishing is the separate repovive_build_add_to_contest call. Details in docs/AUTHORING.md. Every edit above is versioned automatically — see History & rollback.

Authoring & local judge

The server can generate complete problems, build full contests, and evaluate them with a local judge — offline, with no writes to the live platform. Every generated problem's expected outputs are computed by running its reference solution, so it is correct by construction; repovive_build_contest(..., verify=True) judges every reference solution and only reports success when all are Accepted.

repovive_build_house_round(title="Repovive Starter Round 8")
  -> {round, verification: {all_passed: true, ...}}   # 7 problems, house-style, all AC

When you're ready to put a draft into Repovive's editor, the build-session tools write everything and leave publishing to you:

Build-session authoring flow

Verified example artifacts live in examples/ (12 problems, 4 contests). Full details in docs/AUTHORING.md. A ready-to-use agent skill is in skills/repovive-contest-dev/.

History & rollback

Repovive has no version control for problem drafts, so the server keeps its own. Every state-changing call is logged, and every change to a problem draft, contest, course or your profile is snapshotted automatically — you don't opt in, and you don't call anything to save a version.

repovive_list_revisions(target_kind="build_session", target_id="<session id>")
#  seq 4  auto      Updated the draft statement      <- the mistake
#  seq 3  auto      Added draft test cases
#  seq 2  auto      Updated the draft statement
#  seq 1  baseline  before the first tracked change

repovive_diff_revisions(from_revision_id=…, to_revision_id=…)
#  statement.title:       'Array Sum' -> 'OOPS wrong title'
#  statement.description: 'Sum the array.' -> 'Broken.'

repovive_undo_last_change(target_kind="build_session", target_id="<session id>")
#  -> statement restored, test cases untouched, undo recorded as a new revision
  • Nothing is destroyed. A restore re-applies an old snapshot through the normal API and is recorded as a new revision, so you can undo the undo.

  • Deleting a draft doesn't delete its history. Create a fresh build session and pass into_target_id to rebuild it there.

  • dry_run=True reports exactly which sections would be written before anything changes.

  • Honest about coverage. Repovive exposes no read endpoint for a draft's statement or generators, so those sections are reconstructed from what this server wrote; test cases and solutions are read back and always authoritative. Each revision names the sections it actually knows instead of pretending to more.

  • Irreversible things stay irreversible. A sent direct message, a recorded submission and a Vive checkout are logged, never claimed as undoable.

The log doubles as an audit trail — filter it by actor to see what a given access token did, or by tool to see who ran code on the host:

repovive_list_history(status="error", days=7)
repovive_list_history(tool="repovive_judge_solution")

Everything lives in one local SQLite file (mode 0600), holds no secrets — argument keys that look like credentials are redacted before writing — and is bounded by retention limits. Reading needs repovive:history; restoring additionally needs the write scope of whatever is being restored — so a repovive:history token alone is a genuine read-only audit key, and the restore tools are not even listed for it. Full details in docs/HISTORY.md.

Repovive house style

The generators and the skill follow Repovive's measured conventions — read from all 98 published problems and 23 contests, and exposed as the repovive://house-style resource:

  • Problems are multi-test (every problem starts with t), use a braced-array input format, a markdown-bullet constraints list, exactly one sample holding several sub-cases, and one explanation paragraph per sub-case. Memory limit 256 MB; time limits 1–2 s.

  • Rounds are 7 problems (A–G) on the 500…3500 points ladder with the difficulty curve easy, easy, medium, medium, medium, hard, hard, 120 minutes, tags drawn from a fixed 12-word vocabulary.

repovive_check_house_style validates a problem against these rules, and repovive_build_house_round assembles a whole conforming round and verifies every problem.

Resources & prompts

Resources (read via URI) — 11, one templated: repovive://me, repovive://profile, repovive://contests, repovive://contests/{contest_id}/problems (templated), repovive://problem-sets, repovive://leaderboard, repovive://posts, repovive://courses, repovive://notifications, repovive://house-style, repovive://auth-scopes.

Prompts (parameterised workflows) — 8: solve_problem, prepare_for_contest, study_plan, analyze_leaderboard, inbox_triage, build_repovive_round, problemset_contest, author_and_verify_problem.

Example agent session

A typical "solve a real problem" loop chains a handful of tools:

1. repovive_list_contests(status="ongoing")            # find a contest id
2. repovive_list_contest_problems(contest_id=…)        # pick a problem slug
3. repovive_get_problem(contest_id=…, problem_slug=…)  # statement + samples
4. …write a solution…
5. repovive_judge_solution(problem=…, source=…)        # local check → Accepted
6. repovive_submit_solution(contest_id=…, problem_slug=…, source=…, language="pypy")
   # -> {"status": "Accepted", "passed": 18, "total": 18}
7. repovive_get_contest_ranking(contest_id=…)          # see where you land

Solve & problemset flow


The two authentications

Inbound — who may call this server. Nothing to configure over stdio; over HTTP a bearer token is required and the server refuses to start without one. Tokens are held as SHA-256 digests and carry scopes that decide which tools a caller can even see. See Access control and docs/SECURITY.md.

Outbound — who this server is on Repovive.

  • With REPOVIVE_EMAIL + REPOVIVE_PASSWORD, the server logs in on first use, keeping both the JWT bearer token and the auth_token session cookie (some routes need the cookie). It re-authenticates automatically on a 401 — and a concurrent caller reuses a token another has already refreshed rather than logging in again — and caches the token (REPOVIVE_TOKEN_CACHE, mode 0600, written atomically) to avoid login rate limits.

  • With REPOVIVE_TOKEN only, it uses the bearer token (cookie-gated routes may not work).

  • A 429 from Repovive surfaces as a typed rate-limit error carrying Retry-After rather than being retried indefinitely.

  • The server sends a descriptive User-Agent and standard Origin header, exactly like any first-party API client.

Authentication flow

Deployment

Runs over stdio (local) or HTTP (REPOVIVE_MCP_TRANSPORT=http, endpoint /mcp). Docker, Docker Compose, Kubernetes (kustomize), Helm, OpenTofu/Terraform, Ansible, and Vagrant paths are all provided under deploy/ and the root Docker/Vagrant files.

docker compose up --build            # HTTP on :8000 (reads .env, incl. REPOVIVE_MCP_AUTH_TOKEN)
# or: helm install rv deploy/helm/repovive-mcp \
#       --set credentials.email=... --set credentials.password=... --set access.token=...
# or: kubectl apply -k deploy/kubernetes   (after creating the secret)

Every path carries an access token, and the Helm chart refuses to render without one.

Deployment topology

Full guide: docs/DEPLOYMENT.md. Handy targets in the Makefile (make help) and a Taskfile.yml for go-task (task --list).

Project layout

repovive-mcp/
├── repovive_mcp/          the server package
│   ├── app.py             shared FastMCP instance, RepoviveClient, auth provider, lifespan
│   ├── auth.py            access control for the server itself (tokens, JWT, scope guard)
│   ├── scopes.py          the scope vocabulary
│   ├── client.py          async httpx client (login, re-auth, rate limits, token cache)
│   ├── history.py         local SQLite action log + revision store
│   ├── tracking.py        which tools change what; the middleware that records it
│   ├── revisions.py       per-entity snapshot capture and restore
│   ├── tools_*.py         tool groups (account, contests, submit, build, …)
│   ├── resources.py       MCP resources        prompts.py   MCP prompts
│   ├── authoring.py housestyle.py templates_house.py production.py   local authoring
│   ├── localjudge.py      Judge0-style subprocess judge
│   └── server.py          registers everything; stdio or HTTP (refusing an open port)
├── scripts/gen_tools_doc.py   regenerates docs/TOOLS.md from the live server
├── scripts/release.py         one-source version management + changelog rolling
├── .github/workflows/         ci.yml (lint, tests, auth gate) and release.yml
├── docs/                  architecture, tools, authoring, deployment, api map, security
├── deploy/                docker, kubernetes, helm, opentofu, ansible
├── examples/              verified problems & contests
├── skills/                repovive-contest-dev agent skill
└── tests/                 smoke, offline authoring, and live e2e tests

Documentation

Development & tests

pip install -e ".[dev]"
# Live tests require real credentials and are skipped without them:
REPOVIVE_EMAIL=... REPOVIVE_PASSWORD=... pytest -q
make check               # lint + offline tests + docs freshness (no credentials needed)
make test-offline        # or: task test:offline
make docs                # regenerate docs/TOOLS.md from the live server

tests/test_smoke.py boots the server in-memory (fastmcp.Client(mcp)), lists tools/resources/prompts, and exercises representative read tools plus error handling. tests/test_auth.py covers token parsing and verification, the scope guard, and the fail-closed HTTP start; tests/test_client_behaviour.py drives the HTTP client through a mock transport (re-login, rate limits, token-cache permissions); tests/test_history.py runs the whole edit → snapshot → diff → undo loop. docs/TOOLS.md is generated by scripts/gen_tools_doc.py (CI enforces freshness with --check).

Security notes

  • The HTTP transport will not serve without an access token. Every caller acts as your Repovive account, so that port is the boundary that matters.

  • Credentials come only from environment variables — never hard-code them.

  • Treat the JWT/cookie as secrets; they grant access to your account. The token cache lives outside the repo (REPOVIVE_TOKEN_CACHE, default $XDG_CACHE_HOME/repovive-mcp/token.json, mode 0600).

  • Write tools (submission, DMs, registration, deletes, course/contest admin) perform real actions; their annotations (destructiveHint, etc.) let clients gate them, and scopes let you withhold them entirely.

  • The local judge runs the code you give it. repovive:execute is a separate scope for exactly that reason.

  • The history database holds your statements, tests and solution source. It is written 0600, never leaves the host, redacts credential-shaped arguments, and can be turned off with REPOVIVE_HISTORY=off.

  • Authoring writes drafts; publishing a draft to a live contest is a separate, explicit call. See docs/SECURITY.md.


Available Tools

102 tools
repovive_add_course_editorAdd course editorA
Idempotent

Grant a person edit or view access to a course by their email address. Requires edit rights on that course.

Inputs: email (required), course_id (required), role. Returns: result

repovive_available_judge_languagesList judge languagesA
Read-only

List the languages the local judge can actually run on this host (toolchain present) alongside every language it knows about. Check this before repovive_judge_solution.

Inputs: no named parameters. Returns: result

repovive_block_userBlock a userA
Idempotent

Block a user so they can no longer direct-message the authenticated account, with an optional reason. Reversible with repovive_unblock_user.

Inputs: user_id (required), reason. Returns: result

repovive_build_add_testcasesAdd test casesA

Append test cases to a draft in one call. Cases are ADDED to whatever is already there — clear first with repovive_build_clear_testcases if you mean to replace them. For interactive problems omit expectedOutput; the interactor decides the verdict.

Inputs: cases_json (required), session_id (required). Returns: result

repovive_build_add_to_contestAttach draft to a contestA

Publish a draft by attaching it to a contest as a real problem. This is the step that makes authored work visible on the platform — never call it without the user's explicit approval. Verify the draft builds cleanly first.

Inputs: body_json (required), session_id (required). Returns: result

repovive_build_author_complete_problemAuthor a complete problemA
Idempotent

Import a complete problem into a draft in one call: clears the existing test cases (unless replace_testcases=False), then writes metadata, statement, test cases, the reference solution, editorial pages and input validator. Returns a per-step report — check all_ok before treating the draft as ready. This edits a private draft; publishing it to a contest is a separate call.

Inputs: session_id (required), problem_json (required), learn_pages_json, validator_source, +1 more. Returns: result

repovive_build_cancel_runCancel build runA
Idempotent

Cancel the build run currently executing for a draft.

Inputs: session_id (required). Returns: result

repovive_build_clear_testcasesClear test casesA
DestructiveIdempotent

Delete every manually added test case from a draft. This cannot be undone — use it before uploading a replacement set.

Inputs: session_id (required). Returns: result

repovive_build_contestBuild & test a full contestA
Idempotent

Generate a whole contest from an ordered list of generator kinds and verify it: each problem is schema-checked, its reference solution is judged against its own tests, and a known-wrong solution is checked to fail. Returns the import-ready contest plus a per-problem verification report; require verification.all_passed before using it.

Inputs: title (required), problem_kinds (required), seed, verify, +1 more. Returns: result

repovive_build_create_sessionCreate a build sessionA

Start a new problem draft on Repovive and return its session id. Drafts are private to the authoring account until explicitly attached to a contest. Set force_new=False to resume an existing draft with the same name instead of creating another.

Inputs: session_name (required), mode, force_new. Returns: result

repovive_build_delete_generatorDelete a generatorA
DestructiveIdempotent

Remove a named generator from a draft. Any gen-data lines that invoke it will stop working, so update the gen-data script too.

Inputs: session_id (required), generator_name (required). Returns: result

repovive_build_delete_sessionDelete a problem draftA
DestructiveIdempotent

Permanently delete a problem draft and everything in it — statement, test cases, solutions, generators. This cannot be undone; confirm with the user before calling.

Inputs: session_id (required). Returns: result

repovive_build_delete_testcaseDelete one test caseA
DestructiveIdempotent

Delete one test case from a draft by its id. Get ids from repovive_build_list_testcases. This cannot be undone.

Inputs: session_id (required), testcase_id (required). Returns: result

repovive_build_get_solutionsGet draft solutionsA
Read-only

Fetch the solutions attached to a draft — the main test solution plus any alternatives with their expected verdicts.

Inputs: session_id (required). Returns: result

repovive_build_house_roundBuild a house-style roundA
Idempotent

Build a full Repovive-format round from house-style generators, one per slot A-G, applying the 500-3500 points ladder and the easy/easy/medium/medium/medium/hard/hard difficulty curve. Every problem is schema-checked, house-style-checked and judged against its own tests; require verification.all_passed before publishing anything.

Inputs: title (required), problem_kinds (required), seed, num_hidden_per_problem. Returns: result

repovive_build_list_admin_contestsList attachable contestsA
Read-only

List the contests the authenticated account may attach a finished draft to, with their ids. Feed one of these ids to repovive_build_add_to_contest.

Inputs: no named parameters. Returns: result

repovive_build_list_sessionsList build sessionsA
Read-only

List the problem-draft build sessions owned by the authenticated account, with their session ids and current state. Every other build tool needs one of these ids.

Inputs: no named parameters. Returns: result

repovive_build_list_testcasesList draft test casesA
Read-only

List the test cases currently stored in a draft, with the per-case ids needed by repovive_build_delete_testcase.

Inputs: session_id (required). Returns: result

repovive_build_prepare_judge_targetPrepare judge targetA

Kick off Repovive's build pipeline for a draft: run the generators, validate the inputs, and run the solutions against the produced tests. Poll repovive_build_run_status for the outcome.

Inputs: session_id (required). Returns: result

repovive_build_push_problemPush a full problem into a draftA
Idempotent

Write a problem object into an existing draft: metadata, statement and (optionally) test cases. Test cases are APPENDED to whatever the draft already holds. For a complete import that also clears old cases and uploads the reference solution, editorial and validator, use repovive_build_author_complete_problem.

Inputs: session_id (required), problem_json (required), include_testcases. Returns: result

repovive_build_run_statusGet build run statusA
Read-only

Check the status of a draft's build run started by repovive_build_prepare_judge_target: progress, per-stage results and any errors.

Inputs: session_id (required). Returns: result

repovive_build_set_custom_checkerSet custom checkerA
Idempotent

Attach a custom checker to a draft, replacing exact output matching. Use it when a problem accepts multiple correct answers or needs tolerance-based comparison.

Inputs: session_id (required), checker_source (required). Returns: result

repovive_build_set_gen_dataSet gen-data scriptA
Idempotent

Set a draft's gen-data script — one generator invocation per line, each producing one hidden test file. Define the generators first with repovive_build_set_generator.

Inputs: session_id (required), gen_data_content (required). Returns: result

repovive_build_set_generatorSet test generator sourceA
Idempotent

Store a named test generator program in a draft. Generators are invoked from the gen-data script (repovive_build_set_gen_data) to produce the hidden tests.

Inputs: session_id (required), generator_name (required), generator_source (required). Returns: result

repovive_build_set_learn_pagesSet learn pagesA
Idempotent

Set a draft's editorial pages — the post-contest explanation shown with the problem. Pass a JSON list of {"title", "content"}; pass "[]" to clear them.

Inputs: pages_json (required), session_id (required). Returns: result

repovive_build_set_solutionsSet draft solutionsA
Idempotent

Attach a solution to a draft with its expected verdict (AC, WA, TLE, …) and, by default, make it the draft's main test solution. Set replace=False to keep the existing alternatives and append — useful for adding deliberately wrong or slow solutions that the test data must reject.

Inputs: source (required), session_id (required), name, replace, +3 more. Returns: result

repovive_build_set_validatorSet input validatorA
Idempotent

Attach an input validator to a draft. The validator reads each generated test and asserts it satisfies the stated constraints, catching malformed test data before the problem goes live.

Inputs: session_id (required), validator_source (required). Returns: result

repovive_build_update_problem_infoUpdate problem infoA
Idempotent

Update a draft's metadata: slug, difficulty, time limit, memory limit and interactive flag. Only the arguments you pass are changed; the rest keep their current values.

Inputs: session_id (required), slug, difficulty, time_limit, +2 more. Returns: result

repovive_build_update_sourcesUpdate build sources (raw)A
Idempotent

Send a raw update-sources body to a draft, for fields the typed tools do not cover. Prefer repovive_build_update_statement, _set_generator, _set_gen_data, _set_validator or _set_custom_checker unless you need something they omit.

Inputs: body_json (required), session_id (required). Returns: result

repovive_build_update_statementUpdate problem statementA
Idempotent

Write the statement of a draft: title, description body, input/output formats, constraints, interaction protocol and tags (markdown with LaTeX). Only the arguments you pass are changed. Avoid an inline math span followed directly by a period — Repovive rejects $10^5$.

Inputs: session_id (required), tags, title, constraints, +4 more. Returns: result

repovive_build_versionGet build versionA
Read-only

Return the deployed Repovive web-app build version. This is an unauthenticated health/diagnostic call — use it to check that the platform is reachable.

Inputs: no named parameters. Returns: result

repovive_check_house_styleCheck Repovive house styleA
Read-only

Check a problem against Repovive's measured house style and list every deviation: input/output braced-array notation, the t bound in the constraints bullet list, tags from the fixed 12-word vocabulary, 256 MB memory, 1-2 s time limit, a points value on the ladder, and exactly one explained sample.

Inputs: problem_json (required). Returns: result

repovive_check_interview_capacityCheck interview capacityA
Read-only

Report whether Repovive currently has mock-interview capacity available for booking.

Inputs: no named parameters. Returns: result

repovive_check_invite_eligibilityCheck invite eligibilityA
Read-only

Report whether the authenticated account may issue contest invitations, and any remaining invite quota.

Inputs: no named parameters. Returns: result

repovive_create_vive_checkoutCreate Vive checkoutA

Start a paid checkout to buy Vive points for the authenticated account and return the payment URL. This begins a real purchase flow — always confirm the amount with the user before calling.

Inputs: vive_amount (required). Returns: result

repovive_delete_contestDelete a contest (admin)A
Destructive

Permanently delete a contest and everything attached to it. This cannot be undone — confirm with the user before calling. Requires contest administration rights.

Inputs: contest_id (required). Returns: result

repovive_delete_conversationDelete a conversationA
DestructiveIdempotent

Delete a direct-message conversation and its history for the authenticated account. This cannot be undone — confirm with the user before calling.

Inputs: conversation_id (required). Returns: result

repovive_delete_direct_messageDelete a messageA
DestructiveIdempotent

Delete a single direct message the authenticated account sent. This cannot be undone — confirm with the user before calling.

Inputs: message_id (required). Returns: result

repovive_diff_revisionsDiff two revisionsA
Read-only

Compare two saved revisions of the same entity and list what changed field by field — added, removed and modified. Use it to see what a change actually did before deciding whether to roll it back.

Inputs: to_revision_id (required), from_revision_id (required), response_format. Returns: result

repovive_generate_house_problemGenerate a house-style problemA
Idempotent

Generate one problem in Repovive's published house style: multi-test input led by t, braced-array input/output sections, a bulleted constraints list bounding t, and a single sample packing several sub-cases with per-case explanations. Deterministic in the seed; runs the reference solution on this host to produce expected outputs.

Inputs: kind (required), seed, num_hidden, cases_per_test. Returns: result

repovive_generate_problemGenerate a problemA
Idempotent

Generate a complete, self-consistent problem from a built-in generator: statement, constraints, samples with explanations, deterministic hidden tests, an input validator, an editorial and a reference solution. Test outputs are produced by running the reference solution on this host. Same seed gives the same problem.

Inputs: kind (required), seed, num_hidden. Returns: result

repovive_get_contestGet a contestA
Read-only

Fetch one contest's full record by contest number (the number shown in its title) or by ObjectId. Pages through the contest list until it finds a match, so older contests resolve too.

Inputs: contest_id, contest_number. Returns: result

repovive_get_contest_announcementsGet contest announcementsA
Read-only

Fetch the announcements and clarifications posted by the jury for a contest. Check these when a statement is ambiguous or a problem was patched mid-round.

Inputs: contest_id (required). Returns: result

repovive_get_contest_permissionsGet contest permissions (admin)A
Read-only

List which users hold editor/viewer/admin roles on a contest. Requires the authenticated account to administer that contest.

Inputs: contest_id (required). Returns: result

repovive_get_contest_rankingGet contest rankingA
Read-only

Fetch a contest's standings — rank, participant, country and total score — capped at the number of rows you ask for. Use it after a contest to see final placement.

Inputs: contest_id (required), limit, response_format. Returns: result

repovive_get_contest_registrationsGet my registrationsA
Read-only

List the contests the authenticated account is registered for, including virtual participation windows. Check this before registering again.

Inputs: no named parameters. Returns: result

repovive_get_contest_resultsGet my contest resultsA
Read-only

Summarise how the authenticated account did in one contest: every problem with its points, attempt count and best verdict, plus the total solved. Combines the contest's problem list with the account's submissions.

Inputs: contest_id (required), page_size. Returns: result

repovive_get_conversation_messagesGet DM messagesA
Read-only

Read the messages in one direct-message conversation, newest page first. Use it to review a thread before replying with repovive_send_direct_message.

Inputs: conversation_id (required), page, page_size. Returns: result

repovive_get_course_editorsGet course editorsA
Read-only

List the users who can edit a course, with their roles. Requires edit rights on that course.

Inputs: course_id (required). Returns: result

repovive_get_history_entryGet a history entryA
Read-only

Fetch one history entry in full, including the (secret-redacted) arguments the tool was called with and any error it returned. Use it to see exactly what a change did.

Inputs: entry_id (required). Returns: result

repovive_get_interview_pricesGet interview pricesA
Read-only

Fetch the current price list for Repovive mock interviews, by interview type and duration.

Inputs: no named parameters. Returns: result

repovive_get_leaderboardGet ratings leaderboardA
Read-only

Fetch a page of Repovive's global ratings leaderboard — rank, name, current and max rating, contest count and country — with optional country, name and tier filters.

Inputs: name, page, tier, limit, +2 more. Returns: result

repovive_get_my_profileGet my profileA
Read-only

Fetch the public profile of the authenticated account: username, full name, job role, organisation, open-to-work flag, location and verification badges. Complements repovive_whoami, which returns account/billing state instead.

Inputs: response_format. Returns: result

repovive_get_post_categoriesGet blog categoriesA
Read-only

List the categories blog posts are filed under, with their slugs and post counts.

Inputs: no named parameters. Returns: result

repovive_get_problemGet a problemA
Read-only

Fetch one contest problem in full: statement, input/output formats, constraints, time and memory limits, tags, sample tests with explanations, and the browser workspace URL. This is the tool to call before solving or submitting.

Inputs: contest_id (required), problem_slug (required), response_format, include_hidden_tests. Returns: result

repovive_get_problem_submissionsGet submissions for a problemA
Read-only

List the submissions made against one contest problem. Defaults to the authenticated account; pass user_id to look at another participant where the contest allows it.

Inputs: contest_id (required), problem_slug (required), user_id. Returns: result

repovive_get_problem_workspace_urlGet solve/submit URLA
Read-only

Build the repovive.com URL where a problem can be read and solved in the browser. Pass contest_id for a contest problem, or problem_set (classics|faang|quant|math) for a curated-set problem. Useful when a capability is website-only.

Inputs: problem_slug (required), contest_id, problem_set. Returns: result

repovive_get_revisionGet a revisionA
Read-only

Fetch one saved revision including its full snapshot — the statement, test cases, solutions and settings as they stood. Address it by revision id, or by target plus sequence number.

Inputs: seq, target_id, revision_id, target_kind. Returns: result

repovive_get_submissionGet a submissionA
Read-only

Fetch one submission by id: its verdict, passed/total counts, judging status, language and timing. Use it to poll a submission that repovive_submit_solution left pending.

Inputs: submission_id (required). Returns: result

repovive_get_unread_dm_countUnread DM countA
Read-only

Return how many direct messages are unread for the authenticated account — a cheap check before listing conversations.

Inputs: no named parameters. Returns: result

repovive_get_unread_notifications_countUnread notifications countA
Read-only

Return how many in-app notifications are unread for the authenticated account — a cheap check before fetching the full list.

Inputs: no named parameters. Returns: result

repovive_get_vive_earn_methodsGet Vive earn methodsA
Read-only

List the ways an account can earn Vive points on Repovive (streaks, solves, contest participation, …) together with the reward each one grants.

Inputs: no named parameters. Returns: result

repovive_history_statusHistory statusA
Read-only

Report where the history database lives, whether recording is on, how much it holds, the retention limits in force, and which entity kinds can be rolled back.

Inputs: no named parameters. Returns: result

repovive_judge_solutionJudge a solution locallyA
Idempotent

Run a solution against test cases on this host and return a per-case verdict (Accepted / Wrong Answer / Time Limit Exceeded / Memory Limit Exceeded / Runtime Error / Compilation Error) with the failing input, expected and actual output. Supply either problem_json or test_cases_json. Use this before repovive_submit_solution — it costs nothing and does not touch the platform. Executes the code you pass, so only judge code you trust.

Inputs: source (required), language, problem_json, time_limit_s, +2 more. Returns: result

repovive_list_blocked_usersList blocked usersA
Read-only

List the users the authenticated account has blocked from messaging it, with the block ids needed to undo them.

Inputs: no named parameters. Returns: result

repovive_list_contest_problemsList contest problemsA
Read-only

List every problem in one contest with its slug, order, difficulty, points, limits, tags and solve counts. Set full=True to also include statements. Hidden test cases are never returned. Get contest ids from repovive_list_contests.

Inputs: contest_id (required), full, response_format. Returns: result

repovive_list_contestsList contestsA
Read-only

List Repovive contests with their ObjectId, contest number, title, computed status (upcoming/ongoing/past), window, problem and member counts, and premium/rated flags. The ObjectId returned here is what every other contest tool needs.

Inputs: skip, limit, status, response_format. Returns: result

repovive_list_conversationsList DM conversationsA
Read-only

List the authenticated account's direct-message conversations with their ids, participants, last message and unread counts. The conversation id feeds every other DM tool.

Inputs: page, page_size. Returns: result

repovive_list_coursesList coursesA
Read-only

List Repovive courses visible to the authenticated account: id, title, slug, description, section/unit counts, access level, enrolment count and whether this account can edit them.

Inputs: response_format. Returns: result

repovive_list_historyList action historyA
Read-only

Browse this server's local log of state-changing calls, newest first: when, which access token, which tool, what it targeted, whether it succeeded, and the revision it produced. Filter by target, tool, actor, status or age. This is the audit trail — use repovive_list_revisions to see an entity's versions.

Inputs: days, tool, actor, limit, +4 more. Returns: result

repovive_list_house_templatesList house-style generatorsA
Read-only

List the house-style generators, each pre-assigned to a round slot (A-G) with the matching points and difficulty. These produce Repovive's published round format: multi-test input led by t, braced-array I/O sections, one sample holding several sub-cases. Feed the kinds to repovive_build_house_round.

Inputs: no named parameters. Returns: result

repovive_list_interview_sessionsList interview sessionsA
Read-only

List the mock-interview sessions booked by the authenticated account, with their scheduling and status. Supports offset/limit paging.

Inputs: limit, offset. Returns: result

repovive_list_my_documentsList my documentsA
Read-only

List the documents (CV/resume and other uploads) attached to the authenticated Repovive account, with their ids and metadata.

Inputs: no named parameters. Returns: result

repovive_list_my_submissionsList my submissionsA
Read-only

List the authenticated account's submissions, newest first, with verdicts and timestamps. Optionally filter by problem slug or contest id, and page with page/page_size.

Inputs: page, page_size, contest_id, problem_slug. Returns: result

repovive_list_notificationsList notificationsA
Read-only

List in-app notifications for the authenticated account with their ids, titles, messages, read state and timestamps, plus the unread count. Pass the ids to repovive_mark_notifications_read to clear them.

Inputs: limit, response_format. Returns: result

repovive_list_postsList blog postsA
Read-only

List Repovive blog posts with title, slug, author, publication date, read time, likes/views and tags. Supports page/limit paging.

Inputs: page, limit, response_format. Returns: result

repovive_list_problem_setsList curated problem setsA
Read-only

List Repovive's curated practice sets (Classics, FAANG, Quant, Math) with their keys, submission kind (code/answer/proof) and browser URLs. Statements for these sets are website-only; for problems readable through this server use repovive_list_contests then repovive_list_contest_problems.

Inputs: response_format. Returns: result

repovive_list_problem_templatesList problem generatorsA
Read-only

List the built-in problem generators (kind, title, difficulty, tags) that repovive_generate_problem and repovive_build_contest accept. These produce classic single-test problems; see repovive_list_house_templates for Repovive's round format.

Inputs: no named parameters. Returns: result

repovive_list_revisionsList revisionsA
Read-only

List the saved versions of an entity, newest first, with the sequence number to pass to repovive_restore_revision. Revisions are captured automatically whenever a problem draft, contest, course or your profile is changed through this server.

Inputs: limit, target_id, target_kind, response_format. Returns: result

repovive_logoutLog outA
Idempotent

Invalidate the current Repovive session server-side and drop the cached token from this MCP server. The next authenticated tool call logs in again from the configured credentials; use it to force a fresh session.

Inputs: no named parameters. Returns: result

repovive_mark_conversation_readMark conversation readA
Idempotent

Mark every message in one conversation as read, clearing its unread badge.

Inputs: conversation_id (required). Returns: result

repovive_mark_notifications_readMark notifications readA
Idempotent

Mark the given in-app notifications as read. Take the ids from repovive_list_notifications; already-read ids are harmless.

Inputs: notification_ids (required). Returns: result

repovive_new_problem_templateNew problem templateA
Read-only

Return an empty Repovive problem object plus a field-by-field description of the schema. Start here when authoring a problem by hand rather than from a generator.

Inputs: no named parameters. Returns: result

repovive_purge_historyPurge historyA
Destructive

Permanently delete history entries and revisions — everything older than N days, or everything for one entity. This destroys the ability to roll those changes back and cannot be undone; confirm with the user before calling.

Inputs: target_id, target_kind, older_than_days. Returns: result

repovive_register_for_contestRegister for a contestA
Idempotent

Register the authenticated account for a contest. Use mode='normal' for the live window, or mode='virtual' with an ISO-8601 virtual_start_time to schedule a virtual run. This is a real registration on the account.

Inputs: contest_id (required), mode, virtual_start_time. Returns: result

repovive_remove_contest_permissionRemove contest permission (admin)A
DestructiveIdempotent

Revoke a user's role on a contest, removing their editor/viewer/admin access. Requires contest administration rights.

Inputs: user_id (required), contest_id (required). Returns: result

repovive_remove_course_editorRemove course editorA
DestructiveIdempotent

Revoke a user's edit access to a course. Requires edit rights on that course; the removed editor loses access immediately.

Inputs: course_id (required), editor_id (required). Returns: result

repovive_restore_revisionRestore a revisionA
Idempotent

Roll an entity back to a saved revision by re-applying its snapshot through the normal Repovive API. Nothing is deleted: the restore is itself recorded as a new revision, so you can undo the undo. Pass into_target_id to restore a snapshot into a different entity — for instance to rebuild a deleted problem draft in a fresh build session. Use dry_run=True first to see exactly which steps would run.

Inputs: seq, dry_run, target_id, revision_id, +2 more. Returns: result

repovive_search_usersSearch usersA
Read-only

Search Repovive users by name (partial match) and return the matches with their user ids. Use it to resolve a person's id before starting a direct message, blocking them, or granting contest permissions.

Inputs: query (required). Returns: result

repovive_send_direct_messageSend a direct messageA

Send a message into an existing conversation as the authenticated account. This is visible to a real person immediately and cannot be unsent from here — get the user's approval on the wording first.

Inputs: content (required), conversation_id (required). Returns: result

repovive_set_contest_permissionSet contest permission (admin)A
Idempotent

Grant a user a role on a contest (e.g. editor, viewer, admin). Resolve the target's user id with repovive_search_users first. Requires contest administration rights.

Inputs: role (required), user_id (required), contest_id (required). Returns: result

repovive_set_course_visibilitySet course visibility (admin)A
Idempotent

Publish or unpublish a course platform-wide. Making a course public exposes it to every Repovive user, so confirm before calling. Requires site administration rights.

Inputs: course_id (required), is_public (required). Returns: result

repovive_start_conversationStart a conversationA

Open a new direct-message conversation with a user and send the first message. Resolve recipient_id with repovive_search_users. This reaches a real person — confirm before calling.

Inputs: recipient_id (required), initial_message (required). Returns: result

repovive_submit_solutionSubmit a solutionA

Submit source code to a contest problem and, by default, poll until the judge returns a final verdict. This records a REAL submission on the authenticated Repovive account and counts against the ~10 submissions/minute limit — verify locally with repovive_judge_solution first. Returns the submission id, verdict and passed/total.

Inputs: source (required), contest_id (required), problem_slug (required), wait, +2 more. Returns: result

repovive_unblock_userUnblock a userA
DestructiveIdempotent

Remove a block so the user can message the authenticated account again. Take the block id from repovive_list_blocked_users.

Inputs: block_id (required). Returns: result

repovive_undo_last_changeUndo the last changeA

Step one change back: restore the entity's previous revision, undoing the most recent edit made through this server. Equivalent to restoring seq-1. Nothing is deleted — the undo is recorded as a new revision, so it can itself be undone. Use dry_run=True to see what would change first.

Inputs: target_id (required), target_kind (required), dry_run. Returns: result

repovive_update_contestUpdate a contest (admin)A
Idempotent

Update a contest's settings — title, lobby problem count, admin-only and weekly-challenge flags, problem display style, rated tier cap. Only the arguments you pass are changed. Requires contest administration rights.

Inputs: contest_id (required), title, admin_only, rated_max_tier, +3 more. Returns: result

repovive_update_course_detailsUpdate course detailsA
Idempotent

Update a course's title and, optionally, its description and tags. Only the fields you pass are changed. Requires edit rights on that course.

Inputs: title (required), course_id (required), tags, description. Returns: result

repovive_update_my_locationUpdate my countryA
Idempotent

Set the country shown on the authenticated account's profile and used for country-filtered leaderboards. Takes an ISO 3166-1 country code and overwrites any previous value.

Inputs: country (required), country_auto_detected. Returns: result

repovive_validate_problemValidate a problemA
Read-only

Check a problem object against Repovive's schema and report every issue found: missing or empty fields, a non-URL-safe slug, bad difficulty, non-positive limits, and missing or malformed test cases. Run it before pushing a draft.

Inputs: problem_json (required). Returns: result

repovive_whoamiWho am IA
Read-only

Return the Repovive account this server is authenticated as: id, name, email, role, verification and premium status, Vive balance, streaks, country and join date. Use it to confirm which account submissions and messages will be attributed to.

Inputs: response_format. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 102 tools

    Disambiguation4/5

    Most tools are clearly separated by resource and action, and descriptions explicitly distinguish near-twins like get_my_profile vs whoami and push_problem vs author_complete_problem. However, with 102 tools there are several clusters (history vs revisions, contest ranking vs leaderboard, build status vs build actions) where an agent could still misselect without careful reading.

    Naming Consistency4/5

    The overwhelming majority of tools follow a consistent repovive_verb_noun snake_case pattern, which makes the set predictable. Minor deviations like whoami, new_problem_template, available_judge_languages, and build_run_status keep it from being a perfect 5.

    Tool Count1/5

    102 tools is far beyond the 50+ threshold for an extreme mismatch. Even if each tool is individually useful, the surface is too large for an agent to navigate efficiently and for a user to audit coherently.

    Completeness3/5

    The server covers many domains thoroughly: contest problems, draft building, submissions, DMs, notifications, and revision history. Notable gaps remain, however, including no contest creation, no contest unregistration, no mock-interview booking/cancellation, and no course creation or content management.

    Maintenance

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers