Servidor MCP

AtCoder MCP Server

io.github.ketherworks/atcoder
Herramientas para desarrolladores Educación Público y accesible MCP 2025-11-25

Qué hace este MCP

Resolves and fetches public AtCoder programming problem statements with preserved mathematics, samples, limits, and provenance.

oj_capabilities
AtCoder Provider Capabilities
Report the audited anonymous AtCoder read surface and explicitly unsupported operations.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'anyOf': [{'type': 'object', 'required': ['schemaVersion', 'providerId', 'providerVersion', 'platform', 'protocolVersion', 'operations', 'languages', 'source'], 'properties': {'source': {'type': 'object', 'required': ['kind', 'adapterId', 'adapterVersion', 'fetchedAt', 'sourceUrl', 'confidence'], 'properties': {'etag': {'type': 'string', 'minLength': 1}, 'kind': {'enum': ['official_api', 'official_open_platform', 'page_adapter', 'browser_companion', 'community_adapter', 'manual'], 'type': 'string'}, 'rawRef': {'type': 'string', 'minLength': 1}, 'adapterId': {'type': 'string', 'minLength': 1}, 'fetchedAt': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$'}, 'sourceUrl': {'type': 'string', 'format': 'uri'}, 'confidence': {'enum': ['authoritative', 'derived', 'user_supplied'], 'type': 'string'}, 'adapterVersion': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'platform': {'enum': ['luogu', 'leetcode', 'nowcoder', 'codeforces', 'atcoder'], 'type': 'string'}, 'languages': {'type': 'array', 'items': {'type': 'object', 'required': ['languageKey', 'platformLanguageId', 'displayName'], 'properties': {'displayName': {'type': 'string', 'minLength': 1}, 'languageKey': {'type': 'string', 'minLength': 1}, 'platformLanguageId': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'operations': {'type': 'object', 'required': ['searchProblems', 'fetchProblem', 'importProblem', 'fetchProfile', 'listSubmissions', 'localRun', 'platformRun', 'prepareSubmission', 'commitSubmission', 'pollSubmission'], 'propertyNames': {'enum': ['searchProblems', 'fetchProblem', 'importProblem', 'fetchProfile', 'listSubmissions', 'localRun', 'platformRun', 'prepareSubmission', 'commitSubmission', 'pollSubmission'], 'type': 'string'}, 'additionalProperties': {'type': 'object', 'required': ['name', 'status', 'transport', 'auth', 'risk', 'compliance', 'checkedAt'], 'properties': {'auth': {'enum': ['none', 'oauth2', 'api_key', 'session_cookie', 'browser'], 'type': 'string'}, 'name': {'enum': ['searchProblems', 'fetchProblem', 'importProblem', 'fetchProfile', 'listSubmissions', 'localRun', 'platformRun', 'prepareSubmission', 'commitSubmission', 'pollSubmission'], 'type': 'string'}, 'risk': {'enum': ['R0_public_read', 'R1_private_read', 'R2_local_execute', 'R3_prepare_write', 'R4_real_submit'], 'type': 'string'}, 'reason': {'type': 'string', 'minLength': 1}, 'status': {'enum': ['available', 'auth_required', 'unsupported', 'disabled_by_policy', 'degraded'], 'type': 'string'}, 'toolName': {'type': 'string', 'minLength': 1}, 'checkedAt': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$'}, 'transport': {'enum': ['remote_http', 'local_stdio'], 'type': 'string'}, 'compliance': {'enum': ['official', 'unofficial', 'restricted', 'unknown'], 'type': 'string'}}, 'additionalProperties': False}}, 'providerId': {'type': 'string', 'minLength': 1}, 'schemaVersion': {'type': 'string', 'const': 'oj.capabilities/v1'}, 'protocolVersion': {'type': 'string', 'minLength': 1}, 'providerVersion': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['schemaVersion', 'code', 'layer', 'message', 'retryPolicy', 'userAction'], 'properties': {'code': {'enum': ['request.invalid', 'capability.unsupported', 'policy.blocked', 'auth.required', 'auth.invalid', 'auth.forbidden', 'challenge.required', 'resource.not_found', 'rate_limited', 'network.timeout', 'upstream.unavailable', 'upstream.schema_changed', 'language.unsupported', 'runner.unavailable', 'runner.sandbox_required', 'confirmation.required', 'confirmation.expired', 'confirmation.mismatch', 'submission.closed', 'submission.rejected', 'submission.outcome_unknown', 'internal'], 'type': 'string'}, 'jobId': {'type': 'string', 'minLength': 1}, 'layer': {'enum': ['broker', 'transport', 'protocol', 'auth', 'upstream', 'runner', 'policy'], 'type': 'string'}, 'message': {'type': 'string', 'minLength': 1}, 'platform': {'enum': ['luogu', 'leetcode', 'nowcoder', 'codeforces', 'atcoder'], 'type': 'string'}, 'requestId': {'type': 'string', 'minLength': 1}, 'httpStatus': {'type': 'integer', 'maximum': 599, 'minimum': 100}, 'providerId': {'type': 'string', 'minLength': 1}, 'userAction': {'enum': ['none', 'retry', 'sign_in', 'solve_challenge', 'change_language', 'open_logs'], 'type': 'string'}, 'retryPolicy': {'enum': ['never', 'safe_read', 'poll_only', 'after_user_action'], 'type': 'string'}, 'retryAfterMs': {'type': 'number', 'minimum': 0}, 'upstreamCode': {'type': 'string', 'minLength': 1}, 'schemaVersion': {'type': 'string', 'const': 'oj.error/v1'}}, 'additionalProperties': False}]}
oj_fetch_problem
Fetch AtCoder Problem
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.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'anyOf': [{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'pattern': '^https:\\/\\/atcoder\\.jp\\/contests\\/[a-z0-9][a-z0-9_-]{0,63}\\/tasks\\/[a-z0-9][a-z0-9_-]{0,63}(?:\\?lang=(?:en|ja))?$', 'maxLength': 300, 'description': 'Canonical HTTPS atcoder.jp task URL, optionally with one en/ja lang query.'}, 'locale': {'enum': ['en', 'ja'], 'type': 'string', 'description': 'Statement locale. Overrides the URL lang query when supplied.'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['contestId', 'taskId'], 'properties': {'locale': {'enum': ['en', 'ja'], 'type': 'string', 'description': 'Statement locale. Defaults to English.'}, 'taskId': {'type': 'string', 'pattern': '^[a-z0-9][a-z0-9_-]{0,63}$', 'description': 'Exact AtCoder task id, such as abc086_a.'}, 'contestId': {'type': 'string', 'pattern': '^[a-z0-9][a-z0-9_-]{0,63}$', 'description': 'Exact AtCoder contest id, such as abc086.'}}, 'additionalProperties': False}], '$schema': 'https://json-schema.org/draft/2020-12/schema'}
Esquema de salida
{'type': 'object', 'anyOf': [{'type': 'object', 'required': ['schemaVersion', 'ref', 'title', 'locale', 'access', 'tags', 'content', 'constraints', 'samples', 'limits', 'io', 'starterCode', 'source'], 'properties': {'io': {'type': 'object', 'required': ['mode'], 'properties': {'mode': {'enum': ['stdin_stdout', 'function', 'file', 'interactive'], 'type': 'string'}, 'inputFile': {'type': 'string', 'minLength': 1}, 'outputFile': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'ref': {'type': 'object', 'required': ['schemaVersion', 'platform', 'nativeId', 'canonicalId', 'url', 'source'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'site': {'enum': ['global', 'cn'], 'type': 'string'}, 'source': {'type': 'object', 'required': ['kind', 'adapterId', 'adapterVersion', 'fetchedAt', 'sourceUrl', 'confidence'], 'properties': {'etag': {'type': 'string', 'minLength': 1}, 'kind': {'enum': ['official_api', 'official_open_platform', 'page_adapter', 'browser_companion', 'community_adapter', 'manual'], 'type': 'string'}, 'rawRef': {'type': 'string', 'minLength': 1}, 'adapterId': {'type': 'string', 'minLength': 1}, 'fetchedAt': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$'}, 'sourceUrl': {'type': 'string', 'format': 'uri'}, 'confidence': {'enum': ['authoritative', 'derived', 'user_supplied'], 'type': 'string'}, 'adapterVersion': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'contest': {'type': 'object', 'required': ['nativeId'], 'properties': {'index': {'type': 'string', 'minLength': 1}, 'nativeId': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'nativeId': {'type': 'string', 'minLength': 1}, 'platform': {'enum': ['luogu', 'leetcode', 'nowcoder', 'codeforces', 'atcoder'], 'type': 'string'}, 'canonicalId': {'type': 'string', 'minLength': 1}, 'schemaVersion': {'type': 'string', 'const': 'oj.problem-ref/v1'}}, 'additionalProperties': False}, 'tags': {'type': 'array', 'items': {'type': 'object', 'required': ['namespace', 'slug', 'name'], 'properties': {'id': {'type': 'string', 'minLength': 1}, 'name': {'type': 'string', 'minLength': 1}, 'slug': {'type': 'string', 'minLength': 1}, 'namespace': {'enum': ['platform', 'canonical'], 'type': 'string'}}, 'additionalProperties': False}}, 'title': {'type': 'string', 'minLength': 1}, 'access': {'enum': ['public', 'auth_required', 'premium', 'contest_only', 'unknown'], 'type': 'string'}, 'limits': {'type': 'object', 'properties': {'timeMs': {'type': 'number', 'exclusiveMinimum': 0}, 'memoryBytes': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}}, 'additionalProperties': False}, 'locale': {'type': 'string', 'minLength': 1}, 'source': {'type': 'object', 'required': ['kind', 'adapterId', 'adapterVersion', 'fetchedAt', 'sourceUrl', 'confidence'], 'properties': {'etag': {'type': 'string', 'minLength': 1}, 'kind': {'enum': ['official_api', 'official_open_platform', 'page_adapter', 'browser_companion', 'community_adapter', 'manual'], 'type': 'string'}, 'rawRef': {'type': 'string', 'minLength': 1}, 'adapterId': {'type': 'string', 'minLength': 1}, 'fetchedAt': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$'}, 'sourceUrl': {'type': 'string', 'format': 'uri'}, 'confidence': {'enum': ['authoritative', 'derived', 'user_supplied'], 'type': 'string'}, 'adapterVersion': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'content': {'type': 'object', 'required': ['statement'], 'properties': {'input': {'type': 'object', 'required': ['text', 'format', 'locale', 'truncated', 'sha256'], 'properties': {'text': {'type': 'string'}, 'format': {'enum': ['markdown', 'html', 'text'], 'type': 'string'}, 'locale': {'type': 'string', 'minLength': 1}, 'sha256': {'type': 'string', 'pattern': '^[a-f0-9]{64}$'}, 'truncated': {'type': 'boolean'}, 'originalChars': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}, 'additionalProperties': False}, 'notes': {'type': 'object', 'required': ['text', 'format', 'locale', 'truncated', 'sha256'], 'properties': {'text': {'type': 'string'}, 'format': {'enum': ['markdown', 'html', 'text'], 'type': 'string'}, 'locale': {'type': 'string', 'minLength': 1}, 'sha256': {'type': 'string', 'pattern': '^[a-f0-9]{64}$'}, 'truncated': {'type': 'boolean'}, 'originalChars': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}, 'additionalProperties': False}, 'output': {'type': 'object', 'required': ['text', 'format', 'locale', 'truncated', 'sha256'], 'properties': {'text': {'type': 'string'}, 'format': {'enum': ['markdown', 'html', 'text'], 'type': 'string'}, 'locale': {'type': 'string', 'minLength': 1}, 'sha256': {'type': 'string', 'pattern': '^[a-f0-9]{64}$'}, 'truncated': {'type': 'boolean'}, 'originalChars': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}, 'additionalProperties': False}, 'statement': {'type': 'object', 'required': ['text', 'format', 'locale', 'truncated', 'sha256'], 'properties': {'text': {'type': 'string'}, 'format': {'enum': ['markdown', 'html', 'text'], 'type': 'string'}, 'locale': {'type': 'string', 'minLength': 1}, 'sha256': {'type': 'string', 'pattern': '^[a-f0-9]{64}$'}, 'truncated': {'type': 'boolean'}, 'originalChars': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'samples': {'type': 'array', 'items': {'type': 'object', 'required': ['ordinal', 'input', 'output'], 'properties': {'input': {'type': 'string'}, 'output': {'type': 'string'}, 'ordinal': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}, 'explanation': {'type': 'string'}}, 'additionalProperties': False}}, 'difficulty': {'type': 'object', 'required': ['scale'], 'properties': {'label': {'type': 'string', 'minLength': 1}, 'scale': {'type': 'string', 'minLength': 1}, 'value': {'type': 'number'}}, 'additionalProperties': False}, 'constraints': {'type': 'array', 'items': {'type': 'string'}}, 'starterCode': {'type': 'array', 'items': {'type': 'object', 'required': ['languageKey', 'platformLanguageId', 'code'], 'properties': {'code': {'type': 'string'}, 'languageKey': {'type': 'string', 'minLength': 1}, 'platformLanguageId': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'schemaVersion': {'type': 'string', 'const': 'oj.problem-document/v1'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['schemaVersion', 'code', 'layer', 'message', 'retryPolicy', 'userAction'], 'properties': {'code': {'enum': ['request.invalid', 'capability.unsupported', 'policy.blocked', 'auth.required', 'auth.invalid', 'auth.forbidden', 'challenge.required', 'resource.not_found', 'rate_limited', 'network.timeout', 'upstream.unavailable', 'upstream.schema_changed', 'language.unsupported', 'runner.unavailable', 'runner.sandbox_required', 'confirmation.required', 'confirmation.expired', 'confirmation.mismatch', 'submission.closed', 'submission.rejected', 'submission.outcome_unknown', 'internal'], 'type': 'string'}, 'jobId': {'type': 'string', 'minLength': 1}, 'layer': {'enum': ['broker', 'transport', 'protocol', 'auth', 'upstream', 'runner', 'policy'], 'type': 'string'}, 'message': {'type': 'string', 'minLength': 1}, 'platform': {'enum': ['luogu', 'leetcode', 'nowcoder', 'codeforces', 'atcoder'], 'type': 'string'}, 'requestId': {'type': 'string', 'minLength': 1}, 'httpStatus': {'type': 'integer', 'maximum': 599, 'minimum': 100}, 'providerId': {'type': 'string', 'minLength': 1}, 'userAction': {'enum': ['none', 'retry', 'sign_in', 'solve_challenge', 'change_language', 'open_logs'], 'type': 'string'}, 'retryPolicy': {'enum': ['never', 'safe_read', 'poll_only', 'after_user_action'], 'type': 'string'}, 'retryAfterMs': {'type': 'number', 'minimum': 0}, 'upstreamCode': {'type': 'string', 'minLength': 1}, 'schemaVersion': {'type': 'string', 'const': 'oj.error/v1'}}, 'additionalProperties': False}]}
oj_health
AtCoder Provider Health
Report local readiness and the latest observed AtCoder page-read status without probing upstream.
Solo lectura Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'anyOf': [{'type': 'object', 'required': ['schemaVersion', 'providerId', 'platform', 'checkedAt', 'overall', 'layers', 'message'], 'properties': {'layers': {'type': 'object', 'required': ['transport', 'protocol', 'schema', 'auth', 'upstream'], 'properties': {'auth': {'enum': ['not_required', 'valid', 'expired', 'missing', 'challenge'], 'type': 'string'}, 'schema': {'enum': ['pass', 'drift', 'unknown'], 'type': 'string'}, 'protocol': {'enum': ['pass', 'fail'], 'type': 'string'}, 'upstream': {'enum': ['pass', 'timeout', 'rate_limited', 'blocked', 'fail'], 'type': 'string'}, 'transport': {'enum': ['pass', 'fail'], 'type': 'string'}}, 'additionalProperties': False}, 'message': {'type': 'string', 'minLength': 1}, 'overall': {'enum': ['healthy', 'degraded', 'unavailable', 'auth_required'], 'type': 'string'}, 'platform': {'enum': ['luogu', 'leetcode', 'nowcoder', 'codeforces', 'atcoder'], 'type': 'string'}, 'checkedAt': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$'}, 'latencyMs': {'type': 'number', 'minimum': 0}, 'providerId': {'type': 'string', 'minLength': 1}, 'retryAfterMs': {'type': 'number', 'minimum': 0}, 'schemaVersion': {'type': 'string', 'const': 'oj.provider-health/v1'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['schemaVersion', 'code', 'layer', 'message', 'retryPolicy', 'userAction'], 'properties': {'code': {'enum': ['request.invalid', 'capability.unsupported', 'policy.blocked', 'auth.required', 'auth.invalid', 'auth.forbidden', 'challenge.required', 'resource.not_found', 'rate_limited', 'network.timeout', 'upstream.unavailable', 'upstream.schema_changed', 'language.unsupported', 'runner.unavailable', 'runner.sandbox_required', 'confirmation.required', 'confirmation.expired', 'confirmation.mismatch', 'submission.closed', 'submission.rejected', 'submission.outcome_unknown', 'internal'], 'type': 'string'}, 'jobId': {'type': 'string', 'minLength': 1}, 'layer': {'enum': ['broker', 'transport', 'protocol', 'auth', 'upstream', 'runner', 'policy'], 'type': 'string'}, 'message': {'type': 'string', 'minLength': 1}, 'platform': {'enum': ['luogu', 'leetcode', 'nowcoder', 'codeforces', 'atcoder'], 'type': 'string'}, 'requestId': {'type': 'string', 'minLength': 1}, 'httpStatus': {'type': 'integer', 'maximum': 599, 'minimum': 100}, 'providerId': {'type': 'string', 'minLength': 1}, 'userAction': {'enum': ['none', 'retry', 'sign_in', 'solve_challenge', 'change_language', 'open_logs'], 'type': 'string'}, 'retryPolicy': {'enum': ['never', 'safe_read', 'poll_only', 'after_user_action'], 'type': 'string'}, 'retryAfterMs': {'type': 'number', 'minimum': 0}, 'upstreamCode': {'type': 'string', 'minLength': 1}, 'schemaVersion': {'type': 'string', 'const': 'oj.error/v1'}}, 'additionalProperties': False}]}
oj_search_problems
Find Exact AtCoder Problem
Resolve exactly one contest/task id, atcoder:contest/task id, or canonical task URL. Free-text and catalog crawling are not supported.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['schemaVersion', 'requestId', 'platform', 'query', 'limit'], 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1}, 'query': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'locale': {'enum': ['en', 'ja'], 'type': 'string'}, 'platform': {'type': 'string', 'const': 'atcoder'}, 'requestId': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'schemaVersion': {'type': 'string', 'const': 'oj.search-request/v1'}}, 'additionalProperties': False}
Esquema de salida
{'type': 'object', 'anyOf': [{'type': 'object', 'required': ['schemaVersion', 'requestId', 'items', 'source'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['schemaVersion', 'ref', 'title', 'tags', 'source'], 'properties': {'ref': {'type': 'object', 'required': ['schemaVersion', 'platform', 'nativeId', 'canonicalId', 'url', 'source'], 'properties': {'url': {'type': 'string', 'format': 'uri'}, 'site': {'enum': ['global', 'cn'], 'type': 'string'}, 'source': {'type': 'object', 'required': ['kind', 'adapterId', 'adapterVersion', 'fetchedAt', 'sourceUrl', 'confidence'], 'properties': {'etag': {'type': 'string', 'minLength': 1}, 'kind': {'enum': ['official_api', 'official_open_platform', 'page_adapter', 'browser_companion', 'community_adapter', 'manual'], 'type': 'string'}, 'rawRef': {'type': 'string', 'minLength': 1}, 'adapterId': {'type': 'string', 'minLength': 1}, 'fetchedAt': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$'}, 'sourceUrl': {'type': 'string', 'format': 'uri'}, 'confidence': {'enum': ['authoritative', 'derived', 'user_supplied'], 'type': 'string'}, 'adapterVersion': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'contest': {'type': 'object', 'required': ['nativeId'], 'properties': {'index': {'type': 'string', 'minLength': 1}, 'nativeId': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'nativeId': {'type': 'string', 'minLength': 1}, 'platform': {'enum': ['luogu', 'leetcode', 'nowcoder', 'codeforces', 'atcoder'], 'type': 'string'}, 'canonicalId': {'type': 'string', 'minLength': 1}, 'schemaVersion': {'type': 'string', 'const': 'oj.problem-ref/v1'}}, 'additionalProperties': False}, 'tags': {'type': 'array', 'items': {'type': 'object', 'required': ['namespace', 'slug', 'name'], 'properties': {'id': {'type': 'string', 'minLength': 1}, 'name': {'type': 'string', 'minLength': 1}, 'slug': {'type': 'string', 'minLength': 1}, 'namespace': {'enum': ['platform', 'canonical'], 'type': 'string'}}, 'additionalProperties': False}}, 'title': {'type': 'string', 'minLength': 1}, 'source': {'type': 'object', 'required': ['kind', 'adapterId', 'adapterVersion', 'fetchedAt', 'sourceUrl', 'confidence'], 'properties': {'etag': {'type': 'string', 'minLength': 1}, 'kind': {'enum': ['official_api', 'official_open_platform', 'page_adapter', 'browser_companion', 'community_adapter', 'manual'], 'type': 'string'}, 'rawRef': {'type': 'string', 'minLength': 1}, 'adapterId': {'type': 'string', 'minLength': 1}, 'fetchedAt': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$'}, 'sourceUrl': {'type': 'string', 'format': 'uri'}, 'confidence': {'enum': ['authoritative', 'derived', 'user_supplied'], 'type': 'string'}, 'adapterVersion': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'acceptance': {'type': 'object', 'properties': {'ratio': {'type': 'number', 'maximum': 1, 'minimum': 0}, 'accepted': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'submissions': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}, 'additionalProperties': False}, 'difficulty': {'type': 'object', 'required': ['scale'], 'properties': {'label': {'type': 'string', 'minLength': 1}, 'scale': {'type': 'string', 'minLength': 1}, 'value': {'type': 'number'}}, 'additionalProperties': False}, 'contestLabel': {'type': 'string', 'minLength': 1}, 'schemaVersion': {'type': 'string', 'const': 'oj.problem-summary/v1'}}, 'additionalProperties': False}}, 'source': {'type': 'object', 'required': ['kind', 'adapterId', 'adapterVersion', 'fetchedAt', 'sourceUrl', 'confidence'], 'properties': {'etag': {'type': 'string', 'minLength': 1}, 'kind': {'enum': ['official_api', 'official_open_platform', 'page_adapter', 'browser_companion', 'community_adapter', 'manual'], 'type': 'string'}, 'rawRef': {'type': 'string', 'minLength': 1}, 'adapterId': {'type': 'string', 'minLength': 1}, 'fetchedAt': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$'}, 'sourceUrl': {'type': 'string', 'format': 'uri'}, 'confidence': {'enum': ['authoritative', 'derived', 'user_supplied'], 'type': 'string'}, 'adapterVersion': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'requestId': {'type': 'string', 'minLength': 1}, 'nextCursor': {'type': 'string', 'minLength': 1}, 'schemaVersion': {'type': 'string', 'const': 'oj.search-result/v1'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['schemaVersion', 'code', 'layer', 'message', 'retryPolicy', 'userAction'], 'properties': {'code': {'enum': ['request.invalid', 'capability.unsupported', 'policy.blocked', 'auth.required', 'auth.invalid', 'auth.forbidden', 'challenge.required', 'resource.not_found', 'rate_limited', 'network.timeout', 'upstream.unavailable', 'upstream.schema_changed', 'language.unsupported', 'runner.unavailable', 'runner.sandbox_required', 'confirmation.required', 'confirmation.expired', 'confirmation.mismatch', 'submission.closed', 'submission.rejected', 'submission.outcome_unknown', 'internal'], 'type': 'string'}, 'jobId': {'type': 'string', 'minLength': 1}, 'layer': {'enum': ['broker', 'transport', 'protocol', 'auth', 'upstream', 'runner', 'policy'], 'type': 'string'}, 'message': {'type': 'string', 'minLength': 1}, 'platform': {'enum': ['luogu', 'leetcode', 'nowcoder', 'codeforces', 'atcoder'], 'type': 'string'}, 'requestId': {'type': 'string', 'minLength': 1}, 'httpStatus': {'type': 'integer', 'maximum': 599, 'minimum': 100}, 'providerId': {'type': 'string', 'minLength': 1}, 'userAction': {'enum': ['none', 'retry', 'sign_in', 'solve_challenge', 'change_language', 'open_logs'], 'type': 'string'}, 'retryPolicy': {'enum': ['never', 'safe_read', 'poll_only', 'after_user_action'], 'type': 'string'}, 'retryAfterMs': {'type': 'number', 'minimum': 0}, 'upstreamCode': {'type': 'string', 'minLength': 1}, 'schemaVersion': {'type': 'string', 'const': 'oj.error/v1'}}, 'additionalProperties': False}]}
Añadido
oj_search_problems
17 de September de 2026 a las 12:42
Añadido
oj_fetch_problem
17 de September de 2026 a las 12:42
Añadido
oj_health
17 de September de 2026 a las 12:42
Añadido
oj_capabilities
17 de September de 2026 a las 12:42