loading…
Search for a command to run...
loading…
Enables creation and management of persistent REPL sessions for various languages and shells, with web-based monitoring and session recovery capabilities.
Enables creation and management of persistent REPL sessions for various languages and shells, with web-based monitoring and session recovery capabilities.
A simple MCP server for managing REPL sessions. Provides basic tools to create and execute commands in various REPLs and shells, with an integrated Web UI for browser-based session monitoring.
Working with remote REPLs (like Rails console on production servers) often forces you to cram complex operations into single commands since losing connection means losing your session state. This tool enables persistent REPL sessions that survive individual command executions, allowing you to work naturally with interactive environments through AI agents. The integrated Web UI provides browser-based monitoring for session observation.
http://localhost:8023/session/SESSION_ID - Monitor sessions in browsernpm version
Install in VS Code
Install MCP Server
Click the button above or add to your .vscode/mcp.json:
{
"servers": {
"repl-mcp": {
"command": "npx",
"args": ["-y", "repl-mcp@latest"]
}
}
}
claude mcp add repl-mcp -- npx -y repl-mcp@latest
Add to your MCP settings file:
{
"mcpServers": {
"repl-mcp": {
"command": "npx",
"args": ["-y", "repl-mcp@latest"]
}
}
}
npm installnpm run build{
"mcpServers": {
"repl-mcp": {
"command": "node",
"args": ["path/to/repl-mcp/build/index.js"]
}
}
}
create_sessionCreate a new REPL session with preset or custom configuration. Use displayName to set a custom name that appears in the browser tab title. Returns a webUrl that can be opened in a browser to monitor the session via Web UI.
Parameters:
presetConfig (optional): Name of predefined configurationdisplayName (optional): Custom display name for the session (shown in browser tab)customConfig (optional): Custom configuration objectExample with preset:
{
"presetConfig": "pry",
"displayName": "My Ruby Session"
}
Example with custom configuration:
{
"displayName": "Custom Python Session",
"customConfig": {
"type": "python",
"shell": "bash",
"commands": ["python3"],
"timeout": 10000
}
}
Response:
{
"success": true,
"sessionId": "abc123",
"config": "Ruby Pry REPL",
"webUrl": "http://localhost:8023/session/abc123"
}
Response includes:
sessionId: Unique session identifier (6-character format)webUrl: Browser URL for session monitoringconfig: Configuration name usedsend_input_to_sessionSend input to a REPL session.
Parameters:
sessionId: The session IDinput: Input text to send to the sessionoptions (optional): Input options objectwait_for_prompt (default: false): Wait for prompt to returntimeout (default: 30000): Timeout in millisecondsadd_newline (default: true): Add newline to inputExample:
{
"sessionId": "abc123",
"input": "puts 'Hello, World!'",
"options": {
"wait_for_prompt": true
}
}
list_repl_sessionsList all active REPL sessions. Each session includes a webUrl for browser access.
Response includes:
sessions: Array of session objects with webUrl for eachget_session_detailsGet detailed information about a specific session. Includes webUrl for browser access.
Parameters:
sessionId: The session IDResponse includes:
session: Detailed session informationwebUrl: Browser URL for session monitoringdestroy_repl_sessionDestroy an existing REPL session.
Parameters:
sessionId: The session IDlist_repl_configurationsList all available predefined REPL configurations.
send_signal_to_sessionSend a signal (like Ctrl+C, Ctrl+Z) to interrupt or control a REPL session process.
Parameters:
sessionId: The session IDsignal: Signal to send (SIGINT, SIGTSTP, SIGQUIT)Example:
{
"sessionId": "abc123",
"signal": "SIGINT"
}
Note on Windows: On Windows, only SIGINT is practically effective. It is sent as a Ctrl+C event and can be used to interrupt running commands or terminate compatible processes like Node.js REPLs. SIGTSTP and SIGQUIT have no effect.
set_session_readyMark a session as ready with a specific prompt pattern. Used during session recovery.
Parameters:
sessionId: The session IDpattern: Prompt pattern (regex or literal string)Example:
{
"sessionId": "abc123",
"pattern": "❯ "
}
wait_for_sessionWait additional time for a session to become ready.
Parameters:
sessionId: The session IDseconds: Number of seconds to waitExample:
{
"sessionId": "abc123",
"seconds": 5
}
mark_session_failedMark a session as failed with a reason.
Parameters:
sessionId: The session IDreason: Reason for failureExample:
{
"sessionId": "abc123",
"reason": "Process crashed"
}
Note: Each REPL tool must be installed and available in your PATH.
When sessions timeout or become unresponsive, you can use recovery tools:
send_signal_to_session - Send Ctrl+C, Ctrl+Z, or other signals to interrupt processesset_session_ready - Mark session ready when you detect a working promptwait_for_session - Wait longer for slow commands to completemark_session_failed - Mark session as failed when recovery isn't possiblePrompt patterns learned during recovery are remembered for the session duration.
{
"tool": "create_session",
"arguments": {
"presetConfig": "python",
"displayName": "My Python Session"
}
}
Response:
{
"success": true,
"sessionId": "xyz789",
"config": "Python REPL",
"webUrl": "http://localhost:8023/session/xyz789"
}
{
"tool": "send_input_to_session",
"arguments": {
"sessionId": "xyz789",
"input": "print('Hello from REPL!')",
"options": {
"wait_for_prompt": true
}
}
}
To monitor a session, create it using MCP tools and open the webUrl from the response in a browser. This allows you to observe real-time terminal activity.
Example Workflow:
webUrl.http://localhost:8023/session/xyz789), manually or using automation tools like Playwright MCP.When a command times out or hangs, you can recover the session:
Interrupt with Ctrl+C:
{
"tool": "send_signal_to_session",
"arguments": {
"sessionId": "xyz789",
"signal": "SIGINT"
}
}
Mark session ready:
{
"tool": "set_session_ready",
"arguments": {
"sessionId": "xyz789",
"pattern": "❯ "
}
}
Each session maintains:
The server provides comprehensive error handling with intelligent recovery:
Standard Error:
{
"success": false,
"error": "Session not found",
"executionTime": 0
}
LLM-Assisted Error:
{
"success": false,
"error": "Timeout - LLM guidance needed",
"question": "Session timed out. What should I do?",
"questionType": "timeout_analysis",
"canContinue": true,
"context": { "sessionId": "...", "rawOutput": "..." }
}
npm run build
npm run dev
This will start TypeScript in watch mode for development.
cmd or powershell as default shellSIGINT is effectively supported. It is translated to a Ctrl+C event, which can stop most command-line tools and exit REPLs like Node.js. SIGTSTP (Ctrl+Z) and SIGQUIT (Ctrl+\) are not supported by the Windows console and will have no effect.bash or zsh as default shellsend_signal_to_session with SIGINT to interrupt stuck processesset_session_ready with the correct prompt patternwait_for_session for slow commands or send_signal_to_session to interruptset_session_ready to specify your prompt patternwait_for_session for environments that need time to settlesend_signal_to_session to interrupt long-running commandsREPL_MCP_DEBUG=1: Enable verbose debug logging for performance troubleshooting and developmentEnable detailed debugging by checking the debugLogs field in responses:
{
"success": true,
"output": "...",
"debugLogs": [
"2025-06-22T15:31:15.504Z: [DEBUG session_xxx] Prompt detected: true",
"2025-06-22T15:31:15.505Z: [DEBUG session_xxx] Learned new prompt pattern: '∙'"
]
}
Contributions are welcome! The LLM-assisted features make it easy to add support for new shell environments and REPL types. When contributing:
MIT License
Run in your terminal:
claude mcp add repl-mcp -- npx Security
Low riskAutomated heuristic from public metadata — not a security guarantee.