在润色由AI起草的金融文章时,从业者往往容易把注意力集中在句子结构和语气上。然而,运营披露解说博客 macromalt.com 的 hs85-newbie 回顾说,他曾在提示词中要求‘确切核实’,然后在修订阶段只检查句子,从而跳过了对核心数值的校验,结果导致公开披露金额与实际披露文件不一致的情况发生1。句子流畅但数字错误的文章,无论是写作者还是读者都很难察觉。
如何在AI与原始数据之间自动执行数值验证的‘事实核查MCP服务器’该如何构建?公开的 korea-finance-factcheck 服务器的结构为这一问题提供了解答。核心不在于构建‘验证所有内容的巨型引擎’,而是定义针对实际发生错误类型缩小范围的检查函数。让每个函数直接调用官方API以查找AI输出与原文之间的不一致,并将无法验证的项明确处理为‘未验证’。缩小边界以减少警告疲劳是设计运作的前提。
为什么要校验‘数字’而非句子

在金融报告中,数字错误不同于拼写错误,它扭曲了事实本身。hs85-newbie 在与AI协作写作时实际遇到了三种类型的错误2。
第一种是比例方向反转。披露文件中记载“每1股东洋生命获得0.2521056股友利金融”,而AI写成了“每1股友利金融获得0.2521056股东洋生命”,颠倒了分子和分母。第二种是单位混淆。在原本以元为单位的金额后加上了‘百万元’的标签,导致营收和营业利润被夸大了10倍、100倍,这一错误直接出现在了八篇已公开的文章中。第三种是偏移误读。在阅读美国财政部利率表时,行列位置发生偏移,将10年期利率错误地抄录到了7年期利率的位置2。
值得注意的是,这些错误并非源于模型的语言能力局限。hs85-newbie 写道:“三次都是模型如实写下了接收到的内容”2。颠倒比例阅读和添加单位标签的原因在于人类方面的误读和修订空缺,模型只是忠实地转移了输入。即使在提示词中强调准确性,如果原始数据对照未结构化地包含在流水线中,错误依然存在。AI报告的质量不仅取决于模型性能,更取决于验证基础设施的连接程度。
MCP服务器如何放置在AI与原始数据之间

要实现事实核查自动化,需要一条标准化通道供AI调用原始数据。这里使用了 MCP(模型上下文协议)。
MCP 标准化了AI应用与外部数据源或工具的连接方式。基本结构是由主机(AI应用)→ 客户端(连接器)→ 服务器(功能暴露程序)构成的三方结构,服务器暴露工具(tools)、资源(resources)和提示词(prompts)3。如果公司内部有 N 个 AI 应用和 M 个数据源,在没有标准的情况下单独构建连接器需要 N×M 个连接。MCP 将其减少为一个标准协议3。
korea-finance-factcheck 服务器利用此结构中的‘tools’原语,为LLM提供“将稿件中的数字与官方数据进行对照的功能”。当 Claude 或内部AI代理传递稿件时,服务器接收工具调用(tools/call),直接查询 DART 披露文件、韩国银行 ECOS、美国财政部、韩国交易所(KRX)等,并以 JSON 格式返回比较结果。此外,在2026年7月28日修订的 MCP 规范中,协议层已转变为无状态(stateless)。随着每个请求包含自身的版本和元数据,服务器实例之间无需共享状态,即可通过轮询负载均衡进行水平扩展3。
缩小范围的4个检查函数设计
korea-finance-factcheck 值得关注的原因在于,它并不声称“检查所有数字”。hs85-newbie 有意识地缩小了检查范围以防止警告疲劳2。
1. check_ratio_direction:方向错误
将合并、换股比例的句子与披露原文进行比较。如果正文中出现“每1股X获得 n股Y”,则会捕捉支付·接收主体颠倒的句子2。如果正文中有接收编号,则从 DART 调取披露文件,如果没有,则与正文中抄录的表述进行对照。
2. check_unit_errors:单位错误
将连同股票代码(如:三星电子 005930)一起记载的营收、营业利润、净利润与 DART 业务报告进行对照。但只选择性报告在10倍、100倍、1000倍单位上错位的数字。hs85-newbie 明确指出,如果连原本就与披露文件不同的数字(如证券公司预测值)也捕捉下来,警告会过多,因此特意缩小了范围2。
3. check_market_numbers:市场指标偏移错误
查询美国财政部资料的2、5、10、30年期国债利率,以及韩国银行 ECOS 的 KOSPI 收盘价、基准利率和汇率。特别是在汇率验证中,考虑到周收盘价与 ECOS 交易基准率之间的结构性差异,仅在差异达到15韩元以上时发出警告2。这是为了防止将微小的表述差异视为错误的机制。
4. check_stock_closes:收盘价误读
将明确标注‘收盘价’或‘收盘价(마감)’的以元为单位的数字与 KRX 官方收盘价进行比较。为了防止将目标股价误读为收盘价,对‘收盘价’这一词语设定了严格条件。值得注意的是,它排除了涨跌幅的验证。hs85-newbie 写道,因为曾将“9月30日之后下跌18.8%”这样的期间收益率误读为单日涨跌幅,所以不检查涨跌幅2。
这四项检查的共同点在于,它们是错误原因本身被狭义定义的函数。hs85-newbie 解释说,因为“只看凭空捏造的数字的测试无法捕捉实际错误”,所以直接将曾经出错的句子放入了测试中2。
流水线部署与异常处理工作流

