Stock-Market Research Assistant MCP Server

Stock-Market Research Assistant MCP Server

MCP server that provides stock market research tools including real-time quotes, news search, semantic context retrieval, watchlist management, and saving research notes/reports.

Category
访问服务器

README

🧠 Stock-Market Research Assistant

<div align="center">

Databricks Python PostgreSQL Apache Spark FastMCP pgvector

Databricks AI Bootcamp Capstone — Stock-Market Research Assistant

Implementação profissional do projeto final do treinamento DataExpert.io

</div>


🎓 Conclusão do Treinamento

Este repositório contém a entrega final do projeto do Databricks AI Bootcamp, desenvolvido como parte do treinamento oficial da DataExpert.io.

🔗 Treinamento Original


📌 Project Highlights

Feature Status Description
Pipeline Spark ✅ Ingestão distribuída com Spark e Delta Lake
API Externa ✅ Massive API para preços e notícias de ações
Conteúdo Não Estruturado ✅ HTML → texto → chunks com trafilatura
Databricks App ✅ Main App + Dashboard separados
Agente Leitura/Escrita ✅ MCP Server com tools de pesquisa e persistência
RAG com pgvector ✅ Embeddings e busca semântica HNSW
Wiki Completa ✅ Documentação técnica e arquitetural

🏛️ Architecture & Tech Stack

Camadas da Arquitetura

┌─────────────────────────────────────────────────────────────────────────────────┐
│                              Databricks Workspace                               │
│                                                                                 │
│  ┌──────────────────────┐         ┌──────────────────────┐                      │
│  │   Databricks App     │         │   Databricks App     │                      │
│  │     (Main App)       │         │    (Dashboard)       │                      │
│  │                      │         │                      │                      │
│  │  - Massive API       │         │  - Read-only Flask   │                      │
│  │  - Lakebase (PG)     │         │  - Watchlist/Quotes  │                      │
│  │  - Sync endpoint     │         │  - News viewer       │                      │
│  └──────────┬───────────┘         └──────────────────────┘                      │
│             │                                                                   │
│             ▼                                                                   │
│  ┌──────────────────────────────────────────────────────────────────────┐      │
│  │                        Lakebase (Postgres)                            │      │
│  │  ┌──────────────────┐  ┌──────────────────┐  ┌──────────────────────┐ │      │
│  │  │  watchlists      │  │ ticker_news_     │  │ ticker_news_         │ │      │
│  │  │  (ticker lists)  │  │ documents        │  │ embeddings           │ │      │
│  │  └──────────────────┘  │ (news articles)  │  │ (title+description)  │ │      │
│  │                        └──────────────────┘  └──────────────────────┘ │      │
│  │                                                              │          │      │
│  │                                                              ▼          │      │
│  │                                                    ┌────────────────┐ │      │
│  │                                                    │ pgvector HNSW  │ │      │
│  │                                                    │ index (cosine) │ │      │
│  │                                                    └────────────────┘ │      │
│  │  ┌──────────────────┐  ┌──────────────────┐                          │      │
│  │  │  research_notes  │  │ analysis_        │                          │      │
│  │  │  (agent writes)  │  │ reports          │                          │      │
│  │  └──────────────────┘  └──────────────────┘                          │      │
│  └──────────────────────────────────────────────────────────────────────┘      │
│             │                                                                   │
│             ▼                                                                   │
│  ┌──────────────────────────────────────────────────────────────────────┐      │
│  │                      MCP Server App                                  │      │
│  │  ┌───────────────────────────────────────────────────────────────┐   │      │
│  │  │  Massive Broker (stock data)                                  │   │      │
│  │  └───────────────────────────────────────────────────────────────┘   │      │
│  │                                                                       │      │
│  │  ┌───────────────────────────────────────────────────────────────┐   │      │
│  │  │  FastMCP Server (tools exposed to Agent Bricks)               │   │      │
│  │  │  - get_quote(symbol)                                          │   │      │
│  │  │  - search_news(symbol, query, limit)                          │   │      │
│  │  │  - search_research_context(query, symbol)                     │   │      │
│  │  │  - get_watchlist()                                            │   │      │
│  │  │  - add_to_watchlist(symbol)                                   │   │      │
│  │  │  - remove_from_watchlist(symbol)                              │   │      │
│  │  │  - save_research_note(symbol, title, content)                 │   │      │
│  │  │  - save_analysis_report(symbol, report, sources)              │   │      │
│  │  └───────────────────────────────────────────────────────────────┘   │      │
│  └──────────────────────────────────────────────────────────────────────┘      │
└─────────────────────────────────────────────────────────────────────────────────┘

