HKEx Filings

Extraia mais de 25 anos de arquivos regulatórios da HKEx (Bolsa de Valores de Hong Kong) em nove bancos de dados, consultáveis ao vivo por agentes de IA.

Servidor MCP hospedado

npx add-mcp 'https://hkex-listco-updates.ascent-partners.com/api/mcp'

Instala no Claude Code, Codex, Cursor e outros

Documentação

HKEx Filing Scraper

HKEx Filing Scraper — one scraper, many databases

CI GitHub Release PyPI License: MIT Python 3.10+ MCP mcp-hkex-filing MCP server – quality and maintenance score on Glama Docs Ruff PRs Welcome

PostgreSQL MySQL SQLite MongoDB Neo4j ClickHouse DuckDB SurrealDB

Uma ferramenta Python de código aberto que coleta mais de 25 anos de arquivos regulatórios da Bolsa de Valores de Hong Kong (HKEx) e os ingere em qualquer combinação de nove bancos de dados — com extração de texto completo e tabelas, cobertura em nível de bloco, vinculação opcional de grafos e um servidor MCP somente leitura para que agentes de IA possam consultar o corpus ou o site ao vivo.

Ele fala diretamente com a API JSON não documentada da HKEx, o que é mais rápido e mais resiliente do que controlar um navegador.

Fornecedores e integrações

Bancos de dados — nove destinos de primeira classe, em ordem de popularidade documentada (veja a matriz de suporte):

  • PostgreSQL — relacional de código aberto de nível de produção
  • MySQL / MariaDB — servidores relacionais GPL, um driver
  • SQLite — banco de dados de arquivo sem servidor, sem instalação necessária
  • MongoDB — banco de dados de documentos
  • Neo4j — banco de dados de grafos de propriedades
  • ClickHouse — mecanismo de análise colunar
  • DuckDB — mecanismo analítico em processo
  • SurrealDB — banco de dados multimodelo de grafos + documentos

Clientes de IA — qualquer agente compatível com MCP; configuração pronta para Claude, ChatGPT, Cursor, VS Code/Copilot, Gemini CLI, opencode, Manus e Perplexity.

Disponível em — PyPI · Glama · MCP Registry · gateway hospedado.

Duas maneiras de usar

Gateway MCP hospedadoPipeline local
O quêUm endpoint público para o qual você aponta um agente de IAO CLI hkex-scraper
ConfiguraçãoNenhuma — cole uma URLpip install + uma variável de ambiente
DadosAo vivo da HKEx, nada armazenadoArmazenados no(s) seu(s) banco(s) de dados
DocumentaçãoGateway MCP ao vivo · Suporte a agentes de IAComeçando

Example: install, scrape filings into SQLite, then query the hosted MCP gateway from an AI agent

Use o gateway MCP hospedado

POST, HTTP Streamable, sem chave de API:

https://hkex-listco-updates.ascent-partners.com/api/mcp

Quatro ferramentas somente leitura: get_server_info, search_filings (uma janela de no máximo 31 dias, com filtros opcionais de código de ação, título, tipo de documento, categoria e nome da ação), list_filing_facets (navegue pelo que uma janela contém) e get_filing (baixa um documento e extrai seu texto e tabelas).

Two ways to reach HKEx filings from an AI agent: the hosted MCP gateway or the local stdio server

Aponte um cliente para ele — por exemplo, opencode:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "hkex-live": {
      "type": "remote",
      "url": "https://hkex-listco-updates.ascent-partners.com/api/mcp"
    }
  }
}

Depois pergunte:

Use hkex-live to list the filings published between 2026-09-01 and 2026-09-18,
then summarise the interim report.

A configuração pronta para Claude, ChatGPT, Cursor, VS Code/Copilot, Gemini CLI, opencode, Manus e Perplexity está em Suporte a agentes de IA — e para um corpus armazenado, o servidor MCP stdio expõe um catálogo de ferramentas mais amplo e é publicado no Glama. O gateway está listado no MCP Registry oficial como io.github.simonplmak-cloud/hkex-filings.

Destaque no Glama — o servidor MCP stdio somente leitura também é publicado no Glama, onde o Glama escaneia o servidor construído e avalia a qualidade das definições de ferramentas (atualmente 4,7/5).

mcp-hkex-filing MCP server – quality and maintenance score on Glama

Início rápido (local)

pip install hkex-filing-scraper        # core; SQLite needs no server
pip install "hkex-filing-scraper[all]" # Excel + dotenv + every driver + the MCP server
cp .env.example .env                   # then set DATABASE_TARGET (below)
hkex-scraper --metadata-only --limit 100

Extras opcionais: excel, postgres, mysql, duckdb, mongodb, clickhouse, neo4j, mcp, pdf, all, dev.

DATABASE_TARGET é uma lista ordenada e separada por vírgulas de IDs de destino; a ordem decide qual destino atende às leituras. Para começar sem servidor:

DATABASE_TARGET=sqlite
SQLITE_PATH=hkex.db

