Logo Light
Published on

MCP (1. díl) - Jak funguje MCP server

Úvod

Model Context Protocol (MCP) je otevřený protokol, který definuje způsob, jak propojit různé aplikace s umělou inteligencí (např. ChatGPT, Claude apod.). S pomocí MCP serveru definujeme, jaké funkce budou přes protokol MCP dostupné, a umožníme tak MCP klientům (např. VS Code s Copilotem nebo Claude Desktop) tyto funkce využívat. Můžeme tak umožnit umělé inteligenci, aby například přímo komunikovala s naší databází, e-shopem, nebo ji můžeme nechat otestovat aplikaci přes Playwright.

Instalace

Nejprve si připravíme nový Node.js projekt:

mkdir greeting-machine
cd greeting-machine
npm init -y
npm install @modelcontextprotocol/sdk

MCP server

Vytvoříme soubor server.js, který námi definovaným nástrojem greet pozdraví uživatele:

import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js'

// Vytvoření MCP serveru
const server = new Server(
  {
    name: 'greeting-machine',
    version: '1.0.0',
  },
  {
    capabilities: {
      tools: {},
    },
  }
)

// Definice dostupných nástrojů
server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [
    {
      name: 'greet',
      description: 'Greets a person with a friendly message.',
      inputSchema: {
        type: 'object',
        properties: {
          name: {
            type: 'string',
            description: 'Name of the person to greet.',
          },
        },
        required: ['name'],
      },
    },
  ],
}))

// Zpracování volání nástrojů
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  const { name: toolName, arguments: args } = request.params

  if (toolName === 'greet') {
    const personName = args.name
    return {
      content: [
        {
          type: 'text',
          text: `Hi ${personName}! I am greeting you from the greeting-machine server!`,
        },
      ],
    }
  }

  throw new Error(`Unknown tool: ${toolName}`)
})

// Spuštění serveru
async function main() {
  const transport = new StdioServerTransport()
  await server.connect(transport)
  console.error('MCP server běží...')
}

main().catch(console.error)

Definice našeho MCP serveru se skládá z několika částí:

  • Vytvoření serveru - Inicializujeme nový Server s názvem greeting-machine a definujeme jeho schopnosti. V našem případě server podporuje nástroje (tools).

  • Definice nástrojů - Pomocí ListToolsRequestSchema handleru říkáme MCP klientům, jaké nástroje dáváme k dispozici. Nástroj greet očekává parametr name typu string.

  • Zpracování volání - Handler CallToolRequestSchema zpracovává volání nástrojů. Když klient zavolá nástroj greet, server vezme parametr name a vrátí pozdrav ve správném formátu.

  • Komunikace - Server používá StdioServerTransport pro komunikaci přes standardní vstup a výstup (běžný způsob, jak MCP servery komunikují s klienty)

Struktura MCP odpovědi

Všechny nástroje v MCP protokolu vrací odpověď ve standardizovaném formátu:

{
  "content": [
    {
      "type": "text",
      "text": "Hi John Doe! I am greeting you from the greeting-machine server!"
    }
  ]
}

Pole content může obsahovat více elementů různých typů (text, obrázky, atd.). V našem případě vracíme pouze jednoduchý textový obsah.

MCP klient

Jako MCP klienta můžeme použít například Claude Desktop. Do konfigurace Claude Desktop přidáme nový MCP server s názvem greeting-machine. Soubor je uložený zde: c:\Users\[jmeno_uzivatele]\AppData\Roaming\Claude\claude_desktop_config.json. Vložíme tam následující konfiguraci:

{
  "mcpServers": {
    "greeting-machine": {
      "command": "node",
      "args": ["[absolutni_cesta_k_serveru]/server.js"]
    }
  }
}

Spustíme náš server:

node server.js

V Claude Desktop teď můžeme v novém chatu napsat "Greet John Doe". Claude by měl odpovědět tímto způsobem:

Hi John Doe! I am greeting you from the greeting-machine server!

Závěr

V tomto článku jsme si ukázali, jak vytvořit základní MCP server pomocí knihovny @modelcontextprotocol/sdk. V příštím díle si ukážeme, jak lze MCP využít pro automatizované testování - vytvoříme MCP server, který umožní ChatGPT ovládat Playwright a testovat webové aplikace pomocí příkazů v přirozeném jazyce.