Skip to main content
Glama

ask-chat-mcp

MCP-сервер, который позволяет Claude напрямую советоваться с ChatGPT — специалист со специалистом, опираясь на реальные файлы, в режиме только для чтения, без ограничений по размеру в обе стороны.

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

Поэтому обе стороны говорят на полной технической глубине. Ничего не упрощается для постороннего, потому что в цикле его нет: человек делегировал вопрос именно для того, чтобы не сидеть в его середине.

flowchart TD
    You([You]) -->|"'Ask Chat'"| Claude[Claude]
    Claude -->|"the problem + file PATHS"| MCP["ask-chat MCP server"]
    MCP -->|"codex exec --sandbox read-only"| Codex[Codex CLI]
    Codex -->|"opens the files itself"| Repo[("your repo, read-only")]
    Codex <-->|"one thread, kept open"| GPT["ChatGPT (your subscription)"]
    GPT -->|"answer + what context it still needs"| Codex
    Codex -->|"full answer, nothing truncated"| MCP
    MCP -->|"arrives as if YOU wrote it"| Claude
    Claude -->|"what Claude makes of it"| You

Три вещи, которые эта диаграмма призвана сделать очевидными:

  • Границу пересекают пути, а не содержимое файлов. ChatGPT сам открывает файлы, поэтому нет полезной нагрузки, которую нужно бюджетировать, и нечего усекать.

  • Каждый ответ сообщает, какой контекст ему ещё нужен. Предоставить его и спросить снова — это нормальный путь, а не ошибка — уверенный ответ, опирающийся на молчаливое допущение, — это именно тот сбой, который здесь предотвращается.

  • Ответ возвращается как ваш ход, а не как отчёт. Claude отвечает на него так же, как ответил бы вам.

Содержание

Почему не автоматизировать десктопное приложение ChatGPT

Очевидный подход — управлять окном десктопного приложения, вставлять промпт, считывать ответ — это то, что делают известные MCP-серверы в этой области. Для этого сценария это тупик, и стоит явно объяснить почему, потому что причины не очевидны, пока не построишь это:

  • У промпта есть практический потолок. Он попадает в композер через вставку из буфера обмена, и большие вставки молча усекаются. Безопасный бюджет — примерно 12 тысяч символов. Этого недостаточно для реального вопроса плюс документов, от которых он зависит.

  • Ответ тоже усекается, и хуже того — невидимо. Его приходится считывать из дерева доступности приложения, а виртуализированный контейнер прокрутки не хранит там содержимое за пределами экрана. Длинный ответ возвращается частичным, без указания на это.

  • Он захватывает ваш экран. Окно должно быть в фокусе, и в него отправляются нажатия клавиш. Вы не можете печатать, пока он работает, и один вызов за раз — жёсткий предел.

  • Он ломается при изменениях интерфейса, потому что отображаемое дерево доступности — это не интерфейс, стабильность которого кто-то обещал.

Вместо этого использование Codex CLI устраняет все четыре проблемы. Он работает без головы, читает файлы напрямую с диска и возвращает ответ в stdout. Ключевой момент: он аутентифицируется с подпиской ChatGPT, так что это не API OpenAI с посекундной оплатой — это тот тариф, который вы уже оплачиваете.

Требования

  • Node.js 18+

  • Codex CLI, выполнен вход с вашим аккаунтом ChatGPT:

npm install -g @openai/codex
codex login          # choose "Sign in with ChatGPT"

Установка

git clone https://github.com/spe-investigator/ask-chat-mcp.git c:\src\ask-chat-mcp
cd c:\src\ask-chat-mcp
.\install.ps1 -DefaultCwd c:\src\YourProject

install.ps1 проверяет предварительные условия, собирает проект, сообщает, установлен ли Codex и выполнен ли вход, и регистрирует сервер в Claude Code. Идемпотентен — можно повторно запускать после pull.

Перезапустите Claude Code и подтвердите с помощью /mcp.

Инструменты

ask_chatgpt

Параметр

Обязателен

Значение

question

да

Проблема, сформулированная так, чтобы быть самодостаточной для того, кто не видел этот код. Пишите на полной технической глубине — читатель — другой специалист

files

нет

Пути относительно cwd, на которые указать ChatGPT. Свободно ссылайтесь на целые файлы — они читаются, а не вставляются

cwd

нет

Каталог, из которого он читает. Доступ к файлам ограничен этим деревом

session

нет

Управление потоком — см. ниже. Опустите для обычного случая

model

нет

например, gpt-5.5. Опустите для значения по умолчанию Codex

timeout_seconds

нет

По умолчанию 300

Передавайте пути, а не содержимое. В этом вся суть: нет бюджета полезной нагрузки, который нужно тратить, поэтому отправляйте реальные файлы.

files — это указатель, а не белый список. Он говорит начни здесь; ChatGPT может и будет открывать всё остальное, что ему нужно, в пределах cwd, и сообщит вам, когда это сделает. Так что неполный список деградирует gracefully, а не даёт неверный ответ — cwd — это настоящая граница.

