Multi-platform competitive programming online judge adapter supporting AtCoder, Codeforces, Luogu, and NowCoder with unified MCP contracts
26 tools across 4 OJ platforms. Most tools have descriptions (194-char baseline met for many), but critical gaps exist: (1) Naming inconsistency, multiple tools named 'oj_*' across different platforms (oj_capabilities, oj_health, oj_search_problems, oj_fetch_problem repeated 4+ times) violate the pattern:tool requirement for distinct, unambiguous names. LLMs cannot distinguish which platform's oj_search_problems to call. (2) Parameter descriptions are sparse or missing entirely, many tools lack descriptions for input fields (e.g., oj_fetch_problem's 'contestId', 'taskId' lack context on format/constraints). (3) Output schemas are not visible in source, tool definitions show input schemas but no documented return types, violating pattern:tool requirement. (4) Error handling absent, no recovery guidance, retryability classification, or actionable error messages visible. (5) Composition issues, tools like oj_prepare_submission and oj_commit_submission appear tightly coupled; unclear if they're idempotent or if retry risks duplicate submissions.
Get official metadata only. This tool does not return a problem statement or submit code.
Validate the configured local session without returning account identity or cookie data.
Report the audited anonymous AtCoder read surface and explicitly unsupported operations.
Report audited Codeforces official API capabilities and unsupported operations.
Report the audited anonymous Luogu read surface and operations excluded by policy.
Report the active NowCoder tools, authentication mode, operation risk, and judge language IDs.
Show an MCP-native confirmation prompt and submit the exact prepared code to NowCoder once after the user accepts.
Duplicate tool names across platforms: oj_capabilities, oj_health, oj_search_problems, oj_fetch_problem repeated 4+ times (AtCoder, Codeforces, Luogu, NowCoder). LLMs cannot distinguish which platform's tool to invoke. Violates pattern:tool naming requirement for unambiguous, distinct names.
Output schemas not documented in source. Tool definitions show input schemas but no visible return type documentation. Violates pattern:tool requirement that LLMs know what fields to expect. Cannot verify if responses include chaining IDs (e.g., contestId after search) needed for downstream calls.
Parameter descriptions missing or incomplete. Many input parameters lack descriptions explaining format, constraints, or valid values. E.g., oj_fetch_problem's 'contestId' and 'taskId' have no description of expected format (alphanumeric? length limits?). Violates pattern:tool-description requirement.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2025-06-18+ | v2 |
Wait for the selected Competitive Companion window and return its typed NowCoder problem preview.
Fetch one anonymous public Luogu statement as a bounded shared OJ problem document.
Fetch one public problem statement from an exact contest/task pair or canonical atcoder.jp task URL. Returns sanitized HTML with preserved math, samples, limits, hashes, and source provenance.
Fetch and normalize one official NowCoder ACM problem page with statement, limits, samples, tags, provenance, and hashes.
Return a compact NowCoder competition profile by account ID, or resolve the signed-in account from the local session.
Return passive transport, schema, and persisted Codeforces upstream health.
Report local readiness and the latest observed AtCoder page-read status without probing upstream.
Report passive adapter health from the last fetch; this tool does not probe NowCoder.
Report local protocol health and the most recent bounded anonymous Luogu read observation.
List compact server-rendered submission metadata for a public or signed-in NowCoder competition profile.
Open a short-lived loopback receiver for one NowCoder problem sent by Competitive Companion.
Resolve the official problem and saved local file, show an MCP-native confirmation, upload that immutable artifact for one sample, and return the platform result.
Continue polling a previously dispatched NowCoder platform run by its stable requestId without uploading code again.
Poll a submission operation created by this local process without resubmitting code.
Validate the official problem, saved local file, submitter, contest, language, and immutable code artifact, then return a two-minute preview.
Search anonymous public Luogu problem metadata and return shared OJ summaries with bounded cursor pagination.
Search official Codeforces problem metadata by id, title, or tag.
Resolve exactly one contest/task id, atcoder:contest/task id, or canonical task URL. Free-text and catalog crawling are not supported.
Search the official NowCoder ACM problem catalog by keyword with bounded cursor pagination.
No error handling guidance visible. Tools like oj_commit_submission (WRITE risk) and oj_platform_run (WRITE risk) lack recovery hints, retryability classification, or actionable error messages. Agents cannot determine if failures are transient or fatal. Violates pattern:recovery-guide.
Idempotency unclear for stateful operations. oj_commit_submission and oj_platform_run are marked WRITE but no documentation states if they are idempotent or if retry risks duplicate submissions/runs. Violates pattern:idempotent-operation requirement for agent safety.