Kembali ke Blog
Developer Tools

Panduan Lengkap Membuat Custom MCP Server Sendiri: Langkah Demi Langkah untuk Developer

Toolhub

Panduan Lengkap Membuat Custom MCP Server Sendiri: Langkah Demi Langkah untuk Developer

Apa Itu MCP Server dan Mengapa Anda Perlu Membuatnya Sendiri?

Model Context Protocol (MCP) adalah protokol terbuka untuk aplikasi AI. Protokol ini memungkinkan Claude, LangChain, dan tools AI lainnya mengakses data eksternal secara aman. Dengan MCP server, developer menghubungkan model AI ke database, API, atau layanan internal perusahaan secara terstandarisasi.

Membuat custom MCP server sendiri memberikan kontrol penuh. Anda menentukan data apa yang boleh diakses, bagaimana data diproses, dan mekanisme keamanan yang diterapkan. Server publik tidak menawarkan fleksibilitas ini, sehingga membuat protokol MCP menjadi pilihan ideal untuk integrasi AI yang aman dan terukur.

MCP server bekerja dengan arsitektur client-server. Aplikasi AI bertindak sebagai client yang mengirim permintaan. Server menyediakan resources dan tools yang dapat dipanggil. Protokol ini dirancang agar model AI memahami dan memanggil tools secara dinamis tanpa dokumentasi manual, menjadikannya fondasi yang kuat untuk server AI custom.

Persiapan Lingkungan Pengembangan dan Alat yang Dibutuhkan

Sebelum mulai, pastikan lingkungan pengembangan Anda siap. Langkah pertama adalah memastikan Python 3.10+ atau Node.js 18+ sudah terinstal. Kedua runtime ini didukung penuh oleh MCP SDK resmi, sehingga Anda bisa memilih antara membuat Python MCP server atau Node.js MCP server sesuai preferensi.

Instal library MCP SDK sesuai bahasa pemrograman Anda. Untuk Python, jalankan pip install mcp. Untuk Node.js, gunakan npm install @modelcontextprotocol/sdk. SDK ini menyediakan komponen untuk membangun server yang kompatibel dengan protokol MCP.

Siapkan editor kode seperti VS Code. Siapkan juga terminal untuk menjalankan server. Buat direktori proyek baru dan inisialisasi environment virtual untuk Python atau package.json untuk Node.js. Pastikan Anda memiliki akses ke tools debugging seperti mcp-cli. Tools ini berguna untuk menguji server secara lokal tanpa client penuh.

Membuat Struktur Dasar MCP Server dengan Python

Mulailah dengan membuat file utama server.py. Impor kelas Server dari library mcp. Inisialisasi server dengan nama unik, misalnya MyCustomServer. Nama ini menjadi identitas server saat berkomunikasi dengan client.

Definisikan handler untuk koneksi client menggunakan decorator @server.list_tools() dan @server.call_tool(). Decorator pertama mendaftarkan tools yang tersedia. Decorator kedua menangani eksekusi tool ketika dipanggil oleh client.

Implementasikan fungsi run() untuk menjalankan server menggunakan transportasi standar. MCP mendukung dua jenis transportasi: stdio untuk komunikasi melalui standard input/output, dan SSE (Server-Sent Events) untuk koneksi jarak jauh melalui HTTP.

Berikut contoh kode ilustratif server dengan tool greet:

from mcp import Server, Tool

server = Server("MyCustomServer")

@server.list_tools()
async def list_tools():
    return [
        Tool(
            name="greet",
            description="Menyapa pengguna dengan nama",
            input_schema={
                "type": "object",
                "properties": {
                    "name": {"type": "string", "description": "Nama pengguna"}
                },
                "required": ["name"]
            }
        )
    ]

@server.call_tool()
async def call_tool(name: str, arguments: dict):
    if name == "greet":
        return {"content": f"Halo, {arguments['name']}! Selamat datang di MCP server."}

if __name__ == "__main__":
    server.run()

Catatan: Kode di atas bersifat ilustratif. Untuk sintaksis yang paling akurat, selalu merujuk pada dokumentasi resmi MCP SDK.

Menambahkan Resources dan Tools Kustom ke Server

Resources adalah data yang dapat dibaca client. Contohnya file, database query, atau response dari API eksternal. Gunakan decorator @server.list_resources() untuk mendaftarkan resources. Setiap resource harus memiliki URI unik dan tipe konten yang jelas.

Tools adalah fungsi yang dapat dieksekusi client. Setiap tool harus memiliki nama, deskripsi, dan skema input menggunakan JSON Schema. Skema ini memberi tahu model parameter apa yang diperlukan dan tipe datanya.

Berikut contoh implementasi tool get_weather yang memanggil API cuaca:

