Skip to main content
Glama
agentladle

mcp-hkexnews

by agentladle

AgentLadle MCP HKEXnews

English | 中文

🇨🇳/🇭🇰 A주 및 홍콩 상장 기업(최근 3년 연차 보고서 및 최신 중간 보고서)용 클라우드 호스팅 MCP. 자세히 보기 | API 키 발급

HKEXnews에서 홍콩 상장 기업 공시를 검색, 다운로드, 파싱, 검색할 수 있는 도구를 제공하는 MCP(Model Context Protocol) 서버입니다.

AI 어시스턴트(Claude, Cursor 등)가 6가지 구조화된 도구를 통해 HKEXnews 공시 데이터에 접근할 수 있게 해줍니다 — 공시 검색부터 페이지 내 키워드 검색까지.

범위 (v0.1): 전체 정기 보고서 PDF(t1=40000 하위의 연차 / 중간 / 분기 보고서 및 ESG 보고서)를 제외한 공시 및 정보 공개. 실적 공시(연간 / 중간 / 분기 실적)는 포함됩니다.

주요 기능

  • HKEXnews 공시 데이터용 6가지 MCP 도구: 상태 기반 검색(직접 검색, 필요할 때만 다운로드/파싱으로 폴백)

  • PyMuPDF 기반 PDF 문서 파싱 — 물리적 페이지를 페이지별 JSON으로 추출

  • TF + 위치 가중치 점수를 사용한 로컬 키워드 검색, 외부 검색 의존성 없음

  • 멱등성 — 이미 다운로드/파싱된 파일은 자동으로 건너뜀

  • 제로 구성 설치 — MCP 클라이언트에 한 줄만 추가하면 되며, 클론이나 수동 설정 불필요

  • 순수 Python, 크로스 플랫폼(Windows / macOS / Linux)

Related MCP server: sfc-data-mcp

사전 요구 사항

참고: 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

list_hkexnews_announcements

기업의 사용 가능한 HKEXnews 공시 검색

2

download_hkexnews_announcement

공시 PDF 다운로드(HTML 폴백); 멱등성

3

parse_hkexnews_announcement

PyMuPDF를 사용하여 PDF/HTML을 페이지별 JSON으로 파싱

4

keyword_search

TF 관련성 점수를 사용한 전문 키워드 검색

5

get_announcement_pages

페이지 번호 범위로 공시 내용 읽기

6

lookup_stock_code

진단: 해석 실패 시 stock_code→stockId 매핑 조회

도구 1: list_hkexnews_announcements

기업의 사용 가능한 HKEXnews 공시를 나열합니다. 사용자가 정확한 날짜/제목을 지정하지 않은 경우, 또는 모호한 일치로 다운로드 시도가 실패한 경우에만 이 도구를 사용하세요. 전체 정기 보고서 PDF(t1=40000 하위의 연차 / 중간 / 분기 보고서 및 ESG 보고서)는 제외됩니다.

매개변수

유형

필수

설명

stock_code

string

✅

5자리 홍콩 주식 코드, 예: "00700"

category

string

❌

HKEX t1/t2 코드 또는 등급 이름, 예: "Inside Information", "13500", "20000". 생략 시 범위 내 모든 카테고리 나열

start_date

string

❌

시작 날짜 YYYY-MM-DD

end_date

string

❌

종료 날짜 YYYY-MM-DD

title_keyword

string

❌

제목 키워드 필터

limit

int

❌

반환할 최대 공시 수, 기본 10, 최대 50

도구 2: download_hkexnews_announcement

www1.hkexnews.hk에서 특정 HKEXnews 공시를 다운로드합니다. 가능하면 list_hkexnews_announcements의 local_key를 우선 사용하세요. 멱등성.

매개변수

유형

필수

설명

stock_code

string

✅

5자리 홍콩 주식 코드, 예: "00700"

release_date

string

❌

공시 날짜 YYYY-MM-DD (local_key 제공 시 선택 사항)

