Za developere
MCP za AI agente
CodeSensei ima MCP server preko kojeg AI agent (Claude, ChatGPT, Cursor, Claude Code…) u ime učitelja ili autora stvara tečajeve, lekcije, zadatke s testovima, riješene primjere i sadržaj učionica. Sve što agent napravi sprema se kao skica koju pregledaš prije objave.
Spajanje
| Adresa | https://www.codesensei.eu/mcp |
|---|---|
| Transport | Streamable HTTP (JSON-RPC 2.0 preko POST) |
| Prijava | OAuth 2.1 (authorization code + PKCE S256, dinamička registracija klijenta ili Client ID Metadata Document) ili osobni token u zaglavlju Authorization: Bearer … |
| Tko smije | odobreni učitelji, verificirani autori i administratori |
| Ograničenje | 120 zahtjeva u minuti po korisniku |
Claude.ai, ChatGPT i ostale aplikacije
Dodaj custom connector s adresom https://www.codesensei.eu/mcp, autentifikacija Sign in now (OAuth). Otvorit će se CodeSensei – prijavi se i klikni Dopusti. Povezane aplikacije vidiš i opozivaš na stranici AI agenti.
Claude Code i skripte (token)
Na stranici AI agenti stvori token pa:
claude mcp add --transport http codesensei https://www.codesensei.eu/mcp \
--header "Authorization: Bearer TVOJ_TOKEN"
OAuth metapodaci: https://www.codesensei.eu/.well-known/oauth-protected-resource/mcp i https://www.codesensei.eu/.well-known/oauth-authorization-server.
Struktura podataka
Svi ID-jevi su javni, nepredvidivi nizovi (npr. k3j9xq2mw7ab) – nikad brojevi iz baze.
Jezik (Language) id, name
└─ Tečaj (Course) id, title, description, difficulty 1–5, status, visibility
└─ Lekcija (Lesson) id, title, description (teorija), video_link, quiz_url, order, status
└─ Zadatak (Task) id, title, description, input, output, difficulty 1–5, points 1–100,
example (riješeni primjer), status (active | awaiting_approval)
├─ Test primjeri input (stdin) → expected_output (stdout)
└─ Rješenje solution (vidi ga samo autor)
Učionica (Classroom) id, name, timezone
├─ Aktivnost (Assignment) id, title, topic, instructions, editor, mode, max_points,
│ available_from, due_at, max_attempts, hints[], reference_solution,
│ ai_help_level, ai_review_enabled, teacher_review_required, status
├─ Materijal (Material) id, title, topic, description, resource_url, status
└─ Objava (Announcement) id, title, body, povezane aktivnosti i materijali, status
Statusi
- Tečaj / lekcija:
draft→published(objavljuje administrator). Javno su vidljivi samo objavljeni tečajevi s vidljivošćupublic. - Zadatak:
awaiting_approvaldok ga administrator ne odobri, zatimactive. Svaka izmjena ga vraća na čekanje. - Sadržaj učionice:
draft/hiddendok ga učitelj ne objavi (ili agent spublish=truekad to izričito tražiš).
Editori aktivnosti
text– Slobodan odgovor / datotekepython– Python (editor + pokretanje)cpp– C++ (editor + pokretanje)javascript– JavaScript (editor + pokretanje)makecode– MakeCode (rad u Labsu, predaja .hex ili poveznice)
Pravila pristupa
Agent nikad ne vidi više od korisnika koji ga je spojio:
- Tečajevi: objavljeni javni tečajevi, tvoji vlastiti (i skice) te objavljeni tečajevi koje si otključao kodom. Tuđi privatni tečajevi, tečajevi s kodom koje nisi otključao i tuđe skice nisu dostupni.
- Lekcije: samo objavljene (neobjavljene vidi samo vlasnik tečaja).
- Zadaci: aktivni javni zadaci i tvoji vlastiti. Tuđi privatni i neodobreni zadaci nisu dostupni; test primjere i rješenje vidiš samo za svoje zadatke.
- Pisanje: lekcije samo u tvoje tečajeve, zadaci u tvoje lekcije ili u objavljene javne lekcije, izmjene samo tvojih zadataka.
- Učionice: samo one u kojima si aktivan učitelj; arhivirane samo za čitanje. Agent ne vidi imena učenika, predaje ni ocjene.
- Tokeni agenta rade samo na
/mcpi ne daju pristup ostatku API-ja.
Alati
Tečajevi, lekcije i zadaci
list_languages
čitanje
Popis programskih jezika na CodeSensei (potreban za create_course).
list_courses
čitanje
Popis tečajeva: javni tečajevi i tvoji vlastiti (i skice). "mine" označava tečajeve koje smiješ uređivati.
| Parametar | Tip | Opis |
|---|---|---|
search |
string | Dio naslova tečaja. |
only_mine |
boolean | Samo moji tečajevi. |
get_course
čitanje
Detalji tečaja s popisom lekcija redom.
| Parametar | Tip | Opis |
|---|---|---|
course_id* |
string | ID tečaja (iz list_courses). |
get_lesson
čitanje
Lekcija s tekstom (teorijom) i zadacima. Kod tvojih zadataka vidiš i test primjere i rješenje.
| Parametar | Tip | Opis |
|---|---|---|
lesson_id* |
string | ID lekcije (iz get_course). |
create_course
pisanje
Novi tečaj kao skica (draft). Objavljuje ga administrator nakon pregleda.
| Parametar | Tip | Opis |
|---|---|---|
language_id* |
string | ID jezika iz list_languages. |
title* |
string | Naslov tečaja. |
description |
string | Kratki opis tečaja. |
difficulty |
integer | Težina 1–5. |
create_lesson
pisanje
Nova lekcija (skica) na kraju tvog tečaja. "description" je tekst lekcije – teorija i objašnjenja.
| Parametar | Tip | Opis |
|---|---|---|
course_id* |
string | ID tvog tečaja. |
title* |
string | Naslov lekcije (do 100 znakova). |
description* |
string | Tekst lekcije u Markdownu: naslovi (##), objašnjenja, liste, tablice, blokovi koda (```python) i ```mermaid dijagrami. |
video_link |
string | Poveznica na video (neobavezno). |
quiz_url |
string | Poveznica na kviz (neobavezno). |
update_lesson
pisanje
Izmjena lekcije u tvom tečaju. Šalji samo polja koja mijenjaš.
| Parametar | Tip | Opis |
|---|---|---|
lesson_id* |
string | ID lekcije. |
title |
string | |
description |
string | Novi tekst lekcije u Markdownu (zamjenjuje stari). |
video_link |
string|null | |
quiz_url |
string|null |
create_task
pisanje
Novi programerski zadatak u lekciji, s test primjerima (ulaz → očekivani izlaz) i neobaveznim točnim rješenjem. Za riješeni primjer postavi example=true i pošalji solution. Zadatak čeka odobrenje administratora prije nego ga učenici vide.
| Parametar | Tip | Opis |
|---|---|---|
lesson_id* |
string | ID lekcije. |
title* |
string | Naslov (do 100 znakova). |
description* |
string | Tekst zadatka u Markdownu (liste, `kod`, blokovi koda, tablice, ```mermaid). |
input |
string | Opis ulaza. |
output |
string | Opis izlaza. |
difficulty* |
integer | Težina 1–5. |
points* |
integer | Bodovi 1–100. |
example |
boolean | true = riješeni primjer, ne zadatak za bodove. |
solution |
string | Točno rješenje (vidi ga samo autor i administrator). |
test_cases* |
array<object> | Barem jedan test primjer.
Svaki element: input, expected_output |
update_task
pisanje
Izmjena tvog zadatka. Šalji samo polja koja mijenjaš; test_cases zamjenjuje sve postojeće. Nakon izmjene zadatak ponovno čeka odobrenje administratora.
| Parametar | Tip | Opis |
|---|---|---|
task_id* |
string | ID zadatka. |
title |
string | Naslov (do 100 znakova). |
description |
string | Tekst zadatka u Markdownu (liste, `kod`, blokovi koda, tablice, ```mermaid). |
input |
string | Opis ulaza. |
output |
string | Opis izlaza. |
difficulty |
integer | Težina 1–5. |
points |
integer | Bodovi 1–100. |
example |
boolean | true = riješeni primjer, ne zadatak za bodove. |
solution |
string | Točno rješenje (vidi ga samo autor i administrator). |
test_cases |
array<object> | Ako ga pošalješ, zamjenjuje sve postojeće test primjere.
Svaki element: input, expected_output |
Učionice
list_classrooms
čitanje
Učionice u kojima si učitelj.
get_classroom
čitanje
Sadržaj učionice: teme, zadaci (aktivnosti), materijali i zadnje obavijesti. Vremena su u vremenskoj zoni učionice.
| Parametar | Tip | Opis |
|---|---|---|
classroom_id* |
string | ID učionice (iz list_classrooms). |
create_classroom_assignment
pisanje
Nova aktivnost (zadatak) u učionici za sve učenike. Tekst zadatka ide u "instructions"; editor određuje gdje učenici rade (python, cpp, javascript, makecode ili text za slobodan odgovor). Dodaj savjete (hints) i točno rješenje (reference_solution) – AI pomoć i AI procjena ih koriste. Po defaultu se sprema kao skica koju učitelj pregleda i objavi; publish=true je odmah objavljuje učenicima.
| Parametar | Tip | Opis |
|---|---|---|
classroom_id* |
string | ID učionice. |
title* |
string | Naslov aktivnosti. |
topic |
string | Tema u „Zadaci” (npr. "Petlje"); postojeće teme vidi u get_classroom. |
instructions |
string | Tekst zadatka za učenike u Markdownu (liste, blokovi koda, tablice). |
editor |
string | Gdje učenik radi. Zadano: text.
Vrijednosti: text, python, cpp, javascript, makecode |
mode |
string | practice = vježba, assessment = provjera, manual_quiz = kviz koji učitelj ručno boduje. Zadano: practice.
Vrijednosti: practice, assessment, manual_quiz |
max_points |
integer | Najviše bodova. Zadano: 10. |
available_from |
string | Dostupno od, "YYYY-MM-DD HH:MM" u zoni učionice. |
due_at |
string | Rok, "YYYY-MM-DD HH:MM" u zoni učionice. |
max_attempts |
integer | Najviše predaja (prazno = neograničeno). |
hints |
array<string> | Savjeti redom, od blažeg prema konkretnijem (do 10). |
reference_solution |
string | Točno rješenje – vidi ga samo učitelj i AI procjena. |
ai_help_level |
string | AI pomoć učenicima. Zadano: inherit (postavka učionice).
Vrijednosti: inherit, off, guidance, hints, explain, full |
ai_review_enabled |
boolean | AI procjena predaja. |
teacher_review_required |
boolean | Bodovi tek nakon što učitelj pregleda. |
task_id |
string | Neobavezno: postojeći odobreni CodeSensei zadatak (ID iz get_lesson). |
publish |
boolean | true = odmah objavi i obavijesti učenike. Zadano: false (skica). |
update_classroom_assignment
pisanje
Izmjena aktivnosti u učionici. Šalji samo polja koja mijenjaš; hints zamjenjuje sve savjete.
| Parametar | Tip | Opis |
|---|---|---|
classroom_id* |
string | ID učionice. |
assignment_id* |
string | ID aktivnosti (iz get_classroom). |
title |
string | Naslov aktivnosti. |
topic |
string | Tema u „Zadaci” (npr. "Petlje"); postojeće teme vidi u get_classroom. |
instructions |
string | Tekst zadatka za učenike u Markdownu (liste, blokovi koda, tablice). |
editor |
string | Gdje učenik radi. Zadano: text.
Vrijednosti: text, python, cpp, javascript, makecode |
mode |
string | practice = vježba, assessment = provjera, manual_quiz = kviz koji učitelj ručno boduje. Zadano: practice.
Vrijednosti: practice, assessment, manual_quiz |
max_points |
integer | Najviše bodova. Zadano: 10. |
available_from |
string | Dostupno od, "YYYY-MM-DD HH:MM" u zoni učionice. |
due_at |
string | Rok, "YYYY-MM-DD HH:MM" u zoni učionice. |
max_attempts |
integer | Najviše predaja (prazno = neograničeno). |
hints |
array<string> | Savjeti redom, od blažeg prema konkretnijem (do 10). |
reference_solution |
string | Točno rješenje – vidi ga samo učitelj i AI procjena. |
ai_help_level |
string | AI pomoć učenicima. Zadano: inherit (postavka učionice).
Vrijednosti: inherit, off, guidance, hints, explain, full |
ai_review_enabled |
boolean | AI procjena predaja. |
teacher_review_required |
boolean | Bodovi tek nakon što učitelj pregleda. |
task_id |
string | Neobavezno: postojeći odobreni CodeSensei zadatak (ID iz get_lesson). |
publish |
boolean | true = odmah objavi i obavijesti učenike. Zadano: false (skica). |
create_classroom_material
pisanje
Novi materijal u učionici (tekst i/ili poveznica). Po defaultu je skriven („Pripremljeno”) dok ga učitelj ne prikaže; publish=true ga odmah prikazuje.
| Parametar | Tip | Opis |
|---|---|---|
classroom_id* |
string | ID učionice. |
title* |
string | Naslov materijala. |
topic |
string | Tema. |
description |
string | Opis ili kratki tekst (do 2000 znakova). |
resource_url |
string | Poveznica (video, članak, dokument). |
publish |
boolean | true = odmah vidljivo učenicima. Zadano: false. |
create_classroom_announcement
pisanje
Nova objava na naslovnici učionice. Može biti grupna objava s naslovom i povezanim aktivnostima/materijalima (npr. radionica). Po defaultu je skica; publish=true je objavljuje i šalje obavijest članovima.
| Parametar | Tip | Opis |
|---|---|---|
classroom_id* |
string | ID učionice. |
body* |
string | Tekst objave. |
title |
string | Naslov (za grupnu objavu). |
assignment_ids |
array<string> | Aktivnosti povezane u objavi (ID-jevi iz get_classroom). |
material_ids |
array<string> | Materijali povezani u objavi. |
is_pinned |
boolean | Prikvači na vrh. |
publish |
boolean | true = objavi i obavijesti članove. Zadano: false (skica). |
* obavezan parametar
Primjeri
Upute agentu
- „Na CodeSenseiju napravi tečaj Python za početnike s 5 lekcija; u svakoj objasni gradivo, dodaj 1 riješeni primjer i 3 zadatka s test primjerima.”
- „U učionici 2.b pripremi radionicu o petljama: materijal s objašnjenjem, 3 Python zadatka sa savjetima i točnim rješenjem i grupnu objavu koja ih povezuje. Ništa ne objavljuj.”
Poziv alata (JSON-RPC)
POST https://www.codesensei.eu/mcp
Authorization: Bearer TVOJ_TOKEN
Content-Type: application/json
{"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {"name": "create_task", "arguments": {
"lesson_id": "k3j9xq2mw7ab",
"title": "Zbroj dva broja",
"description": "Učitaj dva cijela broja i ispiši njihov zbroj.",
"difficulty": 1, "points": 10,
"solution": "a = int(input())\nb = int(input())\nprint(a + b)",
"test_cases": [
{"input": "2\n3", "expected_output": "5"},
{"input": "-4\n4", "expected_output": "0"}
]}}}