AgentLadle MCP CNINFO
AgentLadle MCP CNINFO
英文 | 中文
这是一个 MCP (Model Context Protocol) 服务器,提供用于发现、下载、解析和搜索来自 CNINFO(巨潮资讯网) 的中国A股公告的工具。
它使AI助手(如Claude、Cursor等)能够通过6个结构化工具访问CNINFO公告数据——从发现可用公告到在其页面内进行关键词搜索。
范围(v0.1): 仅限公告。定期报告(年报 / 半年报 / 一季报 / 三季报)不在范围内。
功能
6个MCP工具 用于CNINFO公告数据:状态驱动检索(直接搜索,仅在需要时回退到下载/解析)
PDF文档解析 使用 PyMuPDF — 将物理页面提取为按页拆分的JSON
本地关键词搜索 采用TF + 位置加权评分,零外部搜索依赖
幂等性 — 已下载/已解析的文件会自动跳过
零配置安装 — 只需在MCP客户端中添加一行,无需克隆或手动设置
纯Python,跨平台(Windows / macOS / Linux)
Related MCP server: Chinese Stock MCP
前提条件
注意: 安装 uv 后,请重启终端和 MCP 客户端(例如 Cherry Studio),以确保
uv命令被识别。
快速开始
添加到你的 MCP 客户端配置(Claude Desktop、Cursor 等)中:
{
"mcpServers": {
"mcp-cninfo": {
"command": "uvx",
"args": ["agentladle-mcp-cninfo"]
}
}
}就这样。uvx 会自动从 PyPI 下载该包及其依赖——无需克隆、无需手动安装、无需路径配置。
备选方案:pip 安装
如果你更愿意自行管理环境:
pip install agentladle-mcp-cninfo然后配置:
{
"mcpServers": {
"mcp-cninfo": {
"command": "agentladle-mcp-cninfo"
}
}
}备选方案:从源码运行(本地开发)
克隆仓库并直接运行:
git clone https://github.com/agentladle/mcp-cninfo.git然后配置你的 MCP 客户端:
{
"mcpServers": {
"mcp-cninfo": {
"command": "uv",
"args": ["run", "--directory", "/path/to/mcp-cninfo", "agentladle-mcp-cninfo"]
}
}
}将 /path/to/mcp-cninfo 替换为克隆仓库的实际路径。
数据流
CNINFO API Local Files (~/.agentladle/mcp-cninfo/data/)
────────────── ──────────────────────────────
szse_stock.json ──→ companies.json (stock_code→orgId mapping)
│
hisAnnouncement/query ──→ 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 |
| 发现公司可用的 CNINFO 公告 |
2 |
| 下载公告 PDF(HTML 回退);幂等 |
3 |
| 使用 PyMuPDF 将 PDF/HTML 解析为按页拆分的 JSON |
4 |
| 使用 TF 相关性评分的全文关键词搜索 |
5 |
| 按页码范围读取公告内容 |
6 |
| 诊断:在解析失败时查找 stock_code→orgId 映射 |
工具1:list_cninfo_announcements
列出某家公司可用的 CNINFO 公告。仅在用户未指定确切日期/标题,或下载尝试因匹配不明确而失败时,才使用此工具。默认类别排除定期报告(年报 / 半年报 / 一季报 / 三季报)。
参数 | 类型 | 必填 | 描述 |
| string | ✅ | 6位股票代码,例如 |
| string | ❌ | 类别键、短代码或中文标签,例如 |
| string | ❌ | 开始日期 |
| string | ❌ | 结束日期 |
| string | ❌ | 标题关键词过滤 |
| int | ❌ | 返回的最大公告数,默认10,最大50 |
工具2:download_cninfo_announcement
从 static.cninfo.com.cn 下载特定的 CNINFO 公告。如果可用,优先使用 list_cninfo_announcements 返回的 local_key。幂等。
参数 | 类型 | 必填 | 描述 |
| string | ✅ | 6位股票代码,例如 |
| string | ❌ | 公告日期 |
| string | ❌ | 用于区分同日公告的标题子串 |
| string | ❌ | 可选的类别筛选 |
| string | ❌ | 如果已知,CNINFO 公告 id |
| string | ❌ | 来自列表结果的精确本地 bundle 键 |
工具3:parse_cninfo_announcement
将已下载的公告 PDF/HTML 解析为按页拆分的 JSON。使用 PyMuPDF 进行 PDF 物理页面文本提取。
参数 | 类型 | 必填 | 描述 |
| string | ✅ | 由列表/下载返回的 bundle 键,例如 |
工具4:keyword_search
跨所有页面的全文关键词搜索。结果按 TF + 位置加权分数排序。
参数 | 类型 | 必填 | 描述 |
| string | ✅ | bundle 键 |
| string[] | ✅ | 1–5 个搜索关键词 |
| string | ❌ |
|
| int | ❌ | 返回的最大结果数,默认5,最大50 |
工具5:get_announcement_pages
按页码范围读取完整页面内容。
参数 | 类型 | 必填 | 描述 |
| string | ✅ | bundle 键 |
| int | ✅ | 起始页码(从1开始) |
| int | ❌ | 要返回的页数,默认3,最大5 |
工具6:lookup_stock_code
诊断工具:查找 stock_code→orgId 映射。仅在 download_cninfo_announcement / list_cninfo_announcements 返回 Stock code not found 时使用。绕过会话中的失败代码缓存。
参数 | 类型 | 必填 | 描述 |
| string | ✅ | 6位股票代码,例如 |
| bool | ❌ | 强制从 CNINFO 重新下载 |
配置
首次运行时,会在 ~/.agentladle/mcp-cninfo/config.yaml 创建默认配置文件:
paths:
data_dir: "~/.agentladle/mcp-cninfo/data"
pdf_dir: "~/.agentladle/mcp-cninfo/data/pdf"
json_dir: "~/.agentladle/mcp-cninfo/data/json"
download:
delay_between_requests: 0.3
min_file_size: 500
list_page_size: 30
list_max_pages: 5
company:
cache_ttl_days: 7数据目录结构
~/.agentladle/mcp-cninfo/
├── config.yaml # Configuration (auto-created)
└── data/
├── companies.json # stock_code→orgId mapping (auto-downloaded & cached)
├── pdf/ # Downloaded announcement bundles
│ ├── 000001_DSH_2026-07-02_8b1ad607/
│ │ ├── primary.pdf
│ │ └── manifest.json
│ └── ...
└── json/ # Parsed page-split JSON
├── 000001_DSH_2026-07-02_8b1ad607.json
└── ...文件命名约定: {STOCK_CODE}_{CAT_SHORT}_{ANNOUNCE_DATE}_{ID_HASH}
使用示例
这些工具采用 EAFP(Easier to Ask for Forgiveness than Permission,请求宽恕比请求许可更容易) 的设计理念。AI 助手应直接尝试获取数据,并依靠错误来触发下载。
场景A:文件已存在于本地(最短路径)
User: "Search 000001 board resolution for 回购"
1. keyword_search(local_key="000001_DSH_2026-07-02_8b1ad607", keywords=["回购", "决议"])
→ Returns page snippets matching the keywords immediately.场景B:文件缺失(触发回退)
User: "What did Ping An Bank announce in its latest board notice?"
1. list_cninfo_announcements(stock_code="000001", category="董事会", limit=3)
→ Returns local_key / announce_date / title.
2. keyword_search(local_key="...", keywords=["董事会", "决议"])
→ Error: File not found.
3. download_cninfo_announcement(stock_code="000001", local_key="...")
→ Downloads PDF to ~/.agentladle/mcp-cninfo/data/pdf/
4. parse_cninfo_announcement(local_key="...")
→ Parses into JSON.
5. keyword_search(local_key="...", keywords=["董事会", "决议"])
→ Retries search and returns data.技术栈
组件 | 选择 | 用途 |
MCP 框架 |
| 支持 stdio 传输的 MCP 服务器 |
HTTP 客户端 |
| CNINFO API 请求与文件下载 |
PDF 解析 |
| PDF 页面文本提取;HTML 回退 |
搜索 | Python 内置 | TF + 位置加权评分 |
配置 |
| YAML 配置文件 |
项目结构
src/mcp_cninfo/
├── __init__.py
├── server.py # MCP Server entry point
├── config.py # Config loading (~/.agentladle/mcp-cninfo/config.yaml, singleton cached)
├── models.py # Data models
├── categories.py # Announcement category whitelist / blacklist
├── response.py # Unified JSON responses
├── instances.py # Service singletons
├── tools/
│ ├── list_announcements.py # Tool 1: list_cninfo_announcements
│ ├── download.py # Tool 2: download_cninfo_announcement
│ ├── parse.py # Tool 3: parse_cninfo_announcement
│ ├── search.py # Tool 4: keyword_search
│ ├── page.py # Tool 5: get_announcement_pages
│ └── lookup.py # Tool 6: lookup_stock_code
└── services/
├── company.py # CNINFO szse_stock.json + stock_code→orgId
├── downloader.py # CNINFO query + 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_cninfo_announcementA
Download a CNINFO announcement PDF (or HTML fallback) to local storage.
Args: stock_code: 6-digit stock code announce_date: YYYY-MM-DD (optional if local_key provided) title_keyword: Title substring to disambiguate same-day announcements category: Optional category filter announcement_id: CNINFO announcement id if known local_key: Exact local bundle key from list results
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | ||
| local_key | No | ||
| stock_code | Yes | ||
| announce_date | No | ||
| title_keyword | No | ||
| announcement_id | 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 discloses key behaviors: downloads to local storage, may fallback to HTML, and that periodic reports are out of scope. Also directs to call parse_cninfo_announcement after success. Lacks details on file storage location or overwrite behavior, but overall transparent.
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?
Description is well-structured with labeled sections (<strategy>, <critical_rules>, Args). Front-loaded with core purpose. Every sentence contributes value. Slightly long but efficient for the complexity.
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 no annotations and an output schema present, the description covers usage conditions, parameter details, relationship to siblings, and exclusions. It tells the agent when to invoke and what to do after success, making it fully contextualized.
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 compensates by listing each parameter with brief but useful semantics: stock_code is 6-digit, announce_date is YYYY-MM-DD (optional if local_key), title_keyword disambiguates, etc. Adds meaning beyond schema names and types, though not extremely detailed.
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 a CNINFO announcement PDF (or HTML fallback) to local storage. It specifies the resource (CNINFO announcement) and action (download). Distinguishes from siblings by being a fallback tool and having explicit conditions for invocation.
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 states when to use: 'Invoke ONLY as a fallback when keyword_search / get_announcement_pages returns file not found, or after list when you have a concrete local_key / announcement_id.' Also provides critical rules about preferring local_key and that periodic reports are out of scope, giving clear guidance on alternatives.
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?
No annotations provided, so description carries full burden. It adds behavioral context through strategy and critical rules (e.g., default page_count of 3, max 5). However, it does not mention error handling for invalid start_page or missing local_key, nor any authorization or rate limits. Still, the provided rules are helpful and non-contradictory.
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 front-loaded with the core purpose, followed by a strategy section and critical rules. Each sentence adds value without redundancy. The Args section is cleanly organized. Length is appropriate for the tool's complexity.
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 complexity (3 parameters, output schema present), the description covers purpose, usage, and parameters well. It omits error conditions or return format, but the output schema may provide that. Slightly lacking in describing what happens on failure, but overall adequate.
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 description must add meaning. It does: local_key is 'bundle key', start_page is '1-based start page', page_count has default and max. This fully compensates for missing schema descriptions.
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 'Retrieve full page content for a range of pages from a parsed announcement.' This is a specific verb-resource pair, and it distinguishes from sibling tools like keyword_search (for specific facts) and download_cninfo_announcement (whole file).
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 <strategy> explicitly instructs to invoke after keyword_search provides a start_page, and to not pre-check file existence. The <critical_rules> recommend preferring keyword_search for specific facts. This clearly guides when and how to use the tool, including exclusions.
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?
With no annotations, the description bears full burden. It discloses sorting by relevance, match modes, default values, and max results limit. It also hints at error handling (prompt download/parse on missing file) but lacks details on edge cases like zero results.
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 strategy and rules sections. Each sentence adds value. The Args list is clear. The use of HTML-like tags adds structure but could be considered nonstandard; however, it aids readability and does not waste space.
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?
Covers purpose, usage, parameters, and error handling. Given the existence of an output schema, lack of return format description is acceptable. However, it could mention snippet highlighting or result ordering more explicitly.
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%, but the description fully explains all four parameters: local_key ('Bundle key from list/download'), keywords ('1-5 search keywords'), match_mode ('ANY or ALL, default ANY'), and max_results ('Max snippets, default 5, max 50'). This adds critical constraints and context 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 'Search a parsed announcement by keywords' with specific verb and resource. It distinguishes from sibling tools like download, list, parse, etc., by focusing on searching within an already-parsed 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?
Provides explicit strategy: 'Directly invoke this tool. Do not pre-check file existence' and suggests using Chinese financial terms. Critical rules specify passing 1-5 keywords and expanding synonyms. Though it doesn't explicitly state when not to use, the guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cninfo_announcementsA
List available CNINFO A-share announcements for a company (excludes periodic reports).
Args: stock_code: 6-digit stock code, e.g. "000001" category: Optional CNINFO category key, short code, or Chinese label (e.g. "董事会", "DSH", "category_dshgg_szsh") 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. It discloses that default categories exclude periodic reports and limit max is 50, which is good context. Could mention response format or pagination, but adequate.
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: purpose, strategy tag, critical rules, and args. Concise, front-loaded, every sentence valuable.
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?
Covers purpose, usage, parameters, and constraints. Has output schema, so return values are documented elsewhere. Complete for a list tool with clear guidance.
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 provides detailed parameter explanations: stock_code format, category examples, date format, title_keyword, limit defaults and max. Adds significant value 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?
Description clearly states it lists CNINFO A-share announcements (excluding periodic reports), and provides guidance to skip if user already has specific date and title, differentiating from siblings.
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 states when to use (to discover announce_date/local_key/title before download) and when to skip (if user provides specific date and title, go to keyword_search or download_cninfo_announcement).
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 CNINFO orgId mapping for a 6-digit A-share stock code. Diagnostic tool.
Args: stock_code: 6-digit stock code, e.g. "000001" or "600519" refresh: Force re-download of szse_stock.json from CNINFO (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 are provided, so the description must convey behavioral traits. It explains the tool is a diagnostic tool, describes the behavior of the refresh parameter (local cache vs re-download), and implies it is read-only by nature. However, it does not explicitly state that it is non-destructive, but the context suggests it is safe. The description adds sufficient behavioral context beyond the schema.
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 concise and well-structured, with clear sections: main description, strategy, critical rules, and args. Every sentence is useful. It is front-loaded with the core purpose and quickly provides actionable guidance.
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 simplicity (2 parameters, output schema exists), the description covers all necessary aspects: purpose, usage guidelines, parameter details, and behavioral rules. It is complete for an agent to correctly select and invoke the tool.
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 the description provides all parameter semantics. It explains stock_code as '6-digit stock code, e.g. "000001" or "600519"' and refresh as 'Force re-download of szse_stock.json from CNINFO (default: false)'. This adds meaningful examples and behavior beyond the schema's type/title fields.
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 the tool's purpose: 'Look up CNINFO orgId mapping for a 6-digit A-share stock code. Diagnostic tool.' The verb 'look up' and resource 'CNINFO orgId mapping' are specific. It is distinguished from sibling tools (e.g., download_cninfo_announcement) which deal with announcements, not code mappings.
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 explicitly stating when to invoke: 'Invoke ONLY when download/list returns "Stock code not found". After success, retry the original list/download call.' It also provides critical rules about preferring refresh=false first. This gives 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_cninfo_announcementA
Parse a downloaded announcement PDF/HTML into page-split JSON.
Args: local_key: Bundle key returned by list/download, e.g. "000001_DSH_2024-04-30_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 exist, so the description carries full burden. It describes the transformation but does not disclose potential side effects, error behavior, or safety (e.g., idempotency, permissions). Adequate but not detailed.
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 concise with a main sentence, a strategy block, and argument explanation. No unnecessary words; front-loaded with 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 tool with one parameter and an output schema, the description provides enough context for usage and timing. Minor gaps on failure behavior, but overall complete given the simple interface.
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?
The schema coverage is 0%, but the description explains the parameter local_key as a bundle key with an example. This adds significant meaning beyond the schema's bare type and title.
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 the tool parses downloaded announcement PDF/HTML into page-split JSON. It uses a specific verb and resource, and the strategy section distinguishes it from sibling tools like download_cninfo_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 strategy explicitly says to call after a successful download or when JSON is missing. This provides clear when-to-use and when-not-to-use guidance, differentiating from other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinct role: listing, downloading, parsing, searching, page retrieval, and stock code lookup. No overlap in functionality, making it easy for an agent to select the correct tool.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., list_cninfo_announcements, download_cninfo_announcement, lookup_stock_code). Minor variation in verb choice ('lookup' vs 'list') is negligible.
With 6 tools covering the core workflow of discovering, downloading, parsing, and searching announcements, the count is well-scoped and avoids bloat. Each tool serves a necessary step in the process.
The tool set covers the primary lifecycle: list, download, parse, keyword search within a document, and page retrieval. Missing a cross-announcement search or category listing, but these are minor gaps that do not break the workflow.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Read-only China A-share data for AI agents: market, limit-up, capital flow and disclosures.
China A-share market data for research, backtesting and AI agents via MCP.
Provide access to Chinese stock market data including historical prices, real-time data, news, and…
MCP server giving AI agents one-connection access to China A-share market intelligence: financials,
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides comprehensive financial research tools including A-share stock analysis, web scraping, entity extraction, and multi-source search capabilities for building intelligent financial research agents.425Apache 2.0
- FlicenseNot gradedqualityDmaintenanceProvides real-time quotes, fund flows, and corporate announcements for Chinese A-share stocks. It enables users to search for stocks, analyze financial indicators, and summarize quarterly reports through natural language.
- AlicenseNot gradedqualityDmaintenanceEnables users to query Chinese A-share stock data, including stock basics, historical prices, financial reports, and macroeconomic indicators.1MIT
- AlicenseBqualityDmaintenanceEnables AI assistants to access comprehensive Chinese financial market data including stocks, funds, futures, and economic indicators via AKShare.56MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/agentladle/mcp-cninfo'
If you have feedback or need assistance with the MCP directory API, please join our Discord server