Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Descripción del creador (original en inglés)
Shared SSH PTY runtime for MCP clients with viewer, input lock, async tracking, and policy rules.
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
SSH_MCP_CONFIG, SSH_MCP_INSTANCE, VIEWER_PORT, VIEWER_HOST, AUTO_OPEN_TERMINAL, SSH_MCP_MODE, SSH_MCP_LOCAL, SSH_MCP_DEBUG, SSH_HOST, SSH_PORT, SSH_USER, SSH_PASSWORD, SSH_KEYLos valores marcados como secretos son llaves de tu cuenta. Nunca los compartas ni los pegues en un chat.
Necesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"ssh-session": {
"command": "npx",
"args": [
"-y",
"ssh-session-mcp"
],
"env": {
"SSH_MCP_CONFIG": "your-value",
"SSH_MCP_INSTANCE": "your-value",
"VIEWER_PORT": "your-value",
"VIEWER_HOST": "your-value",
"AUTO_OPEN_TERMINAL": "your-value",
"SSH_MCP_MODE": "your-value",
"SSH_MCP_LOCAL": "your-value",
"SSH_MCP_DEBUG": "your-value",
"SSH_HOST": "your-value",
"SSH_PORT": "your-value",
"SSH_USER": "your-value",
"SSH_PASSWORD": "your-value",
"SSH_KEY": "your-value"
}
}
}
}Ejecuta esto en tu terminal
claude mcp add ssh-session --env SSH_MCP_CONFIG=your-value --env SSH_MCP_INSTANCE=your-value --env VIEWER_PORT=your-value --env VIEWER_HOST=your-value --env AUTO_OPEN_TERMINAL=your-value --env SSH_MCP_MODE=your-value --env SSH_MCP_LOCAL=your-value --env SSH_MCP_DEBUG=your-value --env SSH_HOST=your-value --env SSH_PORT=your-value --env SSH_USER=your-value --env SSH_PASSWORD=your-value --env SSH_KEY=your-value -- npx -y ssh-session-mcpCompleta los valores vacíos antes de ejecutarlo.
Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"ssh-session": {
"command": "npx",
"args": [
"-y",
"ssh-session-mcp"
],
"env": {
"SSH_MCP_CONFIG": "your-value",
"SSH_MCP_INSTANCE": "your-value",
"VIEWER_PORT": "your-value",
"VIEWER_HOST": "your-value",
"AUTO_OPEN_TERMINAL": "your-value",
"SSH_MCP_MODE": "your-value",
"SSH_MCP_LOCAL": "your-value",
"SSH_MCP_DEBUG": "your-value",
"SSH_HOST": "your-value",
"SSH_PORT": "your-value",
"SSH_USER": "your-value",
"SSH_PASSWORD": "your-value",
"SSH_KEY": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"ssh-session": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"ssh-session-mcp"
],
"env": {
"SSH_MCP_CONFIG": "your-value",
"SSH_MCP_INSTANCE": "your-value",
"VIEWER_PORT": "your-value",
"VIEWER_HOST": "your-value",
"AUTO_OPEN_TERMINAL": "your-value",
"SSH_MCP_MODE": "your-value",
"SSH_MCP_LOCAL": "your-value",
"SSH_MCP_DEBUG": "your-value",
"SSH_HOST": "your-value",
"SSH_PORT": "your-value",
"SSH_USER": "your-value",
"SSH_PASSWORD": "your-value",
"SSH_KEY": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
SSH_MCP_CONFIG envSSH_MCP_INSTANCE envVIEWER_PORT envVIEWER_HOST envAUTO_OPEN_TERMINAL envSSH_MCP_MODE envSSH_MCP_LOCAL envSSH_MCP_DEBUG envSSH_HOST envSSH_PORT envSSH_USER envSSH_KEY envEsta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub Zw-awa, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
Debes completar: SSH_PASSWORD
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (2.7.1) llegó al registro hace 6 meses.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Node.js en tu computadora.
En la misma categoría: Spec Driven Development, Remote Desktop Commander, AvaHR
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Read hiring data and create inactive assessment and questionnaire drafts for human review.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
中文 | English
Persistent shared-terminal runtime for MCP clients over SSH.
ssh-session-mcp gives the user and the AI the same SSH PTY session, adds a browser viewer, tracks who typed what, and makes long-running remote work manageable instead of stateless.
git clone this repository.npx -y ssh-session-mcp --viewerPort=autonpm install -g ssh-session-mcpdocker.io/zwawa/ssh-session-mcpgit clone is only for contributors, source builds, and local development.npx or a global npm install is still the lowest-friction path. Docker is mainly useful when you want a pinned runtime, container-based deployment, or registry-backed distribution.Most SSH-oriented MCP servers can execute commands, but they do not manage terminal state well enough for real collaboration.
ssh-session-mcp focuses on the missing runtime layer:
Key directories and files:
| Path | Purpose |
|---|---|
src/ | Core TypeScript implementation for the MCP server, SSH session runtime, viewer, tools, and config CLIs |
src/viewer-html/ | HTML page generators and browser-side scripts for the terminal viewer |
test/ | Vitest coverage for runtime behavior, viewer contracts, config loading, and repository validation |
docs/ | Supporting documentation such as contracts, failure taxonomy, platform notes, and Docker usage |
docs/examples/ | Example config files for normal and Docker-oriented setups |
scripts/ | Build, version sync, and local operator helper scripts |
deploy/helm/ | Helm chart for Kubernetes deployment in single-node or distributed v0 mode |
site/ | GitHub Pages landing page source |
dist/ | Generated static site output from npm run build:site |
build/ | Generated JavaScript output from npm run build |
Dockerfile | Container image build definition |
docker-compose.yml | Profile-based Docker Compose example |
docker-compose.env.yml | Legacy .env-style Docker Compose example |
server.json | MCP server metadata for marketplace-style distribution |
AGENT.md | Primary agent/operator playbook |
llms-install.md | Agent-focused installation and environment checklist |
.env.example | Legacy single-target environment variable template |
If the goal is to let Claude Code, Codex, or OpenCode install the server automatically, prefer npx -y ssh-session-mcp in the MCP command instead of a prior global install.
For Cline Marketplace and other agent installers, see llms-install.md. This repo is structured to be one-click installable through an npx -y ssh-session-mcp --viewerPort=auto command.
claude mcp add --transport stdio ssh-session-mcp -- npx -y ssh-session-mcp --viewerPort=auto
Windows note from the Claude Code docs: native Windows users should wrap npx with cmd /c for stdio MCP servers.
claude mcp add --transport stdio ssh-session-mcp -- cmd /c npx -y ssh-session-mcp --viewerPort=auto
codex mcp add ssh-session-mcp -- npx -y ssh-session-mcp --viewerPort=auto
OpenCode's opencode mcp add flow is interactive. Choose a local MCP server and use this command:
npx -y ssh-session-mcp --viewerPort=auto
If you prefer config instead of the interactive flow:
{
"$schema": "https://opencode.ai/config.json", "mcp": { "ssh-session-mcp": { "type": "local", "command": ["npx", "-y", "ssh-session-mcp", "--viewerPort=auto"] } } }
This is the closest thing to "automatic installation" for stdio MCP servers today: the MCP client stores the command, and npx -y downloads the package automatically the first time it runs.
npm install -g ssh-session-mcp
ssh-session-mcp-ctl launch --local --viewerPort=auto
This starts a local shell instead of SSH and opens the browser terminal, which is the easiest way to test the MCP runtime before touching a real server.
Use the MCP server binary directly when wiring a client:
# Global install
npm install -g ssh-session-mcp
ssh-session-mcp --viewerPort=auto
# Claude Code
claude mcp add --transport stdio ssh-session-mcp -- ssh-session-mcp --viewerPort=auto
codex mcp add ssh-session-mcp -- ssh-session-mcp --viewerPort=auto
If you prefer npx instead of a global install:
npx -y ssh-session-mcp --viewerPort=auto
Create .env from .env.example:
cp .env.example .env
SSH_HOST=YOUR_DEVICE_HOST
SSH_PORT=22 SSH_USER=YOUR_DEVICE_USER SSH_PASSWORD= SSH_KEY= VIEWER_PORT=auto AUTO_OPEN_TERMINAL=false SSH_MCP_MODE=safe
Then launch:
ssh-session-mcp-ctl launch --viewerPort=auto
For multiple boards or named targets, create ssh-session-mcp.config.json:
{
"defaultDevice": "DEVICE_A_ID", "devices": [ { "id": "DEVICE_A_ID", "host": "DEVICE_A_HOST", "port": 22, "user": "DEVICE_A_USER", "auth": { "passwordEnv": "DEVICE_A_PASSWORD" }, "defaults": { "term": "xterm-256color", "cols": 120, "rows": 40, "autoOpenViewer": true, "viewerMode": "browser" } } ] }
Discovery order:
--config=/path/to/config.jsonssh-session-mcp.config.json.env fallbackImportant:
auth.password is intentionally unsupported. Use auth.passwordEnv or auth.keyPath..env or the parent environment, not in repo-tracked JSON.Public Docker images should be distributed through Docker Hub, with GitHub Container Registry as an optional secondary registry:
docker.io/zwawa/ssh-session-mcp:<version>
docker.io/zwawa/ssh-session-mcp:latest ghcr.io/zw-awa/ssh-session-mcp:
Recommended container launch for a real SSH target:
docker run --rm -i \
-p 8793:8793 \ -e VIEWER_PORT=8793 \ -e VIEWER_HOST=0.0.0.0 \ -e SSH_HOST=YOUR_DEVICE_HOST \ -e SSH_PORT=22 \ -e SSH_USER=YOUR_DEVICE_USER \ -e SSH_PASSWORD \ docker.io/zwawa/ssh-session-mcp:latest
Export the password in your shell first instead of placing it directly on the command line.
Recommended launch for profile-based config:
docker run --rm -i \
-p 8793:8793 \ -e VIEWER_PORT=8793 \ -e VIEWER_HOST=0.0.0.0 \ -e SSH_MCP_CONFIG=/workspace/ssh-session-mcp.config.json \ -v "$PWD/ssh-session-mcp.config.json:/workspace/ssh-session-mcp.config.json:ro" \ -v "/path/to/host/keys:/workspace/keys:ro" \ docker.io/zwawa/ssh-session-mcp:latest
Equivalent Compose example:
docker compose up -d
See docker-compose.yml for a ready-to-run example that mounts ssh-session-mcp.config.json, publishes the viewer on 8793, and uses SSH_KEY_DIR when set or falls back to a dedicated ./keys directory. For the full Docker guide, including the legacy .env compose variant and MCP client config snippets, see docs/docker.md. For a container-oriented profile example, see docs/examples/ssh-session-mcp.config.docker.example.json.
Container-specific notes:
VIEWER_PORT to 8793 when unset so the browser viewer can be published reliably.VIEWER_HOST to 0.0.0.0 inside the container so the mapped port is reachable from the host.AUTO_OPEN_TERMINAL defaults to false in the container because browser auto-open from inside a container is usually not useful.docker-compose.yml, SSH_KEY_DIR overrides the default key mount path. If it is unset, Compose falls back to ./keys, not the repo root..env, or --env-file.npx is still simpler unless your client explicitly prefers containerized commands.Docker-based MCP client command examples:
# Claude Code
claude mcp add --transport stdio ssh-session-mcp -- docker run --rm -i -p 8793:8793 -e VIEWER_PORT=8793 -e VIEWER_HOST=0.0.0.0 docker.io/zwawa/ssh-session-mcp:latest
codex mcp add ssh-session-mcp -- docker run --rm -i -p 8793:8793 -e VIEWER_PORT=8793 -e VIEWER_HOST=0.0.0.0 docker.io/zwawa/ssh-session-mcp:latest
For JSON-based MCP clients, the same pattern works by using docker as the command and passing the remaining run ... docker.io/zwawa/ssh-session-mcp:latest tokens as args.
This is useful when:
For many users, publishing to npm and recommending npx -y ssh-session-mcp --viewerPort=auto is still the lower-friction install path.
The browser viewer is not decorative. It is part of the workflow:
For users:
install -> launch viewer -> connect once -> keep the session alive -> let the AI help
For agents:
ssh-quSolo se muestra el principio; lee el resto en el repo