lmstelkom-mcp
Integrates with LMS Telkom University's Moodle instance, allowing AI to view courses, upcoming deadlines, course materials, and read or download LMS files using the user's own account.
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., "@lmstelkom-mcp Tampilkan deadline tugas saya 7 hari ke depan"
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.
lmstelkom-mcp
Bagus Ardin Prayoga
MCP server untuk LMS Telkom University (Moodle). AI bisa melihat mata kuliah, deadline, dan materi, serta mengambil file LMS memakai akunmu sendiri.
Ini proyek mahasiswa yang tidak resmi dan tidak berafiliasi dengan Telkom University atau CeLOE. Aturan akademik tetap tanggung jawab masing-masing pengguna.
Pilih mode
Kamu memakai | Mode | Perlu deploy? |
Claude Code, Codex, Claude Desktop, Cursor, VS Code, Antigravity, AI lokal seperti LM Studio | Lokal (stdio) | Tidak |
claude.ai, ChatGPT, dan AI chat web lain yang mendukung custom MCP | Online (HTTP) | Ya |
Related MCP server: FCPC-lms-mcp-server
Tool yang tersedia
Tool | Fungsi | Mode |
| Profil dan izin unduh serta upload file | Keduanya |
| Mata kuliah berjalan, selesai, atau akan datang | Keduanya |
| Aktivitas yang belum selesai dan jatuh tempo dalam sekian hari | Keduanya |
| Isi mata kuliah per bagian: aktivitas, file, dan link luar | Keduanya |
| Membaca teks file per halaman, untuk merangkum atau menjawab pertanyaan | Keduanya |
| Membuat tautan file untuk dibuka di browser | Keduanya |
| Mengunduh file LMS ke komputermu, maksimal 200 MB | Lokal |
Semua tool hanya membaca data LMS, jadi belum ada yang bisa mengumpulkan tugas atau mengirim pesan.
Batasan membaca file
read_file_text mendukung PDF, PPTX, DOCX, TXT, MD, CSV, dan HTML sampai 50 MB, tanpa menyimpan file di server.
File di Office 365 tidak bisa dibaca. Dosen bisa menaruh materi di Office 365 lalu menautkannya ke LMS, dan Moodle menolak mengirim file seperti ini lewat token. File ini ditandai
stored_outside_lms. Buka lewatget_file_linkdi browser, lalu unggah filenya ke AI kalau isinya perlu dibaca.Gambar tidak terbaca. PDF hasil scan hampir tidak menghasilkan teks, dan gambar serta diagram di slide tidak ikut.
Format lain belum didukung, termasuk XLSX, PPT, dan DOC versi lama.
Ambil token
LMS hanya bisa login lewat Office365, jadi token diambil lewat alur SSO aplikasi mobile Moodle.
Buka halaman token, lalu login kalau diminta.
Klik kanan tautan "Click here if the app does not open automatically", lalu pilih "Copy link address".
Tautan harus sama persis sampai ke tiap huruf, jadi jangan diketik ulang atau dibaca dari gambar. Kalau ditolak, tekan F12 di halaman token, lalu jalankan ini di tab Console untuk menyalinnya:
copy(document.getElementById('launchapp').href)Token ini setara akses penuh ke akun LMS, jadi jangan dibagikan atau dikirim ke chat AI, termasuk lewat screenshot.
Token punya masa berlaku yang diatur admin LMS, dengan default Moodle 12 minggu. Kalau sudah habis, tool akan membalas error accessexception atau invalidtoken, lalu ulangi langkah di atas.
Mode lokal
Butuh uv.
git clone <url-repo-ini>
cd mcp-lmstelkom
uv syncSalin .env.example menjadi .env, lalu tempel tautan token setelah LMS_TOKEN=. File .env tidak ikut di-commit. Setelah itu uji aksesnya:
uv run lms-mcp checkGanti /path/ke/mcp-lmstelkom dengan lokasi folder proyek ini.
Claude Code
claude mcp add lms-telkom -- uv run --directory /path/ke/mcp-lmstelkom lms-mcp serveCodex
codex mcp add lms-telkom -- uv run --directory /path/ke/mcp-lmstelkom lms-mcp serveClaude Desktop, Cursor, Antigravity, LM Studio, dan client lain yang memakai format mcpServers
{
"mcpServers": {
"lms-telkom": {
"command": "uv",
"args": ["run", "--directory", "/path/ke/mcp-lmstelkom", "lms-mcp", "serve"]
}
}
}VS Code memakai format yang mirip di mcp.json, tapi kuncinya servers, bukan mcpServers.
Kalau uv tidak ditemukan oleh aplikasinya, isi command dengan lokasi lengkap uv.
Mode online
Deploy
Repo ini berisi Dockerfile, jadi bisa dijalankan di hosting apa pun yang mendukung container. railway.json sudah disiapkan untuk Railway.
Isi variabel ini di pengaturan hosting:
Variabel | Keterangan |
| Alamat publik server, contoh |
| Kunci enkripsi acak, minimal 32 karakter |
| Opsional, host klien tambahan yang diizinkan, dipisah koma |
Buat LMS_SERVER_SECRET dengan perintah ini, dan jangan pernah mengubahnya tanpa alasan, karena semua pengguna akan perlu login ulang:
python -c "import secrets; print(secrets.token_urlsafe(48))"Jangan isi LMS_TOKEN di hosting, karena mode online tidak memakainya.
Sambungkan ke AI chat
Alamat connector-nya adalah LMS_PUBLIC_URL ditambah /mcp.
claude.ai: Settings, Connectors, lalu Add custom connector.
ChatGPT: aktifkan Developer Mode, lalu tambahkan connector di pengaturan Apps & Connectors. Ketersediaannya tergantung paket.
AI chat lain: tambahkan host callback-nya ke
LMS_EXTRA_REDIRECT_HOSTS. Hanya claude.ai dan ChatGPT yang diizinkan secara default.
Saat menyambungkan, akan muncul halaman login server ini. Tempel tautan token di sana.
Cara kerja login
Server tidak punya database. Token LMS dienkripsi dan disimpan di dalam access token yang dipegang aplikasi AI, dan hanya server yang bisa membukanya. Karena itu, tiap orang otomatis memakai akunnya sendiri.
Tetap saja, pemilik server secara teknis bisa membaca token yang lewat. Tempel token hanya di server milik orang yang kamu percaya, atau pakai mode lokal. Untuk memutus akses sepenuhnya, reset token di halaman Security keys LMS.
Keamanan
Isi LMS bisa ditulis siapa saja di kelasmu, termasuk teks yang mencoba memberi perintah ke AI. Periksa dulu aksi AI sebelum menyetujuinya.
Data LMS yang dibaca AI ikut terkirim ke penyedia model AI, kecuali kalau memakai model lokal.
Token hanya dikirim ke LMS, dan URL unduhan ke server lain ditolak.
Semua aksi tercatat di log LMS atas nama akunmu.
Konfigurasi mode lokal
Variabel | Keterangan |
| Tautan |
| Opsional, default folder |
| Opsional, default |
Variabel environment mengalahkan nilai di .env.
Tes
uv run pytestAvailable Tools
7 toolsdownload_fileA
Mengunduh file LMS ke folder unduhan di komputer pengguna, maksimal 200 MB.
file_url harus berasal dari get_course_materials. Link luar seperti Google Drive atau YouTube tidak bisa diunduh dengan tool ini. Hasilnya berisi lokasi file.
Inputs: file_url (required).
get_course_materialsARead-onlyIdempotent
Menampilkan isi mata kuliah per bagian: aktivitas, file, dan link luar.
Pakai id dari list_courses. Baca isi file dengan file_url lewat read_file_text. File dengan stored_outside_lms ada di luar LMS, jadi tidak bisa dibaca lewat tool: beri pengguna tautan dari get_file_link. Deskripsi dipotong sampai 500 karakter, dan field yang kosong tidak ditampilkan.
Inputs: course_id (required).
get_file_linkARead-onlyIdempotent
Membuat tautan file LMS untuk dibuka pengguna di browser.
file_url harus berasal dari get_course_materials. Pengguna perlu sudah login ke LMS di browsernya. Tool ini tidak membaca isi file.
Inputs: file_url (required).
get_profileBRead-onlyIdempotent
Menampilkan profil pengguna LMS dan izin unduh serta upload file.
Inputs: no named parameters.
get_upcoming_deadlinesARead-onlyIdempotent
Menampilkan aktivitas yang belum selesai dan jatuh tempo dalam sekian hari ke depan.
Tugas yang sudah dikumpulkan biasanya tidak ikut tampil. Tenggat yang sudah lewat tidak ditampilkan.
Inputs: days.
list_coursesBRead-onlyIdempotent
Menampilkan mata kuliah pengguna beserta id-nya.
status: inprogress (berjalan), past (selesai), future (akan datang), atau all.
Inputs: status.
read_file_textARead-onlyIdempotent
Membaca teks file LMS per halaman, untuk merangkum atau menjawab pertanyaan materi.
file_url harus berasal dari get_course_materials. Mendukung PDF, PPTX, DOCX, TXT, MD, CSV, dan HTML sampai 50 MB. File dengan stored_outside_lms tidak bisa dibaca. Gambar tidak terbaca, dan PDF hasil scan hampir tidak menghasilkan teks. Kalau next_start_page terisi dan masih perlu, panggil lagi dari halaman itu. page_count maksimal 50.
Inputs: file_url (required), page_count, start_page.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Each tool targets a distinct action on a distinct resource, and the three file-facing tools (read_file_text, get_file_link, download_file) are explicitly differentiated in their descriptions by what they do with the file. The only mild overlap is that all three file tools take the same file_url from get_course_materials, but the boundary between reading, linking, and downloading is clear.
All seven names follow a consistent snake_case verb_noun pattern (get_profile, list_courses, get_course_materials, read_file_text, download_file). Verb choice is semantically meaningful and predictable: get_/list_ for metadata, read_ for content, download_ for local copy.
Seven tools is a tight, well-scoped set for an LMS course/materials assistant, with no redundant or filler operations. Each tool maps to a step in a plausible workflow (profile -> courses -> materials -> read/link/download), plus a deadline view.
The read path is complete end-to-end (courses, materials, file reading, linking, downloading, deadlines), but the surface is purely read-only with no grade listing, assignment submission, or announcement/forum access, which are core LMS workflows an agent would likely be asked about. These gaps will force workarounds or dead ends for common student requests.
Related MCP Connectors
PLATO (Pusan National University LMS) MCP server via Moodle Web Service API + ubboard scraping
Run the Geduk LMS from an AI assistant: courses, sessions, enrolments, users and catalogue.
Persistent memory, hybrid search and a goal graph for AI agents, over stdio or remote HTTP.
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceA Model Context Protocol (MCP) server that connects AI coding agents to your Moodle LMS. Fetch assignments, grades, deadlines, and sync everything to Obsidian automatically.-
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to query and manage Moodle LMS data, including assignment deadlines, unread messages, unfinished quizzes, and enrolled courses, using natural language via OpenAI or local LLMs.-
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to sign into a real Moodle LMS and handle the student workflow end to end: browsing courses, schedules, forums and grades, converting assignments and attachments into markdown, and uploading and submitting work as drafts or finalized submissions. Ships as a single static binary with write actions confirmed by the user and quiz-taking deliberately excluded.27MIT
- AlicenseBqualityBmaintenanceConnects MCP-compatible AI clients to a university Moodle campus locally so users can query courses, assignments, materials, grades, forums, and calendar events, including reading attachments and PDFs. It is a read-only beta that does not modify the campus or store passwords.404MIT