safe-workspace-mcp
safe-workspace-mcp
Минимальный, ориентированный на безопасность MCP сервер, который обеспечивает структурированный доступ на чтение/запись ровно к одной локальной рабочей области, со встроенными локальными контрольными точками Git и откатом.
Предназначен для того, чтобы чат-модель (например, ChatGPT с поддержкой MCP) могла безопасно редактировать файлы в одной папке проекта — и только в ней.
Переносимый быстрый старт в Windows (без Python, Git и Node)
Скачайте ZIP-архив релиза для Windows со страницы Releases и распакуйте его.
Подготовьте рабочую директорию (единственную папку, к которой сервер может обращаться).
Получите Secure MCP Tunnel ID от OpenAI (создайте здесь) и Runtime API Key (создайте здесь).
В распакованной папке выполните:
.\Start-SafeWorkspaceMCP.ps1 -Workspace "D:\ChatGPT_Workspace\demo" -TunnelId "tunnel_..."Введите Runtime API Key по запросу (скрытый ввод, никогда не сохраняется).
Держите терминал открытым;
Ctrl+Cостанавливает всё.Подключите существующий туннель из режима разработчика ChatGPT — этот шаг на стороне аккаунта вы выполняете самостоятельно.
Лаунчер при первом запуске загружает официальный клиент туннеля OpenAI (закреплённая версия v0.0.11, проверенная SHA-256) и кэширует его в %LOCALAPPDATA%\SafeWorkspaceMCP\. Права администратора не требуются, PATH и реестр не изменяются. Подробности см. в README-PORTABLE.md\ внутри ZIP-архива.
Точное утверждение: переносимое локальное развёртывание без необходимости установки Python/Git/Node; лаунчер автоматически загружает проверенный клиент туннеля OpenAI. Это не «нулевая настройка» — вы предоставляете рабочую область, ID туннеля, runtime-ключ и настройку на стороне аккаунта ChatGPT.
Related MCP server: git-mcp-server
Что это
Один процесс = одна конфигурация = одна фиксированная рабочая область (выбирается при запуске, неизменна во время выполнения)
Структурированный CRUD для текстовых файлов с атомарными транзакциями для нескольких файлов
Оптимистичная конкурентность: каждое изменение существующего файла требует его текущий
sha256Управляемая локальная история Git (через Dulwich, никогда через
git.exe): контрольные точки до/после изменений, diff, история, восстановлениеstdio MCP-сервер, всего 9 инструментов
Нецели (жёстко отсутствуют)
Никакой оболочки, никакого терминала, никаких подпроцессов, никакого выполнения кода, никакого компилятора/тест-раннера/менеджера пакетов, никаких произвольных HTTP- или сетевых инструментов, никакого удалённого Git, никакого переключения рабочих областей, никакого редактирования двоичных файлов/изображений, никаких заявлений о песочнице ОС.
Если возможность не указана ниже, этот сервер её не имеет.
Архитектура
ChatGPT / any MCP client
│
OpenAI Secure MCP Tunnel (account-side, outbound-only)
│
tunnel-client.exe <- external deployment layer (official OpenAI binary,
│ pinned + SHA-256 verified by the launcher)
│ MCP over stdio (child process)
▼
Safe Workspace MCP <- this project (9 tools, no network, no exec)
│
fixed single workspace
│
┌────┴─────────────┐
│ │
structured file CRUD managed local Git checkpointsПоиск в вебе / получение URL выполняется самим хостом чата; этот сервер по замыслу не имеет сетевых возможностей.
Клиент туннеля — это внешний компонент развёртывания, не входящий в состав сервера: сам процесс сервера никогда не открывает сокеты, а единственная сетевая активность лаунчера — загрузка закреплённого официального клиента туннеля с проверкой контрольной суммы.
Девять инструментов
Инструмент | Только чтение | Назначение |
| ✓ | Имя рабочей области, лимиты, версия |
| ✓ | Список одной директории (внутренние/исключённые записи скрыты) |
| ✓ | Чтение UTF-8 текстового файла → содержимое, sha256, размер |
| ✓ | Литеральный текстовый поиск, ограниченные результаты |
| ✗ | Атомарная транзакция: создать/заменить файл, заменить текст, создать директорию, переместить, удалить файл, удалить пустую директорию |
| ✓ | Изменения рабочего дерева с последней контрольной точки |
| ✓ | Унифицированный diff относительно контрольной точки (по умолчанию — последней) |
| ✓ | Список контрольных точек (сначала новые) |
| ✗ | Восстановить рабочую область до контрольной точки (сначала автоматически создаётся контрольная точка текущего состояния, поэтому восстановления можно отменить) |
Все операции apply_changes сначала проходят проверку (пути, хэши, политика, конфликты плана); если что-то не удаётся, ничего не применяется. При сбое в середине выполнения всё откатывается.
Установка
Два поддерживаемых способа:
Конечный пользователь (Windows): скачайте ZIP-архив переносимого релиза — Python/Git/Node не требуются (см. быстрый старт выше).
Разработчик / Linux: исходники из репозитория с Python 3.12+:
git clone https://github.com/Xs-trek/safe-workspace-mcp.git
cd safe-workspace-mcp
py -3.12 -m venv .venv
.venv\Scripts\pip install -e .Зависимости времени выполнения: mcp==2.0.0 (официальный SDK), dulwich==1.2.6, стандартная библиотека Python. Больше ничего. Предварительные требования для конечного пользователя переносимого релиза: только Windows 10/11, PowerShell, интернет для туннеля, папка рабочей области, ID туннеля + Runtime API Key и собственная настройка аккаунта ChatGPT.
Конфигурация
TOML-файл, загружается один раз при запуске и в дальнейшем неизменен. Нет ни инструмента (и ни одного пути в коде), который мог бы изменить конфигурацию, корень рабочей области или любой лимит во время выполнения.
[workspace]
root = "D:/ChatGPT_Workspace/demo"
max_file_bytes = 2097152 # largest file the server will write/track
max_read_bytes = 1048576 # largest read returned / searched per file
max_transaction_bytes = 10485760
max_search_results = 200
excluded = ["node_modules", "build", "dist", ".venv"] # plus built-ins
[paths]
reject_reparse_points = true # symlinks/junctions/mounts: always recommended
reject_hardlinks = true
require_same_filesystem = true
[write]
allow_create_file = true
allow_modify_file = true
allow_delete_file = true
allow_move = true
allow_create_directory = true
allow_delete_empty_directory = true
require_expected_hash = true
[git]
mode = "managed" # only mode in v0.1.0
author_name = "Safe Workspace MCP"
author_email = "safe-workspace-mcp@local"
[search]
include_hidden = false
[server]
transport = "stdio" # only transport in v0.1.0См. examples/ для вариантов: минимальный / существующий исходный код / большой исходный код.
Управляемая рабочая область
При первом запуске с пустой или обычной исходной директорией (без .git) сервер:
сканирует директорию (отслеживаются только обычные текстовые файлы),
инициализирует управляемый репозиторий в
<root>/.git,создаёт контрольную точку
initial snapshot.
Если рабочая область уже содержит .git, запуск завершается ошибкой EXISTING_GIT_REPOSITORY_NOT_SUPPORTED. Принятие существующих репозиториев, рабочих деревьев, подмодулей и удалённых репозиториев выходит за рамки v0.1.0.
Редактируемое ⇒ Восстанавливаемое: каждый обычный файл, который MCP может изменить или удалить, отслеживается в управляемом репозитории, поэтому его всегда можно восстановить из контрольной точки. Исключённые директории (node_modules, артефакты сборки, virtualenvs, …) невидимы для всех инструментов — их нельзя прочитать, записать, найти или сохранить в контрольной точке.
Запуск
.venv\Scripts\safe-workspace-mcp path\to\config.tomlСервер работает по MCP через stdio и пишет журнал в stderr. Он отказывается запускаться, если корень рабочей области не существует или небезопасен.
Несколько проектов
Один процесс обслуживает ровно одну рабочую область. Запустите несколько процессов с несколькими конфигурациями:
safe-workspace-mcp project-a.toml
safe-workspace-mcp project-b.tomlИмпорт существующего исходного кода
Укажите workspace.root на существующую исходную директорию без .git. Начальный снимок фиксирует текущее состояние как базовое; с этого момента директория управляется. Большие генерируемые директории следует добавить в excluded.
Сценарии переносимого использования (Windows)
Первый запуск на новом ПК: распакуйте ZIP, создайте/выберите рабочую область, запустите лаунчер, укажите учётные данные туннеля. Лаунчер автоматически загружает и проверяет закреплённый клиент туннеля.
Повторный запуск: тот же лаунчер; кэшированный клиент туннеля используется повторно — без повторной загрузки и переустановки.
Переключение проектов: тот же релиз, другой путь
-Workspace. Каждый процесс MCP по-прежнему обслуживает ровно одну фиксированную рабочую область (без переключения во время выполнения).Автономная установка (для опытных): заранее скачайте официальный
tunnel-client-<version>-windows-<arch>.zip, проверьте его по официальномуSHA256SUMS.txtи укажите-TunnelClientPathна распакованный официальныйtunnel-client.exe. Это расширенное переопределение для оператора: оно пропускает гарантию лаунчера о закреплённой SHA-256 (существование и--versionпо-прежнему проверяются). Для обычного использования не требуется.
Тестирование с MCP Inspector
npx @modelcontextprotocol/inspector .venv\Scripts\safe-workspace-mcp -- args/config.toml(Или mcp dev из CLI MCP SDK.) Убедитесь, что tools/list показывает ровно девять инструментов, аннотации «только чтение» корректны, и сначала опробуйте read → search → apply_changes → git_diff/git_history/git_restore на одноразовой рабочей области.
Подключение ChatGPT Desktop / ChatGPT Web
ChatGPT подключается к локальному MCP-серверу через Secure MCP Tunnel от OpenAI (режим разработчика / коннекторы). Этот проект — только stdio-сервер плюс лаунчер, запускаемый оператором — в нём нет туннельного транспорта, OAuth, хранения учётных данных, и он никогда не читает и не записывает конфигурацию ChatGPT/Codex.
Рекомендуемый порядок действий:
Пройдите полный локальный набор тестов с одноразовой рабочей областью (см. выше).
Создайте Secure MCP Tunnel в OpenAI Platform и запустите переносимый лаунчер (или
tunnel-client runсамостоятельно) с этим ID туннеля.В ChatGPT подключите существующий туннель как коннектор разработчика/приложения, пока запущен терминал лаунчера.
Сначала используйте отдельную тестовую рабочую область, затем переключите конфигурацию на ваш реальный проект.
Всегда настраивайте ChatGPT вручную в его интерфейсе.
Обзор безопасности
Ограничение рабочей области — только пути относительно рабочей области; выход за пределы, абсолютные/дисковые/UNC-пути, зарезервированные имена устройств, двоеточия ADS, имена с точкой/пробелом в конце — всё отклоняется; изоляция учитывает файловую систему (на основе realpath), а не только строковый префикс.
Ссылки — любая точка повторной обработки (символьная ссылка, junction, точка монтирования, неизвестный тег) в любом компоненте существующего пути ⇒ запрет. Обычные файлы с жёсткими ссылками (st_nlink > 1) ⇒ запрет.
Внутренняя изоляция —
.gitнедоступен через все файловые инструменты; к нему обращается только управляемое хранилище Git.Атомарные записи — временный файл рядом → fsync → проверка →
os.replace; неудачная запись никогда не усекает оригинал.Оптимистичная конкурентность — устаревший
expected_sha256⇒HASH_MISMATCH, более новый файл пользователя никогда не перезаписывается.Нет выполнения / нет сети — производственный код не использует подпроцессы/сокеты (это обеспечивается тестами через AST, сканирующими каждый модуль на импорты и вызовы); безусловный путь выполнения хуков в dulwich нейтрализуется при импорте и регрессионно тестируется с подложенными файлами хуков; управляемый репозиторий никогда не получает хуки, фильтры или удалённые репозитории.
Лимиты ресурсов — максимальный размер файла/чтения/транзакции в байтах и результаты поиска; при достижении лимита происходит безопасный отказ.
Инъекция в промпт — не решена, но ограничена: введённая в заблуждение модель может выполнять только структурированные изменения файлов с контрольными точками внутри одной папки, которые вы всегда можете откатить.
Полный анализ и остаточные риски см. в SECURITY.md и THREAT_MODEL.md.
Известные ограничения (v0.1.0)
Только текстовые файлы (UTF-8); двоичные файлы отклоняются.
Windows — основная цель безопасности; Linux поддерживается и тестируется в CI.
Нет координации нескольких одновременных клиентов, кроме проверок хэшей (запускайте один пишущий процесс).
История контрольных точек растёт неограниченно (no gc в v0.1.0).
Восстановление происходит на уровне файлов; исключённые директории не затрагиваются восстановлением.
Сообщение о проблемах безопасности
Пожалуйста, откройте частное уведомление о безопасности (в GitHub «Report a vulnerability»), а не публичный issue.
Лицензия
Apache-2.0 — см. LICENSE.
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
- Alicense-qualityBmaintenanceSafe local MCP server for Windows to list, read, search, patch, backup, and verify code files in allowed folders, with Git integration and dry-run diffs.1MIT
- Alicense-qualityCmaintenanceA secure, git-aware MCP server for working with local repositories, enabling file management, shell commands, and full git operations within allowed directories.1211GPL 3.0
- Flicense-qualityBmaintenanceProfile-driven MCP server for safely inspecting and changing local Git repositories via a Streamable HTTP endpoint with deny-by-default security.1
- AlicenseAqualityBmaintenanceA local MCP server that provides a safe, explicit set of Git operations for version control tasks like status, diff, branching, staging, committing, fetching, merging, and pushing.1345MIT
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personal…
An MCP server for deep research or task groups
An MCP server that gives your AI access to the source code and docs of all public github repos
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/Xs-trek/safe-workspace-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server