local-code-agent
local-code-agent
MCP-сервер на базе FastMCP: позволяет внешним ИИ (ChatGPT, Claude и др.) удалённо управлять локальной рабочей областью через HTTP — чтение/запись/редактирование файлов, поиск, shell-команды, Git-операции — с песочницей, защитой конфиденциальных файлов и журналом аудита.
Этот проект не содержит логики ИИ/LLM, только инструментальный слой и средства безопасности.
Требования к окружению
Python 3.10+ (строгое требование FastMCP)
pip install -r requirements.txt(fastmcp, pyyaml)
Related MCP server: OpenAI Secure MCP Tunnel
Быстрый старт
Способ 1: Графический интерфейс (рекомендуется)
python start.pyПорядок действий в окне консоли:
Папка рабочей области: нажмите «Выбрать…» и укажите папку. Все действия ИИ ограничены этой папкой (песочница); смена папки переключает корень песочницы.
Подсказка для подключения: в центре окна есть карточка «Подсказка для подключения». Скопируйте текст из неё и отправьте веб-версии ИИ — ИИ настроит подключение к этому MCP-серверу (токен не требуется).
Порт: по умолчанию 8000; если занят, можно изменить.
Режим только для чтения: при включении все инструменты записи/редактирования/команд будут отклоняться; переключение вступает в силу немедленно.
Нажмите «Запустить службу» → в строке состояния отобразятся версия, статус только для чтения, рабочая область, время работы; в области журнала в реальном времени выводятся логи службы.
Остановка: нажмите «Остановить службу» или просто закройте окно (будет запрос подтверждения).
Способ 2: Командная строка
# 1. 安装依赖
pip install -r requirements.txt
# 2. 启动服务(默认监听 127.0.0.1:8000,MCP 路径 /mcp,无需 Token)
python server.pyНеобязательные параметры: --workspace D:\projects\my-project (корень песочницы), --host 0.0.0.0 (разрешить доступ по локальной сети), --port 9000. Остановка — Ctrl+C.
Проверка работоспособности и health check
После запуска службы перейдите по адресу: GET http://127.0.0.1:8000/health (без аутентификации). Возвращает:
{ "status": "ok", "service": "local-code-agent", "version": "0.1.0",
"workspace": "D:\\projects\\my-project", "readonly": false,
"uptime_seconds": 3 }Остальные конечные точки (включая /mcp) доступны напрямую, без аутентификации.
Доступ по локальной сети
По умолчанию служба слушает только 127.0.0.1, доступна только с локальной машины. Для доступа с других устройств в той же локальной сети:
python server.py --host 0.0.0.0Адрес подключения клиента: http://<локальный IP этой машины>:8000/mcp (локальный IP можно узнать через ipconfig). Открытие доступа по локальной сети означает, что все устройства в той же подсети смогут обращаться к службе без аутентификации — будьте осторожны.
Не рекомендуется напрямую открывать доступ в интернет. Если требуется доступ из интернета, используйте собственное решение обратного прокси (Nginx + TLS, frp или другие туннельные инструменты) и на уровне обратного прокси принудительно включите HTTPS и аутентификацию.
Графический интерфейс (опционально)
Можно использовать без командной строки. tkinter входит в стандартную библиотеку Python, дополнительная установка не требуется.
python start.pyФункции консоли:
Папка рабочей области: нажмите «Выбрать…», чтобы открыть диалог выбора папки. Можно выбрать только одну папку; все действия ИИ ограничены этой папкой (песочница); смена папки заменяет текущий выбор.
Подсказка для подключения: встроенный редактируемый текст подсказки; нажмите «Копировать подсказку», чтобы скопировать её одним нажатием, и отправьте веб-версии ИИ для завершения привязки MCP. Токен не требуется.
Порт / Режим только для чтения: установите порт прослушивания; при включении режима только для чтения инструменты записи/редактирования/команд отключаются.
Запуск / Остановка службы: запускает FastMCP в процессе GUI (фоновый поток + uvicorn) с отдельным обработчиком журналов; остановка ожидает завершения потока службы.
Переключение во время работы: смена рабочей области или включение режима только для чтения вступают в силу немедленно, без перезапуска. Изменение порта требует перезапуска службы.
Строка состояния: опрашивает
/health, отображает версию, статус только для чтения, текущую рабочую область, время работы.Область журнала: в реальном времени показывает вывод службы, автоматически очищает ANSI-escape-последовательности; можно скопировать правой кнопкой мыши; при превышении 600 строк автоматически усекается.
GUI и командная строка используют одни и те же механизмы песочницы и аудита; способ подключения одинаков.
Подключение клиента
Локальный клиент: URL http://127.0.0.1:8000/mcp; клиент по локальной сети: http://<локальный IP этой машины>:8000/mcp (сервер должен быть запущен с --host 0.0.0.0). Аутентификация не требуется.
claude_desktop_config.json для Claude Desktop:
{
"mcpServers": {
"local-code-agent": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}Список инструментов
Инструмент | Параметры | Описание |
| path, offset=0, limit=0 | limit 0 — весь файл; offset — количество пропускаемых начальных строк |
| path, content | Автоматически создаёт родительские каталоги; конфиденциальные пути отклоняются |
| path, old_text, new_text, dry_run=false | Точное совпадение текста, должно быть уникальным |
| path=".", recursive=false | Возвращает структурированные записи; пропускает .git |
| pattern, path=".", file_pattern="*" | Возвращает записи |
| path | Возвращает структурированные размер, mtime, тип |
| path, lines=100 | Чтение конца файла |
| pattern, path="." | Возвращает структурированный массив путей; отклоняет выход за границы |
| source, destination | Не перезаписывает существующий целевой файл |
| source, destination | Только копирование файла, без перезаписи |
| path | Автоматически создаёт родительские каталоги |
| path | Только удаление файла |
| path, url | Поддерживает любые HTTP(S) URL; запрещены перенаправления; лимит 50 МБ |
| command, timeout=30 | Выполнение произвольной команды в рабочей области; потоковый вывод через SSE |
| — | Только чтение |
| message |
|
Модель безопасности
Песочница: все пути разрешаются через
realpathи должны находиться внутри корня рабочей области (перехватывает побеги через символические ссылки).../и абсолютные пути не могут выйти за границы.Аутентификация: аутентификация по токену отсутствует. Служба по умолчанию слушает только локальный
127.0.0.1; для внешнего доступа добавьте аутентификацию на уровне обратного прокси самостоятельно.Подтверждение опасных операций: для Git-коммита требуется заголовок запроса
x-confirm: true.Конфиденциальные файлы:
.env,.env.*,*.pem,*.key,id_rsa,.ssh/,.aws/,credentialsблокируются на любом уровне пути. Возвращается единый ответ «access denied», не раскрывающий существование файла.Загрузка: поддерживаются любые HTTP(S) хосты; перенаправления запрещены; при превышении 50 МБ загрузка прерывается, частичный файл удаляется.
Журнал аудита: формат JSON lines, ротация 10 МБ × 5, записываются время, имя инструмента, обезличенные параметры, результат, время выполнения.
Режим только для чтения:
python server.py --readonlyили флажок в GUI. Инструменты записи/команд остаются видимыми, но при вызове возвращаютread-only mode. Можно переключать во время работы.
Приоритет конфигурации
Рабочая область: --workspace > переменная окружения MCP_WORKSPACE > config.yaml (по умолчанию .). Остальные настройки берутся из config.yaml (см. значения по умолчанию внутри файла).
Структура проекта
server.py # FastMCP 入口:配置、认证、/health
tool_registry.py # 工具注册(与生命周期分离)
config.py / config.yaml # 默认值 + YAML
sandbox.py # 路径沙盒 + 敏感文件过滤
audit.py # 轮转 JSON 审计日志
tools/file_ops.py # 读/写/编辑/列目录/搜索
tools/file_management.py # 删/改名/复制/建目录/stat/tail/glob
tools/download.py # HTTP(S) 下载(无域名白名单)
tools/command.py # 同步 run_command(测试/非流式)
tools/git_ops.py # status/diff/log/branch/commit
runtime.py # 运行时只读标志
gui/ # tkinter 控制台(进程内服务)
start.py # GUI 入口
tests/ # test_core.py + test_extra.pyИзвестные ограничения
Python 3.8 не может запустить этот сервис (fastmcp требует 3.10+); модули логики совместимы с 3.8, можно проверить через
python tests/test_core.py.run_commandиспользует потоковый вывод SSE, общий тайм-аут — 3600 секунд.Поддерживается только одна рабочая область. Переключение между несколькими рабочими областями и контекст на уровне сеанса пока не реализованы (YAGNI).
This server cannot be deployed
Maintenance
Related MCP Connectors
Use your Mac, Windows or Linux computer from ChatGPT, Claude or Codex: files, commands, documents.
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to access files and terminal of a local computer via a public HTTPS endpoint, secured with GitHub OAuth.-
- AlicenseNot gradedqualityBmaintenanceEnables file operations and bash command execution on the local workspace, securely exposed to ChatGPT via OpenAI Tunnel.2MIT
- 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.4MIT
- AlicenseAqualityBmaintenanceEnables AI clients like ChatGPT or Codex to manage files and local Git repositories within an explicitly authorized workspace, with server-enforced path boundary checks and optional remote Git operations.181MIT