HKEx Filings

Extrae más de 25 años de presentaciones regulatorias de HKEx (Bolsa de Valores de Hong Kong) en nueve bases de datos, consultables en vivo por agentes de IA.

Servidor MCP alojado

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

Se instala en Claude Code, Codex, Cursor y más

Documentación

Rastreador de Presentaciones de HKEx

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

Una herramienta Python de código abierto que extrae más de 25 años de presentaciones regulatorias de la Bolsa de Valores de Hong Kong (HKEx) y las ingiere en cualquier combinación de nueve bases de datos — con extracción de texto completo y tablas, cobertura a nivel de fragmentos, vinculación opcional de grafos, y un servidor MCP de solo lectura para que los agentes de IA puedan consultar el corpus o el sitio en vivo.

Habla directamente con la API JSON no documentada de HKEx, lo cual es más rápido y más resistente que manejar un navegador.

Proveedores e integraciones

Bases de datos — nueve destinos de primera clase, en orden de popularidad documentado (consulta la matriz de soporte):

  • PostgreSQL — relacional de código abierto de grado de producción
  • MySQL / MariaDB — servidores relacionales GPL, un solo controlador
  • SQLite — base de datos de archivos sin servidor, sin instalación necesaria
  • MongoDB — base de datos de documentos
  • Neo4j — base de datos de grafos de propiedades
  • ClickHouse — motor de análisis columnar
  • DuckDB — motor analítico en proceso
  • SurrealDB — base de datos multimodelo de grafos + documentos

Clientes de IA — cualquier agente compatible con MCP; configuración lista para Claude, ChatGPT, Cursor, VS Code/Copilot, Gemini CLI, opencode, Manus y Perplexity.

Disponible en — PyPI · Glama · Registro MCP · puerta de enlace alojada.

Dos formas de usarlo

Puerta de enlace MCP alojadaPipeline local
Qué esUn endpoint público al que apuntas un agente de IALa CLI hkex-scraper
ConfiguraciónNinguna — pega una URLpip install + una variable de entorno
DatosEn vivo desde HKEx, nada almacenadoAlmacenados en tu(s) base(s) de datos
DocumentaciónPuerta de enlace MCP en vivo · Soporte para agentes de IAPrimeros pasos

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

Usa la puerta de enlace MCP alojada

POST, HTTP Streamable, sin clave API:

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

Tres herramientas de solo lectura: get_server_info, search_filings (una ventana de como máximo 31 días), y get_filing (descarga un documento y extrae su texto y tablas).

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

Apunta un cliente hacia ella — por ejemplo, opencode:

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

Luego pregunta:

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

La configuración lista para Claude, ChatGPT, Cursor, VS Code/Copilot, Gemini CLI, opencode, Manus y Perplexity está en Soporte para agentes de IA — y para un corpus almacenado, el servidor MCP stdio expone un catálogo de herramientas más amplio y está publicado en Glama. La puerta de enlace está listada en el Registro MCP oficial como io.github.simonplmak-cloud/hkex-filings.

Destacado en Glama — el servidor MCP stdio de solo lectura también está publicado en Glama, donde Glama escanea el servidor construido y califica la calidad de las definiciones de herramientas (actualmente 4.7/5).

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

Inicio 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 opcionales: excel, postgres, mysql, duckdb, mongodb, clickhouse, neo4j, mcp, pdf, all, dev.

DATABASE_TARGET es una lista ordenada y separada por comas de identificadores de sumideros; el orden decide qué sumidero sirve las lecturas. Para comenzar sin servidor:

DATABASE_TARGET=sqlite
SQLITE_PATH=hkex.db

hkex-scraper ejecuta el pipeline completo (metadatos + documentos + grafo); hkex-scraper --full-history cubre todo desde abril de 1999. El esquema se crea automáticamente. Las opciones completas de instalación y la configuración por sumidero están en Primeros pasos.

Soporte de bases de datos

