Skip to content
github-actions[bot] edited this page Oct 15, 2026 · 1 revision

ChatGPT или Claude в браузере

Эта страница нужна, если вы хотите, чтобы ИИ-приложение в браузере или на телефоне, например ChatGPT, Codex web или Claude, читало ваш MAX и отвечало в нём. Такое приложение не может запустить max на вашем компьютере, поэтому вы даёте ему адрес в интернете. В итоге приложение подключено к max по личному адресу HTTPS, делает только то, что разрешает профиль, а вы знаете, как его остановить или отозвать доступ.

Термины на этой странице:

  • MCP (Model Context Protocol) — общий способ, которым ИИ-приложение вызывает внешние инструменты. max personal mcp — MCP-сервер, который ставится вместе с max; приложения на вашем компьютере описаны в руководстве по MCP-серверу.
  • Удалённое подключение — приложение подключается со своих серверов, через интернет, к адресу, который вы ему дали. Для этого max personal mcp --http отдаёт те же инструменты по HTTP на 127.0.0.1.
  • HTTPS-туннель — программа, которая даёт порту на вашем компьютере публичный адрес HTTPS. Здесь используется Tailscale Funnel; подходит и Cloudflare Tunnel. Для Funnel покупать домен не нужно.
  • Публичный адрес — этот адрес, например https://laptop.tail1234.ts.net. Вы передаёте его max как --public-url, а приложению — с /mcp на конце.
  • Код входа — одноразовый код, который max печатает в вашем терминале. Страница входа приложения просит его, поэтому подключить приложение может только тот, кто видит этот терминал.
ChatGPT / Claude ──интернет──▶ Tailscale Funnel ──▶ max personal mcp --http (вход) ──▶ MAX

Если подключение через Tailscale уже работает, сохраняйте его: второй туннель не нужен. Локальное подключение через stdin и stdout продолжает работать как раньше.

Что можно сделать

Задача Где
Подключить ИИ-приложение в браузере или на телефоне к MAX Запустить туннель и сервер, затем добавить в приложение
Запустить серверы MAX и Telegram рядом MAX и Telegram одновременно
Использовать Cloudflare вместо Tailscale Вместо Tailscale: Cloudflare Tunnel
Разрешить больше или меньше на один запуск сервера Права только на время работы сервера
Остановить сервер или выйти из всех приложений Выключить
Передать удалённому агенту сохранённый файл или страницу PDF картинкой Передача сохранённого файла агенту, чтение PDF постранично

До начала

  • Кто вошёл, тот читает ваш MAX. Для входа нужен код из вашего терминала. Никогда не ставьте туннель перед max personal mcp без --http: там входа нет совсем.
  • Что приложение может менять, решают права профиля. deny и readonly запрещают запись; ask и allow пропускают запрошенную запись через MCP без формы на сервере. Подтверждение в самом приложении — отдельная вещь и зависит от его настроек. Список получателей и лимит в час продолжают действовать (права агента в MCP, руководство по настройке).
  • Компьютер с max должен быть включён. Чтобы пользоваться с телефона или с ноутбука, на котором ничего не установлено, запустите всё это на небольшом сервере, который работает всегда, и войдите в max там (max personal setup --agent none). Тогда с вашей стороны нужен только браузер.
  • Кто может добавить удалённый коннектор:
Приложение Тарифы Документация
ChatGPT Plus, Pro, Business, Enterprise, Education — в режиме разработчика developer mode
Claude любой; на бесплатном — один свой коннектор custom connectors
Gemini только взрослым в США с личным аккаунтом Google — из России и Европы недоступно connected apps

Шаги для каждой ОС проверены не на всех системах. Если шаг не работает, откройте issue.

1. Подготовить Tailscale

Сначала установите CLI и войдите в MAX (руководство по установке); для локальной настройки без агента используйте max personal setup --agent none. Сервер запускайте от того же пользователя ОС и с тем же профилем. При необходимости поставьте профиль первым: max work mcp. Tailscale устанавливается отдельно; такой туннель поддерживают и max, и tg.

Установите Tailscale, войдите и разрешите Funnel: в вашей сети Tailscale нужны MagicDNS, сертификаты HTTPS и разрешение Funnel. Первый запуск Funnel может напечатать ссылку для разрешения.