hkex-scraper executa o pipeline completo (metadados + documentos + grafo); hkex-scraper --full-history cobre tudo desde abril de 1999. O esquema é criado automaticamente. Opções completas de instalação e configurações por destino estão em Começando.

Suporte a bancos de dados

Cada destino é um destino de primeira classe; as linhas estão em ordem de popularidade documentada. A matriz completa — licenças, diferenças de capacidade, notas por mecanismo — está em Destinos de banco de dados.

DestinoModeloLicençaExtraUpsert idempotente
postgresrelacionalPostgreSQL LicensepostgresON CONFLICT DO UPDATE
mysql / mariadbrelacionalGPLv2mysqlON DUPLICATE KEY UPDATE
sqliterelacionalDomínio público—ON CONFLICT DO UPDATE
mongodbdocumentoSSPL¹mongodbupdate_one(upsert=True)
neo4jgrafoGPLv3 (Community)neo4jMERGE
clickhousecolunarApache-2.0clickhouseReplacingMergeTree + leitura-merge
duckdbrelacionalMITduckdbON CONFLICT DO UPDATE
surrealdbgrafo + documentoBSL 1.1¹—UPSERT / RELATE

¹ Código-fonte disponível, não aprovado pela OSI — exceções rotuladas conforme ADR 0003.

IDs de destino válidos, em ordem documentada: postgres, mysql, sqlite, mongodb, mariadb, neo4j, clickhouse, duckdb, surrealdb. Defina uma variável e a mesma execução alimenta todos os destinos:

# Order sets read precedence.
DATABASE_TARGET=postgres,sqlite
POSTGRES_DSN=postgresql://user:password@localhost:5432/hkex
SQLITE_PATH=hkex.db

Como funciona

flowchart LR
    A[HKEx JSON API] --> B[Phase 1: metadata]
    B --> C[Canonical record]
    C --> D{DATABASE_TARGET}
    D --> E[(PostgreSQL)]
    D --> F[(MySQL / MariaDB)]
    D --> G[(SQLite)]
    D --> H[(MongoDB)]
    D --> I[(Neo4j)]
    D --> J[(ClickHouse)]
    D --> K[(DuckDB)]
    D --> L[(SurrealDB)]
    B --> M[Graph linking]
    M --> D
    B --> N[Phase 2: download and extract]
    N --> C
  • Fase 1 coleta metadados de arquivos por meio de uma sessão JSF, dividindo o intervalo em blocos mensais e deduplicando em um MD5 de 16 caracteres filingId.
  • Fase 2 baixa o documento PDF/HTML/Excel de cada arquivo, extrai texto e tabelas para Markdown e grava o payload.
  • Vinculação de grafo (opcional) grava arestas has_filing e references_filing quando COMPANY_TABLE está definido.
  • Isolamento de falhas — uma falha em um destino é registrada e contada, mas nunca bloqueia outro; a execução sai com código não zero se qualquer destino configurado falhar.

Mais detalhes: Arquitetura · ADR 0002.

Recursos

  • Coleta rápida via API — API JSON direta da HKEx; sem navegador ou Selenium.
  • Histórico completo — todos os arquivos de abril de 1999 até hoje, com verificações de cobertura em nível de bloco.
  • Processamento de documentos — texto de PDF/HTML/Excel e tabelas estruturadas, extraídos para Markdown.
  • Multi-destino — qualquer combinação ordenada de nove bancos de dados, cada um com upserts idempotentes nativos.
  • Pronto para IA — um gateway MCP ao vivo hospedado mais um servidor MCP stdio local.
  • Retomável e observável — agrupamento, downloads paralelos, detecção de trabalhos travados, contadores por destino e --coverage-report / --parity-report / --verify.
  • Dependências opcionais — o núcleo é requests + beautifulsoup4; drivers e extração de documentos são extras com fallbacks graciosos.

Documentação

Desenvolvimento

pip install -e ".[dev,all]"
ruff check           # lint (py310, line-length 100)
ruff format --check  # formatting
pytest               # unit tests (no DB or network required)

Os testes são testes de unidade puros; testes de contrato SQLite e DuckDB são executados em processo, e testes de integração que precisam de um servidor são ignorados, a menos que esse destino esteja configurado. Veja Testes.

Contribuindo

Veja CONTRIBUTING.md; relate problemas de segurança conforme SECURITY.md. Ideias e perguntas são bem-vindas em Discussões.

Se isso economizar seu tempo, uma estrela ajuda outras pessoas a encontrá-lo.

Licença

MIT — veja LICENSE. Isso cobre apenas o código deste projeto; dependências opcionais têm suas próprias licenças, notavelmente o extra pdf (PyMuPDF / pymupdf4llm), que é AGPL-3.0 e deliberadamente excluído de .[all]. Veja docs/legal.md.

Dados e Termos de Uso: esta é uma ferramenta de pesquisa para a API JSON não documentada da HKEx, e não é afiliada ou endossada pela HKEx. A redistribuição comercial de dados da HKEx pode exigir um feed licenciado da HKEx; veja docs/legal.md.