Membangun MCP Server di TypeScript: Panduan

Sebuah MCP server adalah program yang mengekspos tool, data, dan prompt ke klien AI melalui Model Context Protocol, sebuah standar yang dibangun di atas JSON-RPC. Karena protokolnya konsisten, klien kompatibel mana pun, termasuk Claude Code, bisa menemukan dan memakai server Anda tanpa kode integrasi khusus. Ia sering digambarkan sebagai port USB-C untuk aplikasi AI.
Mulailah proyek Node dan pasang dua paket: MCP SDK resmi untuk TypeScript dan pustaka schema seperti Zod untuk memvalidasi masukan. SDK menyediakan objek server dan seperangkat transport, sementara Zod memungkinkan Anda menjelaskan argumen tiap tool dalam bentuk yang diubah SDK menjadi schema yang bisa dibaca klien.
Mulailah dengan transport stdio saat mengembangkan secara lokal. Ia meluncurkan server Anda sebagai proses anak dari klien tanpa jaringan untuk dikonfigurasi, jadi versi kerja pertama cepat dicapai. Beralihlah ke transport Streamable HTTP nanti, ketika server harus dijangkau melalui jaringan alih-alih diluncurkan secara lokal.
Daftarkan dengan perintah claude mcp add, mengarahkannya ke perintah yang meluncurkan server Anda; klien lain menyimpan informasi yang sama dalam berkas konfigurasi. Begitu terdaftar, klien menjalankan server dan mendaftar tool-nya secara otomatis. Sebelum itu, uji server secara terpisah dengan MCP Inspector untuk menangkap error schema dengan murah.
Hanya jika Anda memperlakukan masukan sebagai tidak tepercaya. Sebuah MCP server berjalan dengan hak akses apa pun yang Anda berikan dan mengeksekusi argumen yang dipilih model, jadi validasi tiap masukan di batasnya, jangan pernah meneruskannya langsung ke shell atau kueri, dan batasi akses server hanya pada yang benar-benar dibutuhkannya.

Ringkasan Utama
Model Context Protocol memungkinkan Anda mengekspos tool, data, dan prompt milik Anda sendiri ke klien AI seperti Claude melalui antarmuka standar. Membangun server di TypeScript hanya butuh SDK resmi, sebuah transport, dan segelintir handler bertipe. Panduan ini melangkah dari proyek kosong ke server berjalan yang bisa dipanggil klien.
Model Context Protocol, atau MCP, adalah standar terbuka untuk menghubungkan klien AI ke tool dan data eksternal melalui satu antarmuka konsisten. Alih-alih menulis integrasi khusus untuk tiap asisten, Anda membangun satu MCP server dan klien kompatibel mana pun, termasuk Claude Code, bisa memakainya. Ia sering digambarkan sebagai port USB-C untuk aplikasi AI.
Panduan ini membangun server kecil di TypeScript dari nol. Kita akan merangka proyek dengan SDK resmi, mengekspos tool bertipe, menghubungkan server ke klien, dan membahas apa yang berubah ketika Anda beranjak dari prototipe lokal ke sesuatu yang diandalkan orang lain.
Sebuah MCP server adalah program yang mengekspos kapabilitas ke klien AI melalui protokol terstruktur yang dibangun di atas JSON-RPC. Klien dan server bertukar pesan dalam bentuk yang terdefinisi, sehingga model bisa menemukan apa yang ditawarkan server dan memanggilnya tanpa lem khusus apa pun di sisi klien.
Anda akan membangunnya ketika Anda ingin sebuah asisten menjangkau sesuatu yang tak bisa dilihatnya sendiri:
Mulailah proyek Node dan pasang dua paket: MCP SDK resmi untuk TypeScript dan pustaka schema seperti Zod untuk memvalidasi masukan. SDK memberi Anda objek server dan seperangkat transport; Zod memungkinkan Anda menjelaskan argumen tiap tool dalam bentuk yang diubah SDK menjadi schema yang bisa dibaca klien.
Sebuah server minimal yang mendaftarkan satu tool dan berbicara melalui standard input dan output terlihat seperti ini:
import { 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",
version: "1.0.0",
});
server.tool(
"get_forecast",
"Get a short weather forecast for a city",
{ city: z.string().describe("City to look up") },
async ({ city }) => ({
content: [
{ type: "text", text: "Forecast for " + city + ": sunny, 27C" },
],
})
);
const transport = new StdioServerTransport();
await server.connect(transport);Mulailah dengan transport stdio saat Anda mengembangkan secara lokal. Ia meluncurkan server sebagai proses anak dari klien tanpa jaringan untuk dikonfigurasi, yang membuat versi kerja pertama jauh lebih cepat dicapai daripada penyiapan berjaringan.
Sebuah tool adalah aksi yang bisa dipilih model untuk dipanggil. Masing-masing butuh empat hal, dan membuatnya benar adalah yang membuat tool tersebut dapat dipakai alih-alih menjadi sumber kebingungan.
Dengan server terbangun, daftarkan ke sebuah klien. Di Claude Code Anda menambahkan server dengan perintah claude mcp add, mengarahkannya ke perintah yang meluncurkan server Anda; klien lain menyimpan informasi yang sama dalam berkas konfigurasi. Begitu terdaftar, klien menjalankan server dan mendaftar tool-nya secara otomatis.
Sebelum menyambungkannya ke asisten sungguhan, uji server secara terpisah dengan MCP Inspector, sebuah tool mandiri yang terhubung ke server Anda dan memungkinkan Anda mendaftar serta memanggil kapabilitasnya secara manual. Menangkap schema yang rusak di Inspector jauh lebih murah daripada men-debug-nya lewat antarmuka chat.
Sebuah MCP server berjalan dengan hak akses apa pun yang Anda berikan dan mengeksekusi masukan yang dipilih model, jadi perlakukan tiap argumen sebagai tidak tepercaya. Validasi masukan di batasnya, jangan pernah meneruskannya langsung ke shell atau kueri, dan batasi akses server hanya pada yang benar-benar dibutuhkannya.
Sebuah server stdio di laptop Anda adalah awal, bukan akhir. Beranjak ke sesuatu yang dibagikan atau jarak jauh membawa beberapa keputusan yang bisa diabaikan versi lokal.
Membangun MCP server di TypeScript sebagian besar soal tiga langkah: rangka dengan SDK resmi, jelaskan tiap tool dengan schema masukan yang ketat, dan pilih transport yang cocok dengan tempat server berjalan. Mulai lokal lewat stdio, validasi tiap masukan, dan Anda punya jembatan yang bisa dipakai ulang oleh klien MCP mana pun.