mcpField
S
SEC EDGAR Filings

SEC EDGAR Filings

本地服务
github.com/SudiptoHaldar金融数据04 天前更新

关于 SEC EDGAR Filings

SEC EDGAR Filings 是只读 MCP 服务,为股票代码提供 SEC 备案元数据和官方 EDGAR 链接,适用于研究者和金融信息工作流。它提供最新备案、按自然年列出的备案及表格类型目录,但不读取或总结备案内容。

主要功能

  1. 01按股票代码查找最新备案
  2. 02按备案年份分页列出记录
  3. 03筛选 SEC 表格类型
  4. 04提供官方 EDGAR 链接
  5. 05通过资源和提示词供客户端使用

适用场景

  1. 01查看公司最新的 SEC 备案日期和类型
  2. 02整理某一自然年的公司备案
  3. 03查询筛选备案所需的 EDGAR 表格代码

MCP 相关

该服务通过 stdio 使用 MCP,向客户端提供 3 个只读工具、5 个资源和 3 个提示词,用于查询备案元数据及官方链接。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"sudiptohaldar-mcp-server-edgar": {
"command": "uvx",
"args": [
"mcp-server-edgar"
],
"env": {
"MCP_EDGAR_USER_AGENT": "<MCP_EDGAR_USER_AGENT>"
}
}
}
}
启动命令uvx mcp-server-edgar
需要配置的环境变量
MCP_EDGAR_USER_AGENTSEC fair-access identification: your product name and contact e-mail, e.g. acme-research/1.0 ([email protected]). Optional; the default names the maintainer.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimcp-server-edgar0.1.2

工具

3

收录的工具列表 · 更新于 4 天前

参数类型必填说明
cikany否
formsany否
tickerstring是

详细介绍

SEC EDGAR MCP 服务

CI PyPI MCP Registry

一个只读的 Model Context Protocol 服务,通过标准输入输出运行,接收股票代码,将其解析为 SEC 的中央索引键(CIK),并返回带有 EDGAR 官方链接的申报元数据。它提供三个工具、五种资源和三个提示词。无需 API 密钥:SEC EDGAR 是公开的,且该服务只会通过描述性 User-Agent 标识自身。服务不会读取、下载或总结申报内容;它只会告诉你有哪些申报,以及它们在 sec.gov 上的位置。

已发布到 PyPI,包名为 mcp-server-edgar,并以 io.github.SudiptoHaldar/mcp-server-edgar 的名称列入 Official MCP Registry。

安装和运行

该服务是一个带有控制台入口点的 Python 包。最简单的运行方式是使用 uv,它会在需要时获取 Python 3.11 或更高版本:

uvx mcp-server-edgar

或者将其安装到任何装有 Python 3.11 或更高版本的环境中:

pip install mcp-server-edgar
mcp-server-edgar

可执行文件通过标准输入和标准输出使用 MCP,设计为由 MCP 客户端启动,因此单独运行时会等待客户端连接。若要交互式试用,请使用 MCP Inspector:

npx -y @modelcontextprotocol/inspector uvx mcp-server-edgar

配置 MCP 客户端

Claude Desktop 和大多数其他使用 JSON 配置的客户端都需要一个 mcpServers 条目。可选的 env 块用于设置 SEC 公平访问联系信息(参见配置):

{
  "mcpServers": {
    "sec-edgar": {
      "command": "uvx",
      "args": ["mcp-server-edgar"],
      "env": {
        "MCP_EDGAR_USER_AGENT": "acme-research/1.0 ([email protected])"
      }
    }
  }
}

Claude Code:

claude mcp add sec-edgar -- uvx mcp-server-edgar

工具

这三个工具均为只读,并会返回一个 JSON 对象,其中的 status 字段说明了处理结果(参见结果和错误)。年份始终指申报日期,即 SEC 收到申报的日期,而非申报所涉及的期间。

get_latest_filing — 最新 SEC 申报

获取某个股票代码的最新申报,可选按指定表单类型筛选。

