Think Playwright but for terminal automation. This server gives Claude full control over console sessions with 40 tools spanning session management, SSH connections, background jobs, and test assertions. You can spin up multiple shells (cmd, PowerShell, bash, zsh), send input including special keys, capture and filter output with regex, detect errors automatically, and run commands in the background with priority queuing. The SSH support handles password and key auth for remote systems, Docker, and WSL. Built-in monitoring tracks system and per-session metrics with configurable alerts. Profile management lets you save connection configs for quick reuse. It's production ready, cross-platform, and requires no native compilation since they dropped the node-pty dependency. Reach for this when you need Claude to orchestrate complex terminal workflows, automate deployments, or run integration tests against CLI tools.
Model Context Protocol (MCP) server for controlled interaction with local console applications and remote SSH sessions, including output monitoring, error detection, and long-running workflows.
This server can execute arbitrary commands and open remote SSH sessions. Treat it like a privileged terminal, not a low-risk documentation connector:
MCP_DEBUG_LOG and MCP_LOG_DIR unset unless diagnostics are explicitly required;git clone https://github.com/ooples/mcp-console-automation.git
cd mcp-console-automation
.\install.ps1 -Target codex
git clone https://github.com/ooples/mcp-console-automation.git
cd mcp-console-automation
chmod +x install.sh
./install.sh --target codex
git clone https://github.com/ooples/mcp-console-automation.git
cd mcp-console-automation
npm ci
npm run build
codex mcp add console-automation --env LOG_LEVEL=warn -- node "$PWD/dist/mcp/server.js"
Codex stores MCP configuration in ~/.codex/config.toml. The installers use codex mcp add and safely replace an existing console-automation registration. Restart Codex after installation and use /mcp to verify the connection.
For another MCP client, generate a new JSON configuration without overwriting an existing file:
.\install.ps1 -Target custom -CustomPath C:\path\to\new-mcp-config.json
The npm package has not been published, so npx console-automation-mcp and @mcp/console-automation are not valid installation paths.
console_save_profile rejects inline passwords, private-key material, and passphrases. Use passwordEnvVar, privateKeyEnvVar or privateKeyPath, and passphraseEnvVar. Profile-list responses never return credential values, and configuration files are created with owner-only permissions where the operating system supports POSIX modes.
Session persistence is disabled by default because session recovery data can include commands, paths, and environment values. To opt in, set MCP_SESSION_PERSISTENCE=true. The default file is ~/.console-automation-mcp/sessions.json; override it with MCP_SESSION_PERSISTENCE_PATH. Persisted command/environment recovery data remains disabled unless enabled through the programmatic SessionManager configuration.
The production installers remove development and optional protocol packages. Local consoles and SSH remain available. Install only the peer packages required for Docker, cloud, Kubernetes, serial, or other optional adapters.
This MCP server provides 40 comprehensive tools organized into 6 categories:
console_create_session - Create local or SSH console sessionsconsole_send_input - Send text input to sessionsconsole_send_key - Send special keys (Enter, Ctrl+C, etc.)console_get_output - Get filtered/paginated output with advanced searchconsole_get_stream - Stream output from long-running processesconsole_wait_for_output - Wait for specific patternsconsole_stop_session - Stop sessionsconsole_list_sessions - List all active sessionsconsole_cleanup_sessions - Clean up inactive sessionsconsole_execute_command - Execute commands with output captureconsole_detect_errors - Analyze output for errorsconsole_get_resource_usage - Get system resource statsconsole_clear_output - Clear output buffersconsole_get_session_state - Get session execution stateconsole_get_command_history - View command historyconsole_get_system_metrics - Comprehensive system metricsconsole_get_session_metrics - Session-specific metricsconsole_get_alerts - Active monitoring alertsconsole_get_monitoring_dashboard - Real-time dashboard dataconsole_start_monitoring - Start custom monitoringconsole_stop_monitoring - Stop monitoringconsole_save_profile - Save SSH/app connection profilesconsole_list_profiles - List saved profilesconsole_remove_profile - Remove profilesconsole_use_profile - Quick connect with saved profilesconsole_execute_async - Execute commands asynchronouslyconsole_get_job_status - Check job statusconsole_get_job_output - Get job outputconsole_cancel_job - Cancel running jobsconsole_list_jobs - List all background jobsconsole_get_job_progress - Monitor job progressconsole_get_job_result - Get complete job resultsconsole_get_job_metrics - Job execution statisticsconsole_cleanup_jobs - Clean up completed jobsconsole_assert_output - Assert output matches criteriaconsole_assert_exit_code - Assert exit codesconsole_assert_no_errors - Verify no errors occurredconsole_save_snapshot - Save session state snapshotsconsole_compare_snapshots - Compare state differencesconsole_assert_state - Assert session stateconst session = await console_create_session({
command: "npm",
args: ["run", "dev"],
detectErrors: true
});
const session = await console_create_session({
command: "bash",
consoleType: "ssh",
sshOptions: {
host: "example.com",
username: "user",
privateKeyPath: "~/.ssh/id_rsa"
}
});
const session = await console_create_session({
command: "npm",
args: ["test"]
});
await console_assert_output({
sessionId: session.sessionId,
assertionType: "contains",
expected: "All tests passed"
});
const job = await console_execute_async({
sessionId: session.sessionId,
command: "npm run build",
priority: 8
});
const status = await console_get_job_status({
jobId: job.jobId
});
For more examples, see docs/EXAMPLES.md
// Create a session for the dev server
const session = await console_create_session({
command: "npm",
args: ["run", "dev"],
detectErrors: true
});
// Wait for server to start
await console_wait_for_output({
sessionId: session.sessionId,
pattern: "Server running on",
timeout: 10000
});
// Monitor for errors
const errors = await console_detect_errors({
sessionId: session.sessionId
});
// Start a Python debugging session
const session = await console_create_session({
command: "python",
args: ["-m", "pdb", "script.py"]
});
// Set a breakpoint
await console_send_input({
sessionId: session.sessionId,
input: "b main\n"
});
// Continue execution
await console_send_input({
sessionId: session.sessionId,
input: "c\n"
});
// Step through code
await console_send_key({
sessionId: session.sessionId,
key: "n"
});
// Run tests
const result = await console_execute_command({
command: "pytest",
args: ["tests/"],
timeout: 30000
});
// Check for test failures
const errors = await console_detect_errors({
text: result.output
});
if (errors.hasErrors) {
console.log("Test failures detected:", errors);
}
// Start an interactive CLI tool
const session = await console_create_session({
command: "mysql",
args: ["-u", "root", "-p"]
});
// Enter password
await console_wait_for_output({
sessionId: session.sessionId,
pattern: "Enter password:"
});
await console_send_input({
sessionId: session.sessionId,
input: "mypassword\n"
});
// Run SQL commands
await console_send_input({
sessionId: session.sessionId,
input: "SHOW DATABASES;\n"
});
The server includes built-in patterns for detecting common error types:
npm install
npm run build
npm run dev
npm test
npm run typecheck
npm run lint
The server is built with:
Run static validation, the build, MCP smoke tests, and the test suite:
npm run lint
npm run typecheck
npm run build
npm run test:mcp
npm run test:logger
npm run test:installer
npm run test:package
npm test
Contributions are welcome! Please feel free to submit a Pull Request.
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)MIT License - see LICENSE file for details
For issues, questions, or suggestions, please open an issue on GitHub: https://github.com/ooples/mcp-console-automation/issues
LOG_LEVELLogging level for console output (error, warn, info, debug, trace)
makafeli/n8n-workflow-builder
node2flow/n8n-management
danishashko/make-mcp
lukisch/n8n-manager-mcp
io.github.us-all/airflow