SEC文件分析服务

SEC-MCP是一个用于分析SEC文件(10-K、10-Q、8-K)的服务,提供行业感知的财务提取和基于BERT的自然语言处理功能。

  • by Aomala
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Aomala/SEC-MCP

使用说明

SEC-MCP

MCP服务器,用于分析SEC文件(10-K、10-Q、8-K) 行业意识金融提取 以及基于BERT的NLP。

特性

  • 公司搜索 --通过SEC EDGAR按股票代码或名称查找公司
  • 标准化财务 --具有行业意识的XBRL提取,包含5个行业类别(标准、银行、保险、房地产投资信托基金、公用事业)的约250个概念映射
  • 验证 --自动健全性检查(收入≥净收入、会计等式、部门与总检测)
  • 归档访问权限 --获取归档文本和具体章节(风险因素、MD&A等)
  • 情感分析 --FinBERT金融情绪(积极/消极/中性)
  • 摘要 --基于BART的长文件段分层摘要
  • 实体抽取 --NER表示公司、人员、地点+正则表达式表示货币价值、日期、百分比

设置

# Clone
git clone https://github.com/YOUR_USERNAME/SEC-MCP.git
cd SEC-MCP

# Create virtual environment
python3 -m venv .venv
source .venv/bin/activate

# Install
pip install -e ".[dev]"

# Configure EDGAR identity (required by SEC)
cp .env.example .env
# Edit .env and set EDGAR_IDENTITY="Your Name your@email.com"

可用工具

基地/发现

工具 说明
search_company 按股票代码/姓名搜索→ CIK、股票代码、SIC代码、行业
get_filing_list 列表文件,按表格类型筛选(10-K、10-Q、8-K)

财务(标准化、行业意识、验证)

工具 说明
get_financials 完全标准化的提取:指标、比率、验证、选择。声明
get_financials_batch 与上述并行N个股票相同
get_income_statement 只有损益表行
get_balance_sheet 只有资产负债表行
get_cash_flow 只有现金流行
get_financial_ratios 刚刚计算的比率(利润率、ROA、ROE、杠杆率等)
compare_companies 并列指标+多个股票的比率

归档文本

工具 说明
get_filing_text 完整归档或特定章节文本(支持“风险因素”等别名)

NLP分析

工具 说明
analyze_sentiment FinBERT对文本或文件部分的看法
summarize_filing 分层BART总结
extract_entities NER(组织、个人、地点、金钱、日期、百分比)
analyze_filing 在一次通话中结合情感+总结+实体

财务提取是如何工作的

行业检测

SIC代码用于将公司分为5个行业类别之一:

类别 SIC范围 收入策略
标准 其他一切 第一场比赛: Revenues, RevenueFromContractWithCustomer, SalesRevenueNet, …
银行 6020–6299 尝试总计(Revenues, NetRevenues),然后汇总NII+非利息+交易+费用
保险 6310–6411 先尝试合计,然后再尝试合计保费+投资收入+费用
房地产投资信托基金 6500–6553 租赁收入+其他收入
效用 4900–4991 电力+天然气公用事业收入

XBRL概念词典

xbrl_mappings.py 将约250个XBRL概念映射到20多个标准化指标。每个指标都有一个有序的概念列表可供尝试——首选较早的条目。某些条目已标记 aggregate=True (将所有匹配项相加,用于银行等多组件收入)。

验证规则

每次提取都会进行以下检查:

  1. 收入≥净收入 (当两者均为正值时)——仅捕捞部分收入
  2. 资产=负债+权益 (5%以内)——捕捉不匹配的概念
  3. 收入不为零 --如果没有匹配的概念,则发出警告
  4. 银行部门检查 --如果银行收入<净收入的80%,则标记
  5. 毛利率0–100% --对于标准公司

警告在中返回 validation 数组,以便AI可以解释或重试。

用法

以MCP服务器(STDIO)运行

python -m sec_mcp.server

与您的应用程序(Cursor、Claude Desktop等)一起使用

  1. 配置MCP 因此,您的应用程序将启动SEC-MCP服务器(见下文)。
  2. 集 EDGAR_IDENTITY 在 .env 或者在MCP服务器环境中。
  3. AI根据请求选择正确的工具:
    • “苹果的财务状况”→ get_financials("AAPL")
    • “比较AAPL、MSFT和GOOGL”→ compare_companies(["AAPL","MSFT","GOOGL"])
    • “摩根士丹利损益表”→ get_income_statement("MS")
    • “苹果的风险因素是什么?”→ get_filing_text 第节=“风险因素”

光标/Claude桌面配置

{
  "mcpServers": {
    "sec-mcp": {
      "command": "python",
      "args": ["-m", "sec_mcp.server"],
      "cwd": "/path/to/SEC-MCP",
      "env": {
        "EDGAR_IDENTITY": "Your Name your@email.com"
      }
    }
  }
}

配置

变量 默认值 描述
EDGAR_IDENTITY SEC-MCP sec-mcp@example.com 您在SEC EDGAR API的身份
SENTIMENT_MODEL ProsusAI/finbert 情感分析模型
SUMMARIZATION_MODEL facebook/bart-large-cnn 总结模型
NER_MODEL dslim/bert-base-NER NER模型
MAX_CHUNK_TOKENS 512 每个区块的最大令牌数
CHUNK_OVERLAP_TOKENS 128 块之间的重叠

建筑

src/sec_mcp/
├── server.py           # MCP tool definitions (14 tools)
├── edgar_client.py     # EDGAR API wrapper (company search, filings, text)
├── financials.py       # Standardized extraction engine + validation
├── xbrl_mappings.py    # XBRL concept → metric dictionary (5 industry classes)
├── models.py           # Pydantic models (StandardizedFinancials, ratios, etc.)
├── config.py           # Environment config
└── nlp/
    ├── sentiment.py    # FinBERT
    ├── summarizer.py   # BART
    └── ner.py          # NER

NLP模型

模型是延迟加载的(首次使用时下载,总计约2.5GB):

  • 进程AI/finbert --金融情绪,根据美国证券交易委员会的文件进行培训
  • 脸书/巴特大型cnn --抽象概括
  • dslim/bert基NER --命名实体识别

发展

# Run tests
pytest

# Run tests (skip slow model tests)
pytest -m "not slow"

# Lint
ruff check src/ tests/

许可证

麻省理工学院