mcpField
S
SEC EDGAR

SEC EDGAR

本地服务
codeberg.org金融数据03 天前更新

关于 SEC EDGAR

SEC EDGAR 是一个 Rust MCP 服务,可查询美国 SEC 的公司文件、财务数据和企业信息。它处理股票代码到 CIK 的解析、请求身份标识及响应整理,供 Claude Desktop 等客户端使用。

主要功能

  1. 01搜索公司及近期申报文件
  2. 02读取申报文件正文和附件
  3. 03查询 XBRL 财务概念
  4. 04查看内部人交易和机构持仓
  5. 05搜索申报文件全文
  6. 06将股票代码解析为 CIK

适用场景

  1. 01查看公司的最新 10-K 或 8-K
  2. 02比较多家公司的历史营收
  3. 03查找内部人交易或 13F 持仓

MCP 相关

向 MCP 客户端提供 SEC EDGAR 查询和申报文件工具。它缓存股票代码到 CIK 的映射,并将大型 SEC 响应整理为精简 JSON。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
cargosec-mcp0.10.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

sec-mcp

audit

一个 Model Context Protocol 服务,让 Claude Desktop 能够访问 SEC EDGAR 数据——公司申报文件、财务报表和公司信息。无需 API 密钥。它以单个原生二进制文件运行,背后无需 Node、Python 或 Docker 运行时。

为什么需要 MCP?

EDGAR 提供一组公开的 REST 端点,无需 API 密钥,而且 sec.gov/search-filings/edgar-application-programming-interfaces 上的文档也相当清楚。所以严格来说,并不需要 MCP。这个封装带来的好处包括:

  1. 持久的 User-Agent 身份标识。 SEC 的公平访问政策要求在 User-Agent 标头中提供联系邮箱;否则,请求会被限流或拒绝。你肯定不想每次提示词都重新粘贴邮箱。MCP 会将邮箱保存在配置文件中,并在每个请求中附上。

  2. Ticker → CIK 解析与缓存。 每个 EDGAR 端点都以补零至 10 位的 CIK 为键,而不是 ticker。没有工具的话,每次查询都要重新获取约 1 MB 的 company_tickers.json,并从头解析。MCP 会将其缓存一小时。

  3. 文档未详细说明的 URL 构造细节。 XBRL frames 端点中的 CY{period} 前缀、瞬时概念末尾的 I、补零的 CIK,以及存档 URL 中去掉连字符的 accession number。这些细节临时处理时很容易出错;工具中已将其编码好。

  4. 响应整形。 companyfacts 响应有几十 MB,而 filings.recent 则以列优先的平行数组形式排列。两者都能用,但大模型会耗费大量上下文来重新整理它们。MCP 返回经过精简、按行组织的 JSON。

  5. 发现能力。 安装 MCP 后,工具列表本身就会告诉 Claude 它可以查询 SEC 申报文件,并提供常见概念名称。没有 MCP 的话,模型必须记得这些端点的存在。

如果你一年只查看一两份申报文件,就不需要这个工具——直接把 URL 发给 Claude 即可。使用量再高一些,封装就能物有所值:它将“每次对话都解释 URL 规则”变成“直接提出自然语言问题”。

安装

使用 Cargo 安装(Rust 1.88 或更高版本):

cargo install sec-mcp

这会编译 rustls 加密后端(ring),其中包含少量 C 代码,因此构建主机上需要有 C 编译器——但不需要 cmake 或汇编器。macOS(Xcode Command Line Tools)和大多数桌面 Linux 发行版都已包含编译器;精简版 Linux 镜像可能没有——请先安装,例如在 Debian/Ubuntu 上运行 apt install build-essential。

配置 Claude Desktop

编辑 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "sec-edgar": {
      "command": "sec-mcp",
      "args": []
    }
  }
}

重启 Claude Desktop。

首次使用

首次提出与 SEC 相关的请求时,Claude 会说明 SEC EDGAR 公平访问政策要求提供联系邮箱,并在继续之前征求你的许可。你的邮箱会保存在本地的 ~/Library/Application Support/sec-mcp/config.toml 中,仅用于发送给 SEC 的 HTTP User-Agent 标头——不会分享给其他任何地方。

