StudyFlow MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PYTHONPATH | Yes | Add the project's `src` directory to PYTHONPATH before running (`python -B -m chaoxing_learning_mcp`). | |
| STUDYFLOW_AUTO_BROWSER | No | Set to 0 to disable the automatically launched independent Edge browser (only needed for protocol or no-browser testing). | 1 |
| STUDYFLOW_BROWSER_MODE | No | Default browser mode: `headless` for no window, or `minimized` for a windowed but minimized browser. Can also be set per-session via `configure_course_browser` or the `browser_mode` parameter of `setup_learning_accounts`. | minimized |
| STUDYFLOW_ENABLE_LEGACY_TOOLS | No | Set to 1 only for explicit compatibility needs to re-enable the 22 obsolete/diagnostic tool entrypoints omitted from default discovery. | 0 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| route_learning_taskB | Unified read-only entry point. Choose the mode from user intent and observed task type. Returns tools and dependencies, not a claim that the session is connected. Does not log in, start playback, save answers, or submit anything. |
| capabilitiesB | Describe supported operations and explicit mutation boundaries. |
| refresh_direct_implementationA | Explicitly reload direct course code while preserving its idle browser and thread. Never reload while a submission outcome is unknown. An unsubmitted review plan may be explicitly discarded and must then be prepared again. |
| implementation_statusB | Read adapter source identity and current process without credentials or network. |
| refresh_inventory_implementationC | Update validated inventory code in this process; retain account sessions and verification gates. |
| inspect_course_score_pageB | Read enrolled-course score pages and their observed links; never navigate or submit. |
| update_account_credentialsB | Correct an inactive account's credentials without replacing other accounts or mail mapping. |
| setup_learning_accountsA | Collect credentials once, optional shared SMTP + per-account notify_email; login first account. Start only after the user supplies learning credentials. Other accounts stay queued in import order; login_accounts([next_id]) reuses ONE browser process. This does not claim any task is completed. Passwords/codes are memory-only. |
| import_accountsB | Import learning accounts into memory, with optional per-account QQ SMTP notices. Required: account_id, username, password. Optional TOGETHER: smtp_email, smtp_auth_code, notify_email. Prefer configure_smtp_sender ONCE, then each record supplies only notify_email. Without a shared sender that binding awaits setup. Legacy per-account sender configuration remains supported. No QQ login password. Omit all mail fields to skip email. Ask the user for missing credentials and offer optional mail setup in the same input step; never echo secrets. |
| list_accountsA | List redacted account state without returning credentials or cookies. |
| login_accountsA | HTTP login only by default; never switches another account's browser implicitly. Reuses logged-in sessions. After a platform rejection, change credentials or inspect verification rather than retrying the same password repeatedly. setup_learning_accounts explicitly activates its first account. |
| list_coursesC | Fetch and parse the current enrolled-course pages for selected accounts. |
| inspect_courseC | Inspect a user-selected enrolled course URL for task and deadline hints. |
| export_deadlines_icsB | Export reviewed {title, due_at ISO-8601} reminders to an ICS file. |
| prepare_user_navigationB | Return a validated user-openable URL and playback preference; does not write course progress. |
| get_wrong_questionsC | Read complete locally archived mistakes and rejected combinations, without inferring corrected keys. |
| attach_exam_browserA | Bind an existing extension-controlled tab using its observed DOM; no CDP or login. Browser controller supplies document.documentElement.outerHTML through its supported read-only API. MCP parses it; all actual UI actions stay with that controller. No cookies, debugger commands, script execution or platform writes. |
| refresh_exam_browserC | Parse a fresh current-question DOM observation from the same browser tab. |
| prepare_exam_browser_stepB | Validate reviewed answer and return a UI action plan; never executes it. The browser controller must re-check current question before normal UI actions, then supply independent navigation/reload readback for draft confirmation. Multiple choice reuses all existing included/excluded-option review rules. Omit answer/review together to use only a valid exact platform-confirmed cache. |
| wait_exam_browser_saveB | Wait random 2-5 seconds after visible selection, then authorize draft save. Does not click or submit. The controller must recheck the same question and selection before clicking the plan's Next/Preview control. No final submission. |
| confirm_exam_browser_draftB | Verify the original question's saved answer in independent navigation DOM readback. In-place selected state alone is insufficient: controller must obtain HTML after navigation/reload or from the full preview. This does not save answers. |
| audit_exam_browser_previewC | Audit all observed preview answers; earlier unreviewed questions remain unverified. |
| exam_browser_progressC | Read actual verified draft count for the browser-controller handoff mode. |
| attach_exam_sessionB | Attach exactly one existing exam tab through an explicitly configured local CDP endpoint. Does not launch browsers, log in, or navigate. The browser must already expose the endpoint. Reuse the returned run_id throughout the sequential workflow. |
| read_current_exam_questionC | Read structured question/options and a content-bound token from the existing tab. |
| review_current_exam_answerA | Stage one current-model reviewed answer; no platform writes. review requires model_reviewed=true, certain=true and basis. Multiple choice also requires selected_reasons, excluded_reasons for every option, and cross_checked=true. Unresolved conflicts and previously rejected combinations stop the workflow. |
| run_exam_question_loopB | Answer and save reviewed questions one at a time using the page's own Next action. Stops on an unknown answer (returns it for current-model review), error, changed question, 40-second budget, or final preview. Call again to continue. Exact platform-confirmed caches run first; cache misses require current-model review. Never finally submits. |
| audit_exam_previewC | Compare every answer in the full preview against this run's reviewed saved answers. |
| exam_loop_progressC | Read loop progress without opening or changing any browser page. |
| inspect_exam_pageC | Read an existing exam page without running JS or saving answers. GET may refresh exam access state. |
| analyze_exam_htmlA | Parse an already captured exam HTML offline; no network or platform writes. |
| prepare_exam_answer_planB | Validate a plan for loaded exam questions only; does not save or submit it. |
| get_exam_progressC | Count observed saved answers only; a single-question page is not whole-paper progress. |
| inspect_exam_grading_htmlC | Read actual grading-page HTML supplied by the browser controller, with no submission. Preview pages or incomplete/unsupported grading structures never establish 100%. Does not promote any cache entry based on model conclusions or partial credit. |
| attach_course_browserB | Bind the existing Edge tab. Controller supplies DOM; MCP opens no browser. |
| observe_course_browserC | Parse course directory or chapter-quiz DOM from the bound tab, without network. |
| prepare_course_quizC | Validate reviewed chapter answers and stage a UI plan; never click or submit. |
| release_course_quizC | Authorize one UI action after a fresh same-content read and a real 2-5s interval. |
| start_owned_exam_captureB | Monitor user-driven exam navigation in the current browser; memory-only metadata. |
| owned_exam_capture_statusC | Read cached sanitized endpoint events; no cookies, headers or parameter values. |
| stop_owned_exam_captureD | – |
| read_owned_exam_observationC | Read visible controls and offline-parsed questions from existing account pages. |
| start_desktop_consoleC | Open the explicitly requested local GUI, sharing this process's accounts. |
| inspect_owned_video_deliveryC | Passively observe actual player report responses; never send/alter reports. |
| read_owned_video_captionsA | Read already-loaded subtitle cues of this chapter, without seeking or replay. |
| submit_reviewed_chapter_quizB | Normalize reviewed fields, stage, wait, reobserve and submit ONCE; never guesses answers. Caller must first observe the complete quiz and supply current-model-reviewed answers/evidence. An unknown result is never replayed by this convenience tool. |
| runtime_healthD | – |
| verify_runtime_resilienceC | Exercise installed recovery decisions using isolated state, never the active page. |
| claim_current_accountB | Register the current worker's OS lease without logging in or opening a browser. |
| load_batch_implementationD | Expose account script queues without restarting browsers or losing memory credentials. |
| refresh_notification_implementationC | Reload notification code, preserving in-memory credentials, dedup state and delivery queue. |
| configure_course_browserA | Choose ONE mode for the entire account batch BEFORE login. headless: no window. minimized: visible-capable independent Edge, starts minimized. Reuse the current process-owned browser for every account. A mode change before login closes the old browser FIRST, never opens a second concurrent instance. |
| owned_window_statusA | Read the owned window bounds without changing focus, size or window state. |
| activate_learning_accountA | Activate next sequential account in ONE browser process, replacing only its isolated context. Never switch across unknown submissions, pending review plans, or verification. Caller must finish/record the current account's tasks before advancing. |
| monitor_owned_videoA | Local event-driven playback watcher: initial sample, estimated end, pause recovery. No model/API calls, seeking, visibility emulation, or automatic question answers. status reads cached state only. stop before intentional manual pause. |
| set_owned_video_rateD | For 1.25: initialize playback then use the inspected player adapter automatically. Native mode changes real playback only; never seek, mask events or alter reporting. |
| minimize_owned_windowA | Minimize only this owned browser; do not emulate focus or visibility. |
| use_window_viewportB | Remove fixed metrics on the current owned page without replacing its session. |
| start_course_browserB | Launch ONE browser inside this MCP process and seed it with the login session. Empty account_id opens the official login page without credentials. A later account bind reuses the same browser with memory-only HTTP login cookies. No daily profile copy and no port discovery. |
| goto_course_pageB | Navigate the owned page with bounded retries and per-attempt logging. |
| find_chapter_linksB | Read chapter/task links from the owned page (read-only DOM query). Returns absolute hrefs for chapter nodes (id starting with "cur") and any anchors pointing at study/knowledge pages, so the caller can navigate to an explicit chapter without guessing URL shapes. |
| open_chapter_quizB | Locate the chapter-quiz iframe: click the quiz tab and lazy-scroll until found. |
| desktop_accountsD | – |
| desktop_account_toolD | – |
| start_owned_exam_finishC | After full-preview audit, watch visible remaining time and submit once below threshold. |
| owned_exam_finish_statusD | – |
| stop_owned_exam_finishD | – |
| owned_exam_review_inventoryC | Use already open full preview to identify exact cache hits once per paper. |
| read_owned_exam_gradingA | Read the current attempt's actual grading page without submitting anything. |
| send_owned_exam_result_noticeB | Send the verified current exam score once to this account's bound mailbox. |
| recover_owned_exam_workerB | Read-only liveness fence after a timed-out batch; never replay a save. |
| stage_owned_exam_reviewsC | Queue already reviewed content fingerprints in memory; do not choose answers. |
| run_owned_exam_queueC | Execute reviewed questions; stop starting new steps after 20 seconds. |
| return_owned_exam_questionB | Use the observed Return link to leave full preview without submitting. |
| preview_owned_exam_questionsB | Open the platform's normal full preview, never click final submission. |
| inspect_owned_exam_navigationD | – |
| verify_owned_exam_saved_answerD | – |
| refresh_owned_exam_adapterA | Reload only the idle exam adapter; retain browser, capture and review state. |
| read_owned_exam_questionB | Read current question and exact verified cache without browser navigation. |
| save_owned_exam_answerC | Save one reviewed answer through normal Next/Preview controls; never final submit. |
| restore_owned_windowB | Show this account's headed browser for explicitly requested user interaction. |
| observe_chapter_quizB | Read the quiz iframe DOM in-process and parse it with the existing parser. |
| submit_chapter_quizB | Select reviewed options, submit ONCE, then read platform grading. Write safety: exactly one submit click; failures before the click abort, failures after are reported as pending outcomes (never retried). |
| browser_statusA | Owned-browser lifecycle state plus the recent stage log. |
| stop_course_browserA | Close the owned browser and stop Playwright (never touches host browsers). |
| browser_run_logC | Return the full structured stage log; optionally write it to a JSON file. |
| inspect_owned_pageC | Read the real owned page, cards, frame text, and task markers; optional screenshot. |
| select_course_cardB | Select one observed video/quiz/learning-objective card by its actual dct selector. |
| open_course_chapterC | Open exactly one chapter node present in the owned course directory. |
| control_owned_videoC | Inspect media; play initializes muted UI, applies inspected 1.25 adapter, minimizes and watches locally. Never seek. Use rate=1 for normal speed. |
| read_owned_browser_viewC | Current account's actual viewport, memory-only; no new browser or focus change. |
| open_account_browserC | Show the account window; ordinary course automation keeps running. |
| return_account_to_backgroundB | After manual work, return this account to headless course dispatch. |
| read_chapter_quiz_gradingA | Read existing platform grading without selecting, submitting or retrying. |
| observe_video_questionC | Read one actual video popup question and its full options without answering. |
| answer_video_questionC | Select one reviewed radio answer and submit once in the observed video popup. |
| continue_rejected_video_questionB | Explicit user-requested dismissal via the player's existing continue callback. Retains the wrong grading, never resubmits an answer, seeks or claims completion. No automatic dismissal policy is enabled by this one-time operation. |
| switch_owned_video_lineC | Choose one observed public video line through normal visible UI, once per line/page. |
| refresh_desktop_implementationB | Update the local GUI gateway while preserving pairing and all account runtimes. |
| configure_desktop_preferencesD | – |
| desktop_console_statusD | – |
| desktop_report_stateD | – |
| validate_reviewed_chapter_quizC | Validate review format/evidence without staging, selecting or submitting. |
| open_course_examA | Open the selected enrolled course's observed exam list, without starting an attempt. |
| enter_selected_examC | Click the uniquely visible named exam in the currently owned exam list. |
| close_account_workspaceB | Pause this account and close its browser only after preserving exam/write guards. |
| defer_current_learning_taskC | Explicit host decision for a new evidenced issue; retain unfinished task, never submit. |
| set_learning_batch_rateC | Set this account's current/future rate; return actual readback, never silent fallback. |
| inspect_current_taskC | Compact fresh inspection distinguishing quiz, completed video, player and loading. |
| recover_current_taskC | One normal navigation recovery of an observed task; no browser/session recreation. |
| start_learning_batchA | Run imported accounts sequentially with exact enrolled-course matching. accounts=[{account_id, courses:[requested course names or {name,course_id}]}]. Reuses the existing single browser. Never automatically answers/submits quizzes. If a review is needed use existing review tools, then resume_learning_batch. |
| learning_batch_statusC | Cached compact state only; no page reads, HTTP calls or model API. |
| resume_learning_batchC | After actual model review/human verification, revalidate the same task before proceeding. |
| stop_learning_batchA | Stop queue dispatch without closing the browser or interrupting pending submissions. |
| start_account_workspaceB | Launch one isolated account browser without starting any course or exam. |
| recover_terminal_media_accountC | Recover an OS-unlocked terminal worker from an exact saved media scene only. No submissions are replayed. Fresh platform directories choose remaining tasks. Deferred tasks survive; hourly reporting restarts for this account. |
| recover_graded_parallel_accountA | Recover ONLY a stuck remote graded worker after independent exact readback. Compatibility path for old workers which cannot hot-load while their parser has latched an already graded submission. No submissions are sent or replayed. Healthy workers are never stopped. The affected worker's hourly timer restarts. |
| add_parallel_learning_accountsC | Append imported accounts to this supervisor; reuse existing queues unchanged. Does not stop, re-login, navigate or rebuild existing workers. Conflicting existing queues are reported, not replaced. Use retry only for terminal failures. |
| set_parallel_playback_rateC | Apply the user's requested rate to each connected account, retaining separate results. |
| start_parallel_learning_batchesA | Start every supplied account concurrently, one browser process per account. Accounts reference already-imported account_id plus courses:[exact names]. Reuse the parent account's existing browser if active; launch isolated MCP workers for the others. Credentials/config transfer only over stdio memory. Both headless and minimized modes work; no numeric concurrency/account cap. |
| parallel_learning_statusC | Cached account-specific status or compact all-account summary, never browser polling. |
| parallel_account_toolC | Route a necessary review/readback to the correct account's existing MCP worker. No login/navigation/session creation here. Unknown submissions remain unknown; each child enforces its ordinary review, freshness and single-submit guards. |
| retry_parallel_accountD | Recover a terminated startup worker or an orderly fully completed course worker. |
| inspect_homework_browserB | Inspect a fresh homework-list DOM; never reuse chapter/exam submit tools. Only the observed empty-list structure is verified. Nonempty assignments require their own observed question/save/grading adapter before any writes. |
| classify_learning_portalC | Classify exact portal hosts/paths without fabricating navigation URLs. |
| evaluate_homework_deadlinesC | Evaluate observed inventory. Returning alerts does not deliver notifications. |
| send_notification_testB | Send one explicitly requested test email using this account's own recipient. |
| configure_smtp_senderA | Configure ONE shared QQ sender for all learning accounts. Per-account recipients are separate. QQ ordinary password is not required; SMTP authorization code stays in memory. Does not send a test email automatically. |
| bind_account_notification_emailB | Bind this learning account's recipient; empty skips mail. Requires shared sender for delivery. |
| configure_smtp_notificationsA | Optional per-account QQ SMTP configuration. Use authorization code, NOT QQ password. All empty fields skip notifications. Recipient defaults to sender. Notification permission covers only verification reminders and actual verification QR PNGs. Secrets remain in this MCP process memory and are never included in responses. |
| smtp_notification_statusC | Cached redacted state only; does not connect SMTP or read a browser. |
| configure_notification_intervalD | – |
| send_hourly_report_testB | Explicitly send one hourly-format TEST. No fake course events or timer changes. |
| send_learning_stage_noticeC | Explicitly send current account progress + each quiz score, without page reads. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 134 tools
The set contains many overlapping tool families for the same actions: browser attach/start (attach_course_browser, attach_exam_browser, attach_exam_session, start_course_browser, start_account_workspace), exam reading (read_current_exam_question, read_owned_exam_question, inspect_exam_page, inspect_owned_page), and submission (submit_chapter_quiz, submit_reviewed_chapter_quiz, save_owned_exam_answer, run_exam_question_loop, run_owned_exam_queue). Detailed descriptions attempt to distinguish transport/mode (CDP vs bound tab vs owned browser vs parallel worker), but the boundaries remain unclear for an agent choosing a tool.
Nearly all names are snake_case and most follow verb_noun patterns (inspect_exam_page, save_owned_exam_answer, configure_smtp_sender, start_parallel_learning_batches). There are some noun-only status/health names (capabilities, runtime_health, browser_status, desktop_accounts, exam_loop_progress), but they are readable and still consistent in casing.
134 tools is extreme for a study-automation server and strongly suggests fragmentation into many narrow, mode-specific operations. The surface is far beyond what an agent can reasonably discover or select among, with multiple near-duplicate pathways.
The surface is vast and covers account lifecycle, course browsing, exam capture/review/save/submit, video control, parallel workers, notifications, deadlines, grading, and implementation refresh. Minor gaps exist (e.g., no account deletion, homework support is only for an empty-list observation, and several tools have empty descriptions), but the core domain is extensively covered.