eviews-mcp
eviews-mcp
Steuern Sie EViews aus Python und stellen Sie es LLM-Clients über das Model Context Protocol zur Verfügung.
Dokumentationsseite · Forscherleitfaden · PyPI
Zwei Dinge in einem Paket:
Eine Bibliothek. Eine
EViews-Klasse für Skripte und Notebooks – Workfiles erstellen, Modelle schätzen, Ergebnisse als Text oder pandas-DataFrames zurücklesen.Ein MCP-Server. Dieselben Fähigkeiten als Tools, sodass ein Assistent Ökonometrie in einer echten EViews-Sitzung durchführen kann.
Entwickelt und getestet gegen EViews 13 unter Windows; EViews 10–14 werden über dieselbe COM-Schnittstelle korrekt aufgelöst.
Neu hier? Der EViews-Forscherleitfaden führt Sie von einem sauberen Rechner zu einer fertigen ARDL-Studie, wobei jeder Befehl und jede Ausgabe gegen eine echte EViews-Sitzung verifiziert wurde. Keine Python-Kenntnisse erforderlich.
Installation
pip install eviews-mcpMit pandas-Unterstützung:
pip install "eviews-mcp[pandas]"Oder aus einem Klon, für die Entwicklung:
git clone https://github.com/merwanroudane/MCP_EVIEWS.git
cd MCP_EVIEWS
pip install -e .[dev]Erfordert Windows und eine lokale EViews-Installation, da EViews über COM-Automation gesteuert wird.
Related MCP server: econstats-mcp
Bibliotheksnutzung
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.080Jede EViews-Ansicht als Text
show akzeptiert eine Ansicht, daher benötigen Diagnosen keine zusätzliche 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 und impulse zeichnen standardmäßig Grafiken; die (t)-Varianten fordern EViews zur Tabellenform auf. Ansichten, die in einen Spool statt in eine Tabelle eingefroren werden – darunter die ARDL-Kointegrationsbeziehung – können über COM überhaupt nicht gelesen werden, daher fällt show für diese auf einen Text-Dump zurück.
Für die Zahlen statt des Layouts gibt table() rohe Zeilen mit voller doppelter Genauigkeit zurück, und value() gibt eine einzelne Zahl zurück:
rows = ev.table("eq1") # tuple of row tuples
r2 = ev.value("eq1.@r2") # 0.9947015...
beta = ev.value("eq1.@coefs(2)")Ergebnisse als Daten, nicht nur als Text
show formatiert eine Tabelle zum Lesen. Diese geben stattdessen die Zahlen zurück, zum Testen, Tabellieren oder zur Weitergabe an etwas anderes:
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.9858630667863459Integrationsordnung, getestet durch Differenzen bis zur Stationarität:
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, ...}]}Übergeben Sie options, um den Test zu wählen: "pp" für Phillips-Perron, "kpss" für KPSS, "adf, trend" für einen Trend. KPSS kehrt die Nullhypothese um, daher gilt die gemeldete Ordnung nicht dafür.
Die standardmäßige Post-Schätzungs-Batterie in einem Aufruf:
report = ev.diagnose("eq1")
report["summary"]
# 'All 3 diagnostics pass at the 0.05 level.'Breusch-Godfrey, White und Jarque-Bera, jeweils mit Statistik, p-Wert und ob die Nullhypothese abgelehnt wird. Ein Test, der nicht ausgeführt werden kann, wird unter report["skipped"] mit dem von EViews angegebenen Grund aufgeführt, sodass die Zusammenfassung nie überbewertet, wie viel tatsächlich geprüft wurde.
Diese Urteile lesen p-Werte gegen ein von Ihnen gewähltes Niveau. Sie belegen nicht, dass eine Spezifikation solide ist – Strukturbrüche, Saisonalität und kurze Stichproben führen diese Tests alle in die Irre.
pandas in beide Richtungen
frame = ev.to_dataframe(["gdp", "k", "l"]) # indexed 1990Q1, 1990Q2, ...
frame.corr()Beim Zurückschreiben bestimmt ein DatetimeIndex oder PeriodIndex die Seitenfrequenz und -spanne, sodass Daten ausgerichtet bleiben:
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")Nicht-numerische Spalten werden übersprungen, anstatt den gesamten Frame fehlschlagen zu lassen.
Grafiken
Grafiken können nicht als Text gerendert werden, daher schreiben Sie sie in eine Datei:
ev.export_object("phillips", "residuals.png", view="resids")Grafikformate: png, jpg, pdf, emf, wmf, bmp, gif, eps, tex. Tabellenformate: csv, rtf, txt, html.
Fehler
EViews meldet Fehler präzise, einschließlich der Zeilennummer innerhalb eines Programms, und diese Meldungen werden unverändert durchgereicht:
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.Das generierte Programm erhält bei jedem Lauf einen zufälligen Namen, sodass nur dieser Teil variiert.
MCP-Server-Nutzung
Registrieren Sie den Befehl eviews-mcp bei Ihrem MCP-Client:
{
"mcpServers": {
"eviews": {
"command": "eviews-mcp"
}
}
}Für Claude Code:
claude mcp add eviews -- eviews-mcpTools
Tool | Zweck |
| Verbindung, Version, aktives Workfile. Beginnen Sie hier beim Debuggen. |
| Instanz verwerfen und sauber neu starten. |
| EViews-Fenster anzeigen oder ausblenden. |
| Neue Seite nach Frequenz und Bereich. |
|
|
| Ein oder alle offenen Workfiles schließen. |
| Name, Seite, Frequenz, Bereich, Stichprobe. |
| Inventar, filterbar nach EViews-Typ. |
| Schätzstichprobe festlegen. |
| Hauptwerkzeug. Einen Block EViews-Programmcode ausführen. |
| Eine vorhandene |
| Eine einzelne Befehlszeile. |
| Beliebiges Objekt als Texttabelle rendern. |
| Ein Wert aus einem Ausdruck. |
| Typ, plus Statistiken für eine Serie. |
| Koeffizienten als saubere Zahlentabelle. |
| Integrationsordnung, getestet durch Differenzen. |
| Serielle Korrelation, Heteroskedastizität und Normalität. |
| Serie als ausgerichtete Tabelle oder CSV mit voller Genauigkeit. |
| Werte in eine Serie schreiben. |
|
|
| Serie in eine Datei schreiben. |
| Ein Objekt speichern – der Weg, Grafiken abzurufen. |
Ergebnisse werden von run_eviews_code nicht zurückgegeben, da EViews Programmausgaben an sein eigenes Protokollfenster sendet, das COM nicht erreichen kann. Schätzen Sie in ein benanntes Objekt und rufen Sie show darauf auf.
Fehlerbehebung
Wenn der Server nicht startet
Eine Version vor 1.3.3 konnte das MCP SDK 2.x installieren, das das Modul entfernt hat, auf dem dieser Server basiert. Das Symptom ist jedes Mal dasselbe:
ModuleNotFoundError: No module named 'mcp.server.fastmcp'1.3.3 pinnt das SDK unter 2.0. Ein Upgrade behebt es – aber pip könnte einen zwischengespeicherten Index ausliefern, der vor der Veröffentlichung liegt, also den Cache umgehen:
pip install --upgrade --no-cache-dir "eviews-mcp[pandas]"Bestätigen Sie, dass der Server selbst importiert, nicht nur das Paket. Das Paket importiert träge und funktioniert auch dann, wenn das SDK unbrauchbar ist, daher beweist die Überprüfung nichts:
python -c "import eviews_mcp.server as s; print(len(s.mcp._tool_manager.list_tools()), 'tools')"Vierundzwanzig Tools bedeuten, dass die Installation gesund ist.
Wissenswertes Verhalten
Dies sind EViews-Eigenschaften, die die Bibliothek für Sie übernimmt, dokumentiert, weil sie Leute überraschen, die direkt COM-Code schreiben.
Schreibvorgänge respektieren die aktive Stichprobe. Unter
smpl 2000m3 2000m6landen 12 geschriebene Werte bei 4 und lassen den Rest stillschweigend als NA. Schreibvorgänge standardmäßig auf die gesamte Seite; übergeben Siesample="", um stattdessen in die aktuelle Stichprobe zu schreiben.saveignoriert die Dateierweiterung.graph.save "out.png"schreibt EMF-Daten. Das Format wird explizit übergeben, und ein Speichern, das keine Datei erzeugt, löst einen Fehler aus, anstatt Erfolg zu melden.Relative Pfade werden gegen EViews aufgelöst, nicht gegen den aufrufenden Prozess, daher werden Pfade absolut gemacht, bevor sie übergeben werden.
Ein datierter Frame bestimmt die Seite. Das Schreiben eines 12-zeiligen Quartals-Frames in eine offene 80-zeilige Seite würde die Werte auf die falschen Daten setzen, daher wird stattdessen eine Seite erstellt, die dem Frame entspricht.
Keine Protokollumleitung. Der Befehl
outputerfordert einen eingefrorenen Objektnamen und schreibt sonst überhaupt nichts, daher kann er kein Protokoll erfassen. Ergebnisse stammen aus dem Einfrieren eines Objekts in eine Tabelle und dem Lesen dieser.Kein
GetScalar/PutScalar/GetString. Diese sind überhaupt nicht auf der EViews-COM-Schnittstelle.Getdeckt sie ab und leitet den Typ ab.Ein COM-Thread. MCP verteilt synchrone Tools über einen Thread-Pool, und ein COM-Zeiger ist nicht über Apartments hinweg gültig, daher wird jeder EViews-Aufruf auf einen einzelnen, mit Apartment initialisierten Thread kanalisiert.
Das Importieren in ein offenes Workfile kürzt die Datei stillschweigend auf die Länge dieser Seite. Importe erstellen daher standardmäßig ein neues Workfile; das Zusammenführen in die aktuelle Seite ist optional.
EViews begrenzt, wie viele Workfiles geöffnet sein dürfen und weigert sich dann, ein weiteres zu erstellen, daher existiert
close_workfile, um lange Sitzungen gesund zu halten.
Tests
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 führt standardmäßig die Offline-Suite aus; die Live-Suiten sind optional, da sie eine EViews-Lizenz benötigen.
Lizenz
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