eviews-mcp
eviews-mcp
Impulsa EViews desde Python y expónlo a clientes LLM a través del Model Context Protocol.
Sitio de documentación · Guía del investigador · PyPI
Dos cosas en un solo paquete:
Una biblioteca. Una clase
EViewspara scripts y notebooks: crea archivos de trabajo, estima modelos, lee resultados como texto o DataFrames de pandas.Un servidor MCP. Las mismas capacidades como herramientas, para que un asistente pueda hacer econometría en una sesión real de EViews.
Construido y probado contra EViews 13 en Windows; EViews 10–14 se resuelven correctamente a través de la misma interfaz COM.
¿Nuevo en esto? La Guía del investigador de EViews te lleva desde una máquina limpia hasta un estudio ARDL completo, con cada comando y cada salida verificados contra una sesión real de EViews. No se asume conocimiento de Python.
Instalación
pip install eviews-mcpCon soporte para pandas:
pip install "eviews-mcp[pandas]"O desde un clon, para desarrollo:
git clone https://github.com/merwanroudane/MCP_EVIEWS.git
cd MCP_EVIEWS
pip install -e .[dev]Requiere Windows y una instalación local de EViews, ya que controla EViews mediante automatización COM.
Related MCP server: econstats-mcp
Uso de la biblioteca
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.080Cualquier vista de EViews, como texto
show toma una vista, por lo que los diagnósticos no necesitan API adicional:
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 e impulse dibujan gráficos por defecto; las variantes (t) piden a EViews la forma de tabla. Las vistas que se congelan en un spool en lugar de una tabla — entre ellas la relación de cointegración ARDL — no se pueden leer a través de COM en absoluto, por lo que show recurre a un volcado de texto para esas.
Para los números en lugar del diseño, table() devuelve filas crudas con precisión doble completa, y value() devuelve un número:
rows = ev.table("eq1") # tuple of row tuples
r2 = ev.value("eq1.@r2") # 0.9947015...
beta = ev.value("eq1.@coefs(2)")Resultados como datos, no solo texto
show formatea una tabla para lectura. Estas devuelven los números en su lugar, para probar, tabular o pasar a otra cosa:
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.9858630667863459Orden de integración, probado a través de diferencias hasta que sea estacionario:
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, ...}]}Pasa options para elegir la prueba: "pp" para Phillips-Perron, "kpss" para KPSS, "adf, trend" para añadir una tendencia. KPSS invierte la hipótesis nula, por lo que el orden informado no se aplica a ella.
La batería estándar post-estimación en una sola llamada:
report = ev.diagnose("eq1")
report["summary"]
# 'All 3 diagnostics pass at the 0.05 level.'Breusch-Godfrey, White y Jarque-Bera, cada uno con su estadístico, valor p y si se rechaza la hipótesis nula. Una prueba que no puede ejecutarse se lista bajo report["skipped"] con la razón que dio EViews, de modo que el resumen nunca exagera cuánto se comprobó realmente.
Estos veredictos leen los valores p contra un nivel que tú eliges. No establecen que una especificación sea sólida: las rupturas estructurales, la estacionalidad y las muestras cortas engañan a estas pruebas.
pandas en ambas direcciones
frame = ev.to_dataframe(["gdp", "k", "l"]) # indexed 1990Q1, 1990Q2, ...
frame.corr()Al escribir de vuelta, un DatetimeIndex o PeriodIndex decide la frecuencia y el rango de la página, por lo que las fechas permanecen alineadas:
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")Las columnas no numéricas se omiten en lugar de hacer fallar todo el marco.
Gráficos
Los gráficos no se pueden representar como texto, así que escríbelos a un archivo:
ev.export_object("phillips", "residuals.png", view="resids")Formatos de gráfico: png, jpg, pdf, emf, wmf, bmp, gif, eps, tex. Formatos de tabla: csv, rtf, txt, html.
Errores
EViews informa los fallos con precisión, incluido el número de línea dentro de un programa, y esos mensajes se pasan sin cambios:
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.El programa generado recibe un nombre aleatorio en cada ejecución, por lo que solo esa parte varía.
Uso del servidor MCP
Registra el comando eviews-mcp con tu cliente MCP:
{
"mcpServers": {
"eviews": {
"command": "eviews-mcp"
}
}
}Para Claude Code:
claude mcp add eviews -- eviews-mcpHerramientas
Tool | Propósito |
| Conexión, versión, archivo de trabajo activo. Empieza aquí al depurar. |
| Descarta la instancia y comienza limpio. |
| Mostrar u ocultar la ventana de EViews. |
| Nueva página por frecuencia y rango. |
| Abrir y guardar |
| Cerrar uno o todos los archivos de trabajo abiertos. |
| Nombre, página, frecuencia, rango, muestra. |
| Inventario, filtrable por tipo de EViews. |
| Establecer la muestra de estimación. |
| Herramienta principal. Ejecutar un bloque de código de programa de EViews. |
| Ejecutar un |
| Una sola línea de comando. |
| Representar cualquier objeto como tabla de texto. |
| Un valor de una expresión. |
| Tipo, más estadísticas para una serie. |
| Coeficientes como una tabla limpia de números. |
| Orden de integración, probado a través de diferencias. |
| Correlación serial, heterocedasticidad y normalidad. |
| Series como tabla alineada o CSV de precisión completa. |
| Escribir valores en una serie. |
| Leer |
| Escribir series a un archivo. |
| Guardar un objeto: la forma de recuperar gráficos. |
Los resultados no se repiten con run_eviews_code, porque EViews envía la salida del programa a su propia ventana de registro, a la que COM no puede acceder. Estima en un objeto con nombre y llama a show sobre él.
Solución de problemas
Si el servidor no arranca
Una versión anterior a 1.3.3 podría instalar el MCP SDK 2.x, que eliminó el módulo en el que se basa este servidor. El síntoma es el mismo cada vez:
ModuleNotFoundError: No module named 'mcp.server.fastmcp'1.3.3 fija el SDK por debajo de 2.0. Actualizar lo soluciona, pero pip puede servir un índice en caché anterior al lanzamiento, así que evita la caché:
pip install --upgrade --no-cache-dir "eviews-mcp[pandas]"Confirma que el servidor en sí se importa, no solo el paquete. El paquete se importa de forma perezosa y tiene éxito incluso cuando el SDK no es utilizable, por lo que comprobarlo no prueba nada:
python -c "import eviews_mcp.server as s; print(len(s.mcp._tool_manager.list_tools()), 'tools')"Veinticuatro herramientas significa que la instalación es saludable.
Comportamiento que vale la pena conocer
Estas son características de EViews que la biblioteca maneja por ti, documentadas porque sorprenden a quienes escriben código COM directamente.
Los escritos respetan la muestra activa. Bajo
smpl 2000m3 2000m6, escribir 12 valores aterriza 4 y deja silenciosamente el resto como NA. Por lo tanto, los escritos se predeterminan a toda la página; pasasample=""para optar por la muestra actual en su lugar.saveignora la extensión del archivo.graph.save "out.png"escribe datos EMF. El formato se pasa explícitamente, y un guardado que no produce archivo genera una excepción en lugar de informar éxito.Las rutas relativas se resuelven contra EViews, no contra el proceso que llama, por lo que las rutas se hacen absolutas antes de entregarse.
Un marco con fechas gobierna la página. Escribir un marco trimestral de 12 filas en una página abierta de 80 filas aterrizaría los valores en las fechas equivocadas, por lo que se crea una página que coincida con el marco en su lugar.
Sin redirección de registro. El comando
outputrequiere un nombre de objeto congelado y de lo contrario no escribe nada, por lo que no puede capturar un registro. Los resultados provienen de congelar un objeto en una tabla y leerla.Sin
GetScalar/PutScalar/GetString. Estos no están en la interfaz COM de EViews en absoluto.Getlos cubre e infiere el tipo.Un solo hilo COM. MCP despacha herramientas síncronas a través de un grupo de hilos, y un puntero COM no es válido entre apartamentos, por lo que cada llamada a EViews se canaliza a un único hilo inicializado con apartamento.
Importar en un archivo de trabajo abierto trunca el archivo a la longitud de esa página, silenciosamente. Por lo tanto, las importaciones crean un nuevo archivo de trabajo por defecto; fusionar en la página actual es opcional.
EViews limita cuántos archivos de trabajo pueden estar abiertos y luego se niega a crear otro, por lo que
close_workfileexiste para mantener sesiones largas saludables.
Pruebas
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 ejecuta la suite sin conexión por defecto; las suites en vivo son opcionales porque necesitan una licencia de EViews.
Licencia
MIT. Copyright (c) 2026 Merwan Roudane.
This server cannot be deployed
Maintenance
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.43,836 PyPI266AGPL 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.73 PyPI10MIT
- AlicenseAqualityDmaintenanceDeterministic 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