Variables de contexto MCP de Hermes Agent: ${userHome}, ${workspaceFolder} y otras 3 variables estilo Cursor

Configurar un servidor MCP debería llevarte cinco minutos, pero las rutas absolutas de la configuración lo convierten en otra cosa. Cambias de máquina, un compañero clona el repo o mueves la carpeta del proyecto, y vuelta a editar a mano. Y si compartes el mcp.json con tu equipo, cada uno tiene rutas distintas y el archivo deja de ser portable. Esta semana Hermes añade variables de contexto estilo Cursor para que las rutas sean portables de verdad.
¿Sigues escribiendo rutas a mano en tu configuración MCP?
Configurar servidores MCP tiene un problema recurrente y molesto: las rutas. /Users/neo/.cache/mcp, C:\Users\neo\projects\webapp — cambias de máquina, cambias de usuario, cambias de directorio de proyecto, y lo editas todo otra vez. Peor aún: si tu equipo sube la configuración MCP al repositorio, las rutas absolutas de cada uno son distintas y un mcp.json compartido se vuelve imposible de mantener portable.
Una función integrada en main de Hermes Agent el 2026-08-08 arregla exactamente esto: las configuraciones de servidores MCP ahora admiten interpolación de variables de contexto estilo Cursor: ${userHome}, ${workspaceFolder}, ${workspaceFolderBasename}, ${pathSeparator} y ${/}. De esto se derivan dos cosas:
- Un
mcp.jsonque escribiste para Cursor pasa a Hermes con cero ediciones de rutas; - Las rutas en las configuraciones por fin pueden escribirse en términos semánticos y relativos — portables entre máquinas y usuarios.
Las 5 variables de contexto
| Variable (distingue mayúsculas) | Se resuelve a |
|---|---|
${userHome} |
El directorio home del usuario actual (os.path.expanduser("~")) |
${workspaceFolder} |
La raíz del workspace de la sesión (ver la cadena de resolución abajo) |
${workspaceFolderBasename} |
El basename de ${workspaceFolder} (último segmento de la ruta) |
${pathSeparator} |
El separador de rutas del sistema operativo (os.sep — \ en Windows, / en el resto) |
${/} |
Atajo para ${pathSeparator} |
⚠️ Las mayúsculas importan: solo se reconocen estas cinco grafías exactas.
${USERHOME}no es una variable de contexto — cae en la búsqueda normal de variables de entorno como cualquier otra referencia${...}.
Ejemplos reales de configuración
Las variables pueden aparecer en cualquier posición de cadena de una entrada de servidor: args, env, url, headers — en todas.
Ejemplo 1: servidor filesystem apuntando al workspace actual
mcp_servers:
filesystem:
command: "npx"
args: ["-y", "@modelcontextprotocol/server-filesystem", "${workspaceFolder}"]
Dondequiera que inicies Hermes, el servidor filesystem apunta automáticamente al workspace de la sesión actual — sin IDs de sesión que recordar, sin cd previo.
Ejemplo 2: directorio de caché construido con home + separador
mcp_servers:
my-server:
command: "node"
args: ["server.js"]
env:
CACHE_DIR: "${userHome}${/}.cache${/}mcp"
${/} hace que esta única configuración funcione a la vez en Windows (\) y en macOS/Linux (/).
Ejemplo 3: migrando directamente desde Cursor
El patrón más común en el mcp.json de Cursor es la referencia de secreto "${env:VAR}". Hermes también la admite:
mcp_servers:
github:
command: "npx"
args: ["-y", "@modelcontextprotocol/server-github"]
env:
GITHUB_PERSONAL_ACCESS_TOKEN: "${env:GITHUB_TOKEN}"
${env:GITHUB_TOKEN} y ${GITHUB_TOKEN} se resuelven a la misma variable; los valores se leen del ámbito de secretos del perfil activo (con respaldo al entorno del proceso), así que guarda el secreto en ~/.hermes/.env y listo. Una variable sin definir conserva su marcador literal en lugar de provocar un error.
Cómo se resuelve ${workspaceFolder} (orden de prioridad)
${workspaceFolder} no es simplemente el directorio de inicio del proceso — recorre una cadena de tres niveles:
- El cwd de terminal registrado de la sesión: se escribe en cada comando de terminal completado y se indexa por el ID de sesión crudo — el
cdde una sesión nunca puede filtrarse a la resolución de otra sesión; - Una anulación de cwd registrada por tarea/sesión: el cwd que las sesiones de TUI / Desktop / ACP registran antes de que se ejecute cualquier herramienta;
- Un
$TERMINAL_CWDabsoluto sin centinela: la ruta del worktree establecida para las sesiones dehermes -w <worktree>.
Solo cuando no existe ningún ancla fiable se recurre al os.getcwd() del proceso.
En la práctica esto significa: abre un proyecto en la app de escritorio, o haz cd a un subdirectorio en la TUI, y ${workspaceFolder} sigue el workspace real de la sesión actual — no el directorio desde el que casualmente lanzaste el proceso.
Orden de resolución: variables de contexto → variables de entorno → literal
Para cada referencia ${...}, la interpolación intenta, en este orden:
- Coincidencia exacta contra las 5 variables de contexto (prioridad máxima);
- Búsqueda en variables de entorno (ámbito de secretos del perfil →
os.environ); - En caso contrario se conserva el marcador literal (p. ej.,
"${NOT_EXIST}"se mantiene tal cual).
Así que las variables de contexto no cambian ninguna semántica existente de variables de entorno — las referencias antiguas como ${HOME} quedan completamente intactas; simplemente has ganado cinco nombres de “primera clase”.
Cuándo merece la pena
- Configuraciones compartidas en equipo: sube
mcp_serversal repositorio y cada miembro funciona tras un clone — se acabó pisarse las rutas absolutas; - Sincronización entre máquinas: escritorio + portátil + CI compartiendo una sola configuración;
${userHome}y${/}absorben las diferencias de plataforma; - Herramientas ligadas al workspace: servidores que deben ejecutarse contra el proyecto actual (filesystem, linters, búsqueda de código) —
${workspaceFolder}sigue la sesión automáticamente.
Para la referencia completa de claves de servidores MCP (tools.include/exclude, el nivel trust, auth: oauth y más), consulta nuestra referencia del comando hermes mcp. Para ver la historia MCP más amplia en la última versión, lee las notas de la versión v0.20.0 Herald. ¿Nuevo en Hermes Agent? Empieza por la guía de instalación antes de experimentar.
Conclusión: sustituye las rutas absolutas por ${userHome}, ${workspaceFolder} y ${/} en tu configuración MCP, y obtienes portabilidad más un comportamiento de “sigue al workspace actual” de regalo — con configuraciones que interoperan con el ecosistema Cursor sin cambios.