One workspace for lessons, homework, tests, the gradebook, attendance, projects and chat — for schools, tutoring centers and the individual teacher. Parents see their own children, and pupils and parents are always free. English and Ukrainian.
This listing identifies a third-party MCP server. MCPBundles is not affiliated with, sponsored by, or endorsed by the service or its operator unless stated on this page.
This server may ask you to sign in when your AI client connects.
Last probed Nov 3, 2026 · mcp.osvitly.com
55tools discovered
For AI agents — MCPBundles Directory API
For MCP client apps (human connect):
MCP connect URL: https://mcp.osvitly.com/mcp
Skill page: https://www.mcpbundles.com/skills/osvitly-mcp-e5afa655ed
Explore capabilities (55)
read 7
write 9
other 9
Showing 25 of 55
Showing 25 of 55 tools from the public preview. Connect the server to inspect the full live tool list.
Create5
List5
Update3
Get2
Reorder2
Other capabilities8
Whoami
other
whoami
Identify the connected token: the school, the member and the role it
acts as. Call this FIRST in a new conversation — every other tool is
silently scoped to this school, and the role decides what is allowed
(an admin token may act school-wide; a teacher token is limited to what
that teacher can do in the app).
Returns the member's public_id, name, email and role, and the school's
public_id, name, slug, default_language and timezone. `default_langu
Description may be truncated on the public preview.
Whoami — Identify the connected token: the school, the member and the role it
acts as. Call this FIRST in a new conversation — every other tool is
silently scoped to this school, and the role decides what is allowed
(an admin token may act school-wide; a teacher token is limited to what
that teacher can do in the app).
Returns the member's public_id, name, email and role, and the school's
public_id, name, slug, default_language and timezone. `default_langu
List Classes — List the classes (groups of pupils) of this school. Use it to find the
`school_class` public_id that `create_homework` needs, and to know which
grades exist before drafting content for one. Each row names its
`academic_year` (ADR-031) — a class is one cohort in one year, so
default to classes of the CURRENT year unless asked otherwise.
Optional `search` matches the class name (e.g. "5-A");
`academic_year` (a year public_id) narrows to one year.
Create Class — Create a class — the EMPTY shell only (e.g. "7-A"), with no pupils.
Check `list_classes` first: the class may already exist, and a duplicate
"7-A" in the same year confuses everyone.
`academic_year` is a year public_id; omit it to use the school's CURRENT
year (the server refuses if the school has none yet). A class never
moves to another year afterwards — the next year's "8-A" is a `promote`
a human runs in Osvitly (ADR-031). `teachers` is an opt
List Courses — List the courses (subject-level containers) of this school, newest
first, with their module and lesson counts. Use it for context before
creating anything — a course for the subject may already exist.
Optional `search` matches the course title.
The answer is one page. A `next_page` in the result means there are
more rows than it holds — pass it back as `page` to read them, and
never treat the first page as the whole collection.
Create Course — Create a course — the top-level container a subject's modules and
lessons live in (e.g. "Mathematics, grade 5").
Returns the course including its `public_id`, which `create_module` and
`create_lesson` take. Check `list_courses` first: courses are cheap but
duplicates confuse teachers.
Get your MCP into directories
A working endpoint is step one. Directory coverage is the coordinated launch across ChatGPT, Claude, Cursor, the MCP Registry, and community indexes.
One workspace for lessons, homework, tests, the gradebook, attendance, projects and chat — for schools, tutoring centers and the individual teacher. Parents see their own children, and pupils and parents are always free. English and Ukrainian.
How do I connect Osvitly to my AI agent?
Use the MCP endpoint listed on this page in your MCP client configuration. One-click install pills support Claude, Cursor, VS Code, and other hosts. Copy the remote MCP URL if your client needs a manual entry.
How many tools does Osvitly provide?
Operate this server?
Request removal if you do not want Osvitly listed here, or claim the listing if you want to manage it on MCPBundles.
Operate Osvitly?
This server appears in the MCPBundles directory. Verify you operate it to take over the listing — name, description, logo, contact email, and skill content. We email a 6-digit code to a maintainer address your server publishes in /.well-known/security.txt or /.well-known/mcpbundles.json. Free, takes about a minute.
MCPBundles publishes this directory for MCP discovery. Except where we host or operate an offering, third-party services run under their own terms. Product and company names on this page are used in a descriptive, identifying way (including under nominative fair use where applicable); they remain the property of their owners. Nothing here grants you rights in those marks, and nothing here is an offer to sell a third party's services. Terms · Request removal
More in education
Other MCP servers in this category from the directory index
Update Course — Update a course's title and/or description. Only the arguments you
pass are changed; modules and lessons are untouched.
`course` is a course public_id. Renaming a course is safe — every
module and lesson stays attached.
Create Module — Create a module — an ordered topic inside a course (e.g. "Fractions").
`course` is a course public_id (from `list_courses` / `create_course`).
The module is appended to the end of the course; use `reorder_modules`
to move it. Returns the module including its `public_id`, which
`create_lesson` takes.
Reorder Modules — Move one module to position `order` (1-based) within its course; the
modules it passes shift to make room.
`module` is a module public_id. Reorder one module at a time — there is
no bulk reorder.
Reorder Lessons — Move one lesson to position `order` (1-based) within its placement
(its module, or its course's module-less lessons); the lessons it
passes shift to make room. Lessons list in this order everywhere,
pupils included — put the introduction first.
`lesson` is a lesson public_id. Reorder one lesson at a time — there
is no bulk reorder.
List Lessons — List lessons of this school without their body (titles, placement and
status only) — use `get_lesson` for the blocks of one.
All filters are optional: `course` / `module` are public_ids, `status` is
`draft`, `published` or `archived`, `search` matches the title.
The answer is one page. A `next_page` in the result means there are
more rows than it holds — pass it back as `page` to read them, and
never treat the first page as the whole collection.
Get Lesson — Read one lesson in full: its blocks, its placement and its private
`teacher_notes`.
`lesson` is a lesson public_id. Call this before `update_lesson` — an
update REPLACES the block list, so you need the current one to extend
it rather than overwrite it.
Create Lesson — Create a lesson as a **DRAFT**. It is invisible to pupils until it
is published AND scheduled to their class. Publish (`publish_lesson`)
only after a human reviewed the draft in Osvitly (ADR-034) — never in
the same breath as creating it.
Placement (all optional): `module` (a module public_id — the usual case,
which implies its course), or `course` alone for a course-level lesson,
or neither for a standalone one. `teacher_notes` is a private lesso
Update Lesson — Update a lesson. Only the arguments you pass are changed.
**`blocks` REPLACES the whole body** — there is no append. Read the
lesson with `get_lesson` first and send the full list you want. The
block schema is the same as `create_lesson`'s:
A lesson body is an ordered list of blocks, each `{"type": ..., "data": {...}}`
(ids are assigned server-side). Available types:
- `rich_text` — `{"html": "<p>…</p>"}`. The ONLY prose block. HTML is
sanitiz
Publish Lesson — Publish a lesson (ADR-034). Pupils of every class it is scheduled to
see it from this moment — publishing alone shows nothing until
`schedule_lesson` slots it into a class calendar (ADR-011).
Publish ONLY when a human asked for it, after they reviewed the draft
in Osvitly. The intended flow is: create drafts → the teacher reviews
them in the app → publish and schedule on their instruction. Never
publish in the same run that created the content unl
Unpublish Lesson — Unpublish a lesson — it instantly disappears for pupils (its class
schedules stay in place, dormant until republished). The revert path
for a publish made in error.
Schedule Lesson — Slot a lesson into a class calendar (ADR-034). For a PUBLISHED
lesson this is the moment the class's pupils see it (ADR-011) — apply
the same human-review rule as `publish_lesson`.
`school_class` is a class public_id (from `list_classes`); `starts_at`
is an ISO 8601 datetime with an offset, e.g.
"2026-09-08T09:00:00+03:00"; `duration_minutes` defaults to the
school's standard lesson length. One lesson can be scheduled to any
number of clas
List Schedule — Read the class calendar — the slots `schedule_lesson` created, in
time order. Use it to VERIFY a schedule you just built, and to find the
slot public_id `reschedule_lesson` needs.
All filters are optional: `school_class` is a class public_id,
`starts_from` and `starts_before` are ISO 8601 datetimes bounding the
window (`starts_before` is exclusive).
Each entry carries its slot `public_id`, the lesson (with its number in
the course), the c
Reschedule Lesson — Move an existing calendar slot to a new time, or change its length.
This is the REPAIR path for a schedule built on wrong dates, and the
right one: the slot row survives, so the attendance marks recorded on
it (ADR-015) move with it — nothing is destroyed and nothing has to be
deleted by hand. To shift a run of lessons, reschedule each slot;
`list_schedule` gives you their ids and current times.
`schedule` is a slot public_id from `list_schedule`
Archive Lesson — Archive a lesson (C4 soft-delete): it leaves every list and pupil
surface but the row stays. Archive only on a human's explicit
instruction naming the lesson. The follow-up `delete_lesson` can then
destroy it permanently — archiving alone destroys nothing.
Delete Lesson — PERMANENTLY delete an ARCHIVED lesson (ADR-035). Irreversible.
Only on a human's explicit instruction naming this exact lesson.
`confirm_title` must be the lesson's exact title, retyped — read it
with `get_lesson` first; a mismatch refuses
(`confirm_title_mismatch`). Also refused when the lesson is not
archived (`not_archived` — `archive_lesson` first) or when attendance
was ever recorded on its schedule (`lesson_has_attendance` — that
his
List Tests — List the tests of this school (titles, placement, status, question
count) — use `get_test` for one test's questions.
Optional filters: `course` / `lesson` public_ids, `status`
(`draft`, `published`, `archived`), `kind` (`current`,
`independent`, `control`, `thematic`, `diagnostic`), `search` on the
title.
`course_level=True` keeps only a course's OWN tests — the thematic
assessments, which carry a `course` and no `lesson`. `course` alone
Get Test — Read one test in full, including its questions **with the answer key**.
`test` is a test public_id. Use it to check what a test already asks
before adding questions, so you don't duplicate them.
Create Test — Create a test as a **DRAFT**, with no questions — add them with
`add_question`.
A draft test is invisible to pupils until it is published AND assigned
to a class (`publish_test` / `assign_test` — only after a human
reviewed it in Osvitly, ADR-034). Attach it to a `lesson` or a `course`
public_id when it belongs to one.
`kind` labels the work in the journal vocabulary — one of `current`
(поточна, the default), `independent` (самостійна), `
Update Test — Update a test's settings. Only the arguments you pass are changed,
and `status` is never one of them — that is `publish_test` /
`unpublish_test`. Questions are edited with their own tools (`add_question`,
`update_question`, `remove_question`, `reorder_questions`), not here.
Fields and vocabulary are the same as `create_test`'s (`kind` ∈
`current`, `independent`, `control`, `thematic`, `diagnostic`).
Recorded grades are safe: each attempt snapshots
Add Question — Append one question to a test. `test` is a test public_id, `points` is
what the question is worth (> 0), and `type` decides the shape of `data`:
- `single_choice` — `data = {"choices": [{"text": "…", "correct": true},
{"text": "…", "correct": false}, …]}`. **Exactly one** choice must be
correct. Ids are generated server-side; pass your own short `"id"`
only if you need stable ones.
- `multiple_choice` — same shape, but **at least one** corre
Showing the first 25 tools — full list and schemas: Directory API.
MCPBundles probed 55 tools on the live server. The tool list on this page reflects what was discovered at the last refresh — connect your client to see the full set available to your session.
What authentication does Osvitly require?
Osvitly may require signing in to the provider before tools can run. Connect through MCPBundles or your MCP client and complete any provider login when prompted.
Don't want this listed?
Request removal from the MCPBundles directory. We stop publishing this listing on mcpbundles.com.
MCPBundles is an independent platform built on the open Model Context Protocol standard. MCPBundles is not affiliated with, sponsored by, or endorsed by Anthropic PBC.