<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hafid Nur</title>
    <description>The latest articles on DEV Community by Hafid Nur (@hafidnrzs).</description>
    <link>https://dev.to/hafidnrzs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1030973%2Fc4f3c5c8-3b4c-4e4d-85e5-b10ce973e498.jpeg</url>
      <title>DEV Community: Hafid Nur</title>
      <link>https://dev.to/hafidnrzs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hafidnrzs"/>
    <language>en</language>
    <item>
      <title>Model Context Protocol (MCP): Arsitektur, Komponen, dan Project Sederhana</title>
      <dc:creator>Hafid Nur</dc:creator>
      <pubDate>Sun, 28 Dec 2025 14:00:51 +0000</pubDate>
      <link>https://dev.to/hafidnrzs/model-context-protocol-mcp-arsitektur-komponen-dan-project-sederhana-3ndf</link>
      <guid>https://dev.to/hafidnrzs/model-context-protocol-mcp-arsitektur-komponen-dan-project-sederhana-3ndf</guid>
      <description>&lt;p&gt;Bayangkan kamu sedang mengerjakan proyek penting di laptop. Ada data perusahaan yang tersimpan di spreadsheet, catatan rapat di Notion, beberapa API eksternal yang harus diintegrasikan, dan baris-baris kode yang perlu diperbaiki di code editor.&lt;/p&gt;

&lt;p&gt;Umumnya workflow waktu memanfaatkan AI itu bolak-balik buka ChatGPT atau Claude, menjelaskan konteksnya, copy-paste data, lalu balik lagi ke code editor. Proses ini tidak hanya memakan waktu, tetapi juga rentan menimbulkan miskomunikasi, terlebih jika AI tidak memiliki akses langsung ke sumber data yang dimaksud.&lt;/p&gt;

