# Быстрый старт MCP: сервер на Python, TypeScript или Go

> MCP-сервер с двумя инструментами, add и greet, на Python, TypeScript или Go: установка, код, запуск и проверка в MCP Inspector

Страница: https://mcpdoc.ru/reference/quickstart/
Указатель сайта: https://mcpdoc.ru/llms.txt

Это руководство поможет вам создать и запустить первый MCP сервер за **5 минут**. Выберите ваш язык программирования и следуйте инструкциям.

## Что вы создадите

Простой MCP сервер с двумя инструментами:
- `add` — сложение двух чисел
- `greet` — приветствие по имени

  **Python**

    
      1. **Создайте папку проекта**
         ```bash
         mkdir my-mcp-server && cd my-mcp-server
         ```

      2. **Установите зависимости**
         ```bash
         pip install mcp
         ```

      3. **Создайте файл `server.py`**
         ```python
         from mcp.server.fastmcp import FastMCP

         # Создаём сервер
         mcp = FastMCP("my-first-server")

         @mcp.tool()
         def add(a: int, b: int) -> int:
             """Сложить два числа"""
             return a + b

         @mcp.tool()
         def greet(name: str) -> str:
             """Поприветствовать по имени"""
             return f"Привет, {name}!"

         @mcp.resource("info://about")
         def get_about() -> str:
             """Информация о сервере"""
             return "Мой первый MCP сервер!"

         if __name__ == "__main__":
             mcp.run(transport="stdio")
         ```

      4. **Запустите сервер**
         ```bash
         python server.py
         ```

      5. **Протестируйте с MCP Inspector**
         ```bash
         npx @modelcontextprotocol/inspector python server.py
         ```
         Откройте http://localhost:6274 в браузере.
    
  

  **TypeScript**

    
      1. **Создайте папку проекта**
         ```bash
         mkdir my-mcp-server && cd my-mcp-server
         npm init -y
         ```

      2. **Установите зависимости**
         ```bash
         npm install @modelcontextprotocol/sdk
         npm install -D typescript ts-node @types/node
         ```

      3. **Создайте файл `server.ts`**
         ```typescript
         import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
         import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
         import {
           ListToolsRequestSchema,
           CallToolRequestSchema,
         } from "@modelcontextprotocol/sdk/types.js";

         const server = new McpServer({
           name: "my-first-server",
           version: "1.0.0",
         });

         // Регистрируем инструменты
         server.setRequestHandler(ListToolsRequestSchema, async () => ({
           tools: [
             {
               name: "add",
               description: "Сложить два числа",
               inputSchema: {
                 type: "object" as const,
                 properties: {
                   a: { type: "number", description: "Первое число" },
                   b: { type: "number", description: "Второе число" },
                 },
                 required: ["a", "b"],
               },
             },
             {
               name: "greet",
               description: "Поприветствовать по имени",
               inputSchema: {
                 type: "object" as const,
                 properties: {
                   name: { type: "string", description: "Имя" },
                 },
                 required: ["name"],
               },
             },
           ],
         }));

         // Обрабатываем вызовы
         server.setRequestHandler(CallToolRequestSchema, async (request) => {
           switch (request.params.name) {
             case "add": {
               const a = request.params.arguments?.a as number;
               const b = request.params.arguments?.b as number;
               return { content: [{ type: "text", text: String(a + b) }] };
             }
             case "greet": {
               const name = request.params.arguments?.name as string;
               return { content: [{ type: "text", text: `Привет, ${name}!` }] };
             }
             default:
               throw new Error(`Unknown tool: ${request.params.name}`);
           }
         });

         // Запускаем сервер
         const transport = new StdioServerTransport();
         await server.connect(transport);
         ```

      4. **Добавьте скрипт в `package.json`**
         ```json
         {
           "type": "module",
           "scripts": {
             "start": "ts-node server.ts"
           }
         }
         ```

      5. **Запустите и протестируйте**
         ```bash
         npx @modelcontextprotocol/inspector npm start
         ```
    
  

  **Go**

    
      1. **Создайте проект**
         ```bash
         mkdir my-mcp-server && cd my-mcp-server
         go mod init my-mcp-server
         go get github.com/mark3labs/mcp-go
         ```

      2. **Создайте файл `main.go`**
         ```go
         package main

         import (
             "context"
             "fmt"

             "github.com/mark3labs/mcp-go/mcp"
             "github.com/mark3labs/mcp-go/server"
         )

         func main() {
             s := server.NewMCPServer(
                 "my-first-server",
                 "1.0.0",
             )

             // Инструмент сложения
             addTool := mcp.NewTool("add",
                 mcp.WithDescription("Сложить два числа"),
                 mcp.WithNumber("a", mcp.Required(), mcp.Description("Первое число")),
                 mcp.WithNumber("b", mcp.Required(), mcp.Description("Второе число")),
             )

             s.AddTool(addTool, func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
                 a := req.Params.Arguments["a"].(float64)
                 b := req.Params.Arguments["b"].(float64)
                 return mcp.NewToolResultText(fmt.Sprintf("%.0f", a+b)), nil
             })

             // Инструмент приветствия
             greetTool := mcp.NewTool("greet",
                 mcp.WithDescription("Поприветствовать по имени"),
                 mcp.WithString("name", mcp.Required(), mcp.Description("Имя")),
             )

             s.AddTool(greetTool, func(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
                 name := req.Params.Arguments["name"].(string)
                 return mcp.NewToolResultText(fmt.Sprintf("Привет, %s!", name)), nil
             })

             // Запуск
             if err := server.ServeStdio(s); err != nil {
                 panic(err)
             }
         }
         ```

      3. **Запустите**
         ```bash
         go run main.go
         ```

      4. **Протестируйте**
         ```bash
         npx @modelcontextprotocol/inspector go run main.go
         ```
    
  