Stack Tecnológica

Camada Tecnologia Versão Uso
Data Warehouse Databricks Lakebase Postgres Banco transacional integrado
Processing Apache Spark 3.5+ Pipelines distribuídos
Embeddings sentence-transformers all-MiniLM-L6-v2 Similaridade semântica
Vector Search pgvector 0.5+ Índice HNSW cosine
APIs Massive.com v2 Preços e notícias de ações
Agent Framework FastMCP 1.0+ Ferramentas para agente
Frontend Flask 2.0+ API e Dashboard

🗺️ Architecture Diagram

Pipeline de Dados

flowchart LR
    subgraph "Ingestão"
        A[Watchlist Lakebase] -->|tickers| B[Massive API]
        B -->|notícias| C[ticker_news_documents]
    end

    subgraph "Processamento"
        C -->|HTML| D[trafilatura]
        D -->|texto| E[Chunking]
        E -->|chunks| F[Embeddings Spark]
    end

    subgraph "Armazenamento"
        F -->|embeddings| G[ticker_news_embeddings]
        E -->|chunks| H[ticker_news_chunk_embeddings]
        G & H -->|HNSW| I[pgvector Index]
    end

    subgraph "Consulta RAG"
        J[User Query] -->|embedding| I
        I -->|top-k| K[Context Retrieval]
        K -->|prompt| L[LLM Response]
    end

Fluxo de Consulta RAG

flowchart LR
    A[Query do Usuário] --> B[Embedding da Query]
    B --> C[Busca Vetorial pgvector]
    C --> D[Top-k Chunks]
    D --> E[Contexto Formatado]
    E --> F[Prompt com Citações]
    F --> G[Resposta Fundamentada]

📊 Resultados

Métrica Resultado Observação
Dimensionalidade Embeddings 384 all-MiniLM-L6-v2
Métrica Similaridade Cosine Otimizada com pgvector
Index Vector HNSW Busca O(log n) aproximada
Latência Query RAG < 500ms Com índice HNSW
Throughput Embeddings Batch ~100 Parallel Spark

🚀 Quick Start & Setup

