sister-mcp
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., "@sister-mcpDry-run submit the publikasi activity from examples/publikasi.json"
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.
SISTER MCP — otomasi pengisian BKD ke SISTER
Perangkat lunak untuk mengisi BKD ke SISTER secara otomatis. Pemakai hanya perlu menyediakan username, password, dan data — login SSO, pengambilan token CSRF, penerjemahan label menjadi kode SISTER, dan unggah berkas ditangani di sini.
Empat bentuk pemakaian di atas inti yang sama — proyek lain bisa membangun aplikasinya sendiri di atas mana pun dari keempatnya:
Bentuk | Dipakai lewat | Referensi | Untuk siapa |
Pustaka |
| dipakai kode Python lain | |
REST API |
| dipanggil aplikasi lain | |
MCP |
| dipakai langsung oleh asisten AI | |
CLI |
| dipakai sendiri dari terminal |
Menu yang sudah didukung: pengabdian, publikasi, kepanitiaan, anggota_profesi. Contoh datanya ada di examples/.
Selain mengisi data tridharma, aplikasi ini juga mendaftarkan bukti penugasan pada Layanan BKD → Rekap Kegiatan → Rincian, untuk kegiatan yang ditarik SISTER sendiri dari Feeder (mata kuliah yang diampu).
Mulai cepat
Empat langkah, dari nol sampai satu kegiatan masuk ke SISTER.
1. Ambil dan siapkan
Butuh Python 3.10 atau lebih baru.
git clone https://github.com/alfa-yohannis/sister-mcp.git
cd sister-mcp
./sister uji # menyiapkan virtualenv, lalu menjalankan unit testJalankan pertama memakan waktu sebentar karena ./sister membuat .venv dan
memasang dependensinya sendiri. Kalau selesai dengan 69 passed, semuanya beres —
unit test tidak menyentuh jaringan, jadi tahap ini belum butuh akun SISTER.
2. Isi kredensial
cp .env.contoh .env
$EDITOR .env # isi SISTER_USERNAME dan SISTER_PASSWORD.env sudah masuk .gitignore, jadi tidak akan ikut ter-commit.
3. Coba tanpa mengirim apa pun
--uji-coba login ke SISTER lalu memperlihatkan field apa yang akan dikirim,
tanpa menyimpan satu pun record:
./sister isi publikasi examples/publikasi.json --uji-cobaBaris pertamanya sekaligus jadi bukti kredensialnya benar:
Login SISTER OK — menu publikasi
[1] A Comparative Study of Relational and Hybrid Object-Relational Storage…
action : https://sister-pt.kemdiktisaintek.go.id/tridharma/publikasi
judul = A Comparative Study of …
…Kalau kredensialnya salah, yang muncul Login ditolak — periksa username/password SISTER. Kalau .env belum diisi, Variabel belum ada di …/.env.
4. Kirim sungguhan
./sister isi publikasi examples/publikasi.jsonGanti examples/publikasi.json dengan berkas Anda sendiri — bentuknya mengikuti
contoh di examples/, dan path dokumen di dalamnya boleh relatif
terhadap letak berkas JSON itu.
Mengulang berkas yang sama aman: kegiatan yang judulnya sudah ada dilewati, bukan digandakan.
Related MCP server: siyuan-mcp-server
Memasang sebagai paket
Untuk memakainya dari proyek lain — sebagai pustaka, REST API, atau MCP — pasang paketnya. Belum ada di PyPI, jadi pasang langsung dari repositorinya:
pip install "git+https://github.com/alfa-yohannis/sister-mcp.git" # pustaka saja
pip install "sister-mcp[api] @ git+https://github.com/alfa-yohannis/sister-mcp.git" # + REST API
pip install "sister-mcp[mcp] @ git+https://github.com/alfa-yohannis/sister-mcp.git" # + server MCP
pip install "sister-mcp[semua] @ git+https://github.com/alfa-yohannis/sister-mcp.git" # ketiganyaIkut terpasang dua perintah: sister (CLI) dan sister-mcp (server MCP).
.env, sister.yaml, dan data/ dibaca dari direktori kerja proyek yang
memakai, bukan dari dalam paketnya — jadi tiap proyek punya kredensial dan
setelannya sendiri.
Menjalankan tiap bentuk
Ketiganya berdiri di atas inti yang sama dan bisa dipakai dari proyek lain. Masing-masing lengkap: pasang → setel → jalankan → pastikan.
Sebagai pustaka
Pasang
pip install "git+https://github.com/alfa-yohannis/sister-mcp.git"Setel — di direktori proyek Anda sendiri:
printf 'SISTER_USERNAME=nama@contoh.ac.id\nSISTER_PASSWORD=rahasia\n' > .envJalankan
from sister_mcp import SisterClient, buat_menu, model_menu
client = SisterClient().login() # kredensial dari .env
menu = buat_menu("publikasi", client)
data = {"judul": "…", "kategori_kegiatan": "120902", "…": "…"}
hasil = menu.simpan(menu.model(**data), uji_coba=True) # tidak menyimpan apa pun
print(hasil["isian"])Kredensial juga boleh diberikan langsung — SisterClient("nama@contoh.ac.id", "rahasia") — begitu pula alamat instance lewat base_url=.
Bentuk data mengikuti model menunya. Model dan kelas menunya bisa dipakai
langsung, dan skemanya bisa dibaca tanpa jaringan:
from sister_mcp import Publikasi, MenuPublikasi, MENU_TERSEDIA, SisterError
model_menu("publikasi").model_json_schema() # field apa saja, mana yang wajibPastikan — contoh utuh yang bisa langsung dijalankan dan tidak menyentuh jaringan sama sekali:
python examples/pakai_pustaka.pySebagai REST API
Pasang
pip install "sister-mcp[api] @ git+https://github.com/alfa-yohannis/sister-mcp.git"Jalankan
sister api # http://localhost:8000
PORT=9000 sister api # port lain
./sister api # dari klona repo, tanpa memasangTidak perlu .env: kredensial dikirim per permintaan, jadi satu server bisa
melayani banyak dosen.
Pastikan
curl localhost:8000/menu
# {"menu":["anggota_profesi","kepanitiaan","pengabdian","publikasi"]}
curl -X POST localhost:8000/sesi \
-H "Content-Type: application/json" \
-d '{"username":"...","password":"..."}'
# {"ok":true,"landing_url":"https://sister-pt.kemdiktisaintek.go.id"}Swagger UI ada di http://localhost:8000/docs. Mengisi satu kegiatan:
curl -X POST "localhost:8000/publikasi?uji_coba=true" \
-H "Content-Type: application/json" \
-d '{"username":"...","password":"...","data":{...}}'Aplikasinya ASGI biasa, jadi bisa di-mount ke aplikasi FastAPI lain:
from fastapi import FastAPI
from sister_mcp.api import app as sister_api
app = FastAPI()
app.mount("/sister", sister_api)Selengkapnya di docs/API.md.
Sebagai server MCP
Pasang dan daftarkan
pip install "sister-mcp[mcp] @ git+https://github.com/alfa-yohannis/sister-mcp.git"
claude mcp add sister -- sister-mcpDari klona repo tanpa memasang — klien MCP memanggil lewat path absolut:
claude mcp add sister -- /path/ke/sister-mcp/sister mcpUntuk klien MCP lain, konfigurasinya berupa JSON; env di situ jalur setelannya
(lihat docs/MCP.md).
Setel — kredensial boleh ditaruh di .env supaya asisten tidak perlu
memegangnya sama sekali, atau dikirim per pemanggilan tool.
Pastikan
claude mcp list # 'sister' harus muncul sebagai connectedLalu minta ke asisten dengan bahasa biasa — kumpulan prompt siap salin ada di examples/prompt_mcp.md:
Di folder 2026-08/pengabdian ada proposal, laporan akhir, surat tugas, undangan, dan surat keterangan mitra. Baca semuanya, susun data pengabdiannya, lalu isikan ke SISTER. Uji coba dulu.
Delapan tool tersedia: cek_login, daftar_menu, skema_menu, daftar_kegiatan,
referensi, cari_dosen, dokumen_kegiatan, dan isi_kegiatan. Yang terakhir
bawaannya uji_coba=True, jadi pemanggilan pertama tidak pernah menulis ke SISTER.
Selengkapnya di docs/MCP.md.
Kredensial dan setelan
Aplikasi ini berdiri sendiri: kedua berkas di bawah dicari hanya di direktorinya sendiri, tidak pernah di direktori induk. Klona repositori ini ke mana pun, dan tidak ada proyek lain yang perlu ada di sekitarnya.
Yang rahasia dipisah dari yang bukan, supaya setelan bisa dibagikan sedangkan kata sandi tidak pernah ikut ter-commit.
.env — kredensial saja (salin dari .env.contoh):
SISTER_USERNAME=...
SISTER_PASSWORD=...sister.yaml — setelan non-rahasia (salin dari
sister.contoh.yaml). Semuanya opsional; tanpa berkas ini
pun aplikasi berjalan dengan nilai bawaan:
base_url: https://sister-pt.kemdiktisaintek.go.id
website: https://sister.kemdiktisaintek.go.id/auth-gateway/login
afiliasi: Universitas Contoh # afiliasi penulis pada menu publikasi
waktu_tunggu_unggah: 300 # detik; naikkan kalau lampirannya besarAlamat SISTER ditaruh di sini karena memang jarang berubah — tapi bukan tidak pernah. Kalau Kemdiktisaintek memindahkannya, cukup berkas ini yang disunting.
Urutan yang menang, dari paling khusus:
argumen pemanggil -> environment -> .env -> sister.yaml -> nilai bawaanNama kunci di sister.yaml sama dengan nama environment-nya tanpa awalan
SISTER_ dan huruf kecil: SISTER_BASE_URL ⇄ base_url.
Kalau beberapa aplikasi memang ingin berbagi satu berkas konfigurasi, tunjuk
direktorinya lewat SISTER_KONFIG_DIR. Itu pilihan, bukan syarat — dan .env
serta sister.yaml milik aplikasi ini sendiri tetap menang atasnya.
REST API dan MCP juga bisa menerima kredensial — dan alamat instance — per permintaan, sehingga kedua berkas itu tidak wajib untuk keduanya.
Perintah
./sister isi <menu> <berkas.json> [--uji-coba] # isi data; --uji-coba tidak menyimpan apa pun
./sister rapikan <menu> "<judul>" --lihat # periksa dokumen ganda pada satu record
./sister bukti --rincian "<url rincian BKD>" --tautan "<url bukti>" --lihat
./sister petakan /tridharma/<menu>/create # petakan form saat menambah menu baru
./sister api # REST API di http://localhost:8000
./sister mcp # MCP server lewat stdio
./sister uji # unit test (tanpa jaringan)Selalu jalankan --uji-coba lebih dulu. Mengulang berkas yang sama aman:
kegiatan yang judulnya sudah ada dilewati, bukan digandakan.
Rancangan
Semua menu tridharma SISTER memakai alur yang persis sama:
buka form create → susun isian → POST → pastikan tersimpan → lengkapi dokumenAlur itu ditulis satu kali di MenuTridharma.simpan(). Tiap menu adalah
subkelasnya yang hanya mengisi bagian yang memang berbeda:
MenuTridharma (abstrak) sister_mcp/tridharma.py
├── MenuPengabdian + model Pengabdian sister_mcp/pengabdian.py
├── MenuPublikasi + model Publikasi sister_mcp/publikasi.py
├── MenuKepanitiaan + model Kepanitiaan sister_mcp/kepanitiaan.py
└── MenuAnggotaProfesi + model AnggotaProfesi sister_mcp/anggota_profesi.pyYang wajib disediakan subkelas hanya dua: judul_kegiatan() dan susun_isian().
Perilaku yang berbeda sendiri ditimpa lewat hook — siapkan_form() dipakai
publikasi karena isian detailnya baru dimuat setelah kategori dipilih, dan
sudah_tersimpan() dipakai menu yang kolom daftarnya bukan "Judul".
Menu baru cukup didaftarkan di src/sister_mcp/menu.py; CLI, REST API, dan MCP langsung
ikut mengenalinya tanpa perubahan lain. Langkah menambahnya:
./sister petakan /tridharma/pengelola_jurnal/create --all-options # 1. petakan formnya
# 2. tulis subkelas MenuTridharma + model datanya
# 3. daftarkan di sister_mcp/menu.py
# 4. tambahkan uji penyusunan isiannya di tests/test_menu.pyBentuk data
Skema lengkap tiap menu bisa dilihat lewat GET /menu/{nama}/skema (REST API)
atau tool skema_menu (MCP). Contoh siap pakai ada di examples/:
// examples/kepanitiaan.json
{
"nama_panitia": "Pengulas di Jurnal Internasional Cluster Computing", // maksimal 80 karakter
"kategori_kegiatan": "140702", // kode atau labelnya
"jenis_panitia": "Panitia lainnya",
"tingkat": "Internasional",
"instansi": "Springer Nature",
"nomor_sk_tugas": "0",
"tanggal_mulai": "2026-07-15", // boleh dd/mm/yyyy
"tanggal_selesai": "2026-07-15",
"anggota": [{ "nama": "SPIDER MAN", "peran": "Pengulas" }],
"dokumen": [{ "file": "berkas/sertifikat.pdf", "nama": "Sertifikat", "jenis": "Lainnya" }]
}Nama dosen dicocokkan otomatis ke daftar dosen perguruan tinggi (tidak perlu tahu
id-nya), begitu pula label jenis dokumen, kategori kegiatan, dan pilihan select
lainnya. Dosen pemilik akun wajib ikut tercantum karena SISTER menaruhnya sebagai
baris permanen paling atas. Tahun pada menu pengabdian mengikuti tahun ajaran:
2025 berarti 2025/2026.
Isi berkas
Berkas | Kegunaan |
| metadata paket, dependensi, dan kedua perintahnya |
| pembungkus untuk memakai dari klona repo tanpa memasang |
| contoh berkas kredensial; salin jadi |
| contoh berkas setelan; salin jadi |
| permukaan pustaka: apa saja yang boleh diimpor proyek lain |
| perintah |
| pemeriksa & pemasang paket saat pertama dijalankan |
| baca |
| inti HTTP: login SSO, baca/kirim form, cari dosen, daftar & dokumen |
| kelas dasar |
|
|
|
|
|
|
|
|
| daftar menu yang didukung + pabrik pembuatnya |
|
|
| CLI pengisian data tridharma dari berkas JSON |
| CLI pendaftaran bukti penugasan pada rekap BKD |
| CLI penghapus dokumen ganda pada sebuah record |
| REST API (FastAPI) |
| MCP server |
| alat bantu: petakan form SISTER saat menambah menu baru |
| unit test, semuanya berjalan tanpa jaringan |
| referensi CLI, REST API, dan MCP |
| contoh data tiap menu + contoh klien Python dan |
| hasil tarikan dan berkas sementara |
Catatan alur login SISTER
Autentikasi SISTER memakai OAuth2/OIDC (Ory Hydra), jadi tidak bisa POST langsung ke satu endpoint. Rantainya:
sister.kemdiktisaintek.go.id/auth-gateway/login→
sister-auth-gateway.../oauth2/auth?client_id=...(menerbitkanlogin_challenge)→
auth-ssosister.../v2/login(form berisi_csrf+challenge)→ POST kredensial → consent →
/auth-gateway/callback→ mendarat di
sister-pt.kemdiktisaintek.go.id(sesi aktif)
requests.Session mengikuti seluruh redirect itu otomatis. Kuncinya: ambil ulang
semua <input hidden> dari form SSO (terutama _csrf dan challenge) lalu
timpa username/password — bukan mengirim dua field itu saja.
Catatan alur pengisian data
SISTER tidak punya REST API; halamannya server-rendered (Laravel + jQuery). Maka setiap pengisian selalu: GET form create → POST multipart ke action-nya → baca ulang halaman daftar untuk memastikan datanya benar-benar tersimpan.
Perilaku SISTER yang sudah ditemukan dan ditangani:
Pesan validasi tidak dikirim sebagai JSON. Kalau ada isian wajib yang kosong, server membalas halaman formnya lagi (HTTP 200) dengan pesan tertanam sebagai kode JS
error_string_array[0] = '...'.baca_pesan_validasi()yang menerjemahkannya.Unggahan besar bisa terpotong diam-diam. Mengirim lima PDF (±5 MB) sekaligus membuat berkas terakhir hilang tanpa pesan error. Karena itu setelah record tersimpan, dokumen yang diminta dibandingkan dengan yang benar-benar menempel, lalu sisanya diunggah satu per satu dan diperiksa ulang.
Unggahan susulan sesekali gagal tanpa pesan. Server membalas 200 tapi dokumennya tidak tersimpan, jadi hasilnya selalu diverifikasi dan diulang sekali.
nm_panitiadibatasi ±80 karakter. Lebih dari itu SISTER membalas HTTP 500 tanpa pesan apa pun, jadi dicegat lebih dulu diMenuKepanitiaan.URL hapus hanya menerima DELETE. Membukanya dengan GET dibalas HTTP 500; yang benar POST dengan
_method=DELETEmemakai token sesi.Sebagian form dimuat belakangan. Isian detail publikasi baru dikirim server lewat
POST /tridharma/publikasi/get_formsetelah kategori dipilih, jadi form harus dilengkapi dulu (merge_form_fragment) sebelum opsinya bisa dipakai.Endpoint pencarian dosen berbeda antar menu. Ada yang di
/tridharma/<menu>/get_data_ptk, ada yang di/common_global_service/get_data_ptk;lookup_dosen()mencoba keduanya.Bukti BKD hanya berupa tautan. Form Bukti Penugasan di rekap BKD tidak menerima unggahan berkas; yang wajib diisi adalah Tautan Dokumen. Berkasnya harus sudah tersimpan di tempat yang bisa dibuka asesor (mis. folder Google Drive yang di-share), lalu tautannya yang didaftarkan. Nama dokumen dibatasi 60 karakter dan keterangan 200 karakter.
Dokumen bukti tidak bisa disunting. Setelah terdaftar hanya tersedia aksi Hapus, jadi perbaikan berarti hapus lalu daftarkan ulang.
Tiga menu tidak bisa diisi sama sekali.
pengajaran,bimbingan_mahasiswa, danpengujian_mahasiswaditarik otomatis dari Feeder PDDikti — halamancreate-nya bahkan tidak memuat form.
Konvensi penulisan skrip
Satu kelas untuk satu tanggung jawab; alur bersama tinggal di kelas dasar, yang khas per menu ada di subkelasnya.
Setiap kelas, method, dan fungsi punya docstring.
Fungsi ditulis datar — tanpa fungsi bersarang di dalam fungsi.
Nama variabel dan fungsi ditulis utuh dan deskriptif (
http_session,login_form), bukan singkatan satu-dua huruf (s,cfg,inp).Komentar hanya untuk hal yang tidak terbaca dari kodenya, bukan mengulang isi baris.
Nilai rahasia tidak pernah dicetak; yang ditampilkan hanya nama cookie.
This server cannot be deployed
Maintenance
Related MCP Connectors
Malaysian SME accounting, e-Invoice and payroll for your AI. 64 tools; writes are approved drafts.
Independent directory of agentic AI tools — search, compare & recommend via MCP. Read-only.
- mcpOAuthcom.vibgrate
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Read and write KukGit repositories, files, issues and pull requests from an AI assistant.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI assistants to create, read, update, and manage SiYuan notes, supporting notebook management, document operations, block editing, database attribute views, search, file operations, and export.1112 npm1MIT
- AlicenseBqualityDmaintenanceEnables AI models to interact with SiYuan Note systems, allowing management of notebooks, documents, blocks, files, and more through natural language.34 npmISC
- AlicenseNot gradedqualityDmaintenanceProvides complete browser automation capabilities for AI agents via 44 tools, including navigation, element interaction, state management, and session recording.393 npm1Apache 2.0
- FlicenseNot gradedqualityFmaintenanceEnables automation of the SEI! (Sistema Eletrônico de Informações) system via Claude Code, supporting login, process search, document download/creation/signing, and forwarding through natural language commands.8 npm5-