LLM bisa generate teks keren. Tapi nggak bisa cek cuaca, query database, atau baca halaman Notion kamu — kecuali kamu yang nyambungin sendiri. MCP (Model Context Protocol) adalah standar terbuka yang ngasih LLM cara standar buat manggil tools dan akses data kamu. Bikin servernya cuma butuh sekitar 15 menit.
Apa Itu MCP
MCP itu protokol, bukan framework. Client (Claude Desktop, AI coding tool, apapun yang compatible MCP) connect ke server yang kamu tulis. Server kamu ekspos tools, resources, dan prompts. Servernya bisa manggil API, baca file, query database — apapun yang bisa kamu kode, LLM sekarang bisa trigger.
Kayak USB-C buat AI. Server yang sama, host manapun. Nggak perlu ubah wiring tiap ganti dari Claude ke ChatGPT ke setup Ollama lokal.
Prasyarat
- Python 3.10 ke atas (
python3 --versionbuat cek) uvataupipuntuk manajemen package- Claude Desktop (gratis) atau MCP Inspector (gratis, buat testing)
- 15 menit
Langkah 1: Install MCP Python SDK
SDK-nya dimaintain Anthropic. Per Juli 2026, v1.x adalah jalur stabil buat production. v2 masih pre-release dengan banyak perbaikan — stay di v1 kecuali kamu spesifik pengen fitur bleeding-edge.
mkdir weather-mcp && cd weather-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install "mcp>=1.0,<2"
Upper bound <2 ini penting. Tanpa itu, pip bisa resolve ke v2 pre-release suatu hari nanti, yang punya breaking changes.
Langkah 2: Tulis Server
Bikin server.py. Satu tool, satu tugas: balikin data cuaca untuk kota yang diminta. Kita pake data mock buat demo.
from mcp.server import Server
from mcp.server.stdio import stdio_server
import asyncio
server = Server("weather-server")
@server.tool()
async def get_weather(city: str) -> str:
"""Dapetin cuaca terkini untuk kota yang diminta."""
weather_data = {
"jakarta": "32°C, berawan sebagian, kelembaban 75%",
"singapore": "30°C, badai petir, kelembaban 85%",
"tokyo": "22°C, cerah, kelembaban 45%",
"london": "15°C, hujan ringan, kelembaban 80%",
}
return weather_data.get(
city.lower(),
f"Nggak ada data buat {city}. Coba Jakarta, Singapore, Tokyo, atau London."
)
async def main():
async with stdio_server() as (read_stream, write_stream):
await server.run(read_stream, write_stream)
if __name__ == "__main__":
asyncio.run(main())
Itu adalah MCP server yang komplit. SDK nanganin transport JSON-RPC, generate JSON Schema dari type hints kamu, dan validasi input. Kamu nggak nulis semua kode infrastruktur itu.
Langkah 3: Test dengan MCP Inspector
Sebelum nyambung ke Claude, test mandiri dulu. MCP Inspector adalah tool debugging berbasis browser yang connect ke server MCP manapun.
npx @modelcontextprotocol/inspector python3 server.py
Ini buka tab browser. Tool get_weather kamu muncul di UI. Coba masukin city: "tokyo" — hasilnya langsung keluar.
Langkah 4: Tambah Resource
Tools buat aksi. Resources buat data. Kita tambah resource yang nge-list kota yang tersedia.
@server.resource("weather://cities")
async def list_cities() -> str:
"""List semua kota yang punya data cuaca."""
return "jakarta, singapore, tokyo, london"
Sekarang LLM bisa tanya "kota apa aja yang kamu punya?" tanpa manggil tool. Resources sifatnya read-only — kebanyakan host nggak perlu persetujuan user buat akses resource.
Langkah 5: Connect ke Claude Desktop
Claude Desktop udah include MCP support. Buka file config:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"weather": {
"command": "python3",
"args": ["/path/absolut/ke/weather-mcp/server.py"]
}
}
}
Pake absolute path — relative path dan ~ nggak jalan di config ini. Restart Claude Desktop. Ketik "berapa cuaca di Tokyo?" — Claude seharusnya detect tool kamu, minta izin, dan balikin hasilnya.
Kalau Claude nggak detect, cek Developer > MCP Logs di dalam Claude Desktop.
Kapan Pakai MCP vs Alternatif
MCP bukan satu-satunya jalan buat ngasih tools ke LLM. Ini panduan praktisnya.
Pakai MCP kalau:
- Beberapa aplikasi AI perlu tools dan data source yang sama
- Kamu pengen satu tool server yang jalan di Claude, ChatGPT, Cursor, dan host MCP di masa depan
- Kamu bangun kapabilitas platform internal yang perlu dipake ulang tim berbeda
Skip MCP kalau:
- Kamu prototyping tool single-use buat satu aplikasi spesifik
- Kamu udah dalem di framework yang punya sistem tools sendiri (LangChain tools, OpenAI function calling dengan Assistants API)
- Tool kamu perlu latency sub-milidetik embedded di runtime aplikasi
MCP plus framework tools seringkali jawaban yang tepat. Pake MCP buat kapabilitas broad (akses database, filesystem, API). Pake framework-native tools buat logika spesifik aplikasi yang nggak perlu dishare.
Kesalahan Umum
Nge-print ke stdout dari server. Transport stdio pake stdout buat JSON-RPC messages. print() iseng bakal ngerusak protokol. Pake logging ke stderr — SDK nyediain server.logger buat ini.
Lupa upper bound <2 waktu install. Pip resolve ke v1.x sekarang, tapi begitu v2 stable, install tanpa pin langsung switch behavior tanpa peringatan.
Pake relative path di Claude Desktop config. Config parser nggak expand ~ atau resolve relative path. Full path aja.
Nggak ada error handling di tools. Unhandled exception di tool kamu ngasih LLM generic error tanpa konteks berguna. Wrap API calls dalam try/except dan return pesan error yang bisa dibaca manusia.
Langkah Selanjutnya
- Ganti data mock dengan API beneran — OpenWeatherMap free tier ngasih 1.000 panggilan per hari
- Bikin database server yang ngasih Claude akses query PostgreSQL atau SQLite lewat MCP
- Jelajah registry MCP server — ratusan server siap pakai untuk GitHub, Slack, filesystem, dan lainnya
- Coba MCP Python SDK v2 pre-release kalau kamu pengen streaming, Elicitation API, dan error handling yang lebih baik