参数类型默认值含义
tickerstring必填股票代码,例如 AAPL;大小写和首尾空格会被忽略;BRK.B 和 BRK-B 等价
formslist of strings所有表单精确的表单类型,不区分大小写:["10-K"] 会匹配 10-K,但不会匹配 10-K/A
cikstring or integer无SEC CIK(1–10 位数字),仅在返回 ambiguous 时使用,用于从候选项中选定一个;该 CIK 必须列在该股票代码下

调用示例 get_latest_filing("AAPL", ["10-K"]);以下为删节后的结果,数值截至 2026-11-01:

{
  "status": "ok",
  "company": {"cik": "0000320193", "name": "Apple Inc.", "ticker": "AAPL", "exchange": "Nasdaq"},
  "forms": ["10-K"],
  "filing": {
    "form": "10-K",
    "filing_date": "2025-10-31",
    "report_date": "2025-09-27",
    "accession_number": "0000320193-25-000079",
    "filing_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000079/0000320193-25-000079-index.htm",
    "primary_document_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000079/aapl-20250927.htm"
  },
  "message": "Newest 10-K by Apple Inc. (AAPL): filed 2025-10-31."
}

如果公司没有所请求表单类型的申报,filing 将为 null。

list_filings_by_year — 按年份查看申报文件

公司在一个日历年内提交的所有申报文件,按时间从新到旧排列,分页显示。

参数类型默认值含义
tickerstring必填同上
yearinteger必填申报日期所在的日历年,须为 1993 年或之后;未来年份会返回空列表
formslist of strings所有表单同上
limitinteger100每页条目数;较大的值会被限制为服务端上限
offsetinteger0要跳过的申报文件数;传入上一结果的 next_offset
cikstring or integer无同上

年份指申报年份,而非财年:Apple 截至 2025 年 9 月的财年 10-K 于 2025-10-31 提交,因此属于 year=2025;财年为 2025、于 2026 年 1 月提交的 10-K 则属于 year=2026。较早年份会自动从 SEC 的历史文件中提供。

调用示例 list_filings_by_year("AAPL", 2025, ["10-K", "10-Q"]);以下为删节后的结果,数据截至 2026-11-01:

{
  "status": "ok",
  "company": {"cik": "0000320193", "name": "Apple Inc.", "ticker": "AAPL", "exchange": "Nasdaq"},
  "year": 2025,
  "forms": ["10-K", "10-Q"],
  "limit": 100,
  "offset": 0,
  "total_count": 4,
  "returned_count": 4,
  "next_offset": null,
  "filings": [
    {
      "form": "10-K",
      "filing_date": "2025-10-31",
      "report_date": "2025-09-27",
      "accession_number": "0000320193-25-000079",
      "filing_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000079/0000320193-25-000079-index.htm",
      "primary_document_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019325000079/aapl-20250927.htm"
    }
  ],
  "message": "Apple Inc. (AAPL): 4 filings of form 10-K, 10-Q with a filing date in 2025."
}

要获取下一页,请再次调用并将 offset 设为 next_offset,直到其值为 null。各页之间不会重叠。没有申报文件的年份会返回 ok,且 total_count 为 0。

list_form_types — EDGAR 表单类型

最近几个季度提交的 EDGAR 申报类型代码,按常见程度从高到低排列。可用它了解 forms 接受哪些值:form 与 EDGAR 使用的代码完全一致(10-K、10-K/A、SCHEDULE 13G/A、424B2、NPORT-P)。

参数类型默认值含义
querystring无对代码和描述进行不区分大小写的文本匹配;"10-K" 会列出 10-K、10-K/A、10-KT 等;"/A" 会列出修订文件
limitinteger100每页条目数
offsetinteger0要跳过的条目数;传入上一结果的 next_offset

此目录是随软件包附带的快照,统计发行版发布前已完成的四个季度的数据,并在每次发布时更新;catalogue.generated_on 和 catalogue.quarters 会说明对应的信息。调用此工具不会向 SEC 发出请求。已知表单编号的 description 和 topics 来自 SEC Forms List,否则为 null。

调用示例 list_form_types("10-K");以下为删节后的结果,数据截至 2026-11-01:

