get_server_info
Gateway Info
Report this live gateway's version, transport, and hard limits. Reads nothing.
Takes no parameters.

com.ascent-partnersPublished by ascent-partners.comOfficial publisherv2.4.3Updated Nov 4, 2026
Live HKEx (Hong Kong Stock Exchange) regulatory filings for AI agents.
The publisher's own server: Coso Mcp
Read-only MCP access to live Hong Kong Stock Exchange filings: search by date window, browse facets, and download and extract document text and tables.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/com.ascent-partners%2Fhkex-filings/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Add this to your client's mcpServers config.
{
"mcpServers": {
"hkex-filings": {
"type": "http",
"url": "https://hkex-listco-updates.ascent-partners.com/api/mcp"
}
}
}An open-source scraper for 25+ years of HKEx regulatory filings — into any of nine databases, with full-text extraction, graph linking, and a read-only MCP server for AI agents.
[HKEx Filing Scraper — one scraper, many databases]
[CI] [MCP Registry] [Glama MCP] [GitHub Release] [PyPI] [Python 3.10+] [Docs] [MCP] [Ruff] [License: MIT]
The US has EDGAR full-text search. Japan has EDINET. Hong Kong has a search form that returns one page at a time. There is no bulk, machine-readable, full-text corpus of HKEx filings. This builds one.
An open-source Python tool that scrapes 25+ years of Hong Kong Stock Exchange (HKEx) regulatory filings and ingests them into any combination of nine databases — with full-text and table extraction, chunk-level coverage, optional graph linking, and a read-only MCP server so AI agents can query the corpus or the live site.
It speaks the undocumented HKEx JSON API directly, which is faster and more resilient than driving a browser.
Databases — nine first-class destinations, in documented popularity order (see the support matrix):
AI clients — any MCP-capable agent; ready-made configuration for Claude, ChatGPT, Cursor, VS Code/Copilot, Gemini CLI, opencode, Manus, and Perplexity.
Available on — PyPI · Glama · MCP Registry · hosted gateway.
[Example: install, scrape filings into SQLite, then query the hosted MCP gateway from an AI agent]
POST, Streamable HTTP, no API key:
Four read-only tools: get_server_info, search_filings (a window of at most 31 days, with
optional stock-code, title, document-type, category, and stock-name filters),
list_filing_facets (browse what a window contains), and get_filing (downloads one
document and extracts its text and tables).
[Two ways to reach HKEx filings from an AI agent: the hosted MCP gateway or the local stdio server]
Point a client at it — for example opencode:
Then ask:
Ready-made configuration for Claude, ChatGPT, Cursor, VS Code/Copilot, Gemini CLI, opencode,
Manus, and Perplexity is in AI agent support — and for a stored corpus,
the stdio MCP server exposes a wider tool catalog and is published on
Glama. The gateway is listed
in the official MCP Registry as
com.ascent-partners/hkex-filings.
Featured on Glama — the read-only stdio MCP server is also published on Glama, where Glama scans the built server and scores tool-definition quality (currently 4.7/5).
Fastest path: no install — use the hosted gateway at
https://hkex-listco-updates.ascent-partners.com/api/mcp (Streamable HTTP), or install and run
locally:
Optional extras: excel, postgres, mysql, duckdb, mongodb, clickhouse, neo4j,
mcp, pdf, all, dev.
DATABASE_TARGET is an ordered, comma-separated list of sink ids; the order decides which
sink serves reads. To start with no server:
hkex-scraper runs the full pipeline (metadata + documents + graph); hkex-scraper --full-history covers everything since April 1999. The schema is created automatically.
Full install options and per-sink settings are in Getting started.
Every sink is a first-class destination; rows are in documented popularity order. The full matrix — licenses, capability differences, per-engine notes — is in Database sinks.
¹ Source-available, not OSI-approved — labeled exceptions per ADR 0003.
Valid sink ids, in documented order: postgres, mysql, sqlite, mongodb, mariadb, neo4j, clickhouse, duckdb, surrealdb. Set one variable and the same run feeds every sink:
Four ways to get HKEx filings, and what each one costs you.
If you need licensed, redistributable, SLA-backed data, buy the feed. If you need a complete local corpus for research, compliance, or RAG, this replaces the pipeline you would otherwise write yourself.
filingId.has_filing and references_filing edges when
COMPANY_TABLE is set.Deeper detail: Architecture · ADR 0002.
exchange_filing and scrape_coverage are SCHEMAFULL; has_filing /
references_filing are the graph edges written by graph.py.
--coverage-report / --parity-report / --verify.requests + beautifulsoup4; drivers and document
extraction are extras with graceful fallbacks.examples/)Tests are pure unit tests; SQLite and DuckDB contract tests run in-process, and integration tests that need a server are skipped unless that sink is configured. See Testing.
CI and deployment run through the APG workbench pipeline.
The deploy smoke check probes the public hostname through the balancer, not a local port.
See CONTRIBUTING.md; report security issues per SECURITY.md. Ideas and questions are welcome in Discussions.
Built by Ascent Partners.
If this saves you time, a ⭐ on GitHub helps others find it.
Up-to-date HKEx Filing Scraper documentation is indexed on Context7, so coding agents can pull it into context on demand. With the Context7 MCP server or ctx7 CLI installed, name the library in your prompt:
MIT — see LICENSE. That covers this project's code only; optional dependencies
carry their own licenses, notably the pdf extra (PyMuPDF / pymupdf4llm), which is
AGPL-3.0 and deliberately excluded from .[all]. See
docs/legal.md.
Data & Terms of Use: this is a research tool for the undocumented HKEx JSON API, and it is not affiliated with or endorsed by HKEx. Commercial redistribution of HKEx data may require a licensed HKEx feed; see docs/legal.md.
Source: README.md at commit 75b7d61
Gateway Info
Report this live gateway's version, transport, and hard limits. Reads nothing.
Takes no parameters.
Search HKEx Filings
Search live HKEx filings in a date window (at most 31 days). ``from_date``/``to_date`` accept YYYY-MM-DD or DD/MM/YYYY. All filters are optional and combine with AND semantics: ``stock_code`` matches exactly (e.g. ``01461`` or ``1461``); ``title_query``, ``category`` and ``stock_name`` are case-insensitive substrings (e.g. category ``Dividend``); ``document_type`` matches the file type exactly (e.g. ``PDF`` or ``HTML``). Filters are applied to the fetched window, so widen ``max_results`` to catch rarer matches. ``max_results`` caps the number of filings fetched and returned (hard cap 200). Returns the matching filings — each carrying ``fileType``, ``sizeText``, ``category`` and ``newsId`` metadata — plus the HKEx-reported total for the window. Use list_filing_facets first to see which categories, types and codes exist in a window.
to_daterequiredcategoryfrom_daterequiredstock_codestock_namemax_resultstitle_querydocument_typeBrowse Filing Facets
Browse what filings exist in a date window (at most 31 days) without downloading. ``from_date``/``to_date`` accept YYYY-MM-DD or DD/MM/YYYY. Returns counts of the categories (headline categories), document types, and stock codes present in the window, each sorted by frequency and capped at 50 values, plus the distinct counts. Optionally narrow to one ``stock_code``. Use this to discover valid filter values before calling search_filings; it fetches the window once and extracts no document text.
to_daterequiredfrom_daterequiredstock_codemax_resultsRead HKEx Filing
Download one HKEx document by its URL and read, page through, or search its text. ``link`` must be an HKEx document URL from search_filings (host ``www1.hkexnews.hk``); any other host is rejected. With ``extract=True`` (default) the response includes up to 30 ``tables`` and a window of extracted ``document_text``: ``max_chars`` characters starting at ``offset``. Long reports return ``next_offset``; call again with it to read the next window. Pass ``query`` to search the whole document instead: the response then lists up to 20 case-insensitive matches with their offsets and surrounding text, plus ``match_count`` — use a match offset to read that part. Set ``extract=False`` for size and content type only.
linkrequiredqueryoffsetextractmax_chars100% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

