astock-mcp-cn 0.2.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.
Potentially problematic release.
This version of astock-mcp-cn might be problematic. Click here for more details.
- astock_mcp_cn-0.2.0/.gitignore +7 -0
- astock_mcp_cn-0.2.0/LICENSE +21 -0
- astock_mcp_cn-0.2.0/PKG-INFO +94 -0
- astock_mcp_cn-0.2.0/README.md +79 -0
- astock_mcp_cn-0.2.0/apply_config.py +39 -0
- astock_mcp_cn-0.2.0/probe_sources.py +87 -0
- astock_mcp_cn-0.2.0/pyproject.toml +28 -0
- astock_mcp_cn-0.2.0/src/astock_mcp/__init__.py +13 -0
- astock_mcp_cn-0.2.0/src/astock_mcp/server.py +910 -0
- astock_mcp_cn-0.2.0/test_local.py +33 -0
- astock_mcp_cn-0.2.0/test_mcp.py +45 -0
- astock_mcp_cn-0.2.0/toggle_mcp.py +18 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 astock-mcp contributors
|
|
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,94 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: astock-mcp-cn
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: A-share market data MCP server: realtime quotes, klines, market breadth, sector fund flow, screener. Pure HTTP, no akshare/pandas.
|
|
5
|
+
License: MIT
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Keywords: a-share,china,market-data,mcp,model-context-protocol,stock
|
|
8
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
|
+
Requires-Python: >=3.10
|
|
12
|
+
Requires-Dist: mcp>=1.2.0
|
|
13
|
+
Requires-Dist: requests>=2.28
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
|
|
16
|
+
# astock-mcp-cn
|
|
17
|
+
|
|
18
|
+
A 股行情 MCP 服务。5 个工具、纯 HTTP 取数,不依赖 akshare / pandas,冷启动 1 秒内,适合本地或云端托管。
|
|
19
|
+
|
|
20
|
+
## 工具
|
|
21
|
+
|
|
22
|
+
**行情**
|
|
23
|
+
|
|
24
|
+
| 工具 | 用途 |
|
|
25
|
+
|---|---|
|
|
26
|
+
| `quote(symbols)` | 实时报价,多只逗号分隔,代码或名称均可;含涨跌幅、换手率、量比、PE、PB、总市值 |
|
|
27
|
+
| `kline(symbol, period, limit, adjust)` | 日/周/月 K 线,含每日涨跌幅与换手率,末尾附 MA5 / MA20 / 区间涨跌 |
|
|
28
|
+
| `market_overview()` | 六大指数点位涨跌 + 全市场涨跌家数 + 涨停跌停家数 |
|
|
29
|
+
| `intraday(symbol)` | 当日分时要点:开高低现、均价、振幅、量能分布、尾盘 30 分钟、站上均价比例 |
|
|
30
|
+
|
|
31
|
+
**情绪与资金**
|
|
32
|
+
|
|
33
|
+
| 工具 | 用途 |
|
|
34
|
+
|---|---|
|
|
35
|
+
| `limit_up(limit)` | 涨停梯队:家数、最高连板、**封单额占流通市值比**、首封时间、炸板次数、所属行业、10天N板 |
|
|
36
|
+
| `money_flow(symbol, days)` | 个股近 N 日主力 / 超大单 / 大单 / 小单净额与主力净占比 |
|
|
37
|
+
| `sector_flow(limit, direction)` | 行业板块主力资金净流入/流出排行 |
|
|
38
|
+
| `dragon_tiger(limit)` | 最近交易日龙虎榜:净买入额、买卖额、上榜原因 |
|
|
39
|
+
|
|
40
|
+
**筛股与基本面**
|
|
41
|
+
|
|
42
|
+
| 工具 | 用途 |
|
|
43
|
+
|---|---|
|
|
44
|
+
| `screen(...)` | 条件选股:涨跌幅、换手率、PE、总市值 |
|
|
45
|
+
| `fundamental(symbol)` | 财务快照:加权 ROE、毛利率、资产负债率、营收及同比、EPS、BPS |
|
|
46
|
+
| `announcements(symbol)` | 近期公告标题(不含正文) |
|
|
47
|
+
|
|
48
|
+
### 判断"明天能不能上板"用哪些
|
|
49
|
+
|
|
50
|
+
`limit_up` 看封板质量(首封越早、封单占流通比越高、炸板越少越强)→ `money_flow` 看主力是否真进场 → `dragon_tiger` 看是游资还是机构 → `intraday` 看是否全天站上均价 → `announcements` 看消息催化 → `market_overview` 看情绪周期。
|
|
51
|
+
|
|
52
|
+
## 安装
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
pip install astock-mcp-cn
|
|
56
|
+
# 或
|
|
57
|
+
uvx astock-mcp-cn
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## 接入 MCP 客户端
|
|
61
|
+
|
|
62
|
+
stdio 传输,命令即 `astock-mcp`:
|
|
63
|
+
|
|
64
|
+
```json
|
|
65
|
+
{
|
|
66
|
+
"mcpServers": {
|
|
67
|
+
"astock": { "command": "uvx", "args": ["astock-mcp-cn"] }
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## 数据源
|
|
73
|
+
|
|
74
|
+
| 数据 | 主源 | 备源 |
|
|
75
|
+
|---|---|---|
|
|
76
|
+
| 实时报价 | 腾讯 `qt.gtimg.cn` | 新浪 `hq.sinajs.cn` |
|
|
77
|
+
| K 线 | 东方财富 `push2his` | 腾讯 `web.ifzq.gtimg.cn` |
|
|
78
|
+
| 资金流 / 选股 / 涨跌家数 | 东方财富 `push2` | — |
|
|
79
|
+
|
|
80
|
+
数据来自公开行情接口,可能存在延迟或口径差异,仅供信息参考。
|
|
81
|
+
|
|
82
|
+
## 说明
|
|
83
|
+
|
|
84
|
+
- `screen` 从东财榜单前 300 只里筛选(接口单页上限 100 条,按 `sort` 字段排序后取头部),不是全市场扫描;适合快速看方向,不适合严谨回测。
|
|
85
|
+
- 输出做了紧凑处理以节省上下文 token,默认条数克制。
|
|
86
|
+
- 结果在进程内缓存 20–180 秒,避免重复请求。
|
|
87
|
+
|
|
88
|
+
## 免责声明
|
|
89
|
+
|
|
90
|
+
本项目仅提供公开行情数据的读取能力,不构成任何投资建议。投资有风险,决策需谨慎。
|
|
91
|
+
|
|
92
|
+
## License
|
|
93
|
+
|
|
94
|
+
MIT
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# astock-mcp-cn
|
|
2
|
+
|
|
3
|
+
A 股行情 MCP 服务。5 个工具、纯 HTTP 取数,不依赖 akshare / pandas,冷启动 1 秒内,适合本地或云端托管。
|
|
4
|
+
|
|
5
|
+
## 工具
|
|
6
|
+
|
|
7
|
+
**行情**
|
|
8
|
+
|
|
9
|
+
| 工具 | 用途 |
|
|
10
|
+
|---|---|
|
|
11
|
+
| `quote(symbols)` | 实时报价,多只逗号分隔,代码或名称均可;含涨跌幅、换手率、量比、PE、PB、总市值 |
|
|
12
|
+
| `kline(symbol, period, limit, adjust)` | 日/周/月 K 线,含每日涨跌幅与换手率,末尾附 MA5 / MA20 / 区间涨跌 |
|
|
13
|
+
| `market_overview()` | 六大指数点位涨跌 + 全市场涨跌家数 + 涨停跌停家数 |
|
|
14
|
+
| `intraday(symbol)` | 当日分时要点:开高低现、均价、振幅、量能分布、尾盘 30 分钟、站上均价比例 |
|
|
15
|
+
|
|
16
|
+
**情绪与资金**
|
|
17
|
+
|
|
18
|
+
| 工具 | 用途 |
|
|
19
|
+
|---|---|
|
|
20
|
+
| `limit_up(limit)` | 涨停梯队:家数、最高连板、**封单额占流通市值比**、首封时间、炸板次数、所属行业、10天N板 |
|
|
21
|
+
| `money_flow(symbol, days)` | 个股近 N 日主力 / 超大单 / 大单 / 小单净额与主力净占比 |
|
|
22
|
+
| `sector_flow(limit, direction)` | 行业板块主力资金净流入/流出排行 |
|
|
23
|
+
| `dragon_tiger(limit)` | 最近交易日龙虎榜:净买入额、买卖额、上榜原因 |
|
|
24
|
+
|
|
25
|
+
**筛股与基本面**
|
|
26
|
+
|
|
27
|
+
| 工具 | 用途 |
|
|
28
|
+
|---|---|
|
|
29
|
+
| `screen(...)` | 条件选股:涨跌幅、换手率、PE、总市值 |
|
|
30
|
+
| `fundamental(symbol)` | 财务快照:加权 ROE、毛利率、资产负债率、营收及同比、EPS、BPS |
|
|
31
|
+
| `announcements(symbol)` | 近期公告标题(不含正文) |
|
|
32
|
+
|
|
33
|
+
### 判断"明天能不能上板"用哪些
|
|
34
|
+
|
|
35
|
+
`limit_up` 看封板质量(首封越早、封单占流通比越高、炸板越少越强)→ `money_flow` 看主力是否真进场 → `dragon_tiger` 看是游资还是机构 → `intraday` 看是否全天站上均价 → `announcements` 看消息催化 → `market_overview` 看情绪周期。
|
|
36
|
+
|
|
37
|
+
## 安装
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
pip install astock-mcp-cn
|
|
41
|
+
# 或
|
|
42
|
+
uvx astock-mcp-cn
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## 接入 MCP 客户端
|
|
46
|
+
|
|
47
|
+
stdio 传输,命令即 `astock-mcp`:
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"mcpServers": {
|
|
52
|
+
"astock": { "command": "uvx", "args": ["astock-mcp-cn"] }
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## 数据源
|
|
58
|
+
|
|
59
|
+
| 数据 | 主源 | 备源 |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| 实时报价 | 腾讯 `qt.gtimg.cn` | 新浪 `hq.sinajs.cn` |
|
|
62
|
+
| K 线 | 东方财富 `push2his` | 腾讯 `web.ifzq.gtimg.cn` |
|
|
63
|
+
| 资金流 / 选股 / 涨跌家数 | 东方财富 `push2` | — |
|
|
64
|
+
|
|
65
|
+
数据来自公开行情接口,可能存在延迟或口径差异,仅供信息参考。
|
|
66
|
+
|
|
67
|
+
## 说明
|
|
68
|
+
|
|
69
|
+
- `screen` 从东财榜单前 300 只里筛选(接口单页上限 100 条,按 `sort` 字段排序后取头部),不是全市场扫描;适合快速看方向,不适合严谨回测。
|
|
70
|
+
- 输出做了紧凑处理以节省上下文 token,默认条数克制。
|
|
71
|
+
- 结果在进程内缓存 20–180 秒,避免重复请求。
|
|
72
|
+
|
|
73
|
+
## 免责声明
|
|
74
|
+
|
|
75
|
+
本项目仅提供公开行情数据的读取能力,不构成任何投资建议。投资有风险,决策需谨慎。
|
|
76
|
+
|
|
77
|
+
## License
|
|
78
|
+
|
|
79
|
+
MIT
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"""只改麦麦 bot_config.toml 的 [mcp].servers 一行;二进制读写,保留原换行符。"""
|
|
2
|
+
|
|
3
|
+
import shutil
|
|
4
|
+
import time
|
|
5
|
+
import tomllib
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
P = Path(r"C:\Users\GUDGA\AppData\Roaming\MaiBotOneKeyDesktop\4d542e1f4fde\modules\MaiBot\config\bot_config.toml")
|
|
9
|
+
EXE = "C:/Users/GUDGA/WorkBuddy/2026-11-06-02-03-59/astock-mcp/.venv/Scripts/astock-mcp.exe"
|
|
10
|
+
|
|
11
|
+
raw = P.read_bytes()
|
|
12
|
+
old = b"servers = []"
|
|
13
|
+
assert raw.count(old) == 1, f"目标行数量异常: {raw.count(old)}"
|
|
14
|
+
nl = b"\r\n" if b"\r\n" in raw else b"\n"
|
|
15
|
+
|
|
16
|
+
block = nl.join(
|
|
17
|
+
[
|
|
18
|
+
b"servers = [",
|
|
19
|
+
b' { name = "astock", enabled = true, transport = "stdio", command = "'
|
|
20
|
+
+ EXE.encode("utf-8")
|
|
21
|
+
+ b'", args = [], http_timeout_seconds = 15.0, read_timeout_seconds = 30.0 },',
|
|
22
|
+
b"]",
|
|
23
|
+
]
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
bak = P.with_name(P.name + ".bak-manual-" + time.strftime("%Y%m%d-%H%M%S"))
|
|
27
|
+
shutil.copy2(P, bak)
|
|
28
|
+
|
|
29
|
+
new_raw = raw.replace(old, block)
|
|
30
|
+
P.write_bytes(new_raw)
|
|
31
|
+
|
|
32
|
+
data = tomllib.loads(new_raw.decode("utf-8"))
|
|
33
|
+
print("backup :", bak.name)
|
|
34
|
+
print("bytes :", len(raw), "->", len(new_raw))
|
|
35
|
+
print("CRLF :", new_raw.count(b"\r\n"), "| bare LF:", new_raw.count(b"\n") - new_raw.count(b"\r\n"))
|
|
36
|
+
print("mcp.enable :", data["mcp"]["enable"])
|
|
37
|
+
for srv in data["mcp"]["servers"]:
|
|
38
|
+
print("server :", {k: srv.get(k) for k in ("name", "enabled", "transport", "command")})
|
|
39
|
+
print("personality keys:", len(data.get("personality", {})))
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"""探测候选数据源可用性:涨停梯队 / 个股资金流 / 分时 / 龙虎榜 / 财务 / 公告 / 北向。"""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
|
|
5
|
+
import requests
|
|
6
|
+
|
|
7
|
+
S = requests.Session()
|
|
8
|
+
S.headers.update(
|
|
9
|
+
{
|
|
10
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0 Safari/537.36",
|
|
11
|
+
"Referer": "https://quote.eastmoney.com/",
|
|
12
|
+
}
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def probe(name, url, pick):
|
|
17
|
+
try:
|
|
18
|
+
resp = S.get(url, timeout=10)
|
|
19
|
+
payload = resp.json()
|
|
20
|
+
print(f"[OK] {name} http={resp.status_code} {pick(payload)}")
|
|
21
|
+
except Exception as exc: # noqa: BLE001
|
|
22
|
+
print(f"[--] {name} {type(exc).__name__}: {str(exc)[:90]}")
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# 1 涨停池(连板/封板资金)
|
|
26
|
+
probe(
|
|
27
|
+
"涨停池(含连板)",
|
|
28
|
+
"https://push2ex.eastmoney.com/getTopicZTPool?ut=7eea3edcaed734bea9cbfc24409ed989"
|
|
29
|
+
"&dpt=wz.ztzt&Pageindex=0&pagesize=10&sort=fbt%3Aasc&date=20261106",
|
|
30
|
+
lambda p: f"pool={len((p.get('data') or {}).get('pool') or [])} keys={list(((p.get('data') or {}).get('pool') or [{}])[0].keys())[:12]}",
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
# 2 个股当日资金流
|
|
34
|
+
probe(
|
|
35
|
+
"个股资金流(今日)",
|
|
36
|
+
"https://push2.eastmoney.com/api/qt/stock/get?secid=1.600900"
|
|
37
|
+
"&fields=f43,f57,f58,f62,f184,f66,f72,f78,f84",
|
|
38
|
+
lambda p: json.dumps(p.get("data"), ensure_ascii=False)[:160],
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
# 3 个股资金流(多日)
|
|
42
|
+
probe(
|
|
43
|
+
"个股资金流(近6日)",
|
|
44
|
+
"https://push2his.eastmoney.com/api/qt/stock/fflow/daykline/get?secid=1.600900&lmt=6&klt=101"
|
|
45
|
+
"&fields1=f1,f2,f3,f7&fields2=f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65",
|
|
46
|
+
lambda p: f"klines={(p.get('data') or {}).get('klines', [])[:2]}",
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
# 4 分时
|
|
50
|
+
probe(
|
|
51
|
+
"分时走势",
|
|
52
|
+
"https://push2his.eastmoney.com/api/qt/stock/trends2/get?secid=1.600900"
|
|
53
|
+
"&fields1=f1,f2,f3,f4,f5,f6,f7,f8&fields2=f51,f52,f53,f54,f55,f56,f57,f58&iscr=0&ndays=1",
|
|
54
|
+
lambda p: f"points={len(((p.get('data') or {}).get('trends')) or [])} sample={(((p.get('data') or {}).get('trends')) or [''])[0]}",
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
# 5 龙虎榜
|
|
58
|
+
probe(
|
|
59
|
+
"龙虎榜",
|
|
60
|
+
"https://datacenter-web.eastmoney.com/api/data/v1/get?reportName=RPT_DAILYBILLBOARD_DETAILSNEW"
|
|
61
|
+
"&columns=ALL&filter=(TRADE_DATE%3D%272026-11-06%27)&pageNumber=1&pageSize=5&sortColumns=NET_BUY_AMT&sortTypes=-1",
|
|
62
|
+
lambda p: f"count={((p.get('result') or {}).get('data') or []) and len((p.get('result') or {}).get('data'))} keys={list((((p.get('result') or {}).get('data') or [{}])[0]).keys())[:10]}",
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
# 6 财务主要指标
|
|
66
|
+
probe(
|
|
67
|
+
"财务指标",
|
|
68
|
+
"https://datacenter-web.eastmoney.com/api/data/v1/get?reportName=RPT_F10_FINANCE_MAINFINADATA"
|
|
69
|
+
"&columns=SECUCODE,SECURITY_NAME_ABBR,REPORT_DATE,ROE_DILUTED,GROSS_PROFIT_RATIO,DEBT_ASSET_RATIO,TOTAL_OPERATE_INCOME,YSTZ,SJLTZ"
|
|
70
|
+
"&filter=(SECUCODE%3D%22600900.SH%22)&pageNumber=1&pageSize=2&sortColumns=REPORT_DATE&sortTypes=-1",
|
|
71
|
+
lambda p: json.dumps((((p.get("result") or {}).get("data")) or [{}])[0], ensure_ascii=False)[:180],
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
# 7 公告
|
|
75
|
+
probe(
|
|
76
|
+
"公告",
|
|
77
|
+
"https://np-anotice-stock.eastmoney.com/api/security/ann?sr=-1&page_size=3&page_index=1"
|
|
78
|
+
"&ann_type=A&client_source=web&stock_list=600900&f_node=0&s_node=0",
|
|
79
|
+
lambda p: f"items={len((p.get('data') or {}).get('list') or [])} first={(((p.get('data') or {}).get('list')) or [{}])[0].get('title', '')[:40]}",
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
# 8 北向资金(2024-08 起停止实时披露,验证是否还有数据)
|
|
83
|
+
probe(
|
|
84
|
+
"北向资金",
|
|
85
|
+
"https://push2.eastmoney.com/api/qt/kamt/get?fields1=f1,f3&fields2=f51,f52,f54,f56",
|
|
86
|
+
lambda p: json.dumps(p.get("data"), ensure_ascii=False)[:200],
|
|
87
|
+
)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "astock-mcp-cn"
|
|
7
|
+
version = "0.2.0"
|
|
8
|
+
description = "A-share market data MCP server: realtime quotes, klines, market breadth, sector fund flow, screener. Pure HTTP, no akshare/pandas."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = { text = "MIT" }
|
|
12
|
+
keywords = ["mcp", "model-context-protocol", "a-share", "stock", "market-data", "china"]
|
|
13
|
+
dependencies = [
|
|
14
|
+
"mcp>=1.2.0",
|
|
15
|
+
"requests>=2.28",
|
|
16
|
+
]
|
|
17
|
+
classifiers = [
|
|
18
|
+
"Programming Language :: Python :: 3",
|
|
19
|
+
"License :: OSI Approved :: MIT License",
|
|
20
|
+
"Operating System :: OS Independent",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
[project.scripts]
|
|
24
|
+
astock-mcp = "astock_mcp.server:main"
|
|
25
|
+
astock-mcp-cn = "astock_mcp.server:main"
|
|
26
|
+
|
|
27
|
+
[tool.hatch.build.targets.wheel]
|
|
28
|
+
packages = ["src/astock_mcp"]
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""astock-mcp —— A 股行情 MCP 服务(报价 / K线 / 大盘 / 板块资金 / 选股)。"""
|
|
2
|
+
|
|
3
|
+
__version__ = "0.2.0"
|
|
4
|
+
__all__ = ["mcp", "__version__"]
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def __getattr__(name: str):
|
|
8
|
+
"""惰性导出,避免 `python -m astock_mcp.server` 时重复导入模块。"""
|
|
9
|
+
if name == "mcp":
|
|
10
|
+
from .server import mcp
|
|
11
|
+
|
|
12
|
+
return mcp
|
|
13
|
+
raise AttributeError(name)
|