莫迪。埃德加
CNET库,用于访问安全交换委员会的EDGAR数据库,具有现代异步/等待模式和依赖注入支持。
  
“Moedim”是一个希伯来语单词,翻译为“盛宴”或“约定时间” “指定时间”是指《Vayikra》/《利未记》第23章中的哈闪节。 这些节日是“信号和标志”,帮助我们了解哈希姆的内心。
特性
- 现代HTTP客户端 -使用IHttpClientFactory进行高效可靠的HTTP通信
- 依赖注入 -对微软的一流支持。扩展。依赖注入
- 类型安全模型 -SEC EDGAR数据结构的强类型模型
- 异步/等待 -整个API完全异步
- 重试逻辑 -内置重试机制,用于处理速率限制和瞬态故障
- 可配置的 -用于自定义行为的灵活选项模式
- 有据可查 -所有公共API的全面XML文档
- 多框架支持 -目标。净值8.0
- 📄 文献检索 -以干净的Markdown或HTML格式下载完整的SEC文件
- ✂️ 智能断面提取 -从文件中解析和提取特定部分(风险因素、MD&A等)
- 🔍 章节预览 -在下载完整内容之前浏览归档部分
- 💾 内置缓存 -自动缓存以减少API调用并提高性能
- 🤖 MCP服务器 -用于LLM集成的模型上下文协议服务器(包含在Moedim.Edgar.Mcp包中)
雇用我
请发送 电子邮件 如果你考虑 雇用我.

