DataSinking

io.github.heubme2020由 GitHub 账号 heubme2020 发布v0.2.17更新于 Oct 24, 2026

Full-text financial reports (US, China, Japan, Korea, Taiwan, UK) as clean Markdown for RAG agents.

已验证Streamable HTTP可网页运行金融知识与记忆

概览

AI 生成的概览

DataSinking 让助手获取美国、英国、中国、日本、韩国和台湾的财报全文,以整洁 Markdown 呈现,并支持按章节检索以用于 RAG。

可以做什么
  • 了解覆盖范围与公司:列出各交易所及报告数量,再列出某交易所的股票
  • 按代码或交易所加股票代码列出公司报告,含元数据与来源标注
  • 获取报告完整 Markdown 正文,或列出各章节及其大小与预估 token 数
  • 按关键词只取某一章节以节省 token,正文带块标记便于引用段落和表格
适用场景
适合助手需要阅读或引用美国及亚洲市场的年报、半年报和季报时使用,例如提取数据、总结管理层讨论或风险章节,或把报告文本送入 RAG 流程。
运行要求
需要 DataSinking API 密钥,通过 Authorization Bearer 头或 DATASINK_API_KEY 环境变量提供。可使用 api.datasink.ing 的托管端点(HTTP,仅 POST,无状态),或用 npx(Node 18+)或 uvx/pip(Python 3.8+)在本地运行。需要能访问该服务的网络。
安装前请注意
API 密钥属于机密;若把密钥放在 URL 查询参数而非请求头中,会暴露在日志和屏幕共享里。用量按滚动 7 天窗口内的文档数计费,免费密钥共享额度池,因此整所交易所之类的批量下载需要付费密钥。报告文本来自第三方披露平台,引用时应保留来源标注。

安装

