使用说明
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 (将所有匹配项相加,用于银行等多组件收入)。
验证规则
每次提取都会进行以下检查:
- 收入≥净收入 (当两者均为正值时)——仅捕捞部分收入
- 资产=负债+权益 (5%以内)——捕捉不匹配的概念
- 收入不为零 --如果没有匹配的概念,则发出警告
- 银行部门检查 --如果银行收入<净收入的80%,则标记
- 毛利率0–100% --对于标准公司
警告在中返回 validation 数组,以便AI可以解释或重试。
用法
以MCP服务器(STDIO)运行
python -m sec_mcp.server
与您的应用程序(Cursor、Claude Desktop等)一起使用
- 配置MCP 因此,您的应用程序将启动SEC-MCP服务器(见下文)。
- 集
EDGAR_IDENTITY在.env或者在MCP服务器环境中。 - 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/
许可证
麻省理工学院