## Что происходит при запуске

```mermaid
sequenceDiagram
    participant Client as MCP Client<br/>(Claude, Inspector)
    participant Server as Ваш MCP Server

    Client->>Server: initialize
    Server-->>Client: capabilities, tools, resources

    Client->>Server: tools/list
    Server-->>Client: [add, greet]

    Client->>Server: tools/call (add, {a:5, b:3})
    Server-->>Client: {content: [{type:"text", text:"8"}]}
```

## Проверка работы

После запуска MCP Inspector:

1. Откройте http://localhost:6274
2. Нажмите **Connect**
3. Перейдите в раздел **Tools**
4. Выберите инструмент `add`
5. Введите параметры: `a = 5`, `b = 3`
6. Нажмите **Call Tool**
7. Результат: `8`

MCP Inspector — ваш лучший друг при разработке! Используйте его для отладки перед интеграцией с Claude.

## Следующие шаги

  **Примеры кода**

    [Готовые примеры](https://mcpdoc.ru/reference/examples/) для разных задач
  
  **Инструменты**

    [MCP Inspector и CLI](https://mcpdoc.ru/reference/tools/) — полное руководство
  
  **Настройка клиентов**

    [Claude Desktop, VS Code, Cursor](https://mcpdoc.ru/reference/clients/)
  
  **Перечень проверок перед запуском**

    [14 пунктов](https://mcpdoc.ru/reference/checklist/) перед выкладкой
  

## Частые вопросы новичков

### Что такое `stdio` транспорт?

Stdio (standard input/output) — способ коммуникации через stdin/stdout. Клиент запускает ваш сервер как subprocess и общается через потоки ввода/вывода. Это самый простой и надёжный способ для локальной разработки.

### Почему `npx` перед командой?

`npx @modelcontextprotocol/inspector` запускает MCP Inspector без установки. Inspector — это веб-интерфейс для тестирования вашего сервера.

### Как добавить свой инструмент?

В Python (FastMCP):
```python
@mcp.tool()
def my_tool(param1: str, param2: int = 10) -> str:
    """Описание инструмента (будет видно в Claude)"""
    return f"Результат: {param1}, {param2}"
```

Описание в docstring автоматически становится description инструмента.

### Как подключить к Claude Desktop?

См. раздел [Настройка клиентов](https://mcpdoc.ru/reference/clients/) — там пошаговые инструкции для всех платформ.
