Skip to main content
Glama
merwanroudane

python-session-mcp

python-session-mcp

Licence Python

Запускайте Python в сеансе, который остаётся активным, и открывайте его для LLM-клиентов через Model Context Protocol.

Автор: д-р Merwan Roudane

В чём отличие

Сеанс сохраняется. DataFrame, загруженный в одном вызове, остаётся на месте и в следующем, так что анализ строится по шагам, а не пересылается целиком каждый раз.

Ваш интерпретатор, а не серверный. Сервер вполне может быть установлен в голый Python без pandas. Интерпретатор, выполняющий ваш код, выбирается отдельно: при наличии предпочтение отдаётся установке conda или Anaconda, а PYTHON_MCP_INTERPRETER переопределяет это.

Сбой стоит одного процесса. Код выполняется в воркере, а не на сервере. Исчерпайте память, вызовите sys.exit, уроните C-расширение — воркер будет заменён, а сервер продолжит работу. Это также не подпускает пользовательский код к stdin сервера, который в MCP является самим потоком JSON-RPC.

Related MCP server: mcp-python-repl

Установка

pip install python-session-mcp

Использование в качестве библиотеки

from python_mcp import PythonRunner

with PythonRunner() as py:
    py.run("import pandas as pd, statsmodels.api as sm")
    py.run("df = pd.read_csv('macro.csv')")
    print(py.run("df.describe()"))

    py.run("m = sm.OLS(df['y'], sm.add_constant(df[['x','z']])).fit()")
    print(py.run("m.summary()"))
    print(py.value("m.params.to_dict()"))    # a real Python dict

Финальное выражение выводится так же, как в REPL, поэтому одного df.head() достаточно для отображения таблицы без print().

Использование MCP-сервера

{
  "mcpServers": {
    "python": {
      "command": "python-session-mcp",
      "env": { "PYTHON_MCP_INTERPRETER": "C:\\Users\\you\\anaconda3\\python.exe" }
    }
  }
}

Инструменты

Сессия

Tool

Purpose

python_status

Какой интерпретатор и какие пакеты в нём реально есть

reset_namespace

Забыть всё, при необходимости перезапустив интерпретатор

Выполнение кода

Tool

Purpose

run_python

Основной инструмент. Выполняет код в постоянной сессии

list_names

Что сейчас определено

describe_object

Тип, форма, dtypes и краткий обзор объекта

get_value

Возвращает значение, представимое в JSON

Данные

Tool

Purpose

load_data

Читает .csv, .xlsx, .dta, .parquet, .sav или .json

save_data

Записывает DataFrame, создавая недостающие папки

preview_data

Форма, dtypes, количество пропусков и первые строки

summary_statistics

Описательные статистики с асимметрией и эксцессом

correlation

Пирсон, Спирмен или Кендалл

Оценивание

Tool

Purpose

regression

МНК, опционально с устойчивыми стандартными ошибками HC или HAC

regression_diagnostics

Бреуш-Годфри, Уайт и Харке-Бера одним вызовом

unit_root

ADF или KPSS, взятие разностей до стационарности

Графики

Tool

Purpose

plot

line, scatter, hist, box или bar — опционально сразу в файл

save_figure

Сохраняет открытую фигуру matplotlib в файл

Ошибки

При сбое называются исключение и строка вашего кода, а сессия остаётся нетронутой:

Python error: NameError on line 2: name 'undefined_name' is not defined

Всё, что было выведено до сбоя, сообщается вместе с ним, поскольку именно этот вывод часто объясняет причину.

Графики

График нельзя вернуть как текст. Нарисуйте его, а затем сохраните:

py.run("import matplotlib; matplotlib.use('Agg')")
py.run("import matplotlib.pyplot as plt; plt.plot(df['x'], df['y'], 'o')")
py.save_figure("figures/scatter.png")     # missing folders are created

Полезно знать

  • Интерпретатор отделён от серверного. Проверяйте python_status, прежде чем рассчитывать на наличие пакета.

  • Состояние — это и удобство, и опасность. Имена сохраняются, поэтому устаревшая переменная с предыдущего шага может незаметно повлиять на следующий. Используйте reset_namespace перед началом нового.

  • run_python выполняет всё, что ему передано, в вашем окружении и с вашим доступом к файлам. В этом его суть, и к этому стоит относиться осознанно.

  • Финальное выражение выводится на экран. Длинный DataFrame напечатается целиком, если его не обрезать.

Тесты

python tests/test_live.py     # 41 tests

Они охватывают сохранение состояния, сообщения об ошибках с номерами строк, JSON-сериализацию, сохранение графиков, восстановление после того, как пользовательский код полностью убивает воркер, а также каждый инструмент работы с данными и оценивания на сгенерированных данных с известными коэффициентами.

При проверке на тех же данных в EViews регрессия совпадает до каждой напечатанной цифры — коэффициенты, R-квадрат, Дарбин-Уотсон, а также статистики Бреуша-Годфри и Харке-Бера.

Лицензия

MIT. Авторское право (c) 2026 Merwan Roudane.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A production-grade MCP server providing a persistent Python REPL with multi-session support, sandboxing, and timeout protection, enabling LLM agents to execute Python code across multiple turns with variables that persist between calls.
    12
    35 PyPI
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for secure, session-based Python code execution in Docker containers, enabling LLM applications to run code, manage state, and access files.
    9
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables LLM agents to run persistent Python code in a workspace-scoped shared kernel, with tools for execution, background tasks, file operations, and external MCP integrations.
    AGPL 3.0