示例提示词

  • "Apple 最近的 SEC 文件有哪些?"
  • "列出 Tesla 过去 5 年的年度营收"
  • "Microsoft 上个季度的净收入是多少?"
  • "根据 SEC,NVDA 属于哪个行业?"
  • "Bridgewater Associates 的 CIK 是多少?最近提交了哪些文件?"
  • "谁持有 Sonos 超过 5% 的股份?其中有人提交过 13D 吗?"
  • "SpaceX 上市前通过私募轮融资了多少?"
  • "Bridgewater 上个季度持有的十大仓位是什么?"
  • "过去一小时提交了哪些 8-K?其中报告了哪些事项?"
  • "列出上周提交的所有 Schedule 13D"
  • "显示 Amazon 最近提交的 10-K 文件"
  • "NYSE 上有哪些名称包含“energy”的股票代码?"
  • "Apple 向 SEC 报告哪些财务指标?"
  • "Airbnb 在 2025 年第一季度业绩公告中给出了什么营收指引?"
  • "总结 Tesla 最新 10-K 中的风险因素"
  • "2024 年哪些公司的营收最高?"

可用工具

工具描述
sec_configure首次设置——保存您的联系邮箱
sec_lookup_cik将股票代码解析为 SEC CIK 编号,或按名称搜索所有 EDGAR 申报方:基金经理、私人发行方,以及没有股票代码的个人
sec_company_infoSIC 代码、行业、注册成立州、财年结束日期、地址
sec_recent_filings近期申报文件(10-K、10-Q、8-K 等),附直接 URL——当表格类型筛选需要时,会自动翻查更早的记录。不指定股票代码时,按表格类型实时列出整个 EDGAR 的最新申报文件,并显示各申报文件的相关方及 8-K 的项目
sec_filing_text申报文件或附件(10-K、10-Q、8-K、财报新闻稿 EX-99.1、代理声明)的文本:章节索引、按项目查找任意章节、在文件中搜索,或从任意位置翻页。提供申报文件后,可按类型列出其文档
sec_full_text_search搜索 2001 年以来申报文件的正文,包括附件——这里唯一能根据公司所说的内容查找公司的工具,无需预先指定公司。可按表格类型、股票代码和日期筛选(修订文件默认排除,除非另有要求);每条命中结果都附有直接文档 URL。不指定查询时,则按表格类型和日期列出 2001 年以来任意时段的申报文件
sec_insider_transactions表格 3、4 和 5——谁在何时买入或卖出、股数及价格,并以通俗语言解释交易代码及脚注。也包括表格 144,即内部人士拟议出售的通知,以及任何 10b5-1 计划日期
sec_institutional_holdings表格 13F——机构管理人(Berkshire、Bridgewater、BlackRock)每季度持有哪些资产,以持仓形式列出,并附价值、占投资组合比例和投票权,可按发行方筛选。发行方名称与申报文件中一致,因为 13F 不含股票代码
sec_private_offerings表格 D——私人公司、基金和上市公司通过未注册发行筹集的资金:发行及售出金额、投资者、申报的豁免条款、支付给经纪人的费用,以及列出的高管、董事和推广人
sec_beneficial_ownership附表 13D 和 13G——持有公司超过 5% 股份的人,以及其投票权和处置权、所持股份类别占比;对于 13D,还包括持有人声明的目的。提供持有人的 CIK 后,可查询其持有的超过 5% 的股份
sec_financial_concept来自 XBRL 的历史财务数据(营收、净收入、每股收益、资产等)——默认显示最新 20 条事实,并可翻查更早的历史数据
sec_list_tickers搜索/列出所有在 SEC 注册的股票代码及交易所信息——每页 50 条,可翻页
sec_company_facts查找公司报告的所有 XBRL 概念(指标)
sec_xbrl_frames对比不同公司的指定期间财务指标

凡是接受股票代码的工具,也接受 CIK(1163302、0001163302 或 CIK0001163302)。SEC 的股票代码列表仅包含当前代码,因此已被收购、退市 或更名的公司只能通过 CIK 查找。可用 sec_lookup_cik 配合 name 查找;全文搜索命中结果和 frames 行中也会包含 CIK。

修订文件(10-K/A 等)

以 /A 结尾的表单会修订之前提交的文件。10-K/A 通常不是完整的年度报告。第 12b-15 条规则只要求提供每项变更内容的全文,因此最常见的修订文件只有第三部分(董事、薪酬、所有权),通常是在委托书错过 120 天期限时提交。其他修订文件会补充或更正附件。其余修订文件则会重述数据,以取代原文件中的数字。例如,Apple 在 2010 年 1 月提交的 10-K/A,依据新的收入确认规则重新提交了 2009 财年报告。

