Tutorial MCP Server dengan Python: Hubungkan Internal API ke LLM
AP
Adrian Prat

Dipublikasikan 30 Juni 2026

Tutorial MCP Server dengan Python: Hubungkan Internal API ke LLM

Model Context Protocol (MCP) adalah protokol terbuka yang memungkinkan LLM application terhubung ke sumber data dan tool eksternal secara standar. Dikenalkan oleh Anthropic, MCP sering diibaratkan sebagai USB-C untuk AI integrations. Artikel ini adalah tutorial praktis membangun MCP server menggunakan Python SDK resmi agar internal API perusahaan Anda bisa diakses Claude dan LLM lainnya.

MCP memecahkan masalah fragmentasi integrasi. Alih-alih setiap LLM vendor membuat plugin proprietary, MCP menyediakan satu protokol umum untuk mengekspos tool, resource, dan prompt. Host seperti Claude Desktop, Cursor, atau IDE lain yang mendukung MCP bisa langsung menggunakan server yang Anda bangun.

Prasyarat dan Instalasi

Pastikan Python 3.10 atau lebih baru sudah terinstall. Gunakan uv atau pip untuk menginstall SDK:

uv add "mcp[cli]"
# atau
pip install "mcp[cli]"

SDK ini menyediakan decorator-based API yang memungkinkan Anda mendefinisikan tool dan resource hanya dengan type-hinted Python functions. Tidak perlu menulis JSON Schema manual atau boilerplate protocol handling.

Membangun Server MCP Pertama

Buat file server.py dengan konten berikut:

from mcp.server import MCPServer

mcp = MCPServer("Demo")

@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers."""
    return a + b

@mcp.resource("greeting://{name}")
def greeting(name: str) -> str:
    """Greet someone by name."""
    return f"Hello, {name}!"

Itu sudah cukup sebagai server MCP lengkap: satu tool dan satu templated resource. Decorator @mcp.tool() mengekspos fungsi sebagai callable tool, sementara @mcp.resource() mengekspos data dengan URI scheme. Type hints secara otomatis menjadi JSON Schema untuk validasi input.

Menghubungkan Internal API sebagai Tool

Sekarang kita akan membuat tool yang benar-benar berguna: mengakses internal API perusahaan. Anggap Anda punya REST API internal untuk manajemen user.

import httpx
from mcp.server import MCPServer

mcp = MCPServer("InternalAPI")

@mcp.tool()
async def get_user(user_id: int) -> dict:
    """Fetch user details from internal API by user ID."""
    async with httpx.AsyncClient() as client:
        resp = await client.get(f"http://internal-api.company.local/users/{user_id}")
        resp.raise_for_status()
        return resp.json()

@mcp.tool()
async def search_users(query: str, limit: int = 10) -> list:
    """Search users by name or email."""
    async with httpx.AsyncClient() as client:
        resp = await client.get(
            "http://internal-api.company.local/users/search",
            params={"q": query, "limit": limit}
        )
        resp.raise_for_status()
        return resp.json()

Dengan dua tool ini, LLM bisa mengambil data user spesifik atau melakukan pencarian berdasarkan nama dan email. Semua otentikasi dan otorisasi internal tetap berada di sisi API Anda, bukan diprompt LLM.

Testing dengan MCP Inspector

Sebelum dihubungkan ke Claude Desktop, test server menggunakan MCP Inspector:

uv run mcp dev server.py

Command ini akan menjalankan Inspector di browser. Anda bisa memanggil tool get_user dengan parameter user_id=1 dan melihat response langsung. Ini mempercepat iterasi tanpa harus restart Claude Desktop berulang kali.

Menghubungkan ke Claude Desktop

Setelah server bekerja dengan baik, daftarkan ke Claude Desktop melalui file konfigurasi. Di macOS, file ini berada di direktori Application Support pada Library pengguna. Tambahkan entry berikut:

{
  "mcpServers": {
    "internal-api": {
      "command": "uv",
      "args": ["run", "--with", "mcp", "python", "/path/to/server.py"]
    }
  }
}

Restart Claude Desktop. Sekarang Claude bisa memanggil tool get_user dan search_users secara otomatis ketika conversation membutuhkannya. Anda akan melihat indicator tool use di UI Claude saat request sedang diproses.

Best Practice Keamanan

  • Jangan ekspos API key atau kredensial langsung di code. Gunakan environment variable atau secret manager.

  • Terapkan rate limiting di sisi API internal. LLM bisa membuat banyak request dalam satu conversation.

  • Gunakan scope minimal. Hanya ekspos endpoint yang benar-benar dibutuhkan LLM, jangan memberikan akses write tanpa approval manusia.

  • Log semua tool invocation. Audit trail penting untuk debugging dan compliance.

Integrasi dengan IDE Lain

Selain Claude Desktop, MCP server yang Anda bangun juga bisa digunakan oleh IDE lain yang mendukung protokol ini. Contohnya Cursor dan Windsurf sudah mulai mengadopsi MCP untuk memperluas kemampuan AI coding assistant mereka. Konfigurasi di masing-masing IDE sedikit berbeda, tetapi prinsipnya sama: daftarkan server Anda beserta command untuk menjalankannya.

Untuk Cursor, biasanya Anda perlu mengedit file konfigurasi JSON di direktori pengguna dan restart aplikasi. Setelah terdaftar, tool Anda muncul sebagai available actions saat AI assistant sedang memproses request pengguna.

Resource dan Prompt di MCP

Selain tool, MCP juga mendukung resource dan prompt. Resource adalah data read-only yang bisa diakses LLM, seperti file konfigurasi, schema database, atau dokumen API. Prompt adalah template conversation yang bisa digunakan oleh host untuk memulai interaksi dengan user.

Contoh resource sederhana:

@mcp.resource("docs://api-reference")
def api_docs() -> str:
    with open("api-reference.md") as f:
        return f.read()

Dengan resource ini, LLM bisa mengakses dokumentasi API terbaru tanpa perlu hardcode di prompt. Ini sangat berguna saat dokumentasi sering berubah.

Komunitas dan Ekosistem

Ekosistem MCP berkembang sangat cepat. Di GitHub, ada ratusan repositori server MCP open source yang mencakup integrasi dengan database populer, platform cloud, dan bahkan smart home devices. Komunitas aktif berbagi best practice, troubleshooting tips, dan template server di Discord resmi MCP contributors.

Jika Anda membangun server yang bermanfaat, pertimbangkan untuk open-sourcenya. Ini tidak hanya membantu developer lain, tetapi juga meningkatkan visibilitas tim Anda di komunitas AI engineering. Banyak perusahaan startup mendapatkan exposure signifikan hanya dengan merilis integration MCP yang well-documented.

Kesimpulan

MCP Server dengan Python SDK menurunkan barrier untuk menghubungkan internal system ke LLM. Dengan beberapa decorator dan type hints, Anda bisa mengekspos API internal sebagai tool yang aman dan terstruktur. Protokol ini berkembang pesat dan didukung oleh semakin banyak host dan client.

Dokumentasi lengkap Python SDK tersedia di py.sdk.modelcontextprotocol.io. Spesifikasi protokol resmi bisa dibaca di modelcontextprotocol.io. Untuk contoh server production-ready, explore repositori github.com/modelcontextprotocol/python-sdk.