&lt;p&gt;Pada November 2024, Anthropic, perusahaan di balik Claude, merilis &lt;strong&gt;Model Context Protocol&lt;/strong&gt; sebagai proyek open-source (&lt;a href="https://www.anthropic.com/news/model-context-protocol" rel="noopener noreferrer"&gt;https://www.anthropic.com/news/model-context-protocol&lt;/a&gt;). Protokol ini dirancang sebagai standar baru untuk menghubungkan asisten AI dengan sistem tempat data berada:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;repositori konten seperti Notion dan Google Docs,&lt;/li&gt;
&lt;li&gt;perangkat bisnis seperti CRM dan ERP,&lt;/li&gt;
&lt;li&gt;hingga lingkungan pengembangan seperti VSCode.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MCP itu ibarat kabel "USB-C" di aplikasi AI. MCP menjadi konektor serbaguna yang menghubungkan berbagai sistem dan sumber data ke AI. Dengan protokol ini, AI tidak lagi terisolasi dalam chat, melainkan dapat langsung berinteraksi dengan database, API, IDE, maupun repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mengapa MCP?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pertama, &lt;em&gt;Large Language Model &lt;/em&gt; (LLM) tidak dapat mengakses sumber data eksternal secara langsung. Tanpa koneksi ke database perusahaan atau API aplikasi lain, LLM hanya mengandalkan pengetahuan yang dimiliki saat pelatihan, sehingga jawabannya sering tidak sesuai kondisi terkini dan berisiko menghasilkan &lt;em&gt;hallucination&lt;/em&gt;, yaitu memberi informasi palsu yang tampak meyakinkan.&lt;/p&gt;

&lt;p&gt;Kedua, alur kerja antara IDE dan AI kerap terputus. Developer biasanya harus bolak-balik dari &lt;em&gt;code editor&lt;/em&gt; ke platform AI, seperti ChatGPT, menulis prompt, lalu menyalin kembali hasilnya ke IDE. MCP mengatasi hambatan ini dengan menghadirkan AI langsung di lingkungan kerja.&lt;/p&gt;

&lt;p&gt;Masalah lainnya adalah tidak ada standar untuk koneksi AI ke  &lt;em&gt;tools&lt;/em&gt;. Sebelum MCP, setiap integrasi memiliki cara berbeda untuk menghubungkan AI dengan sistem eksternal, membuat adopsi AI di berbagai platform menjadi lambat. Dengan adanya MCP sebagai protokol universal, semua klien yang mendukungnya dapat langsung memanfaatkan koneksi yang sama.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hubungan MCP dengan LLM, AI Agent, dan IDE Extensions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LLM&lt;/strong&gt; berperan sebagai "otak" yang memproses bahasa alami dan menghasilkan respons. &lt;strong&gt;MCP&lt;/strong&gt; menjadi jembatan penghubung LLM dengan berbagai &lt;em&gt;tools&lt;/em&gt; dan &lt;em&gt;data source&lt;/em&gt;. &lt;strong&gt;AI Agent&lt;/strong&gt; memanfaatkan MCP untuk menjalankan perintah yang memerlukan data atau aksi di luar LLM itu sendiri. Sementara itu, &lt;strong&gt;ekstensi IDE&lt;/strong&gt; seperti Claude Code, Roo Code, atau GitHub Copilot Chat bertindak sebagai MCP Client yang berinteraksi dengan MCP Server untuk mengambil data, mengeksekusi tools, atau memanggil API. Beberapa MCP Server populer yang banyak digunakan antara lain GitHub, Google Drive, dan Notion, yang membuka akses langsung bagi AI untuk berkolaborasi dengan data di platform tersebut.&lt;/p&gt;

&lt;h2&gt;
  
  
  Arsitektur MCP
&lt;/h2&gt;

&lt;p&gt;Model Context Protocol (MCP) mengikuti pola arsitektur &lt;em&gt;client-server&lt;/em&gt;, di mana MCP Server menyediakan &lt;em&gt;capability&lt;/em&gt; tertentu dan MCP Client memanfaatkannya.&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP Server
&lt;/h3&gt;

&lt;p&gt;Pada sisi server, terdapat tiga komponen utama&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt;: fungsi atau aksi yang dapat dijalankan server, misalnya pencarian data atau pembuatan entri baru.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resources&lt;/strong&gt;: berperan sebagai penyedia data mentah atau informasi yang dapat diakses oleh &lt;em&gt;tools&lt;/em&gt; atau langsung oleh client.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompts&lt;/strong&gt;: instruksi atau skenario siap pakai yang dirancang untuk memandu LLM menggunakan &lt;em&gt;tools&lt;/em&gt; dan &lt;em&gt;resources&lt;/em&gt; secara efektif&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  MCP Client
&lt;/h3&gt;

&lt;p&gt;Di sisi client, terdapat beberapa fitur penting.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Roots&lt;/strong&gt;: menentukan direktori atau lokasi file yang diizinkan untuk diakses server, mengikuti prinsip &lt;em&gt;least privilege&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sampling&lt;/strong&gt;: memungkinkan server meminta klien untuk melakukan panggilan ke LLM guna menghasilkan respons atau melengkapi output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elicitation&lt;/strong&gt;: memungkinkan server meminta input langsung dari pengguna melalui klien, baik untuk konfirmasi maupun pengisian data.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Transport Layer
&lt;/h3&gt;

&lt;p&gt;Komunikasi antara MCP Client dan MCP Server berlangsung melalui &lt;em&gt;transport layer&lt;/em&gt; yang fleksibel. Protokol MCP mendukung:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;STDIO&lt;/strong&gt;, yang sederhana dan cepat untuk koneksi lokal, serta&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP&lt;/strong&gt; untuk komunikasi jarak jauh atau integrasi dengan layanan berbasis web.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  JSON-RPC
&lt;/h3&gt;

&lt;p&gt;Di atas &lt;em&gt;transport layer&lt;/em&gt;, MCP menggunakan &lt;strong&gt;JSON-RPC&lt;/strong&gt; sebagai &lt;em&gt;base protocol&lt;/em&gt;, menyediakan format standar untuk permintaan (&lt;em&gt;request&lt;/em&gt;) dan balasan (&lt;em&gt;response&lt;/em&gt;) antara client dan server secara stateless.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Remote Procedure Call&lt;/em&gt; (RPC) adalah metode komunikasi antar proses yang memungkinkan sebuah program memanggil fungsi atau prosedur yang berada di komputer/proses lain, seolah-olah fungsi tersebut berjalan secara lokal. Dalam konteks MCP, RPC digunakan agar MCP Client dapat memanggil fungsi di MCP Server, misalnya &lt;code&gt;search_flights&lt;/code&gt;, lalu menerima hasilnya kembali.&lt;/p&gt;

&lt;p&gt;Struktur umum pesan JSON-RPC adalah sebagai berikut:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Request&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"jsonrpc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"add"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"b"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;jsonrpc&lt;/strong&gt;: versi protokol (MCP menggunakan &lt;code&gt;"2.0"&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;method&lt;/strong&gt;: nama fungsi/prosedur yang ingin dipanggil di server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;params&lt;/strong&gt;: parameter yang dikirim ke fungsi tersebut.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;id&lt;/strong&gt;: identitas unik permintaan, untuk mencocokkan respons.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Response&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"jsonrpc"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"result"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;error&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;result&lt;/strong&gt;: hasil dari eksekusi fungsi.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;error&lt;/strong&gt; &lt;em&gt;(opsional)&lt;/em&gt;: jika terjadi kesalahan, berisi detail error menggantikan &lt;code&gt;result&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;id&lt;/strong&gt;: untuk memastikan respons sesuai dengan permintaan.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Menggunakan MCP Server: Flight Booking
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Prasyarat&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/downloads" rel="noopener noreferrer"&gt;Git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.astral.sh/uv/" rel="noopener noreferrer"&gt;uv (Python package manager)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;Visual Studio Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Roo Code (VSCode extension)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sebelum memulai mencoba menggunakan MCP Server untuk pertama kali. Pastikan untuk menginstall semua prasyarat di atas.&lt;/p&gt;

&lt;p&gt;Panduan ini adalah penerapan dari tutorial dari KodeKloud: &lt;a href="https://www.youtube.com/watch?v=RhTiAOGwbYE&amp;amp;t=79s" rel="noopener noreferrer"&gt;MCP Tutorial: Build Your First MCP Server and Client from Scratch (Free Labs)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Repositori proyek dapat diunduh dari GitHub: &lt;a href="https://github.com/hafidnrzs/kodekloud-mcp/" rel="noopener noreferrer"&gt;hafidnrzs/kodekloud-mcp&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Clone repository project
&lt;/h3&gt;

&lt;p&gt;Buka Terminal atau Command Prompt, lalu jalankan perintah berikut:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/hafidnrzs/kodekloud-mcp.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setelah proses selesai, buka folder hasil unduhan menggunakan &lt;strong&gt;Visual Studio Code&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Konfigurasi Roo Code dan model
&lt;/h3&gt;

&lt;p&gt;Buka ekstensi &lt;strong&gt;Roo Code&lt;/strong&gt; di Visual Studio Code. Secara default, Roo Code masih perlu dikonfigurasi sebelum digunakan.&lt;/p&gt;

&lt;h4&gt;
  
  
  2.1. Daftar dan Buat API Key di OpenRouter
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Kunjungi &lt;a href="https://openrouter.ai/settings/keys" rel="noopener noreferrer"&gt;https://openrouter.ai/settings/keys&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Klik &lt;strong&gt;Create API Key&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Namai API Key bebas. Misalnya &lt;code&gt;mcp-key&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Salin API Key yang sudah dibuat dan simpan di tempat aman. Perlakukan seperti password. Jangan dibagikan ke publik.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  2.2. Tambahkan Profile di Roo Code
&lt;/h4&gt;

&lt;p&gt;Tampilan awal ekstensi Roo Code yang sudah terinstal seperti ini. Namun, masih perlu dikonfigurasi sebelum dapat menggunakannya.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0wbuokg91kk5pqliewtu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0wbuokg91kk5pqliewtu.png" alt="Tampilan awal Roo Code" width="477" height="718"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Pada Roo Code, klik &lt;strong&gt;Add Profile&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Isi pengaturan sebagai berikut:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name&lt;/strong&gt;: &lt;code&gt;deepseek-free&lt;/code&gt; (atau nama sesuai keinginan)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Provider&lt;/strong&gt;: &lt;code&gt;OpenAI Compatible&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Base URL&lt;/strong&gt;: &lt;a href="https://openrouter.ai/api/v1" rel="noopener noreferrer"&gt;&lt;code&gt;https://openrouter.ai/api/v1&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Key&lt;/strong&gt;: Paste API Key yang tadi dibuat&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model&lt;/strong&gt;: &lt;code&gt;deepseek/deepseek-chat-v3-0324:free&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F47htzv7r9ahr10zd3t2d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F47htzv7r9ahr10zd3t2d.png" alt="Konfigurasi profil Roo Code" width="420" height="658"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Klik &lt;strong&gt;Save&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Konfigurasi MCP Server di Roo Code
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Buka menu &lt;strong&gt;MCP Servers&lt;/strong&gt; di Roo Code.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn19rqm5z4tewr7ibord0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn19rqm5z4tewr7ibord0.png" alt="Buka menu MCP Servers di Roo Code" width="416" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Klik &lt;strong&gt;Edit Project MCP&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Akan terbuka file &lt;code&gt;mcp.json&lt;/code&gt;. Isi dengan konfigurasi berikut:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"flight-booking"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"uv"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"run"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"python"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"server.py"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"cwd"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"D:/aegislabs/kodekloud-mcp/flight-booking-server"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt; &lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Catatan:&lt;/strong&gt; Ganti nilai &lt;code&gt;cwd&lt;/code&gt; sesuai dengan lokasi folder proyek di komputermu.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Simpan file &lt;code&gt;mcp.json&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Klik &lt;strong&gt;Refresh MCP Servers&lt;/strong&gt; di Roo Code. Pastikan ikon hijau muncul pada &lt;code&gt;flight-booking&lt;/code&gt; yang menandakan server aktif.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Mencoba Prompt di MCP Client
&lt;/h3&gt;

&lt;p&gt;Setelah server aktif, bisa mencoba menjalankan prompt di chat Roo Code:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Memanggil tools:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Search &lt;span class="k"&gt;for &lt;/span&gt;flights from LAX to JFK using the flight-booking server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F189ysv94g8mwtzklj4b0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F189ysv94g8mwtzklj4b0.png" alt="Panggil tools di Roo Code" width="418" height="657"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mengakses resources:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Get airport information using the flight-booking MCP server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbcwn8h8srde67xb5sd8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbcwn8h8srde67xb5sd8.png" alt="Akses resource di Roo Code" width="416" height="661"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Menjalankan booking:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Book flight FL123 &lt;span class="k"&gt;for &lt;/span&gt;John Doe using flight-booking server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;❓Punya pertanyaan, saran, atau menemukan bagian yang perlu diperbaiki? Silakan tulis di kolom komentar, aku dengan senang hati menanggapi. Terima kasih sudah mengikuti panduan ini sampai selesai&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
    </item>
    <item>
      <title>Data Leakage pada Machine Learning</title>
      <dc:creator>Hafid Nur</dc:creator>
      <pubDate>Sun, 28 Dec 2025 13:45:22 +0000</pubDate>
      <link>https://dev.to/hafidnrzs/data-leakage-pada-machine-learning-3c2p</link>
      <guid>https://dev.to/hafidnrzs/data-leakage-pada-machine-learning-3c2p</guid>
      <description>&lt;p&gt;Ada suatu utas di Threads yang bilang kalau sering banget &lt;em&gt;mentee-mentee&lt;/em&gt; melakukan kesalahan basic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4x0k1kpm50sv7c88tk4y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4x0k1kpm50sv7c88tk4y.png" alt="Threads post dari math_adventurer" width="676" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Urutannya sepertinya sudah sesuai: Exploratory Data Analysis (EDA), preprocessing, split dataset, buat model, dan evaluasi. Penasaran dong salahnya ada di mana?&lt;/p&gt;

&lt;p&gt;Setelah menyimak beberapa jawaban, ternyata masalahnya ada di data testing yang seharusnya tidak diketahui oleh model saat training, tetapi justru sudah bocor ke dalam data training. Dalam Machine Learning, ini disebut &lt;strong&gt;Data Leakage&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Di &lt;a href="https://medium.com/@speaktoharisudhan/data-leakage-in-machine-leaning-c382b65f4c09" rel="noopener noreferrer"&gt;artikel Medium ini&lt;/a&gt; dijelaskan lebih lengkap tentang Data Leakage. Masalah ini tergolong dalam &lt;em&gt;Train-Test Contamination&lt;/em&gt; di mana informasi pada data testing, seperti nilai rata-rata, itu sudah terhitung saat proses standarisasi. Jadi, model sudah tahu sebaran data testing selama melakukan pelatihan.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhtr22r3m9h6beaxu5xi8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhtr22r3m9h6beaxu5xi8.png" alt="Test set nyontek train set" width="800" height="592"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lebih lengkapnya, ini adalah formula untuk melakukan standarisasi. Diperlukan data mean (rata-rata) dan deviasi standar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6683paynx7zhyvx6sipe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6683paynx7zhyvx6sipe.png" alt="Standard deviation formula" width="309" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jika proses standarisasi dilakukan sebelum memisahkan data menjadi train dan test set, maka nilai rata-rata dan deviasi standar dihitung dari keseluruhan data. Hal ini menyebabkan model secara ga langsung &lt;em&gt;mengintip&lt;/em&gt; informasi dari data testing saat proses training.&lt;/p&gt;

&lt;p&gt;Agar tidak terjadi kebocoran, langkah yang benar yaitu: pisahkan dulu data menjadi train dan test set. Kemudian, fit scaler hanya pada data training, dan gunakan scaler itu untuk mentransformasi saat proses testing. Dengan begitu, model tetap "buta" terhadap data testing selama proses pelatihan.&lt;/p&gt;

</description>
      <category>machinelearning</category>
    </item>
  </channel>
</rss>
