~/guides/env-to-mcp-server-secrets

AI Agents

Как передать секреты из .env в конфиг MCP-сервера, не переписывая их руками

Практический способ собрать блок env для mcp.json прямо из существующего .env файла проекта.

Токены доступа к внешним сервисам для 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 содержат реальные секреты, которые легко случайно засветить.