因此,sec-mcp 默认排除修订文件,除非你主动请求:

  • sec_financial_concept 的 annual/quarterly 期间筛选器只匹配基础表单。原始文件已涵盖修订后的期间,同时纳入两者会导致同一期间报告两条数据。若你需要重述后的数据,可传入 include_amendments: true:Apple 2009 财年的收入在原始 10-K 中为 365 亿美元,在 10-K/A 中为 429 亿美元。amended_facts 会统计这些数据。
  • 使用表单筛选器时,sec_full_text_search 会排除修订文件。但 EDGAR 本身不会:它会按文件的根表单筛选,因此 forms=10-K 也会返回 10-K/A。若要获取修订文件,请直接请求该表单(10-K/A)、同时列出两者(10-K,10-K/A),或传入 include_amendments: true。返回的任何修订文件都会标记为 amendment: true。

由于搜索筛选发生在 EDGAR 筛选之后,响应中的两部分与普通搜索有所不同:

  • total 仍是 EDGAR 返回的计数,其中包括被排除的修订文件。该值会标记为 total_is_upper_bound;如果计数还已达到 10000,则会标记为 total_is_approximate。每页都会报告 amendments_excluded。
  • 分页必须使用 next_offset。由于跳过了修订文件,一页返回的结果可能少于 limit,因此使用 offset + returned 会重复获取这些文件。

sec_financial_concept 的常见 XBRL 概念

概念含义
Revenues总收入
NetIncomeLoss净利润 / 亏损
EarningsPerShareBasic基本每股收益
EarningsPerShareDiluted稀释每股收益
Assets总资产
Liabilities总负债
StockholdersEquity股东权益
OperatingIncomeLoss营业利润 / 亏损
CashAndCashEquivalentsAtCarryingValue现金及现金等价物
CommonStockSharesOutstanding流通股数

开发

cargo test          # offline; hits no network

此外,还有一个可选择启用的实时测试套件,会通过标准输入/输出驱动已构建的服务,调用 真实 SEC EDGAR API,以测试离线测试无法发现的问题,例如 EDGAR 更改响应结构,或 URL 构造中的细微问题。只有设置了 SEC_MCP_LIVE_EMAIL 才会运行该套件;设置此变量既表示选择启用,也提供了 公平访问政策 要求的联系邮箱(地址从环境中读取,不会提交到代码库):

SEC_MCP_LIVE_EMAIL="[email protected]" cargo test --test live_smoke -- --nocapture

该测试套件会通过同一个服务进程依次运行,因此完全不会超出 EDGAR 的速率限制。

许可证

MIT — 详情请参阅 LICENSE.md。

MCP registry

MCP registry 的所有权验证令牌(从 crates.io 上此 crate 的渲染版 README 中读取):

Registry 所有权令牌:mcp-name: io.github.brechanbech/sec-mcp

发布版本

版本一经发布便不可更改——crates.io 只能撤回,不能删除,而且版本号永不重复使用——因此顺序很重要:

  1. 确保 cargo test 和 cargo clippy --all-targets 均通过。

  2. 在 Cargo.toml 中提升 version。

  3. 在 server.json 中提升 version——包括两个字段:顶层字段和 packages[] 下的字段。没有任何机制会强制执行这一步:没有脚本、没有 CI,也没有测试会读取该文件,因此这一步最容易被遗漏。清单本身一直是正确的,但注册表的条目却不是:0.5.0、0.5.1 和 0.5.2 都已发布到 crates.io,而注册表仍显示 0.4.4,因为第 6 步一直没有执行。

  4. 提交并推送;发布前先确保 CI 通过,而不是发布后再等 CI 通过。

  5. 运行 cargo publish --dry-run,它会从打包后的副本进行编译,因此能发现 crate 依赖了未随包发布的文件。然后运行 cargo publish。两条命令都要加上 --target-dir target/package-verify。如果不这样做,验证构建会与同一单元哈希下的常规构建共用 target/debug,导致二进制文件的指纹跟踪的是打包后的 src/main.rs,而不是你自己的文件。之后的编辑就不会再触发 target/debug/sec-mcp 重新构建,tests/live_smoke.rs 中的离线 stdio 测试会悄无声息地运行已发布的代码。如果发生这种情况,运行 cargo clean -p sec-mcp 即可修复。

  6. 发布到 MCP 注册表,必须在 crates.io 发布之后,不能提前——注册表会读取该 crate 在 crates.io 上渲染后的 README 中的 mcp-name 来验证命名空间,而 server.json 中指定的 cargo 版本必须已在 crates.io 上发布:

    mcp-publisher validate      # checks server.json against the live registry
    mcp-publisher login github  # interactive, for the io.github.brechanbech/* namespace
    mcp-publisher publish
    
  7. 在 Codeberg 和 GitHub 镜像上分别为该标签创建发布版本,并将该版本对应的 CHANGELOG 章节作为说明。仅有标签不算发布版本:Glama 会读取 GitHub 镜像;尽管镜像包含了所有标签,却没有任何发布版本,因此 Glama 报告了“No stable releases found”。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。