安装很简单。如果在拥有 uv 的环境中,在 Claude Code 中使用以下命令注册2。
claude mcp add korea-finance-factcheck \
-e DART_API_KEY=발급받은_키 \
-e ECOS_API_KEY=발급받은_키 \
-e KRX_API_KEY=발급받은_키 \
-- uvx korea-finance-factcheck在 Claude Desktop 中,在 claude_desktop_config.json 中添加 mcpServers 设置2。
{
"mcpServers": {
"korea-finance-factcheck": {
"command": "uvx",
"args": ["korea-finance-factcheck"],
"env": {
"DART_API_KEY": "발급받은_키",
"ECOS_API_KEY": "발급받은_키",
"KRX_API_KEY": "발급받은_키"
}
}
}
}需要注意的是,必须分别获取并填入三个机构(DART、ECOS、KRX)的认证密钥。根据机构条款,认证密钥不能与他人共享,因此服务器不会像中央代理那样代存用户的密钥2。KRX Open API 仅允许非商业用途,并在结果标注时需注明出处为‘KRX 统计信息’2。
在流水线部署中,重要的是异常处理工作流。
- 通报查询失败。如果没有 API 密钥或查询本身失败,则在
skipped字段中明确原因2。 - 允许部分失败。在运行
check_all时,即使部分检查失败,也会返回其余结果2。 - 区分未验证项。对于披露文件或官方统计中不存在的数字(如证券公司估计值、盘中行情等)不做判断,而是以
unverified返回2。
关键在于将‘无法判断’与错误区分开来,引导人类进行最终确认。hs85-newbie 明确指出了‘即使在无法进行检查时,也不会默默略过’这一点,并将检查失败与对象未包含区分开来2。
验证覆盖率与实际局限性
该服务器的作用仅限于对照原文与正文数字的一致性。hs85-newbie 明确划清界限称:“它不会推荐买入或卖出某只股票,也不会提出股价预测。请勿将结果作为投资判断的依据”2。
局限性也很明确。korea-finance-factcheck 是基于 hs85-newbie 本人经历的三种错误类型(比例反转、单位混淆、列偏移)设计的2。hs85-newbie 本人在 GeekNews 上也写道:“这是我仅基于自己博客中爆发的错误制作的,不知道它对其他人的文章是否也有用”1。
因此,在应用此工具结构时,必须首先定义自己内容中经常发生的错误类型。如果要捕捉投资报告中经常出现的证券公司共识值或 PER、PBR 数值错误,由于超出了服务器范围,它们很可能被返回为‘未验证’2。此外,由于条款限制,Naver 数据的范围较窄,因此不支持原生集成2。这不是技术局限,而是由于数据源条款使用范围狭窄所致的设计决定。
要捕捉AI金融文章中的数字错误,相较于构建庞大的验证平台,将针对实际发生错误类型缩小范围的检查函数通过 MCP 服务器进行整合更为有效。让每个函数直接调用官方API与原文对照,并将无法验证的项通过 skipped 和 unverified 透明地呈现出来,让人类进行确认,是维持无警告疲劳校验的条件。
参考资料
- AI로 쓴 금융 글, 숫자 검사기 MCP | GeekNews · news.hada.io↩
- ↩
- Model Context Protocol architecture: An executive guide · kellton.com↩




