Back

Membangun MCP Server Docmost dengan Rust:

Awal Mula

Biasanya ada satu proyek yang bikin kita mikir, "oh, gini ternyata rasanya kalau tool yang kita pakai dibangun sendiri." Buat saya, itu proyek ini.

Semua catatan saya — progres belajar, jadwal, tugas, ide — numpang di Docmost, wiki yang saya host sendiri. Masalahnya satu: AI saya gak bisa "baca" isi wiki itu. Setiap mau nanya sesuatu, saya harus buka halamannya, copy, paste ke chat, ulang terus. Capek.

Jadi saya putuskan bikin widiadocmost-mcp, sebuah MCP server dalam bahasa Rust yang menghubungkan Docmost dengan AI.


Kenapa Rust?

Sebenarnya simpel:

  • Aman — server ini megang kredensial dan data pribadi, jadi keamanan memori itu wajib

  • Cepat — ini server HTTP yang melayani banyak permintaan sekaligus

  • Compile-nya ketat — error kebanyakan ketangkap dari awal, gak nunggu jalan baru error

  • Ekosistem MCP-nya lagi naikrust-mcp-sdk makin matang

Plus, jujur saja, saya memang lagi pengen paham Rust lebih dalam. Ini proyek yang pas buat belajar.


Gini Cara Kerjanya

+----------------+       MCP transport        +-------------------+      REST API      +----------------+
|  AI Agent      | <------------------------> |  widiadocmost-mcp | <----------------> |    Docmost     |
|  (opencode)    |   stdio / Streamable HTTP  |     (Rust)        |   JSON-RPC calls  |    Instance    |
+----------------+                            +-------------------+                   +----------------+

Keputusan penting yang saya ambil

1. Dua mode jalan

  • stdio — buat dipakai lokal, kredensial dari environment variable

  • HTTP — Streamable HTTP di /mcp, SSE di /sse, health check di /health, biar bisa diakses dari jauh

2. Gak nyimpen kredensial sama sekali

Server ini gak pernah nyimpen email atau password. Setiap request, klien kirim kredensial lewat header X-Docmost-Email dan X-Docmost-Password. JWT-nya di-cache per-email di lokal (permission 0600) dan otomatis di-refresh pas dapat 401.

3. Slug atau UUID, dua-duanya bisa

space_id nerima slug ATAU UUID — kalau pake slug, di-resolve otomatis jadi UUID. Kecil, tapi nyaman banget pas dipakai.


15 Tools yang Dibuka

REST API Docmost saya bungkus jadi 15 tools MCP:

  • Baca: get_current_user, list_spaces, get_space, list_space_pages, get_page, search

  • Tulis: create_page, update_page, delete_page, move_page, duplicate_page, page_history

  • Komentar: list_comments, create_comment, update_comment

Yang paling saya suka: Markdown round-tripping. Halaman masuk dan keluar sebagai Markdown. Jadi tetap enak dibaca manusia, dan AI juga gampang ngolahnya.


Bug-bug yang Bikin Greget

Belajar dari pengalaman, bukan dari buku:

  1. Jebakan cookie — Login Docmost itu JWT-nya dikasih lewat header Set-Cookie: authToken=, bukan di body response. Ketemu ini butuh waktu, tapi setelah itu pola auth di mana-mana jadi lebih jelas.

  2. Masalah versiupdate_page buat ganti seluruh konten butuh Docmost v0.71+. Jadi kalau targetnya terus update, kompatibilitas itu wajib dicek.

  3. Keamanan pas naik ke HTTP — pas dari lokal (stdio) pindah ke server HTTP, alur kredensial harus saya rancang ulang: Bearer token (MCP_TOKEN) + header per-request + cache JWT per-email.


Dampaknya ke Keseharian Saya

Proyek ini gak cuma soal ngoding. Ini soal alur kerja:

Buat belajar:

  • Tinggal nanya AI soal progres belajar, dia baca langsung dari wiki

  • Catatan setelah belajar langsung ke-rapiin otomatis

  • Jadwal dan catatan kuliah tetap satu sumber kebenaran

Buat kerja:

  • AI baca dokumentasi proyek tanpa saya copy-paste

  • Changelog dan keputusan ditulis langsung dari percakapan

  • Semua jalan di satu tempat, gak pindah-pindah aplikasi


Soal Etika

Membuka akses dokumen ke AI itu tanggung jawabnya nyata. Beberapa prinsip yang saya pegang:

Ngomongin Fitur AI Docmost

Jujur: Docmost itu sebenarnya udah punya fitur AI bawaan. Bagus, rapi, terintegrasi — pilihan terbaik kalau kamu serius pake Docmost buat tim atau produksi.

Tapi fitur itu berbayar. Karena kemampuan terbatas, saya coba bangun versi gratis-nya sendiri lewat MCP server ini. Tentu aja gak sebagus yang resmi:

  • Gak ada model AI tertanam, saya numpang ke klien AI eksternal (kayak opencode)

  • Gak ada tuning khusus buat konteks Docmost

  • Gak ada fitur premium

Saran saya: kalau mampu, beli aja. Mendukung Docmost itu bagus, dan fitur AI resminya jauh lebih matang. Proyek ini bukan pengganti, tapi hasil belajar — bukti bahwa pengetahuan bisa jadi solusi gratisan yang "cukup jalan."

Keamanan

  • Gak pernah nyimpen kredensial di server

  • DOCMOST_EMAIL/DOCMOST_PASSWORD jangan pernah di-set di server publik

  • Cache JWT lokal cuma permission 0600

Privasi

  • Data tetap di instance Docmost milik sendiri

  • AI cuma akses yang saya izinkan

  • Saya tetap pemilik setiap byte-nya

Integritas

  • AI itu alat bantu, bukan pengganti proses belajar dan kerja

  • Semua hasil tetap saya cek sendiri

  • Transparan soal pemakaian AI


Yang Saya Dapat dari Proyek Ini

  1. Bangun tool yang kamu sendiri butuhkan — software terbaik lahir dari masalah nyata

  2. Rust itu butuh sabar, tapi hasilnya solid — compiler-nya galak, output-nya tangguh

  3. Protokol itu menyeragamkan inovasi — MCP ke tool-AI, kayak REST ke API dulu

  4. Keamanan itu keputusan desain — bukan tempelan di akhir

  5. Pengetahuan itu modal paling gede — daripada beli, pakai yang udah dipelajari justru lebih berharga


Penutup

widiadocmost-mcp berawal dari masalah receh: pengen wiki bisa diajak ngobrol sama AI. Berakhir jadi perjalanan ngoding beneran — Rust, async, protokol MCP, sampai keamanan-by-design.

Sekarang wiki saya bukan arsip pasif lagi. Ini ruang kerja hidup tempat belajar, ngoding, dan nulis dokumentasi jalan bareng.