title_keyword

string

❌

같은 날짜의 공시를 구분하기 위한 제목 부분 문자열

category

string

❌

선택적 카테고리 필터

news_id

string

❌

알고 있는 경우 HKEXnews NEWS_ID

local_key

string

❌

목록 결과의 정확한 로컬 번들 키

도구 3: parse_hkexnews_announcement

다운로드한 공시 PDF/HTML을 페이지별 JSON으로 파싱합니다. PDF 물리적 페이지 텍스트 추출에 PyMuPDF를 사용합니다.

매개변수

유형

필수

설명

local_key

string

✅

목록/다운로드에서 반환된 번들 키, 예: "00700_13500_2026-03-15_a1b2c3d4"

도구 4: keyword_search

모든 페이지에 대한 전문 키워드 검색. 결과는 TF + 위치 가중치 점수로 순위가 매겨집니다.

매개변수

유형

필수

설명

local_key

string

✅

번들 키

keywords

string[]

✅

1–5개 검색 키워드

match_mode

string

❌

"ANY" (기본값, 키워드 중 하나라도 일치) / "ALL" (모두 일치해야 함)

max_results

int

❌

반환할 최대 결과 수, 기본 5, 최대 50

도구 5: get_announcement_pages

페이지 번호 범위로 전체 페이지 내용을 읽습니다.

매개변수

유형

필수

설명

local_key

string

✅

번들 키

start_page

int

✅

시작 페이지 번호(1부터 시작)

page_count

int

❌

반환할 페이지 수, 기본 3, 최대 5

도구 6: lookup_stock_code

진단 도구: stock_code→stockId 매핑을 조회합니다. download_hkexnews_announcement / list_hkexnews_announcements가 Stock code not found를 반환할 때만 사용하세요. 세션의 실패 코드 캐시를 우회합니다.

매개변수

유형

필수

설명

stock_code

string

✅

5자리 홍콩 주식 코드, 예: "00700"

refresh

bool

❌

HKEX 기업 매핑 강제 재다운로드 (기본값: false)

구성

첫 실행 시 ~/.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 프레임워크

mcp (FastMCP)

stdio 전송을 사용하는 MCP 서버

HTTP 클라이언트

httpx

HKEXnews API 요청 및 파일 다운로드

PDF 파싱

pymupdf + beautifulsoup4

PDF 페이지 텍스트 추출; HTML 폴백

검색

Python 내장

TF + 위치 가중치 점수

구성

pyyaml

YAML 구성 파일

증권 목록

openpyxl

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 tools
download_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

ParametersJSON Schema
NameRequiredDescriptionDefault
news_idNo
categoryNo
local_keyNo
stock_codeYes
release_dateNo
title_keywordNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
local_keyYes
page_countNo
start_pageYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
categoryNo
end_dateNo
start_dateNo
stock_codeYes
title_keywordNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNo
stock_codeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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"

ParametersJSON Schema
NameRequiredDescriptionDefault
local_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 6 tool updatesv0.1.0
    • First observeddownload_hkexnews_announcement
    • First observedget_announcement_pages
    • First observedkeyword_search
    • First observedlist_hkexnews_announcements
    • First observedlookup_stock_code
    • First observedparse_hkexnews_announcement

TDQS

A4.7/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a distinct purpose: downloading, parsing, searching, listing, looking up stock codes, and retrieving pages. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case (e.g., download_hkexnews_announcement, list_hkexnews_announcements).

Tool Count5/5

6 tools is an appropriate number for the domain, covering the core workflows without being excessive or insufficient.

Completeness5/5

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

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for Japan's TDnet (Timely Disclosure network). Search and retrieve timely disclosure documents from listed companies on Japanese stock exchanges.
    94 PyPI
    6
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP 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.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server for analyzing SEC filings (10-K, 10-Q, 8-K) with industry-aware financial extraction and BERT-based NLP.
    1
    MIT