Потоки

По умолчанию первый вызов в сессии запускает поток Codex, и каждый последующий вызов продолжает его, так что ChatGPT сохраняет контекст того, что вы уже обсуждали, а не встречает каждый вопрос холодно.

Граница сессии — это процесс сервера. MCP-клиент порождает stdio-сервер на каждую сессию, поэтому поток хранится в памяти и не нуждается в реестре, привязанном к репозиторию или клиенту: новая сессия начинается с чистого листа, а две параллельные сессии получают независимые потоки, а не топчут общий.

session

Эффект

опущено

Продолжить поток этой сессии, начав новый, если его нет

new

Намеренно начать чистый поток

last

Подхватить самый последний поток в этом каталоге из более ранней сессии

id потока

Возобновить этот конкретный поток

last ограничен каталогом, потому что Codex фильтрует записанные сессии по рабочему каталогу, если не указано иное.

chatgpt_status

Сообщает, установлен ли Codex и выполнен ли вход, и на каком потоке находится эта сессия. Проверяйте перед тем, как полагаться на ask_chatgpt, и чтобы объяснить сбой без догадок.

Конфигурация

Переменная

По умолчанию

Назначение

ASK_CHAT_DEFAULT_CWD

cwd сервера

Каталог, используемый, когда вызов не указывает его

ASK_CHAT_TIMEOUT_SECONDS

300

Таймаут по умолчанию

ASK_CHAT_MODEL

по умолчанию Codex

Модель по умолчанию

ASK_CHAT_CODEX_BIN

codex

Путь к бинарнику Codex

CODEX_HOME

~/.codex

Где Codex хранит учётные данные

Заметки по дизайну

Только чтение. Codex — это кодинг-агент, который может редактировать файлы. Консультирующий специалист, который может переписать ваше рабочее дерево, — это обуза, а не фича. codex exec уже по умолчанию работает в песочнице только для чтения, а на новом потоке также передаётся явный --sandbox read-only, так что гарантия не зависит от того, что значение по умолчанию останется прежним. На возобновлённом потоке этот флаг недоступен — см. ниже.

Каждый ответ сообщает о своей достаточности. Промпт просит ChatGPT явно указать, достаточно ли полученного контекста, точно назвать, чего ему ещё не хватало — файла, определения, измерения, ограничения — и отметить, какие части ответа опираются на допущение, которое ему пришлось сделать. Это важнее, чем звучит: режим отказа хорошо проинструктированной модели — не отказ отвечать, а уверенный ответ вокруг пробела, о котором никто не знал. Название пробела делает следующий вызов тривиальным, поскольку предоставление файла стоит пути.

Ни один флаг не передаётся на веру. Установленная сборка проверяется один раз, и необязательные флаги используются только в том случае, если она их объявляет. Codex быстро развивается; угадывать его интерфейс было бы хрупко без выгоды.

exec и exec resume проверяются отдельно, потому что они не принимают одинаковые параметры — resume отклоняет --sandbox и --cd наотрез. Предположение одного набора флагов для обоих приводит к вызову, который умирает при разборе аргументов, вместо того чтобы что-то сделать — именно так это и было обнаружено. На возобновлённом потоке гарантия только для чтения поэтому опирается на значение по умолчанию codex exec плюс политику, под которой был создан поток, а не на второй явный флаг; рабочий каталог в любом случае берётся из порождённого процесса.

Ни в одном направлении нет ограничения длины. Промпт передаётся через stdin с помощью codex exec -, поэтому он никогда не попадает в командную строку и не может упереться в потолок аргументов ~32k. Ответ возвращается через --output-last-message, читается из файла, а не извлекается из потока, который также несёт вывод прогресса. Прогресс идёт в stderr и сохраняется для диагностики.

Обработка шима Windows. npm устанавливает codex как .cmd-шим, который Node отказывается запускать напрямую после исправления инъекции аргументов 2024 года. Неудачный прямой запуск повторяется через оболочку. Поскольку промпт передаётся через stdin, а не через argv, этот повтор не представляет опасности цитирования для единственного ввода, который является произвольным текстом.

Ограничения

  • Codex должен быть выполнен вход. codex login — это интерактивный браузерный процесс; его нельзя автоматизировать, и chatgpt_status сообщит вам, когда он истёк.

  • Доступ к файлам ограничен cwd. Намеренно. Укажите корень репозитория, который вы хотите просмотреть.

  • Это не быстро. Содержательный ответ по реальным файлам занимает десятки секунд. Таймаут по умолчанию — пять минут.

  • Поток живёт и умирает вместе с сессией. Перезапуск клиента начинает новый поток. session: "last" подхватывает предыдущий, но нет списка предыдущих потоков, из которого можно выбирать.

  • Потоки не видны в ChatGPT. Codex записывает их в ~/.codex/sessions/ как JSONL; они не появляются в боковой панели ChatGPT или в Projects. Ничто в этом дизайне не может это изменить (openai/codex#21079).

Related MCP Connectors