eviews-mcp
eviews-mcp
Управляйте 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 causalityresids и 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. |
| Новая страница по частоте и диапазону. |
| Открыть и сохранить |
| Закрыть один или все открытые рабочие файлы. |
| Имя, страница, частота, диапазон, выборка. |
| Инвентаризация, фильтруемая по типу EViews. |
| Установить оценочную выборку. |
| Основной инструмент. Выполнить блок программного кода EViews. |
| Выполнить существующий |
| Одна командная строка. |
| Отобразить любой объект как текстовую таблицу. |
| Одно значение из выражения. |
| Тип, а также статистика для ряда. |
| Коэффициенты в виде чистой таблицы чисел. |
| Порядок интеграции, проверяемый вниз по разностям. |
| Серийная корреляция, гетероскедастичность и нормальность. |
| Ряд в виде выровненной таблицы или CSV с полной точностью. |
| Записать значения в ряд. |
| Чтение |
| Записать ряд в файл. |
| Сохранить объект — способ получить графики. |
Результаты не выводятся 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 APIpytest по умолчанию запускает автономный набор; живые наборы — по желанию, поскольку им нужна лицензия EViews.
Лицензия
MIT. Copyright (c) 2026 Merwan Roudane.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
MCP server exposing the Backtest360 engine API as tools for AI agents.
MCP server for OpenMM — exposes market data, account, trading, and strategy tools to AI agents
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Related MCP Servers
- AlicenseAqualityAmaintenanceAn MCP server that lets Large Language Models interact with Stata software to perform regression analysis and other statistical operations.4255AGPL 3.0
- FlicenseNot gradedqualityDmaintenanceEconomic 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.-
- AlicenseNot gradedqualityDmaintenanceEconometrics MCP server for regression, causal inference, time series, panel data, machine learning, and broader statistical analysis workflows.10MIT
- AlicenseAqualityBmaintenanceDeterministic 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.17MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/merwanroudane/MCP_EVIEWS'
If you have feedback or need assistance with the MCP directory API, please join our Discord server