@server.list_tools()
async def list_tools():
    return [
        Tool(
            name="get_weather",
            description="Mendapatkan informasi cuaca untuk suatu kota",
            input_schema={
                "type": "object",
                "properties": {
                    "city": {"type": "string", "description": "Nama kota"}
                },
                "required": ["city"]
            }
        )
    ]

@server.call_tool()
async def call_tool(name: str, arguments: dict):
    if name == "get_weather":
        # Fungsi untuk memanggil API cuaca eksternal
        weather_data = await fetch_weather(arguments["city"])
        return {"content": f"Cuaca di {arguments['city']}: {weather_data['temperature']}°C"}

Catatan: Fungsi fetch_weather dalam contoh di atas adalah placeholder yang perlu diimplementasikan sesuai dengan API cuaca yang Anda gunakan.

Pastikan setiap tool memiliki deskripsi yang jelas. Model AI perlu memahami kapan dan bagaimana menggunakan tool tersebut. Dokumentasi yang baik meningkatkan akurasi pemanggilan tool.

Mengintegrasikan MCP Server dengan Aplikasi AI

Setelah server siap, hubungkan dengan aplikasi AI. Untuk Claude Desktop, konfigurasikan file claude_desktop_config.json. Tambahkan server kustom Anda di file ini. File tersebut memberi tahu Claude di mana server berada dan cara mengaksesnya.

Untuk integrasi dengan LangChain, gunakan pendekatan berbasis MCP client. Buat instance client yang terhubung ke server Anda. Tools akan otomatis tersedia untuk agent LangChain. Ini adalah cara efektif untuk menerapkan integrasi LangChain MCP.

Untuk koneksi jarak jauh, gunakan transportasi SSE dengan framework seperti FastAPI untuk Python atau Express untuk Node.js. SSE memungkinkan server berkomunikasi melalui HTTP. Server dapat diakses dari mana saja selama jaringan memungkinkan.

Pastikan server berjalan di port yang benar. Untuk pengembangan lokal, gunakan localhost. Uji koneksi dengan memanggil tool sederhana dari MCP client. Periksa response yang diterima. Jika response sesuai, integrasi berhasil.

Keamanan dan Praktik Terbaik dalam Mengelola MCP Server

Keamanan adalah aspek kritis dalam mengelola MCP server. Jangan pernah menyertakan kredensial atau API key langsung di kode server. Gunakan environment variables untuk menyimpan informasi sensitif seperti database credentials, API keys, dan token autentikasi.

Batasi akses tools dan resources hanya untuk client yang terautentikasi. Terapkan mekanisme otorisasi seperti token-based authentication atau OAuth. Pastikan hanya client yang sah yang dapat mengakses server Anda. Setiap request harus diverifikasi sebelum diproses.

Gunakan logging untuk memantau aktivitas server. Catat setiap pemanggilan tool, termasuk parameter yang digunakan dan hasilnya. Log ini berguna untuk audit dan troubleshooting.

Terapkan rate limiting pada tools yang mahal secara komputasi. Tools yang memanggil API eksternal berbayar juga perlu dibatasi. Ini mencegah penyalahgunaan yang menyebabkan biaya tidak terduga atau penurunan performa.

Dokumentasikan setiap tool dan resource dengan deskripsi yang jelas. Dokumentasi yang baik membantu model AI menggunakan tool dengan tepat. Dokumentasi juga membantu developer lain yang memelihara server di masa depan.

Debugging dan Troubleshooting Masalah Umum

Saat mengembangkan MCP server, Anda mungkin menghadapi berbagai masalah. Gunakan mcp-cli untuk menguji server secara interaktif. Tool ini memungkinkan Anda memanggil tools dan melihat response langsung dari terminal.

Periksa log server untuk melihat error. Contoh error yang umum adalah koneksi ditolak, timeout, atau format response yang salah. Log biasanya memberikan petunjuk jelas tentang masalah dan lokasinya.

Pastikan versi MCP SDK kompatibel antara server dan client. Gunakan versi terbaru dari SDK untuk menghindari masalah ketidakcocokan. Periksa dokumentasi resmi untuk informasi tentang perubahan breaking antar versi.

Beberapa masalah umum yang sering terjadi:

  • Port sudah digunakan oleh aplikasi lain
  • Firewall memblokir koneksi ke port server
  • Skema input tool tidak sesuai dengan yang diharapkan client
  • Server crash setelah koneksi pertama karena exception yang tidak tertangani

Jika server tidak merespon, periksa apakah server berjalan di background. Gunakan process manager seperti systemd atau supervisor. Process manager memastikan server tetap berjalan meskipun terjadi error.


Sudah berhasil membuat MCP server pertamamu? Bagikan pengalaman atau tantangan yang kamu hadapi di kolom komentar di bawah. Jangan lupa subscribe newsletter kami untuk mendapatkan tutorial developer AI terbaru setiap minggu!