local-code-agent
local-code-agent
Servidor MCP local desarrollado con FastMCP: permite que la IA externa (ChatGPT, Claude, etc.) acceda de forma segura a través de Cloudflare Tunnel y controle remotamente el espacio de trabajo local — lectura/escritura/edición de archivos, búsqueda, comandos shell, operaciones Git — con autenticación Bearer Token, aislamiento en sandbox y registros de auditoría.
Este proyecto no contiene lógica de IA/LLM; solo incluye la capa de herramientas y la configuración del túnel.
Requisitos del entorno
Python 3.10+ (requisito estricto de FastMCP)
pip install -r requirements.txt(fastmcp, pyyaml)
Inicio rápido
# 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.comComprobación de salud: GET http://127.0.0.1:8000/health (sin autenticación por defecto; el resto de endpoints deben incluir Bearer Token).
Interfaz gráfica (opcional)
Se puede usar sin escribir comandos. tkinter es una biblioteca estándar de Python, no requiere instalación adicional.
python -m gui.appFunciones de la consola:
Carpeta del espacio de trabajo: haga clic en «Seleccionar…» para abrir el selector de carpetas. Solo se puede seleccionar una carpeta a la vez; todas las operaciones de la IA quedan restringidas a esa carpeta (sandbox). Cambiar de carpeta reemplaza la selección actual.
Token de autenticación: se genera automáticamente un token aleatorio al iniciar; puede pulsar «Regenerar» para cambiarlo. Este token es el que debe introducirse en el cliente de IA como
Authorization: Bearer ....Puerto / modo de solo lectura: establece el puerto de escucha; si se marca solo lectura, se deshabilitan las herramientas de escritura/edición/comandos.
Iniciar / detener servicio: ejecuta
server.pycomo subproceso; detener finaliza el proceso.Barra de estado: consulta
/healthperiódicamente y muestra la versión del servicio, el espacio de trabajo actual y el tiempo de ejecución; también permite copiar con un clic el comando del túnel cloudflared.Área de registros: muestra en tiempo real la salida del subproceso del servidor; si supera las 600 líneas, se recorta automáticamente.
La GUI es solo un lanzador de server.py; usa el mismo mecanismo de seguridad de autenticación, sandbox y auditoría; la conexión con la red pública es igual que en la línea de comandos.
Integración con clientes
ChatGPT Custom Connector: URL https://<tunnel-host>/mcp, añada la cabecera Authorization: Bearer your_long_random_token.
El claude_desktop_config.json de Claude Desktop:
{
"mcpServers": {
"local-code-agent": {
"url": "https://mcp.yourdomain.com/mcp",
"headers": { "Authorization": "Bearer your_long_random_token" }
}
}
}Lista de herramientas
Herramienta | Parámetros | Descripción |
| path, offset=0, limit=0 | limit 0 indica todo; offset indica el número de líneas iniciales que se omiten |
| path, content | crea automáticamente los directorios padre; las rutas sensibles son rechazadas |
| path, old_text, new_text, dry_run=false | coincidencia exacta de texto y debe ser única |
| path=".", recursive=false | omite .git |
| pattern, path=".", file_pattern="*" | expresión regular; si la expresión regular no es válida, degrada a coincidencia de subcadena |
| path | tamaño, mtime, tipo |
| path, lines=100 | lee el final del archivo |
| pattern, path="." | glob recursivo |
| source, destination | no sobrescribe el destino existente |
| source, destination | solo copia archivos, no sobrescribe |
| path | crea automáticamente los directorios padre |
| path | solo elimina archivos; requiere |
| path, url | lista blanca de dominios; redirecciones prohibidas; límite de 50 MB |
| command, timeout=30 | lista blanca; los comandos peligrosos requieren confirmación; salida en streaming SSE |
| — | solo lectura |
| message |
|
Modelo de seguridad
Sandbox: todas las rutas se resuelven con
realpathy deben estar dentro del directorio raíz del espacio de trabajo (puede interceptar escapes por enlaces simbólicos).../y las rutas absolutas no pueden salirse de los límites.Autenticación: FastMCP
DebugTokenVerifiervalida el Bearer Token. El token solo se lee deMCP_AUTH_TOKEN(en desarrollo puede usar--token). Si falta, se rechaza el arranque.Archivos sensibles:
.env,.env.*,*.pem,*.key,id_rsa,.ssh/,.aws/,credentialsse bloquean en cualquier nivel de ruta. Se devuelve un «access denied» uniforme, sin revelar si el archivo existe.Lista blanca de comandos: en
config.yaml,command_allow,command_deny,danger_commands(requierenx-confirm: true).Descargas: solo se permiten hosts http(s) incluidos en
download_allow_domains; se prohíben las redirecciones; si supera los 50 MB, se aborta y se elimina el archivo parcial.Registro de auditoría: formato JSON Lines, rotación de 10 MB × 5; registra hora, nombre de la herramienta, parámetros enmascarados, resultado y duración.
Modo de solo lectura:
python server.py --readonlysolo registra herramientas de lectura/búsqueda/consulta de Git.
Prioridad de configuración
Espacio de trabajo: --workspace > variable de entorno MCP_WORKSPACE > config.yaml (por defecto .). El resto de la configuración proviene de config.yaml (consulte los valores predeterminados en el archivo).
Estructura del proyecto
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.pyLimitaciones conocidas
Python 3.8 no puede ejecutar este servicio (fastmcp requiere 3.10+); los módulos de lógica son compatibles con 3.8, puede verificarlos con
python tests/test_core.py.Cloudflare Tunnel tiene un tiempo de espera de solicitud predeterminado de aproximadamente 100 segundos.
run_commandusa streaming SSE; el tiempo de espera total máximo es de 3600 segundos.Solo se admite un único espacio de trabajo. El cambio entre múltiples espacios de trabajo y el contexto a nivel de sesión aún no están implementados (YAGNI).
Empaquetado:
pip install -r requirements-build.txt && pyinstaller start.spec, el resultado esdist/start/start.exe. En la GUI, debe hacer clic manualmente en «Iniciar servicio».
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