关于 disclosures
disclosures 是用于研究企业申报、内部人士、所有者、财务数据和所有权链的开源 MCP 服务及 TypeScript 库。它面向 AI Agent 和 TypeScript 开发者,汇集 21 个司法辖区路线的官方来源,并将结果链接到原始文件。
主要功能
- 0110 个稳定研究工具
- 02覆盖 21 个司法辖区路线
- 03官方来源链接与明确覆盖说明
- 04支持 stdio 和无状态 Streamable HTTP
- 05TypeScript 库及 Node 18+ 运行环境
适用场景
- 01查询董事及内部人士披露
- 02查看主要股东和所有权链
- 03获取企业申报与财务摘要
- 04查阅申报文本或保存限定范围的 PDF
MCP 相关
向 MCP 客户端提供十种工具,涵盖企业解析、申报、内部人士、所有权、财务、文件及相关查询。支持 stdio 和无状态 Streamable HTTP 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y disclosuresDISCLOSURES_USER_AGENTDescriptive User-Agent with contact info, required only for SEC-backed US operations (e.g. 'Your Org [email protected]'). SEC_EDGAR_USER_AGENT is also accepted.COMPANIES_HOUSE_API_KEY密钥UK Companies House API key. Required only for GB operations.OPENDART_API_KEY密钥South Korea OpenDART API key. Required only for KR operations.EDINET_API_KEY密钥Japan EDINET API key. Required only for JP document search; JP resolution is keyless.DBD_API_KEY密钥Thailand DBD API key. Required only for company-name search; exact 13-digit juristic-person lookups are keyless.DISCLOSURES_ACKNOWLEDGE_ASX_TERMSSet to 1 only after reviewing ASX's restrictive terms and confirming you have the rights to use ASX data. ASIC open-data routes remain available without it.DISCLOSURES_ACKNOWLEDGE_PSE_TERMSSet to 1 only after reviewing PSE EDGE's restrictive terms and confirming you have the rights to use PSE data.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
10收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| company | string | 是 | 公司名称或特定司法辖区的标识符:股票代码/CIK(US)、Companies House 公司编号(GB)、OpenDART 8 位 corp code 或 6 位股票代码(KR)、EDINET 代码(E + 5 位数字)、4/5 位证券代码或 13 位法人编号(JP)、6 位 A 股或 5 位港股代码(CN,通过 cninfo)、6 位 BSE 代码(IN)、4 位 TWSE 上市代码(TW)、数字 CVM 代码(BR)、8 位 BaFin-Id 或 ISIN(DE)、SIREN/ISIN/LEI(FR)、4/5 位 HKEX 股票代码(HK)、新加坡 UEN(SG)、13 位法人登记号(TH)、AFM 登记发行人名称或 LEI(NL)、4 字母 IDX 股票代码/kode emiten(ID)、4 位 Bursa 股票代码或发行人名称(MY)、BIST 股票代码(TR)、DFM 发行人代码(AE)、PSE 股票代码或数字 PSE 公司 ID(PH)、ASX 上市代码/9 位 ACN/11 位 ABN(AU)或 20 字符 LEI |
| jurisdiction | enum | 否 | 司法辖区路线。US 为默认值,可省略。使用前请阅读 disclosures://jurisdictions/{code},了解标识符、凭据、支持的意图、来源许可和访问注意事项。PH/PSE 和 AU/ASX 网络路径需要明确确认条款;AU/ASIC 开放数据路径无需确认。US | GB | EU | KR | JP | CN | IN | TW | BR | DE | FR | HK | SG | TH | NL | ID | MY | TR | AE | PH | AU |
详细介绍
disclosures
面向 AI Agent 和 TypeScript 的公司披露研究工具——通过 21 条司法辖区路线(20 条国家路线及欧盟汇总路线)访问 26 个官方来源,查询申报文件、内部人士、所有者、财务信息和所有权链。
disclosures 是一款免费的开源 Model Context Protocol 服务,同时也是一个 TypeScript 库。它可以回答诸如 “NVIDIA 的董事有哪些?”、“谁持有 Samsung Electronics 5% 的股份?” 或 “给我看看 Vale 最近三年的年度业绩” 等问题,并为每个答案提供指向官方源文件的链接。
- 10 个稳定工具,21 条司法辖区路线——六个核心工具通过
jurisdiction分发;OwnershipChain为全球工具;另有三个专用工具用于查询已提交文件、担保债权和个人信息。随着覆盖范围扩大,工具名称保持稳定。 - 仅使用官方来源——SEC EDGAR、GLEIF、Companies House、FCA NSM、filings.xbrl.org、OpenDART、EDINET、cninfo、SZSE、BSE、TWSE、CVM、BaFin、info-financiere、recherche-entreprises、HKEXnews、ACRA、DBD、AFM、IDX、Bursa Malaysia、KAP、DFM、PSE EDGE、ASX 和 ASIC。
- 秉持诚实原则——仅提供真实来源链接;对于不支持的内容会明确说明,而不是返回空结果或捏造内容;并清晰列出注意事项(“没有申报记录不代表没有申报”)。
- 内置运行时——提供一个适用于 Node 18+ 的 JavaScript 文件。MCP SDK 和 Zod 是声明的程序包依赖项,因此 TypeScript 用户可以获得公共 API 所使用的类型。
快速开始
需要 Node 18+。通过 SEC 查询美国数据时,必须按照 EDGAR 的公平访问政策设置具有描述性的 User-Agent。无需密钥的非美国路线则不需要此设置。
npx -y disclosures
Claude Code
claude mcp add --transport stdio disclosures \
--env DISCLOSURES_USER_AGENT="Your Organization [email protected]" \
-- npx -y disclosures
Claude Desktop
将以下内容添加到 claude_desktop_config.json(Settings → Developer → Edit Config):
{
"mcpServers": {
"disclosures": {
"command": "npx",
"args": ["-y", "disclosures"],
"env": {
"DISCLOSURES_USER_AGENT": "Your Organization [email protected]"
}
}
}
}
Cursor
将与 Claude Desktop 相同的 mcpServers 配置块添加到 ~/.cursor/mcp.json(或项目专属的 .cursor/mcp.json)。
VS Code(Copilot / MCP)
添加到 .vscode/mcp.json:
{
"servers": {
"disclosures": {
"type": "stdio",
"command": "npx",
"args": ["-y", "disclosures"],
"env": {
"DISCLOSURES_USER_AGENT": "Your Organization [email protected]"
}
}
}
}
其他客户端 — Windsurf、Codex CLI、Gemini CLI,以及任何 stdio MCP 客户端
Windsurf(~/.codeium/windsurf/mcp_config.json)使用与 Claude Desktop 相同的 mcpServers JSON 配置。
Codex CLI(~/.codex/config.toml):
[mcp_servers.disclosures]
command = "npx"
args = ["-y", "disclosures"]
env = { DISCLOSURES_USER_AGENT = "Your Organization [email protected]" }
Gemini CLI(~/.gemini/settings.json)使用与 Claude Desktop 相同的 mcpServers JSON 配置。
**其他任何客户端:**运行 npx -y disclosures,将其作为 stdio 命令,并设置 DISCLOSURES_USER_AGENT 环境变量。该服务通过 stdout 使用以换行符分隔的 JSON-RPC 通信。它也已列入官方 MCP 注册表,名称为 io.github.carrotly-ai/disclosures。
同一服务器也支持 MCP streamable-HTTP 传输,适用于托管或联网部署。传入 --http(不带标志时仍默认为 stdio):
disclosures --http --port 8080 # or: node dist/server.mjs --http
- 默认绑定到
127.0.0.1。端口取自--port,否则取自PORT环境变量,再否则使用8080。Host 和提供的 Origin 标头必须与服务器允许列表匹配。绑定到非环回地址时,必须提供 bearer token 并显式指定允许的主机。 - MCP 端点:
POST /mcp(该传输也会响应 streamable-HTTP 的GET/DELETE握手)。以无状态方式运行——没有会话 ID,每个请求都会创建一个全新的服务器实例。 - 健康检查:
GET /healthz→200 {"name","version","tools"}。 - 诊断信息仅输出到 stderr,与 stdio 模式相同。
在任意 streamable-HTTP MCP 客户端中连接 http://127.0.0.1:8080/mcp。
对于托管服务,请通过部署的密钥配置提供 DISCLOSURES_HTTP_TOKEN,然后设置:
DISCLOSURES_HTTP_ALLOWED_HOSTS="disclosures.example.com" \
DISCLOSURES_HTTP_ALLOWED_ORIGINS="https://disclosures.example.com" \
DISCLOSURES_DOWNLOAD_DIR="/var/lib/disclosures/downloads" \
disclosures --http --host 0.0.0.0 --port 8080
在反向代理处终止 TLS,保留已配置的 Host 标头,并让客户端发送 Authorization: Bearer <token>。允许的主机必须是完全匹配的 authority;如果客户端发送端口,则必须包含端口。支持以逗号分隔的值。Origin 默认使用允许主机对应的 http:// Origin;在 TLS 终止后,请显式设置 HTTPS Origin。支持不带 Origin 的请求,以供非浏览器客户端使用。健康检查端点会检查 Host/Origin,但不要求提供 token。
库部署可使用 runHttpServer({ bearerToken, allowedHosts, allowedOrigins, downloadDirectory }) 采用相同策略。HTTP 下载始终保存在由服务器控制的目录中(默认使用私有临时目录);output_path 只能接受文件名。stdio/库下载可以使用显式的本地路径。所有模式都会拒绝覆盖现有文件或符号链接;省略路径时会生成唯一的私有临时文件。
更改配置后,请重启客户端,然后尝试:
“使用 disclosures 列出 Apple 的董事会成员及其最新的 Form 4 活动。” “谁持有 NVIDIA 5% 或以上的股份?请附上文件链接。” “解析韩国的 Samsung Electronics,并展示其最新年度财务数据。” “Apple Operations India 上游的 GLEIF 所有权链是什么?”
十个工具
| 工具 | 解答的问题 | 覆盖范围 |
|---|---|---|
CompanyResolve | “这家公司是哪家?”——规范名称,以及全球和本地注册标识符。 | 全部 21 个路由 |
CompanyFilings | “它提交过哪些文件?”——日期、类型、说明、标识符和官方链接。 | US、GB、EU、KR、JP、CN、IN、TW、BR、FR、HK、ID、MY、AE、PH;AU 部分支持最新 5 份 |
CompanyInsiders | “谁在管理它,或报告过相关交易?”——特定路由提供的高管、董事、经理或内部人士披露信息。 | US、GB、KR、CN 部分支持、TW、BR、DE、NL、MY、PH |
CompanyOwners | “谁拥有或控制它?”——大股东、控制权登记册、持股比例跨越阈值或托管人披露信息。 | US、GB、KR、JP、CN 部分支持、TW、BR、DE、FR 部分支持、HK 部分支持、NL、MY、PH |
CompanyFinancials | “它的财务数据如何?”——来自结构化 XBRL 或有限范围申报文件解析器的原始申报核心数据。 | US、GB、EU、KR、JP、CN 部分支持、TW、BR、HK 部分支持、ID、PH 部分支持 |
OwnershipChain | “哪些实体将其纳入合并报表?”——GLEIF 直接/最终会计合并母公司及子公司。 | 🌐 全球(任意 LEI 或法定名称) |
PrivateRaises | “它是否进行过私募融资?”——Form D 豁免发行、金额、投资者数量和具名关联人。 | 仅 US |
CompanyDocument | “申报文件的实际内容是什么?”——元数据、分页提取文本,或保存到磁盘的有限范围 PDF。 | US、GB、JP、KR、FR、HK、CN、IN、TR、AE、PH、AU |
CompanyCharges | “它有哪些资产被设定了担保?”——已登记的押记/抵押及其详情。 | GB |
PersonAppointments | “此人还在哪些公司任职?”——人员搜索、跨公司职位,以及取消任职资格/执法查询。 | US、GB、DE、FR、AU 部分支持(仅 disqualifications) |
六个核心工具通过 jurisdiction 在所有司法管辖区路由间分发;OwnershipChain 覆盖全球,不受司法管辖区限制。CompanyDocument 接受 US、GB(默认值)、JP、KR、FR、HK、CN、IN、TR、AE、PH 和 AU;PersonAppointments 接受 US、GB(默认值)、DE、FR 和 AU;CompanyCharges 专用于 Companies House,不接受 jurisdiction。
每个 company 输入都接受名称或本地标识符——股票代码、CIK、LEI 或 ISIN(US/全球)、Companies House 编号(GB——包括苏格兰和北爱尔兰的 SC/NI 前缀)、OpenDART 公司/股票代码(KR)、EDINET/证券/公司代码(JP)、A 股或 HK 代码(CN)、BSE 证券代码(IN)、TWSE 上市代码(TW)、CVM 注册代码(BR)、BaFin-Id 或 ISIN(DE)、SIREN/ISIN/LEI(FR)、4/5 位 HKEX 股票代码(HK)、新加坡 UEN(SG)、13 位法人注册号(TH)、AFM 登记册中的发行人名称或 LEI(NL)、4 字母 IDX 股票代码/kode emiten(ID)、4 位 Bursa 股票代码或发行人名称(MY)、BIST 股票代码(TR)、DFM 发行人代码(AE)、PSE 股票代码或数字形式的 PSE 公司 ID(PH)。传入 jurisdiction: "US" | "GB" | "EU" | "KR" | "JP" | "CN" | "IN" | "TW" | "BR" | "DE" | "FR" | "HK" | "SG" | "TH" | "NL" | "ID" | "MY" | "TR" | "AE" | "PH" | "AU"(默认值为 US)。
覆盖范围矩阵
| 意图 | US | GB | EU | KR | JP | CN | IN | TW | BR | DE | FR | HK | SG | TH | NL | ID | MY | TR | AE | PH | AU |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CompanyResolve | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
CompanyFilings | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — | ✅ | ✅ | — | — | — | ✅ | ✅ | — | ✅ | ✅ | ⚠️ |
CompanyInsiders | ✅ | ✅ | — | ✅ | — | ⚠️ | — | ✅ | ✅ | ✅ | — | — | — | — | ✅ | — | ✅ | — | — | ✅ | — |
CompanyOwners | ✅ | ✅ | — | ✅ | ✅ | ⚠️ | — | ✅ | ✅ | ✅ | ⚠️ | ⚠️ | — | — | ✅ | — | ✅ | — | — | ✅ | — |
CompanyFinancials | ✅ | ✅ | ✅ | ✅ | ✅ | ⚠️ | — | ✅ | ✅ | — | — | ⚠️ | — | — | — | ✅ | — | — | — | ⚠️ | — |
PrivateRaises | ✅ | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
OwnershipChain | 🌐 通过 GLEIF 覆盖全球,不受司法管辖区限制 |
✅ 支持 · ⚠️ 部分支持(FR CompanyOwners:提供跨越阈值的通知;尽力从通知 PDF 的文本层结构化提取持有人、方向、阈值和变动后的持股比例(针对最新的少数通知);扫描版/非标准 PDF 和较早的通知仅提供链接列表 · HK CompanyOwners:无需密钥的 CCASS 持股查询返回参与者/托管人层级的持股(托管银行、经纪商、HKSCC Nominees、CSDC),不是受益所有人;SFO Part XV 权益披露登记册设有验证码,仅提供链接供手动查询 · HK CompanyFinancials:从发行人最新业绩公告 PDF 提取主要数据,仅限最新公告;标准发行人的数据可顺利提取,复杂的分部拆分/多栏报表仅能部分解析,页数不足或缺少报表时则退回提供 PDF 链接 · CN CompanyFinancials:从发行人最新定期报告 PDF 的主要会计数据表中提取主要数据,并根据报告注明的单位(元/千元/万元/百万元)统一换算为整元人民币;仅限最新报告;若报告存在乱码(对象流)、PDF 超出大小限制或缺少主要数据表,则退回提供 PDF 链接 · CN CompanyOwners:从发行人最新定期报告中解析前十名股东表;提供真实的大股东数据,但表格格式不规整,列顺序因发行人而异,因此仅输出通过值启发式解析器可靠匹配的行;这是报告发布时的时点快照,不是实时登记册,也不追踪最终受益所有人 · CN CompanyInsiders:不同交易所的处理方式不对称——SZSE 代码(0/3xxxxx)使用 SZSE 无需密钥的董监高持股变动结构化数据源;SSE 代码(6xxxxx)则退回使用最新年报中已发布的董监高名单,仅提供姓名和职位) · ID 通过 受反爬虫保护的主机(www.idx.co.id)提供服务:适配器会发送浏览器级请求头,在这些请求头有效时即可正常工作;如果边缘节点拒绝请求,则会明确提示“主机阻止了此请求——请注入浏览器支持的 fetchFn”,并说明这不代表该发行人的结果为空,绝不会静默漏报 · TR CompanyFilings 有意标记为不支持:KAP 的目录及每个披露页面/PDF 均可无需密钥访问,但其 Next.js 重建将数据层迁移到了 kapsitebackend.mkk.com.tr,该域名无法公开解析——按披露 ID 查询的内容均可正常使用,但无法枚举披露(公司通知页面返回 200,但服务端渲染的是空壳,且从该不可访问的主机获取通知条目),因此工具会说明原因并提供发行人的 KAP 页面,而不会伪造列表 · PH CompanyFinancials 为部分支持:PSE EDGE 提供其 17-A 表格所载的主要报表(资产负债表和损益表,币种为 PHP),不包含报告 PDF 附件中的完整审计报表 · — 返回明确诚实的不支持该司法管辖区的说明,绝不会返回空结果或编造结果
NL CompanyOwners/CompanyInsiders 已获得全面支持,但会读取整个文件的 AFM 登记册导出数据(不存在服务端筛选;重大持股导出文件约为 108 MB):会话中的首次调用需要约 20–30 s,之后按发行方缓存 24 h 的摘要,其余调用均可在毫秒内完成。在按请求部署时,请提供 AdapterOptions.cache(例如 FileCache)。
⚠️ ASX 和 PSE EDGE 是受限数据源,默认会在访问网络前禁用。 它们的条款限制了使用和再分发,可能与自动披露服务相冲突。请查看 AU.md 和 PH.md,然后仅在你有权在当前场景中使用相应数据源时,设置
DISCLOSURES_ACKNOWLEDGE_ASX_TERMS=1和/或DISCLOSURES_ACKNOWLEDGE_PSE_TERMS=1。无需确认 ASX 条款,即可继续使用 ASIC 提供的 CC-BY 澳大利亚公司和取消资格登记册。启用后,响应中仍会保留数据源专属的条款声明。本内容不构成法律建议。
每个司法管辖区都有完整的参考页面,介绍数据源、凭据、可接受的标识符、各意图的行为以及注意事项,详见 docs/jurisdictions/。
数据源和凭据
美国和全球查询只需 User-Agent 即可使用。只要上游允许,非美国数据源均无需密钥;少数需要密钥的数据源也都是免费的。只需提供你要查询的司法管辖区所需的密钥——其他功能无需密钥也能正常使用;如果缺少凭据,系统会显示易读的错误,并指出需要设置的具体变量。
| 来源 | 管辖区 | 必需项 | 备注 |
|---|---|---|---|
| SEC EDGAR | US(默认) | 无 — 设置 DISCLOSURES_USER_AGENT | 申报文件、内部人士、13D/13G 持有人、XBRL 财务数据、Form D。 |
| GLEIF | 🌐 全球 | 无 | LEI/ISIN 解析、所有权链。 |
| Companies House | GB | COMPANIES_HOUSE_API_KEY(免费) | 解析、申报文件、高管、PSC — 包括 ECCTA 身份验证状态。 |
| FCA NSM | GB | 无 — 仅注入 | CompanyOwners 中的 DTR5/TR-1 约 3% 以上主要持股;仅在注入 fetchFn 时启用(无公开读取 API)。 |
| filings.xbrl.org | GB、EU | 无 | 标准化 ESEF/UKSEF 年度 IFRS 财务数据(FY2020+)。 |
| DART / OpenDART | KR | OPENDART_API_KEY(免费) | 解析、报告、高管持股、5% 大额持股、财务数据。 |
| EDINET | JP | EDINET_API_KEY(免费,仅用于搜索) | 解析无需密钥;文档搜索需要密钥。 |
| cninfo | CN | 无 | SSE/SZSE(及 HKEX 镜像)解析、公告 PDF、CompanyDocument、CompanyFinancials(主要会计数据关键数据表)、CompanyOwners(前十名股东),以及 SSE CompanyInsiders 董监高名册 — 所有基于 PDF 的模式均有限且尽力而为。 |
| SZSE disclosure API | CN | 无 | 无需密钥的结构化董监高及相关人员股份变动数据源,为深圳上市发行人(0/3xxxxx)的 CompanyInsiders 提供数据。 |
| BSE India | IN | 无 | 解析、分页公司公告,以及 CompanyDocument PDF 元数据/文本/下载。NEWSID 和附件交易 ID 各自独立;文档优先使用 AttachHis,处理上限为 30 MiB。反爬 API 主机 — 如果受到限流,请注入 fetchFn。 |
| TWSE OpenAPI | TW | 无 | 解析、重大信息、董事/监事、持股超过 10% 的股东。 |
| CVM open data | BR | 无 | 解析、IPE 披露索引、以 BRL 计价的 DFP 年度财务数据、FRE 股东持仓(第 15 项)和管理人员名册(第 12 项)。 |
| BaFin AnteileInfo + DealingsInfo | DE | 无 | 解析、WpHG §§33 ff. 主要持股、MAR 第 19 条董事交易。 |
| info-financiere.gouv.fr(OAM) | FR | 无 | 受监管申报索引,含直接 PDF、越过门槛通知、已提交文档。 |
| recherche-entreprises | FR | 无 | 解析(SIREN)、高管(dirigeants)、个人→公司。 |
| HKEXnews | HK | 无 | 解析、标题搜索申报文件(PDF 无需密钥)、按 FILE_LINK 路径获取 CompanyDocument、CompanyFinancials(来自最新业绩公告 PDF 的主要数据 — 有限)。 |
| ACRA(data.gov.sg) | SG | 无 | 仅解析 — UEN、状态、注册日期、曾用名、审计师(Singapore Open Data Licence)。 |
| DBD(泰国) | TH | 按法人编号查询无需密钥;按名称搜索需 DBD_API_KEY(免费) | 仅解析 — 国家级名录,涵盖上市及非上市公司:泰文和英文法定名称、法人类型、状态、注册/实缴资本、TSIC 代码、登记日期。 |
| ASX 公司公告 | AU | DISCLOSURES_ACKNOWLEDGE_ASX_TERMS=1 | 受限来源,默认在网络访问前禁用。确认后:上市公司解析、仅最近 5 条公告(非申报历史记录),以及通过 documentKey 获取公告 PDF。ASX 条款限制使用、再分发和自动访问;运营者有责任确保拥有必要权利。精确 ACN/ABN 解析仅由 ASIC 提供。参见 AU.md。 |
| ASIC on data.gov.au | AU | 无 | CC BY 3.0 AU — 可自由再分发,但须注明出处。 公司数据集(按 ACN/ABN/名称收录 440 万家澳大利亚上市及非上市公司)为 CompanyResolve 提供数据;禁任和取消资格人员名册为 PersonAppointments 的 disqualifications 提供数据。通过 CKAN datastore_search 提供真正的按公司查询 API,因此不会下载 399 MB 的批量 CSV。 |
| IDX(印度尼西亚) | ID | 无(主机有反爬机制;若遭拦截,请注入基于浏览器的 fetchFn) | 解析(约 965 家上市发行人 — 股票代码、行业/子行业、板块、上市日期)、带附件 PDF 的披露公告,以及以 IDR 计价、从真实 XBRL 实例解析的财务数据(instance.zip、IDX 2020 idx-cor taxonomy)。内部人士/所有者信息位于报告 PDF 和 KSEI 存管渠道中 — 如实标记为不支持。交易所 ©:优先提供链接、按需访问、不进行批量再分发。 |
| AFM 披露名册 | NL | 无 | 解析、Wft 第 5.3 章大额持股、MAR 第 19 条管理人员交易及董事持股。无密钥的整文件导出,无服务器端筛选 — 持股名册约 108 MB,因此会话中的首次 CompanyOwners 调用需要约 20–30 秒;请提供 AdapterOptions.cache(24 小时摘要)。AFM 声明享有 ©:优先提供链接、按需访问、不进行批量再分发。 |
| Bursa Malaysia 公司公告 | MY | 无(无需密钥)— 但主机受 Cloudflare 挑战,因此请注入基于浏览器的 fetchFn | 解析、采用交易所自有类别分类体系的公告数据源、解析第 219 条董事权益内部人士信息和第 138 条大股东信息 — 两者均会解析关联公告文档中注明日期的交易、股数及由此产生的直接/间接持股。遇到挑战时会如实返回 AdapterOptions.fetchFn 提示,绝不会返回空结果。SSM(国家登记机构)服务收费。交易所 ©:优先提供链接、按需访问。 |
| KAP(Kamuyu Aydınlatma Platformu) | TR | 无 | 从服务器渲染的 BIST 目录进行解析,并可按 KAP ID 获取任何披露(元数据、PDF、提取文本)。按公司枚举依赖非公开后端,因此 CompanyFilings 会如实显示为短横线。KAP/MKK ©:优先提供链接、按需访问、不进行批量再分发。 |
| DFM(Dubai Financial Market) | AE | 无 | 仅限迪拜,不涵盖整个阿联酋 — ADX、DIFC 和 ADGM 的服务器访问受机器人防护限制。解析、按发行人获取 efsah 披露数据源,以及按 r_path 获取各披露 PDF。交易所 ©:优先提供链接、按需访问。 |
| PSE EDGE(Philippine Stock Exchange) | PH | DISCLOSURES_ACKNOWLEDGE_PSE_TERMS=1 | 受限来源,默认在网络访问前禁用。确认后:解析、申报文件、文档、form 13-1 内部人士信息、POR-1 / 17-7 所有者信息,以及部分 17-A 财务数据。PSE 条款限制个人/商业用途及再分发;运营者有责任确保拥有必要权利。参见 PH.md。 |
# Required (SEC fair-access policy — your name/org and contact email)
export DISCLOSURES_USER_AGENT="Your Organization [email protected]"
# Optional, per jurisdiction
export COMPANIES_HOUSE_API_KEY="..." # GB
export OPENDART_API_KEY="..." # KR
export EDINET_API_KEY="..." # JP document search
export DBD_API_KEY="..." # TH company-name search (by-number is keyless)
# Restricted sources: set only after reviewing the source terms.
export DISCLOSURES_ACKNOWLEDGE_ASX_TERMS=1
export DISCLOSURES_ACKNOWLEDGE_PSE_TERMS=1
SEC_EDGAR_USER_AGENT 可作为兼容性回退值;DISCLOSURES_USER_AGENT 优先。
作为 TypeScript 库使用
同一个软件包可以直接导入,无需启动 stdio —— 每个适配器都接受可注入的 { fetchFn?, env?, cache? },因此可嵌入使用,也能进行确定性测试。
import { createTools } from "disclosures";
const tools = createTools({
env: { DISCLOSURES_USER_AGENT: "Your Organization [email protected]" },
});
const resolve = tools.find((tool) => tool.name === "CompanyResolve")!;
const result = await resolve.handler({ company: "NVDA" });
处理程序绝不会抛出异常 —— 所有失败都会以易读的 MCP 风格结果返回。各个适配器也以命名空间形式导出(secEdgar、gleif、companiesHouse、openDart、edinet、cninfo、szse、bseIndia、fcaNsm、xbrlFilings、twseOpenApi、cvmOpenData),方便你获取原始的标准化记录,而不是 Markdown。
持久化缓存 — 避免重启后重新下载 KR/JP 参考档案
OpenDART 公司代码列表(KR)和 EDINET 代码列表(JP)是数 MB 大的档案,约每天更新一次。如果未提供缓存,它们会使用支持 TTL 的进程缓存;提供缓存即可在重启后保留数据:
import { FileCache, createTools } from "disclosures";
const tools = createTools({
env: { OPENDART_API_KEY: process.env.OPENDART_API_KEY },
cache: new FileCache("/var/cache/disclosures"), // TTL-aware, survives restarts
});
cache 可以是任意 DisclosuresCache(提供 get/set)。软件包内置 InMemoryCache 和 FileCache;缓存条目损坏、过期或缺失时会回退到常规重新获取 —— 缓存故障绝不会导致查询失败。FileCache 通过原子重命名发布完整条目。已完成的进程值会按正常方式过期,并发获取只会共享进行中的任务。
ISIN ↔ LEI 交叉映射 — 通过 GLEIF 在证券与发行人之间双向映射
import { gleif } from "disclosures";
gleif.isIsin("US0378331005"); // true — validates the check digit
const issuer = await gleif.resolveLeiByIsin("US0378331005"); // → issuer's GLEIF Entity (with .lei)
const isins = await gleif.getIsinsForLei("HWUPKR0MPOU8FGXBT394"); // → every ISIN for that LEI
CompanyResolve 已接受裸 ISIN,并通过此交叉映射进行查询;这些辅助函数可用于构建你自己的标识符映射。
MCP 服务工厂 — 将服务嵌入你自己的进程
import { createDisclosuresServer } from "disclosures";
const server = createDisclosuresServer(); // McpServer with all ten tools registered
导入软件包不会打开 stdio;只有 CLI 入口点会连接传输层。
专为 AI 客户端打造
响应针对 MCP 客户端的实际使用方式而设计:
- 优先使用 Markdown 渲染。 每个结果都是一个 GitHub 风格的 Markdown 文本块 —— 包含标题、精简的管道表格(表头仅声明一次,不像 JSON 那样每行重复)、真实来源链接和内联注意事项。这是适合大模型读取的高效令牌格式。
- 为链式调用提供结构化输出。 含数据的工具还会返回与 Markdown 内容一致的 MCP
structuredContent,让客户端无需解析散文即可链式调用:CompanyResolve返回带完整标识符集合的排序候选项,CompanyFilings和登记记录包含可直接使用的transactionId,PersonAppointments返回带officerId的人员,以及CompanyInsiders、CompanyOwners、CompanyFinancials(按财年期末标注每项概念事实)、OwnershipChain、PrivateRaises和CompanyCharges—— 每项都带有sourceJurisdiction标签。OwnershipChain还声明了 MCPoutputSchema;多司法管辖区工具保留了如实报告未命中的纯文本路径,因此只会附加输出结构,而不声明架构。 - 下一步提示。 支持链式调用的输出会以一行
_Next: …_提示结尾,注明下一步要调用的工具和参数。 - 工具注解。 所有工具都声明
openWorldHint和idempotentHint;除CompanyDocument(其pdf模式会写入本地文件)外,其他工具都声明readOnlyHint,因此客户端可以并行执行,并跳过确认提示。 - 分页文档文本。
CompanyDocument的xhtml模式通过text_offset按每段 50,000 个字符读取 —— 可以完整读取较长的申报文件,而不会仅截取开头部分。 - 隔离不可信内容。 提取的申报方编写文本会由固定的
<<<BEGIN/END UNTRUSTED DOCUMENT TEXT>>>标记包围(文档内形似标记的内容也会被处理以消除歧义),让客户端可以通过程序隔离这些内容。 - 司法管辖区资源。 服务会公开
disclosures://jurisdictions和disclosures://jurisdictions/{code}MCP 资源,介绍各司法管辖区的数据来源、凭据、接受的标识符和注意事项 —— 无需因工具调用失败就能检查要求。
诚信与范围
这些工具忠实地报告公开披露信息,并非 KYC、UBO 或资本结构表产品:
- 没有记录不代表没有。 没有 Form D 不代表公司从未进行过非公开融资;缺少 PSC 不能证明不存在控制人;ECCTA 身份字段为空不能证明某位高管未经核实。
- GLEIF 母公司关系指的是会计合并关系,不代表投票控制权、市场披露中的所有权或最终受益所有权。
- Schedule 13D/13G 用于识别持股达到 5% 门槛的申报人;它不是完整或持续更新的资本结构表。
- Section 16 内部人信息基于近期的 Forms 3/4/5,可能并非完整的当前名册。
- 文件可能经过修订、重述、逾期提交,或使用其他 XBRL 概念标记——请对照链接的源文件进行核实。
- 本文内容不构成法律、投资、会计或财务建议。
未能匹配时会返回纯文本“Could not find…”;配置、上游服务和速率限制错误则会返回带标记的错误,并指出修复方法。每个链接都指向真实且可访问的来源 URL。
文档
| 页面 | 内容 |
|---|---|
docs/jurisdictions/ | 各司法管辖区参考资料:来源、凭据、接受的标识符、各意图的行为、注意事项和覆盖矩阵。 |
docs/TESTING.md | 离线测试隔离,以及独立的凭据感知实时端到端测试套件。 |
PUBLISHING.md | npm 可信发布和 MCP 注册表发布自动化。 |
CHANGELOG.md | 发布历史。 |
开发
开发需要 Bun;已发布的制品可在 Node 18+ 上运行。
bun install --frozen-lockfile
bun audit # complete dependency graph
bun --no-env-file run typecheck # pinned TypeScript compiler
bun --no-env-file run test # full offline suite — no live HTTP
bun --no-env-file run build # bundle and declarations
bun --no-env-file run test:stdio # freshly built stdio integration
bun --no-env-file run test:runtime # stdio and HTTP on the active Node runtime
bun --no-env-file run test:package # isolated npm install and strict consumer compilation
对于不能加载本地环境文件的自动化任务,请在干净的检出目录中运行包管理器
命令:Bun 的安装/审计命令不会遵循运行时 --no-env-file 标志。PR 会在 Node 22 上
运行完整的离线门禁;发布验证还会检查 Node 18/20/22/24 和实时服务提供方。
版本、安全和发布门禁请参阅发布说明。
默认测试套件绝不访问网络:路由 fetch 存根会对任何未匹配的请求抛出错误。另有一个实时端到端测试套件,会构建真实的 Node 制品,通过 MCP stdio 驱动它,并使用 .env.local 中现有的凭据:
bun run test:live # missing jurisdiction keys are reported as skips
bun run test:live:all # strict: require User-Agent + GB/KR/JP keys
实时断言可容忍数据变化(检查身份、标识符格式、来源主机和响应结构,而非易变的数量或日期);临时故障会重试一次;调用设有时间限制;诊断信息会对已配置的密钥脱敏。实时文件使用 .live.ts 后缀,因此裸运行 bun test 时不会发现这些文件。请参阅完整的测试规范。较小的 bun run smoke:live SEC/GLEIF 诊断仍可用于快速检查。
stdio 规则: 服务会保留 stdout 用于 JSON-RPC——贡献者的诊断信息必须写入 stderr,因为 console.log 会破坏 MCP 传输。
当前缺口
覆盖范围会在现有工具集的基础上逐步扩展。印度仍需深入支持的目标是从最新季度的 BSE 持股 iXBRL/XML 中获取 CompanyOwners。由于年度报告 PDF 中的所有权表差异过大,特意不对其进行解析。10 月 20 日的来源检查发现,目前的发现机制受阻,旧版端点提供的数据也已过时,因此在核实当前数据集之前,所有权信息仍不受支持。其他缺口均按司法管辖区记录,而不会以空数据表示。欢迎通过 GitHub 提交建议和问题。
许可证
Apache-2.0。版权所有 Carrotly AI。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。