Токены доступа к внешним сервисам для MCP-сервера обычно уже лежат в локальном .env файла проекта. Проблема в том, что mcp.json ожидает их не построчным ключ-значение, а вложенным JSON-объектом внутри описания конкретного сервера.
Разница форматов на конкретном примере
Исходный .env:
SENTRY_TOKEN=abc123secret
GITHUB_TOKEN=ghp_xyz
Целевой блок внутри mcp.json:
{
"mcpServers": {
"sentry": {
"command": "npx",
"args": ["-y", "mcp-remote@latest", "https://mcp.sentry.dev/mcp"],
"env": {
"SENTRY_TOKEN": "abc123secret",
"GITHUB_TOKEN": "ghp_xyz"
}
}
}
}
Переписывать это руками для каждого сервера с собственным набором переменных — скучно и легко ошибиться в кавычках или запятых JSON, особенно если значений много.
Почему не стоит держать несколько серверов на одном общем env-блоке
Каждый MCP-сервер обычно нуждается в своём подмножестве переменных из общего .env проекта. Смешивать все переменные в один общий env-блок для всех серверов сразу технически возможно, но плохая практика — сервер получит доступ к секретам, которые ему вообще не нужны для работы.
| Подход | Плюсы | Минусы |
|---|---|---|
| Отдельный env-блок под каждый сервер | Минимальный набор доступных секретов | Требует собрать блок отдельно для каждого сервера |
| Один общий env-блок для всех серверов | Проще собрать один раз | Каждый сервер видит секреты остальных без необходимости |
Практический процесс
Возьмите только те строки .env, которые реально нужны конкретному серверу, соберите под них env-блок отдельно, и вставьте именно в описание этого сервера внутри mcpServers или servers, в зависимости от того, под какой клиент собирается итоговый mcp.json.
Почему это стоит делать локально, а не через стороннего помощника
Значения в .env и так не должны покидать вашу машину без необходимости, а mcp.json — тот самый файл, который случайно попадает в публичные issue или чаты именно из-за содержащихся в нём секретов открытым текстом.
Как собрать блок автоматически
.env to MCP Server Secrets Injector читает .env и собирает готовый JSON-объект env, который остаётся вставить в нужное место mcp.json вручную.
Итоговый чеклист
mcp.json ожидает секреты как вложенный JSON-объект env, а не построчный формат ключ-значение, как в .env.
Разумная практика — собирать отдельный env-блок под каждый сервер с минимальным необходимым набором переменных, а не единый блок для всех сразу.
Обработка локально в браузере особенно уместна именно для этого файла — и исходные значения, и итоговый mcp.json содержат реальные секреты, которые легко случайно засветить.