MCP ToolHub
MCP ToolHub
MCP ToolHub es un servidor local del Model Context Protocol, únicamente para stdio, que expone operaciones acotadas del sistema de archivos del espacio de trabajo, inspección de solo lectura de Git, ejecución estructurada de comandos y un registro de auditoría. Las operaciones de mutación del sistema de archivos y todos los comandos de shell externos seleccionados por el agente utilizan el modelo existente de aprobación humana fuera de banda.
ToolHub no expone ningún listener HTTP, SSE ni de otro tipo de red.
Características
Lectura de archivos confinada al espacio de trabajo, listado de directorios, escrituras y parches
Operaciones de estado y diff de Git de solo lectura
Comandos de shell estructurados con clasificación de riesgo de denegación por defecto
Solicitudes de aprobación atómicas, con caducidad y de un solo uso
CLI de administrador confiable separada; no existe ninguna herramienta MCP de autoaprobación
Eventos de auditoría en JSON Lines acotados y expurgados
Compatibilidad con Windows y POSIX
Related MCP server: enterprise-agent-lab
Requisitos
Python 3.12 o posterior (el CI valida actualmente 3.12 y 3.13)
Un cliente MCP que admita servidores stdio
gitpara las herramientas de Git y las solicitudes de shell de Git sujetas a aprobación
Instalación
Instale desde una copia del código fuente con uv:
uv tool install .O compile e instale el wheel:
uv build
uv tool install dist/mcp_toolhub-0.1.0-py3-none-any.whlLa instalación proporciona dos ejecutables:
mcp-toolhub— el servidor MCP stdiomcp-toolhub-admin— la CLI de aprobación humana confiable
Configuración en tiempo de ejecución
Raíz del espacio de trabajo
TOOLHUB_WORKSPACE_ROOT es obligatorio para mcp-toolhub serve y para la CLI de administrador. Debe contener una ruta absoluta a un directorio existente. ToolHub canonicaliza la ruta una vez y la congela durante toda la vida del proceso.
ToolHub no toma por defecto, deliberadamente, el directorio actual, la copia del código fuente ni el directorio de instalación.
Raíz de estado confiable
TOOLHUB_STATE_ROOT selecciona opcionalmente el directorio que contiene workspace-binding.json, approvals.json y audit.jsonl. Cuando se proporciona, debe ser absoluto. El directorio queda vinculado permanentemente, en su primer uso válido, a exactamente un espacio de trabajo canónico; reutilizarlo para otro espacio de trabajo falla de forma segura.
Cuando TOOLHUB_STATE_ROOT no está definido, ToolHub utiliza como base el directorio de estado por usuario apropiado para la plataforma de platformdirs. Cada espacio de trabajo canónico recibe un espacio de nombres independiente bajo workspaces/, denominado con un identificador SHA-256 determinista derivado de la ruta canónica del espacio de trabajo normalizada para la plataforma. El identificador evita colocar la ruta del espacio de trabajo en los nombres de directorio, pero es una separación de espacios de nombres, no un secreto de autenticación. Mover o renombrar un espacio de trabajo normalmente crea un nuevo espacio de nombres predeterminado.
El directorio de estado se crea según sea necesario, se canonicaliza y se congela junto con la configuración del espacio de trabajo. El inicio falla si la raíz de estado está dentro del espacio de trabajo. El servidor y la CLI de administrador deben ejecutarse como el mismo usuario y con la misma configuración de espacio de trabajo y estado para que compartan este estado.
Ejemplo en POSIX
export TOOLHUB_WORKSPACE_ROOT=/home/alice/projects/example
export TOOLHUB_STATE_ROOT=/home/alice/.local/state/mcp-toolhub
mcp-toolhub serveEjemplo en Windows PowerShell
$env:TOOLHUB_WORKSPACE_ROOT = "D:\work\example"
$env:TOOLHUB_STATE_ROOT = "$env:LOCALAPPDATA\mcp-toolhub"
mcp-toolhub serveEl servidor no escribe ningún banner ni texto de registro legible por humanos en stdout. Stdout está reservado exclusivamente para los mensajes del protocolo MCP. Los errores de configuración esperados se notifican de forma concisa en stderr y el proceso sale con un código distinto de cero.
Comandos
mcp-toolhub --version
mcp-toolhub serve
python -m mcp_toolhub serve
mcp-toolhub-admin --help
mcp-toolhub-admin list
mcp-toolhub-admin approve REQUEST_ID
mcp-toolhub-admin reject REQUEST_IDEl comando de administrador está orientado a humanos y puede escribir salida normal en stdout. No es un proceso de transporte MCP.
Configuración del cliente MCP
La clave de configuración externa exacta varía según el cliente. Una entrada de stdio típica en POSIX es:
{
"mcpServers": {
"toolhub": {
"command": "mcp-toolhub",
"args": ["serve"],
"env": {
"TOOLHUB_WORKSPACE_ROOT": "/home/alice/projects/example",
"TOOLHUB_STATE_ROOT": "/home/alice/.local/state/mcp-toolhub"
}
}
}
}Las rutas de Windows requieren escape JSON:
{
"mcpServers": {
"toolhub": {
"command": "mcp-toolhub",
"args": ["serve"],
"env": {
"TOOLHUB_WORKSPACE_ROOT": "D:\\work\\example",
"TOOLHUB_STATE_ROOT": "C:\\Users\\alice\\AppData\\Local\\mcp-toolhub"
}
}
}
}Utilice una ruta de ejecutable absoluta si el cliente MCP no hereda el PATH del shell.
Inventario de herramientas
El servidor de producción expone exactamente estas 12 herramientas MCP:
toolhub.pingtoolhub.audit_recentfilesystem.list_directoryfilesystem.read_filefilesystem.write_filefilesystem.write_file_approvedfilesystem.apply_patchfilesystem.apply_patch_approvedgit.statusgit.diffshell.runshell.run_approved
No existe ninguna herramienta MCP de administración, aprobación ni rechazo.
Flujo de aprobación humana
Una mutación MCP o una solicitud de shell externa devuelve un ID de solicitud pendiente.
El administrador ejecuta
mcp-toolhub-admin listcon el mismo espacio de trabajo y entorno de estado que el servidor.Para la aprobación, el administrador ejecuta
mcp-toolhub-admin approve REQUEST_ID.La CLI muestra la solicitud protegida y exige que el operador escriba exactamente
APPROVE.El llamador MCP invoca la herramienta
_approvedcorrespondiente con el ID de solicitud. El consumo correcto es atómico y de un solo uso.
Para las solicitudes de shell, la pantalla de aprobación incluye el programa original, el ejecutable resuelto canónico, el SHA-256, el tamaño en bytes, cwd y los valores de los argumentos con escape JSON por separado. No representa los argumentos como una cadena de comando de shell ambigua.
Modelo de seguridad y limitaciones
Comandos de shell estructurados
shell.run utiliza una política de denegación por defecto para comandos. LOW se limita a las funciones intrínsecas exactas de ToolHub, actualmente la consulta de la versión de Python en ejecución. LOW nunca busca en PATH y nunca crea un subproceso externo. Git genérico, intérpretes de shell, scripts batch de Windows, el lanzador py y los programas desconocidos nunca son LOW.
Todo comando de shell externo es MEDIUM o HIGH y requiere una aprobación de administrador fuera de banda. La aprobación captura instantáneas inmutables del programa, los argumentos, cwd, timeout, el espacio de trabajo y el ejecutable principal. Una solicitud de shell aprobada se consume de forma atómica antes de la validación de la instantánea; cualquier fallo posterior la consume permanentemente, por lo que un reintento requiere una nueva aprobación.
Inmediatamente antes del lanzamiento de subprocess, ToolHub valida la ruta canónica, el tamaño y el SHA-256 del ejecutable principal. La ejecución utiliza esa ruta absoluta con shell=False. Esto es una identidad del ejecutable principal validada inmediatamente antes del lanzamiento, no una garantía criptográfica de los bytes exactos que el sistema operativo mapea finalmente.
ToolHub garantiza:
LOW nunca crea un subproceso externo.
Toda ejecución de shell externa requiere aprobación MEDIUM o HIGH.
El agente no puede reemplazar el programa, los argumentos, cwd ni el timeout aprobados.
Las aprobaciones son atómicas, con caducidad y de un solo uso.
Las instantáneas del espacio de trabajo y del ejecutable principal son obligatorias y fallan de forma segura.
La identidad canónica y el hash del ejecutable principal se vuelven a validar inmediatamente antes del lanzamiento.
Las rutas del sistema de archivos permanecen dentro del límite congelado del espacio de trabajo.
Las rutas de mutación rechazan el cruce de enlaces simbólicos y aplican comprobaciones de concurrencia de
expected_hashcuando corresponde.
ToolHub no garantiza:
La identidad exacta de los bytes frente a un adversario local concurrente del sistema de archivos durante la estrecha condición de carrera final entre la comprobación y la ejecución.
La identidad de las DLL, los intérpretes, los ayudantes, los complementos, los archivos de configuración, las dependencias seleccionadas por el entorno o los procesos descendientes.
Que los bytes del ejecutable aprobado sean benignos, estén firmados o provengan de un editor de confianza.
La pantalla de aprobación del administrador expone la ruta canónica protegida, el hash, el tamaño, cwd y los límites exactos de los argumentos con escape JSON. Los eventos de auditoría legibles por el agente omiten los directorios de los ejecutables externos y conservan el nombre base, el hash, el tamaño, el ámbito y la correlación con el ID de solicitud.
Comportamiento de auditoría
Los eventos de auditoría se añaden a audit.jsonl bajo la raíz de estado confiable. Contienen metadatos acotados, expurgan argumentos secretos reconocibles y almacenan recuentos de caracteres de stdout/stderr en lugar de la salida bruta del proceso. Los fallos de escritura de la auditoría no son fatales para la ejecución de las herramientas.
Desarrollo
Instale todas las dependencias de ejecución y de desarrollo bloqueadas:
uv sync --all-groupsEjecute las comprobaciones requeridas:
uv run ruff check .
uv run ruff format --check .
uv run python -m compileall -q src/mcp_toolhub
uv run pytest -q
uv build
git diff --checkPara aplicar el formato deliberadamente:
uv run ruff format .Prueba de humo del artefacto
Después de uv build, ejecute el controlador de prueba de humo multiplataforma con un entorno virtual fuera de la copia del código fuente.
POSIX:
uv run python scripts/artifact_smoke.py --dist-dir dist --venv /tmp/mcp-toolhub-wheel-env --repository .Windows PowerShell:
uv run python scripts/artifact_smoke.py --dist-dir dist --venv "$env:TEMP\mcp-toolhub-wheel-env" --repository .El controlador inspecciona el contenido del wheel, instala solo el wheel en el entorno aislado, verifica el comportamiento de consola/versión y ejecuta, desde fuera del repositorio, las pruebas de initialize, list_tools, ping, acceso al espacio de trabajo configurado, configuración no válida y estado compartido servidor/administrador.
Solución de problemas
TOOLHUB_WORKSPACE_ROOT is required: añada una ruta absoluta de un espacio de trabajo existente al entorno del cliente MCP.El espacio de trabajo no es un directorio: cree el directorio o corrija la ruta.
La raíz de estado debe estar fuera del espacio de trabajo: mueva
TOOLHUB_STATE_ROOTa un directorio confiable al que las herramientas del sistema de archivos de MCP no puedan acceder.El espacio de nombres de estado pertenece a otro espacio de trabajo: seleccione un
TOOLHUB_STATE_ROOTexplícito diferente; los enlaces nunca se reasignan silenciosamente.El cliente informa de un JSON stdio no válido: verifique que los envoltorios y los scripts de inicio no impriman banners ni registros en stdout.
El administrador no puede ver una solicitud: confirme que el servidor y el administrador se ejecutan como el mismo usuario con configuraciones idénticas de espacio de trabajo y raíz de estado.
El ejecutable cambió después de la aprobación: solicite una nueva aprobación; las aprobaciones consumidas o invalidadas nunca se reproducen.
El ToolHub de producción no expone deliberadamente ninguna superficie HTTP, SSE, de red pública, de servidor de autenticación, de orquestación de contenedores ni de alojamiento en la nube.
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
- FlicenseNot gradedqualityBmaintenanceEnables AI coding agents to evaluate actions against team-defined policies, record decisions, and obtain human approvals for potentially risky operations.1651
- FlicenseNot gradedqualityCmaintenanceEnables controlled AI-agent access to enterprise-shaped tools with a deny-by-default gated write path, human approval, dry-run execution, and append-only audit logging.
- FlicenseNot gradedqualityCmaintenanceEnables AI coding agents to run Kubernetes inspection and Terraform plan/apply operations inside ephemeral gVisor-sandboxed jobs with short-lived, narrowly-scoped credentials, while routing destructive changes through a human approval gate.
- AlicenseNot gradedqualityCmaintenanceEnables controlled delegation of tasks to local coding-agent CLIs and the Manus API, with strict sandboxing, approval tracking, and remote-egress safeguards.13MIT
Related MCP Connectors
Runtime permission, approval, and audit layer for AI agent tool execution.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Preflight, approve, and prove consequential agent actions with signed evidence and x402 tools.
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/asxvgxkep/mcp-toolhub'
If you have feedback or need assistance with the MCP directory API, please join our Discord server