/
Вопросы и ответы
/
MCP
/

Как создать свой MCP сервер?

Как создать свой MCP сервер?

12 часов назад

Никита Вихров

Ответы

0

Свой MCP-сервер нужен, когда готовых серверов недостаточно. Например, хочешь, чтобы ИИ умел читать внутреннюю документацию, ходить в корпоративное API или работать с нестандартной базой данных.

Официальные SDK есть для TypeScript и Python. Разберём на TypeScript.

Установка:

npm init -y
npm install @modelcontextprotocol/sdk zod
npm install -D typescript @types/node

Минимальный сервер с одним инструментом:

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: "my-api-server",
  version: "1.0.0",
});

// Регистрируем инструмент
server.tool(
  "get_user",
  "Получает данные пользователя по ID из внутреннего API",
  { userId: z.string().describe("ID пользователя") },
  async ({ userId }) => {
    const res = await fetch(`https://internal-api.company.com/users/${userId}`, {
      headers: { Authorization: `Bearer ${process.env.API_TOKEN}` },
    });

    if (!res.ok) {
      return {
        content: [{ type: "text", text: `Ошибка: пользователь ${userId} не найден` }],
      };
    }

    const user = await res.json();
    return {
      content: [{ type: "text", text: JSON.stringify(user, null, 2) }],
    };
  }
);

// Запускаем через stdio (стандартный транспорт для локальных серверов)
const transport = new StdioServerTransport();
await server.connect(transport);

Сборка и запуск:

npx tsc
node dist/index.js

Подключение в Cursor:

{
  "mcpServers": {
    "my-api-server": {
      "command": "node",
      "args": ["/path/to/your/server/dist/index.js"],
      "env": {
        "API_TOKEN": "ваш_токен"
      }
    }
  }
}

После этого можно писать в Cursor: «Покажи данные пользователя с ID 42» — и сервер сходит в ваш API сам.

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

server.tool(
  "list_users",
  "Возвращает список всех пользователей",
  { limit: z.number().optional().describe("Максимум записей, по умолчанию 10") },
  async ({ limit = 10 }) => {
    const res = await fetch(`https://internal-api.company.com/users?limit=${limit}`, {
      headers: { Authorization: `Bearer ${process.env.API_TOKEN}` },
    });
    const users = await res.json();
    return {
      content: [{ type: "text", text: JSON.stringify(users, null, 2) }],
    };
  }
);

Инструментов можно регистрировать сколько угодно. Модель сама выбирает нужный по описанию — поэтому описание (description) пиши чётко: что делает инструмент, когда его нужно вызывать.

12 часов назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845