com.ascent-partnersOfficial publisher
An open MCP server for running COSO internal-control reviews, from scoping and risk assessment through sampling, testing, workpapers and deficiency reporting.

com.ascent-partnersOfficial publisher
Computes startup valuations: 14 tools covering 80+ pre-revenue, industry and equity formulas, run locally or as a hosted endpoint.
com.ascent-partnersOfficial publisher
Computes intangible asset valuations — IP, technology, goodwill, PPA and impairment — through 14 tools covering 124+ textbook formulas.
com.ascent-partnersOfficial publisher
Financial valuation MCP server with 14 calculate_* tools covering DCF, WACC, options, credit risk, actuarial and structured products, with IFRS/IVS citations.
com.ascent-partners
A spec-driven development MCP server that guides an assistant through eight phases, from project constitution to validated, traceable specs and tasks.
https://hkex-listco-updates.ascent-partners.com/api/mcp{ "$schema": "https://opencode.ai/config.json", "mcp": { "hkex-live": { "type": "remote", "url": "https://hkex-listco-updates.ascent-partners.com/api/mcp" } }}Use hkex-live to list the filings published between 2026-09-01 and 2026-09-18,then summarise the interim report.pip install hkex-filing-scraper # core; SQLite needs no serverpip install "hkex-filing-scraper[all]" # Excel + dotenv + every driver + the MCP servercp .env.example .env # then set DATABASE_TARGET (below)hkex-scraper --metadata-only --limit 100DATABASE_TARGET=sqliteSQLITE_PATH=hkex.db# Order sets read precedence.DATABASE_TARGET=postgres,sqlitePOSTGRES_DSN=postgresql://user:password@localhost:5432/hkexSQLITE_PATH=hkex.dbflowchart 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 --> CsequenceDiagram autonumber participant C as hkex-scraper participant J as HKEx site (JSF) participant A as HKEx JSON servlet C->>J: GET /search/titlesearch.xhtml J-->>C: HTML + javax.faces.ViewState C->>J: POST form (from/to dates + ViewState) C->>A: GET /search/titleSearchServlet.do (rowRange paging) A-->>C: JSON page of filings Note over C: generate_monthly_chunks() splits ranges > 1 month C->>C: dedupe on 16-char MD5 filingIderDiagram COMPANY ||--o{ EXCHANGE_FILING : has_filing EXCHANGE_FILING ||--o{ DOCUMENT : has_document EXCHANGE_FILING ||--o{ EXCHANGE_FILING : references_filing EXCHANGE_FILING ||--o{ SCRAPE_COVERAGE : chunk_of EXCHANGE_FILING { string filingId "16-char MD5" string stockCode string title datetime dateTime } DOCUMENT { text documentText array documentTables } SCRAPE_COVERAGE { int apiCount int ingestedCount int uniqueCount string runId }flowchart LR CANON["canonical record<br/>per filing / document / coverage / edge"] --> DISPATCH["dispatch to every configured sink"] DISPATCH --> S1["sink A"] DISPATCH --> S2["sink B"] DISPATCH --> SN["sink N"] S1 -.->|error| LOG["logged + counted<br/>never blocks the others"] READ["reads: pending filings · tickers · titles · coverage"] --> FIRST["first configured sink<br/>whose capabilities include reads"] DISPATCH --> EXIT["sink_exit_code()<br/>non-zero if any sink failed"]pip install -e ".[dev,all]"ruff check # lint (py310, line-length 100)ruff format --check # formattingpytest # unit tests (no DB or network required)use library /simonmak-ascent/hkex-filing-scraper for API and docs