A stateless executor makes the model re-read the file on every call. Here a DataFrame loaded in step one is still in memory in step five, and list_variables lets the assistant check what it has rather than guess. install_package means a missing dependency is a one-line fix instead of a dead end.
A REPL exposed over MCP: code runs in one persistent session, and what you defined earlier is still there on the next call.
- execute_python runs code in the session, with a reset flag to clear it and start over
- list_variables shows everything currently defined
- install_package pulls a package from PyPI into the session
- State that survives between calls, so a variable set in one step is usable in the next
Uv, and a clone — the client launches it with uv run against the project directory. No setup beyond that, no key, no account. Code runs as your user with no sandbox, so treat it as running Python on your own machine.
One command — uvx mcp-python
