⚠️ Važna obavijest: Od specifikacije MCP 2025-06-18, samostalni SSE (Server-Sent Events) transport je zastarjeli i zamijenjen je "Streamable HTTP" transportom. Trenutna MCP specifikacija definira dva primarna transportna mehanizma:
- stdio - Standardni ulaz/izlaz (preporučeno za lokalne poslužitelje)
- Streamable HTTP - Za udaljene poslužitelje koji mogu interno koristiti SSE
Ova lekcija je ažurirana da se fokusira na stdio transport, koji je preporučeni pristup za većinu implementacija MCP poslužitelja.
Stdio transport omogućuje MCP poslužiteljima komunikaciju s klijentima putem standardnih ulaznih i izlaznih tokova. Ovo je najčešće korišten i preporučeni transportni mehanizam u trenutnoj MCP specifikaciji, pružajući jednostavan i učinkovit način za izgradnju MCP poslužitelja koji se lako mogu integrirati s različitim klijentskim aplikacijama.
Ova lekcija pokriva kako izgraditi i koristiti MCP poslužitelje pomoću stdio transporta.
Do kraja ove lekcije moći ćete:
- Izgraditi MCP poslužitelj koristeći stdio transport.
- Debugirati MCP poslužitelj koristeći Inspector.
- Koristiti MCP poslužitelj u Visual Studio Code-u.
- Razumjeti trenutne MCP transportne mehanizme i zašto se preporučuje stdio.
Stdio transport je jedan od dva podržana tipa transporta u trenutnoj MCP specifikaciji (2025-06-18). Evo kako radi:
- Jednostavna komunikacija: poslužitelj čita JSON-RPC poruke sa standardnog ulaza (
stdin) i šalje poruke na standardni izlaz (stdout). - Temeljen na procesu: klijent pokreće MCP poslužitelj kao podproces.
- Format poruka: poruke su pojedinačni JSON-RPC zahtjevi, notifikacije ili odgovori, odvojeni novim redom.
- Dnevnički zapisi (logging): poslužitelj MOŽE pisati UTF-8 stringove na standardnu grešku (
stderr) za potrebe zapisivanja.
- Poruke MORAJU biti razdvojene novim redom i NE SMIJU sadržavati ugrađene nove redove.
- Poslužitelj NE SMIJE pisati ništa na
stdoutšto nije valjana MCP poruka. - Klijent NE SMIJE pisati ništa na
stdinposlužitelja što nije valjana MCP poruka.
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: {},
},
}
);U gornjem kodu:
- Uvozimo klasu
ServeriStdioServerTransportiz MCP SDK-a - Kreiramo instancu poslužitelja s osnovnom konfiguracijom i mogućnostima
import asyncio
import logging
from mcp.server import Server
from mcp.server.stdio import stdio_server
# Kreiraj instancu poslužitelja
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())U gornjem kodu:
- Kreiramo instancu poslužitelja koristeći MCP SDK
- Definiramo alate pomoću dekoratora
- Koristimo stdio_server kontekstni menadžer za upravljanje transportom
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();Ključna razlika u odnosu na SSE je da stdio poslužitelji:
- Ne zahtijevaju postavljanje web poslužitelja ni HTTP krajnjih točaka
- Pokreću se kao podprocesi od strane klijenta
- Komuniciraju putem stdin/stdout tokova
- Jednostavniji su za implementaciju i debugiranje
Za kreiranje našeg poslužitelja trebamo imati na umu dvije stvari:
- Trebamo koristiti web poslužitelj za izlaganje krajnjih točaka za povezivanje i poruke.
U ovom laboratoriju kreirat ćemo jednostavan MCP poslužitelj koristeći preporučeni stdio transport. Ovaj poslužitelj će izlagati alate koje klijenti mogu pozivati koristeći standardni Model Context Protocol.
- Python 3.8 ili noviji
- MCP Python SDK:
pip install mcp - Osnovno razumijevanje asinhronog programiranja
Počnimo s kreiranjem našeg prvog MCP stdio poslužitelja:
import asyncio
import logging
from mcp.server import Server
from mcp.server.stdio import stdio_server
from mcp import types
# Konfiguriraj zapisivanje događaja
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Kreiraj poslužitelj
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():
# Koristi stdio transport
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())Stdio transport (trenutni standard):
- Jednostavan model podprocesa - klijent pokreće poslužitelj kao podproces
- Komunikacija putem stdin/stdout koristeći JSON-RPC poruke
- Nije potrebno postavljanje HTTP poslužitelja
- Bolje performanse i sigurnost
- Jednostavnije debugiranje i razvoj
SSE transport (zastarjelo od MCP 2025-06-18):
- Zahtijevao je HTTP poslužitelj s SSE krajnjim točkama
- Složenija postavka s infrastrukturom web poslužitelja
- Dodatni sigurnosni zahtjevi za HTTP krajnje točke
- Sada je zamijenjen Streamable HTTP za scenarije bazirane na webu
Za kreiranje našeg stdio poslužitelja potrebno je:
- Uvoziti potrebne biblioteke - Trebamo MCP komponente poslužitelja i stdio transport
- Kreirati instancu poslužitelja - Definirati poslužitelj sa svojim mogućnostima
- Definirati alate - Dodati funkcionalnosti koje želimo izložiti
- Postaviti transport - Konfigurirati stdio komunikaciju
- Pokrenuti poslužitelj - Startati poslužitelj i obrađivati poruke
Izgradimo to korak po korak:
import asyncio
import logging
from mcp.server import Server
from mcp.server.stdio import stdio_server
# Konfiguriraj zapisivanje dnevnika
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# Kreiraj poslužitelj
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"]
}Spremi kôd kao server.py i pokreni ga iz naredbenog retka:
python server.pyPoslužitelj će se pokrenuti i čekati unos sa stdin. Komunicira pomoću JSON-RPC poruka preko stdio transporta.
Možete testirati svoj poslužitelj koristeći MCP Inspector:
- Instalirajte Inspector:
npx @modelcontextprotocol/inspector - Pokrenite Inspector i usmjerite ga na svoj poslužitelj
- Testirajte alate koje ste kreirali
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddMcpServer();MCP Inspector je vrijedan alat za debugiranje i testiranje MCP poslužitelja. Evo kako ga koristiti sa vašim stdio poslužiteljem:
-
Instalirajte Inspector:
npx @modelcontextprotocol/inspector
-
Pokrenite Inspector:
npx @modelcontextprotocol/inspector python server.py
-
Testirajte poslužitelj: Inspector pruža web sučelje u kojem možete:
- Pregledati mogućnosti poslužitelja
- Testirati alate s različitim parametrima
- Pratiti JSON-RPC poruke
- Debugirati probleme s vezom
MCP poslužitelj možete debugirati i izravno u VS Code-u:
-
Kreirajte konfiguraciju pokretanja u
.vscode/launch.json:{ "version": "0.2.0", "configurations": [ { "name": "Debug MCP Server", "type": "python", "request": "launch", "program": "server.py", "console": "integratedTerminal" } ] } -
Postavite točke prekida u vašem kodu poslužitelja
-
Pokrenite debugger i testirajte s Inspectorom
- Koristite
stderrza logiranje - nikada ne pišite nastdoutjer je rezerviran za MCP poruke - Osigurajte da su sve JSON-RPC poruke odvojene novim redom
- Prvo testirajte s jednostavnim alatima prije dodavanja složenih funkcionalnosti
- Koristite Inspector za provjeru formata poruka
Nakon što ste izgradili svoj MCP stdio poslužitelj, možete ga integrirati s VS Code-om da biste ga koristili s Claudeom ili drugim MCP-kompatibilnim klijentima.
-
Kreirajte MCP konfiguracijsku datoteku na
%APPDATA%\Claude\claude_desktop_config.json(Windows) ili~/Library/Application Support/Claude/claude_desktop_config.json(Mac):{ "mcpServers": { "example-stdio-server": { "command": "python", "args": ["path/to/your/server.py"] } } } -
Restartajte Claude: Zatvorite i ponovno otvorite Claude da bi učitao novu konfiguraciju poslužitelja.
-
Testirajte vezu: Pokrenite razgovor s Claudeom i pokušajte koristiti vaše alate:
- "Možeš li me pozdraviti koristeći alat za pozdrav?"
- "Izračunaj zbroj 15 i 27"
- "Koje su informacije o poslužitelju?"
Evo kompletnog TypeScript primjera za referencu:
#!/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: {},
},
}
);
// Dodajte alate
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;
}
}U ovoj ažuriranoj lekciji ste naučili kako:
- Izgraditi MCP poslužitelje koristeći trenutni stdio transport (preporučeni pristup)
- Razumjeti zašto je SSE transport zastario u korist stdio i Streamable HTTP
- Kreirati alate koje MCP klijenti mogu pozivati
- Debugirati poslužitelj koristeći MCP Inspector
- Integrirati svoj stdio poslužitelj s VS Code-om i Claudeom
Stdio transport pruža jednostavniji, sigurniji i učinkovitiji način za izgradnju MCP poslužitelja u odnosu na zastarjeli SSE pristup. To je preporučeni transport za većinu MCP implementacija od specifikacije 2025-06-18.
- Prvo kreirajmo neke alate, za to ćemo kreirati datoteku Tools.cs sa sljedećim sadržajem:
using System.ComponentModel;
using System.Text.Json;
using ModelContextProtocol.Server;Sada kad ste izgradili svoj stdio poslužitelj, testirajmo ga da budemo sigurni da radi ispravno.
-
Provjerite imate li instaliran MCP Inspector:
npm install -g @modelcontextprotocol/inspector
-
Vaš poslužiteljski kôd treba biti spremljen (npr. kao
server.py)
-
Pokrenite Inspector s vašim poslužiteljem:
npx @modelcontextprotocol/inspector python server.py
-
Otvorite web sučelje: Inspector će otvoriti prozor preglednika sa prikazom mogućnosti vašeg poslužitelja.
-
Testirajte alate:
- Isprobajte alat
get_greetings različitim imenima - Testirajte alat
calculate_sums raznim brojevima - Pozovite alat
get_server_infoza prikaz metapodataka poslužitelja
- Isprobajte alat
-
Pratite komunikaciju: Inspector prikazuje JSON-RPC poruke koje se razmjenjuju između klijenta i poslužitelja.
Kada se vaš poslužitelj uspješno pokrene, trebali biste vidjeti:
- Popis mogućnosti poslužitelja u Inspectoru
- Alate dostupne za testiranje
- Uspješne razmjene JSON-RPC poruka
- Odgovore alata prikazane u sučelju
Poslužitelj se ne pokreće:
- Provjerite jesu li sve ovisnosti instalirane:
pip install mcp - Provjerite Python sintaksu i uvlačenje
- Potražite poruke o pogreškama u konzoli
Alati se ne pojavljuju:
- Provjerite da su prisutni
@server.tool()dekoratori - Provjerite da su funkcije alata definirane prije
main() - Provjerite je li poslužitelj ispravno konfiguriran
Problemi s vezom:
- Provjerite koristi li poslužitelj ispravno stdio transport
- Provjerite da nisu drugi procesi u konfliktu
- Provjerite ispravnost sintakse naredbi Inspectora
Pokušajte dodatno razviti svoj poslužitelj s više mogućnosti. Pogledajte ovu stranicu kako biste, primjerice, dodali alat koji poziva API. Vi odlučujete kako treba izgledati poslužitelj. Zabavite se :)
Rješenje Evo mogućeg rješenja s radnim kodom.
Ključne pouke iz ovog poglavlja su sljedeće:
- Stdio transport je preporučeni mehanizam za lokalne MCP poslužitelje.
- Stdio transport omogućava neprimjetnu komunikaciju između MCP poslužitelja i klijenata koristeći standardne ulazne i izlazne tokove.
- Možete koristiti i Inspector i Visual Studio Code za korištenje stdio poslužitelja izravno, što olakšava debugiranje i integraciju.
Sada kad ste naučili kako izgraditi MCP poslužitelje sa stdio transportom, možete istražiti naprednije teme:
- Sljedeće: HTTP streaming s MCP-om (Streamable HTTP) - Saznajte o drugom podržanom transportnom mehanizmu za udaljene poslužitelje
- Napredno: MCP sigurnosne najbolje prakse - Implementirajte sigurnost u svoje MCP poslužitelje
- Produkcija: Strategije implementacije - Implementirajte svoje poslužitelje za produkcijsku upotrebu
- MCP specifikacija 2025-06-18 - Službena specifikacija
- MCP SDK dokumentacija - SDK reference za sve jezike
- Primjeri iz zajednice - Više primjera poslužitelja iz zajednice
Odricanje od odgovornosti: Ovaj dokument preveden je pomoću AI usluge za prijevod Co-op Translator. Iako nastojimo osigurati točnost, imajte na umu da automatski prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku smatra se službenim i autoritativnim. Za ključne informacije preporučuje se profesionalni ljudski prijevod. Nismo odgovorni za bilo kakva nesporazuma ili kriva tumačenja nastala korištenjem ovog prijevoda.