给一颗星!:星:
如果你喜欢或正在使用这个项目来学习或开始你的解决方案,请给它一颗星。谢谢!
安装
dotnet add package Moedim.Edgar用于AI集成的MCP服务器
对于通过模型上下文协议(MCP)集成AI助手,请安装配套的MCP服务器包:
# Install via dnx (recommended)
dnx Moedim.Edgar.Mcp --version 1.0.0 --yesMCP服务器提供:
- 17工具 用于访问SEC EDGAR数据(公司事实、文件搜索、文件检索、章节提取)
- 6个引导提示 用于结构化分析工作流程(公司评估、同行比较、变更跟踪等)
看 src/Moedim。埃德加。Mcp/README.md 获取完整文档。
快速开始
1.配置服务
using Moedim.Edgar.Extensions;
services.AddSecEdgar(options =>
{
options.AppName = "YourCompany";
options.AppVersion = "1.0.0";
options.Email = "your@email.com";
options.RequestDelay = TimeSpan.FromMilliseconds(100);
options.MaxRetryCount = 3;
});2.使用服务
using Moedim.Edgar.Models;
public class FinancialDataService
{
private readonly ICompanyFactsService _companyFactsService;
private readonly ICompanyConceptService _companyConceptService;
public FinancialDataService(
ICompanyFactsService companyFactsService,
ICompanyConceptService companyConceptService)
{
_companyFactsService = companyFactsService;
_companyConceptService = companyConceptService;
}
public async Task GetCompanyFactsAsync(int cik)
{
return await _companyFactsService.QueryAsync(cik);
}
public async Task GetRevenueDataAsync(int cik)
{
return await _companyConceptService.QueryAsync(cik, "Revenues");
}
}使用示例
检索公司事实
// Get all facts for a company (e.g., Apple Inc. - CIK: 320193)
var facts = await companyFactsService.QueryAsync(320193);
// Access company information
Console.WriteLine($"Company: {facts.EntityName}");
Console.WriteLine($"CIK: {facts.Cik}");
// Iterate through facts
foreach (var fact in facts.Facts)
{
Console.WriteLine($"Concept: {fact.Label}");
Console.WriteLine($"Value: {fact.Value}");
}查询特定概念
// Get specific financial concept (e.g., Revenues)
var revenues = await companyConceptService.QueryAsync(320193, "Revenues");
// Access data points
foreach (var dataPoint in revenues.DataPoints)
{
Console.WriteLine($"Period: {dataPoint.FiscalPeriod}");
Console.WriteLine($"Value: {dataPoint.Value:C}");
Console.WriteLine($"Filed: {dataPoint.Filed:d}");
}下载归档文件(新)
// Get complete filing as clean Markdown
var markdown = await filingDetailsService.GetFilingDocumentAsync(
accessionNumber: "0000320193-23-000077",
tickerOrCik: "AAPL",
format: "markdown"
);
// Or get as HTML
var html = await filingDetailsService.GetFilingDocumentAsync(
accessionNumber: "0000320193-23-000077",
format: "html"
);提取特定章节(新增)
// First, preview available sections
var previewRequest = new FilingSectionsRequest { PreviewOnly = true };
var preview = await filingDetailsService.GetFilingSectionsAsync(
accessionNumber: "0000320193-23-000077",
request: previewRequest
);
// Display available sections
foreach (var section in preview.Preview)
{
Console.WriteLine($"{section.AnchorTargetId}: {section.Label}");
}
// Then, get specific sections
var sectionsRequest = new FilingSectionsRequest
{
PreviewOnly = false,
AnchorIds = new[] { "item_1a_risk_factors", "item_7_managements_discussion_analysis" },
Merge = true, // Combine sections into single content
Format = "markdown"
};
var result = await filingDetailsService.GetFilingSectionsAsync(
accessionNumber: "0000320193-23-000077",
request: sectionsRequest
);
Console.WriteLine(result.MergedContent); // Clean markdown of selected sections配置选项
services.AddSecEdgar(options =>
{
// Required: SEC requires identification
options.AppName = "YourCompany";
options.AppVersion = "1.0.0";
options.Email = "your@email.com";
// Optional: Delay between requests (default: 250ms)
options.RequestDelay = TimeSpan.FromMilliseconds(100);
// Optional: Delay after rate limit hit (default: 2 seconds)
options.TimeoutDelay = TimeSpan.FromSeconds(1);
// Optional: Maximum retry attempts (default: 10)
options.MaxRetryCount = 3;
// Optional: Override retry behavior (defaults shown)
options.RetryCountOverride = 5; // total attempts including the initial call
options.RetryDelay = TimeSpan.FromSeconds(1); // fallback when no Retry-After header is returned
options.UseExponentialBackoff = true; // multiply delay after each retry
options.RetryBackoffMultiplier = 1.5; // growth factor for exponential strategy
});需求
- .NET 8.0或更高版本
- C#11或更高版本(用于消费项目)
- Visual Studio 2022或Rider(为了获得最佳的IDE支持)
项目结构
- 莫迪。埃德加 -包含服务、模型和扩展的核心库
- Services/ -SEC EDGAR客户端和服务实施 - Models/ -数据模型和查询类型 - Extensions/ -依赖注入扩展
- 莫迪。埃德加。模型上下文协议(Model Context Protocol) -用于AI辅助集成的模型上下文协议服务器
- Tools/ -MCP工具实施(17个工具) - Prompts/ -引导式分析工作流程(6个提示) - 看 src/Moedim。埃德加。Mcp/README.md 详情
API 文档
核心服务
- ISecEdgarClient -SEC EDGAR API的低级HTTP客户端
- ICompanyFactsService -检索所有公司事实的服务
- ICompany一次性服务 -查询特定财务概念的服务
- ICompany查询服务 -从股票代码查找公司CIK的服务
- IEdgar搜索服务 -公司档案检索服务
- IEdgar最新归档服务 -检索最新文件的服务
- IFiling详细信息服务 -检索归档详细信息、文件和部分的服务
- ICacheService -用于缓存SEC EDGAR数据的服务(实现为LocalFileCache)
新功能(v1.1.0)
文献检索
这 IFilingDetailsService 现在支持下载Markdown或HTML格式的完整归档文档:
Task GetFilingDocumentAsync(
string accessionNumber,
string? tickerOrCik = null,
string? format = null,
CancellationToken cancellationToken = default);- 访问编号:美国证券交易委员会登录号(例如“0000320193-23-0000077”)
- 滴答声:可选股票代码或CIK,以帮助定位文件
- 格式:“markdown”(默认)或“html”
- 退货:按照要求的格式完成归档内容
剖面提取
使用两步工作流程从文件中提取特定部分:
第一步:预览章节
Task GetFilingSectionsAsync(
string accessionNumber,
FilingSectionsRequest request,
string? tickerOrCik = null,
CancellationToken cancellationToken = default);随着 request.PreviewOnly = true,返回没有完整内容的节ID和标题。
第二步:获取完整章节 随着 request.PreviewOnly = false 和具体 request.AnchorIds,返回所选部分的全部内容。
归档部分请求属性:
PreviewOnly-仅返回节元数据AnchorIds-要检索的节ID列表Format-“markdown”(默认)或“html”Merge-将所有部分合并到单个内容块中
缓存
内置缓存减少了API调用并提高了性能:
- 自动缓存归档文件(24小时)
- 缓存段解析结果
- 默认情况下基于本地文件的缓存
- 缓存目录:
.edgar_cache在临时文件夹中
数据模型
- 公司概况查询 -所有公司事实的容器
- 公司概念查询 -特定概念数据的容器
- 事实 -带有标签、值和元数据的个人事实
- 事实数据点 -事实的时间序列数据点
- 会计期间 -会计期间的计数(Q1、Q2、Q3、Q4、FY)
贡献
欢迎投稿!请随时提交拉取请求。
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
致谢
内置:
版本历史记录
看 更改日志.md 查看版本历史和发行说明。
