SEC Filings and Earnings Call

O servidor MCP fornece fluxos de trabalho completos para arquivamentos SEC e transcrições de chamadas de lucros—incluindo resolução de tickers, recuperação de documentos, OCR, incorporação, descoberta de recursos em disco e busca semântica—expostos via MCP e alimentados pelos mesmos backends olmOCR e de incorporação dos backends vLLM.

Documentação

Finance Data MCP

Um kit de ferramentas Python-first para ingestão de arquivos SEC, conversão de OCR para Markdown, coleta de transcrições e recuperação através de recuperação híbrida (dense + BM25) com reranking.

O que este projeto faz

  • Baixa arquivos SEC e armazena metadados dos arquivos.
  • Converte PDFs de arquivos para Markdown via olmOCR.
  • Divide em chunks e indexa arquivos/transcrições no Chroma.
  • Suporta:
    • Busca híbrida (dense + BM25 reciprocal-rank-fusion + reranker).
  • Expõe fluxos de trabalho através de:
    • FastAPI (server.py).
    • Servidor MCP (mcp_server.py).

Estrutura do repositório

  • finance_data/filings/: download SEC + utilitários.
  • finance_data/ocr/: pipeline olmOCR.
  • finance_data/dataloader/: divisão em chunks, indexação Chroma, recuperação semântica + BM25.
  • finance_data/earnings_transcripts/: busca de transcrições + persistência.
  • finance_data/server_api/: modelos de requisição/resposta da API + utilitários de lote.
  • server.py: aplicativo FastAPI.
  • mcp_server.py: ponto de entrada MCP.
  • docs/: documentação de configuração e operações.

Início rápido

1) Instalar dependências

uv sync

Para fluxos de OCR/embedding:

uv sync --group ocr-md

Para fluxos de trabalho MCP:

uv sync --group ocr-md --group mcp

2) Configurar ambiente

Use .env ou variáveis de ambiente. Configurações comuns:

  • SEC_API_ORGANIZATION, SEC_API_EMAIL
  • OLMOCR_SERVER, OLMOCR_MODEL, OLMOCR_WORKSPACE
  • EMBEDDING_SERVER, EMBEDDING_MODEL
  • CHROMA_PERSIST_DIR
  • MCP_HOST, MCP_PORT, MCP_NGROK_ALLOWED_HOSTS

Consulte finance_data/settings.py para valores padrão.

3) Executar serviços

Inicie os servidores de modelo:

make vllm-olmocr-serve
make vllm-embd-serve
make vllm-reranker-serve

Inicie a API:

make start-server

Inicie o MCP:

uv run --group ocr-md --group mcp python mcp_server.py

Capacidades de busca

API de arquivos SEC

  • Híbrido (dense + BM25 + reranker): POST /vector_store/search_sec_filings

API de transcrições

  • Híbrido (dense + BM25 + reranker): POST /vector_store/search_transcripts

Ferramentas MCP

  • Híbrido: search_sec_filings_tool, search_transcripts_tool

Fluxos de trabalho principais

Arquivo SEC → Markdown

uv run python -m finance_data.filings.sec_data --ticker AMZN --year 2025
uv run python -m finance_data.ocr.olmocr_pipeline --pdf-dir sec_data/AMZN-2025

Incorporar e buscar arquivos (API)

curl -s -X POST "http://127.0.0.1:8081/vector_store/embed_sec_filings" \
  -H "Content-Type: application/json" \
  -d '{"ticker":"AMZN","year":"2025","filing_type":"10-K","force":false}'

curl -s -X POST "http://127.0.0.1:8081/vector_store/search_sec_filings" \
  -H "Content-Type: application/json" \
  -d '{"ticker":"AMZN","year":"2025","filing_type":"10-K","query":"operating income margin","top_k":5}'

Transcrições de resultados

Buscar transcrições trimestrais:

uv run python -m finance_data.earnings_transcripts.transcripts AMZN 2025

Incorporar + buscar transcrições híbridas:

curl -s -X POST "http://127.0.0.1:8081/vector_store/embed_transcripts" \
  -H "Content-Type: application/json" \
  -d '{"ticker":"AMZN","year":"2025","force":false}'

curl -s -X POST "http://127.0.0.1:8081/vector_store/search_transcripts" \
  -H "Content-Type: application/json" \
  -d '{"ticker":"AMZN","year":"2025","query":"AWS revenue growth","top_k":5}'

Docker

Use wrappers do Makefile:

make docker-build
make docker-start

Parar/remover pela porta da API:

make docker-stop
make docker-remove

Documentação

  • docs/README.md
  • docs/setup-and-operations.md