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.
README
๐ง Stock-Market Research Assistant
<div align="center">
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
- Bootcamp: Rise of the AI Data Engineer
- Repository: EcZachly/databricks-ai-bootcamp-capstone
- NotebookLM: Databricks AI Boot Camp
๐ 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 atualsearch_news(symbol, query, limit)- Busca notรญciassearch_research_context(query, symbol)- Busca contextoget_watchlist()- Lista tickersadd_to_watchlist(symbol)- Adicionar tickerremove_from_watchlist(symbol)- Remover ticker
Escrita (Agente):
save_research_note(symbol, title, content)- Salvar notasave_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
PRD_E_PLANO_EXECUCAO.md- Requisitos e plano completoTECHNICAL.md- Documentaรงรฃo tรฉcnica para tech leadsCHANGELOG.md- Histรณrico de versรตesCONTRIBUTING.md- Guia de contribuiรงรฃo
๐ 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.pygarante 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>
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.