Skip to main content
Glama

eviews-mcp

Tests PyPI Python Licence Platform EViews

Управляйте EViews из Python и предоставляйте его LLM-клиентам через Model Context Protocol.

Сайт документации  ·  Руководство для исследователя  ·  PyPI

В одном пакете две вещи:

  • Библиотека. Класс EViews для скриптов и блокнотов — создание рабочих файлов, оценка моделей, чтение результатов в виде текста или pandas DataFrames.

  • MCP-сервер. Те же возможности в виде инструментов, чтобы ассистент мог выполнять эконометрику в реальном сеансе EViews.

Создано и протестировано с EViews 13 на Windows; EViews 10–14 корректно определяются через тот же COM-интерфейс.

Впервые здесь? Руководство по EViews для исследователей проведёт вас от чистой машины до готового исследования ARDL, при этом каждая команда и каждый результат проверены на реальном сеансе EViews. Знание Python не предполагается.

Установка

pip install eviews-mcp

С поддержкой pandas:

pip install "eviews-mcp[pandas]"

Или из клона, для разработки:

git clone https://github.com/merwanroudane/MCP_EVIEWS.git
cd MCP_EVIEWS
pip install -e .[dev]

Требуется Windows и локальная установка EViews, поскольку пакет управляет EViews через COM-автоматизацию.

Related MCP server: econstats-mcp

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

from eviews_mcp import EViews

with EViews() as ev:
    ev.create_workfile("q", "1990q1", "2020q4")
    ev.run("""
        series k   = 100 + @trend + 3*@nrnd
        series l   = 50 + 0.5*@trend + 2*@nrnd
        series gdp = 10 + 0.6*k + 0.3*l + 2*@nrnd
        equation eq1.ls gdp c k l
    """)

    print(ev.show("eq1"))
    print(ev.value("eq1.@r2"))
Dependent Variable: GDP
Method: Least Squares
Included observations: 124

Variable      Coefficient   Std. Error   t-Statistic   Prob.

C             9.58073       0.829252     11.5535       2.90e-21
K             0.591693      0.0333819    17.7250       1.99e-35
L             0.322394      0.0673315     4.78816      4.81e-06

R-squared     0.994702      Mean dependent var         131.080

Любое представление EViews как текст

show принимает представление, поэтому для диагностики не нужен дополнительный API:

ev.show("eq1", "wald c(2)=c(3)")   # coefficient restriction test
ev.show("eq1", "resids(t)")        # residual table
ev.show("eq1", "coefcov")          # coefficient covariance
ev.show("eq1", "auto(2)")          # Breusch-Godfrey serial correlation
ev.show("eq1", "white")            # White heteroskedasticity test
ev.show("gdp", "uroot")            # unit root test
ev.show("gdp", "correl")           # correlogram
ev.show("ardl1", "cointrel")       # ARDL long-run relationship
ev.show("var1", "impulse(t)")      # impulse response table
ev.show("var1", "testexog")        # Granger causality

resids и impulse по умолчанию рисуют графики; варианты (t) запрашивают у EViews табличную форму. Представления, которые замораживаются в spool, а не в таблицу — среди них коинтеграционное соотношение ARDL — вообще нельзя прочитать через COM, поэтому show для них возвращает текстовый дамп.

Для чисел, а не макета, table() возвращает необработанные строки с полной двойной точностью, а value() возвращает одно число:

rows = ev.table("eq1")             # tuple of row tuples
r2   = ev.value("eq1.@r2")         # 0.9947015...
beta = ev.value("eq1.@coefs(2)")

Результаты как данные, а не только текст

show форматирует таблицу для чтения. Эти методы возвращают числа вместо этого — для тестирования, табулирования или передачи куда-либо ещё:

ev.coefficients("eq1")
# [{'variable': 'LNK', 'coefficient': 0.549198724914677,
#   'std_error': 0.023936158605687322, 't_stat': 22.94431341143375,
#   'p_value': 5.677925593821611e-41}, ...]

ev.fit("eq1")["R-squared"]        # 0.9858630667863459

Порядок интеграции, проверяемый вниз по разностям до стационарности:

ev.unit_root("lngdp")
# {'series': 'LNGDP', 'order_of_integration': 1, 'conclusion': 'I(1)',
#  'steps': [{'difference': 0, 'statistic': -0.5001, 'p_value': 0.8856, ...},
#            {'difference': 1, 'statistic': -12.1778, 'p_value': 0.0001, ...}]}

Передайте options, чтобы выбрать тест: "pp" для Филлипса-Перрона, "kpss" для KPSS, "adf, trend" для добавления тренда. KPSS меняет нулевую гипотезу, поэтому сообщаемый порядок к нему не применяется.

Стандартный набор пост-оценочных тестов одним вызовом:

report = ev.diagnose("eq1")
report["summary"]
# 'All 3 diagnostics pass at the 0.05 level.'

Бройша-Годфри, Уайта и Жарка-Бера, каждый со своей статистикой, p-значением и указанием, отвергается ли нулевая гипотеза. Тест, который не может быть выполнен, перечисляется в report["skipped"] с причиной, которую дал EViews, поэтому сводка никогда не завышает объём фактически проведённых проверок.

Эти вердикты сравнивают p-значения с выбранным вами уровнем. Они не устанавливают, что спецификация корректна — структурные разрывы, сезонность и короткие выборки вводят эти тесты в заблуждение.

pandas в обе стороны

frame = ev.to_dataframe(["gdp", "k", "l"])   # indexed 1990Q1, 1990Q2, ...
frame.corr()

При записи обратно DatetimeIndex или PeriodIndex определяют частоту и диапазон страницы, поэтому даты остаются согласованными:

import numpy as np
import pandas as pd

rng = np.random.default_rng(7)
index = pd.period_range("2005Q1", periods=40, freq="Q")
unemployment = 7.0 - 0.05 * np.arange(40) + rng.normal(0, 0.4, 40)

df = pd.DataFrame(
    {"unemployment": unemployment,
     "inflation": 9.0 - 0.9 * unemployment + rng.normal(0, 0.5, 40)},
    index=index,
)

ev.from_dataframe(df)              # creates a quarterly 2005Q1-2014Q4 page
ev.run("equation phillips.ls inflation c unemployment")

Нечисловые столбцы пропускаются, а не приводят к сбою всего фрейма.

Графики

Графики нельзя отобразить как текст, поэтому запишите их в файл:

ev.export_object("phillips", "residuals.png", view="resids")

Форматы графиков: png, jpg, pdf, emf, wmf, bmp, gif, eps, tex. Форматы таблиц: csv, rtf, txt, html.

Ошибки

EViews сообщает о сбоях точно, включая номер строки внутри программы, и эти сообщения передаются без изменений:

ev.run("""series ok = 1
broken_command
""")
EViewsError: BROKEN_COMMAND is not defined or is an illegal command in "BROKEN_COMMAND"
in MCP_77B699157F3B.PRG on line 2.

Сгенерированной программе при каждом запуске присваивается случайное имя, поэтому меняется только эта часть.

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

Зарегистрируйте команду eviews-mcp в вашем MCP-клиенте:

{
  "mcpServers": {
    "eviews": {
      "command": "eviews-mcp"
    }
  }
}

Для Claude Code:

claude mcp add eviews -- eviews-mcp

Инструменты

Инструмент

Назначение

eviews_status

Подключение, версия, активный рабочий файл. Начните здесь при отладке.

reset_eviews

Отменить экземпляр и начать заново.

set_eviews_visible

Показать или скрыть окно EViews.

create_workfile

Новая страница по частоте и диапазону.

open_workfile / save_workfile

Открыть и сохранить .wf1 / .wf2.

close_workfile

Закрыть один или все открытые рабочие файлы.

workfile_info

Имя, страница, частота, диапазон, выборка.

list_objects

Инвентаризация, фильтруемая по типу EViews.

set_sample

Установить оценочную выборку.

run_eviews_code

Основной инструмент. Выполнить блок программного кода EViews.

run_program_file

Выполнить существующий .prg с аргументами.

command

Одна командная строка.

show

Отобразить любой объект как текстовую таблицу.

evaluate

Одно значение из выражения.

describe_object

Тип, а также статистика для ряда.

equation_coefficients

Коэффициенты в виде чистой таблицы чисел.

unit_root

Порядок интеграции, проверяемый вниз по разностям.

diagnose_equation

Серийная корреляция, гетероскедастичность и нормальность.

