codex-async-mcp
codex-async-mcp
Локальный MCP-сервер, который оборачивает CLI codex асинхронно — немедленно возвращает job_id вместо блокировки, поэтому Claude никогда не достигает тайм-аута протокола MCP (-32001).
Требования
Python 3.11+
CLI
codexустановлен и находится в$PATH(v0.125.0+)Claude Code CLI
Установка
cd ~/payroll-mcp # or wherever this repo lives
pip install -e ".[dev]"Проверка:
python -c "from codex_async_mcp.server import mcp; print(mcp.name)"
# → codex-async-mcpРегистрация в Claude
Глобально (все проекты)
claude mcp add codex-async -s user -- python -m codex_async_mcp.serverТолько для проекта
cd ~/payrollservice-thailand # or any project
claude mcp add codex-async -- python -m codex_async_mcp.serverПроверка
claude mcp list
# codex-async: python -m codex_async_mcp.server - ✓ ConnectedДобавление разрешений для инструментов (settings.local.json)
{
"permissions": {
"allow": [
"mcp__codex-async__codex_start",
"mcp__codex-async__codex_poll",
"mcp__codex-async__codex_list",
"mcp__codex-async__codex_cancel"
]
}
}Инструменты
Инструмент | Описание |
| Запуск codex в фоновом режиме → мгновенно возвращает |
| Проверка статуса + последние строки вывода |
| Список недавних заданий (сначала новые) |
| Завершение запущенного задания |
Значения approval_policy
Значение | Флаг Codex | Поведение |
|
| Песочница только для чтения, без записи |
|
| Автоматическое применение правок |
|
| Без запросов, без песочницы |
Для автоматизации Claude всегда используйте full-auto — режим suggest ожидает интерактивного ввода, который никогда не поступит внутри подпроцесса.
Пример использования
codex_start(
prompt="In app/services/prorate_calculation_service.rb line 96, change format(...) to number_to_currency(...)",
cwd="/Users/bbgummybear/payrollservice-thailand",
approval_policy="full-auto"
)
# → { job_id: "f3a9b2", status: "running", pid: 12345 }
codex_poll(job_id="f3a9b2")
# → { status: "running", output: "Reading file..." }
codex_poll(job_id="f3a9b2")
# → { status: "done", exit_code: 0, output: "Applied changes to prorate_calculation_service.rb" }Состояние задания
Задания хранятся в ~/.codex-async/jobs/{job_id}/:
~/.codex-async/jobs/f3a9b2/
meta.json ← status, pid, timestamps, exit_code
output.txt ← stdout + stderr from codexСтруктура meta.json:
{
"job_id": "f3a9b2",
"status": "running | done | error | cancelled",
"prompt": "...",
"cwd": "/path/to/repo",
"approval_policy": "full-auto",
"pid": 12345,
"started_at": "2026-04-29T10:00:00+00:00",
"finished_at": null,
"exit_code": null
}Устранение неполадок
codex-async: ... - ✗ Failed в claude mcp list
Python не найден или пакет не установлен в правильной среде.
# Check which python Claude is using
which python
# If using conda, register with the full path
claude mcp add codex-async -s user -- /Users/bbgummybear/miniconda3/bin/python -m codex_async_mcp.server
# Verify the package is installed in that environment
/Users/bbgummybear/miniconda3/bin/python -c "import codex_async_mcp; print('ok')"status: "error" сразу после codex_start
Codex не удалось запустить. Проверьте необработанный вывод:
cat ~/.codex-async/jobs/<job_id>/output.txtРаспространенные причины:
Сообщение вывода | Исправление |
|
|
| Версия Codex < 0.125.0 — выполните |
|
|
status: "running" бесконечно, никогда не завершается
Подпроцесс завис (ожидает ввода или застрял в цикле).
# Check if the process is still alive
ps aux | grep codex
# Check live output
tail -f ~/.codex-async/jobs/<job_id>/output.txt
# Cancel the job
codex_cancel(job_id="<job_id>")Самая частая причина: использование approval_policy="suggest", который приостанавливается для интерактивного подтверждения. Вместо этого используйте "full-auto".
Задание показывает status: "running" после перезапуска сервера
MCP-сервер потерял реестр Popen в оперативной памяти при перезапуске. Следующий вызов codex_poll обнаружит, что PID мертв, и автоматически обновит статус.
codex_poll(job_id="<job_id>")
# → { status: "done", ... } ← auto-resolved on first pollСтарые задания заполняют диск
# View all jobs sorted by date
ls -lt ~/.codex-async/jobs/
# Delete jobs older than 7 days
find ~/.codex-async/jobs -maxdepth 1 -type d -mtime +7 -exec rm -rf {} +Структура проекта
codex-async-mcp/
├── README.md
├── pyproject.toml
├── src/
│ └── codex_async_mcp/
│ ├── __init__.py
│ ├── server.py # MCP entry point, tool definitions
│ ├── job_manager.py # spawn / poll / cancel / list
│ └── config.py # JOBS_DIR, CODEX_BIN, defaults
└── tests/
└── test_job_manager.pyЗапуск тестов
pytest tests/ -vResources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/benzkittisak/claude-codex-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server