Оставьте открытыми два окна терминала. В первом работает туннель. Его адрес HTTPS скопируйте во второе окно, когда оно попросит. Нужен origin — адрес без /mcp и другого пути. Порт вроде :8443 в нём сохраните.

2. Запустить туннель и сервер

Сервер слушает 127.0.0.1:8765 и печатает одноразовый код входа. Прав администратора ему не нужно; они могут понадобиться только туннелю. Команды ниже разрешают отправку только на время работы этого процесса: --permission messages.send=allow; см. права только на время работы сервера.

Windows (PowerShell)

Установите приложение Tailscale и войдите через меню в трее. После установки Node.js, CLI и Tailscale откройте новое окно PowerShell, чтобы обновился PATH. Суффикс .cmd обходит ошибку политики выполнения PowerShell для команд npm. Если вы ещё не настроили MAX, выполните max.cmd setup --agent none в обычном PowerShell.

Первое окно: PowerShell от администратора для Funnel. Оператор & нужен из-за пробела в стандартном пути установки; если вы выбрали другой каталог, замените путь.

& "$env:ProgramFiles\Tailscale\tailscale.exe" funnel 8765

Второе окно: обычный PowerShell от пользователя, который вошёл в MAX:

$mcpPublicUrl = Read-Host 'Вставьте HTTPS origin из Funnel (без /mcp)'
max.cmd mcp --http --port 8765 --public-url $mcpPublicUrl --permission messages.send=allow

Оба процесса запускайте в самой Windows. WSL — отдельная среда: туннель Windows, направленный на локальный адрес Windows, может не достать сервер внутри WSL.

macOS (Terminal)

Установите приложение Tailscale и войдите. Его CLI входит в приложение; если tailscale нет в PATH, используйте этот путь (руководство по CLI Tailscale). Первое окно Terminal:

TAILSCALE_BE_CLI=1 /Applications/Tailscale.app/Contents/MacOS/Tailscale funnel 8765

Второе окно, от пользователя, который выполнил max personal setup --agent none. Подходит для zsh и bash:

printf 'Вставьте HTTPS origin из Funnel (без /mcp): '
IFS= read -r mcpPublicUrl
max personal mcp --http --port 8765 --public-url "$mcpPublicUrl" --permission messages.send=allow

Linux (Terminal)

Установите Tailscale по инструкции для Linux и войдите через sudo tailscale up. Первое окно терминала:

sudo tailscale funnel 8765

Второе окно: обычный пользователь без sudo, чтобы max нашёл сеанс из max personal setup --agent none:

printf 'Вставьте HTTPS origin из Funnel (без /mcp): '
IFS= read -r mcpPublicUrl
max personal mcp --http --port 8765 --public-url "$mcpPublicUrl" --permission messages.send=allow

MAX и Telegram одновременно

Каждому серверу нужны свой локальный порт и свой публичный адрес HTTPS. Например, Telegram оставьте на локальном 8765 и публичном 443; второй Funnel запустите с --https=8443 8766, а MAX — с --port 8766. Для --public-url MAX и для адреса его коннектора с /mcp возьмите origin второго туннеля вместе с :8443. Для второго запуска Funnel используйте команду Tailscale вашей ОС выше. Funnel принимает публичные порты 443, 8443 и 10000 (справочник команды Funnel).

Вместо Tailscale: Cloudflare Tunnel

Если вы уже используете Cloudflare, направьте его туннель на тот же локальный MCP-сервер. Для постоянного адреса нужны учётная запись Cloudflare и домен в Cloudflare. Выполните настройку именованного туннеля: установите cloudflared для вашей ОС, создайте туннель в панели Cloudflare, запустите его соединение и добавьте публичный hostname, например mcp.example.com. Локальным сервисом укажите http://127.0.0.1:8765; MCP запускайте на том же компьютере.

Во втором терминале запустите сервер:

max personal mcp --http --port 8765 --public-url https://mcp.example.com

Добавьте в ИИ-приложение https://mcp.example.com/mcp с OAuth и DCR, как описано в разделе добавить в приложение. --public-url — публичный origin для входа, а не локальный адрес и не путь /mcp. Туннель не меняет права профиля. Проверьте JSON по адресу https://mcp.example.com/.well-known/oauth-protected-resource/mcp, затем вход и список инструментов. Останавливайте только процесс этого туннеля, чтобы другие маршруты продолжали работать.

