Skip to main content
Glama
aloneio

Remote Coding Runtime

by aloneio

Удалённая среда выполнения кода

Нейтральная к модели и клиенту удалённая среда выполнения кода с единой стабильной управляющей плоскостью 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 jobs

Cloudflare не выполняет код и не вызывает модель ИИ. 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.jsonc

npm 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:

  1. Введите имя, например ChatGPT Web, Claude или Cursor Desktop.

  2. Выберите области Read, Write и/или Execute.

  3. Нажмите Create.

  4. Скопируйте сгенерированный 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_input

Git

git_status
git_diff

coding: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.log

Worker хранит только ограниченные метаданные. 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. При исследовании дизайна рассматривались:

Запрошенный репозиторий davidlosasgonzalez/codeagent-mcp был недоступен по публичному URL во время исследования, поэтому код или лицензия из него не использовались.

F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables 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.
    487
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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

View all related MCP servers

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

View all MCP Connectors

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/aloneio/remote-coding-runtime'

If you have feedback or need assistance with the MCP directory API, please join our Discord server