cluster-tools MCP Server
clt — trabajos de COMSOL con un solo comando en el clúster Harvard FASRC
Ejecuta un trabajo por lotes de COMSOL en el clúster desde tu Mac en una línea:
cluster file3.mphque (aviso de Touch ID →) obtiene file3.mph de la máquina Windows, inicia sesión en FASRC con tu contraseña + código 2FA generado automáticamente, sube el archivo, envía un trabajo asíncrono de Slurm, y te devuelve un id de trabajo. Después:
cluster status # queue overview
cluster logs # tail the COMSOL batch log of the latest job
cluster fetch # download out.mph + batch.log when it's done
cluster shell # drop into an interactive shell (no re-login)
cluster code # print the current 2FA code, e.g. for a manual loginTodo es un único script de Node sin dependencias (cluster.js) más las herramientas integradas de macOS: ssh, scp, expect, security (Keychain). Sin paquetes npm.
Cómo funciona
Mac (cluster.js)
├─ Touch ID gate (optional tiny Swift helper, compiled once)
├─ Keychain → FASRC password + TOTP seed
├─ TOTP in Node crypto → the same 6-digit codes as the OpenAuth Java app
├─ ssh ControlMaster → authenticate ONCE, reuse the session ~8h,
│ so scp/ssh/sbatch below run with zero prompts
├─ scp winbox → Mac (over an AnyDesk TCP tunnel or LAN, key auth)
├─ scp Mac → cluster (over the shared session)
└─ ssh sbatch → COMSOL batch job runs asynchronously on SlurmLa idea clave es que la "aplicación Java 2FA" de FASRC (OpenAuth/JAuth) es TOTP simple — el mismo algoritmo que Google Authenticator. Una vez que tienes su semilla base32, ~15 líneas de Node crypto generan códigos válidos, y expect escribe la contraseña y el código en los mensajes de ssh para el primer inicio de sesión del día. ControlMaster mantiene esa sesión activa para que nada más solicite autenticación.
Configuración única
0. Requisitos
macOS con Node ≥ 18 (
brew install nodeo nodejs.org)Una cuenta de FASRC con OpenAuth 2FA
Opcional puerta de Touch ID: Xcode Command Line Tools (
xcode-select --install)
1. Instalar el comando
cd clt
npm link # or: alias cluster="node /path/to/clt/cluster.js" in ~/.zshrcPuerta de Touch ID opcional (omítela y el script simplemente no solicitará):
swiftc -O touchid.swift -o touchid2. Configuración de ssh (requerido)
Añade a ~/.ssh/config (créealo si es necesario), y mkdir -p ~/.ssh/sockets:
Host fasrc
HostName login.rc.fas.harvard.edu
User YOUR_FASRC_USERNAME
ControlMaster auto
ControlPath ~/.ssh/sockets/%r@%h-%p
ControlPersist 8h
ServerAliveInterval 60
Host winbox
HostName 127.0.0.1 # via the AnyDesk TCP tunnel; or the LAN IP of the PC
Port 2222 # the tunnel's local port (drop this line if using LAN IP)
User YOUR_WINDOWS_USERNAMEEl bloque ControlMaster es lo que hace todo rápido — sin él, cada scp/ssh exigiría una nueva contraseña + OTP y la herramienta se niega a ejecutarse.
3. Obtén tu semilla TOTP de OpenAuth
La aplicación Java de OpenAuth está sembrada con un secreto base32. Dos formas de obtenerlo:
Inicia sesión en la página de autoservicio de OpenAuth de FASRC y (re)aprovisiona tu token. Junto con la descarga de la aplicación Java, ofrece un código QR / secreto para usar con aplicaciones de autenticación de teléfono — copia esa cadena base32.
O mira dentro del paquete OpenAuth que ya descargaste: la semilla se almacena en el archivo de configuración de la aplicación junto al jar.
Nota: si reaprovisionas, los códigos de la aplicación Java antigua dejan de funcionar — la nueva semilla es entonces la única semilla verdadera (usa cluster code como tu generador, o cárgala también en una aplicación de teléfono).
4. Máquina Windows: servidor OpenSSH incorporado
AnyDesk en sí mismo no tiene transferencia de archivos scripteable, por lo que obtenemos archivos con scp desde el servidor OpenSSH incorporado de Windows (característica opcional de Windows 10/11 — sin software de terceros). En una PowerShell administrador en la máquina Windows:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType AutomaticLuego instala la clave pública de tu Mac para que scp no necesite contraseña (cat ~/.ssh/id_ed25519.pub en el Mac; ssh-keygen -t ed25519 primero si no tienes una). Trampa: si tu cuenta de Windows es Administrador, las claves van en un archivo especial:
Add-Content -Path C:\ProgramData\ssh\administrators_authorized_keys -Value "ssh-ed25519 AAAA...your key..."
icacls C:\ProgramData\ssh\administrators_authorized_keys /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"(Para cuentas no administrador es el habitual C:\Users\you\.ssh\authorized_keys.)
5. Alcanza Windows desde el Mac
Elige una opción:
Túnel TCP de AnyDesk (coincide con tu flujo de trabajo actual): en AnyDesk en el Mac, abre la configuración de sesión para el PC Windows → TCP tunneling → puerto local
2222→ remoto127.0.0.1:22. El túnel solo existe mientras la sesión de AnyDesk está conectada — está bien si estás usando AnyDesk de todas formas. Verifica que tu licencia de AnyDesk incluya tunelización TCP.Misma red / VPN: establece
HostNamea la IP del PC en el bloquewinboxy elimina la líneaPort 2222. Lo más simple si las máquinas del laboratorio comparten red.Omite Windows por completo: coloca la carpeta de COMSOL en OneDrive (Harvard lo proporciona) y deja que se sincronice con el Mac — luego
cluster ~/OneDrive/.../file3.mphusa la copia local y nunca toca el PC.
Prueba: ssh winbox debería iniciar sesión en el PC sin solicitar contraseña.
6. Almacenar secretos y configurar
cluster setupSolicita alias de host, valores predeterminados de Slurm, tu contraseña de FASRC y la semilla TOTP. Los secretos van al Llavero de macOS (nunca en disco, nunca en este repositorio). La configuración termina imprimiendo un código 2FA generado — verifica que coincida con lo que muestra la aplicación Java antes de confiar en él.
Luego confirma en el clúster (una vez, mediante cluster shell):
module avail comsol— establece el nombre exacto del módulo en~/.config/clt/config.jsontu grupo tiene licencias de COMSOL, y elige la partición correcta para tu laboratorio
Uso
cluster file3.mph # fetch from Windows, upload, submit
cluster ./local/file3.mph # a file that exists locally skips the Windows fetch
cluster file3.mph -study std2 # extra args are passed to `comsol batch`
cluster status # your whole queue
cluster status 12345678 # one job, incl. finished (sacct)
cluster logs file3 # tail batch.log
cluster fetch file3 # → ./file3-out.mph + ./file3-batch.logLos archivos de trabajo llegan al clúster en ~/comsol_jobs/<name>-<timestamp>/ (in.mph, out.mph, batch.log, slurm-<id>.log). Establece un correo electrónico en cluster setup para recibir un mensaje cuando los trabajos terminen. El registro de trabajos enviados se encuentra en ~/.config/clt/jobs.json.
Servidor MCP (COMSOL impulsado por IA)
mcp/server.mjs expone todo el flujo como herramientas MCP, por lo que Claude (o cualquier cliente MCP) puede ejecutar COMSOL de principio a fin: run_code (Java generado = API completa de COMSOL), run_model, job_status, job_log, wait_for_job, fetch_artifacts, cancel_job, lab_fairshare. Registrado a nivel de proyecto mediante .mcp.json — abre una sesión de Claude Code en este repositorio y las herramientas estarán disponibles.
Las protecciones se aplican en el servidor (máximo 4 trabajos concurrentes, ≤16 CPUs, ≤64 GB, ≤48 h, particiones permitidas), y lab_fairshare devuelve una bandera healthy que la IA debe respetar. Verifica todo con node mcp/smoke.mjs — ejecuta un modelo hello-world a través de las herramientas y comprueba la física contra la respuesta analítica. Los modismos de construcción de modelos y las trampas conocidas de la API de COMSOL se encuentran en references/.
Hacer fork para miembros del laboratorio
El repositorio contiene cero datos personales: la configuración está en ~/.config/clt/, los secretos en el Llavero de cada persona. Un compañero de laboratorio solo clona, ejecuta npm link, añade los dos bloques de configuración ssh, y ejecuta cluster setup con sus propias credenciales. Nunca compartas tu semilla TOTP ni la subas a ningún lado.
Inicio rápido para un clon nuevo:
git clone <this repo> && cd clt
npm install # MCP server deps (the CLI itself needs none)
npm link # provides the `cluster` command
swiftc -O touchid.swift -o touchid # optional Touch ID gate
cluster setup # host aliases, Slurm defaults, secrets -> Keychain
cluster login # verify; then `cluster help`Mantén los datos de investigación fuera del repositorio
references/lab/ está ignorado por git y es donde pertenecen las exportaciones de modelos de COMSOL. Las exportaciones incrustan geometría y física no publicadas, además de rutas absolutas que contienen nombres reales, por lo que no deben publicarse. Los archivos rastreados en references/ son ejemplos genéricos y publicables (HelloBox, SweepBox, Inspect) más CONVENTIONS.md, el conocimiento acumulado de la API de COMSOL que hace que los modelos generados funcionen. Antes de hacer push, verifica git status para exportaciones perdidas de .mph, .java o CSV de resultados.
Notas de seguridad, honestamente
Almacenar la semilla TOTP junto a la contraseña en el mismo Mac reduce la 2FA a "posesión de tu Mac desbloqueado". Eso protege contra el robo remoto de credenciales, pero no contra alguien en tu teclado. Mantén FileVault activado.
La puerta de Touch ID es un bloqueo de conveniencia en este script, no encriptación — los secretos están protegidos por el Llavero. Para forzar un diálogo de confirmación de macOS en cada lectura de secreto, recrea los elementos sin una aplicación de confianza:
security add-generic-password -U -T "" -a $USER -s clt-cluster-password -wVerifica que automatizar tu propio OTP está dentro de la política de uso aceptable de FASRC; esto es automatización de conveniencia por persona, y la semilla debe mantenerse personal.
Solución de problemas
login failed— ejecutassh fasrcmanualmente para ver los mensajes reales, y comparacluster codecon la aplicación Java. Si el reloj de tu Mac está desajustado, los códigos TOTP son incorrectos (Configuración del Sistema → General → Fecha y Hora → ajustar automáticamente).no ControlMaster socket— faltan las líneasControlMasteren el bloqueHost fasrc, o~/.ssh/socketsno existe.Falló la obtención de Windows — ¿está activa la sesión de AnyDesk (y el túnel)? ¿Funciona
ssh winbox? No se admiten espacios en los nombres de archivo.mph— renómbralos.El trabajo muere inmediatamente —
cluster logsgeneralmente muestra un error de licencia o módulo; verifica el nombre del módulo y la licencia de COMSOL de tu grupo.
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
AI-callable calculators and engineering models with real formulas. No hallucinated math.
LLM chat, text summarization and AI image generation
Run, build, and validate firmware on virtual hardware from your AI agent. Hardware knowledge corpus.
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/ckuzmick/cluster-tools'
If you have feedback or need assistance with the MCP directory API, please join our Discord server