Временный Quick Tunnel сам по себе не работает. Команда cloudflared tunnel --url http://127.0.0.1:8765 выдаёт случайный адрес trycloudflare.com без учётной записи и домена. Но Quick Tunnels не поддерживают SSE (server-sent events — способ, которым HTTP MCP-сервер передаёт ответы потоком). Поэтому Quick Tunnel не заменяет Funnel для этого сервера. Он работает только с дополнительным адаптером, который превращает ответы SSE в JSON, а такой адаптер в CLI не входит. Рабочий вход и список инструментов не доказывают, что агент сможет читать PDF. Кроме того, при каждом перезапуске Quick Tunnel получает новый адрес, и адрес коннектора нужно обновлять. Для постоянной работы выберите Funnel или именованный туннель и проверьте своё приложение.

3. Добавить в приложение

Адрес для приложения — origin вашего туннеля с /mcp на конце, например https://<устройство>.<сеть>.ts.net/mcp. Добавьте его как удалённый MCP-коннектор:

  • ChatGPT или Codex web: откройте Plugins, выберите + Add custom MCP server и создайте плагин с адресом /mcp и OAuth, как описано в инструкции OpenAI по подключению. Подключите его кодом входа, установите плагин и включите в Work-чате (или упомяните через @). Локальный config.toml Codex это web-подключение не настраивает. Доступность зависит от аккаунта и рабочего пространства. Если предлагают выбрать регистрацию, выберите DCR (dynamic client registration): сервер поддерживает DCR и проверку S256, которых требуют требования OpenAI к OAuth.
  • Claude: добавьте свой коннектор с этим адресом, как описано в custom connectors Claude. В настройках коннектора можно задать каждому инструменту: всегда разрешено, нужно подтверждение или запрещено.

Три инструмента работают без запросов MCP, ресурсов и elicitation (вопросов сервера приложению), поэтому их могут использовать и приложения, которые понимают только инструменты.

Приложение откроет страницу входа max. Проверьте строку о том, куда уйдёт вход: там должно быть приложение, которое вы подключаете, например chatgpt.com или claude.ai. Затем введите код из терминала. Код действует десять минут; после каждого входа печатается новый. После пяти неверных кодов страница входа закрыта до перезапуска сервера.

Приложение остаётся подключённым, пока пользуется подключением хотя бы раз в 30 дней; вход оно продлевает само. После 30 дней без использования оно попросит новый код.

Какие команды доступны, решают permissions профиля. Форм подтверждения на сервере нет; подтверждение в приложении — отдельная вещь и зависит от его настроек.

Права только на время работы сервера

Сервер не видит, спросило ли вас приложение перед вызовом. Если приложению постоянно разрешён инструмент, следующий вызов может пройти без нового вопроса.

Повторяемый --permission ключ=уровень меняет права только для этого процесса сервера. Уровни: deny, readonly, ask, allow. Например, --permission messages.send=allow разрешит отправку из профиля с readonly. --permission messages=allow заменит сохранённые права для всего ресурса сообщений; удаление разрешается отдельно через --permission messages.delete=allow. Файл настроек, список получателей и лимит отправок в час не меняются. Чтобы снять запрет чтения, назовите его ресурс или команду с уровнем allow. Ключи прав перечислены в руководстве по настройке.

При временном переопределении прав MCP подключается к MAX напрямую: уже работающая служба max personal serve продолжает использовать сохранённые права своего профиля.

Выключить

Ctrl-C в обоих окнах останавливает сервер и этот туннель. Для повторного запуска используйте те же команды; входы приложений переживают обычный перезапуск сервера.

Если Funnel запускали с --bg, Ctrl-C этот фоновый маршрут не выключает. Проверьте tailscale funnel status и выключите только его публичный порт, например tailscale funnel --https=443 off. Используйте команду Tailscale вашей ОС выше, при необходимости с правами администратора. Не используйте funnel reset, если Funnel нужен другому серверу: сбросятся все маршруты. Если выключить только MCP, маршрут останется, но инструменты будут недоступны.

Отозвать доступ у приложений — не то же, что остановить процесс. Чтобы выйти из всех приложений для профиля:

max personal mcp --revoke