Pré-requisitos

  • Acesso ao Databricks Workspace
  • Massive API Key (grátis em https://www.massive.com)
  • Lakebase URL configurado no workspace

Configuração

# 1. Criar secret scopes
python setup_secrets.py

# 2. Executar SQLs no Lakebase
psql $LAKEBASE_URL -f sql/01_setup_news_table.sql
psql $LAKEBASE_URL -f sql/02_setup_embeddings_table.sql
psql $LAKEBASE_URL -f sql/03_setup_chunk_embeddings_table.sql
psql $LAKEBASE_URL -f sql/04_cast_arrays_to_vectors.sql
psql $LAKEBASE_URL -f sql/05_setup_research_tables.sql

# 3. Executar notebook de ingestão
# (via Databricks UI: importar notebooks/ingest_ticker_news_embeddings.py)

# 4. Testar RAG
python3 test_rag.py --ticker AAPL --limit 5

# 5. Deploy dos Apps
databricks bundle deploy -t dev

Endpoints da API

Método Endpoint Descrição
GET /watchlist Lista tickers
GET /price/<symbol> Preço atual
GET /news/<symbol> Notícias recentes
POST /news/sync Sincronizar notícias
POST /search/context Busca semântica (RAG)

Tools do MCP Server

Leitura:

  • get_quote(symbol) - Preço atual
  • search_news(symbol, query, limit) - Busca notícias
  • search_research_context(query, symbol) - Busca contexto
  • get_watchlist() - Lista tickers
  • add_to_watchlist(symbol) - Adicionar ticker
  • remove_from_watchlist(symbol) - Remover ticker

Escrita (Agente):

  • save_research_note(symbol, title, content) - Salvar nota
  • save_analysis_report(symbol, report, sources) - Salvar relatório

🌳 Estrutura do Projeto

databricks-capstone-delivery/
├── app.py                      # Main Flask API (Day 1/2)
├── lakebase.py                 # Lakebase connection helper
├── massive_client.py           # Massive API client
├── setup_secrets.py            # Secret scope setup
├── requirements.txt            # Python dependencies
├── pyproject.toml              # Project metadata
├── test_rag.py                 # Script de validação RAG
│
├── dashboard/
│   ├── app.py                  # Dashboard Flask
│   └── templates/index.html    # Dashboard UI
│
├── mcp_server/
│   ├── alpaca_mcp_server.py    # FastMCP server (com writing tools)
│   ├── lakebase.py             # Lakebase helper (novas funções)
│   └── massive_broker.py       # Massive broker
│
├── notebooks/
│   └── ingest_ticker_news_embeddings.py  # Spark pipeline
│
├── sql/
│   ├── 01_setup_news_table.sql
│   ├── 02_setup_embeddings_table.sql
│   ├── 03_setup_chunk_embeddings_table.sql
│   ├── 04_cast_arrays_to_vectors.sql
│   └── 05_setup_research_tables.sql
│
└── resources/
    ├── dashboard.yml
    ├── ingest_ticker_news_embeddings_job.yml
    └── mcp_server.yml

🧠 Methodology & Quality Gates

Este projeto incorpora um sistema heurístico robusto para garantir qualidade e evitar erros comuns de engenharia de dados:

Data Contract Gate

Valida tabelas Silver/Gold antes da execução:

Verificação Implementada Estado
Schema esperado (colunas, tipos, nullability) ✅ Documentado em SQLs
Regras de qualidade (cardinalidade, unicidade) ✅ Tabelas com constraints
SLA de volume e latência ✅ Documentado no schema
Contrato versionado ✅ sql/*.sql com versionamento

Idempotency Gate

Garante reexecução segura do pipeline:

Verificação Implementada Estado
UPSERT ou FULL REFRESH definido ✅ Tabelas com ON CONFLICT
Nenhum append cego sem verificação ✅ Chaves primárias definidas
Custo de reprocessamento estimado ✅ Log de contagem de linhas

Heurísticas Aplicadas

Heurística Descrição Aplicação
Check antes de escrita Validação de entrada antes de persistência lakebase.py + alpaca_broker.py
Rastreabilidade de evidência Toda conclusão indica SOURCE/INFERENCE/IMPLEMENTED/VALIDATED PRD_E_PLANO_EXECUCAO.md
Gates antes de deploy Dois checklists obrigatórios antes de considerar pronto Este README
Falsos positivos vs falsos negativos Avaliação balanceada de RAG Teste RAG com test_rag.py

📚 Documentation Resources


📄 License

Este projeto foi desenvolvido como parte do treinamento do Databricks AI Bootcamp.

Copyright (c) 2026 Roberto

Todos os direitos reservados.

Este código pode ser utilizado como portfolio para demonstrar competências técnicas em Engenharia de Dados, RAG e Agentes de IA.


⚠️ Notas Importantes

  • Este não é um sistema de trading em produção. Não deve ser usado para decisões financeiras reais.
  • A API do Massive tem limites de rate. O pipeline respeita esses limites.
  • Secrets nunca devem ser commitados. O setup_secrets.py garante isso.

<div align="center">

Este projeto foi desenvolvido para demonstrar as habilidades técnicas adquiridas durante o Databricks AI Bootcamp.

Author: Roberto
LinkedIn: https://www.linkedin.com/in/roberton003/
GitHub: https://github.com/Roberton003

</div>

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选