mcp-hkexnews
AgentLadle MCP HKEXnews
英語 | 中文
🇨🇳/🇭🇰 クラウドホスト型MCP。A株・香港上場企業(過去3年間の年次報告書および最新の中間報告書)に対応。詳細 | APIキーを取得
HKEXnewsの香港上場企業の公告を検索・ダウンロード・解析・全文検索するためのツールを提供するMCP (Model Context Protocol)サーバーです。
AIアシスタント(Claude、Cursorなど)が、6つの構造化されたツールを通じてHKEXnewsの公告データにアクセスできるようにします。公告の検出からページ内のキーワード検索まで対応します。
対象範囲 (v0.1): 完全な定期報告書PDF(
t1=40000に該当する年次報告書/中間報告書/四半期報告書およびESG報告書)を除く公告および開示情報。業績公告(最終/中間/四半期業績)は含まれます。
機能
6つのMCPツールでHKEXnewsの公告データにアクセス:状態駆動型の取得(直接検索し、必要な場合のみダウンロード/解析にフォールバック)
PyMuPDFによるPDF文書解析 — 物理ページをページ分割JSONとして抽出
TF+位置ブーストスコアリングによるローカルキーワード検索。外部検索依存ゼロ
冪等性 — ダウンロード済み/解析済みファイルは自動的にスキップ
設定不要のインストール — MCPクライアントに1行追加するだけで、クローンや手動設定は不要
純Python、クロスプラットフォーム(Windows / macOS / Linux)
Related MCP server: sfc-data-mcp
前提条件
Python 3.10+ — Pythonをダウンロード
uv — uvをインストール
注: uvをインストールした後、ターミナルとMCPクライアント(例: Cherry Studio)を再起動して、
uvコマンドが認識されるようにしてください。
クイックスタート
MCPクライアント設定(Claude Desktop、Cursorなど)に追加します:
{
"mcpServers": {
"mcp-hkexnews": {
"command": "uvx",
"args": ["agentladle-mcp-hkexnews"]
}
}
}これだけです。uvxがPyPIからパッケージとその依存関係を自動的にダウンロードします。クローンも手動インストールもパス設定も不要です。
代替: pipインストール
環境を自分で管理したい場合は:
pip install agentladle-mcp-hkexnewsその後、以下のように設定します:
{
"mcpServers": {
"mcp-hkexnews": {
"command": "agentladle-mcp-hkexnews"
}
}
}代替: ソースから実行(ローカル開発)
リポジトリをクローンして直接実行します:
git clone https://github.com/agentladle/mcp-hkexnews.gitその後、MCPクライアントを設定します:
{
"mcpServers": {
"mcp-hkexnews": {
"command": "uv",
"args": ["run", "--directory", "/path/to/mcp-hkexnews", "agentladle-mcp-hkexnews"]
}
}
}/path/to/mcp-hkexnews をクローンしたリポジトリの実際のパスに置き換えてください。
データフロー
HKEXnews API Local Files (~/.agentladle/mcp-hkexnews/data/)
────────────── ──────────────────────────────
activestock_sehk_e.json ──→ companies.json (stock_code→stockId mapping)
ListOfSecurities.xlsx ──→ │
tierone/tiertwo JSON ──→ tiers.json (headline category mapping)
│
titleSearchServlet.do ──→ pdf/{LOCAL_KEY}/ (Tool 2: primary PDF/HTML + manifest)
│
PyMuPDF parsing ──→ json/*.json (Tool 3: parse, page-split)
│
Local TF search ──→ search results (Tool 4: keyword search)
Page range read ──→ page content (Tool 5: read pages)ツール
# | ツール | 説明 |
1 |
| 企業の利用可能なHKEXnews公告を発見 |
2 |
| 公告PDFをダウンロード(HTMLフォールバック付き)。冪等 |
3 |
| PyMuPDFを使用してPDF/HTMLをページ分割JSONに解析 |
4 |
| TF関連性スコアリングによる全文キーワード検索 |
5 |
| ページ番号範囲で公告コンテンツを読み取り |
6 |
| 診断用: 解決失敗時に stock_code→stockId マッピングを調べる |
ツール1: list_hkexnews_announcements
企業の利用可能なHKEXnews公告を一覧表示します。ユーザーが正確な日付/タイトルを指定していない場合、またはあいまいな一致によりダウンロード試行が失敗した場合にのみ、このツールを使用してください。完全な定期報告書PDF(t1=40000 に該当する年次/中間/四半期報告書およびESG報告書)は除外されます。
パラメータ | 型 | 必須 | 説明 |
| string | ✅ | 5桁の香港株式コード、例: |
| string | ❌ | HKEXのt1/t2コードまたは階層名、例: |
| string | ❌ | 開始日 |
| string | ❌ | 終了日 |
| string | ❌ | タイトルのキーワードフィルター |
| int | ❌ | 返す最大公告数、デフォルト10、最大50 |
ツール2: download_hkexnews_announcement
www1.hkexnews.hkから特定のHKEXnews公告をダウンロードします。利用可能な場合は list_hkexnews_announcements の local_key を優先してください。冪等です。
パラメータ | 型 | 必須 | 説明 |
| string | ✅ | 5桁の香港株式コード、例: |
| string | ❌ | 発行日 |
| string | ❌ | 同日の公告を曖昧性排除するためのタイトル部分文字列 |
| string | ❌ | 任意のカテゴリーフィルター |
| string | ❌ | 既知の場合のHKEXnews NEWS_ID |
| string | ❌ | 一覧結果の正確なローカルバンドルキー |
ツール3: parse_hkexnews_announcement
ダウンロードした公告PDF/HTMLをページ分割JSONに解析します。PDFの物理ページテキスト抽出にはPyMuPDFを使用します。
パラメータ | 型 | 必須 | 説明 |
| string | ✅ | 一覧/ダウンロードで返されたバンドルキー、例: |
ツール4: keyword_search
全ページにわたる全文キーワード検索。結果はTF+位置ブーストスコアでランク付けされます。
パラメータ | 型 | 必須 | 説明 |
| string | ✅ | バンドルキー |
| string[] | ✅ | 1〜5個の検索キーワード |
| string | ❌ |
|
| int | ❌ | 返す最大結果数、デフォルト5、最大50 |
ツール5: get_announcement_pages
ページ番号範囲で完全なページコンテンツを読み取ります。
パラメータ | 型 | 必須 | 説明 |
| string | ✅ | バンドルキー |
| int | ✅ | 開始ページ番号(1始まり) |
| int | ❌ | 返すページ数、デフォルト3、最大5 |
ツール6: lookup_stock_code
診断ツール: stock_code→stockIdマッピングを調べます。download_hkexnews_announcement / list_hkexnews_announcements が Stock code not found を返した場合にのみ使用してください。セッションの失敗コードキャッシュをバイパスします。
パラメータ | 型 | 必須 | 説明 |
| string | ✅ | 5桁の香港株式コード、例: |
| bool | ❌ | HKEX企業マッピングの再ダウンロードを強制(デフォルト: |
設定
初回実行時に、デフォルト設定ファイルが ~/.agentladle/mcp-hkexnews/config.yaml に作成されます:
paths:
data_dir: "~/.agentladle/mcp-hkexnews/data"
pdf_dir: "~/.agentladle/mcp-hkexnews/data/pdf"
json_dir: "~/.agentladle/mcp-hkexnews/data/json"
download:
delay_between_requests: 0.3
min_file_size: 500
list_row_range: 100
list_max_pages: 5
company:
cache_ttl_days: 7
tiers:
cache_ttl_days: 7データディレクトリ構造
~/.agentladle/mcp-hkexnews/
├── config.yaml # Configuration (auto-created)
└── data/
├── companies.json # stock_code→stockId mapping (auto-downloaded & cached)
├── tiers.json # HKEX headline category mapping (auto-downloaded & cached)
├── pdf/ # Downloaded announcement bundles
│ ├── 00700_13500_2026-03-15_a1b2c3d4/
│ │ ├── primary.pdf
│ │ └── manifest.json
│ └── ...
└── json/ # Parsed page-split JSON
├── 00700_13500_2026-03-15_a1b2c3d4.json
└── ...ファイル命名規則: {STOCK_CODE}_{T2_CODE}_{RELEASE_DATE}_{ID_HASH}
使用例
ツールは**EAFP(Easier to Ask for Forgiveness than Permission、許可を求めるより許しを請う方が易しい)**アプローチで設計されています。AIアシスタントは直接データの取得を試み、エラーに依存してダウンロードをトリガーする必要があります。
シナリオA: ファイルがローカルに既に存在する(最短経路)
User: "Search 00700 inside information for buyback"
1. keyword_search(local_key="00700_50100_2026-07-09_a1b2c3d4", keywords=["buyback", "repurchase"])
→ Returns page snippets matching the keywords immediately.シナリオB: ファイルが存在しない(フォールバックがトリガー)
User: "What did Tencent announce in its latest inside information?"
1. list_hkexnews_announcements(stock_code="00700", category="Inside Information", limit=3)
→ Returns local_key / release_date / title.
2. keyword_search(local_key="...", keywords=["inside information"])
→ Error: File not found.
3. download_hkexnews_announcement(stock_code="00700", local_key="...")
→ Downloads PDF to ~/.agentladle/mcp-hkexnews/data/pdf/
4. parse_hkexnews_announcement(local_key="...")
→ Parses into JSON.
5. keyword_search(local_key="...", keywords=["inside information"])
→ Retries search and returns data.技術スタック
コンポーネント | 選択 | 目的 |
MCPフレームワーク |
| stdioトランスポートを使用するMCPサーバー |
HTTPクライアント |
| HKEXnews APIリクエストおよびファイルダウンロード |
PDF解析 |
| PDFページテキスト抽出; HTMLフォールバック |
検索 | Python組み込み | TF+位置ブーストスコアリング |
設定 |
| YAML設定ファイル |
証券リスト |
| HKEX ListOfSecurities.xlsx の解析 |
プロジェクト構造
src/mcp_hkexnews/
├── __init__.py
├── server.py # MCP Server entry point
├── config.py # Config loading (~/.agentladle/mcp-hkexnews/config.yaml, singleton cached)
├── models.py # Data models
├── categories.py # Announcement category blacklist
├── response.py # Unified JSON responses
├── instances.py # Service singletons
├── tools/
│ ├── list_announcements.py # Tool 1: list_hkexnews_announcements
│ ├── download.py # Tool 2: download_hkexnews_announcement
│ ├── parse.py # Tool 3: parse_hkexnews_announcement
│ ├── search.py # Tool 4: keyword_search
│ ├── page.py # Tool 5: get_announcement_pages
│ └── lookup.py # Tool 6: lookup_stock_code
└── services/
├── company.py # HKEX activestock + ListOfSecurities + stock_code→stockId
├── tiers.py # HKEX tierone/tiertwo category cache
├── downloader.py # HKEXnews titleSearch + PDF download
├── parser.py # PDF/HTML→JSON parsing (PyMuPDF)
├── searcher.py # Local JSON search + TF scoring
└── keys.py # local_key helpersライセンス
MIT
Available Tools
6 toolsdownload_hkexnews_announcementA
Download an HKEXnews announcement PDF (or HTML fallback) to local storage.
Args: stock_code: 5-digit HK stock code release_date: YYYY-MM-DD (optional if local_key provided) title_keyword: Title substring to disambiguate same-day announcements category: Optional category filter news_id: HKEXnews NEWS_ID if known local_key: Exact local bundle key from list results
| Name | Required | Description | Default |
|---|---|---|---|
| news_id | No | ||
| category | No | ||
| local_key | No | ||
| stock_code | Yes | ||
| release_date | No | ||
| title_keyword | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the download action, parameters, and fallback behavior. However, it does not describe return values, error handling, or side effects beyond what is implied. Still, it provides substantial behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a strategy block and critical rules, ensuring important information is front-loaded. It is slightly verbose but every section adds value, earning a high score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, sibling tools), the description covers usage strategy, parameter rules, and post-call action. It lacks explicit return value details but references output schema and next steps, making it fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the text description's Args section explains each parameter: stock_code (5-digit HK stock code), release_date (YYYY-MM-DD), title_keyword (Title substring), category (optional filter), news_id (HKEXnews NEWS_ID), local_key (Exact local bundle key). This adds meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it downloads an HKEXnews announcement PDF (or HTML fallback) to local storage. It uses specific verbs ('Download') and resources ('announcement PDF'), and the context distinguishes it from sibling tools like list_hkexnews_announcements and parse_hkexnews_announcement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Invoke ONLY as a fallback when keyword_search / get_announcement_pages returns file not found'. It also includes critical rules like preferring local_key and specifying out-of-scope reports, giving clear usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_announcement_pagesA
Retrieve full page content for a range of pages from a parsed announcement.
Args: local_key: Bundle key start_page: 1-based start page page_count: Number of pages, default 3, max 5
| Name | Required | Description | Default |
|---|---|---|---|
| local_key | Yes | ||
| page_count | No | ||
| start_page | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It mentions that `page_count` defaults to 3 and max 5, and that `start_page` is 1-based. However, it does not disclose behaviors like what happens on invalid parameters, error handling, or the structure of the returned page content. The instruction 'Do not pre-check file existence' hints at potential failure but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a main sentence, followed by a clear strategy section, critical rules, and an args list. It is concise (few lines) and front-loaded, with every sentence providing useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (as indicated by context signals), the description does not need to detail return values. However, it lacks information on edge cases (e.g., page out of range) and the implication of 'Do not pre-check file existence' suggests potential failure scenarios that are not elaborated. Overall, it is mostly complete for the tool's moderate complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning. It explains each parameter: `local_key` as 'Bundle key', `start_page` as '1-based start page', and `page_count` with its default and max. This adds value beyond the schema's property titles, though it assumes knowledge of what a 'bundle key' is.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear, specific verb+resource: 'Retrieve full page content for a range of pages from a parsed announcement.' This distinguishes the tool from siblings like `keyword_search` or `download_hkexnews_announcement` which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a dedicated <strategy> section that explicitly states when to use this tool ('Directly invoke after keyword_search provides a start_page') and what not to do ('Do not pre-check file existence'). The <critical_rules> further clarifies that `page_count` has a default and max, and prefers using `keyword_search` for facts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_searchA
Search a parsed announcement by keywords. Results sorted by relevance.
Args: local_key: Bundle key from list/download keywords: 1-5 search keywords match_mode: "ANY" or "ALL", default ANY max_results: Max snippets, default 5, max 50
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | Yes | ||
| local_key | Yes | ||
| match_mode | No | ANY | |
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses search behavior, relevance sorting, and that missing files trigger download/parse. Does not explicitly state read-only nature, but it's clearly a query operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections (strategy, critical rules, args). Front-loaded with purpose. Slight redundancy: '1-5 keywords' appears in both rules and param description. Still efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values aren't needed. Covers when to use, parameters, and behavior. Could mention that search is within a specific parsed announcement identified by local_key, but context is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but description adds full meaning: local_key as bundle key, keywords as 1-5 items (not sentences), match_mode default ANY, max_results default 5 max 50. Critical rules further clarify keyword usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it searches a parsed announcement by keywords and returns results sorted by relevance. Distinguishes from sibling tools by focusing on search within an already-parsed announcement, as opposed to downloading, listing, or parsing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit strategic guidance: directly invoke, do not pre-check file existence, prefer Chinese/English terms. Also gives critical rules on keyword count (1-5) and synonym expansion, and defaults for parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_hkexnews_announcementsA
List available HKEXnews announcements for a company (excludes full periodic report PDFs).
Args: stock_code: 5-digit HK stock code, e.g. "00700" category: Optional HKEX t1/t2 code or tier name (e.g. "Inside Information", "13500") start_date: YYYY-MM-DD inclusive end_date: YYYY-MM-DD inclusive title_keyword: Optional title search keyword limit: Max announcements to return, default 10, max 50
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| category | No | ||
| end_date | No | ||
| start_date | No | ||
| stock_code | Yes | ||
| title_keyword | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses exclusion of periodic report PDFs (t1=40000), inclusion of performance announcements, and limit max 50. Does not mention auth, rate limits, or error handling, but for a list operation the disclosure is fairly comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Highly concise with structured sections (intro, strategy, critical rules, args). Every sentence adds value. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, no annotations, and an output schema exists, the description provides sufficient context: explains when to use, what is excluded/included, and parameter details. Complete for an AI agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. Provides detailed parameter descriptions with examples (e.g., '00700', 'Inside Information'), format YYYY-MM-DD, defaults, and max limit. Adds significant meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'List available HKEXnews announcements for a company' with specific verb and resource, and crucially excludes full periodic report PDFs, distinguishing it from general listing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Contains explicit strategy section: use for discovering metadata before download; skip if user provides specific date/title and instead use keyword_search or download_hkexnews_announcement. Provides clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_stock_codeA
Look up HKEXnews stockId mapping for a Hong Kong stock code. Diagnostic tool.
Args: stock_code: 5-digit HK stock code, e.g. "00700" or "700" refresh: Force re-download of company mappings (default: false)
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | ||
| stock_code | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses caching behavior, re-download option, and strategic use. However, it does not explicitly state that it is a read-only operation, though 'diagnostic tool' implies safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections for purpose, strategy, critical rules, and args. Every sentence adds value, no fluff. Front-loaded with core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-param diagnostic tool with an output schema, the description covers usage context, prerequisites, and behavior. It tells the agent exactly when and how to use it, which is complete for effective invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description adds full meaning: stock_code is a 5-digit HK stock code with examples, refresh is a boolean defaulting to false that forces re-download of mappings. Both parameters are adequately explained beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it looks up stockId mapping for a Hong Kong stock code, using specific verb 'look up' and resource 'HKEXnews stockId mapping'. It is distinctly a diagnostic tool, differentiating it from siblings like download or list announcements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Invoke ONLY when download/list returns Stock code not found' and provides a strategy to retry after success. Also gives a critical rule to prefer refresh=false first, offering clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_hkexnews_announcementA
Parse a downloaded announcement PDF/HTML into page-split JSON.
Args: local_key: Bundle key returned by list/download, e.g. "00700_13500_2026-03-15_a1b2c3d4"
| Name | Required | Description | Default |
|---|---|---|---|
| local_key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It mentions the output format (page-split JSON) but does not disclose side effects, idempotency, or behavior on invalid keys. For a parse operation, it is likely safe, but the description could add more context about what happens if the local_key is invalid or the file is corrupted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and well-structured: a purpose sentence followed by a usage <strategy> block. Every sentence adds value, and the strategy section is front-loaded. No redundant or irrelevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has one parameter and an output schema exists, the description provides essential information: purpose, usage timing, and parameter meaning. It covers the main use case but could be more thorough on error handling or output structure details, though the output schema likely handles the latter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the tool description carries the burden. It explains local_key as 'Bundle key returned by list/download' and gives an example format. This adds significant meaning beyond the schema's minimal title, clarifying the source and structure. However, it doesn't specify constraints like length or character set.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it parses a downloaded announcement PDF/HTML into page-split JSON. The verb 'parse' and resource 'downloaded announcement' are specific, and the output format is given. It distinguishes from siblings like download_hkexnews_announcement (downloads) and get_announcement_pages (retrieves pages).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes a <strategy> section that explicitly states when to use: 'Call immediately after a successful download_hkexnews_announcement, or when a retrieval tool says the PDF exists but JSON is missing.' This provides clear context and a specific alternative trigger, setting expectation for the proper invocation order.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v0.1.0- First observed
download_hkexnews_announcement - First observed
get_announcement_pages - First observed
keyword_search - First observed
list_hkexnews_announcements - First observed
lookup_stock_code - First observed
parse_hkexnews_announcement
TDQS
Scored across 6 tools
Each tool has a distinct purpose: downloading, parsing, searching, listing, looking up stock codes, and retrieving pages. No overlap or ambiguity.
All tool names follow a consistent verb_noun pattern with snake_case (e.g., download_hkexnews_announcement, list_hkexnews_announcements).
6 tools is an appropriate number for the domain, covering the core workflows without being excessive or insufficient.
The tool surface covers the full lifecycle: listing, downloading, parsing, searching, and retrieving pages. No obvious gaps for the read-only nature of HKEX announcements.
Maintenance
Related MCP Connectors
MCP server for stocksense-ai documentation, generated by doc2mcp.
MCP server giving AI agents one-connection access to China A-share market intelligence: financials,
MCP server for 500+ pay-per-call web scraping, search, social, business, and financial data tools.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server for Japan's TDnet (Timely Disclosure network). Search and retrieve timely disclosure documents from listed companies on Japanese stock exchanges.94 PyPI6Apache 2.0
- FlicenseNot gradedqualityDmaintenanceMCP server that wraps SFC financial data API into 32 tools for comprehensive A-share market data, including real-time quotes, rankings, limit-up statistics, news, themes, financials, charts, research reports, and watchlists.-
- AlicenseNot gradedqualityBmaintenanceMCP server for analyzing SEC filings (10-K, 10-Q, 8-K) with industry-aware financial extraction and BERT-based NLP.1MIT
- FlicenseNot gradedqualityDmaintenanceMCP server that searches and filters DART electronic disclosures for Korean companies, enabling AI agents to create investor briefing summaries.-