read_data

Ряд в виде выровненной таблицы или CSV с полной точностью.

write_series

Записать значения в ряд.

import_data

Чтение .xlsx, .csv, .dta, .sav и других.

export_data

Записать ряд в файл.

export_object

Сохранить объект — способ получить графики.

Результаты не выводятся run_eviews_code, потому что EViews отправляет вывод программы в собственное окно журнала, куда COM не может добраться. Оцените в именованный объект и вызовите для него show.

Устранение неполадок

Если сервер не запускается

Версия до 1.3.3 могла установить MCP SDK 2.x, который удалил модуль, на котором построен этот сервер. Симптом всегда одинаков:

ModuleNotFoundError: No module named 'mcp.server.fastmcp'

1.3.3 закрепляет SDK ниже 2.0. Обновление исправляет это — но pip может использовать кэшированный индекс, который предшествует выпуску, поэтому обойдите кэш:

pip install --upgrade --no-cache-dir "eviews-mcp[pandas]"

Убедитесь, что импортируется сам сервер, а не только пакет. Пакет импортируется лениво и успешно работает даже при неработоспособном SDK, поэтому его проверка ничего не доказывает:

python -c "import eviews_mcp.server as s; print(len(s.mcp._tool_manager.list_tools()), 'tools')"

Двадцать четыре инструмента означают, что установка исправна.

Поведение, о котором стоит знать

Это характеристики EViews, которые библиотека обрабатывает за вас; они задокументированы, потому что удивляют людей, пишущих COM-код напрямую.

  • Запись учитывает активную выборку. При smpl 2000m3 2000m6 запись 12 значений размещает 4 и молча оставляет остальные как NA. Поэтому запись по умолчанию выполняется на всю страницу; передайте sample="", чтобы вместо этого использовать текущую выборку.

  • save игнорирует расширение файла. graph.save "out.png" записывает данные EMF. Формат передаётся явно, и сохранение, не создающее файл, вызывает ошибку, а не сообщает об успехе.

  • Относительные пути разрешаются относительно EViews, а не вызывающего процесса, поэтому пути преобразуются в абсолютные перед передачей.

  • Дата-фрейм управляет страницей. Запись 12-строчного квартального фрейма в открытую страницу на 80 строк привела бы к попаданию значений на неправильные даты, поэтому вместо этого создаётся страница, соответствующая фрейму.

  • Нет перенаправления журнала. Команда output требует имя замороженного объекта и в противном случае вообще ничего не записывает, поэтому она не может захватить журнал. Результаты получаются путём замораживания объекта в таблицу и её чтения.

  • Нет GetScalar / PutScalar / GetString. Их вообще нет в COM-интерфейсе EViews. Get покрывает их и определяет тип.

  • Один COM-поток. MCP распределяет синхронные инструменты по пулу потоков, а указатель COM недействителен между апартаментами, поэтому каждый вызов EViews направляется в один поток, инициализированный апартаментом.

  • Импорт в открытый рабочий файл усекает файл до длины этой страницы, молча. Поэтому импорт по умолчанию создаёт новый рабочий файл; слияние с текущей страницей — по желанию.

  • EViews ограничивает количество открытых рабочих файлов и затем отказывается создавать ещё один, поэтому close_workfile существует для поддержания работоспособности длительных сеансов.

Тесты

python tests/test_offline.py        # 27 tests, no EViews needed
python tests/test_live.py           # 25 tests, drives the MCP tool layer
python tests/test_live_client.py    # 62 tests, drives the library API

pytest по умолчанию запускает автономный набор; живые наборы — по желанию, поскольку им нужна лицензия EViews.

Лицензия

MIT. Copyright (c) 2026 Merwan Roudane.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Economic data MCP server that connects FRED, BLS, BEA, IMF, World Bank, and ECB to any MCP-compatible client, with built-in methodology rules to guide LLMs in selecting appropriate economic indicators.
    -
  • A
    license
    A
    quality
    D
    maintenance
    Deterministic time-series statistics for AI agents. This MCP server gives any LLM agent unit-tested statistical tools — anomaly detection, changepoint detection, seasonal decomposition, stationarity/trend tests, data-quality audits, baseline forecasts — with schema-validated structured output and no arbitrary code execution.
    17
    MIT