Category: Wordpress

  • Menulis Blog di WordPress dengan Claude Code

    Menulis Blog di WordPress dengan Claude Code

    Halo kembali lagi dengan Rafi. Kali ini saya ingin berbagi pengalaman yang cukup menarik tentang dua hal: WordPress MCP Abilities dan Claude Code dengan Nvidia NIM. Keduanya sebenarnya berbeda, namun saya mencoba menggabungkannya karena bisa menjadi solusi yang lengkap.

    Tulisan ini terinspirasi dari Mas Afatyo dan Mentor saya Pak Nugi di Excellent. Jadi, Mas Afatyo ini menulis di github tentang integrasi wordpress dengan claude code. Namun disini harus menggunakan claude code yang berbayar (pro plan). Namun, ternyata Pak Nugi punya solusi untuk mengakali hal ini (meskipun terasa ilegal) pada tulisan di artikelnya.

    Sebelumnya, saya sudah terbiasa menggunakan Claude versi web untuk kegiatan dan pekerjaan sehari-hari. Namun, untuk mencoba claude code memang memerlukan subscription dari Antrhopic.

    Latar Belakang

    Saya biasa menulis blog sehari-hari mengenai segala hal tentang IT dan untuk menulis biasanya dibantu dengan AI (ChatGPT atau Claude). Lalu dari inspirasi diatas saya bertanya, “Kenapa nulis blog masih harus pindah konteks ke browser lagi?” padahal urusan di terminal atau CLI sudah jadi kebiasaan. Idealnya, dari terminal yang sama saya pakai dan ngurus server, saya bisa bilang ke AI “bikin draft post tentang X, simpan di WordPress”, lalu tinggal review di dashboard admin wordpress.

    Komponennya sebenarnya sudah ada semua, hanya butuh dirangkai:

    • Claude Code — CLI agentic dari Anthropic yang bisa manggil tools via MCP (Model Context Protocol).
    • WordPress 6.8+ — yang sudah punya REST API dan, lewat plugin tertentu, bisa di-bridge ke MCP.
    • Sebuah plugin penghubung yang menerjemahkan “buat post” jadi panggilan REST API yang aman.

    Bahan-Bahan

    1. Tutorial Claude Code Gratis dari Pak Nugi

    Pak Nugi Abdiansyah menulis panduan lengkap berbahasa Indonesia: Cara Menjalankan Claude Code Gratis dengan NVIDIA NIM (Mac & Linux). Inti dari tutorial ini: pakai proyek open-source free-claude-code sebagai proxy lokal yang membuat Claude Code mengira sedang ngomong ke API Anthropic, padahal request-nya dialihkan ke NVIDIA NIM yang punya tier gratis sampai 40 request/menit.

    Saya tidak akan ulang langkah per langkahnya di sini — silakan baca langsung di artikel asli Pak Nugi karena penjelasannya sudah sangat lengkap, dari install uv, ambil API key NVIDIA, sampai bikin alias fcc-claude.

    2. Plugin wp-blog-abilities dari Mas Afatyo

    Plugin ini dibuat oleh Mas Afatyo dan source-nya ada di github.com/afatyoo/wp-blog-abilities. Fungsinya untuk mendaftarkan empat abilities untuk post WordPress:

    • blog/create-post
    • blog/update-post
    • blog/list-posts
    • blog/delete-post

    Secara otomatis ditemukan oleh WordPress MCP Adapter. Hasilnya, tool-tool ini bisa dipanggil oleh client MCP manapun, termasuk Claude Code.

    Bagusnya, semua akses tetap melalui autentikasi WordPress standar (Application Password + capability check), jadi tidak ada endpoint publik yang bocor.

    Catatan Penting

    Meskipun judulnya “Claude Code gratis”, namun artikel yang ditulis Pak Nugi yang jalan di balik layar itu bukan model Claude. Proxy free-claude-code meneruskan request ke model lain (default-nya stepfun-ai/step-3.5-flash, bisa juga Kimi, DeepSeek, dst) lalu membungkus respon-nya supaya terlihat seperti Claude.

    Implikasinya untuk percobaan ini:

    • Privasi: isi draft yang dibikin akan transit ke server NVIDIA NIM. Untuk blog publik tidak masalah, tapi kalau mau bikin draft yang sensitif (laporan internal, dll) perlu dipertimbangkan lagi.

    Kalau kalian tetap mau lanjut, berikut langkah-langkahnya.

    Langkah 1 — Setup Claude Code + NVIDIA NIM

    Ikuti tutorial dari blog Pak Nugi sampai selesai (langkah 1 sampai 6). Pastikan di akhir, Anda bisa menjalankan fcc-claude dan banner Claude Code muncul tanpa diminta login.

    Tweak kecil yang saya pakai berbeda dari tutorial:

    • Saya jalankan proxy-nya di dalam tmux sesuai saran “Pro Tip” Pak Nugi, jadi terminal utama tetap bersih.

    Tes cepat sebelum lanjut:

    fcc-claude
    # di prompt Claude Code, ketik:
    > apa yang bisa kamu lakukan?

    Output:

    Kalau jawabannya keluar lancar, fondasinya sudah siap.

    Langkah 2 — Install Plugin di WordPress

    Ada dua plugin yang harus saya install (sesuai instruksi di README afatyo):

    1. mcp-adapter — bridge resmi dari WordPress.org yang mengubah ability jadi MCP server.
    2. wp-blog-abilities — plugin afatyo yang mendaftarkan abilities khusus untuk blog post.

    Karena saya pegang akses SSH ke VPS WordPress, saya pilih jalur git clone:

    cd /var/www/html/wp-content/plugins
    sudo -u www-data git clone https://github.com/WordPress/mcp-adapter.git
    sudo -u www-data git clone https://github.com/afatyoo/wp-blog-abilities.git

    Lalu ke WP Admin → Plugins, aktifkan keduanya. Penting: aktifkan mcp-adapter dulu, baru wp-blog-abilities, supaya hook registrasi ability tidak gagal.

    Buat yang nggak punya akses SSH, Mas Afatyo juga sudah menyediakan ZIP yang bisa di-upload via Plugins → Add New → Upload Plugin.

    Langkah 3 — Application Password

    WordPress butuh kredensial khusus untuk dipakai aplikasi luar. Jangan pakai password login Anda — itu bahaya dan juga tidak akan jalan.

    1. Buka WP Admin → Users → Profile.
    2. Scroll ke bagian Application Passwords.
    3. Isi nama (saya pakai Claude MCP via NIM) dan klik Add New Application Password.
    4. Salin password yang muncul — formatnya xxxx xxxx xxxx xxxx xxxx xxxx dengan spasi. Password ini hanya tampil sekali.

    Simpan di password manager karena kalau hilang harus generate ulang.

    Langkah 4 — Konfigurasi .mcp.json

    Di laptop saya, saya buat file .mcp.json sesuai template di README afatyo:

    {
      "mcpServers": {
        "wordpress-blog": {
          "command": "npx",
          "args": ["-y", "@automattic/mcp-wordpress-remote@latest"],
          "env": {
            "WP_API_URL": "https://domain-blog-anda.com/wp-json/mcp/mcp-adapter-default-server",
            "WP_API_USERNAME": "username-kalian",
            "WP_API_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx"
          }
        }
      }
    }

    Ganti tiga baris di dalam env dengan nilai milik Anda sendiri. Spasi pada WP_API_PASSWORD tidak perlu dihapus, biarkan apa adanya seperti yang WordPress kasih.

    Langkah 5 — Restart Claude Code

    Bagian ini saya sempat trouble. /exit di Claude Code tidak cukup, perubahan .mcp.json hanya ke-detect kalau prosesnya dimatikan (kill) lalu start lagi. Di terminal saya:

    # keluar dulu dari sesi sebelumnya
    # pastikan tidak ada proses claude yang nyangkut:
    pgrep -a claude
    
    # kalau ada, kill
    pkill -f "claude"
    
    # baru jalankan ulang
    fcc-claude

    Setelah Claude Code jalan lagi, saya tes konektivitas MCP:

    > List all published posts on my blog

    Output:

    Dan voila — daftar published post saya muncul, lengkap dengan ID, judul, dan tanggal modifikasi.

    Langkah 6 — Buat Blog

    Blog ini ditulis dengan AI, namun saya sendiri yang mengedit dan mereview, jadi mohon maaf kalau ada kesalahan atau kata-kata yang kaku.

    Membuat blog dari dua sumber:

    Kalian juga bisa minta AI untuk mengedit tulisan sesuai dengan yang kalian mau:

    Catatan Setelah Pemakaian

    Supaya post ini tidak cuma jadi hype, ini hal-hal yang saya rasakan setelah beberapa hari:

    Yang jalan dengan baik:

    • List, create, update, delete post — semuanya solid. Application Password jalan, capability check WordPress jalan, tidak ada endpoint yang nyeleneh.
    • Workflow AI buat draft post → Review dan Publish Mandiri sangat cocok dengan setup ini. Jangan biarkan AI langsung publish.

    Perlu diakali:

    • Karena modelnya bukan Claude beneran, saya merasakan output yang kadang kaku atau struktur paragrafnya kurang natural. Cantumkan di /memory agar AI agent paham output yang diinginkan.
    • Limit 40 request/menit dari NVIDIA NIM aman buat satu sesi penulisan, tapi kalau dipakai eksplorasi panjang (banyak tool call baca-tulis post), bisa kena rate limit.
    • Untuk post yang SEO-optimized dengan struktur heading kompleks, perlu dilakukan review mandiri.

    Penutup & Kredit

    Eksperimen ini sebenarnya hanya nyambungin dua kerjaan orang lain dengan kabel pendek. Tanpa dua artikel/proyek di bawah ini, saya tidak akan bisa mencobanya. Terima kasih kepada:

    • 🙏 Pak Nugi (nugi.biz) — untuk panduan lengkap setup Claude Code gratis pakai NVIDIA NIM. Tutorialnya rapi, ada troubleshooting, dan langsung saya pakai tanpa perlu nyari ke sumber lain.
    • 🙏 Mas Afatyo (github.com/afatyoo) — untuk plugin wp-blog-abilities yang membungkus operasi blog jadi MCP abilities yang bersih dan aman. Permission callback-nya ketat, sanitasi input lengkap, dan README-nya termasuk dokumentasi yang rapi.
    • 🙏WordPress –  MCP Adapter  — untuk plugin MCP Adapter

    Kalau Anda merasa terbantu seperti saya, bisa mampir ke blog Pak Nugi dan bintangi repo Mas Afatyo di GitHub, kontribusi seperti ini yang membuat dunia per-IT-an menjadi lebih hidup.

    Selamat ngeblog dari terminal!


    Disclaimer percobaan: Saya jalankan setup ini hanya di lingkungan pribadi untuk eksperimen. Untuk pemakaian produksi atau yang melibatkan data sensitif, pertimbangkan pakai API Anthropic resmi (atau LLM lain yang Anda host sendiri) supaya privasi data dan kualitas output bisa dikontrol penuh.

    Tulisan ini dibuat oleh AI

  • Cara Mengatasi File Terekspos Publik di WordPress

    Cara Mengatasi File Terekspos Publik di WordPress

    Beberapa hari lalu, saya membuka dashboard Wordfence di situs saya dan menemukan notifikasi dengan label Critical yang langsung bikin saya agak panik:

    Publicly accessible config, backup, or log file found: .user.ini

    Jujur, awalnya saya tidak tahu file .user.ini itu apa. Yang saya tahu, label “Critical” di Wordfence bukan sesuatu yang bisa diabaikan begitu saja. Maka saya langsung lakukan troubleshoot peringatan ini. Pertama-tama kita cari tahu dan dalami file ini.


    Apa Itu File .user.ini?

    File .user.ini adalah file konfigurasi PHP yang bekerja di level direktori. Fungsinya mirip seperti php.ini, tapi hanya berlaku untuk folder tempat file itu berada, dalam hal ini, folder root WordPress.

    File ini bukan file bawaan WordPress. Dalam kasus saya, file ini dibuat secara otomatis oleh plugin Wordfence sendiri saat mengaktifkan fitur Web Application Firewall (WAF).


    Isi File .user.ini Saya

    Setelah saya buka file tersebut, isinya hanya ini:

    ; Wordfence WAF
    auto_prepend_file = '/var/www/xxxxx/wordfence-waf.php'
    ; END Wordfence WAF

    Penjelasan singkat:

    Baris auto_prepend_file memerintahkan PHP untuk menjalankan file wordfence-waf.php sebelum file PHP manapun dieksekusi. Inilah cara Wordfence WAF “mencegat” request berbahaya sebelum sampai ke WordPress.


    Apa Bahayanya Jika File Ini Bisa Diakses Publik?

    Meski isi file saya tidak mengandung password atau kredensial, ada dua informasi yang tidak seharusnya diketahui orang lain:

    1. Path direktori server terekspos

    /var/www/xxxxx/

    Penyerang bisa mengetahui struktur folder server saya. Informasi ini berguna untuk serangan seperti path traversal atau local file inclusion.

    2. Plugin keamanan yang digunakan diketahui

    Penyerang tahu saya menggunakan Wordfence. Dengan informasi ini, mereka bisa mencari exploit atau teknik bypass yang spesifik menargetkan Wordfence.

    File ini tidak boleh bisa diakses publik, meskipun isinya tidak terlalu berbahaya.


    Cara Mengatasinya

    Solusinya adalah memblokir akses publik ke file .user.ini. File ini tidak perlu dihapus karena masih dibutuhkan oleh Wordfence WAF. Cara pemblokirannya berbeda tergantung web server yang kamu gunakan, pada kasus saya, saya menggunakan web server Nginx.


    Langkah 1 — Masuk ke konfigurasi Nginx

    Akses via SSH:

    # nano /etc/nginx/sites-available/fileconfanda.conf

    Langkah 2 — Tambahkan rule berikut di dalam blok server {}

    // Blokir akses ke file konfigurasi sensitif
    location ~ /\.(user\.ini|htaccess|htpasswd|git) {
        deny all;
        return 404;
    }

    Penjelasan:

    BagianKeterangan
    location ~Mencocokkan URL menggunakan regex (case-sensitive)
    /\.Menargetkan semua file yang diawali titik (dotfiles)
    deny allMenolak semua request ke file tersebut
    return 404Mengembalikan 404 agar penyerang tidak tahu file itu ada

    Saya gunakan return 404 bukan return 403, ini teknik agar penyerang tidak bisa memastikan apakah file tersebut benar-benar ada di server.

    Langkah 3 — Test konfigurasi Nginx

    Sebelum reload, selalu test dulu untuk memastikan tidak ada syntax error:

    # nginx -t

    Jika ada error, troubleshoot dulu sebelum lanjut ke langkah berikutnya.

    Langkah 4 — Reload Nginx

    # systemctl reload nginx

    Langkah 5 — Verifikasi dari browser

    Akses langsung dari browser:

    https://rafiharlianto.web.id/.user.ini

    Kalau sudah muncul 404, berarti file sudah berhasil disembunyikan dari publik.

    Langkah 6 – Verifikasi di Wordfence

    Setelah memblokir file, saya kembali ke dashboard Wordfence dan menjalankan ulang scan:

    Wordfence → Scan → Start New Scan

    Hasilnya? No new issues have been found.


    Akhir Kata Rafi…

    Rutin cek Wordfence Scanner, banyak masalah keamanan yang tidak terlihat secara kasat mata tapi bisa ditemukan lewat scanner.

    File yang dibuat plugin pun bisa jadi celah, kesalahan terbesar kasus ini adalah file yang bocor justru dibuat oleh plugin keamanan saya sendiri.

    Blokir akses ke file konfigurasi sejak awal, jangan tunggu ada temuan baru menambahkan proteksi di konfigurasi Nginx.

    Tidak semua temuan “Critical” berbahaya, tapi tetap harus ditangani sesegera mungkin.

    Semoga artikel ini membantu, apalagi kalau kamu menemukan temuan serupa di Wordfence Scanner pada situsmu. Jika ada pertanyaan, tulis di kolom komentar ya!

  • Menambahkan Plugin Wordfence di WordPress

    Menambahkan Plugin Wordfence di WordPress

    Pada artikel atau blog kali ini, saya ingin berbagi langkah-langkah install dan setup plugin Wordfence (versi gratis) sebagai salah satu solusi untuk menambahkan keamanan di WordPress. Dengan langkah-langkah ini, harapannya instalasi bisa dilakukan dengan benar tanpa kendala, sekaligus membantu website memiliki perlindungan dasar dari serangan umum.

    Selain itu, penggunaan Wordfence juga memberikan beberapa manfaat yang cukup terasa, seperti membantu mengamankan halaman login dari percobaan login berulang, mendeteksi file yang berubah atau mencurigakan, memblokir traffic yang tidak wajar, serta memberikan notifikasi jika ada aktivitas yang perlu diperhatikan. Dengan setup yang tepat, WordPress bisa menjadi jauh lebih aman dan lebih mudah untuk dimonitor.


    Apa itu Wordfence?

    Wordfence Security plugin adalah plugin keamanan WordPress yang berfungsi sebagai perlindungan utama pada website.

    Wordfence menyediakan beberapa fitur utama, antara lain:

    • Web Application Firewall (WAF) untuk memblokir serangan
    • Malware scanner untuk mendeteksi file berbahaya
    • Proteksi login (brute force protection)
    • Monitoring traffic dan aktivitas mencurigakan
    • Notifikasi keamanan melalui email

    Dengan menggunakan Wordfence, website WordPress menjadi lebih aman tanpa perlu konfigurasi yang terlalu kompleks.


    Tahapan Install Wordfence di WordPress

    Berikut adalah langkah-langkah yang saya lakukan saat menginstall Wordfence:


    1. Install Plugin Wordfence

    Masuk ke dashboard WordPress, kemudian:

    • Pilih menu Plugins → Add New
    • Cari plugin Wordfence Security
    • Klik Install Now
    • Setelah itu klik Activate

    2. Plugin Berhasil Terinstall

    Setelah aktivasi, akan muncul notifikasi bahwa Wordfence berhasil diinstall dan diminta untuk mendapatkan license.


    3. Pilih Versi

    Karena saya menggunakan versi gratis, akan muncul pertanyaan:

    • Delayed Protection (Free Version)

    Klik opsi “I’m OK waiting 30 days for protection from new threats“

    Delayed Protection artinya Wordfence tetap melindungi website, tetapi update keamanan seperti firewall dan database malware tidak didapat secara real-time (± 30 hari). Versi gratis masih bisa digunakan dengan baik untuk kebutuhan dasar, hanya saja update proteksinya sedikit lebih lambat dibanding versi premium.


    4. Masukkan Email

    Masukkan email yang akan digunakan untuk:

    • Menerima license Wordfence
    • Mendapatkan notifikasi keamanan

    5. Cek Email

    Setelah memasukkan email, Wordfence akan mengirimkan link aktivasi ke email kalian.


    6. Klik Link Aktivasi

    Buka email tersebut, lalu klik tombol:

    • Install My License Automatically

    7. Install Lisensi Wordfence

    Kemudian kalian akan diarahkan kembali ke dashboard WordPress dengan:

    • Email sudah terisi
    • License key otomatis terisi

    Klik tombol:

    • Install License

    8. License Berhasil Terpasang

    Jika berhasil, akan muncul notifikasi bahwa:

    • Free license berhasil diinstall

    Kemudian klik:

    • Go to Dashboard

    9. Wordfence Siap Digunakan

    Sekarang kalian sudah mengaktifkan dan berada di halaman dashboard Wordfence.

    Artinya:

    • Plugin sudah aktif
    • License sudah terpasang

    Hal Penting Setelah Install Wordfence

    Setelah instalasi selesai, ada beberapa hal yang sebaiknya langsung dilakukan:

    • Aktifkan firewall (Optimize Firewall)
    • Jalankan scan pertama
    • Aktifkan login security (2FA jika perlu)
    • Atur limit login attempts
    • Pastikan email notifikasi aktif

    Akhir Kata…

    Wordfence merupakan solusi keamanan yang cukup lengkap untuk WordPress, bahkan dalam versi gratis. Dengan proses instalasi yang relatif mudah, website sudah bisa mendapatkan perlindungan dasar dari berbagai ancaman umum.

    Namun, instalasi saja tidak cukup. Diperlukan konfigurasi lanjutan agar fitur yang tersedia dapat bekerja secara maksimal. Dengan kombinasi antara plugin security, konfigurasi server, dan kebiasaan maintenance yang baik, keamanan website dapat ditingkatkan secara signifikan.