Cara membangun server MCP

Penyusun

Ash Minhas

Manager, Technical Content | AI Advocate

IBM

PJ Hagerty

Lead, AI Advocacy

IBM

Erika Russi

Data Scientist

IBM

Dalam tutorial ini, Anda akan membuat [Model Context Protocol] yang sederhana (https://www.ibm.com/id-id/think/topics/model-context-protocol). (MCP) server yang mengekspos alat tunggal untuk mencari tutorial IBM. Dengan menggunakan kerangka kerja fastmcp dan pustaka permintaan, skrip mengunduh indeks JSON tutorial dari URL jarak jauh. Kemudian mencari kecocokan dengan kueri pengguna dan mengembalikan daftar hasil yang diformat dengan rapi. Anda juga akan menambahkan penanganan kesalahan untuk masalah jaringan, JSON yang buruk, dan masalah yang tidak terduga, menjadikan alat ini kuat dan ramah bagi pemula. Terakhir, Anda akan menjalankan server MCP sehingga dapat dihubungkan dan diuji dengan klien seperti Cursor.

Apa itu MCP?

Perusahaan dan pengembang perusahaan rintisan semakin mengembangkan solusi berbasis [kecerdasan buatan] (AI) generatif (https://www.ibm.com/id-id/think/topics/artificial-intelligence) . Untuk membuat solusi mereka lebih berguna, mereka membutuhkan informasi dan konteks terkini. [model] Machine learning(https://www.ibm.com/id-id/think/topics/ai-model) perlu berinteraksi dengan alat, [antarmuka pemrograman aplikasi] (https://www.ibm.com/id-id/think/topics/api)(APIs), kit pengembangan perangkat lunak (SDK) dan sistem front-end agar terjadi.

MCP menstandardisasi bagaimana konteks diteruskan di antara model dan sistem AI. Ini menyederhanakan koordinasi di [model bahasa besar] (https://www.ibm.com/id-id/think/topics/large-language-models) (LLM) dan sumber data eksternal dan alat. Analogi yang umum adalah untuk membayangkan MCP seperti port USB-C untuk LLM. Mereka membuat LLM jauh lebih berguna karena model ini memiliki akses ke kemampuan dan data yang bukan bagian dari pelatihan model. Kemampuan ini sangat berguna saat membangun [agen AI] (https://www.ibm.com/id-id/think/topics/ai-agents).

MCP dikembangkan oleh Anthropic dan diadopsi oleh penyedia AI besar termasuk OpenAI, Google DeepMind, dan industri yang lebih luas. Server ini menyediakan cara yang aman dan terstandardisasi bagi model AI untuk mengakses dan menggunakan data eksternal, sumber daya (seperti prompt), dan alat.

Lebih jauh lagi, lingkungan pengembangan terintegrasi (IDE) seperti Cursor dan Visual Studio Code juga telah mengadopsi MCP, memungkinkan asisten AI mereka mengakses server MCP untuk membuat penggunaannya lebih relevan dengan konteks dan ramah pengembang. Dibangun sebagai standar terbuka, organisasi menggunakan MCP untuk bertindak sebagai jembatan antara dunia stokastik AI generatif dan dunia deterministik sebagian besar sistem perusahaan yang ada saat ini. MCP menyediakan LLM dengan informasi kontekstual yang mirip dengan pola desain lain yang mulai muncul seperti retrieval augmented generation (RAG), [pemanggilan alat] (https://www.ibm.com/id-id/think/topics/tool-calling) dan agen AI.

Beberapa keuntungan menggunakan MCP dibandingkan dengan solusi lain ini meliputi:

- Skala: Server MCP dapat didefinisikan dan dihosting sekali dan digunakan oleh banyak sistem AI. Kapasitas ini membatasi kebutuhan untuk menentukan akses ke sumber data, sumber daya, dan alat AI yang sama untuk beberapa sistem AI generatif.

- Pengambilan data: Tidak seperti RAG di mana pengambilan data memerlukan preprocessing dan vektorisasi sebelum kueri, MCP bersifat dinamis dan memungkinkan fluktuasi dan pembaruan dari sumber informasi secara real-time.

- Kompleksitas: MCP cukup sederhana untuk diatur dan dimasukkan ke dalam aplikasi AI, seperti yang kami tunjukkan di sini. Anda dapat menggunakan file konfigurasi dengan mudah untuk membuat server MCP portabel di seluruh lingkungan.

- Tidak bergantung pada platform: Selain fakta bahwa Anda bisa membangun server MCP dengan Python, TypeScript, atau bahasa lainnya, server ini juga tidak terikat pada solusi LLM tertentu.

- Debug melalui model klien/server: Klien MCP mengirimkan permintaan ke server MCP, yang kemudian mengambil data yang diperlukan dari berbagai sistem dan sumber eksternal—apakah itu API, basis data, atau file lokal. Pendekatan terstruktur ini memastikan bahwa model AI menerima konteks yang konsisten dan relevan, yang mengarah ke output yang lebih akurat dan andal. MCP menggunakan JSON-RPC untuk mengodekan pesan dan mendukung 2 mekanisme transportasi, stdio dan HTTP streamable. Dalam iterasi protokol sebelumnya, juga mendukung HTTP dengan server-sent events (SSE)

Kebutuhan untuk terus mengikuti informasi terbaru yang dibutuhkan perusahaan Anda bisa menakutkan. MCP dapat membantu membangun konteks dan memasukkan informasi baru untuk kontrak saat kontrak dijalankan, informasi lama yang sedang didigitalkan namun belum tentu dapat dicerna, dan masih banyak lagi. Informasi tersebut dapat berupa informasi internal maupun eksternal, tetapi menambahkan konteks akan mengurangi kebutuhan yang memakan waktu untuk melatih ulang LLM agar dapat berguna.

Ada banyak server MCP jarak jauh yang tersedia serta banyak implementasi referensi dari github.com

Langkah-langkah

Panduan langkah demi langkah ini dapat ditemukan di repositori GitHub kami bersama dengan server.py skrip yang akan Anda referensikan saat membuat server MCP Anda. Dalam tutorial ini kita akan membahas pembuatan server MCP khusus dasar yang dapat:

  • Terhubung ke repositori tutorial GitHub kami
  • Melakukan pencarian untuk topik yang mungkin diminati pengguna
  • Menampilkan hasil dengan tautan ke tutorial

Untuk memfasilitasi pembuatan tutorial ini, kami telah membuat mekanisme yang memungkinkan server yang akan Anda bangun dapat dengan mudah mengonsumsi konten tutorial kami tanpa perlu autentikasi.

Langkah 1. Siapkan lingkungan Anda

- Python 3.11 atau yang lebih baru diinstal di komputer Anda (periksa dengan menjalankan python3 --versi di terminal Anda).

- Modul venv bawaan tersedia (dilengkapi dengan Python di sebagian besar sistem; pada beberapa distribusi Linux Anda mungkin perlu menginstalnya secara terpisah dengan sudo apt install python3-venv).

- Terminal baris perintah (CLI):

- macOS atau Linux: gunakan aplikasi Terminal Anda (lingkungan ini mirip Unix).

- Windows: gunakan PowerShell atau prompt, dengan perbedaan sintaks kecil dijelaskan dalam langkah selanjutnya.

- Editor teks atau IDE pilihan Anda 

Buat direktori baru dan cd ke dalamnya

  mkdir ibmtutorialmcpserver  dan cd ibmtutorialmcpserver

Pastikan bahwa Anda berada di direktoriibmtutorialmcpserver Anda dapat menjalankan perintah berikut untuk membuat lingkungan virtual 

python3 -m venv venv 

Catatan: Di Windows, Anda mungkin dapat menggantipython3 dengan python

Setelah Anda membuat lingkungan virtual, Anda perlu mengaktifkannya dengan menggunakan perintah berikut

source venv/bin/activate

Setelah diaktifkan, shell Anda kemungkinan akan menunjukkan kepada Anda(venv) dalam prompt 

Sekarang Anda perlu menginstal paket Python untukfastMCP . Kerangka kerja sumber terbuka ini menyediakan semua fitur yang diperlukan untuk menjalankan server MCP dan dipelihara secara aktif. Kami juga akan menginstalrequests package  untuk membuat permintaan HTTP sederhana

InstalfastMCP danrequests paket denganpip dengan menggunakan perintah berikut

pip install fastmcp requests

Setelah langkah ini selesai, Anda dapat memeriksa apakah fastMCP telah terinstal dengan benar dengan menjalankan perintah berikut

fastmcp version

Jika Anda mendapatkan output yang mirip dengan di bawah ini, Anda telah menginstal fastMCP di lingkungan virtual Anda.

FastMCP version:                                       2.10.1
MCP version:                                           1.10.1
Python version:                                       3.11.13
Platform:                          macOS-15.5-arm64-arm-64bit
FastMCP root path: /opt/homebrew/lib/python3.11/site-packages

Sekarang Anda telah menginstal FastMCP, mari buat server MCP kita.

Langkah 2. Buat server MCP

Buat file baru di direktori dan beri namaserver.py .

Setelah Anda memiliki file, buka file tersebut dan salin serta tempelkan potongan kode berikut ini ke dalamnya

# Simple MCP server that exposes a single tool to search IBM tutorials.
# How to run:
# 1) Install dependencies: pip install fastmcp requests
# 2) Start the server using an MCP client with the command: fastmcp run <YOUR PATH>/server.py

from fastmcp import FastMCPimport requests

# Source of the tutorials index 
DOCS_INDEX_URL = "https://raw.githubusercontent.com/IBM/ibmdotcom-tutorials/refs/heads/main/docs_index.json"


mcp = FastMCP("IBM Tutorials")

@mcp.tool
def search_ibmtutorials(query: str) -> str:
    """
    Search for tutorials on GitHub by downloading a JSON file from a GitHub repo and searching the payload for any relevant results and the respective details

Args:
    query: The search term to look for in tutorial titles and URLs

Returns:
    A formatted list of relevant tutorial results
    """
    try:
        # Download the JSON file from the GitHub repo
        response = requests.get(DOCS_INDEX_URL, timeout=10)
        response.raise_for_status() # Raise an exception for bad status codes

        # Parse the JSON data
        tutorials = response.json()

        # Search for relevant tutorials (case-insensitive)
        query_lower = query.lower()
        relevant_tutorials = []

        for tutorial in tutorials:
            # Search in title and URL
            title = tutorial.get('title', '').lower()
            url_path = tutorial.get('url', '').lower()

            if query_lower in title or query_lower in url_path:
                relevant_tutorials.append(tutorial)

        # Format and return results
        if not relevant_tutorials:
            return f"No IBM tutorials found matching '{query}'"

        # Format the results
            result_lines = [f"Found {len(relevant_tutorials)} tutorial(s) matching '{query}':\n"]

        for i, tutorial in enumerate(relevant_tutorials, 1):
            title = tutorial.get('title', 'No title')
            tutorial_url = tutorial.get('url', 'No URL')
            date = tutorial.get('date', 'No date')
            author = tutorial.get('author', '')

            result_lines.append(f"{i}. **{title}**")
            result_lines.append(f" URL: {tutorial_url}")
            result_lines.append(f" Date: {date}")
            if author:
                result_lines.append(f" Author: {author}")
            result_lines.append("") # Empty line for spacing

        return "\n".join(result_lines)

    except requests.exceptions.RequestException as e:
    return f"Error fetching tutorials from GitHub: {str(e)}"
    except ValueError as e:
    return f"Error parsing JSON data: {str(e)}"
    except Exception as e:
    return f"Error searching IBM tutorials: {str(e)}"


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

Mari kita lihat kode sebelumnya dan menjelaskan apa yang dilakukan bagian-bagian utama. 

Impor dan penyiapan

Skrip dimulai dengan mengimpor FastMCP, yang menyediakan kerangka kerja untuk membuat server MCP, dan permintaan, yang digunakan untuk mengunduh data melalui HTTP. Kami telah menambahkan konstantaDOCS_INDEX_URL untuk menahan URL JSON jarak jauh untuk indeks tutorial. Pendekatan ini memudahkan untuk mengubah lokasi sumber jika Anda memiliki sumber data JSON lain yang ingin Anda gunakan kembali untuk tutorial ini nanti.

Menyiapkan server MCP

Kami kemudian membuat instans server MCP denganFastMCP(“IBM Tutorials”) . Langkah ini bertindak sebagai pengontrol pusat untuk semua alat yang akan diekspos server ke klien MCP, sepertisearch_ibmtutorials alat yang kami definisikan.

Mendefinisikan alat MCP

Kemampuan@mcp.tool tanda dekorator search_ibmtutorials  sebagai alat MCP. Fungsi ini mengambil istilah pencarian, mengunduh indeks tutorial dariDOCS_INDEX_URL  dengan menggunakanrequests.get() (dengan batas waktu 10 detik untuk keamanan jaringan) dan memunculkan pengecualian jika status respons HTTP menunjukkan kesalahan. Setelah diambil, data itu diurai dari JSON menjadi objek Python.

Pencarian tidak sensitif terhadap huruf besar-kecil: kueri dikonversi menjadi huruf kecil, dan setiap judul tutorial dan URL juga diperkecil untuk pencocokan. Jika tutorial berisi istilah pencarian di judul atau URL, maka ditambahkan ke daftar hasil yang relevan.

Memformat dan menampilkan hasil

Jika tidak ada tutorial yang cocok dengan pencarian, fungsi menampilkan pesan ramah yang menunjukkan bahwa tidak ada yang ditemukan. Jika ada kecocokan, fungsi ini akan membuat daftar bernomor yang diformat yang menampilkan judul, URL, tanggal, dan, jika ada, penulisnya. Pemformatan menggunakan huruf tebal bergaya Markdown untuk judul sehingga tampak menonjol di klien yang mendukungnya. Teks yang diformat akhir ditampilkan sebagai string tunggal.

Penanganan kesalahan

Fungsi ini mencakup penanganan pengecualian yang ditargetkan:

requests.exceptions.RequestException menangkap masalah jaringan seperti waktu habis atau koneksi yang buruk.

ValueError  (yang dapat diajukan oleh.json ()) menangkap kasus di mana responsnya bukan JSON valid.

PenanganException  umum menangkap hal lain yang tidak terduga.

Setiap kesalahan menampilkan pesan deskriptif pada pemanggil alih-alih menghentikan program.

Memulai server

Di bagian bawah,if name == “main” : blok memastikan bahwamcp.run() dieksekusi hanya ketika skrip dijalankan secara langsung. Langkah ini akan memulai server MCP, membuat alatsearch_ibmtutorials  tersedia untuk klien MCP mana pun, seperti Pemeriksa MCP. Alat ini berguna untuk memecahkan masalah dan melakukan debug pada server MCP Anda. Alat ini menyediakan UI yang dapat Anda gunakan untuk melakukan debug pada server MCP dan memvalidasi perilaku yang diharapkan. 

Langkah 3. Tambahkan server MCP Anda ke IDE Anda

Sekarang setelah membangun server, Anda perlu mengaktifkannya di IDE sebelum Anda dapat menggunakannya. Ada banyak klien yang mendukung MCP dengan berbagai tingkat integrasi dengan protokol. Situs web resmi MCP menyediakan daftar lengkap contoh klien.
Jika Cursor telah diinstal, Anda dapat menambahkan server MCP dalam Cursor dengan mengikuti petunjuk ini.

Buka pengaturan Cursor dan arahkan ke Tool & Integrations. Pilih New MCP Server dan tempel ke file mcp.json yang dibuka Cursor di tab baru. Pastikan Anda mengganti <YOUR PATH> dengan direktori tempat Anda berada. Anda dapat menjalankan pwd di terminal Anda untuk mendapatkan jalur lengkap. Untuk informasi lebih lanjut tentang Cursor dan MCP, lihat dokumen Cursor.

{
  &quot;mcpServers&quot;: {
    &quot;tutorials&quot;: {
      &quot;command&quot;: &quot;fastmcp&quot;,
      &quot;args&quot;: [&quot;run <YOUR PATH>/ibmtutorialmcpserver/server.py&quot;],
      &quot;env&quot;: {
      }
    }
  }
}

Jika Anda adalah pengguna Microsoft VS Code, Anda dapat menambahkan server MCP dengan menggunakan instruksi yang ditautkan di sini. Pastikan Copilot diatur dalam VS Code sebelum melanjutkan.
Jika Anda ingin mengaktifkan server MCP dengan menggunakan file, buat file .vscode/mcp.json di direktori proyek ini dan salin dan tempel kode ini ke dalam file. Pastikan Anda mengganti <YOUR PATH> dengan direktori tempat Anda berada. Anda dapat menjalankan pwd di terminal Anda untuk mendapatkan jalur lengkap.

&quot;servers&quot;: {
		&quot;IBM Tutorials&quot;: {
			&quot;type&quot;: &quot;stdio&quot;,
			&quot;command&quot;: &quot;fastmcp&quot;,
			&quot;args&quot;: [
				&quot;run&quot;,
				&quot;<YOUR PATH>/ibmtutorialmcpserver/server.py&quot;
			]
		},
	},

Langkah 4. Gunakan server MCP Anda

Sekarang setelah mengaktifkan server MCP Anda, mari jalankan server sehingga Anda dapat menggunakan alat yang dibuat di server.py. Jika Anda menggunakan VS Code, lihat dokumen ini.

Dalam obrolan IDE, saya akan bertanya “apa saja tutorial deret waktu IBM?” Berikut ini menunjukkan bahwa output diterima, tetapi respons Anda dapat bervariasi tergantung pada model yang digunakan dan IDE Anda.

Output:

Here are some IBM time series tutorials:

Time series forecasting with Lag-Llama (zero-shot learning)
Tutorial link
Predict overnight low temperatures using the Lag-Llama model in a zero-shot learning scenario.

Using the watsonx.ai Time Series Forecasting API to predict energy demand
Tutorial link
Predict energy demand with the watsonx.ai Time Series Forecasting API.
Authors: Aleksandra Kłeczek and Meredith Syed

Let me know if you want details or help with a specific tutorial.

Hebat! Agen tersebut mampu menggunakan alat search_ibmtutorials  yang kami buat untuk mencari tutorial yang terkait dengan deret waktu.

Ringkasan

Dalam tutorial ini, Anda telah belajar membangun server MCP untuk menelusuri semua tutorial kami dengan menggunakan klien MCP apa pun yang Anda sukai. Anda membuat server MCP dengan alat pencarian tunggal yang mengambil indeks tutorial JSON jarak jauh, memfilter hasil berdasarkan istilah pencarian, dan menampilkannya dalam format yang dapat dibaca. Alat ini menggunakan fastmcp untuk mendaftar dan menjalankan alat, permintaan untuk mengambil data dan termasuk penanganan kesalahan untuk jaringan, penguraian, dan masalah yang tidak terduga. Saat dijalankan, server dapat dihubungkan oleh klien MCP untuk kueri langsung dari semua tutorial kami.

Solusi terkait
Agen AI untuk bisnis

Bangun, terapkan, dan kelola asisten dan agen AI yang kuat yang mengotomatiskan alur kerja dan proses dengan AI generatif.

    Menjelajahi watsonx Orchestrate
    Solusi agen AI IBM

    Bangun masa depan bisnis Anda dengan solusi AI yang dapat Anda percaya.

    Jelajahi solusi agen AI
    Layanan AI IBM Consulting

    Layanan IBM Consulting AI membantu merancang ulang cara kerja bisnis dengan AI untuk transformasi.

    Jelajahi layanan kecerdasan buatan
    Ambil langkah selanjutnya

    Baik Anda memilih untuk menyesuaikan aplikasi dan keterampilan yang dibangun sebelumnya atau membangun dan menerapkan layanan agen khusus menggunakan studio AI, platform IBM watsonx siap membantu Anda.

    Menjelajahi watsonx Orchestrate Jelajahi watsonx.ai