Python Runner
FreeNot checkedExecute Python code via subprocess with timeout and error handling, returning stdout, stderr, and exit code.
About
Execute Python code via subprocess with timeout and error handling, returning stdout, stderr, and exit code.
README
An MCP (Model Context Protocol) server that exposes a run_script tool for executing Python code via subprocess.
Installation
uv sync
Usage
Run the server
uv run python server.py
Claude Desktop / Claude Code
claude mcp add --transport stdio --scope user python-runner -- uvx --from git+https://github.com/Drahoxx/python-mcp python-mcp
Or for a local installation:
claude mcp add --transport stdio --scope user python-runner -- uv run --directory /path/to/python-mcp python-mcp
OpenCode
Add to ~/.config/opencode/opencode.json:
{
"mcpServers": {
"python-runner": {
"command": "uvx",
"args": ["--from", "git+https://github.com/Drahoxx/python-mcp", "python-mcp"]
}
}
}
Or for a local installation:
{
"mcpServers": {
"python-runner": {
"command": "uv",
"args": ["run", "--directory", "/path/to/python-mcp", "python-mcp"]
}
}
}
Generic MCP Client
Add to your MCP client configuration:
{
"mcpServers": {
"python-runner": {
"command": "uv",
"args": ["run", "--directory", "/path/to/python-mcp", "python", "server.py"]
}
}
}
Tool: run_script
Execute Python code and return the result.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
code |
str |
required | Python code to execute |
timeout |
int |
30 |
Execution timeout in seconds |
Response
Returns a JSON string with:
| Field | Type | Description |
|---|---|---|
success |
bool |
Whether execution succeeded (exit code 0) |
stdout |
str |
Captured standard output |
stderr |
str |
Captured standard error |
error |
str | null |
Error message/traceback if failed |
return_code |
int |
Process exit code (-1 for timeout) |
Examples
Successful execution:
run_script('print("hello")')
# {"success": true, "stdout": "hello\n", "stderr": "", "error": null, "return_code": 0}
Syntax error:
run_script('print(')
# {"success": false, "stdout": "", "stderr": "...", "error": "SyntaxError...", "return_code": 1}
Runtime error:
run_script('1/0')
# {"success": false, "stdout": "", "stderr": "...", "error": "ZeroDivisionError...", "return_code": 1}
Timeout:
run_script('import time; time.sleep(60)', timeout=2)
# {"success": false, "stdout": "", "stderr": "", "error": "Execution timed out after 2 seconds", "return_code": -1}
Development
Run tests
uv run pytest
Run tests with coverage
uv run pytest --cov=server
Install Python Runner in Claude Desktop, Claude Code & Cursor
unyly install python-runnerInstalls into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.
First time? Get the CLI: curl -fsSL https://unyly.org/install | sh
Or configure manually
Run in your terminal:
claude mcp add python-runner -- uvx python-mcpFAQ
Is Python Runner MCP free?
Yes, Python Runner MCP is free — one-click install via Unyly at no cost.
Does Python Runner need an API key?
No, Python Runner runs without API keys or environment variables.
Is Python Runner hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Python Runner in Claude Desktop, Claude Code or Cursor?
Open Python Runner on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
GitHub
PRs, issues, code search, CI status
by GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
by mcpdotdirectCompare Python Runner with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All development MCPs
