Oleh: [Nama Kamu]
Dulu, setiap kali kita ingin AI mengakses data (misal: Google Drive), developer harus membuat integrasi khusus untuk setiap AI.
Developer cukup bikin satu Server MCP, bisa dipakai di mana saja.
AI bisa "melihat" data terbaru, bukan cuma data training lama.
Bukan cuma tanya jawab, AI bisa melakukan aksi (booking, kirim email, edit file).
Komunikasi via Standard Input/Output. Cocok untuk tools lokal.
Komunikasi via Server-Sent Events. Cocok untuk aplikasi web/cloud.
# 1. Install MCP SDK
npm install @modelcontextprotocol/sdk
# 2. (Opsional) Install Inspector untuk debugging
npm install -g @modelcontextprotocol/inspector
Requirements: Node.js v18+ atau Python 3.10+.
// 1. Inisialisasi Server
const server = new Server({
name: "my-mcp-server",
version: "1.0.0"
}, {
capabilities: { tools: {} }
});
// 2. Daftarkan Tool
server.setRequestHandler(
ListToolsRequestSchema,
async () => ({
tools: [/* toolDefinitions */]
})
);
Server: Menentukan identitas dan kemampuan server.
// 3. Handle Eksekusi
server.setRequestHandler(
CallToolRequestSchema,
async (request) => {
const { name, arguments: args } = request.params;
return await handleToolCall(name, args);
}
);
// 4. Connect Transport
const transport = new StdioServerTransport();
await server.connect(transport);
Execution: Menghubungkan request AI ke fungsi asli kita.
{
name: "search_hotels",
description: "Search for hotels by keyword
(name, location, or description).
Supports optional filters for city,
max price, and minimum rating.",
inputSchema: {
type: "object",
properties: {
query: {
type: "string",
description: "Search keyword —
hotel name, area, or any term"
},
city: { type: "string" },
maxPrice: { type: "string" },
},
required: ["query"],
},
}
Identifier unik tool. Harus tepat sama dengan nama fungsi yang di-handle di
handleToolCall(). AI akan memanggil tool ini berdasarkan nama ini.
PALING PENTING. AI membaca ini untuk memutuskan kapan dan bagaimana memanggil tool. Semakin deskriptif & detail → AI semakin akurat memilih tool yang tepat.
Mendefinisikan struktur parameter yang diterima tool. Mengikuti JSON Schema. AI akan otomatis mengisi field ini berdasarkan konteks percakapan.
Array nama field yang wajib diisi. Field di luar array ini bersifat opsional
— AI boleh mengisinya atau tidak. Contoh: city & maxPrice di sini
opsional.
# Test via CLI (Stdio)
npx @modelcontextprotocol/inspector node dist/index.js
# Test via ChatGPT/Claude
# 1. Deploy ke URL (misal: Vercel)
# 2. Masukkan URL SSE ke konfigurasi Custom GPT / Claude Desktop
Gunakan MCP Inspector untuk mencoba tool secara manual sebelum dihubungkan ke AI.
// Server merespons 401 jika butuh login
return new NextResponse(JSON.stringify({
jsonrpc: "2.0",
error: {
code: 401,
message: "Unauthorized",
data: {
login_url: "https://myapp.com/oauth"
}
}
}), { status: 401 });
Flow: AI akan otomatis menampilkan tombol "Login" kepada user saat menerima error 401 ini.
// Verifikasi Token di Server
const authHeader = req.headers.get("authorization");
const userId = await getUserIdFromToken(authHeader);
if (isProtected(toolName) && !userId) {
return throw401();
}
Security: Memastikan data sensitif (seperti booking) hanya bisa diakses setelah user login.
Bukan di browser user, tapi di Server AI Host. User tidak bisa melihat token ini secara langsung.
Setiap kali GPT memanggil tool, ia menyisipkan token di Header Authorization secara
otomatis.
GPT akan menggunakan refresh_token untuk meminta token baru tanpa mengganggu user
(Background Refresh).
Mari kita eksplorasi kekuatan MCP secara langsung:
Generate desain banner otomatis lewat chat.
Ambil aset desain dan langsung jadi kode.
Booking hotel real-time di Travelan App.
Ada Pertanyaan?