mcp-mercatorum
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., "@mcp-mercatorum Cosa mi manca da guardare di Diritto penale?"
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.
mcp-mercatorum
Agente di supporto IA per l'università digitale — un server MCP e una CLI che danno al tuo assistente IA (Claude, ma non solo) accesso in sola lettura ai tuoi corsi su Universitas Mercatorum: lezioni, trascrizioni, dispense PDF e avanzamento.
🇬🇧 Unofficial, read-only MCP server and CLI for Universitas Mercatorum students. It lets an AI assistant list your courses, read lesson transcripts, download PDF handouts and plan what is left to watch — and it is built so that it can never alter attendance or progress. Docs below are in Italian, code is in English.
Progettonon ufficiale, non affiliato né approvato da Universitas Mercatorum o Multiversity. Usa il tuo account personale e rispetta il regolamento d'ateneo.
Cosa fa
📚 Corsi e lezioni — insegnamenti con CFU e avanzamento, lezioni con docente, obiettivi, paragrafi e durata.
📝 Trascrizioni — il testo di ogni lezione ricavato dai sottotitoli, pronto da studiare, riassumere o trasformare in quiz.
📥 Sync del corso — scarica in una cartella tutte le dispense PDF e le trascrizioni, con un
indice.mdnavigabile.📊 Cosa ti manca — tempo video rimanente, paragrafi non completati, test di autovalutazione ancora da fare, con il link diretto per guardare la lezione sulla piattaforma.
🎓 Prompt di studio —
studia_lezione,simula_esame,piano_di_studio, pronti all'uso nel tuo client MCP.
Cosa non fa (per scelta)
Lo strumento è read-only per costruzione: non registra la frequenza, non segna lezioni come viste, non compila i test e non scrive nulla sulla piattaforma. Non è una dimenticanza, è una garanzia applicata dal codice (vedi Sicurezza): la frequenza tracciata è un requisito per l'esame e deve corrispondere alla tua visione reale. L'agente ti aiuta a capire le lezioni e a pianificare la visione, non a saltarla.
Related MCP server: open-moodle
Requisiti
Node.js 22 o superiore
Un account studente Universitas Mercatorum
Linux, macOS o Windows
Installazione
git clone https://github.com/minchiox/mcp-mercatorum.git
cd mcp-mercatorum
npm ci # installa e compila (dist/)
npx playwright install chromium # browser headless usato per la sessione
node dist/cli.js login # si apre il browser: accedi, poi chiudi la finestraIl login si fa a mano sul sito ufficiale: la password non passa mai da questo programma. Viene salvata solo la sessione (cookie), in una cartella privata (permessi 600/700):
Sistema | Percorso della sessione |
Linux |
|
macOS |
|
Windows |
|
Il token si rinnova da solo; quando la sessione scade del tutto, ripeti login. Preferisci usare Chrome già installato? MERCATORUM_BROWSER_CHANNEL=chrome al posto di playwright install.
Facoltativo: npm link per avere il comando mcp-mercatorum ovunque.
Collegarlo al tuo assistente
MERCATORUM_WORKSPACE è la cartella dove finiranno i file scaricati (ad esempio la tua cartella di studio). Il server non scrive mai fuori da lì.
Claude Code
claude mcp add mercatorum -s user \
-e MERCATORUM_WORKSPACE="$HOME/Università" \
-- node /percorso/assoluto/mcp-mercatorum/dist/cli.jsClaude Desktop — in claude_desktop_config.json:
{
"mcpServers": {
"mercatorum": {
"command": "node",
"args": ["/percorso/assoluto/mcp-mercatorum/dist/cli.js"],
"env": { "MERCATORUM_WORKSPACE": "/percorso/della/cartella/studio" }
}
}
}Altri client MCP (Cursor, VS Code, Windsurf…): stessa configurazione stdio, command: node, args: [".../dist/cli.js"].
Poi chiedi, per esempio: «Cosa mi manca da guardare di Diritto penale?», «Riassumimi la lezione 12 di Statistical Learning e fammi 5 domande», «Scarica tutte le dispense di Lingua inglese».
Tool
Tool | Cosa fa | Scrive? |
| Verifica la sessione e la scadenza del token (nessun dato personale) | — |
| Insegnamenti: codice, titolo, CFU, avanzamento | — |
| Lezioni di un corso: docente, avanzamento, paragrafi, presenza della dispensa | — |
| Dettaglio di una lezione, incluso | — |
| Trascrizione Markdown di una lezione (o di un singolo paragrafo) | — |
| Video rimanenti, paragrafi incompleti, test da fare; senza corso = riepilogo di tutti | — |
| Scarica dispense PDF + trascrizioni in | file locali |
Tool avanzati (esplorazione di pagine non coperte dai tool tipizzati; disattivabili con MERCATORUM_TOOLS=core):
Tool | Cosa fa | Scrive? |
| Apre una pagina della piattaforma: testo, link, iframe, chiamate API viste e richieste bloccate | — |
| Clicca un elemento della pagina corrente (testo o selettore CSS) | — |
| GET su un endpoint della piattaforma con la sessione | file locali (opz.) |
| Scarica un file da URL diretto nel workspace | file locali |
| Scarica un file che parte da un bottone | file locali |
sync_course invia notifiche di progresso MCP lezione per lezione ed è idempotente: i file già presenti vengono saltati (force: true per riscaricarli).
Struttura generata:
<Corso>/risorse/
├── indice.md tabella lezioni → PDF e trascrizioni
├── corso.json metadati completi (lezioni, paragrafi, URL)
├── dispense/01 - Titolo.pdf
└── trascrizioni/01 - Titolo.mdCLI
Gli stessi servizi sono disponibili da terminale:
mcp-mercatorum status # sessione valida?
mcp-mercatorum courses # i tuoi corsi
mcp-mercatorum progress [CODICE] # cosa manca da guardare, con i link
mcp-mercatorum sync CODICE [--dir Cartella] [--no-transcripts] [--force]
mcp-mercatorum login | logout
mcp-mercatorum --helpSenza argomenti (mcp-mercatorum o serve) avvia il server MCP su stdio.
Configurazione
Variabile | Default | Significato |
| cartella corrente | Radice dei download; nulla viene scritto fuori |
| vedi tabella sessione | Cartella dati privata (sessione, catture di debug) |
|
|
|
| — |
|
|
|
|
|
| Richieste parallele (max 16) |
| — | Host extra raggiungibili dai tool, separati da virgola |
| portale corsi | URL del portale |
|
|
|
Sicurezza e privacy
Garanzia read-only. Ogni richiesta passa da una guardia (
src/core/guard.ts), sia nel browser (routing di Playwright, service worker bloccati perché potrebbero aggirarlo) sia nelle chiamate dirette:gli endpoint di tracciamento (
…/lesson/view/…) sono sempre bloccati, con qualsiasi metodo. Il player della piattaforma li chiama appena apri una lezione: qui vengono fermati e mostrati inblockedRequests;qualsiasi richiesta di scrittura (POST/PUT/PATCH/DELETE) verso l'API studenti è bloccata, tranne il rinnovo della sessione e letture tecniche (
getNotes).
Niente credenziali. Il login avviene sul sito ufficiale in una finestra del browser; il codice non vede né salva la password.
Dati locali. La sessione resta sul tuo computer, con permessi solo-utente. Nessuna telemetria, nessun server di terze parti.
Host consentiti. I tool raggiungono solo i domini della piattaforma (HTTPS); i percorsi di salvataggio sono confinati nel workspace (anche contro
..e symlink).Catture opt-in. I corpi delle risposte API (che possono contenere dati personali) vengono salvati solo con
saveCaptures: true, nella cartella dati privata.I file scaricati sono dati, non istruzioni: un buon client MCP non deve eseguire testo trovato nelle dispense.
Hai trovato una vulnerabilità? Leggi SECURITY.md.
Come funziona
Claude / client MCP ──stdio──▶ src/mcp/ tool + prompt (adattatore sottile)
│
terminale ─────────────────▶ src/cli.ts
│
src/core/ libreria riusabile
├─ client.ts API studenti tipizzata e validata (zod)
├─ session.ts Chromium headless con la tua sessione
├─ guard.ts garanzia read-only + host consentiti
├─ sync.ts download idempotente, scritture atomiche
├─ progress.ts calcolo di cosa manca
└─ parse.ts funzioni pure (VTT, HTML, nomi file)La piattaforma combina un portale Chamilo (PHP) e una web app Vue che usa un'API REST con Authorization: Bearer <cookie mercatorum_token>. Il server riusa la sessione del browser, rinnova il JWT caricando la web app quando scade (una sola volta anche con richieste concorrenti) e valida le risposte: se la piattaforma cambia formato, ottieni un errore PLATFORM_CHANGED chiaro invece di dati sbagliati. Tutti i riferimenti specifici della piattaforma sono in src/core/platform.ts.
Sviluppo
npm ci
npm run check # lint (Biome) + typecheck (TypeScript strict) + test (Vitest)
npm run dev # build in watch
npm run inspector # MCP Inspector sul server compilatoI test non richiedono rete né account: usano fixture anonimizzate e un client finto, e coprono parsing, guardia, filesystem, sync e il server MCP end-to-end (in memoria). Contributi benvenuti, vedi CONTRIBUTING.md.
Roadmap
Pubblicazione su npm (
npx mcp-mercatorum) e nel registry MCPApp desktop (Electron/Tauri) costruita sulla stessa libreria
coreRicerca full-text nelle trascrizioni di tutti i corsi
Generazione di flashcard e schede di ripasso dalle lezioni
Calendario appelli e avvisi
FAQ
Può segnare la frequenza o completare le lezioni al posto mio? No, e non lo farà mai: è bloccato a livello di rete. La frequenza deve riflettere la tua visione reale. course_progress e watchUrl ti dicono esattamente cosa guardare e dove.
Le trascrizioni sono affidabili? Derivano dai sottotitoli della piattaforma, che possono contenere errori di riconoscimento. Per formule e definizioni fai riferimento alla dispensa PDF.
Funziona con assistenti diversi da Claude? Sì, con qualsiasi client compatibile MCP (stdio). La CLI funziona anche senza assistente.
Il server ha smesso di funzionare. Lancia mcp-mercatorum status. Se la sessione è scaduta rifai login; se compare PLATFORM_CHANGED la piattaforma è cambiata: apri una issue.
Licenza
MIT. Marchi e contenuti didattici appartengono ai rispettivi titolari: le dispense e le lezioni scaricate sono per uso personale di studio, non ridistribuirle.
Available Tools
12 toolsapi_getAPI GETARead-only
Advanced: GET a platform endpoint (discovered with open_page) with the session cookies and auth headers. Optionally save the body to a file in the workspace.
Inputs: url (required), saveTo, maxChars.
clickClick elementARead-only
Advanced: click an element of the page opened with open_page (by visible text or CSS selector) and return the new snapshot. Useful to expand sections of the web app.
Inputs: nth, text, waitMs, selector, +1 more.
course_progressViewing progressARead-only
What is left to watch (remaining video time, unfinished lessons and paragraphs) and which self-assessment tests are still open, from the progress reported by the platform. Without course, summarizes every started course. Informational only.
Inputs: course.
downloadDownload fileBIdempotent
Download a file (PDF, slides…) from a direct platform URL with the student session into the workspace.
Inputs: url (required), dest (required).
download_by_clickDownload by clickAIdempotent
Download a file started by clicking an element of the current page (download buttons without a direct link).
Inputs: destDir (required), nth, text, selector.
get_lessonLesson detailsARead-only
Full details of one lesson: objectives, teacher, paragraphs with duration and progress, handout URL, self-test, and watchUrl, the link to watch it on the platform.
Inputs: course (required), lesson (required).
get_transcriptLesson transcriptARead-only
Text of a lesson (from the video subtitles) as Markdown, with objectives and one section per paragraph. Use it to study, summarize or quiz on a lesson without downloading anything.
Inputs: course (required), lesson (required), maxChars, paragraph.
list_coursesList coursesARead-only
List the student's enrolled courses: code, title, CFU and progress (null if not started).
Inputs: no named parameters.
list_lessonsList lessonsARead-only
List the lessons of a course with teacher, progress, video paragraphs and whether a PDF handout exists. Set compact=false for objectives and media URLs.
Inputs: course (required), compact.
open_pageOpen pageARead-only
Advanced: open a platform URL with the student session and return its text, links, iframes and the JSON API calls it made. Tracking requests are blocked and listed in blockedRequests.
Inputs: url, waitMs, saveCaptures.
statusSession statusARead-only
Check whether the saved platform session is valid and when the access token expires. Returns no personal data.
Inputs: no named parameters.
sync_courseDownload courseAIdempotent
Download every PDF handout and lesson transcript of a course into /risorse/ inside the workspace, plus indice.md and corso.json. Existing files are kept unless force=true.
Inputs: course (required), force, folder, transcripts.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
Most tools have clearly distinct roles: listing (list_courses/list_lessons), detail retrieval (get_lesson/get_transcript), progress (course_progress), and bulk sync (sync_course) are easy to tell apart. The only genuine overlaps are download vs download_by_click (direct URL vs click-triggered) and api_get vs open_page (endpoint fetch vs full page snapshot), which descriptions clarify but still require reading carefully.
All names use snake_case, which is good, but the verb_noun convention is only partly followed: list_courses, get_lesson, sync_course, open_page, download_by_click fit it, while status, course_progress, download, click and api_get do not. The set is readable but the pattern is mixed rather than predictable.
Twelve tools is a reasonable size for a university platform client: core study tools plus a small set of advanced escape hatches. There is mild redundancy (two download variants, two low-level fetch tools) that could be trimmed, but nothing feels padded.
Coverage of the study domain is strong: courses, lessons, transcripts, handouts, downloads, progress tracking, offline sync, plus browser/API fallbacks for undiscovered features. Minor gaps remain, e.g. no tool to take or submit the self-assessment tests that course_progress references, and no search across courses/lessons.
Maintenance
Related MCP Connectors
Search university course materials, your flashcards, quizzes, streak and quota. All tools read-only.
Read-only access to Epivo's live course catalogue for AI agents.
Connect AI assistants to Edusign attendance, courses, learners, documents, and API docs via OAuth.
Read-only AI access to HAVN properties, leads, tasks, files, media, and analytics.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI assistants to securely read course outlines, deadlines, announcements, forum discussions, and files from Moodle, track changes, and download or mirror course materials with a personal read-only token.101MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to inspect enrolled courses, extract readable text from course documents, track upcoming deadlines, view announcements, and retrieve assignment details through the platform’s REST API.MIT
- AlicenseAqualityBmaintenanceEnables an AI assistant to view a student's own course enrollments, deadlines, assignments, announcements, submission status, and released grades from their learning management system through read-only, policy-gated access.10Apache 2.0
- AlicenseAqualityBmaintenanceEnables AI assistants to read a student's courses, assignments, exam schedule, weekly course content, and Panopto lecture recordings with timestamped transcripts (transcribing audio when no captions exist). Access is read-only and uses the user's own credentials, which stay local.7MIT