Что это
MCP Server Patterns — это навык-шпаргалка для разработчиков, создающих серверы по протоколу Model Context Protocol (MCP) на Node.js/TypeScript. Он объясняет, как регистрировать инструменты (Tools), ресурсы (Resources) и промпты (Prompts), как выбирать транспорт (stdio или Streamable HTTP) и как валидировать входные данные с помощью Zod. Навык не генерирует код автоматически, но даёт контекст и лучшие практики для быстрой и правильной реализации сервера.
Как работает
🧩 Core Concepts (базовые понятия)
MCP-сервер предоставляет AI-ассистентам три типа возможностей:
- Tools (инструменты) — действия, которые модель может вызывать по команде: поиск, запуск команды, вызов API. Регистрируются через
registerTool() или tool() (в зависимости от версии SDK).
- Resources (ресурсы) — данные только для чтения, которые модель может запросить: содержимое файлов, ответы внешних сервисов. Регистрируются через
registerResource() или resource(). Хендлер обычно получает аргумент uri.
- Prompts (шаблоны запросов) — готовые, параметризованные шаблоны для пользовательского интерфейса (например, в Claude Desktop). Регистрируются через
registerPrompt() или аналогичный метод.
🔌 Transport: stdio vs Streamable HTTP
Выбор транспорта определяет, как клиент подключается к серверу:
- stdio — для локальных клиентов (Claude Desktop, Terminal). Создаётся через транспорт stdio и передаётся в метод
connect() сервера. Код серверной логики (инструменты + ресурсы) рекомендуется делать независимым от транспорта, чтобы в точке входа можно было легко переключиться на HTTP.
- Streamable HTTP — предпочтительный вариант для удалённых клиентов (Cursor, облачные среды). Один MCP HTTP endpoint на сервер. Поддержка старого HTTP/SSE — только когда требуется обратная совместимость.
🛠 Регистрация инструментов и ресурсов
SDK @modelcontextprotocol/sdk менялся со временем: в разных версиях могут различаться сигнатуры методов. Навык предупреждает об этом и рекомендует сверяться с актуальной документацией или через Context7.
Пример базового сервера (установка):
npm install @modelcontextprotocol/sdk zod
Пример импорта и создания сервера:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
const server = new McpServer({
name: "my-server",
version: "1.0.0"
});
Регистрация инструмента может выглядеть как server.tool(name, description, schema, handler) или server.tool({ name, description, inputSchema }, handler). Аналогично для ресурсов — если API предоставляет uri, его нужно использовать в хендлере.
✅ Валидация с Zod
Для входных параметров каждого инструмента рекомендуется определять схему с помощью Zod (или другого формата, поддерживаемого SDK). Это даёт строгую типизацию и автоматическое сообщение об ошибках при неверном вводе.
Когда использовать
- 🔨 Когда создаёшь новый MCP-сервер с нуля или добавляешь в существующий новые инструменты/ресурсы.
- 🔀 Когда выбираешь между stdio и HTTP для своего сценария (локальный vs удалённый клиент).
- 📦 Когда обновляешь SDK и хочешь понять, какие методы изменились.
- 🐞 Когда отлаживаешь регистрацию инструментов или проблемы с транспортом.
📌 Важно знать
- Схема в первую очередь: для каждого инструмента обязательно описывай входные параметры, их типы и возвращаемую форму.
- Ошибки с умом: возвращай структурированные ошибки, понятные модели (не сырой stack trace).
- Идемпотентность: проектируй инструменты так, чтобы повторный вызов с теми же параметрами не приводил к нежелательным побочным эффектам.
- Лимиты и стоимость: если инструмент обращается к внешнему API, учитывай лимиты запросов и стоимость — документируй это в описании инструмента.
- Фиксируй версию SDK: в
package.json обязательно указывай конкретную версию @modelcontextprotocol/sdk. При обновлении читай release notes.
Официальные SDK
- JavaScript/TypeScript:
@modelcontextprotocol/sdk (npm). Для уточнения текущих сигнатур используй Context7 с именем библиотеки "MCP" или официальную документацию MCP.
- Go: официальный Go SDK на GitHub (
modelcontextprotocol/go-sdk).
- C#: официальный C# SDK для .NET.
Навык полезен как памятка — он не заменяет чтение документации, но даёт быстрый контекст и предохраняет от типовых ошибок при реализации MCP-сервера.
Комментарии
Комментариев пока нет. Будьте первым.