Skip to main content
Glama
zacharymcclernon

mcp-finance-agent

Finance Agent

Ein LangGraph-Agent, der natürlichsprachige Aktienfragen zwischen einem benutzerdefinierten MCP-Server (yfinance-Quant-Tools) und einem Nachrichten-Tool routet, validiert durch einen handgefertigten Evaluierungssatz.

Entwickelt, um zwei Qualifikationslücken zu schließen: das Entwerfen von MCP-Servern (Tool-Oberfläche, Beschreibungen als Routing-Logik) und die Agenten-Orchestrierung mit Routing-Urteilsvermögen.


Architektur

User Query
    │
    ▼
┌─────────┐
│  route  │  3-way classifier: quant / news / both
└────┬────┘
     │
     ├──────────────────────┬─────────────────────
     ▼                      ▼
┌─────────┐           ┌──────────┐
│  quant  │           │   news   │
│ (ReAct) │           │  (ReAct) │
└────┬────┘           └────┬─────┘
     │                     │
     └──────────┬───────────┘
                │
        ┌───────┴────────┐
        │                │
        ▼                ▼
┌──────────────┐   ┌───────────┐
│finish_single │   │ synthesize│
│   _source    │   │           │
└──────┬───────┘   └─────┬─────┘
       │                 │
       └────────┬─────────┘
                ▼
             Answer

Knoten:

  • route — klassifiziert die Anfrage; keine Tool-Aufrufe, nur eine Entscheidung

  • quant — ReAct-Agent mit 5 MCP-Tools; wählt das/die richtige(n) Tool(s) für die Frage

  • news — ReAct-Agent mit get_recent_news; behandelt Nachrichten-/Kontextfragen

  • finish_single_source — Durchreichung für Einzelpfad-Anfragen; befördert Ergebnis zu answer

  • synthesize — gleicht Quant- und News-Ausgaben zu einer kohärenten Antwort für „both“-Anfragen ab

Für "both"-Anfragen laufen quant und news parallel; LangGraph wartet, bis beide abgeschlossen sind, bevor synthesize ausgeführt wird.


Related MCP server: Yahoo Finance MCP Server

MCP-Server – Quant-Tools

Fünf Tools, jedes auf eine einzelne Fragenform zugeschnitten:

Tool

Anwendungsfall

get_stock_price(ticker, date?)

Preisabfrage zu einem bestimmten Zeitpunkt

get_fundamentals(ticker)

KGV, EPS, Marktkapitalisierung, Umsatzwachstum, Margen

compare_metric(tickers[], metric)

Direkter Vergleich der Fundamentaldaten zwischen Unternehmen

get_price_history_stats(ticker, period)

Rendite, Volatilität, vs. Durchschnitt über einen Rückblickzeitraum

get_earnings_date(ticker)

Nächstes/letztes Datum der Gewinnmitteilung

Die Tool-Beschreibungen enthalten explizite Negativfälle („nicht für X, das gehört zu Tool Y“) – erforderlich, da mehrere Tools ähnliche Parameterformen teilen und sonst für den Router mehrdeutig wären.


Einrichtung

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env  # add your ANTHROPIC_API_KEY

Verwendung

python -m agent.graph "What's Tesla's P/E ratio?"
python -m agent.graph "Why did NVDA drop this week?"
python -m agent.graph "Has AMZN's stock kept pace with its revenue growth?"

Evaluierungen

pytest evals/test_agent.py -v

18 Abfragen in vier Kategorien: quant, news, both und adversarial. Adversarial-Fälle umfassen Keyword-Fallen (Nachrichtensprache, die Quant-Fragen umhüllt) und False-Premise-Abfragen (Behauptungen über Preisbewegungen, die vor der Erklärung verifiziert werden müssen).

Ergebnis: 15/18 → 18/18 nach Korrektur zweier fragiler Ticker-String-Assertions und Hinzufügen einer False-Premise-Klassifikationsregel zum Router-Prompt.


Wichtige Designentscheidungen

1. Tool-Beschreibungen als Routing-Logik. Jede Tool-Beschreibung gibt explizit an, was sie nicht behandelt. Ohne Negativfälle sind Tools mit überlappenden Parameterformen (z. B. get_stock_price und get_price_history_stats nehmen beide Ticker + datumsähnliche Parameter) für den LLM-Router mehrdeutig.

2. News als einfaches LangGraph-Tool, nicht als zweiter MCP-Server. Der Instinkt war „zweiter MCP-Server = wiederverwendbarer Baustein.“ Nachgefragt: Wiederverwendbar wofür? Es gab keinen konkreten zweiten Verbraucher. Ein zweiter MCP-Server bedeutet einen zweiten Subprozess, der gestartet und verwaltet werden muss; ein einfaches @tool ist eine einzelne In-Process-Funktion. Der Overhead der Prozessgrenze hatte keinen entsprechenden Nutzen.

3. Router klassifiziert die Absicht, Agenten wählen Tools. Der Router führt nur eine 3-Wege-Klassifikation durch – er wählt nicht aus, welches Quant-Tool aufgerufen werden soll. Die LLM-Tool-Auswahl (Zuordnung einer Abfrage zu einer von 5 Tool-Beschreibungen) ist flexible/nicht-deterministische Arbeit, die in die Quant-ReAct-Schleife gehört und nicht in den Router-Prompt dupliziert werden sollte.

4. Synthese muss abgleichen, nicht aneinanderreihen. Der Synthese-Prompt weist das Modell explizit an, Quant-Daten und Nachrichtenkontext zu einer einzigen kohärenten Antwort zu verbinden. „Nicht einfach beide getrennt auflisten – verbinde sie.“ Ohne dies erzeugt der „both“-Pfad zwei zusammengeheftete Absätze statt einer echten Antwort.

Related MCP Connectors

  • 9,900+ US equities, 64 years of prices, financials, technicals, and earnings. Ask in plain English.

  • Research US-listed companies and funds with the StockPortfolio.pro MCP server. Tools cover SEC filing-grounded financials, filing timelines, company comparisons, watchlist screens, fund profiles, and cited filing questions. Filed figures include their fiscal period and EDGAR source URL; missing filing data is returned as null. Public tools work without authentication; optional API-key or OAuth access is supported. US-listed, USD-reporting companies only. Keyless access includes 3 free AI questions per rolling 30-day window. To get more now, choose the Dev plan ($19.99/month, 200 credits) at https://www.stockportfolio.pro/register?plan=dev, then follow https://www.stockportfolio.pro/docs/api-mcp to connect with OAuth or an API key. Or wait for the free allowance to renew.

  • Scrape stock quotes, historical prices, and financial statements from Yahoo Finance.

  • Stock market data for AI agents: real-time quotes, financials, options, SEC filings and news.

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides real-time stock quotes, historical price data, financial news, and multi-stock comparisons using Yahoo Finance data. Enables users to access comprehensive financial market information through natural language queries.
    163 npm
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables querying Yahoo Finance data including stock prices, historical data, financial statements, dividends, news, analyst recommendations, and company information through the yfinance library.
    -
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Provides real-time financial data from Yahoo Finance, enabling stock price lookups, historical data analysis, company information retrieval, and multi-stock comparisons through natural language queries.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides comprehensive financial data from Yahoo Finance, enabling retrieval of stock prices, company information, financial statements, options data, analyst recommendations, and market news through natural language queries.
    MIT