local-code-agent
local-code-agent
Локальный MCP-сервер на базе FastMCP: позволяет внешним AI (ChatGPT, Claude и др.) через Cloudflare Tunnel безопасно удалённо управлять локальной рабочей областью — чтение/запись/редактирование файлов, поиск, shell-команды, Git-операции — с аутентификацией по Bearer Token, изоляцией в песочнице и журналом аудита.
Этот проект не содержит логики AI/LLM, только сервисный слой инструментов и конфигурацию туннеля.
Требования к окружению
Python 3.10+ (жёсткое требование FastMCP)
pip install -r requirements.txt(fastmcp, pyyaml)
Быстрый старт
# 1. 安装依赖
pip install -r requirements.txt
set MCP_AUTH_TOKEN=your_long_random_token
set MCP_WORKSPACE=D:\projects\my-project
# 2. 启动服务(默认监听 127.0.0.1:8000,路径 /mcp)
python server.py
# 3. 公网穿透(临时域名)
cloudflared tunnel --url http://127.0.0.1:8000
# 固定域名(绑定自有域名)
cloudflared tunnel --url http://127.0.0.1:8000 --hostname mcp.yourdomain.comПроверка работоспособности: GET http://127.0.0.1:8000/health (по умолчанию без аутентификации; остальные конечные точки должны содержать Bearer Token).
Графический интерфейс (опционально)
Можно использовать без командной строки. tkinter входит в стандартную библиотеку Python, дополнительная установка не требуется.
python -m gui.appФункции консоли:
Папка рабочей области: нажмите «Выбрать…», чтобы открыть диалог выбора папки. Можно выбрать только одну папку, все действия AI ограничены этой папкой (песочница); смена папки заменяет текущий выбор.
Токен аутентификации: при запуске генерируется случайный токен, можно нажать «Перегенерировать» для замены; этот токен необходимо указать в клиенте AI как
Authorization: Bearer ....Порт / Режим только для чтения: установите порт прослушивания; при включении режима только для чтения инструменты записи/редактирования/команд отключаются.
Запуск / Остановка сервиса: запускает
server.pyкак дочерний процесс, остановка завершает процесс.Строка состояния: опрашивает
/health, отображает версию сервиса, текущую рабочую область, время работы; также поддерживает копирование команды туннеля cloudflared одним нажатием.Область логов: отображает вывод дочернего процесса сервера в реальном времени, при превышении 600 строк автоматически усекается.
GUI — это просто запускатор server.py, использует те же механизмы аутентификации, песочницы и аудита; способ подключения к публичной сети такой же, как из командной строки.
Подключение клиентов
ChatGPT Custom Connector: URL укажите https://<tunnel-host>/mcp, добавьте заголовок Authorization: Bearer your_long_random_token.
Claude Desktop в claude_desktop_config.json:
{
"mcpServers": {
"local-code-agent": {
"url": "https://mcp.yourdomain.com/mcp",
"headers": { "Authorization": "Bearer your_long_random_token" }
}
}
}Список инструментов
Инструмент | Параметры | Описание |
| 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="." | Рекурсивный glob |
| source, destination | Не перезаписывает существующий целевой файл |
| source, destination | Только копирование файла, без перезаписи |
| path | Автоматически создаёт родительские каталоги |
| path | Только удаление файла; требуется |
| path, url | Белый список доменов; запрещены перенаправления; лимит 50 МБ |
| command, timeout=30 | Белый список; опасные команды требуют подтверждения; потоковый вывод через SSE |
| — | Только чтение |
| message |
|
Модель безопасности
Песочница: все пути разрешаются через
realpath, должны находиться в корне рабочей области (предотвращает побег через символические ссылки).../и абсолютные пути не могут выйти за границы.Аутентификация: FastMCP
DebugTokenVerifierпроверяет Bearer Token. Токен считывается только изMCP_AUTH_TOKEN(для разработки можно использовать--token). При отсутствии запуск отклоняется.Чувствительные файлы:
.env,.env.*,*.pem,*.key,id_rsa,.ssh/,.aws/,credentialsперехватываются на любом уровне пути. Возвращается единый ответ «access denied», не раскрывающий существование файла.Белый список команд: в
config.yamlпараметрыcommand_allow,command_deny,danger_commands(требуютx-confirm: true).Загрузка: разрешены только http(s) хосты из
download_allow_domains; перенаправления запрещены; при превышении 50 МБ загрузка прерывается и частичный файл удаляется.Журнал аудита: формат JSON lines, ротация 10 МБ × 5, записывает время, имя инструмента, обезличенные параметры, результат, затраченное время.
Режим только для чтения:
python server.py --readonlyрегистрирует только инструменты чтения/поиска/просмотра Git.
Приоритет конфигурации
Рабочая область: --workspace > переменная окружения MCP_WORKSPACE > config.yaml (по умолчанию .). Остальные настройки берутся из config.yaml (см. значения по умолчанию внутри файла).
Структура проекта
server.py # FastMCP 入口:配置、认证、/health
tool_registry.py # 工具注册(与生命周期分离)
config.py / config.yaml # 默认值 + YAML
sandbox.py # 路径沙盒 + 敏感文件过滤
command_whitelist.py # 命令白名单校验
audit.py # 轮转 JSON 审计日志
tools/file_ops.py # 读/写/编辑/列目录/搜索
tools/file_management.py # 删/改名/复制/建目录/stat/tail/glob
tools/download.py # 域名白名单下载
tools/command.py # 同步 run_command(测试/非流式)
tools/git_ops.py # status/diff/log/branch/commit
gui/ # tkinter 启动器
start.py / start.spec # GUI 入口 + PyInstaller onedir
tests/ # test_core.py + test_extra.pyИзвестные ограничения
Python 3.8 не может запустить этот сервис (fastmcp требует 3.10+); модули логики совместимы с 3.8, можно проверить с помощью
python tests/test_core.py.Тайм-аут запроса Cloudflare Tunnel по умолчанию около 100 секунд.
run_commandиспользует потоковый SSE; общий тайм-аут до 3600 секунд.Поддерживается только одна рабочая область. Переключение между несколькими рабочими областями и контекст сеанса пока не реализованы (YAGNI).
Сборка:
pip install -r requirements-build.txt && pyinstaller start.spec, результатdist/start/start.exe. В GUI необходимо вручную нажать «Запустить сервис».
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 Connectors
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
The bridge from K2 agents through Wrangler to your master AI - safe, approval-gated Cloudflare ops.
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/jhonsmithsamsmith/webmcp-coder'
If you have feedback or need assistance with the MCP directory API, please join our Discord server