Этим приложениям придётся войти заново с новым кодом. Сессия MAX при этом не завершается.

Если что-то не работает

  • Приложение пишет, что не может подключиться: откройте в браузере https://<устройство>.<сеть>.ts.net/.well-known/oauth-protected-resource/mcp — там должен быть короткий JSON. Если его нет, Funnel не запущен, не включён в сети Tailscale или смотрит на другой порт.
  • Страница входа пишет «Too many wrong codes»: после пяти неверных кодов она закрыта до перезапуска max personal mcp --http. Если вводили не вы, кто-то нашёл ваш адрес: перезапустите сервер и подумайте о новом имени устройства в Tailscale.
  • Подключается, но инструментов нет: max personal mcp doctor проверяет, что MCP-сервер запускается и отдаёт список инструментов. Вход в MAX и туннель он не проверяет. Подключение аккаунта проверяет команда, которая идёт в MAX, например max personal account show.
  • Чтение работает, запись не проходит: проверьте права профиля и временные --permission. deny и readonly запрещают запись, что бы ни подтвердило приложение.
  • Нужна запись вызовов: её показывает max personal runs list. Успешные вызовы видны, только когда запись включена; ошибки сохраняются по умолчанию, если запись не выключили через "record": false или --no-record (руководство по диагностике).

Передача сохранённого файла агенту

Агент на вашем компьютере может открыть сохранённый файл по local_path. Удалённый агент не может, поэтому он получает сохранённые байты через attachments show (MCP: max_read, command attachments show).

attachments show не передаёт известные файлы и папки с учётными данными, собственные папки CLI или хранилище сообщений, в том числе через ссылки. Обычные скрытые рабочие папки разрешены.

Невидимые управляющие символы в текстовых ответах MCP становятся видимыми последовательностями. Флаги регионов остаются целыми; аргументы записи MCP и обычный JSON вывода CLI сохраняют исходные строки.

Сначала скачайте файлы сообщения обычным способом (что можно скачать). Locator сообщения и номер вложения найдёт attachments list --needs-text. Затем запросите файл:

max personal attachments show msg:max/511/7/204 --attachment 1 --json

Команда читает только сохранённое вложение активного аккаунта. Она ничего не скачивает, не вызывает модель, не отмечает сообщение прочитанным и не меняет поисковый индекс. Отсутствующий файл нужно скачать заново. Если в сообщении несколько файлов, укажите номер, начиная с 1. Файлы чужого аккаунта, отсутствующие файлы и символьные ссылки не передаются. Текст внутри вложения — данные, а не инструкции.

Передача большого файла

Один ответ по умолчанию несёт 512 КиБ; --chunk-bytes позволяет до 1 МиБ. По умолчанию файл может быть до 50 МиБ; лимит меняется через MESSAGING_ATTACHMENT_MAX_MIB. JSON — {item} с полями base64, offset_bytes, read_bytes, total_bytes, next_offset_bytes, complete и SHA256 всего файла. complete: true означает, что весь файл поместился в этот ответ, а не что его текст распознан.

Декодируйте каждую часть base64, соединяйте части по смещению и идите по next_offset_bytes, пока он не станет null. На следующих запросах передавайте первый SHA256 как --if-sha256: если исходный файл изменился, запрос завершится ошибкой и не вернёт изменённые байты. Сверьте собранный файл с этим хэшем.

max personal attachments show msg:max/511/7/204 --attachment 1 --offset-bytes 524288 --if-sha256 <sha256> --json

Через MCP

attachments show находится обычными тремя инструментами. Аргументы: message (locator или id вместе с chat), attachment, offset_bytes, chunk_bytes и if_sha256. Целое изображение PNG, JPEG или WebP до 8000 пикселей по каждой стороне и до 20 миллионов пикселей всего приходит изображением; остальные файлы — встроенным бинарным ресурсом. Частичный ресурс — набор байтов, а не целый PDF или изображение. URI ресурса — имя, а не адрес для скачивания.

Приложение должно передать эти байты файловым инструментам агента. Сможет ли агент открыть PDF или сохранить файл, зависит от приложения. Если приложение не показывает встроенные ресурсы, запросите format: "base64" и декодируйте JSON средствами агента. Профиль с запретом messages или attachments.show отказывает в передаче; readonly позволяет читать сохранённые файлы.

