Создание MCP‑сервера¶
Начните создавать собственный сервер для использования в Claude for Desktop и других клиентах.
В этом руководстве мы создадим простой погодный MCP‑сервер и подключим его к хосту — Claude for Desktop.
Что мы будем делать¶
Мы создадим сервер, который предоставляет два инструмента: get_alerts
и get_forecast
. Затем подключим сервер к MCP‑хосту (в нашем случае — Claude for Desktop):
Серверы могут подключаться к любому клиенту. Для простоты мы выбрали Claude for Desktop, но у нас также есть гайды по созданию собственного клиента, а также список других клиентов.
Базовые концепции MCP¶
Серверы MCP могут предоставлять три основных типа возможностей:
- Resources: данные, похожие на файлы, которые клиент может читать (например, ответы API или содержимое файлов)
- Tools: функции, которые LLM может вызывать (с одобрения пользователя)
- Prompts: заготовленные шаблоны, помогающие пользователям решать конкретные задачи
В этом туториале мы сосредоточимся на инструментах.
Что нужно знать заранее¶
Этот гайд предполагает, что вы знакомы с:
- TypeScript
- LLM, такими как Claude
Логирование в MCP‑серверах¶
При реализации MCP‑серверов важно аккуратно обращаться с логированием:
Для серверов на STDIO: Никогда не пишите в стандартный вывод (stdout). Это включает:
print()
в Pythonconsole.log()
в JavaScriptfmt.Println()
в Go- Аналогичные функции stdout в других языках
Запись в stdout повредит сообщения JSON‑RPC и сломает ваш сервер.
Для серверов на HTTP: Логирование в стандартный вывод допустимо, так как оно не мешает HTTP‑ответам.
Рекомендации¶
- Используйте библиотеку логирования, пишущую в
stderr
или файлы, напримерlogging
в Python. - В JavaScript будьте особенно внимательны —
console.log()
по умолчанию пишет вstdout
.
Короткие примеры¶
1 2 3 4 5 |
|
Системные требования¶
Для TypeScript убедитесь, что у вас установлена актуальная версия Node.
Настройка окружения¶
Сначала установите Node.js и npm, если они ещё не установлены. Их можно скачать с сайта nodejs.org. Проверьте установку Node.js:
1 2 |
|
Для этого руководства потребуется Node.js версии 16 или выше.
Теперь создадим и настроим проект:
1 2 3 4 5 6 |
|
Обновите package.json
, добавив type: "module" и скрипт сборки:
package.json | |
---|---|
1 2 3 4 5 6 7 8 9 10 |
|
Создайте tsconfig.json
в корне проекта:
tsconfig.json | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Теперь перейдём к созданию сервера.
Создание сервера¶
Импорт пакетов и инициализация экземпляра¶
Добавьте это в начало файла src/index.ts
:
src/index.ts | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Вспомогательные функции¶
Далее добавим вспомогательные функции для запросов и форматирования данных из API Национальной метеослужбы США (NWS):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
|
Реализация выполнения инструментов¶
Обработчик выполнения инструмента отвечает за непосредственную логику каждого инструмента. Добавим его:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
|
Запуск сервера¶
Наконец, реализуем функцию main
для запуска сервера:
1 2 3 4 5 6 7 8 9 10 |
|
Не забудьте выполнить npm run build
, чтобы собрать сервер! Это критически важный шаг для успешного подключения сервера.
Теперь протестируем сервер из существующего MCP‑хоста — Claude for Desktop.
Тестирование сервера в Claude for Desktop¶
Приложение Claude for Desktop пока недоступно в Linux. Пользователи Linux могут перейти к туториалу Building a client и создать MCP‑клиент, подключающийся к только что созданному серверу.
Сначала убедитесь, что у вас установлен Claude for Desktop. Скачать последнюю версию можно здесь. Если он уже установлен, убедитесь, что приложение обновлено до последней версии.
Нам нужно сконфигурировать Claude for Desktop для MCP‑серверов, которые вы хотите использовать. Для этого откройте конфигурацию приложения по пути ~/Library/Application Support/Claude/claude_desktop_config.json
в текстовом редакторе. Если файла нет — создайте его.
Например, если у вас установлен VS Code:
1 |
|
Затем добавьте ваши серверы в ключ mcpServers
. Элементы UI для MCP появятся в Claude for Desktop только если настроен хотя бы один сервер.
В нашем случае добавим единственный сервер погоды следующим образом:
1 2 3 4 5 6 7 8 9 10 |
|
Это сообщает Claude for Desktop:
- Есть MCP‑сервер с именем «weather»
- Запускать его командой
node /ABSOLUTE/PATH/TO/PARENT/FOLDER/weather/build/index.js
Сохраните файл и перезапустите Claude for Desktop.
Тест с командами¶
Проверим, что Claude for Desktop «видит» два инструмента, которые предоставляет наш сервер weather
. Для этого найдите иконку «Поиск и инструменты» :
После нажатия на иконку ползунков вы должны увидеть два инструмента:
Если иконка настроек инструментов появилась, можно протестировать сервер, выполняя в Claude for Desktop команды:
- What’s the weather in Sacramento?
- What are the active weather alerts in Texas?
Поскольку используется Национальная метеослужба США, запросы будут работать только для локаций в США.
Что происходит «под капотом»¶
Когда вы задаёте вопрос:
- Клиент отправляет ваш вопрос Claude
- Claude анализирует доступные инструменты и решает, какие использовать
- Клиент выполняет выбранные инструменты через MCP‑сервер
- Результаты отправляются обратно Claude
- Claude формирует ответ на естественном языке
- Ответ показывается вам
Источник — https://modelcontextprotocol.io/docs/develop/build-server