# Секреты и переменные окружения

Курс: MCP: подключаем инструменты — https://zero2claude.ru/learn/mcp
Канонический URL: https://zero2claude.ru/learn/mcp/2-4-sekrety-env

Токены нельзя писать прямо в .mcp.json — иначе они утекут в репозиторий. Передавай их серверу через переменные окружения.

Многие серверы требуют токен — ключ доступа к внешнему сервису (трекеру, API, базе). Главное правило: токен не место в конфиге.

## Почему не в .mcp.json

Проектный `.mcp.json` можно закоммитить в репозиторий. Если вписать туда токен в открытом виде, он уедет в историю Git — и его увидит каждый, у кого есть доступ к репозиторию. Отозвать утёкший токен потом сложнее, чем не допустить утечки.

Плохо:

```
{
  "mcpServers": {
    "tracker": {
      "command": "npx",
      "args": ["-y", "tracker-mcp-server"],
      "env": { "TRACKER_TOKEN": "sk-1234-секрет-в-открытую" }
    }
  }
}
```

## Как правильно: через переменную окружения

Токен держат в переменной окружения, а в конфиге лишь ссылаются на её имя. Сначала задаёшь переменную в своём окружении (значение остаётся у тебя, не в репозитории):

```
export TRACKER_TOKEN="твой-секрет"
```

А в конфиге передаёшь серверу не само значение, а отсылку к переменной:

```
{
  "mcpServers": {
    "tracker": {
      "command": "npx",
      "args": ["-y", "tracker-mcp-server"],
      "env": { "TRACKER_TOKEN": "${TRACKER_TOKEN}" }
    }
  }
}
```

Теперь в репозиторий попадает только имя переменной, а сам токен — нет.

Если токен всё-таки попал в конфиг и был закоммичен — считай его скомпрометированным: отзови его в сервисе и выпусти новый. Удаления из файла недостаточно, он остаётся в истории Git.
