Remote Coding Runtime
Удалённая среда выполнения кода
Нейтральная к модели и клиенту удалённая среда выполнения кода с единой стабильной управляющей плоскостью Cloudflare и исходящими только локальными Runner'ами.
ChatGPT / Claude / Cursor / any MCP client
│ HTTPS stateless MCP
▼
Cloudflare Worker
Admin UI · RegistryDO · RunnerDO
│ authenticated outbound WebSocket RPC
▼
Local Runner
filesystem · transactional patch · Git · process · persistent jobsCloudflare не выполняет код и не вызывает модель ИИ. MCP-клиент выполняет рассуждения; Runner выполняет работу с файловой системой, Git и процессами. Закрытие браузера, чата, MCP-запроса или WebSocket Runner'а не останавливает уже запущенное задание.
Архитектура
Worker: единственная публичная конечная точка MCP/управляющей плоскости. Он аутентифицирует URL MCP-клиентов, обслуживает небольшой административный интерфейс и маршрутизирует ограниченные RPC-сообщения.
RegistryDO: метаданные SQLite для Runner'ов, рабочих областей, исторических заданий, пароля администратора/состояния сеанса и учётных данных MCP-клиентов.
RunnerDO: один гибернируемый Durable Object на каждого Runner'а. Он владеет текущим исходящим WebSocket Runner'а и связанным RPC-мостом; он никогда не выполняет работу по кодированию.
Runner: исходящий только Node-процесс с доверенными сопоставлениями рабочих областей, ограничением путей, службами патчей/Git, локальными подпроцессами и постоянными журналами/метаданными заданий.
Протокол:
packages/protocolпредоставляет строгие схемы TypeScript и сгенерированную нейтральную к языку JSON-схему для будущих Runner'ов на Go/Rust.
Ядро Cloudflare использует только Workers плюс Durable Objects на основе SQLite. Оно не использует OAuth, KV, D1, Queues, R2, Sandbox, Containers, Dynamic Workers, туннели, входящий SSH, среду выполнения GitHub Actions или API моделей ИИ.
Related MCP server: cloud-to-local
Развёртывание
Требования: Node.js 20+, npm, Git, Wrangler и учётная запись Cloudflare с включёнными Durable Objects на основе SQLite.
git clone https://github.com/aloneio/remote-coding-runtime.git
cd remote-coding-runtime
npm install
npm test
npm run typecheck
npm run build
npm run validate:workerНастройте три производственных секрета, используемых администрированием Runner'а и внутренним каналом управления:
cd apps/worker
npx wrangler secret put ADMIN_TOKEN
npx wrangler secret put RUNNER_TOKEN_PEPPER
npx wrangler secret put INTERNAL_CONTROL_SECRETЗатем разверните только когда готовы:
npx wrangler deploy --config wrangler.jsoncnpm run validate:worker запускает Wrangler с --dry-run. Убедитесь, что его вывод содержит --dry-run: exiting now; это не доказывает квоты развёрнутой учётной записи или поведение производственной сети.
Первоначальная настройка
Откройте развёрнутый корневой URL, например:
https://mcp.aloneio.com/Новый RegistryDO отображает:
Welcome to Remote Coding Runtime
Create administrator passwordПервый допустимый запрос настройки побеждает атомарно. Пароль начальной загрузки не требуется. Установите пароль сразу после развёртывания. Если неинициализированный публичный экземпляр занят кем-то другим, удалите/сбросьте его состояние Cloudflare и разверните заново.
Пароли не хранятся в открытом виде. Registry хранит версионированный проверяющий PBKDF2-HMAC-SHA-256 со случайной солью. Вход создаёт случайный семидневный непрозрачный сеанс; браузер получает cookie Secure, HttpOnly, SameSite=Strict, Path=/, а RegistryDO хранит только его SHA-256 хэш. Смена пароля отзывает все существующие сеансы.
Запросы администратора, изменяющие состояние, используют привязанный к сеансу CSRF-токен и проверки same-origin. Настройка и вход также используют недолговечные предварительно аутентифицированные CSRF-cookie.
Добавление Runner'а
Аутентификация Runner'а остаётся независимой от входа администратора и учётных данных MCP-клиента. Зарегистрируйте или ротируйте Runner'а через API, защищённый ADMIN_TOKEN:
curl -sS -X POST https://mcp.aloneio.com/admin/runners \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"runner_id":"home-pc"}'Токен Runner'а в открытом виде возвращается только при успешной регистрации/ротации. Храните его безопасно, затем запустите Runner'а:
CODING_RUNNER_TOKEN='returned-runner-token' \
npx tsx apps/runner/src/cli.ts start \
--server wss://mcp.aloneio.com \
--runner-id home-pc \
--workspace zero=/home/me/code/zero\;writable\;noshellСинтаксис рабочей области:
--workspace id=path[;readonly|writable][;shell|noshell]По умолчанию: readonly;noshell. В производстве требуется wss://; открытый ws:// принимается только для loopback вместе с --insecure-local.
Runner'у нужен только исходящий доступ в Интернет. Он не открывает HTTP, MCP, OAuth, SSH или входящие порты.
Создание MCP-клиентов
Войдите в систему на /, затем используйте панель /admin:
Введите имя, например
ChatGPT Web,ClaudeилиCursor Desktop.Выберите области
Read,Writeи/илиExecute.Нажмите Create.
Скопируйте сгенерированный URL немедленно. Он показывается один раз.
Пример:
https://mcp.aloneio.com/fJ3...43-character-base64url-secret...x92/mcpНастройте только этот URL в MCP-клиенте. Никакого потока OAuth, обратного вызова или дополнительного заголовка Bearer не требуется. У каждого клиента должен быть свой URL:
ChatGPT → secret A
Claude → secret B
Cursor → secret CПанель поддерживает:
Создание
Переименование
Ротацию
Отзыв
Области
coding:read,coding:write,coding:execдля каждого клиентаОтображение создан/использован/статус/префикс ключа
Ротация немедленно делает старый URL недействительным и показывает замену один раз. Отзыв заставляет URL возвращать тот же 404 Not Found, который используется для неизвестных секретов.
Модель безопасности секретного URL
/<secret>/mcp — это учётные данные API. Относитесь к полному URL как к паролю:
не публикуйте его;
не включайте его в скриншоты;
не коммитьте его в Git;
не вставляйте его в журналы, issues или аналитику;
создавайте отдельный URL для каждого MCP-клиента/устройства;
немедленно ротируйте при подозрении на утечку.
Приложение никогда не регистрирует входящий URL/путь и хранит только SHA-256 проверяющий плюс короткий отображаемый префикс. Ответы MCP/администратора используют Cache-Control: no-store; HTML также использует Referrer-Policy: no-referrer, ограничительную CSP, nosniff и блокировку фреймов. Инфраструктура вне приложения всё ещё может записывать пути запросов, поэтому настройте редактирование журналов Cloudflare и полагайтесь на ротацию/отзыв для восстановления.
Каталог инструментов
Среда выполнения
runner_list
runner_info
workspace_list
env_infoФайловая система
fs_read
fs_list
fs_search
fs_apply_patchВыполнение и постоянные задания
exec_start
exec_run
job_list
job_get
job_logs
job_cancel
job_inputGit
git_status
git_diffcoding:read разрешает чтение среды выполнения/файловой системы, job_list/job_get/журналы и проверку Git. coding:write разрешает применение патчей. coding:exec разрешает запуск/выполнение/отмену/ввод процессов. Задание является общим в пределах одного экземпляра с одним администратором, а не принадлежит одному MCP-клиенту: Claude может обнаружить и прочитать задание, созданное ранее ChatGPT, если у него есть необходимая область.
Постоянные задания
exec_start возвращает job_id быстро. Runner сохраняет локальное авторитетное состояние в:
~/.remote-coding-runner/state/
├── runner.json
└── jobs/<job_id>/
├── meta.json
├── stdout.log
└── stderr.logWorker хранит только ограниченные метаданные. job_list читает снимки RegistryDO и поэтому работает, пока Runner находится в автономном режиме. Полные stdout/stderr остаются на Runner'е и читаются через постраничные job_logs, когда Runner снова в сети.
Синхронизация Runner'а обновляет/вставляет текущие/недавние задания, не удаляя более старую историю только потому, что она была пропущена в ограниченном снимке. Registry сохраняет активные/незавершённые задания и до 1000 завершённых заданий на Runner'а. Задание может записывать created_by_client_id для аудита, но это поле не ограничивает доступ между клиентами.
После перезапуска Runner'а процесс, который всё ещё соответствует сохранённому PID/отпечатку, становится unknown. Ленивое согласование во время job_get, job_list и синхронизации сохраняет его unknown, пока он жив, и меняет на interrupted после исчезновения, потому что реальный результат выхода недоступен. Восстановленная отмена становится cancelled только когда долговечное доказательство подтверждает, что этот Runner доставил запрос на завершение; код выхода не выдумывается.
Файлы журналов на диске остаются полными и неограниченными по умолчанию. Следите за использованием диска Runner'ом.
Безопасность файловой системы и патчей
MCP-запросы предоставляют только runner_id, workspace_id и пути относительно рабочей области. Runner отклоняет:
абсолютные пути POSIX;
пути Windows drive, UNC и device;
NUL-байты и обход
..;неизвестные идентификаторы рабочих областей;
предков/побеги симлинков и junction;
симлинки с записью насквозь;
запись в рабочие области только для чтения.
fs_read и job_logs используют безопасные для UTF-8 байтовые курсоры. Маленькие страницы, содержащие китайские, эмодзи и акцентированные символы, можно точно объединять без символов замены.
fs_apply_patch поддерживает операции Add/Update/Delete/Move, ожидаемые базовые SHA-256, точное сопоставление фрагментов, промежуточное хранение/резервные копии в том же каталоге, откат, сохранение BOM/переводов строк/режимов и ограниченные структурированные результаты. Стабильные безопасные ошибки, такие как invalid_patch, missing_file, target_exists, baseline_changed, ошибки фрагментов, patch_install_failed и patch_rollback_failed, достигают MCP без раскрытия абсолютных путей хоста.
Это граница авторизации рабочей области/пути, а не враждебная песочница операционной системы. Запускайте ненадёжные репозитории или команды внутри внешней ВМ/контейнера с ограниченными монтированиями, секретами и сетевым доступом.
Тайм-ауты и обнаружение среды
Общие константы протокола поддерживают согласованные сроки:
normal Runner operation maximum: 8,000 ms
Worker → Runner bridge timeout: 12,000 msЭто оставляет четырёхсекундный запас на транспорт/ответ. exec_run и Git используют общий локальный лимит; более длительная работа должна использовать exec_start.
env_info кэширует ограниченные параллельные проверки для платформы, архитектуры, имени хоста, оболочки, Node, npm, pnpm, Python, Git, Go, rustc, Cargo и Docker. Отсутствующие или превысившие тайм-аут инструменты возвращают { "available": false } вместо сбоя запроса.
Тесты
npm test
npm run typecheck
npm run build
npm run validate:workerНабор включает тесты протокола, тесты файловой системы/процессов/патчей/Git/восстановления Runner'а, тесты Worker Durable Object и аутентификации администратора/клиента, а также реальный локальный Wrangler + реальный Runner E2E. Покрытие включает:
атомарную одноразовую настройку;
поведение пароля/сеанса PBKDF2, истечение срока, выход, недействительность пароля и CSRF;
создание/ротацию/отзыв/404/принудительное применение областей для секретных URL каждого клиента;
реальный MCP → Worker → Runner
fs_read;постраничную разбивку UTF-8 файлов/журналов;
постоянное выполнение после закрытия MCP-запроса;
отключение транспорта Runner'а, локальное продолжение, повторное подключение и синхронизацию;
запуск задания клиентом A и обнаружение его клиентом B с помощью
job_listв автономном режиме;границы обхода, симлинков, только для чтения, патчей, Git, тайм-аутов, вывода и параллелизма.
Локальные тесты не доказывают квоты конкретной учётной записи Cloudflare, редактирование журналов на границе производства, совместимость с интернет-клиентами или событие перезапуска/гибернации развёрнутого экземпляра. Развёртывание остаётся шагом приёмки, выполняемым оператором.
Область, сознательно исключённая
MVP не включает MCP Tasks, PTY/веб-терминал, многопользовательские учётные записи, организации, команды, биллинг, ИИ-агентов, RAG, автоматизацию браузера, среду выполнения GitHub Actions, Cloudflare Sandbox или Cloudflare Containers.
Благодарности и лицензия
Это независимая реализация Apache-2.0. При исследовании дизайна рассматривались:
xyTom/coding-tools-mcp, Apache-2.0 + NOTICE;volter-ai/volter-tunnel, Apache-2.0 + NOTICE;документация Cloudflare Workers, Durable Objects, WebSocket Hibernation, Agents MCP handler и MCP TypeScript SDK.
Запрошенный репозиторий davidlosasgonzalez/codeagent-mcp был недоступен по публичному URL во время исследования, поэтому код или лицензия из него не использовались.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables remote MCP clients to access local filesystem and shell commands by deploying a Cloudflare Worker relay and a local daemon, providing tools like read/write files, exec commands, git status, etc.4871MIT
- AlicenseNot gradedqualityAmaintenanceEnables cloud agents to securely operate local machine resources (files, commands, screenshots) via standard MCP protocol.MIT

SIN Mac Gatewayofficial
AlicenseNot gradedqualityCmaintenanceEnables remote MCP clients to securely access a trusted macOS machine's local file system and command execution tools (mcp-combiner) via OAuth-authenticated HTTPS through Cloudflare Tunnel, without opening router ports.MIT- AlicenseNot gradedqualityCmaintenanceEnables remote MCP clients like ChatGPT to run shell commands and manage files on your local machine via a Cloudflare tunnel, exposing tools for file operations, search, and task management.MIT
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
One PAT, any MCP agent: Vercel, GitHub, Cloudflare, Supabase, GCP — unified dev infra gateway.
Remote MCP for Android CLI agent build gate, structured receipts, audit logs, and reviewer-ready evi
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/aloneio/remote-coding-runtime'
If you have feedback or need assistance with the MCP directory API, please join our Discord server