disclosures
Enables corporate disclosure research through official SEC EDGAR and GLEIF sources, providing tools for company resolution, filings, insiders, ownership, financials, and private raises via natural language.
README
disclosures
Free, open-source corporate-disclosure research through official sources. disclosures is both a TypeScript library and a stdio Model Context Protocol server.
Version 0.1 ships seven data sources behind seven jurisdiction-agnostic tools:
- US SEC EDGAR (default) — filings, annual/quarterly report metadata, Section 16 insiders, Schedule 13D/13G filers, annual XBRL financials, and Form D private raises.
- GLEIF LEI (global) — entity resolution and reported direct/ultimate accounting-consolidation relationships.
- UK Companies House (
jurisdiction: "GB") — company resolution, filing history, the officer register, and persons-with-significant-control records. - South Korea DART / OpenDART (
jurisdiction: "KR") — company resolution, periodic reports, executive/major-shareholder ownership, 5% mass-holding reports, and annual major-account financials. - Japan EDINET (
jurisdiction: "JP") — company resolution and date-indexed disclosure documents (annual securities reports, quarterly/semi-annual reports, and more). - China cninfo (
jurisdiction: "CN") — keyless company resolution across the Shanghai and Shenzhen exchanges (and HKEX mirror) plus a date-filterable announcement feed with direct PDF links and latest annual/quarterly periodic-report lookup. - India BSE (
jurisdiction: "IN") — keyless company resolution and a corporate-announcement feed with attachment PDF links ("BSE-lite"; shareholding data is not surfaced).
The seven tool names and schemas stay stable as jurisdictions are added; each new source dispatches behind the same intents rather than adding jurisdiction-specific tool names. Every tool states its data source, its coverage limits, and that absence of a filing is not proof an event never happened.
Tools
| Tool | Returns |
|---|---|
CompanyResolve |
Canonical candidates and known CIK, ticker, LEI, and jurisdiction identifiers. |
CompanyFilings |
Filing dates, types, descriptions, and direct SEC links; a latest-report mode returns metadata and links to key sections, not the section text. |
CompanyInsiders |
Recent named directors, officers and titles, and 10% owners reported in Forms 3/4/5. |
CompanyOwners |
Schedule 13D/13G filers with form, date, links, and the US 5% threshold regime. |
CompanyFinancials |
Annual as-filed revenue, income, balance-sheet, EPS, cash-flow, and R&D facts by fiscal period end. |
OwnershipChain |
GLEIF direct and ultimate accounting-consolidating parents, reporting exceptions, and known direct children. |
PrivateRaises |
US Form D exempt offerings, amounts, investor counts, and named executives/directors/promoters. US-only in v1. |
All company inputs accept a name or a jurisdiction-specific identifier: a ticker/CIK or LEI (US), a Companies House company number (GB), an OpenDART 8-digit corp code or 6-digit stock code (KR), an EDINET code (E + 5 digits), 4/5-digit securities code, or 13-digit corporate number (JP), a 6-digit A-share or 5-digit HK stock code (CN), or a 6-digit BSE scrip code (IN). Tools accept jurisdiction: "US" | "GB" | "KR" | "JP" | "CN" | "IN" (default US); OwnershipChain is global via GLEIF.
Where a jurisdiction lacks a normalized equivalent to a US intent — for example EDINET has no Section 16-style insider feed, neither Companies House nor DART nor EDINET exposes a Form D-equivalent private-raise dataset, and Chinese/Indian ownership and financial detail lives inside report PDFs this release does not parse — the tool returns an explicit unsupported-jurisdiction explanation rather than an empty or fabricated result. For CN and IN, CompanyFilings returns real announcement PDF links; the deeper insider/owner/financial intents are the ones that degrade honestly.
SEC User-Agent configuration
SEC EDGAR requires a descriptive User-Agent containing contact information. Set:
export DISCLOSURES_USER_AGENT="Your Organization your-email@example.com"
SEC_EDGAR_USER_AGENT is also accepted for compatibility. DISCLOSURES_USER_AGENT takes precedence. No API key is required for SEC EDGAR or GLEIF.
Non-US jurisdiction credentials
Each non-US source uses its own free API key. Provide only the keys for the jurisdictions you query; US/GLEIF calls keep working without them.
| Jurisdiction | Environment variable | Where to get it | Notes |
|---|---|---|---|
| GB — Companies House | COMPANIES_HOUSE_API_KEY |
developer.company-information.service.gov.uk | Required for all GB operations. |
| KR — OpenDART | OPENDART_API_KEY |
opendart.fss.or.kr | Required for all KR operations. |
| JP — EDINET | EDINET_API_KEY |
EDINET API (v2) registration | Required only for document search; JP CompanyResolve works without it because the EDINET code list is public. |
| CN — cninfo | (none) | — | Keyless. Resolution and the announcement feed use public POST endpoints. |
| IN — BSE | (none) | — | Keyless. BSE's api.bseindia.com host is anti-bot protected; if the default fetch is throttled, inject a browser-backed fetchFn via AdapterOptions. |
Missing credentials produce a readable, flagged error naming the variable to set — never a silent empty result.
Quickstart
Run the server with Node 18+ through npm:
npx -y disclosures
Claude Code
claude mcp add --transport stdio disclosures \
--env DISCLOSURES_USER_AGENT="Your Organization your-email@example.com" \
-- npx -y disclosures
Claude Desktop and Cursor
Add this server to the client's MCP configuration:
{
"mcpServers": {
"disclosures": {
"command": "npx",
"args": ["-y", "disclosures"],
"env": {
"DISCLOSURES_USER_AGENT": "Your Organization your-email@example.com"
}
}
}
}
Restart the client after changing its configuration.
TypeScript library
The same package can be imported without starting stdio:
import {
createDisclosuresServer,
createDisclosuresTools,
resolveCompanyCik,
resolveLei,
} from "disclosures";
const tools = createDisclosuresTools({
env: {
DISCLOSURES_USER_AGENT: "Your Organization your-email@example.com",
},
});
const result = await tools.CompanyResolve.handler({
company: "NVDA",
});
const server = createDisclosuresServer();
Adapter functions accept { fetchFn?, env? }, making them suitable for deterministic tests and embedding.
Honesty and scope
- EDGAR and GLEIF are public disclosure/reference systems, not KYC or UBO registries.
- GLEIF Level 2 parents are accounting-consolidation relationships. They are not the same as market-disclosure ownership, voting control, or ultimate beneficial ownership.
- Schedule 13D/13G identifies filers under the relevant threshold regime (5% in the US). It is not a complete or continuously current capitalization table, and exact percentages may require reading the linked filing.
- Section 16 insiders reflect recent Forms 3/4/5 available for the issuer and may not be a complete current management roster.
- Absence of a Form D does not mean an issuer never raised private capital; it may have used another exemption or entity name.
- Filings can be amended, restated, late, incomplete, or reported under alternate XBRL tags. Results should be verified against the linked source documents.
- This package does not provide legal, investment, accounting, or financial advice.
Development
Requires Bun for development and Node 18+ for the published artifact.
bun install
bunx tsc --noEmit
bun test
bun run build
bun run test:stdio
npm pack --dry-run
Tests use routed fetch stubs and do not make live HTTP requests. The optional live smoke test requires a real SEC User-Agent:
DISCLOSURES_USER_AGENT="Your Organization your-email@example.com" \
bun run smoke:live
For npm name reservation, trusted publishing, prerelease tests, and stable releases, see the publishing guide.
stdio rule
The server reserves stdout for newline-delimited JSON-RPC. Contributor diagnostics must go to stderr; console.log can corrupt the MCP transport.
Roadmap
Five non-US jurisdictions now ship behind the existing tools:
| Jurisdiction | Adapter | Status |
|---|---|---|
| United Kingdom | Companies House | Shipped |
| South Korea | DART / OpenDART | Shipped |
| Japan | EDINET | Shipped |
| China | cninfo (SSE/SZSE) | Shipped — resolution + filings |
| India | BSE (BSE-lite) | Shipped — resolution + filings |
Deeper normalized data for the newer sources (GB/JP insider and financial parsing, and CN/IN ownership and financials that currently live inside report PDFs) will dispatch behind the same seven intent tools rather than adding jurisdiction-specific tool names.
License
Apache-2.0. Copyright Carrotly AI.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。