datasinking-mcp 0.1.0__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_mcp-0.1.0/LICENSE +21 -0
- datasinking_mcp-0.1.0/PKG-INFO +106 -0
- datasinking_mcp-0.1.0/README.md +85 -0
- datasinking_mcp-0.1.0/datasinking_mcp/__init__.py +6 -0
- datasinking_mcp-0.1.0/datasinking_mcp/server.py +109 -0
- datasinking_mcp-0.1.0/datasinking_mcp.egg-info/PKG-INFO +106 -0
- datasinking_mcp-0.1.0/datasinking_mcp.egg-info/SOURCES.txt +11 -0
- datasinking_mcp-0.1.0/datasinking_mcp.egg-info/dependency_links.txt +1 -0
- datasinking_mcp-0.1.0/datasinking_mcp.egg-info/entry_points.txt +2 -0
- datasinking_mcp-0.1.0/datasinking_mcp.egg-info/requires.txt +2 -0
- datasinking_mcp-0.1.0/datasinking_mcp.egg-info/top_level.txt +1 -0
- datasinking_mcp-0.1.0/pyproject.toml +31 -0
- datasinking_mcp-0.1.0/setup.cfg +4 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 DataSinking
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: datasinking-mcp
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: MCP server for DataSinking — full-text Asian financial reports (China, Korea, Japan) as Markdown, for AI agents.
|
|
5
|
+
Author: DataSinking
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://datasink.ing
|
|
8
|
+
Project-URL: Documentation, https://datasink.ing/docs
|
|
9
|
+
Project-URL: Repository, https://github.com/heubme2020/datasinking-mcp
|
|
10
|
+
Keywords: mcp,model-context-protocol,financial-reports,a-share,korea,japan,markdown,rag,llm,ai
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Topic :: Office/Business :: Financial
|
|
15
|
+
Requires-Python: >=3.10
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
License-File: LICENSE
|
|
18
|
+
Requires-Dist: mcp>=1.0.0
|
|
19
|
+
Requires-Dist: requests>=2.28
|
|
20
|
+
Dynamic: license-file
|
|
21
|
+
|
|
22
|
+
# DataSinking MCP
|
|
23
|
+
|
|
24
|
+
[](https://pypi.org/project/datasinking-mcp/)
|
|
25
|
+
[](LICENSE)
|
|
26
|
+
[](https://modelcontextprotocol.io)
|
|
27
|
+
[](https://www.python.org)
|
|
28
|
+
|
|
29
|
+
**Asian financial reports as full-text Markdown, for AI agents.**
|
|
30
|
+
|
|
31
|
+
An [MCP](https://modelcontextprotocol.io) server that exposes the
|
|
32
|
+
[DataSinking](https://datasink.ing) API to any MCP-compatible AI client
|
|
33
|
+
(Claude, Cursor, Codex, DeepSeek, Windsurf, …). Ask for a company's annual
|
|
34
|
+
report, a specific chapter (MD&A, risk, notes), or explore coverage — no code
|
|
35
|
+
needed.
|
|
36
|
+
|
|
37
|
+
- **Full-text Markdown** — China (SSE/SZSE/BSE) · Korea (KOSPI/KOSDAQ/KONEX) · Japan (TSE)
|
|
38
|
+
- **Chapter-level access** — pull just the MD&A / risk section to save tokens (built for RAG)
|
|
39
|
+
- **FMP-style symbols** — `600519.SS` (Moutai), `005930.KS` (Samsung), `7203.T` (Toyota)
|
|
40
|
+
|
|
41
|
+
## Quick start
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# 1. Get a free API key (no credit card):
|
|
45
|
+
# https://datasink.ing → POST /free-key
|
|
46
|
+
export DATASINK_API_KEY="YOUR_KEY"
|
|
47
|
+
|
|
48
|
+
# 2. Add to Claude Code:
|
|
49
|
+
claude mcp add datasinking -e DATASINK_API_KEY="$DATASINK_API_KEY" -- uvx datasinking-mcp
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Or add to any MCP client's config (same `command` + `args` + `env` shape):
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"mcpServers": {
|
|
57
|
+
"datasinking": {
|
|
58
|
+
"command": "uvx",
|
|
59
|
+
"args": ["datasinking-mcp"],
|
|
60
|
+
"env": { "DATASINK_API_KEY": "YOUR_KEY" }
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Tools
|
|
67
|
+
|
|
68
|
+
| Tool | What it does | API |
|
|
69
|
+
|------|-------------|-----|
|
|
70
|
+
| `list_exchanges` | List covered exchanges | `/exchanges` |
|
|
71
|
+
| `list_stocks(exchange)` | List stocks on an exchange | `/stocks` |
|
|
72
|
+
| `list_reports(symbol, doc_type, size)` | List a company's reports (metadata) | `/documents` |
|
|
73
|
+
| `get_report(document_id)` | Get a report's full text | `/documents/{id}` |
|
|
74
|
+
| `list_sections(document_id)` | List a report's section headings | `/documents/{id}/sections` |
|
|
75
|
+
| `get_section(document_id, section)` | Get one section only (token-efficient, for RAG) | `/documents/{id}?section=` |
|
|
76
|
+
|
|
77
|
+
## Supported clients
|
|
78
|
+
|
|
79
|
+
MCP is an open standard; these clients connect the same way:
|
|
80
|
+
|
|
81
|
+
| Client | How to add |
|
|
82
|
+
|--------|------------|
|
|
83
|
+
| Claude Code | `claude mcp add datasinking -- uvx datasinking-mcp` |
|
|
84
|
+
| Claude Desktop | `Settings → Developer → Edit Config` (JSON above) |
|
|
85
|
+
| Cursor | `Settings → MCP → Add server` (JSON above) |
|
|
86
|
+
| OpenAI Codex | `~/.codex/config.toml` → `[mcp_servers.datasinking]` |
|
|
87
|
+
| Windsurf | `Settings → MCP` |
|
|
88
|
+
| DeepSeek | MCP config (JSON above) |
|
|
89
|
+
|
|
90
|
+
## Install from source
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
pip install datasinking-mcp
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Requires Python 3.10+ and a DataSinking API key ([free](https://datasink.ing)).
|
|
97
|
+
|
|
98
|
+
## Docs
|
|
99
|
+
|
|
100
|
+
- API reference: <https://datasink.ing/docs>
|
|
101
|
+
- OpenAPI spec: <https://api.datasink.ing/openapi.json>
|
|
102
|
+
- LLM examples: <https://github.com/heubme2020/datasinking/blob/main/llm-examples.md>
|
|
103
|
+
|
|
104
|
+
## License
|
|
105
|
+
|
|
106
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# DataSinking MCP
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/datasinking-mcp/)
|
|
4
|
+
[](LICENSE)
|
|
5
|
+
[](https://modelcontextprotocol.io)
|
|
6
|
+
[](https://www.python.org)
|
|
7
|
+
|
|
8
|
+
**Asian financial reports as full-text Markdown, for AI agents.**
|
|
9
|
+
|
|
10
|
+
An [MCP](https://modelcontextprotocol.io) server that exposes the
|
|
11
|
+
[DataSinking](https://datasink.ing) API to any MCP-compatible AI client
|
|
12
|
+
(Claude, Cursor, Codex, DeepSeek, Windsurf, …). Ask for a company's annual
|
|
13
|
+
report, a specific chapter (MD&A, risk, notes), or explore coverage — no code
|
|
14
|
+
needed.
|
|
15
|
+
|
|
16
|
+
- **Full-text Markdown** — China (SSE/SZSE/BSE) · Korea (KOSPI/KOSDAQ/KONEX) · Japan (TSE)
|
|
17
|
+
- **Chapter-level access** — pull just the MD&A / risk section to save tokens (built for RAG)
|
|
18
|
+
- **FMP-style symbols** — `600519.SS` (Moutai), `005930.KS` (Samsung), `7203.T` (Toyota)
|
|
19
|
+
|
|
20
|
+
## Quick start
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# 1. Get a free API key (no credit card):
|
|
24
|
+
# https://datasink.ing → POST /free-key
|
|
25
|
+
export DATASINK_API_KEY="YOUR_KEY"
|
|
26
|
+
|
|
27
|
+
# 2. Add to Claude Code:
|
|
28
|
+
claude mcp add datasinking -e DATASINK_API_KEY="$DATASINK_API_KEY" -- uvx datasinking-mcp
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Or add to any MCP client's config (same `command` + `args` + `env` shape):
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"mcpServers": {
|
|
36
|
+
"datasinking": {
|
|
37
|
+
"command": "uvx",
|
|
38
|
+
"args": ["datasinking-mcp"],
|
|
39
|
+
"env": { "DATASINK_API_KEY": "YOUR_KEY" }
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Tools
|
|
46
|
+
|
|
47
|
+
| Tool | What it does | API |
|
|
48
|
+
|------|-------------|-----|
|
|
49
|
+
| `list_exchanges` | List covered exchanges | `/exchanges` |
|
|
50
|
+
| `list_stocks(exchange)` | List stocks on an exchange | `/stocks` |
|
|
51
|
+
| `list_reports(symbol, doc_type, size)` | List a company's reports (metadata) | `/documents` |
|
|
52
|
+
| `get_report(document_id)` | Get a report's full text | `/documents/{id}` |
|
|
53
|
+
| `list_sections(document_id)` | List a report's section headings | `/documents/{id}/sections` |
|
|
54
|
+
| `get_section(document_id, section)` | Get one section only (token-efficient, for RAG) | `/documents/{id}?section=` |
|
|
55
|
+
|
|
56
|
+
## Supported clients
|
|
57
|
+
|
|
58
|
+
MCP is an open standard; these clients connect the same way:
|
|
59
|
+
|
|
60
|
+
| Client | How to add |
|
|
61
|
+
|--------|------------|
|
|
62
|
+
| Claude Code | `claude mcp add datasinking -- uvx datasinking-mcp` |
|
|
63
|
+
| Claude Desktop | `Settings → Developer → Edit Config` (JSON above) |
|
|
64
|
+
| Cursor | `Settings → MCP → Add server` (JSON above) |
|
|
65
|
+
| OpenAI Codex | `~/.codex/config.toml` → `[mcp_servers.datasinking]` |
|
|
66
|
+
| Windsurf | `Settings → MCP` |
|
|
67
|
+
| DeepSeek | MCP config (JSON above) |
|
|
68
|
+
|
|
69
|
+
## Install from source
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
pip install datasinking-mcp
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Requires Python 3.10+ and a DataSinking API key ([free](https://datasink.ing)).
|
|
76
|
+
|
|
77
|
+
## Docs
|
|
78
|
+
|
|
79
|
+
- API reference: <https://datasink.ing/docs>
|
|
80
|
+
- OpenAPI spec: <https://api.datasink.ing/openapi.json>
|
|
81
|
+
- LLM examples: <https://github.com/heubme2020/datasinking/blob/main/llm-examples.md>
|
|
82
|
+
|
|
83
|
+
## License
|
|
84
|
+
|
|
85
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""DataSinking MCP server.
|
|
3
|
+
|
|
4
|
+
Expose the DataSinking API — full-text financial reports across Asia
|
|
5
|
+
(China, Korea, Japan) as clean Markdown — to AI agents via MCP.
|
|
6
|
+
|
|
7
|
+
Run via ``uvx datasinking-mcp`` (stdio), or ``python -m datasinking_mcp``.
|
|
8
|
+
Requires the environment variable ``DATASINK_API_KEY`` (get a free key at
|
|
9
|
+
https://datasink.ing).
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import os
|
|
13
|
+
|
|
14
|
+
import requests
|
|
15
|
+
|
|
16
|
+
# mcp v1 uses FastMCP; v2 renamed it to MCPServer. Support both.
|
|
17
|
+
try:
|
|
18
|
+
from mcp.server.fastmcp import FastMCP # mcp v1
|
|
19
|
+
except ImportError: # pragma: no cover
|
|
20
|
+
from mcp.server.mcpserver import MCPServer as FastMCP # mcp v2
|
|
21
|
+
|
|
22
|
+
BASE_URL = "https://api.datasink.ing"
|
|
23
|
+
API_KEY = os.environ.get("DATASINK_API_KEY", "")
|
|
24
|
+
|
|
25
|
+
mcp = FastMCP(
|
|
26
|
+
"DataSinking",
|
|
27
|
+
instructions=(
|
|
28
|
+
"DataSinking 提供亚洲(中国/韩国/日本)上市公司财报的全文 Markdown。"
|
|
29
|
+
"symbol 用 FMP 风格:600519.SS(茅台)、005930.KS(三星)、7203.T(丰田)。"
|
|
30
|
+
"要省 token 时用 get_section 只取某一章(如 MD&A),而不是 get_report 拿整篇。"
|
|
31
|
+
),
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _get(path: str, params: dict | None = None) -> dict:
|
|
36
|
+
"""Call the DataSinking API, carrying the API key automatically."""
|
|
37
|
+
if not API_KEY:
|
|
38
|
+
raise RuntimeError("缺少 DATASINK_API_KEY 环境变量(去 datasink.ing 免费拿一个)")
|
|
39
|
+
p = dict(params or {})
|
|
40
|
+
p["apikey"] = API_KEY
|
|
41
|
+
r = requests.get(f"{BASE_URL}{path}", params=p, timeout=90)
|
|
42
|
+
r.raise_for_status()
|
|
43
|
+
return r.json()
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
@mcp.tool()
|
|
47
|
+
def list_exchanges() -> list:
|
|
48
|
+
"""列出 DataSinking 覆盖的交易所代码(sse/szse/bj/ksc/koe/knx/jpx)。"""
|
|
49
|
+
return _get("/exchanges").get("exchanges", [])
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@mcp.tool()
|
|
53
|
+
def list_stocks(exchange: str, limit: int = 20) -> dict:
|
|
54
|
+
"""列出某交易所的股票(含每家公司的报告数)。
|
|
55
|
+
|
|
56
|
+
Args:
|
|
57
|
+
exchange: 交易所代码,如 sse / szse / ksc / koe / jpx
|
|
58
|
+
limit: 返回前 N 家(默认 20,防止列表过长)
|
|
59
|
+
"""
|
|
60
|
+
data = _get("/stocks", {"exchange": exchange})
|
|
61
|
+
return {"exchange": exchange, "total": data.get("total", 0), "items": data.get("items", [])[:limit]}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
@mcp.tool()
|
|
65
|
+
def list_reports(symbol: str, doc_type: str = "annual", size: int = 10) -> dict:
|
|
66
|
+
"""列出某公司的报告(元数据,不含正文)。
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
symbol: FMP 风格代码,如 600519.SS / 005930.KS / 7203.T
|
|
70
|
+
doc_type: annual / semiannual / q1 / q3
|
|
71
|
+
size: 返回条数(默认 10)
|
|
72
|
+
"""
|
|
73
|
+
return _get("/documents", {"symbol": symbol, "doc_type": doc_type, "size": size})
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
@mcp.tool()
|
|
77
|
+
def get_report(document_id: int) -> dict:
|
|
78
|
+
"""获取单篇报告的全文(元数据 + Markdown 正文)。
|
|
79
|
+
|
|
80
|
+
Args:
|
|
81
|
+
document_id: 报告 ID,从 list_reports 的 items[].id 拿
|
|
82
|
+
"""
|
|
83
|
+
return _get(f"/documents/{document_id}")
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@mcp.tool()
|
|
87
|
+
def list_sections(document_id: int) -> dict:
|
|
88
|
+
"""列出某报告的所有章节标题(供 get_section 用)。"""
|
|
89
|
+
return _get(f"/documents/{document_id}/sections")
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@mcp.tool()
|
|
93
|
+
def get_section(document_id: int, section: str) -> dict:
|
|
94
|
+
"""只取报告的某一章(省 token,适合 RAG)。
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
document_id: 报告 ID
|
|
98
|
+
section: 章节标题的关键词,如 "管理层讨论与分析" / "MD&A" / "财务报告"
|
|
99
|
+
"""
|
|
100
|
+
return _get(f"/documents/{document_id}", {"section": section})
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def main() -> None:
|
|
104
|
+
"""Entry point for ``uvx datasinking-mcp``."""
|
|
105
|
+
mcp.run()
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
if __name__ == "__main__":
|
|
109
|
+
main()
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: datasinking-mcp
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: MCP server for DataSinking — full-text Asian financial reports (China, Korea, Japan) as Markdown, for AI agents.
|
|
5
|
+
Author: DataSinking
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://datasink.ing
|
|
8
|
+
Project-URL: Documentation, https://datasink.ing/docs
|
|
9
|
+
Project-URL: Repository, https://github.com/heubme2020/datasinking-mcp
|
|
10
|
+
Keywords: mcp,model-context-protocol,financial-reports,a-share,korea,japan,markdown,rag,llm,ai
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Topic :: Office/Business :: Financial
|
|
15
|
+
Requires-Python: >=3.10
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
License-File: LICENSE
|
|
18
|
+
Requires-Dist: mcp>=1.0.0
|
|
19
|
+
Requires-Dist: requests>=2.28
|
|
20
|
+
Dynamic: license-file
|
|
21
|
+
|
|
22
|
+
# DataSinking MCP
|
|
23
|
+
|
|
24
|
+
[](https://pypi.org/project/datasinking-mcp/)
|
|
25
|
+
[](LICENSE)
|
|
26
|
+
[](https://modelcontextprotocol.io)
|
|
27
|
+
[](https://www.python.org)
|
|
28
|
+
|
|
29
|
+
**Asian financial reports as full-text Markdown, for AI agents.**
|
|
30
|
+
|
|
31
|
+
An [MCP](https://modelcontextprotocol.io) server that exposes the
|
|
32
|
+
[DataSinking](https://datasink.ing) API to any MCP-compatible AI client
|
|
33
|
+
(Claude, Cursor, Codex, DeepSeek, Windsurf, …). Ask for a company's annual
|
|
34
|
+
report, a specific chapter (MD&A, risk, notes), or explore coverage — no code
|
|
35
|
+
needed.
|
|
36
|
+
|
|
37
|
+
- **Full-text Markdown** — China (SSE/SZSE/BSE) · Korea (KOSPI/KOSDAQ/KONEX) · Japan (TSE)
|
|
38
|
+
- **Chapter-level access** — pull just the MD&A / risk section to save tokens (built for RAG)
|
|
39
|
+
- **FMP-style symbols** — `600519.SS` (Moutai), `005930.KS` (Samsung), `7203.T` (Toyota)
|
|
40
|
+
|
|
41
|
+
## Quick start
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# 1. Get a free API key (no credit card):
|
|
45
|
+
# https://datasink.ing → POST /free-key
|
|
46
|
+
export DATASINK_API_KEY="YOUR_KEY"
|
|
47
|
+
|
|
48
|
+
# 2. Add to Claude Code:
|
|
49
|
+
claude mcp add datasinking -e DATASINK_API_KEY="$DATASINK_API_KEY" -- uvx datasinking-mcp
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Or add to any MCP client's config (same `command` + `args` + `env` shape):
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"mcpServers": {
|
|
57
|
+
"datasinking": {
|
|
58
|
+
"command": "uvx",
|
|
59
|
+
"args": ["datasinking-mcp"],
|
|
60
|
+
"env": { "DATASINK_API_KEY": "YOUR_KEY" }
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Tools
|
|
67
|
+
|
|
68
|
+
| Tool | What it does | API |
|
|
69
|
+
|------|-------------|-----|
|
|
70
|
+
| `list_exchanges` | List covered exchanges | `/exchanges` |
|
|
71
|
+
| `list_stocks(exchange)` | List stocks on an exchange | `/stocks` |
|
|
72
|
+
| `list_reports(symbol, doc_type, size)` | List a company's reports (metadata) | `/documents` |
|
|
73
|
+
| `get_report(document_id)` | Get a report's full text | `/documents/{id}` |
|
|
74
|
+
| `list_sections(document_id)` | List a report's section headings | `/documents/{id}/sections` |
|
|
75
|
+
| `get_section(document_id, section)` | Get one section only (token-efficient, for RAG) | `/documents/{id}?section=` |
|
|
76
|
+
|
|
77
|
+
## Supported clients
|
|
78
|
+
|
|
79
|
+
MCP is an open standard; these clients connect the same way:
|
|
80
|
+
|
|
81
|
+
| Client | How to add |
|
|
82
|
+
|--------|------------|
|
|
83
|
+
| Claude Code | `claude mcp add datasinking -- uvx datasinking-mcp` |
|
|
84
|
+
| Claude Desktop | `Settings → Developer → Edit Config` (JSON above) |
|
|
85
|
+
| Cursor | `Settings → MCP → Add server` (JSON above) |
|
|
86
|
+
| OpenAI Codex | `~/.codex/config.toml` → `[mcp_servers.datasinking]` |
|
|
87
|
+
| Windsurf | `Settings → MCP` |
|
|
88
|
+
| DeepSeek | MCP config (JSON above) |
|
|
89
|
+
|
|
90
|
+
## Install from source
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
pip install datasinking-mcp
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Requires Python 3.10+ and a DataSinking API key ([free](https://datasink.ing)).
|
|
97
|
+
|
|
98
|
+
## Docs
|
|
99
|
+
|
|
100
|
+
- API reference: <https://datasink.ing/docs>
|
|
101
|
+
- OpenAPI spec: <https://api.datasink.ing/openapi.json>
|
|
102
|
+
- LLM examples: <https://github.com/heubme2020/datasinking/blob/main/llm-examples.md>
|
|
103
|
+
|
|
104
|
+
## License
|
|
105
|
+
|
|
106
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
datasinking_mcp/__init__.py
|
|
5
|
+
datasinking_mcp/server.py
|
|
6
|
+
datasinking_mcp.egg-info/PKG-INFO
|
|
7
|
+
datasinking_mcp.egg-info/SOURCES.txt
|
|
8
|
+
datasinking_mcp.egg-info/dependency_links.txt
|
|
9
|
+
datasinking_mcp.egg-info/entry_points.txt
|
|
10
|
+
datasinking_mcp.egg-info/requires.txt
|
|
11
|
+
datasinking_mcp.egg-info/top_level.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
datasinking_mcp
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "datasinking-mcp"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "MCP server for DataSinking — full-text Asian financial reports (China, Korea, Japan) as Markdown, for AI agents."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
authors = [{ name = "DataSinking" }]
|
|
13
|
+
keywords = ["mcp", "model-context-protocol", "financial-reports", "a-share", "korea", "japan", "markdown", "rag", "llm", "ai"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Programming Language :: Python :: 3",
|
|
16
|
+
"License :: OSI Approved :: MIT License",
|
|
17
|
+
"Operating System :: OS Independent",
|
|
18
|
+
"Topic :: Office/Business :: Financial",
|
|
19
|
+
]
|
|
20
|
+
dependencies = ["mcp>=1.0.0", "requests>=2.28"]
|
|
21
|
+
|
|
22
|
+
[project.urls]
|
|
23
|
+
Homepage = "https://datasink.ing"
|
|
24
|
+
Documentation = "https://datasink.ing/docs"
|
|
25
|
+
Repository = "https://github.com/heubme2020/datasinking-mcp"
|
|
26
|
+
|
|
27
|
+
[project.scripts]
|
|
28
|
+
datasinking-mcp = "datasinking_mcp.server:main"
|
|
29
|
+
|
|
30
|
+
[tool.setuptools]
|
|
31
|
+
packages = ["datasinking_mcp"]
|