MCP: Protokol yang Bikin AI Bisa Ngobrol Langsung dengan Database, Firebase, dan Grafana Anda
Model Context Protocol (MCP) adalah standar terbuka yang menghubungkan LLM dengan data dan tools eksternal — seperti USB-C untuk AI. Pelajari arsitektur, cara kerja, dan real-world setup saya: 11 MCP server dari MySQL, Firebase, Grafana LGTM, hingga Lighthouse.

- MCP: "USB-C" untuk AI
- Masalah yang Diselesaikan MCP
- Arsitektur MCP
- Tiga Primitif Utama
- Analogi Sederhana
- Transport Layer
- Lifecycle: Dari Handshake ke Operasi
- Initialization
- Discovery
- Operation
- Membuat MCP Server Sendiri
- Real-World Setup: 11 MCP Server Saya
- Siapa yang Sudah Adopsi?
- Kapan Harus Pakai MCP?
- Security Considerations
- Kesimpulan
- Referensi
MCP: "USB-C" untuk AI
"The best interface is one that disappears." — Don Norman
TL;DR
Model Context Protocol (MCP) adalah open protocol buatan Anthropic yang menstandardisasi cara AI terhubung ke data dan tools eksternal. Bayangkan seperti USB-C untuk AI — satu standar koneksi untuk semua.
Masalah yang Diselesaikan MCP
Sebelum MCP, setiap integrasi AI dengan tools eksternal harus dibuat custom satu per satu. Mau koneksi ke MySQL? Bikin sendiri. Mau akses Firebase? Bikin lagi. Grafana? Satu lagi.
Hasilnya? M x N integration problem — di mana M adalah jumlah AI apps dan N adalah jumlah tools.
Dengan MCP, masalah M x N menjadi M + N — setiap AI app hanya perlu satu MCP client, dan setiap tool hanya perlu satu MCP server.
Arsitektur MCP
MCP mengikuti arsitektur client-server yang terinspirasi dari Language Server Protocol (LSP). Tiga komponen utamanya:
MCP Host
Aplikasi AI yang mengoordinasi satu atau lebih MCP client. Contoh: Claude Desktop, Cursor, Claude Code.
MCP Client
Komponen yang menjaga koneksi ke MCP server. Setiap client punya koneksi 1:1 dengan satu server.
MCP Server
Program yang menyediakan konteks dan kemampuan ke AI. Bisa jalan lokal (stdio) atau remote (HTTP/SSE).
Tiga Primitif Utama
MCP server mengekspos tiga jenis kemampuan:
Prop
Type
Analogi Sederhana
| MCP Primitive | Analogi REST API | Contoh |
|---|---|---|
| Tools | POST /action | Kirim pesan Slack, buat GitHub issue |
| Resources | GET /data | Baca file, lihat schema database |
| Prompts | Swagger/OpenAPI docs | Template cara optimal gunakan tools |
Transport Layer
MCP mendukung dua metode transport:
Standard I/O — untuk MCP server yang jalan di mesin yang sama.
- Komunikasi via stdin/stdout
- Cepat dan synchronous
- Cocok untuk: Firebase, MySQL, Lighthouse, custom LGTM stack
{
"mcpServers": {
"firebase": {
"command": "npx",
"args": ["-y", "firebase-tools@latest", "mcp"]
},
"mysql": {
"command": "npx",
"args": ["-y", "@bytebase/dbhub", "--transport", "stdio",
"--dsn", "mysql://user:pass@127.0.0.1:3306/mydb"]
},
"lighthouse": {
"command": "npx",
"args": ["lighthouse-mcp"]
}
}
}HTTP + Server-Sent Events — untuk MCP server yang jalan remote.
- Komunikasi via HTTP request + SSE stream
- Mendukung real-time streaming
- Cocok untuk: SaaS documentation, Google APIs, cloud services
{
"mcpServers": {
"context7": {
"serverUrl": "https://mcp.context7.com/mcp"
},
"mintlify": {
"serverUrl": "https://docs.yourdomain.com/mcp"
},
"stitch": {
"serverUrl": "https://stitch.googleapis.com/mcp",
"headers": {
"X-Goog-Api-Key": "YOUR_API_KEY"
}
}
}
}Lifecycle: Dari Handshake ke Operasi
Initialization
Client mengirim initialize request dengan protocol version dan capabilities.
Server merespons dengan capabilities yang didukung.
// Client -> Server
{
"method": "initialize",
"params": {
"protocolVersion": "2025-11-25",
"capabilities": { "roots": { "listChanged": true } }
}
}Discovery
Client meminta daftar tools, resources, dan prompts yang tersedia.
// Client -> Server
{ "method": "tools/list" }
// Server -> Client
{
"tools": [
{
"name": "query_database",
"description": "Execute SQL query",
"inputSchema": { "type": "object", "properties": { "sql": { "type": "string" } } }
}
]
}Operation
LLM memanggil tools berdasarkan konteks percakapan.
// Client -> Server
{
"method": "tools/call",
"params": {
"name": "query_database",
"arguments": { "sql": "SELECT COUNT(*) FROM users WHERE active = true" }
}
}Membuat MCP Server Sendiri
Berikut contoh minimal MCP server menggunakan TypeScript dan Python:
npm init -y
npm install @modelcontextprotocol/sdk zodimport { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({
name: "weather-server",
version: "1.0.0",
});
// Definisikan tool
server.tool(
"get_weather",
"Get current weather for a city",
{ city: z.string().describe("City name") },
async ({ city }) => {
// Panggil weather API
const weather = await fetch(
`https://api.weather.example.com/${city}`
).then((r) => r.json());
return {
content: [
{
type: "text",
text: `Weather in ${city}: ${weather.temp}°C, ${weather.condition}`,
},
],
};
}
);
// Jalankan server via stdio
const transport = new StdioServerTransport();
await server.connect(transport);pip install mcp[cli] httpxfrom mcp.server.fastmcp import FastMCP
import httpx
mcp = FastMCP("weather-server")
@mcp.tool()
async def get_weather(city: str) -> str:
"""Get current weather for a city."""
async with httpx.AsyncClient() as client:
response = await client.get(
f"https://api.weather.example.com/{city}"
)
data = response.json()
return f"Weather in {city}: {data['temp']}°C, {data['condition']}"
if __name__ == "__main__":
mcp.run(transport="stdio")Jangan Pakai console.log!
Untuk server berbasis stdio, jangan gunakan console.log() karena akan
menulis ke stdout dan merusak JSON-RPC messages. Gunakan console.error()
atau logging library yang menulis ke stderr.
Real-World Setup: 11 MCP Server Saya
Ini bukan teori — berikut konfigurasi MCP yang saya pakai sehari-hari di Gemini CLI dan Claude Code:
Pelajaran dari Setup Ini
Perhatikan pola-nya: ada 3 tipe transport yang saya pakai:
- npx/uvx via stdio — untuk tools yang jalan lokal (Firebase, MySQL, Lighthouse)
- node custom script — untuk MCP server yang saya build sendiri (LGTM)
- Remote serverUrl — untuk SaaS services (Context7, Mintlify, Google Stitch)
Ketiganya bisa jalan bersamaan di satu AI host. Itulah kekuatan standar MCP.
Siapa yang Sudah Adopsi?
MCP bukan hanya standar Anthropic — ini sudah jadi industri standard:
| Company | Adopsi |
|---|---|
| Anthropic | Creator, Claude Desktop & Claude Code native support |
| OpenAI | Adopsi resmi Maret 2025, terintegrasi di ChatGPT Desktop |
| Cursor | IDE AI pertama yang full support MCP |
| Block | Goose AI agent dengan MCP apps |
| Linux Foundation | MCP didonasikan ke Agentic AI Foundation (AAIF) |
97 Juta Downloads
Per Desember 2025, MCP SDK sudah mencapai 97 juta monthly downloads di semua bahasa pemrograman. Ini bukan eksperimen — ini production-grade protocol.
Kapan Harus Pakai MCP?
Pakai MCP Ketika...
Anda ingin AI mengakses data/tools eksternal secara standar, reusable, dan aman. Contoh: coding assistant yang bisa query MySQL, deploy Firebase, dan audit Lighthouse sekaligus.
Jangan Pakai MCP Ketika...
Anda hanya butuh simple API call satu kali, atau data sudah bisa di-embed langsung ke prompt tanpa perlu real-time access.
Security Considerations
Keamanan MCP
MCP bukan berarti "buka semua akses". Beberapa prinsip keamanan penting:
- Principle of Least Privilege — Hanya expose tools yang benar-benar dibutuhkan
- Input Validation — Selalu validasi input dari LLM sebelum eksekusi
- Access Control — Batasi direktori, database, dan API yang bisa diakses
- User Confirmation — Untuk aksi destructive, minta konfirmasi user
- Audit Logging — Catat semua tool calls untuk accountability
Kesimpulan
MCP mengubah cara kita mengintegrasikan AI dengan dunia nyata. Dari yang sebelumnya harus membuat custom integration untuk setiap kombinasi AI app dan tool, sekarang cukup satu standar protokol.
Sebagai engineer, ini adalah momen yang mirip dengan kemunculan REST API — standar yang membuat ekosistem berkembang jauh lebih cepat karena semua berbicara dalam bahasa yang sama.
MCP bukan tentang membuat AI lebih pintar — tapi membuat AI lebih berguna.