pta-auto-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pta-auto-mcplog in to PTA and list my unfinished exams"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pta-auto-mcp
把 PTA (pintia.cn) 的练习/考试自动化能力包成 MCP 服务(stdio),供 agent 调用。 设计目标是把解题以外的 token 消耗压到最低:默认只回摘要、支持从工作目录读源码/答案、判题结果不必跳出 MCP 去写脚本。
使用者快速开始
git clone https://github.com/kisakiayano/PTA-mcp && cd PTA-mcp
uv run server.py # uv 自动创建 .venv 并按 uv.lock 装好依赖后启动uv run 会自动做三件事:挑一个满足 requires-python 的解释器(不足则自动下载)、创建 .venv、
按 uv.lock 安装依赖。其他等价写法:
uv sync # 只建环境装依赖
uv run pta-login --help # 或用安装出的命令
uv sync --no-dev # 不要 lint 依赖(ruff),环境更小
uv sync --frozen # 严格按 uv.lock(CI/可复现)
uvx --from . pta-mcp # 连仓库目录都不留,直接跑Related MCP server: Online Judge MCP Server
工具(5 个)
工具 | 用途 | 省 token 的关键点 |
| 登录并持久化会话;已有有效会话直接复用 | 复用判定走 |
| 列出练习/考试,给出 | 服务端按 |
| 按题型取题( |
|
| 提交答案 |
|
| 编程题判题结果与失败用例 | 用 |
所有工具默认返回紧凑 JSON 字符串(PTA_COMPACT_JSON=0 可改回结构化 dict,省约 35% 空白开销)。
高效工作流(agent 视角)
pta_login()
pta_list_exams(only_active=True) → problem_set_id + exam_id
pull_exam_set(problem_set_id, mode="index") → 题量与题面首行
pull_exam_set(problem_set_id, problem_types=["PROGRAMMING"],
mode="digest", limit=20) → 按题型取题面
# 编程题:源码写到 work/programs/pN.py,本地用题目样例自测
submit_answers(exam_id, answers={"problemType": "PROGRAMMING",
"details": [{"problemSetProblemId": "...", "program_path": "programs/p1.py"}]},
dry_run=True)
submit_answers(..., dry_run=False) → submission_id(编程题同时回判题结果)
pta_submission_detail(exam_id, submission_id) → 复查判题 / 看失败用例答案文件(work/answers.json)可以直接用 PTA 报文形状,按题型分段;工具会自动按题型整卷提交:
[
{"problemType": "TRUE_OR_FALSE",
"details": [{"problemSetProblemId": "2104474233634361344", "answer": "TRUE"}]},
{"problemType": "MULTIPLE_CHOICE",
"details": [{"problemSetProblemId": "2104474233634361382", "answer": "B"},
{"problemSetProblemId": "2104474233634361383", "answer": "C"}]}
]字段规则:判断题 answer 用 TRUE/FALSE(也接受 T/F);单选 answer 是单个字母;多选与填空题用
answers 数组(填空题每空一项,答案里可以含逗号);编程题用 program 或 program_path。
按题型分段的写法比"每题都带 type"省约 30%,再配合 answers_file:整卷提交的调用参数从约 1.6k tokens
降到约 20 tokens(答案只在写文件时出现一次)。取题同理:mode="index" 先看概览,只对未完成的题型
mode="digest" 取题面(digest 只回题面,首行即标题)。
代码结构与运行时目录
pta_auto_mcp/
__init__.py # 版本号
load.py # cookies 读写
solve.py # 腾讯防水墙滑块纯协议求解器(4 请求/票,无浏览器)
login.py # 登录 + 会话(reactive 验证码流程)
server.py # MCP 服务(5 工具,stdio)
server.py # 本地开发薄壳:uv run server.py运行时状态不写在包目录(site-packages 可能只读),默认落在用户级状态目录:
~/.local/state/pta-auto-mcp/
cookies.json # 会话
work/ # 工具唯一允许读写的目录(越界路径直接拒绝)
programs/pN.py # 编程题源码,提交时用 program_path 引用
answers.json # 大批量客观题答案,提交时用 answers_file 引用可用 PTA_STATE_DIR / PTA_COOKIE_FILE / PTA_WORK_DIR 覆盖。
平台行为(实测,踩过的坑)
客观题 = 同题型整卷 upsert:一次 POST 会覆盖该题型此前的全部答案,因此必须一次提交该题型全部答案; 客观题不返回对错,交卷后才判。
编程/主观题逐题独立:可反复提交,每次都重新判题;编程题 1 秒内出结果。
客观题要交卷才判:
PUT /api/exams/{exam_id}/end之前拿不到对错;standard-answers交卷前返回空。 因此只有编程题需要按submission_id跟踪判题结果。精度:题目未写明小数位时,答案键通常是"原始浮点字符串",不要自行四舍五入(
温度转换一题即因此 WA)。风控窗口:短时间多次失败登录或高频解票会被网关统一拒绝(票据在腾讯侧有效也照样返回
GATEWAY_WRONG_CAPTCHA)。pta_login内置 20s 限频;命中窗口应换出口 IP 或等待。选项可能只存在 problemConfig 里:部分选择题的
content只有题干,选项在problemConfig.*Config.choices;pull_exam_set会在题面末尾补齐A. … B. …(已有A.标记的不重复补)。取题不需要 exam_id:按题型取题的接口只依赖
problem_set_id;exam_id仅在提交 (/api/exams/{exam_id}/exam-submissions)与查判题结果时使用。
安装与运行
# 使用者(不装包,直接从仓库拉起)
uvx --from git+https://github.com/kisakiayano/PTA-mcp pta-mcp
# 或安装成全局命令
uv tool install git+https://github.com/kisakiayano/PTA-mcp
# 开发者
uv sync
uv run server.py # 等价于 pta-mcp
uv run pta-login --help支持 Python >= 3.10,无需 cv2(uv sync --extra cv2 可选加速)。
MCP 客户端配置
把下面任一段加进客户端的 mcpServers。env 里的凭据只在没有有效会话时用于首次登录,
之后复用 ~/.local/state/pta-auto-mcp/cookies.json。
远程拉取(不安装,跟随仓库默认分支的最新提交):
{
"mcpServers": {
"pta": {
"command": "uvx",
"args": ["--from", "git+https://github.com/kisakiayano/PTA-mcp", "pta-mcp"],
"env": { "PTA_EMAIL": "you@example.com", "PTA_PASSWORD": "***" }
}
}
}全局安装后(启动最快,无网络依赖):
{
"mcpServers": {
"pta": {
"command": "/home/<用户>/.local/bin/pta-mcp",
"env": { "PTA_EMAIL": "you@example.com", "PTA_PASSWORD": "***" }
}
}
}本地 clone 开发(改代码立即生效):
{
"mcpServers": {
"pta": {
"command": "uv",
"args": ["run", "--directory", "/abs/path/to/PTA-mcp", "server.py"],
"env": { "PTA_EMAIL": "you@example.com", "PTA_PASSWORD": "***" }
}
}
}也可先 uv sync 再指向 /abs/path/to/PTA-mcp/.venv/bin/pta-mcp(启动更快);三种写法的启动开销
差异与 Windows 路径写法见 PUBLISH.md。
常用环境变量:PTA_STATE_DIR(状态根目录,默认 ~/.local/state/pta-auto-mcp)、PTA_COOKIE_FILE、
PTA_WORK_DIR、PTA_MIN_LOGIN_INTERVAL(登录限频,默认 20s)、PTA_COMPACT_JSON(设 0 返回结构化
dict);完整说明见 PUBLISH.md 第四节。
Available Tools
5 toolspta_list_examsA
列出练习/考试,给出提交时要用的 exam_id。
Args: only_active: True 只要未结束的(默认);False 返回全部可见题目集。 limit: 条数上限。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| only_active | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the meaningful behavioral distinction that only_active=True returns only unfinished sets while False returns all visible sets, but says nothing about permissions, pagination, or result size beyond limit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by two terse parameter notes; no filler. The embedded 'Args:' block is slightly awkward for a prose description but costs almost nothing in length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, zero-required listing tool with no output schema, the description covers purpose, both parameters, and the reason the caller needs the result. What an agent would still miss is the shape of the returned items (fields besides exam_id) and total-count/pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains only_active's effect well (not just the default but what each value returns) and glosses limit as 条数上限, but omits the default of 20 and any pagination/cursor behavior, leaving half the parameter semantics thin.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb and resource (列出练习/考试) and states the concrete payoff: the exam_id needed for submission, which links it to submit_answers. It does not explicitly contrast itself with pull_exam_set, so sibling differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The link to submission (给出提交时要用的 exam_id) implies this is a discovery step before submit_answers, and the only_active default is stated. However, it never says when to prefer pull_exam_set over this tool, nor any prerequisites such as login (pta_login is a sibling).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pta_loginA
登录并持久化会话;已有有效会话时直接复用。滑块验证码由纯协议求解器自动通过。
Args: email: 邮箱(与 phone 二选一,也可用环境变量 PTA_EMAIL)。 password: 密码(也可用环境变量 PTA_PASSWORD)。 phone: 手机号,不含 +86。 remember: 是否"记住我"。 max_captcha: 验证码重试轮数,默认 2;站点风控严格时调大无益。 pace: 轮次间退避秒数。
| Name | Required | Description | Default |
|---|---|---|---|
| pace | No | ||
| No | |||
| phone | No | ||
| password | No | ||
| remember | No | ||
| max_captcha | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it discloses that the session is persisted, that the slider captcha is solved automatically by a protocol solver, and that raising max_captcha is futile under strict site risk control. It does not describe what a failed login looks like or how errors surface, leaving one meaningful gap for a credential-handling mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The behavioral summary is front-loaded in a single sentence, and the Args block is terse with no filler. The docstring-style parameter listing is efficient, though it duplicates parameter names rather than grouping the mutual-exclusivity rule more compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter authentication tool with no annotations and no output schema, the description covers inputs and key behavior well but never states what a successful call yields (session token, user object, persisted file location) or how failure is reported. That leaves the agent guessing about the return contract.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does for all six parameters: email/phone mutual exclusivity, phone without the +86 prefix, env-var fallbacks for email and password, remember-me semantics, max_captcha's default of 2 plus advice not to raise it, and pace as inter-round backoff seconds. This is richer than the schema's bare titles and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb and resource ('登录') plus the resulting state change ('持久化会话'), and adds a distinguishing behavior: an existing valid session is reused rather than re-authenticated. It is unmistakable against siblings like pta_list_exams and submit_answers, which are unrelated exam operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent when authentication can be skipped ('已有有效会话时直接复用'), and the Args section clarifies the email-or-phone alternative along with environment-variable fallbacks, so most invocation prerequisites are stated. There is no explicit when-not or failure-recovery guidance, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pta_submission_detailA
查看某次提交的判题结果:总状态/得分、每个用例结果、失败用例的输出摘要。
Args: exam_id: 考试 ID。 submission_id: submit_answers 返回的 submission_id。 max_text: 失败用例输出截断长度。
| Name | Required | Description | Default |
|---|---|---|---|
| exam_id | Yes | ||
| max_text | No | ||
| submission_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden: '查看' implies a read-only operation and the return contents are described. But it says nothing about authentication/permission requirements, whether results are final or may still be grading, or any rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded: a one-line summary of what is retrieved, followed by a compact Args list. No filler; only minor gain from stating defaults or limits.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description steps in by enumerating the returned fields and dimensions. Together with full parameter coverage it is nearly sufficient; only operational details such as grading readiness or auth are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description documents all three parameters: exam_id, the source of submission_id, and max_text as the truncation length for failing output. This meaningfully compensates for the empty schema, though formats (e.g., exam_id syntax) and max_text bounds/default are not stated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('查看某次提交的判题结果') and enumerates exactly what is returned: overall status/score, per-case results, and truncated output for failing cases. It is clearly distinguishable from siblings like submit_answers or pta_list_exams.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
By noting that submission_id comes from submit_answers, the definition implies the intended workflow: submit first, then inspect results. It gives no guidance on when not to call it, when results are ready, or what to do instead if grading is still pending.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pull_exam_setA
按题型取题,并用 summaries 核对各题型题量(不一致会报错,不会返回残缺数据)。
Args: problem_set_id: 题目集 ID(来自 pta_list_exams)。 problem_types: 只要这些题型,缺省全部。 mode: index 只回 id/题型/标题(概览);digest 只回题面(首行即标题);content 题面更长。 offset / limit: 分页,limit=0 表示全部(digest 建议 15~30)。 max_content_chars: 题面截断长度。
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | index | |
| limit | No | ||
| offset | No | ||
| problem_types | No | ||
| problem_set_id | Yes | ||
| max_content_chars | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden, and it does disclose important failure behavior (a mismatch with summaries raises an error instead of returning incomplete data) plus pagination (limit=0 means all) and truncation via max_content_chars. It does not state whether the call is read-only, whether it requires an active pta_login session, or anything about rate limits, which matters for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The scoping and error-guarantee sentence is front-loaded, then a tight Args list. Every line carries information, though the overall block is longer than strictly needed and could fold offset/limit into a single line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter, no-annotation, no-output-schema tool, the description covers what each mode returns (id/type/title vs. stem with the first line as title), paging, truncation, and the failure mode. The only material gap is the absent authentication/session prerequisite and confirmation that the operation is non-destructive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate entirely, and it does: every one of the six parameters is explained, including the three undocumented mode values with their distinct return content, the limit=0 sentinel, the digest-specific 15–30 recommendation, and the default-ish role of max_content_chars.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening states a specific verb+resource: fetch problems from an exam set filtered by problem type, with a summaries cross-check that errors out rather than returning partial data. It is clearly distinguishable from pta_list_exams (which supplies the problem_set_id) and from submit_answers, though it never names a sibling outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete selection guidance: problem_set_id comes from pta_list_exams, and mode is explained as a choice with explicit consequences (index = overview, digest = stem only, content = longer stem). It also recommends limit 15–30 for digest. What's missing is any statement of when not to use this tool versus submit_answers or pta_submission_detail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_answersA
提交答案:客观题按题型整卷提交,编程题逐题提交并回传判题结果。
答案形如(每个题型一段,可给列表): {"problemType": "TRUE_OR_FALSE", "details": [{"problemSetProblemId": "...", "answer": "TRUE"}]} {"problemType": "MULTIPLE_CHOICE", "details": [{"problemSetProblemId": "...", "answer": "B"}]} {"problemType": "PROGRAMMING", "details": [{"problemSetProblemId": "...", "program_path": "programs/p1.py"}]}
Args: exam_id: 考试 ID(来自 pta_list_exams)。 answers: 上述结构(或它们的列表);大体积答案用 answers_file 指向 work/ 下的 JSON,避免在对话里重复贴。 answers_file: work/ 下 JSON 文件路径,内容同 answers(整卷归档时给列表,每个题型一段)。 dry_run: True(默认)只回提交计划,确认后传 False。
| Name | Required | Description | Default |
|---|---|---|---|
| answers | No | ||
| dry_run | No | ||
| exam_id | Yes | ||
| answers_file | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that dry_run=True returns only a submission plan (a safe preview), that programming submissions return judge results, and that answers_file avoids re-pasting large JSON. It does not cover failure modes, resubmission/overwrite semantics, or auth requirements, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the submit semantics, then args, then payload examples — a sensible order with little waste. The example blocks are justified by the 0% schema coverage, though 'answers: 上述结构(或它们的列表)' partially repeats the opening sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter mutation tool with no annotations and no output schema, the description covers invocation, payload construction, and the dry-run confirmation loop. It leaves the shape of the dry-run plan and the returned judge results implicit, which the missing output schema makes a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and it does: all four parameters are explained, including the exact per-problem-type JSON shape with worked examples, the list-vs-object distinction for answers, the answers_file path convention and its equivalence to answers, and dry_run's default and effect.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('提交答案') and immediately splits the behavior into two concrete modes: whole-exam submission for objective question types versus per-problem submission with judge-result feedback for programming questions. An agent can tell this apart from the sibling list/detail tools without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives actionable routing context: exam_id is sourced from pta_list_exams, large payloads should use answers_file under work/ instead of pasting JSON into the conversation, and dry_run defaults to True so the agent previews a plan before confirming with False. It stops short of stating exclusions (e.g. when not to resubmit or how this relates to pta_submission_detail), so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
pta_list_exams - First observed
pta_login - First observed
pta_submission_detail - First observed
pull_exam_set - First observed
submit_answers
TDQS
Scored across 5 tools
Each tool maps to a distinct step in the exam workflow: login, list exams, pull problem set, submit answers, view submission detail. The descriptions make the boundary between pta_list_exams (exam_id discovery) and pull_exam_set (problem content retrieval) explicit, so no overlap remains.
All names are snake_case, but prefixing is inconsistent: pta_login, pta_list_exams, and pta_submission_detail carry the pta_ prefix while pull_exam_set and submit_answers do not. The verb_noun style is mostly respected but pta_submission_detail drops the verb entirely.
Five tools is a tight, well-scoped set that mirrors the end-to-end task of logging in, finding an exam, pulling problems, submitting, and reviewing results. Each tool clearly earns its place with no redundancy.
The core lifecycle (auth, discovery, retrieval, submission, result inspection) is fully covered, so agents can complete the primary workflow. Minor gaps like logout or listing all past submissions exist but agents can work around them using returned submission_ids.
Maintenance
Related MCP Connectors
Public web tools for agents: product extraction, claim checks, webpage QA and ranked audits.
Access Pollinations models and API capabilities through agent tools.
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
660+ data tools for agents: TikTok, Douyin, Instagram, YouTube, X, weather, GitHub. Pay per call.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to crawl and extract data from Chinese social media platforms like Bilibili, Xiaohongshu, and Douyin. Provides search, content detail retrieval, and creator information tools with persistent browser sessions and QR code login support.78-
- AlicenseAqualityDmaintenanceProvides tools for AI agents to interact with the Orange Juice Online Judge API by managing problems and code submissions. Users can list problems, retrieve detailed descriptions, submit source code, and track submission status through natural language.51MIT
- FlicenseAqualityBmaintenanceEnables AI agents to manage prompts and sessions via the ai-agent-logs API, with tools for health checks, login, listing/creating prompts, and retrieving sessions.6-
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to directly query Chaoxing/Xuexitong courses and homework status via fast HTTP calls, with persistent login and automatic re-authentication.11MIT