{
  "status": "ok",
  "query": "10-K",
  "total_count": 6,
  "returned_count": 6,
  "next_offset": null,
  "catalogue": {"generated_on": "2026-11-01", "quarters": ["2025Q4", "2026Q1", "2026Q2", "2026Q3"]},
  "form_types": [
    {"form": "10-K", "description": "Annual report pursuant to Section 13 or 15(d)", "amendment": false, "filings": 6723},
    {"form": "10-K/A", "description": "Annual report pursuant to Section 13 or 15(d)", "amendment": true, "filings": 616}
  ],
  "message": "6 form types match '10-K' in 2025Q4-2026Q3."
}

结果与错误

每个工具都会返回一个 JSON 对象。预期内的情况会通过 status 报告,而不会作为协议错误返回,因此客户端可以据此采取相应操作:

status含义还包含
ok请求成功如上所示的 company,以及 filing / filings / form_types
not_foundSEC 未将该股票代码列为发行人—
ambiguous多个发行人使用同一股票代码;未选择任何一个candidates:{cik, name, ticker, exchange} 列表;使用选定的 cik 再次调用
invalid_input发出请求前拒绝了某个参数field:有问题的参数
upstream_errorSEC EDGAR 未能及时响应、进行了限流或返回了错误数据retryable(布尔值)和 retry_after_seconds(可能为 null)

每个对象还包含一条简短的 message。申报文件记录始终包含 form、filing_date、report_date(所涵盖的期间,仅供参考,可能为 null)、accession_number 和 filing_url(sec.gov 上的官方申报索引页);当 SEC 列出了主文档且文件名安全时,primary_document_url 会指向该文档,否则为 null。

资源

可以将资源作为上下文附加的客户端,无需调用工具即可直接读取这些 JSON 文档。它们与工具由同一代码路径构建,因此资源和对应工具的结果始终一致。

URIPayload
edgar://companies/{ticker}/profile{cik, name, ticker, exchange, tickers}:发行人的身份信息,以及 SEC 在该 CIK 下列出的所有 ticker(GOOGL → ["GOOGL", "GOOG"])
edgar://companies/{ticker}/latest{company, filing}:与 get_latest_filing(ticker) 返回的 company 和 filing 完全一致;若发行人没有申报文件,则 filing 为 null
edgar://issuers/{cik}/profile按 CIK 查找的资料(接受任意 1–10 位数字的写法)
edgar://issuers/{cik}/latest按 CIK 查找的最新申报文件
edgar://form-types{catalogue, form_types}:完整的内置目录,不分页

ticker 存在歧义时,请使用 edgar://issuers/{cik}/… 路由;该 CIK 必须列在 SEC ticker 映射表中。资源没有 status 封装:未知 ticker、格式错误或未列出的 CIK,或不匹配的 URI,都会产生资源未找到错误;有歧义的 ticker 或 SEC 服务中断会产生资源错误。两种错误携带的消息文本均与工具使用的相同。

提示词

提示词是可重复使用的指令,由用户从客户端的提示词菜单中选择;客户端会插入渲染后的文本,然后模型使用工具。提示词不包含实时数据。

提示词标题参数渲染后的文本要求模型
review_latest_filing审阅最新 SEC 申报文件ticker(必填)调用 get_latest_filing,引用表格类型和 filing_date,链接 filing_url,将 report_date 视为所涵盖的期间,并区分申报文件中的陈述与解读
review_filings_by_year审阅某日历年的申报文件ticker、year(均必填)调用 list_filings_by_year,使用 offset = next_offset 分页,直到其值为 null;按表格类型分组,总结该年度,并为每条记录添加链接
explain_form_types说明 EDGAR 表格类型query(可选)调用 list_form_types,说明常见代码,指出 /A 表示修订版,且目录是带日期的快照

每条提示词末尾都包含相同的限制:仅使用元数据和 sec.gov 官方链接;服务不会读取申报文件内容;每份申报文件都要引用 EDGAR 链接;不得提供投资建议;若答案为 ambiguous,则在再次调用并提供 cik 前,先询问指的是哪家发行人。

配置

所有设置均为带默认值的环境变量。未设置或值为空时会使用默认值;值无效则会以退出代码 1 停止启动,并在 stderr 输出一行指出变量名称。

