Многие серверы требуют токен — ключ доступа к внешнему сервису (трекеру, 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.