Что такое MCP и зачем строить свой сервер
Model Context Protocol (MCP) - это стандартизированный способ расширить ИИ-инструменты кастомными возможностями. Он позволяет ИИ-ассистенту получать доступ к внешним системам, данным и выполнять действия через паттерн клиент-сервер. Это отдельная задача от подключения уже готового чужого MCP-сервера - здесь речь о том, чтобы написать свой собственный.
Шаг 1. Разберитесь в архитектуре: host, client, server
Система состоит из трёх компонентов. Host - это само ИИ-приложение. Client живёт внутри хоста и поддерживает связь один-к-одному с каждым сервером. Server - это ваш кастомный MCP-сервер, который предоставляет инструменты, ресурсы и промпты. Понимание этой связки важно ещё до первой строчки кода: именно host обнаруживает и вызывает то, что предоставляет ваш сервер.
Шаг 2. Выберите язык и SDK
MCP предоставляет SDK для нескольких языков, включая TypeScript, Python, Go и Rust. Для первого сервера удобно использовать TypeScript SDK - он хорошо документирован и часто используется в примерах. Понадобится базовое знание TypeScript, окружение Node.js и знакомство с концепциями API.
Шаг 3. Настройте проект и зарегистрируйте сервер
Типичная структура демонстрационного проекта включает веб-приложение для локального запуска в целях обучения, сам MCP-сервер на TypeScript SDK и общую библиотеку с определениями типов и компонентов. Сервер регистрируется файлом конфигурации, например .vscode/mcp.json, в котором задаются команда запуска и рабочая директория:
{ "servers": { "my-server": { "command": "node", "args": ["dist/index.js"], "cwd": "./mcp-server" } } }
Такой же принцип - команда, аргументы и рабочая директория - применяется и при подключении собственного MCP-сервера к Claude Code.
Шаг 4. Опишите Tools - что сервер умеет делать
Tools определяют, какие действия может выполнять MCP-сервер. Каждому инструменту нужны понятное имя, чёткое описание и схема входных параметров, определяющая обязательные поля. Например, инструмент с именем play_tic_tac_toe, описанием того, что он делает, и схемой параметров, требующей идентификатор игры.
Шаг 5. Добавьте Resources - как ИИ получает контекст
Resources дают ИИ способ собрать контекст через URI-идентификаторы вида game://tic-tac-toe/ID-игры. Методы сервера транслируют эти URI в вызов API и возвращают нужные данные - это способ передать модели структурированный контекст, а не просто ответ на действие.
Шаг 6. Добавьте Prompts - готовые подсказки для пользователя
Prompts - это заранее заданные подсказки, которые помогают пользователю получить максимум от ваших инструментов. Пользователи вызывают их слэш-командами прямо в интерфейсе - например, командой /strategy.
Шаг 7. Соберите, запустите и протестируйте
TypeScript нужно скомпилировать перед запуском - именно поэтому в конфигурации команда указывает на собранный файл вроде dist/index.js. После регистрации в конфигурации ИИ-инструмент автоматически обнаруживает доступные инструменты, вызывает их явно или через автообнаружение, MCP-сервер выполняет запрос и возвращает результат, а диалог продолжается уже с учётом полученных данных.
Безопасность и с чего начинать
Перед установкой чужого MCP-сервера стоит проверить его происхождение так же тщательно, как любую другую зависимость. Работа с авторизацией зависит от сценария использования - встречаются и OAuth-потоки, и персональные токены доступа. По возможности стоит изучить код в открытом репозитории перед установкой. Начинать лучше с простых, узко сфокусированных серверов, решающих одну конкретную задачу, а не пытаться сразу построить всё.
Чек-лист
- Понятна разница между host, client и server в архитектуре MCP
- Выбран SDK под нужный язык - TypeScript, Python, Go или Rust
- Каждому tool заданы понятное имя, описание и схема входных параметров
- Продуманы resources для передачи контекста через URI, если задаче это нужно
- Сервер начат простым и узко сфокусированным, а не как универсальный комбайн сразу