datasinking 0.2.12__tar.gz → 0.2.14__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {datasinking-0.2.12 → datasinking-0.2.14}/PKG-INFO +31 -21
- {datasinking-0.2.12 → datasinking-0.2.14}/README.md +28 -18
- {datasinking-0.2.12 → datasinking-0.2.14}/datasinking/_version.py +1 -1
- {datasinking-0.2.12 → datasinking-0.2.14}/datasinking/mcp_server.py +19 -18
- {datasinking-0.2.12 → datasinking-0.2.14}/datasinking.egg-info/PKG-INFO +31 -21
- {datasinking-0.2.12 → datasinking-0.2.14}/pyproject.toml +2 -2
- {datasinking-0.2.12 → datasinking-0.2.14}/LICENSE +0 -0
- {datasinking-0.2.12 → datasinking-0.2.14}/datasinking/__init__.py +0 -0
- {datasinking-0.2.12 → datasinking-0.2.14}/datasinking/client.py +0 -0
- {datasinking-0.2.12 → datasinking-0.2.14}/datasinking.egg-info/SOURCES.txt +0 -0
- {datasinking-0.2.12 → datasinking-0.2.14}/datasinking.egg-info/dependency_links.txt +0 -0
- {datasinking-0.2.12 → datasinking-0.2.14}/datasinking.egg-info/entry_points.txt +0 -0
- {datasinking-0.2.12 → datasinking-0.2.14}/datasinking.egg-info/requires.txt +0 -0
- {datasinking-0.2.12 → datasinking-0.2.14}/datasinking.egg-info/top_level.txt +0 -0
- {datasinking-0.2.12 → datasinking-0.2.14}/setup.cfg +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datasinking
|
|
3
|
-
Version: 0.2.
|
|
4
|
-
Summary: Python client for DataSinking — full-text
|
|
3
|
+
Version: 0.2.14
|
|
4
|
+
Summary: Python client for DataSinking — full-text financial reports (US, China, Japan, Korea, Taiwan) as Markdown.
|
|
5
5
|
Author: DataSinking
|
|
6
6
|
License: MIT
|
|
7
7
|
Project-URL: Homepage, https://datasink.ing
|
|
8
8
|
Project-URL: Documentation, https://datasink.ing/docs
|
|
9
9
|
Project-URL: Repository, https://github.com/heubme2020/datasinking
|
|
10
|
-
Keywords: a-share,china,korea,japan,financial reports,markdown,api,mcp,model-context-protocol,rag,llm
|
|
10
|
+
Keywords: a-share,china,korea,japan,us,sec,financial reports,markdown,api,mcp,model-context-protocol,rag,llm
|
|
11
11
|
Classifier: Programming Language :: Python :: 3
|
|
12
12
|
Classifier: License :: OSI Approved :: MIT License
|
|
13
13
|
Classifier: Operating System :: OS Independent
|
|
@@ -28,11 +28,11 @@ Dynamic: license-file
|
|
|
28
28
|
[](https://pypi.org/project/datasinking/)
|
|
29
29
|
[](https://github.com/heubme2020/datasinking#mcp-server)
|
|
30
30
|
|
|
31
|
-
**Full-text financial reports across Asia, as clean Markdown.**
|
|
31
|
+
**Full-text financial reports across the US and Asia, as clean Markdown.**
|
|
32
32
|
|
|
33
33
|
[DataSinking](https://datasink.ing) serves **full-text financial reports** — annual, semi-annual
|
|
34
|
-
and quarterly — from **
|
|
35
|
-
and RAG. Query by FMP-style symbol (`600519.SS`, `
|
|
34
|
+
and quarterly — from **the US, China, Japan, Korea and Taiwan** as clean **Markdown**, ready for LLM reading
|
|
35
|
+
and RAG. Query by FMP-style symbol (`AAPL`, `600519.SS`, `7203.T`, `005930.KS`, `2330.TW`) or filter by
|
|
36
36
|
exchange, report period, or **section** — pull just the MD&A / risk section instead of the whole
|
|
37
37
|
report. Reports are sourced from official disclosure platforms and parsed into structured Markdown
|
|
38
38
|
with YAML frontmatter, preserved headings, paragraphs and tables.
|
|
@@ -41,20 +41,21 @@ with YAML frontmatter, preserved headings, paragraphs and tables.
|
|
|
41
41
|
|
|
42
42
|
## MCP server
|
|
43
43
|
|
|
44
|
-
Ship DataSinking to any AI agent (Claude / Cursor / Codex /
|
|
44
|
+
Ship DataSinking to any AI agent (Claude / Cursor / Codex / Devin Desktop) as an
|
|
45
45
|
[MCP](https://modelcontextprotocol.io) server — 6 tools: list exchanges, list stocks,
|
|
46
46
|
list reports, fetch a report, list sections, fetch one section (token-friendly for RAG).
|
|
47
47
|
|
|
48
48
|
### Hosted — nothing to install
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
One URL, no package, no Python, no local server. Most clients take this shape:
|
|
51
51
|
|
|
52
52
|
```json
|
|
53
53
|
{
|
|
54
54
|
"mcpServers": {
|
|
55
55
|
"datasinking": {
|
|
56
56
|
"type": "http",
|
|
57
|
-
"url": "https://api.datasink.ing/mcp
|
|
57
|
+
"url": "https://api.datasink.ing/mcp",
|
|
58
|
+
"headers": { "Authorization": "Bearer YOUR_KEY" }
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
61
|
}
|
|
@@ -67,9 +68,12 @@ claude mcp add --transport http datasinking https://api.datasink.ing/mcp \
|
|
|
67
68
|
--header "Authorization: Bearer YOUR_KEY"
|
|
68
69
|
```
|
|
69
70
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
A client that can't set a header can put the key in the URL instead —
|
|
72
|
+
`https://api.datasink.ing/mcp?apikey=YOUR_KEY` — but only do that when you must: a key in a URL
|
|
73
|
+
ends up in logs and screen shares, and no client can redact it.
|
|
74
|
+
|
|
75
|
+
Two clients don't fit the shape above: Codex's config is TOML, and Devin Desktop's remote field is
|
|
76
|
+
`serverUrl`, not `url`. Per-client files: [`docs/mcp/`](docs/mcp/).
|
|
73
77
|
|
|
74
78
|
### Local — run it yourself
|
|
75
79
|
|
|
@@ -104,8 +108,9 @@ kept in lockstep by [`check_mcp_parity.py`](check_mcp_parity.py).
|
|
|
104
108
|
|
|
105
109
|
Full per-client setup: [`mcp-server.md`](mcp-server.md) (overview) ·
|
|
106
110
|
[`docs/mcp/`](docs/mcp/) (one guide per client).
|
|
107
|
-
|
|
108
|
-
|
|
111
|
+
|
|
112
|
+
The hosted endpoint is **POST-only and stateless** — `GET /mcp` returns 405, and no session id is
|
|
113
|
+
issued. Most clients read MCP config at launch, so restart one after changing its config.
|
|
109
114
|
|
|
110
115
|

|
|
111
116
|
|
|
@@ -119,8 +124,8 @@ datasinking/
|
|
|
119
124
|
├── research/ # Research notes / blog posts (reproducing paper-style presentation)
|
|
120
125
|
├── datasinking/ # Python client + MCP server — pip install "datasinking[mcp]"
|
|
121
126
|
├── npm/ # The same MCP server on npm — npx -y datasinking-mcp (Node 18+)
|
|
122
|
-
├── docs/mcp/ # Per-client MCP setup
|
|
123
|
-
├── mcp-server.md # MCP server overview —
|
|
127
|
+
├── docs/mcp/ # Per-client MCP setup — Claude Code, Desktop, Cursor, Codex, WorkBuddy, Devin…
|
|
128
|
+
├── mcp-server.md # MCP server overview — endpoint, per-client table, tools, troubleshooting
|
|
124
129
|
├── llm-examples.md # Ask an LLM — no code needed (8 end-to-end examples)
|
|
125
130
|
├── api-examples.md # 7 examples × 3 interfaces (curl / Python / LLM)
|
|
126
131
|
└── README.md
|
|
@@ -135,9 +140,13 @@ errors that client actually produces:
|
|
|
135
140
|
| Claude Desktop | [`docs/mcp/claude-desktop.md`](docs/mcp/claude-desktop.md) |
|
|
136
141
|
| OpenAI Codex CLI | [`docs/mcp/codex.md`](docs/mcp/codex.md) |
|
|
137
142
|
| WorkBuddy / CodeBuddy | [`docs/mcp/workbuddy.md`](docs/mcp/workbuddy.md) |
|
|
143
|
+
| Doubao Work / 豆包工作 | [`docs/mcp/doubao.md`](docs/mcp/doubao.md) |
|
|
138
144
|
| Cursor | [`docs/mcp/cursor.md`](docs/mcp/cursor.md) |
|
|
139
|
-
| DeepSeek | [`docs/mcp/deepseek.md`](docs/mcp/deepseek.md) |
|
|
140
|
-
|
|
|
145
|
+
| DeepSeek Harness (`dsh`) | [`docs/mcp/deepseek.md`](docs/mcp/deepseek.md) |
|
|
146
|
+
| Devin Desktop | [`docs/mcp/windsurf.md`](docs/mcp/windsurf.md) |
|
|
147
|
+
| OpenCode | [`docs/mcp/opencode.md`](docs/mcp/opencode.md) |
|
|
148
|
+
| Qoder | [`docs/mcp/qoder.md`](docs/mcp/qoder.md) |
|
|
149
|
+
| Reasonix | [`docs/mcp/reasonix.md`](docs/mcp/reasonix.md) |
|
|
141
150
|
|
|
142
151
|
## Quick start
|
|
143
152
|
|
|
@@ -197,12 +206,12 @@ Start from [`research/TEMPLATE.md`](research/TEMPLATE.md).
|
|
|
197
206
|
|
|
198
207
|
| | |
|
|
199
208
|
|---|---|
|
|
200
|
-
| Coverage | China (SSE / SZSE / BSE) · Korea (KOSPI / KOSDAQ / KONEX) ·
|
|
209
|
+
| Coverage | US (NYSE / NASDAQ / CBOE) · China (SSE / SZSE / BSE) · Japan (TSE) · Korea (KOSPI / KOSDAQ / KONEX) · Taiwan (TWSE / TPEx) |
|
|
201
210
|
| Document types | annual / semiannual / q1 / q3 / amendment |
|
|
202
|
-
| Update frequency | Daily — Korea/Japan via official DART/EDINET APIs (new filings within ~24h of publication) |
|
|
211
|
+
| Update frequency | Daily — US/Korea/Japan via official SEC EDGAR / DART / EDINET APIs (new filings within ~24h of publication) |
|
|
203
212
|
| Format | Full-text Markdown (with YAML frontmatter) |
|
|
204
213
|
| API | REST — `GET /documents`, batch download, `with_content=1` for full text, `?section=` + `/sections` for chapter-level access |
|
|
205
|
-
| Symbols | FMP style: `600519.SS` / `
|
|
214
|
+
| Symbols | FMP style: `AAPL` / `600519.SS` / `7203.T` / `005930.KS` |
|
|
206
215
|
| Auth | `?apikey=` query parameter (FMP style) |
|
|
207
216
|
|
|
208
217
|
## Data source
|
|
@@ -211,6 +220,7 @@ Reports are sourced from the official regulatory disclosure platform of each mar
|
|
|
211
220
|
|
|
212
221
|
| Market | Source | Platform |
|
|
213
222
|
|---|---|---|
|
|
223
|
+
| US (bare ticker, e.g. `AAPL`) | SEC EDGAR | US Securities and Exchange Commission — sec.gov/edgar |
|
|
214
224
|
| China A-shares (`.SS` `.SZ` `.BJ`) | 巨潮资讯网 cninfo | CSRC-designated disclosure platform |
|
|
215
225
|
| Korea (`.KS` `.KQ` `.KN`) | DART | Financial Supervisory Service — opendart.fss.or.kr |
|
|
216
226
|
| Japan (`.T`) | EDINET | Financial Services Agency — disclosure2.edinet-fsa.go.jp |
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
[](https://pypi.org/project/datasinking/)
|
|
6
6
|
[](https://github.com/heubme2020/datasinking#mcp-server)
|
|
7
7
|
|
|
8
|
-
**Full-text financial reports across Asia, as clean Markdown.**
|
|
8
|
+
**Full-text financial reports across the US and Asia, as clean Markdown.**
|
|
9
9
|
|
|
10
10
|
[DataSinking](https://datasink.ing) serves **full-text financial reports** — annual, semi-annual
|
|
11
|
-
and quarterly — from **
|
|
12
|
-
and RAG. Query by FMP-style symbol (`600519.SS`, `
|
|
11
|
+
and quarterly — from **the US, China, Japan, Korea and Taiwan** as clean **Markdown**, ready for LLM reading
|
|
12
|
+
and RAG. Query by FMP-style symbol (`AAPL`, `600519.SS`, `7203.T`, `005930.KS`, `2330.TW`) or filter by
|
|
13
13
|
exchange, report period, or **section** — pull just the MD&A / risk section instead of the whole
|
|
14
14
|
report. Reports are sourced from official disclosure platforms and parsed into structured Markdown
|
|
15
15
|
with YAML frontmatter, preserved headings, paragraphs and tables.
|
|
@@ -18,20 +18,21 @@ with YAML frontmatter, preserved headings, paragraphs and tables.
|
|
|
18
18
|
|
|
19
19
|
## MCP server
|
|
20
20
|
|
|
21
|
-
Ship DataSinking to any AI agent (Claude / Cursor / Codex /
|
|
21
|
+
Ship DataSinking to any AI agent (Claude / Cursor / Codex / Devin Desktop) as an
|
|
22
22
|
[MCP](https://modelcontextprotocol.io) server — 6 tools: list exchanges, list stocks,
|
|
23
23
|
list reports, fetch a report, list sections, fetch one section (token-friendly for RAG).
|
|
24
24
|
|
|
25
25
|
### Hosted — nothing to install
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
One URL, no package, no Python, no local server. Most clients take this shape:
|
|
28
28
|
|
|
29
29
|
```json
|
|
30
30
|
{
|
|
31
31
|
"mcpServers": {
|
|
32
32
|
"datasinking": {
|
|
33
33
|
"type": "http",
|
|
34
|
-
"url": "https://api.datasink.ing/mcp
|
|
34
|
+
"url": "https://api.datasink.ing/mcp",
|
|
35
|
+
"headers": { "Authorization": "Bearer YOUR_KEY" }
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
}
|
|
@@ -44,9 +45,12 @@ claude mcp add --transport http datasinking https://api.datasink.ing/mcp \
|
|
|
44
45
|
--header "Authorization: Bearer YOUR_KEY"
|
|
45
46
|
```
|
|
46
47
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
A client that can't set a header can put the key in the URL instead —
|
|
49
|
+
`https://api.datasink.ing/mcp?apikey=YOUR_KEY` — but only do that when you must: a key in a URL
|
|
50
|
+
ends up in logs and screen shares, and no client can redact it.
|
|
51
|
+
|
|
52
|
+
Two clients don't fit the shape above: Codex's config is TOML, and Devin Desktop's remote field is
|
|
53
|
+
`serverUrl`, not `url`. Per-client files: [`docs/mcp/`](docs/mcp/).
|
|
50
54
|
|
|
51
55
|
### Local — run it yourself
|
|
52
56
|
|
|
@@ -81,8 +85,9 @@ kept in lockstep by [`check_mcp_parity.py`](check_mcp_parity.py).
|
|
|
81
85
|
|
|
82
86
|
Full per-client setup: [`mcp-server.md`](mcp-server.md) (overview) ·
|
|
83
87
|
[`docs/mcp/`](docs/mcp/) (one guide per client).
|
|
84
|
-
|
|
85
|
-
|
|
88
|
+
|
|
89
|
+
The hosted endpoint is **POST-only and stateless** — `GET /mcp` returns 405, and no session id is
|
|
90
|
+
issued. Most clients read MCP config at launch, so restart one after changing its config.
|
|
86
91
|
|
|
87
92
|

|
|
88
93
|
|
|
@@ -96,8 +101,8 @@ datasinking/
|
|
|
96
101
|
├── research/ # Research notes / blog posts (reproducing paper-style presentation)
|
|
97
102
|
├── datasinking/ # Python client + MCP server — pip install "datasinking[mcp]"
|
|
98
103
|
├── npm/ # The same MCP server on npm — npx -y datasinking-mcp (Node 18+)
|
|
99
|
-
├── docs/mcp/ # Per-client MCP setup
|
|
100
|
-
├── mcp-server.md # MCP server overview —
|
|
104
|
+
├── docs/mcp/ # Per-client MCP setup — Claude Code, Desktop, Cursor, Codex, WorkBuddy, Devin…
|
|
105
|
+
├── mcp-server.md # MCP server overview — endpoint, per-client table, tools, troubleshooting
|
|
101
106
|
├── llm-examples.md # Ask an LLM — no code needed (8 end-to-end examples)
|
|
102
107
|
├── api-examples.md # 7 examples × 3 interfaces (curl / Python / LLM)
|
|
103
108
|
└── README.md
|
|
@@ -112,9 +117,13 @@ errors that client actually produces:
|
|
|
112
117
|
| Claude Desktop | [`docs/mcp/claude-desktop.md`](docs/mcp/claude-desktop.md) |
|
|
113
118
|
| OpenAI Codex CLI | [`docs/mcp/codex.md`](docs/mcp/codex.md) |
|
|
114
119
|
| WorkBuddy / CodeBuddy | [`docs/mcp/workbuddy.md`](docs/mcp/workbuddy.md) |
|
|
120
|
+
| Doubao Work / 豆包工作 | [`docs/mcp/doubao.md`](docs/mcp/doubao.md) |
|
|
115
121
|
| Cursor | [`docs/mcp/cursor.md`](docs/mcp/cursor.md) |
|
|
116
|
-
| DeepSeek | [`docs/mcp/deepseek.md`](docs/mcp/deepseek.md) |
|
|
117
|
-
|
|
|
122
|
+
| DeepSeek Harness (`dsh`) | [`docs/mcp/deepseek.md`](docs/mcp/deepseek.md) |
|
|
123
|
+
| Devin Desktop | [`docs/mcp/windsurf.md`](docs/mcp/windsurf.md) |
|
|
124
|
+
| OpenCode | [`docs/mcp/opencode.md`](docs/mcp/opencode.md) |
|
|
125
|
+
| Qoder | [`docs/mcp/qoder.md`](docs/mcp/qoder.md) |
|
|
126
|
+
| Reasonix | [`docs/mcp/reasonix.md`](docs/mcp/reasonix.md) |
|
|
118
127
|
|
|
119
128
|
## Quick start
|
|
120
129
|
|
|
@@ -174,12 +183,12 @@ Start from [`research/TEMPLATE.md`](research/TEMPLATE.md).
|
|
|
174
183
|
|
|
175
184
|
| | |
|
|
176
185
|
|---|---|
|
|
177
|
-
| Coverage | China (SSE / SZSE / BSE) · Korea (KOSPI / KOSDAQ / KONEX) ·
|
|
186
|
+
| Coverage | US (NYSE / NASDAQ / CBOE) · China (SSE / SZSE / BSE) · Japan (TSE) · Korea (KOSPI / KOSDAQ / KONEX) · Taiwan (TWSE / TPEx) |
|
|
178
187
|
| Document types | annual / semiannual / q1 / q3 / amendment |
|
|
179
|
-
| Update frequency | Daily — Korea/Japan via official DART/EDINET APIs (new filings within ~24h of publication) |
|
|
188
|
+
| Update frequency | Daily — US/Korea/Japan via official SEC EDGAR / DART / EDINET APIs (new filings within ~24h of publication) |
|
|
180
189
|
| Format | Full-text Markdown (with YAML frontmatter) |
|
|
181
190
|
| API | REST — `GET /documents`, batch download, `with_content=1` for full text, `?section=` + `/sections` for chapter-level access |
|
|
182
|
-
| Symbols | FMP style: `600519.SS` / `
|
|
191
|
+
| Symbols | FMP style: `AAPL` / `600519.SS` / `7203.T` / `005930.KS` |
|
|
183
192
|
| Auth | `?apikey=` query parameter (FMP style) |
|
|
184
193
|
|
|
185
194
|
## Data source
|
|
@@ -188,6 +197,7 @@ Reports are sourced from the official regulatory disclosure platform of each mar
|
|
|
188
197
|
|
|
189
198
|
| Market | Source | Platform |
|
|
190
199
|
|---|---|---|
|
|
200
|
+
| US (bare ticker, e.g. `AAPL`) | SEC EDGAR | US Securities and Exchange Commission — sec.gov/edgar |
|
|
191
201
|
| China A-shares (`.SS` `.SZ` `.BJ`) | 巨潮资讯网 cninfo | CSRC-designated disclosure platform |
|
|
192
202
|
| Korea (`.KS` `.KQ` `.KN`) | DART | Financial Supervisory Service — opendart.fss.or.kr |
|
|
193
203
|
| Japan (`.T`) | EDINET | Financial Services Agency — disclosure2.edinet-fsa.go.jp |
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
"""DataSinking MCP server (Model Context Protocol).
|
|
3
3
|
|
|
4
|
-
Expose the DataSinking API — full-text financial reports across Asia
|
|
5
|
-
(
|
|
6
|
-
Codex, DeepSeek,
|
|
4
|
+
Expose the DataSinking API — full-text financial reports across the US and Asia
|
|
5
|
+
(the US, China, Japan, Korea, Taiwan) as clean Markdown — to AI agents (Claude, Cursor,
|
|
6
|
+
Codex, DeepSeek, Devin Desktop, …).
|
|
7
7
|
|
|
8
8
|
Install the MCP extra::
|
|
9
9
|
|
|
@@ -62,14 +62,14 @@ API_KEY = os.environ.get("DATASINK_API_KEY", "")
|
|
|
62
62
|
|
|
63
63
|
mcp = FastMCP(
|
|
64
64
|
"DataSinking",
|
|
65
|
-
title="DataSinking — Full-text
|
|
66
|
-
description="Full-text
|
|
65
|
+
title="DataSinking — Full-text Financial Reports",
|
|
66
|
+
description="Full-text financial reports (US, China, Japan, Korea, Taiwan) as clean Markdown via API, with chapter-level access for RAG and AI agents.",
|
|
67
67
|
version=__version__,
|
|
68
68
|
instructions=(
|
|
69
69
|
"DataSinking serves full-text financial reports (annual / semi-annual / quarterly) "
|
|
70
|
-
"from
|
|
71
|
-
"Use FMP-style symbols: 600519.SS (Kweichow Moutai),
|
|
72
|
-
"
|
|
70
|
+
"from the US, China, Japan, Korea and Taiwan as clean Markdown, ready for LLM reading and RAG. "
|
|
71
|
+
"Use FMP-style symbols: AAPL (Apple), 600519.SS (Kweichow Moutai), 7203.T (Toyota), "
|
|
72
|
+
"005930.KS (Samsung Electronics), 2330.TW (TSMC). To save tokens, prefer get_section to pull one chapter "
|
|
73
73
|
"(e.g. MD&A) instead of get_report for the whole document."
|
|
74
74
|
),
|
|
75
75
|
)
|
|
@@ -115,9 +115,9 @@ def _get(path: str, params: Optional[dict] = None) -> dict:
|
|
|
115
115
|
def list_exchanges() -> list:
|
|
116
116
|
"""List the exchanges DataSinking covers.
|
|
117
117
|
|
|
118
|
-
Returns exchange codes (sse / szse / bj / ksc / koe / knx /
|
|
118
|
+
Returns exchange codes (nyse / nasdaq / cboe / sse / szse / bj / jpx / ksc / koe / knx / twse / tpex) with
|
|
119
119
|
the number of reports available per exchange. Call this first to discover coverage.
|
|
120
|
-
Sources: A-shares = cninfo.com.cn,
|
|
120
|
+
Sources: US = SEC EDGAR, A-shares = cninfo.com.cn, Japan = EDINET, Korea = DART, Taiwan = MOPS.
|
|
121
121
|
"""
|
|
122
122
|
return _get("/exchanges").get("exchanges", [])
|
|
123
123
|
|
|
@@ -125,7 +125,7 @@ def list_exchanges() -> list:
|
|
|
125
125
|
@mcp.tool()
|
|
126
126
|
def list_stocks(
|
|
127
127
|
exchange: Annotated[
|
|
128
|
-
str, Field(description="Exchange code, e.g. sse / szse / bj / ksc / koe / knx /
|
|
128
|
+
str, Field(description="Exchange code, e.g. nyse / nasdaq / cboe / sse / szse / bj / jpx / ksc / koe / knx / twse / tpex")
|
|
129
129
|
],
|
|
130
130
|
limit: Annotated[
|
|
131
131
|
int, Field(description="Return only the first N companies (default 20) to keep the response short.")
|
|
@@ -139,7 +139,7 @@ def list_stocks(
|
|
|
139
139
|
@mcp.tool()
|
|
140
140
|
def list_reports(
|
|
141
141
|
symbol: Annotated[
|
|
142
|
-
str, Field(description="FMP-style symbol, e.g. 600519.SS /
|
|
142
|
+
str, Field(description="FMP-style symbol, e.g. AAPL / 600519.SS / 7203.T / 005930.KS / 2330.TW")
|
|
143
143
|
],
|
|
144
144
|
doc_type: Annotated[
|
|
145
145
|
str, Field(description="Report type to filter on. Defaults to annual.")
|
|
@@ -190,12 +190,13 @@ def get_section(
|
|
|
190
190
|
str,
|
|
191
191
|
Field(
|
|
192
192
|
description=(
|
|
193
|
-
"Heading keyword
|
|
194
|
-
"
|
|
195
|
-
"
|
|
196
|
-
"
|
|
197
|
-
"
|
|
198
|
-
"
|
|
193
|
+
"Heading keyword. Matches the report's own headings, and also understands "
|
|
194
|
+
"cross-market concepts — MD&A / financial statements / notes / audit report / "
|
|
195
|
+
"risk / governance (or their Chinese/Japanese/Korean equivalents) resolve to the "
|
|
196
|
+
"right section in any market. Otherwise pass a heading in the report's language "
|
|
197
|
+
"(A-share: 管理层讨论与分析 / 财务报告; English filings: \"MD&A\" / "
|
|
198
|
+
"\"financial statements\" / \"notes\"). If nothing matches, the API returns 404 "
|
|
199
|
+
"with the real headings — retry with one of those, or call list_sections first."
|
|
199
200
|
)
|
|
200
201
|
),
|
|
201
202
|
],
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datasinking
|
|
3
|
-
Version: 0.2.
|
|
4
|
-
Summary: Python client for DataSinking — full-text
|
|
3
|
+
Version: 0.2.14
|
|
4
|
+
Summary: Python client for DataSinking — full-text financial reports (US, China, Japan, Korea, Taiwan) as Markdown.
|
|
5
5
|
Author: DataSinking
|
|
6
6
|
License: MIT
|
|
7
7
|
Project-URL: Homepage, https://datasink.ing
|
|
8
8
|
Project-URL: Documentation, https://datasink.ing/docs
|
|
9
9
|
Project-URL: Repository, https://github.com/heubme2020/datasinking
|
|
10
|
-
Keywords: a-share,china,korea,japan,financial reports,markdown,api,mcp,model-context-protocol,rag,llm
|
|
10
|
+
Keywords: a-share,china,korea,japan,us,sec,financial reports,markdown,api,mcp,model-context-protocol,rag,llm
|
|
11
11
|
Classifier: Programming Language :: Python :: 3
|
|
12
12
|
Classifier: License :: OSI Approved :: MIT License
|
|
13
13
|
Classifier: Operating System :: OS Independent
|
|
@@ -28,11 +28,11 @@ Dynamic: license-file
|
|
|
28
28
|
[](https://pypi.org/project/datasinking/)
|
|
29
29
|
[](https://github.com/heubme2020/datasinking#mcp-server)
|
|
30
30
|
|
|
31
|
-
**Full-text financial reports across Asia, as clean Markdown.**
|
|
31
|
+
**Full-text financial reports across the US and Asia, as clean Markdown.**
|
|
32
32
|
|
|
33
33
|
[DataSinking](https://datasink.ing) serves **full-text financial reports** — annual, semi-annual
|
|
34
|
-
and quarterly — from **
|
|
35
|
-
and RAG. Query by FMP-style symbol (`600519.SS`, `
|
|
34
|
+
and quarterly — from **the US, China, Japan, Korea and Taiwan** as clean **Markdown**, ready for LLM reading
|
|
35
|
+
and RAG. Query by FMP-style symbol (`AAPL`, `600519.SS`, `7203.T`, `005930.KS`, `2330.TW`) or filter by
|
|
36
36
|
exchange, report period, or **section** — pull just the MD&A / risk section instead of the whole
|
|
37
37
|
report. Reports are sourced from official disclosure platforms and parsed into structured Markdown
|
|
38
38
|
with YAML frontmatter, preserved headings, paragraphs and tables.
|
|
@@ -41,20 +41,21 @@ with YAML frontmatter, preserved headings, paragraphs and tables.
|
|
|
41
41
|
|
|
42
42
|
## MCP server
|
|
43
43
|
|
|
44
|
-
Ship DataSinking to any AI agent (Claude / Cursor / Codex /
|
|
44
|
+
Ship DataSinking to any AI agent (Claude / Cursor / Codex / Devin Desktop) as an
|
|
45
45
|
[MCP](https://modelcontextprotocol.io) server — 6 tools: list exchanges, list stocks,
|
|
46
46
|
list reports, fetch a report, list sections, fetch one section (token-friendly for RAG).
|
|
47
47
|
|
|
48
48
|
### Hosted — nothing to install
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
One URL, no package, no Python, no local server. Most clients take this shape:
|
|
51
51
|
|
|
52
52
|
```json
|
|
53
53
|
{
|
|
54
54
|
"mcpServers": {
|
|
55
55
|
"datasinking": {
|
|
56
56
|
"type": "http",
|
|
57
|
-
"url": "https://api.datasink.ing/mcp
|
|
57
|
+
"url": "https://api.datasink.ing/mcp",
|
|
58
|
+
"headers": { "Authorization": "Bearer YOUR_KEY" }
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
61
|
}
|
|
@@ -67,9 +68,12 @@ claude mcp add --transport http datasinking https://api.datasink.ing/mcp \
|
|
|
67
68
|
--header "Authorization: Bearer YOUR_KEY"
|
|
68
69
|
```
|
|
69
70
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
A client that can't set a header can put the key in the URL instead —
|
|
72
|
+
`https://api.datasink.ing/mcp?apikey=YOUR_KEY` — but only do that when you must: a key in a URL
|
|
73
|
+
ends up in logs and screen shares, and no client can redact it.
|
|
74
|
+
|
|
75
|
+
Two clients don't fit the shape above: Codex's config is TOML, and Devin Desktop's remote field is
|
|
76
|
+
`serverUrl`, not `url`. Per-client files: [`docs/mcp/`](docs/mcp/).
|
|
73
77
|
|
|
74
78
|
### Local — run it yourself
|
|
75
79
|
|
|
@@ -104,8 +108,9 @@ kept in lockstep by [`check_mcp_parity.py`](check_mcp_parity.py).
|
|
|
104
108
|
|
|
105
109
|
Full per-client setup: [`mcp-server.md`](mcp-server.md) (overview) ·
|
|
106
110
|
[`docs/mcp/`](docs/mcp/) (one guide per client).
|
|
107
|
-
|
|
108
|
-
|
|
111
|
+
|
|
112
|
+
The hosted endpoint is **POST-only and stateless** — `GET /mcp` returns 405, and no session id is
|
|
113
|
+
issued. Most clients read MCP config at launch, so restart one after changing its config.
|
|
109
114
|
|
|
110
115
|

|
|
111
116
|
|
|
@@ -119,8 +124,8 @@ datasinking/
|
|
|
119
124
|
├── research/ # Research notes / blog posts (reproducing paper-style presentation)
|
|
120
125
|
├── datasinking/ # Python client + MCP server — pip install "datasinking[mcp]"
|
|
121
126
|
├── npm/ # The same MCP server on npm — npx -y datasinking-mcp (Node 18+)
|
|
122
|
-
├── docs/mcp/ # Per-client MCP setup
|
|
123
|
-
├── mcp-server.md # MCP server overview —
|
|
127
|
+
├── docs/mcp/ # Per-client MCP setup — Claude Code, Desktop, Cursor, Codex, WorkBuddy, Devin…
|
|
128
|
+
├── mcp-server.md # MCP server overview — endpoint, per-client table, tools, troubleshooting
|
|
124
129
|
├── llm-examples.md # Ask an LLM — no code needed (8 end-to-end examples)
|
|
125
130
|
├── api-examples.md # 7 examples × 3 interfaces (curl / Python / LLM)
|
|
126
131
|
└── README.md
|
|
@@ -135,9 +140,13 @@ errors that client actually produces:
|
|
|
135
140
|
| Claude Desktop | [`docs/mcp/claude-desktop.md`](docs/mcp/claude-desktop.md) |
|
|
136
141
|
| OpenAI Codex CLI | [`docs/mcp/codex.md`](docs/mcp/codex.md) |
|
|
137
142
|
| WorkBuddy / CodeBuddy | [`docs/mcp/workbuddy.md`](docs/mcp/workbuddy.md) |
|
|
143
|
+
| Doubao Work / 豆包工作 | [`docs/mcp/doubao.md`](docs/mcp/doubao.md) |
|
|
138
144
|
| Cursor | [`docs/mcp/cursor.md`](docs/mcp/cursor.md) |
|
|
139
|
-
| DeepSeek | [`docs/mcp/deepseek.md`](docs/mcp/deepseek.md) |
|
|
140
|
-
|
|
|
145
|
+
| DeepSeek Harness (`dsh`) | [`docs/mcp/deepseek.md`](docs/mcp/deepseek.md) |
|
|
146
|
+
| Devin Desktop | [`docs/mcp/windsurf.md`](docs/mcp/windsurf.md) |
|
|
147
|
+
| OpenCode | [`docs/mcp/opencode.md`](docs/mcp/opencode.md) |
|
|
148
|
+
| Qoder | [`docs/mcp/qoder.md`](docs/mcp/qoder.md) |
|
|
149
|
+
| Reasonix | [`docs/mcp/reasonix.md`](docs/mcp/reasonix.md) |
|
|
141
150
|
|
|
142
151
|
## Quick start
|
|
143
152
|
|
|
@@ -197,12 +206,12 @@ Start from [`research/TEMPLATE.md`](research/TEMPLATE.md).
|
|
|
197
206
|
|
|
198
207
|
| | |
|
|
199
208
|
|---|---|
|
|
200
|
-
| Coverage | China (SSE / SZSE / BSE) · Korea (KOSPI / KOSDAQ / KONEX) ·
|
|
209
|
+
| Coverage | US (NYSE / NASDAQ / CBOE) · China (SSE / SZSE / BSE) · Japan (TSE) · Korea (KOSPI / KOSDAQ / KONEX) · Taiwan (TWSE / TPEx) |
|
|
201
210
|
| Document types | annual / semiannual / q1 / q3 / amendment |
|
|
202
|
-
| Update frequency | Daily — Korea/Japan via official DART/EDINET APIs (new filings within ~24h of publication) |
|
|
211
|
+
| Update frequency | Daily — US/Korea/Japan via official SEC EDGAR / DART / EDINET APIs (new filings within ~24h of publication) |
|
|
203
212
|
| Format | Full-text Markdown (with YAML frontmatter) |
|
|
204
213
|
| API | REST — `GET /documents`, batch download, `with_content=1` for full text, `?section=` + `/sections` for chapter-level access |
|
|
205
|
-
| Symbols | FMP style: `600519.SS` / `
|
|
214
|
+
| Symbols | FMP style: `AAPL` / `600519.SS` / `7203.T` / `005930.KS` |
|
|
206
215
|
| Auth | `?apikey=` query parameter (FMP style) |
|
|
207
216
|
|
|
208
217
|
## Data source
|
|
@@ -211,6 +220,7 @@ Reports are sourced from the official regulatory disclosure platform of each mar
|
|
|
211
220
|
|
|
212
221
|
| Market | Source | Platform |
|
|
213
222
|
|---|---|---|
|
|
223
|
+
| US (bare ticker, e.g. `AAPL`) | SEC EDGAR | US Securities and Exchange Commission — sec.gov/edgar |
|
|
214
224
|
| China A-shares (`.SS` `.SZ` `.BJ`) | 巨潮资讯网 cninfo | CSRC-designated disclosure platform |
|
|
215
225
|
| Korea (`.KS` `.KQ` `.KN`) | DART | Financial Supervisory Service — opendart.fss.or.kr |
|
|
216
226
|
| Japan (`.T`) | EDINET | Financial Services Agency — disclosure2.edinet-fsa.go.jp |
|
|
@@ -7,12 +7,12 @@ name = "datasinking"
|
|
|
7
7
|
# 版本号唯一来源 = datasinking/_version.py(client.py 的 User-Agent 也读它)。
|
|
8
8
|
# 以前这里和包内 __version__ 各写各的,结果漂了半年(发 0.2.4 时才发现 __init__ 还停在 0.1.0)。
|
|
9
9
|
dynamic = ["version"]
|
|
10
|
-
description = "Python client for DataSinking — full-text
|
|
10
|
+
description = "Python client for DataSinking — full-text financial reports (US, China, Japan, Korea, Taiwan) as Markdown."
|
|
11
11
|
readme = "README.md"
|
|
12
12
|
requires-python = ">=3.8"
|
|
13
13
|
license = { text = "MIT" }
|
|
14
14
|
authors = [{ name = "DataSinking" }]
|
|
15
|
-
keywords = ["a-share", "china", "korea", "japan", "financial reports", "markdown", "api", "mcp", "model-context-protocol", "rag", "llm"]
|
|
15
|
+
keywords = ["a-share", "china", "korea", "japan", "us", "sec", "financial reports", "markdown", "api", "mcp", "model-context-protocol", "rag", "llm"]
|
|
16
16
|
classifiers = [
|
|
17
17
|
"Programming Language :: Python :: 3",
|
|
18
18
|
"License :: OSI Approved :: MIT License",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|