Skip to main content
Glama
aazizisoufiane

mcp-python-repl

๐Ÿ mcp-python-repl

A production-grade MCP server providing a persistent Python REPL with multi-session support, sandboxing, and timeout protection.

Built for LLM agents that need to execute Python code across multiple turns with variables that persist between calls.

โœจ Features

Feature

Description

Multi-session

Isolated sessions with unique IDs โ€” run parallel workflows

Persistent namespace

Variables survive across calls within a session

Timeout protection

Configurable execution timeout (SIGALRM on Unix)

Sandboxing

Optional mode blocks dangerous modules (subprocess, socket, etc.)

Package install

Install pip packages on-the-fly (prefers uv for speed)

File execution

Run .py files inside the persistent session

Dual transport

stdio (local) and streamable-http (remote)

Full introspection

List variables, get history, check server status

Env-based config

All settings via REPL_* environment variables

Related MCP server: Sandbox MCP

๐Ÿš€ Quick Start

With Claude Desktop / Cursor (stdio)

Add to your MCP config:

{
  "mcpServers": {
    "python-repl": {
      "command": "uvx",
      "args": ["mcp-python-repl"]
    }
  }
}

With uv (local dev)

# Clone and run
git clone https://github.com/soufiane-aazizi/mcp-python-repl.git
cd mcp-python-repl
uv run mcp-python-repl

HTTP transport (remote / multi-client)

REPL_TRANSPORT=streamable-http REPL_PORT=8000 uv run mcp-python-repl

๐Ÿ› ๏ธ Tools

Code Execution

Tool

Description

repl_run_code

Execute Python code with persistent namespace

repl_run_file

Execute a .py file in the session

repl_install_package

Install a pip package (uses uv if available)

Namespace Management

Tool

Description

repl_list_namespace

List all variables in a session

repl_get_variable

Get the full value of a variable

repl_set_variable

Inject a variable from JSON

repl_delete_variable

Delete a specific variable

repl_clear_namespace

Clear all variables in a session

Session Management

Tool

Description

repl_list_sessions

List all active sessions

repl_delete_session

Delete a session and its data

Debugging

Tool

Description

repl_get_history

Get execution history for a session

repl_server_status

Server config, Python version, session count

๐Ÿ”„ How Persistence Works

Call 1:  repl_run_code(code="data = [1,2,3]; total = sum(data); result = total")
         โ†’ returns: {"result": 6, "session_id": "a1b2c3d4e5f6", "new_variables": ["data", "total"]}

Call 2:  repl_run_code(code="doubled = [x*2 for x in data]; result = doubled", session_id="a1b2c3d4e5f6")
         โ†’ returns: {"result": [2,4,6], "new_variables": ["doubled"]}

Important: The result variable is for returning output to the caller. It does NOT persist. Use named variables instead.

โš™๏ธ Configuration

All settings are configurable via environment variables:

Variable

Default

Description

REPL_TIMEOUT

30

Max execution time in seconds

REPL_MAX_SESSIONS

50

Maximum concurrent sessions

REPL_SESSION_TTL

120

Session expiry in minutes

REPL_MAX_OUTPUT

1048576

Max stdout/stderr capture (bytes)

REPL_SANDBOX

false

Enable sandboxing (true/false)

REPL_TRANSPORT

stdio

Transport: stdio or streamable-http

REPL_HOST

127.0.0.1

HTTP host (when using HTTP transport)

REPL_PORT

8000

HTTP port (when using HTTP transport)

REPL_WORKDIR

cwd

Working directory for executions

Sandbox Mode

When REPL_SANDBOX=true, the following modules are blocked:

subprocess, shutil, ctypes, socket, http.server, xmlrpc, ftplib, smtplib, telnetlib, webbrowser

And the following builtins are removed: exec, eval, compile, __import__ (replaced with a restricted version).

๐Ÿงช Development

# Install dev dependencies
uv sync --extra dev

# Run tests
uv run pytest -v

# Lint
uv run ruff check src/ tests/

# Test with MCP Inspector
npx @modelcontextprotocol/inspector uv run mcp-python-repl

๐Ÿ“ฆ Project Structure

mcp-python-repl/
โ”œโ”€โ”€ src/mcp_python_repl/
โ”‚   โ”œโ”€โ”€ __init__.py       # Package metadata
โ”‚   โ”œโ”€โ”€ config.py         # Env-based configuration
โ”‚   โ”œโ”€โ”€ session.py        # Multi-session manager with TTL
โ”‚   โ”œโ”€โ”€ executor.py       # Python code executor (timeout + sandbox)
โ”‚   โ””โ”€โ”€ server.py         # MCP server with all tools
โ”œโ”€โ”€ tests/
โ”‚   โ””โ”€โ”€ test_core.py      # Unit + integration tests
โ”œโ”€โ”€ pyproject.toml        # uv/hatch project config
โ”œโ”€โ”€ LICENSE               # MIT
โ””โ”€โ”€ README.md

๐Ÿ“„ License

MIT โ€” See LICENSE.

A
license - permissive license
-
quality - not tested
-
maintenance - not tested

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

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/aazizisoufiane/mcp-python-repl'

If you have feedback or need assistance with the MCP directory API, please join our Discord server