变量默认值可接受值用途
MCP_EDGAR_USER_AGENTmcp-server-edgar/<version> ([email protected])非空,且必须包含 @向 SEC 标识身份以遵守公平访问要求,并提供维护者联系方式;请设置为你自己的值
MCP_EDGAR_TIMEOUT_SECONDS30大于 0 的数字SEC 请求的 HTTP 超时时间
MCP_EDGAR_TICKER_MAP_TTL_SECONDS86400大于或等于 0 的整数(0 = 不缓存)SEC ticker 映射表的缓存时长
MCP_EDGAR_SUBMISSIONS_TTL_SECONDS3600大于或等于 0 的整数公司申报记录的缓存时长
MCP_EDGAR_PAGE_CAP1001..1000 的整数list_filings_by_year 和 list_form_types 返回的最大页大小
MCP_EDGAR_MAX_REQUESTS_PER_SECOND101..10 的整数请求速率上限;SEC 允许的请求速率最高为每秒 10 次,服务无法设置更高值
MCP_EDGAR_LOG_LEVELINFODEBUG、INFO、WARNING、ERROR、CRITICAL日志级别

SEC 要求每个自动化客户端使用联系地址标识自身,因此请将 MCP_EDGAR_USER_AGENT 设置为你自己的产品名称和电子邮件地址。日志仅输出到 stderr;stdout 用于承载协议。

如何使用 SEC EDGAR

  • 股票代码转 CIK:https://www.sec.gov/files/company_tickers_exchange.json,缓存一天。一个股票代码对应多个 CIK 时会报告为 ambiguous;一个 CIK 对应多个股票代码(GOOGL、GOOG)时,视为同一发行方。
  • 申报文件:https://data.sec.gov/submissions/CIK##########.json(CIK 补零至十位数字),缓存一小时。较早年份的数据从申报文件中列出的历史文件读取,且只读取日期范围与所请求年份重叠的文件。
  • 链接:始终返回申报文件索引页 …/Archives/edgar/data/<cik>/<accession>/<accession>-index.htm;主文档链接根据 SEC 提供的文件名构建,并会拒绝任何不是普通文件名的内容。
  • 公平访问:每秒最多 10 个请求,使用描述性 User-Agent,每个进程单独进行内存缓存,并对 HTTP 429 和暂时性 5xx 响应进行有上限的退避重试。如果 SEC 仍未响应,工具会返回 upstream_error 和重试提示,而不是空结果。请参阅 SEC 的 EDGAR API 文档。

已知限制

  • 仅提供元数据和链接:不提供申报文件内容、XBRL 财务数据、摘要或投资建议。
  • year 指 SEC 收到申报文件的日历年份,而非其所报告的财年。
  • 1993 年之前的年份(电子申报的起始年份)会被拒绝为 invalid_input。
  • 只能查询 SEC 股票代码映射表中列出的发行方;没有列出股票代码的基金和私人申报方不在支持范围内,且服务绝不会查询任意 CIK。
  • 表单类型目录是每次发布前生成的快照,并非实时列表。
  • 仅支持 stdio 传输;没有 HTTP 端点,也不需要身份验证。
  • 缓存仅在单个服务进程的生命周期内保留在内存中。
  • 本项目与美国证券交易委员会无关联,也未获其认可。

开发

git clone https://github.com/SudiptoHaldar/mcp_server_edgar
cd mcp_server_edgar
uv sync
uv run pytest -q                                  # unit tests never touch the network
uv run pytest -q -m live                          # opt-in checks against the real SEC
uv run ruff check .
uv run mcp dev src/mcp_edgar/server.py            # MCP Inspector GUI
uv run python scripts/inspector_checklist.py      # 27-row CLI checklist (needs Node and network)

发布前,请刷新随项目打包的表单类型目录,然后进行构建:

uv run python scripts/refresh_form_types.py
uv build

问题和拉取请求:https://github.com/SudiptoHaldar/mcp_server_edgar/issues。

许可证

MIT,详见 LICENSE。SEC EDGAR 数据属于公有领域,此处依照 SEC 的公平访问规则提供。

评论

支持 Markdown

第一次接触 MCP?

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

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