Skip to main content
Glama

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

get_profile

Profil dan izin unduh serta upload file

Keduanya

list_courses

Mata kuliah berjalan, selesai, atau akan datang

Keduanya

get_upcoming_deadlines

Aktivitas yang belum selesai dan jatuh tempo dalam sekian hari

Keduanya

get_course_materials

Isi mata kuliah per bagian: aktivitas, file, dan link luar

Keduanya

read_file_text

Membaca teks file per halaman, untuk merangkum atau menjawab pertanyaan

Keduanya

get_file_link

Membuat tautan file untuk dibuka di browser

Keduanya

download_file

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 lewat get_file_link di 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.

  1. Buka halaman token, lalu login kalau diminta.

  2. 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 sync

Salin .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 check

Ganti /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 serve

Codex

codex mcp add lms-telkom -- uv run --directory /path/ke/mcp-lmstelkom lms-mcp serve

Claude 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

LMS_PUBLIC_URL

Alamat publik server, contoh https://nama-server.up.railway.app

LMS_SERVER_SECRET

Kunci enkripsi acak, minimal 32 karakter

LMS_EXTRA_REDIRECT_HOSTS

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

LMS_TOKEN

Tautan moodlemobile://token=... atau token web service

LMS_DOWNLOAD_DIR

Opsional, default folder Downloads/lms-telkom

LMS_BASE_URL

Opsional, default https://lms.telkomuniversity.ac.id

Variabel environment mengalahkan nilai di .env.

Tes

uv run pytest

Available Tools

7 tools
download_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_materialsA
Read-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_profileB
Read-onlyIdempotent

Menampilkan profil pengguna LMS dan izin unduh serta upload file.

Inputs: no named parameters.

get_upcoming_deadlinesA
Read-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_coursesB
Read-onlyIdempotent

Menampilkan mata kuliah pengguna beserta id-nya.

status: inprogress (berjalan), past (selesai), future (akan datang), atau all.

Inputs: status.

read_file_textA
Read-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

    A3.8/5.0

    Scored across 7 tools

    Disambiguation4/5

    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.

    Naming Consistency5/5

    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.

    Tool Count5/5

    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.

    Completeness3/5

    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

    Related MCP Servers

    • F
      license
      Not graded
      quality
      B
      maintenance
      A Model Context Protocol (MCP) server that connects AI coding agents to your Moodle LMS. Fetch assignments, grades, deadlines, and sync everything to Obsidian automatically.
      -
    • A
      license
      Not graded
      quality
      A
      maintenance
      Enables 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.
      27
      MIT