Cada sumidero es un destino de primera clase; las filas están en orden de popularidad documentado. La matriz completa — licencias, diferencias de capacidades, notas por motor — está en Sumideros de bases de datos.

SumideroModeloLicenciaExtraUpsert idempotente
postgresrelacionalLicencia PostgreSQLpostgresON CONFLICT DO UPDATE
mysql / mariadbrelacionalGPLv2mysqlON DUPLICATE KEY UPDATE
sqliterelacionalDominio público—ON CONFLICT DO UPDATE
mongodbdocumentoSSPL¹mongodbupdate_one(upsert=True)
neo4jgrafoGPLv3 (Comunidad)neo4jMERGE
clickhousecolumnarApache-2.0clickhouseReplacingMergeTree + fusión de lectura
duckdbrelacionalMITduckdbON CONFLICT DO UPDATE
surrealdbgrafo + documentoBSL 1.1¹—UPSERT / RELATE

¹ Código fuente disponible, no aprobado por OSI — excepciones etiquetadas según ADR 0003.

Identificadores de sumidero válidos, en orden documentado: postgres, mysql, sqlite, mongodb, mariadb, neo4j, clickhouse, duckdb, surrealdb. Establece una variable y la misma ejecución alimenta cada sumidero:

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

Cómo 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 extrae los metadatos de las presentaciones a través de una sesión JSF, dividiendo el rango en fragmentos mensuales y deduplicando con un MD5 de 16 caracteres filingId.
  • Fase 2 descarga el documento PDF/HTML/Excel de cada presentación, extrae texto y tablas a Markdown, y escribe la carga útil.
  • Vinculación de grafos (opcional) escribe aristas has_filing y references_filing cuando COMPANY_TABLE está establecido.
  • Aislamiento de fallos — un fallo en un sumidero se registra y cuenta pero nunca bloquea a otro; la ejecución sale con código distinto de cero si algún sumidero configurado falló.

Detalle más profundo: Arquitectura · ADR 0002.

Características

  • Extracción rápida de API — API JSON directa de HKEx; sin navegador ni Selenium.
  • Historial completo — cada presentación desde abril de 1999 hasta hoy, con verificaciones de cobertura a nivel de fragmentos.
  • Procesamiento de documentos — texto de PDF/HTML/Excel y tablas estructuradas, extraídos a Markdown.
  • Multi-sumidero — cualquier combinación ordenada de nueve bases de datos, cada una con upserts idempotentes nativos.
  • Listo para IA — una puerta de enlace MCP alojada en vivo más un servidor MCP stdio local.
  • Reanudable y observable — procesamiento por lotes, descargas paralelas, detección de trabajos estancados, contadores por sumidero, y --coverage-report / --parity-report / --verify.
  • Dependencias opcionales — el núcleo es requests + beautifulsoup4; los controladores y la extracción de documentos son extras con respaldos elegantes.

Documentación

Desarrollo

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

Las pruebas son pruebas unitarias puras; las pruebas de contrato de SQLite y DuckDB se ejecutan en proceso, y las pruebas de integración que necesitan un servidor se omiten a menos que ese sumidero esté configurado. Consulta Pruebas.

Contribuciones

Consulta CONTRIBUTING.md; reporta problemas de seguridad según SECURITY.md. Las ideas y preguntas son bienvenidas en Discusiones.

Si esto te ahorra tiempo, una estrella ayuda a otros a encontrarlo.

Licencia

MIT — consulta LICENSE. Eso cubre solo el código de este proyecto; las dependencias opcionales tienen sus propias licencias, notablemente el extra pdf (PyMuPDF / pymupdf4llm), que es AGPL-3.0 y está deliberadamente excluido de .[all]. Consulta docs/legal.md.

Datos y Términos de uso: esta es una herramienta de investigación para la API JSON no documentada de HKEx, y no está afiliada ni respaldada por HKEx. La redistribución comercial de datos de HKEx puede requerir una fuente de datos de HKEx con licencia; consulta docs/legal.md.