在 SourceWeft 中

  1. 打开 控制台中的 DataSinking,将其添加到工作区。
  2. 连接 Authorization token 凭据。它们会被私密存储,绝不会在公开页面上展示。
  3. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.heubme2020%2Fdatasinking/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "datasinking": {
      "type": "http",
      "url": "https://api.datasink.ing/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

DataSinking

[PyPI version] [MCP server]

Full-text financial reports across the US, Europe and Asia, as clean Markdown.

DataSinking serves full-text financial reports — annual, semi-annual and quarterly — from the US, China, Europe, Japan, Korea and Taiwan as clean Markdown, ready for LLM reading and RAG. Query by FMP-style symbol (AAPL, 600519.SS, 7203.T, 005930.KS, 2330.TW) or filter by exchange, report period, or section — pull just the MD&A / risk section instead of the whole filing, saving tokens. Every figure is traceable to its source disclosure and block. Reports are sourced from official disclosure platforms and parsed into structured Markdown with YAML frontmatter, preserved headings, paragraphs and tables.


MCP server

Ship DataSinking to any AI agent (Claude / Cursor / Codex / Devin Desktop / n8n) as an MCP server — 8 tools: list exchanges, list stocks, list reports, fetch a report, list sections, fetch one section (token-friendly for RAG), request a full backfill of a stock (idempotent — returns the current status if already queued), check a backfill's progress.

Hosted — nothing to install

One URL, no package, no Python, no local server. Most clients take this shape:

json
{  "mcpServers": {    "datasinking": {      "type": "http",      "url": "https://api.datasink.ing/mcp",      "headers": { "Authorization": "Bearer YOUR_KEY" }    }  }}

Claude Code, in one line:

bash
claude mcp add --transport http datasinking https://api.datasink.ing/mcp \  --header "Authorization: Bearer YOUR_KEY"

A client that can't set a header can put the key in the URL instead — https://api.datasink.ing/mcp?apikey=YOUR_KEY — but only do that when you must: a key in a URL ends up in logs and screen shares, and no client can redact it.

Two clients don't fit the shape above: Codex's config is TOML, and Devin Desktop's remote field is serverUrl, not url. Per-client files: docs/mcp/.

Local — run it yourself

If you'd rather keep everything on your own machine, there are two identical builds — pick whichever runtime you already have:

Node 18+ (no Python needed):

json
{  "mcpServers": {    "datasinking": {      "command": "npx",      "args": ["-y", "datasinking-mcp"],      "env": { "DATASINK_API_KEY": "YOUR_KEY" }    }  }}

Python 3.8+:

bash
pip install "datasinking[mcp]"datasinking-mcp          # requires DATASINK_API_KEY (free at https://datasink.ing)

Then use command: datasinking-mcp in your client.

Both run the same eight tools with the same schemas — npm/ and datasinking/mcp_server.py are kept in lockstep by check_mcp_parity.py.

Full per-client setup: mcp-server.md (overview) · docs/mcp/ (one guide per client).

The hosted endpoint is POST-only and stateless — GET /mcp returns 405, and no session id is issued. Most clients read MCP config at launch, so restart one after changing its config.

[DataSinking MCP in Claude]

What this repo is

Examples, research and tutorials showing how to work with financial report data, including reproducing the presentation styles found in financial-report research papers.

datasinking/├── examples/     # Example scripts: pull data from the API and analyze it├── research/     # Research notes / blog posts (reproducing paper-style presentation)├── datasinking/  # Python client + MCP server — pip install "datasinking[mcp]"├── npm/          # The same MCP server on npm — npx -y datasinking-mcp (Node 18+)├── r-datasinking/  # R client — remotes::install_github("heubme2020/datasinking", subdir="r-datasinking")├── docs/mcp/     # Per-client MCP setup — Claude Code, Desktop, Cursor, Codex, WorkBuddy, Devin…├── mcp-server.md # MCP server overview — endpoint, per-client table, tools, troubleshooting├── llm-examples.md  # Ask an LLM — no code needed (10 end-to-end examples)├── api-examples.md  # 8 examples × 3 interfaces (curl / Python / LLM)└── README.md

Per-client MCP guides — one file each, with the exact config path, both scopes, verification and the errors that client actually produces:

ClientGuide
Claude Codedocs/mcp/claude-code.md
Claude Desktopdocs/mcp/claude-desktop.md
OpenAI Codex CLIdocs/mcp/codex.md
WorkBuddy / CodeBuddydocs/mcp/workbuddy.md
Doubao Work / 豆包工作docs/mcp/doubao.md
Cursordocs/mcp/cursor.md
DeepSeek Harness (dsh)docs/mcp/deepseek.md
Devin Desktopdocs/mcp/windsurf.md
OpenCodedocs/mcp/opencode.md
Qoderdocs/mcp/qoder.md
Reasonixdocs/mcp/reasonix.md

Quick start

  1. Get an API key at datasink.ing
  2. One line (FMP-style ?apikey=):
bash
curl "https://api.datasink.ing/documents?symbol=600519.SS&with_content=1&apikey=YOUR_KEY"

Or in Python:

bash
pip install datasinking
python
from datasinking import DataSinking
ds = DataSinking("YOUR_KEY")for r in ds.get_stock_reports("600519.SS", limit=3):    print(r["report_period"], r["title"], len(r["content"]), "chars")

The full reference (curl / Python / LLM): api-examples.md.

Ask an LLM (no code)

Don't want to write code? Point any LLM at datasink.ing, give it your API key, and ask in plain language. See llm-examples.md for ten end-to-end examples — explore coverage, list a company's reports, and extract a figure with correct units.

RAG frameworks

Official integrations load reports straight into LlamaIndex, LangChain, or Haystack — one import, one call:

python
from datasinking.llama_index import DataSinkingReaderdocs = DataSinkingReader(api_key="YOUR_KEY").load_data("AAPL", doc_type="annual")
from datasinking.langchain import DataSinkingLoaderdocs = DataSinkingLoader(api_key="YOUR_KEY", symbol="AAPL").load()
from datasinking.haystack import DataSinkingFetcherdocs = DataSinkingFetcher(api_key="YOUR_KEY", symbol="AAPL").run()["documents"]

Pass split_by_section=True to load one Document per section (token-friendly for RAG). Each Document's metadata keeps the official disclosure source. Install the client with pip install -U datasinking; each framework is an optional dependency you install separately.

Examples (examples/)

FileWhat it does
01_quickstart.pyThe core functions: list exchanges / stocks / reports / fetch a report / fetch a stock's reports
02_download_company.pyDownload a company's full reports to local Markdown files
03_download_exchange.pyDownload an entire exchange's reports (all stocks) to local Markdown files
rag_ingest.pySlice reports into RAG chunks (on the <!-- ds:block:N --> anchors, with source traceability) and ingest into a vector store

Every example pulls from the live API and runs as-is.

03_download_exchange.py fetches every report on an exchange (e.g. all of Shenzhen — 150k+ documents). Quotas count documents, not requests, over a rolling 7-day window: a free key gets 3 req/s and 8,191 documents per 7 days, inside a pool of 524,287 per 7 days shared by all free users and website visitors. A whole exchange will therefore take well over a week on a free key — a paid (yearly) key (31 req/s, 524,287 documents per 7 days) is strongly recommended.

Research (research/)

research/ hosts research notes and blog posts, each based on DataSinking data with the source cited. You can reproduce charts and presentations found in financial-report research papers, e.g.:

  • Long-term revenue / profit trends
  • Industry comparison and distribution
  • Time series of financial metrics

Start from research/TEMPLATE.md.

Data overview

CoverageUS (NYSE / NASDAQ / OTC) · China (SSE / SZSE / BSE) · Europe (ESEF) · Japan (TSE) · Korea (KOSPI / KOSDAQ) · Taiwan (TWSE / TPEx)
Document typesannual / semiannual / q1 / q3 / amendment
Update frequencyDaily — US/Korea/Japan via official SEC EDGAR / DART / EDINET APIs (new filings within ~24h of publication)
FormatFull-text Markdown (with YAML frontmatter)
APIREST — GET /documents, batch download, with_content=1 for full text, ?section= + /sections for chapter-level access, POST /feedback for full backfill of a stock's filings
SymbolsFMP style: AAPL / 600519.SS / 7203.T / 005930.KS
Auth?apikey= query parameter (FMP style)

Data source

Reports are sourced from the official regulatory disclosure platform of each market and converted in-house to clean Markdown:

MarketSourcePlatform
US (bare ticker, e.g. AAPL)SEC EDGARUS Securities and Exchange Commission — sec.gov/edgar
China A-shares (.SS .SZ .BJ)巨潮资讯网 cninfoCSRC-designated disclosure platform
EuropeESEFEuropean Single Electronic Format — filings.xbrl.org
Korea (.KS .KQ .KN)DARTFinancial Supervisory Service — opendart.fss.or.kr
Japan (.T)EDINETFinancial Services Agency — disclosure2.edinet-fsa.go.jp
Taiwan (.TW .TWO)公開資訊觀測站 MOPSTaiwan Stock Exchange — mops.twse.com.tw

Every document also carries a source field in the API response, so the attribution travels with the data. Please keep it when you redistribute.

How to cite

If you use DataSinking in a paper, add a data-availability note (and, optionally, an acknowledgment).

Data availability:

Full-text financial reports (annual, semi-annual, and quarterly filings across the US, China, Europe, Japan, Korea, and Taiwan) were obtained from DataSinking (https://datasink.ing) in Markdown format.

BibTeX:

bibtex
@misc{datasinking2026,  author       = {{DataSinking}},  title        = {{DataSinking: Full-text financial reports as Markdown}},  year         = {2026},  howpublished = {https://datasink.ing},  note         = {Accessed: 2026-10-27}}

DataSinking provides report text, not investment advice.

Affiliate

Earn $7 every purchase for every customer you refer — recurring, PayPal, $31 minimum withdrawal: datasink.ing/affiliate

License

MIT

来源:README.md,提交 8b5663c

工具

6

list_exchanges

List exchanges

List the exchanges DataSinking covers. Returns exchange codes (bj / br / by / jpx / koe / ksc / lk / lse / nasdaq / np / nyse / otc / pk / rs / sse / szse / tpex / twse) with the number of reports available per exchange. Call this first to discover coverage. Sources: US = SEC EDGAR, A-shares = cninfo.com.cn, Japan = EDINET, Korea = DART, Taiwan = MOPS, UK = FCA NSM, Nepal = NEPSE, Brazil = CVM, Belarus = ЕПФР, Sri Lanka = CSE, Pakistan = PSX, Serbia = SEC register.

无需输入参数。

list_stocks

List stocks

List the stocks on one exchange, including the report count per company.

输入参数limitexchange必填

list_reports

List reports

List a company's reports — metadata only (id, title, period), no body text. Each item carries a `source` field naming the official disclosure platform; keep that attribution when you cite it. Look up by `symbol` (FMP-style, e.g. AAPL / 600519.SS / NABIL.NP) or by `exchange` + `stock_code` (from list_stocks) for markets whose codes aren't ticker-shaped (e.g. Brazil CNPJ, Sri Lanka 'AAA.N0000').

输入参数sizesymboldoc_typeexchangestock_code

get_report

Get report

Fetch one report's full text (metadata + Markdown body). The `source` field names the official disclosure platform; keep that attribution when you cite it. Expensive in tokens — prefer get_section when you only need one chapter. Content is annotated with block markers (`<!-- ds:block:N -->`) so you can cite a specific paragraph or table.

输入参数document_id必填

list_sections

List sections

List every section of a report with its size, before you decide what to pull. Returns `sections` (titles, in order) plus `section_details` — same order, one entry per section with `title`, `has_tables`, `chars` and `estimated_tokens`. Use `estimated_tokens` to avoid pulling a chapter that would blow your context, and `has_tables` to know whether the chapter needs special handling (tables are the part RAG pipelines usually get wrong). Then call get_section with a heading keyword — the headings are in the report's own language.

输入参数document_id必填

get_section

Get section

Fetch only one section of a report by keyword — much cheaper than get_report, best for RAG. Content is annotated with block markers (`<!-- ds:block:N -->`) so you can cite a specific paragraph or table.

输入参数section必填document_id必填

版本历史

6
  1. v0.2.17最新Oct 13, 2026
  2. v0.2.14Oct 4, 2026
  3. v0.2.13Sep 27, 2026
  4. v0.2.10Sep 22, 2026
  5. v0.2.8Sep 22, 2026
  6. v0.2.2Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分