mcp-stepik
MCP-сервер для авторства курсов на Stepik: FastMCP (HTTP) + Rust StateStore/TaskStore, workflow как в mcp-presentation.
Пакеты
| Пакет | Import | Роль |
|---|---|---|
mcp-stepik-core |
mcp_stepik |
FastMCP + TaskStore + CLI |
mcp-stepik-state |
mcp_state |
sessions / workspaces (rusqlite) |
Стек: Python 3.12+ · FastMCP · Rust 1.95 / PyO3 · rusqlite · httpx · Pydantic.
Happy path (workflow)
create_session
→ create_project(project_id)
→ checkout_workspace(session_id, project_id)
→ save_course_ir(session_id, ir_json) # Pydantic validate → course.ir.json
→ sync_course(session_id) # task: IR → Stepik API
→ upload_video(session_id, "assets/a.mp4") # task: upload + poll ready
→ get_course_page_url(session_id) # https://stepik.org/course/{id}/
→ publish_course(session_id) # task: is_enabled=true
Пример IR: examples/demo/course.ir.json Schema: schemas/course.ir.schema.json
Run (HTTP only)
uv sync --extra dev
(cd packages/mcp-stepik-state && maturin develop)
maturin develop
export STEPIK_CLIENT_ID=...
export STEPIK_CLIENT_SECRET=...
export MCP_STEPIK_HOST=127.0.0.1
export MCP_STEPIK_PORT=8000
uv run mcp-stepik
OAuth app: https://stepik.org/oauth2/applications/ (Confidential + Client credentials)
Cursor / HTTP MCP
{
"mcpServers": {
"mcp-stepik": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}
Env for data dirs (optional):
export MCP_STEPIK_STATE=/abs/path/state
export MCP_STEPIK_PROJECTS=/abs/path/projects
export MCP_STEPIK_WORKSPACES=/abs/path/workspaces
Tools
Workflow / state
create_session, get_session, list_sessions, create_project, checkout_workspace, create_workspace, get_workspace, list_workspaces, set_active_workspace, remove_workspace, save_course_ir, sync_course, upload_video, publish_course, get_task_status, get_course_page_url
Stepik CRUD
Courses / sections / lessons / units / steps: text, choice, code, video, string, number, matching, sorting, free-answer, review
stepik_health_check,stepik_list_courses, …
Docs
- Architecture:
docs/architecture/OVERVIEW.md - ADR:
docs/adr/
Dev
make develop
make test
make lint
make cov-rust
Диск
state/tasks.db state/sessions.db
projects/<id>/
workspaces/<ws_id>/course.ir.json