Перейти к содержимому

Клиенты

Есть две формы запроса. С токеном профиля секрет — это токен профиля, а идентичность берётся из профиля, поэтому X-AD-User не нужен. С общим секретом запрос обязан нести WINRIG_AUTH_TOKEN и X-AD-User. Сервер проверяет токен прежде, чем доверяет X-AD-User: этот заголовок — ключ кэша паролей и сессий в памяти.

setup --write-config <клиент> записывает определение MCP-сервера в конфигурацию клиента. Флаг требует уровень:

  • --scope global пишет пользовательскую конфигурацию.
  • --scope project пишет текущий репозиторий. Project-уровень находит ближайший каталог-предок с .git (с откатом к текущему каталогу).

Поддерживаемые клиенты: opencode, claude-code, codex, cursor.

Окно терминала
./target/release/winrig setup corp --user 'DOMAIN\user' --write-config opencode --scope global
./target/release/winrig setup corp --user 'DOMAIN\user' --write-config claude-code --scope project

Определение сервера включает WINRIG_TOKEN, WINRIG_PROFILE_DIR и WINRIG_STATE_DIR. Поэтому клиент находит профиль даже при нестандартных каталогах.

setup --write-config opencode --scope global пишет ~/.config/opencode/opencode.json. Токен профиля подставляется из приватного файла:

{
"mcp": {
"winrig": {
"type": "local",
"command": ["/path/to/winrig", "stdio", "--profile", "corp"],
"environment": { "WINRIG_TOKEN": "{file:~/.config/opencode/winrig-token}" },
"disabled": false
}
}
}

Токен профиля идёт в отдельный файл 0600, а ссылка {file:...} подставляет его. Поэтому токен профиля никогда не лежит внутри конфигурации клиента. На project-уровне этот файл живёт в WINRIG_STATE_DIR, а не в репозитории.

setup --write-config claude-code --scope global пишет блок mcpServers файла ~/.claude.json. Эквивалент через CLI:

Окно терминала
claude mcp add winrig -- /path/to/winrig stdio --profile corp

setup --write-config codex --scope global пишет ~/.codex/config.toml:

[mcp_servers.winrig]
command = "/path/to/winrig"
args = ["stdio", "--profile", "corp"]
[mcp_servers.winrig.env]
WINRIG_TOKEN = "<токен из setup>"

setup --write-config cursor --scope global пишет блок mcpServers файла ~/.cursor/mcp.json.

winrig doctor читает конфигурации всех четырёх клиентов и обоих уровней. Он перечисляет каждый winrig-сервер с действующими значениями известных настроек: WINRIG_ALLOWED_HOSTS, WINRIG_ALLOW_INSECURE_TLS, WINRIG_ALLOW_FILE_WRITE и остальных переменных WINRIG_*. Отсутствующая настройка показывается со значением по умолчанию и пометкой (default). Команда сравнивает серверы и помечает каждую настройку, по которой они расходятся. Значение печатается только для известных настроек; любая другая переменная показывается как set или empty, поэтому значение токена не раскрывается. Служебные переменные уровня сервера (WINRIG_TOKEN, WINRIG_PROFILE_DIR и остальные переменные идентичности) показываются, но не сравниваются: они различаются между серверами по замыслу.

Окно терминала
./target/release/winrig doctor

Команда работает только на чтение. Она не пишет ни файл конфигурации, ни профиль. Файл конфигурации, который не удалось прочитать, пропускается с указанием пути и причины, а остальная часть отчёта сохраняется. Запись winrig, которая не относится к stdio-серверу, например HTTP-запись, показывается как not compared и не влияет на код возврата.

Коды возврата: 0, когда серверы согласны, 1, когда они расходятся, файл конфигурации пропущен или запись не разобрана, и 2 при ошибке использования.

Режим stdio обслуживает один локальный клиент. Режим HTTP обслуживает несколько проектов на конечной точке /mcp (по умолчанию 127.0.0.1:8005). Любой MCP-клиент работает так же. Используйте stdio-определение, которое напечатал setup, либо направьте клиент на streamable-HTTP конечную точку. Передайте Authorization: Bearer <token>.

Модифицирующие инструменты получают подтверждение через MCP elicitation. Они отказывают (fail-closed), когда клиент не может спросить. opencode 1.18.31 объявляет только roots. Поэтому модифицирующие инструменты отказываются там работать и говорят об этом, а не действуют без подтверждения. Инструменты только для чтения работают нормально.