⚠️ Pembaruan Penting: Mulai dari Spesifikasi MCP 2025-06-18, transport SSE (Server-Sent Events) mandiri telah dihapus dan digantikan oleh transport "Streamable HTTP". Spesifikasi MCP saat ini mendefinisikan dua mekanisme transport utama:
- stdio - Input/output standar (direkomendasikan untuk server lokal)
- Streamable HTTP - Untuk server jarak jauh yang mungkin menggunakan SSE secara internal
Pelajaran ini telah diperbarui untuk memfokuskan pada transport stdio, yang merupakan pendekatan yang direkomendasikan untuk sebagian besar implementasi server MCP.
Transport stdio memungkinkan server MCP berkomunikasi dengan klien melalui aliran input dan output standar. Ini adalah mekanisme transport yang paling sering digunakan dan direkomendasikan dalam spesifikasi MCP saat ini, memberikan cara yang sederhana dan efisien untuk membangun server MCP yang dapat dengan mudah diintegrasikan dengan berbagai aplikasi klien.
Pelajaran ini membahas cara membangun dan menggunakan Server MCP menggunakan transport stdio.
Pada akhir pelajaran ini, Anda akan bisa:
- Membangun Server MCP menggunakan transport stdio.
- Debug Server MCP menggunakan Inspector.
- Menggunakan Server MCP dengan Visual Studio Code.
- Memahami mekanisme transport MCP saat ini dan alasan stdio direkomendasikan.
Transport stdio adalah salah satu dari dua jenis transport yang didukung dalam spesifikasi MCP saat ini (2025-06-18). Cara kerjanya sebagai berikut:
- Komunikasi Sederhana: Server membaca pesan JSON-RPC dari input standar (
stdin) dan mengirim pesan ke output standar (stdout). - Berbasis Proses: Klien menjalankan server MCP sebagai proses anak.
- Format Pesan: Pesan adalah permintaan JSON-RPC, notifikasi, atau respons individual yang dipisahkan oleh baris baru.
- Logging: Server DAPAT menulis string UTF-8 ke error standar (
stderr) untuk keperluan logging.
- Pesan HARUS dipisahkan oleh baris baru dan TIDAK BOLEH berisi baris baru tertanam
- Server TIDAK BOLEH menulis apa pun ke
stdoutyang bukan pesan MCP valid - Klien TIDAK BOLEH menulis apa pun ke
stdinserver yang bukan pesan MCP valid
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new Server(
{
name: "example-server",
version: "1.0.0",
},
{
capabilities: {
tools: {},
},
}
);Dalam kode sebelumnya:
- Kami mengimpor kelas
ServerdanStdioServerTransportdari MCP SDK - Kami membuat instance server dengan konfigurasi dan kapabilitas dasar
import asyncio
import logging
from mcp.server import Server
from mcp.server.stdio import stdio_server
# Buat instance server
server = Server("example-server")
@server.tool()
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b
async def main():
async with stdio_server(server) as (read_stream, write_stream):
await server.run(
read_stream,
write_stream,
server.create_initialization_options()
)
if __name__ == "__main__":
asyncio.run(main())Dalam kode sebelumnya kami:
- Membuat instance server menggunakan MCP SDK
- Mendefinisikan alat menggunakan dekorator
- Menggunakan pengelola konteks stdio_server untuk menangani transport
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using ModelContextProtocol.Server;
var builder = Host.CreateApplicationBuilder(args);
builder.Services
.AddMcpServer()
.WithStdioServerTransport()
.WithTools<Tools>();
builder.Services.AddLogging(logging => logging.AddConsole());
var app = builder.Build();
await app.RunAsync();Perbedaan utama dari SSE adalah server stdio:
- Tidak membutuhkan pengaturan server web atau endpoint HTTP
- Dijalankan sebagai proses anak oleh klien
- Berkomunikasi lewat aliran stdin/stdout
- Lebih sederhana untuk diimplementasikan dan debugging
Untuk membuat server kita, kita perlu mengingat dua hal:
- Kita perlu menggunakan server web untuk mengekspos endpoint koneksi dan pesan.
Dalam lab ini, kita akan membuat server MCP sederhana menggunakan transport stdio yang direkomendasikan. Server ini akan mengekspos alat yang dapat dipanggil oleh klien menggunakan Protokol Model Context standar.
- Python 3.8 atau lebih baru
- MCP Python SDK:
pip install mcp - Pemahaman dasar pemrograman async
Mari mulai dengan membuat server MCP stdio pertama kita:
import asyncio
import logging
from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp import types
# Konfigurasikan logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Buat server
server = Server("example-stdio-server")
@server.tool()
def calculate_sum(a: int, b: int) -> int:
"""Calculate the sum of two numbers"""
return a + b
@server.tool()
def get_greeting(name: str) -> str:
"""Generate a personalized greeting"""
return f"Hello, {name}! Welcome to MCP stdio server."
async def main():
# Gunakan transportasi stdio
async with stdio_server(server) as (read_stream, write_stream):
await server.run(
read_stream,
write_stream,
server.create_initialization_options()
)
if __name__ == "__main__":
asyncio.run(main())Transport Stdio (Standar Saat Ini):
- Model subprocess sederhana - klien menjalankan server sebagai proses anak
- Komunikasi melalui stdin/stdout menggunakan pesan JSON-RPC
- Tidak diperlukan setup server HTTP
- Performa dan keamanan yang lebih baik
- Debugging dan pengembangan lebih mudah
Transport SSE (Dihentikan sejak MCP 2025-06-18):
- Memerlukan server HTTP dengan endpoint SSE
- Setup lebih kompleks dengan infrastruktur server web
- Pertimbangan keamanan tambahan untuk endpoint HTTP
- Kini digantikan oleh Streamable HTTP untuk skenario berbasis web
Untuk membuat server stdio kita, kita perlu:
- Impor pustaka yang diperlukan - Kita perlu komponen server MCP dan transport stdio
- Buat instance server - Definisikan server dengan kapabilitasnya
- Definisikan alat - Tambahkan fungsi yang ingin diekspos
- Siapkan transport - Konfigurasi komunikasi stdio
- Jalankan server - Mulai server dan tangani pesan
Mari bangun ini langkah demi langkah:
import asyncio
import logging
from mcp.server import Server
from mcp.server.stdio import stdio_server
# Konfigurasikan pencatatan
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Buat server
server = Server("example-stdio-server")
@server.tool()
def get_greeting(name: str) -> str:
"""Generate a personalized greeting"""
return f"Hello, {name}! Welcome to MCP stdio server."
async def main():
async with stdio_server(server) as (read_stream, write_stream):
await server.run(
read_stream,
write_stream,
server.create_initialization_options()
)
if __name__ == "__main__":
asyncio.run(main())@server.tool()
def calculate_sum(a: int, b: int) -> int:
"""Calculate the sum of two numbers"""
return a + b
@server.tool()
def calculate_product(a: int, b: int) -> int:
"""Calculate the product of two numbers"""
return a * b
@server.tool()
def get_server_info() -> dict:
"""Get information about this MCP server"""
return {
"server_name": "example-stdio-server",
"version": "1.0.0",
"transport": "stdio",
"capabilities": ["tools"]
}Simpan kode sebagai server.py dan jalankan dari baris perintah:
python server.pyServer akan mulai dan menunggu input dari stdin. Komunikasi menggunakan pesan JSON-RPC melalui transport stdio.
Anda dapat menguji server Anda menggunakan MCP Inspector:
- Install Inspector:
npx @modelcontextprotocol/inspector - Jalankan Inspector dan arahkan ke server Anda
- Uji alat yang telah Anda buat
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddMcpServer();MCP Inspector adalah alat yang sangat berguna untuk debugging dan pengujian server MCP. Berikut cara menggunakannya dengan server stdio Anda:
-
Install Inspector:
npx @modelcontextprotocol/inspector
-
Jalankan Inspector:
npx @modelcontextprotocol/inspector python server.py
-
Uji server Anda: Inspector menyediakan antarmuka web di mana Anda dapat:
- Melihat kapabilitas server
- Menguji alat dengan parameter berbeda
- Memantau pesan JSON-RPC
- Debug masalah koneksi
Anda juga bisa melakukan debugging server MCP langsung di VS Code:
-
Buat konfigurasi peluncuran di
.vscode/launch.json:{ "version": "0.2.0", "configurations": [ { "name": "Debug MCP Server", "type": "python", "request": "launch", "program": "server.py", "console": "integratedTerminal" } ] } -
Set breakpoint di kode server Anda
-
Jalankan debugger dan uji dengan Inspector
- Gunakan
stderruntuk logging - jangan pernah menulis kestdoutkarena diperuntukkan untuk pesan MCP - Pastikan semua pesan JSON-RPC dipisahkan dengan baris baru
- Uji dengan alat sederhana terlebih dahulu sebelum menambah fungsi kompleks
- Gunakan Inspector untuk memverifikasi format pesan
Setelah membangun server MCP stdio, Anda bisa mengintegrasikannya dengan VS Code untuk menggunakannya bersama Claude atau klien kompatibel MCP lainnya.
-
Buat file konfigurasi MCP di
%APPDATA%\Claude\claude_desktop_config.json(Windows) atau~/Library/Application Support/Claude/claude_desktop_config.json(Mac):{ "mcpServers": { "example-stdio-server": { "command": "python", "args": ["path/to/your/server.py"] } } } -
Restart Claude: Tutup dan buka kembali Claude untuk memuat konfigurasi server baru.
-
Uji koneksi: Mulai percakapan dengan Claude dan coba gunakan alat server Anda:
- "Bisakah kamu menyapaku menggunakan alat sapaan?"
- "Hitung jumlah 15 dan 27"
- "Apa info servernya?"
Berikut contoh lengkap TypeScript sebagai referensi:
#!/usr/bin/env node
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
const server = new Server(
{
name: "example-stdio-server",
version: "1.0.0",
},
{
capabilities: {
tools: {},
},
}
);
// Tambahkan alat
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [
{
name: "get_greeting",
description: "Get a personalized greeting",
inputSchema: {
type: "object",
properties: {
name: {
type: "string",
description: "Name of the person to greet",
},
},
required: ["name"],
},
},
],
};
});
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === "get_greeting") {
return {
content: [
{
type: "text",
text: `Hello, ${request.params.arguments?.name}! Welcome to MCP stdio server.`,
},
],
};
} else {
throw new Error(`Unknown tool: ${request.params.name}`);
}
});
async function runServer() {
const transport = new StdioServerTransport();
await server.connect(transport);
}
runServer().catch(console.error);using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using ModelContextProtocol.Server;
using System.ComponentModel;
var builder = Host.CreateApplicationBuilder(args);
builder.Services
.AddMcpServer()
.WithStdioServerTransport()
.WithTools<Tools>();
var app = builder.Build();
await app.RunAsync();
[McpServerToolType]
public class Tools
{
[McpServerTool, Description("Get a personalized greeting")]
public string GetGreeting(string name)
{
return $"Hello, {name}! Welcome to MCP stdio server.";
}
[McpServerTool, Description("Calculate the sum of two numbers")]
public int CalculateSum(int a, int b)
{
return a + b;
}
}Dalam pelajaran yang diperbarui ini, Anda belajar bagaimana:
- Membangun server MCP menggunakan transport stdio saat ini (pendekatan yang direkomendasikan)
- Memahami mengapa transport SSE dihentikan dan diganti dengan stdio dan Streamable HTTP
- Membuat alat yang dapat dipanggil oleh klien MCP
- Debug server menggunakan MCP Inspector
- Mengintegrasikan server stdio Anda dengan VS Code dan Claude
Transport stdio memberikan cara yang lebih sederhana, aman, dan berkinerja lebih baik untuk membangun server MCP dibanding pendekatan SSE yang dihapus. Ini adalah transport yang direkomendasikan untuk sebagian besar implementasi server MCP sejak spesifikasi 2025-06-18.
- Mari buat beberapa alat terlebih dahulu, untuk ini kita akan membuat file Tools.cs dengan isi berikut:
using System.ComponentModel;
using System.Text.Json;
using ModelContextProtocol.Server;Sekarang setelah Anda membangun server stdio, mari uji untuk memastikan berfungsi dengan benar.
-
Pastikan Anda telah menginstal MCP Inspector:
npm install -g @modelcontextprotocol/inspector
-
Kode server Anda sudah disimpan (misalnya,
server.py)
-
Mulai Inspector dengan server Anda:
npx @modelcontextprotocol/inspector python server.py
-
Buka antarmuka web: Inspector akan membuka jendela browser yang menampilkan kapabilitas server Anda.
-
Uji alat:
- Coba alat
get_greetingdengan nama berbeda - Uji alat
calculate_sumdengan beberapa angka - Panggil alat
get_server_infountuk melihat metadata server
- Coba alat
-
Pantau komunikasi: Inspector menampilkan pesan JSON-RPC yang dipertukarkan antara klien dan server.
Saat server berjalan dengan benar, Anda harus melihat:
- Kapabilitas server tercantum di Inspector
- Alat tersedia untuk pengujian
- Pertukaran pesan JSON-RPC berhasil
- Respon alat ditampilkan di antarmuka
Server tidak mulai:
- Periksa semua dependensi sudah terpasang:
pip install mcp - Verifikasi sintaks Python dan indentasi
- Cari pesan kesalahan di konsol
Alat tidak muncul:
- Pastikan dekorator
@server.tool()ada - Periksa fungsi alat didefinisikan sebelum
main() - Pastikan server dikonfigurasi dengan benar
Masalah koneksi:
- Pastikan server menggunakan transport stdio dengan benar
- Periksa tidak ada proses lain yang mengganggu
- Verifikasi sintaks perintah Inspector
Cobalah kembangkan server Anda dengan lebih banyak kapabilitas. Lihat halaman ini untuk, misalnya, menambahkan alat yang memanggil API. Anda putuskan seperti apa servernya. Selamat bersenang-senang :)
Solusi Berikut adalah kemungkinan solusi dengan kode yang berfungsi.
Poin penting dari bab ini adalah:
- Transport stdio adalah mekanisme yang direkomendasikan untuk server MCP lokal.
- Transport stdio memungkinkan komunikasi lancar antara server MCP dan klien menggunakan aliran input dan output standar.
- Anda dapat menggunakan Inspector dan Visual Studio Code untuk mengonsumsi server stdio secara langsung, membuat debugging dan integrasi lebih mudah.
Setelah Anda belajar cara membangun server MCP dengan transport stdio, Anda bisa mengeksplorasi topik lanjutan:
- Selanjutnya: HTTP Streaming dengan MCP (Streamable HTTP) - Pelajari mekanisme transport lain yang didukung untuk server jarak jauh
- Lanjutan: Praktik Terbaik Keamanan MCP - Terapkan keamanan di server MCP Anda
- Produksi: Strategi Deploy - Deploy server Anda untuk penggunaan produksi
- Spesifikasi MCP 2025-06-18 - Spesifikasi resmi
- Dokumentasi MCP SDK - Referensi SDK untuk semua bahasa
- Contoh Komunitas - Contoh server lainnya dari komunitas
Penafian:
Dokumen ini telah diterjemahkan menggunakan layanan terjemahan AI Co-op Translator. Meskipun kami berusaha untuk memberikan terjemahan yang akurat, mohon diperhatikan bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang sah. Untuk informasi penting, disarankan menggunakan jasa penerjemah profesional manusia. Kami tidak bertanggung jawab atas miskomunikasi atau kesalahpahaman yang timbul dari penggunaan terjemahan ini.