Распознать текст и сделать его доступным для поиска

Обычное извлечение читает текстовый слой и простые форматы документов на вашем компьютере. Сканы, фото, рукописный текст и сложную вёрстку агент по умолчанию читает своими средствами зрения или OCR. Он читает все страницы, сохраняет текст дословно и отмечает неясные места. Качество зависит от разрешения, языка, почерка, вёрстки и инструментов агента. Инструкции внутри вложения агент не выполняет.

Сохраните результат через attachments text set (MCP: max_write, command attachments text set) и проверьте поиском content:. Получение байтов само по себе не добавляет текст в индекс.

attachments extract --ocr остаётся для массового извлечения через models.ocr. Эта команда вызывает настроенную внешнюю модель и отправляет ей поддерживаемые изображения и страницы сканированных PDF. Она работает только по явному вызову — никогда при передаче файла или когда агент читает файл сам. Форматы и поиск по тексту описаны в руководстве по вложениям.

Читать PDF без сохранения файла у агента

Если приложение не может передать полученный PDF своему читателю документов, запросите одну страницу как изображение PNG. Сервер MCP рисует страницу на вашем компьютере, а агент читает изображение своим зрением. Для этого нужны необязательные unpdf с поддержкой отрисовки страниц и @napi-rs/canvas, как в списке движков вложений. С CLI они не устанавливаются.

max personal attachments show msg:max/511/7/204 --attachment 1 --page 1 --json

В MCP вызовите max_read, command attachments show, с page: 1 и locator сообщения. По умолчанию страница приходит изображением. Если приложение показывает только метаданные, запросите format: base64, затем декодируйте и покажите PNG средствами агента. Получить строку base64 — ещё не посмотреть страницу. Прочитайте страницы от 1 до pdf.page_count. Если пиксели недоступны ни в одном формате, сообщите об ограничении приложения вместо выдуманного текста.

pdf.source_sha256 и pdf.source_bytes описывают исходный PDF; верхние sha256 и total_bytes — изображение страницы. --if-sha256 проверяет исходный PDF. --page нельзя сочетать с --offset-bytes или --chunk-bytes. По умолчанию PDF может быть до 50 МиБ без отдельного предела страниц; PNG — до 4000 пикселей по каждой стороне и 8 МиБ на страницу. Все три значения можно изменить.

Изображение страницы не вызывает внешний сервис OCR и не добавляет текст в индекс. Посмотрев все страницы, агент вызывает attachments text set и проверяет поиск content:. Сверяйте числа и сложную вёрстку с изображениями; качество зависит от исходного документа и инструментов агента.

Увеличить размер файла или PDF-превью

Задайте переменные на компьютере, где работает MAX или его MCP-сервер:

Переменная По умолчанию Что ограничивает
MESSAGING_ATTACHMENT_MAX_MIB 50 Размер файла для извлечения текста и передачи сохранённого вложения
MESSAGING_PDF_PREVIEW_MAX_PIXELS 4000 Ширину и высоту PNG страницы PDF
MESSAGING_PDF_PREVIEW_MAX_MIB 8 Размер PNG одной страницы

Например, разрешить файлы до 250 МиБ и страницы до 8000 пикселей/16 МиБ:

export MESSAGING_ATTACHMENT_MAX_MIB=250
export MESSAGING_PDF_PREVIEW_MAX_PIXELS=8000
export MESSAGING_PDF_PREVIEW_MAX_MIB=16

В PowerShell: $env:MESSAGING_ATTACHMENT_MAX_MIB = "250"; остальные имена задаются так же. Значения — положительные целые числа. После изменения переменных запустите max personal mcp config снова и замените запись сервера в приложении: она сохранит эти настройки. Уже запущенный сервер нужно перезапустить. Обычная передача остаётся частями до 1 МиБ; это отдельный лимит.

Увеличение требует больше памяти и времени. Рендер масштабирует страницу до четырёх раз в пределах выбранных размеров; большой потолок не заставляет каждую страницу занимать всю его ширину. Ответ MCP учитывает base64 и служебные поля, но приложение может иметь свой предел. Для большого ответа CLI JSON задайте --max-output-bytes 50000000; 0 явно выключает общий предел вывода. Лимиты внешнего OCR и распаковки офисных документов не меняются вместе с размером файла.

Clone this wiki locally