A股因果链推演的独立 MCP 服务。把 Athena 的事件采集、去重、分类流程抽成独立服务:Bronze 采集、Silver 去重、Gold 分类,支持端到端管道运行。
news-mcp has well-structured tool definitions with complete JSON schemas and descriptions in Chinese. All 5 tools are explicitly registered with ToolDef and decorated with @tool. Schemas include proper type definitions and required fields. However, descriptions lack English translations (limiting LLM accessibility), parameter descriptions are sparse or missing for some fields, and output schemas are not formally documented. Error handling is basic (returns JSON errors but lacks recovery guidance). Tool composition is sound, each tool has a single responsibility and outputs chain correctly (e.g., seen_hashes from silver_dedup feed into run_pipeline). No security issues detected (no secrets in params). Naming follows verb_noun convention (list_sources, collect_raw, silver_dedup, gold_classify, run_pipeline) and is clear.
Bronze 采集(对齐 Athena BronzeCollector):从指定源抓原始文章。抓取失败不报错、返回已拿到的部分(与 Go 的容错行为一致)。
Gold 分类(对齐 Athena RuleClassifier.ClassifyArticles / classifyByKeywords):关键词→事件类型(CORPORATE/MACRO_POLICY/TRADE/GEOPOLITICAL/INDUSTRY/MARKET)、板块、标的、情感分。判不出类型的文章被丢弃(与 Go 一致),置信度固定 0.3。
列出可用的 Bronze 采集源(对齐 Athena internal/data 的 6 个 Source)。
端到端跑 Bronze→Silver→Gold(对齐 Athena runPipelineTick 的前三段,但不写库、不触发因果发现)。可指定源,或直接喂 raw_articles 跳过采集。
Silver 去重(对齐 Athena SilverPipeline.Process):SimHash + 汉明距离 <= 3 判近重复。传入 seen_hashes 可做跨请求去重;返回更新后的 seen_hashes 供持久化。
Descriptions are in Chinese only; LLMs trained primarily on English will struggle to understand tool purpose and when to invoke them. Descriptions should be in English or bilingual.
Output schemas are not formally documented. Tools return JSON but LLMs cannot infer the structure of returned fields (e.g., what fields are in 'articles', what does 'stats' contain in silver_dedup response). This forces LLMs to guess at response structure.
Parameter descriptions are sparse. 'codes' in collect_raw says 'stock code list' but does not explain format (CSV? array of strings?). 'radius' in silver_dedup references SIMHASH_RADIUS constant but does not explain what Hamming distance means or why 3 is the default.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | <=2025-11-25 | v2 |
Error handling returns JSON with 'error' field but provides no recovery guidance. E.g., 'sources 不能为空' (sources cannot be empty) does not tell the LLM to call list_sources() first. Errors should include actionable next steps.
run_pipeline has mutually exclusive parameters (sources vs raw_articles) but this is not documented in parameter descriptions. LLMs may pass both, causing ambiguity.