Skip to main content
Glama
zacharymcclernon

mcp-finance-agent

Finance Agent

Агент на LangGraph, который маршрутизирует вопросы о акциях на естественном языке между кастомным MCP-сервером (квантовые инструменты yfinance) и новостным инструментом, проверенный с помощью собственного набора для оценки.

Создан для закрытия двух пробелов в навыках: проектирование MCP-серверов (поверхность инструментов, описания как логика маршрутизации) и оркестрация агентов с суждением о маршрутизации.


Архитектура

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

Узлы:

  • route — классифицирует запрос; без вызовов инструментов, только решение

  • quant — ReAct-агент с 5 MCP-инструментами; выбирает подходящий(ие) инструмент(ы) для вопроса

  • news — ReAct-агент с get_recent_news; обрабатывает вопросы о новостях/контексте

  • finish_single_source — сквозной проход для однопутевых запросов; продвигает результат в answer

  • synthesize — согласует результаты quant и news в единый связный ответ для запросов «both»

Для запросов «both» quant и news выполняются параллельно; LangGraph ждет завершения обоих, прежде чем запускать synthesize.


Related MCP server: Yahoo Finance MCP Server

MCP-сервер — квантовые инструменты

Пять инструментов, каждый ограничен одной формой вопроса:

Инструмент

Сценарий использования

get_stock_price(ticker, date?)

Поиск цены на конкретный момент времени

get_fundamentals(ticker)

P/E, EPS, рыночная капитализация, рост выручки, маржа

compare_metric(tickers[], metric)

Сравнение фундаментальных показателей между компаниями

get_price_history_stats(ticker, period)

Доходность, волатильность, отклонение от среднего за период

get_earnings_date(ticker)

Следующая/последняя дата отчета о прибыли

Описания инструментов включают явные негативные случаи («не для X, это относится к инструменту Y») — это необходимо, поскольку несколько инструментов имеют схожие формы параметров и в противном случае были бы неоднозначны для маршрутизатора.


Установка

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

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

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?"

Оценка

pytest evals/test_agent.py -v

18 запросов по четырем категориям: quant, news, both и adversarial. Adversarial-кейсы включают ловушки с ключевыми словами (новостной язык, оборачивающий квантовые вопросы) и запросы с ложной предпосылкой (утверждения о движении цены, которые необходимо проверить перед объяснением).

Результат: 15/18 → 18/18 после исправления двух хрупких утверждений о строке тикера и добавления правила классификации ложных предпосылок в промпт маршрутизатора.


Ключевые проектные решения

1. Описания инструментов как логика маршрутизации. Каждое описание инструмента явно указывает, что он не обрабатывает. Без негативных случаев инструменты с пересекающимися формами параметров (например, get_stock_price и get_price_history_stats оба принимают тикер и параметры, похожие на дату) неоднозначны для LLM-маршрутизатора.

2. Новости как обычный инструмент LangGraph, а не второй MCP-сервер. Инстинкт был: «второй MCP-сервер = переиспользуемый строительный блок». Но если подумать: переиспользуемый для чего? Конкретного второго потребителя не было. Второй MCP-сервер означает второй подпроцесс для запуска и управления; обычный @tool — это одна внутрипроцессная функция. Накладные расходы на границу процесса не имели соответствующей выгоды.

3. Маршрутизатор классифицирует намерение, агенты выбирают инструменты. Маршрутизатор выполняет только трехстороннюю классификацию — он не выбирает, какой квантовый инструмент вызывать. Выбор инструмента LLM (сопоставление запроса с одним из 5 описаний инструментов) — это гибкая/недетерминированная работа, которая принадлежит внутри цикла ReAct quant, а не дублируется в промпт маршрутизатора.

4. Синтез должен согласовывать, а не конкатенировать. Промпт синтеза явно инструктирует модель связывать квантовые данные и новостной контекст в единый связный ответ. «Не просто перечисляй оба по отдельности — свяжи их». Без этого путь «both» дает два абзаца, склеенных вместе, а не реальный ответ.

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