hchain-mcp 1.0.2 → 1.0.3
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.
- package/README.md +127 -106
- package/dist/adapters/shared.d.ts +1 -0
- package/dist/adapters/shared.d.ts.map +1 -1
- package/dist/adapters/shared.js +11 -0
- package/dist/adapters/shared.js.map +1 -1
- package/dist/http.js +45 -11
- package/dist/http.js.map +1 -1
- package/dist/index.js +6 -9
- package/dist/index.js.map +1 -1
- package/dist/tools/balance.js +7 -7
- package/dist/tools/balance.js.map +1 -1
- package/dist/tools/defi.d.ts.map +1 -1
- package/dist/tools/defi.js +25 -25
- package/dist/tools/defi.js.map +1 -1
- package/dist/tools/gateway.d.ts.map +1 -1
- package/dist/tools/gateway.js +11 -11
- package/dist/tools/gateway.js.map +1 -1
- package/dist/tools/intent.js +11 -11
- package/dist/tools/intent.js.map +1 -1
- package/dist/tools/market.d.ts.map +1 -1
- package/dist/tools/market.js +71 -71
- package/dist/tools/market.js.map +1 -1
- package/dist/tools/payments.d.ts.map +1 -1
- package/dist/tools/payments.js +9 -9
- package/dist/tools/payments.js.map +1 -1
- package/dist/tools/skills.d.ts.map +1 -1
- package/dist/tools/skills.js +9 -10
- package/dist/tools/skills.js.map +1 -1
- package/dist/tools/trade.js +13 -13
- package/dist/tools/trade.js.map +1 -1
- package/dist/tools/txhistory.d.ts.map +1 -1
- package/dist/tools/txhistory.js +5 -5
- package/dist/tools/txhistory.js.map +1 -1
- package/dist/tools/ws.d.ts.map +1 -1
- package/dist/tools/ws.js +6 -6
- package/dist/tools/ws.js.map +1 -1
- package/package.json +57 -34
package/README.md
CHANGED
|
@@ -1,106 +1,127 @@
|
|
|
1
|
-
# hchain-mcp
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
##
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
hchain-mcp
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
|
86
|
-
|
|
87
|
-
|
|
|
88
|
-
|
|
|
89
|
-
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
|
94
|
-
|
|
95
|
-
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
1
|
+
# hchain-mcp
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/hchain-mcp)
|
|
4
|
+
[](https://www.npmjs.com/package/hchain-mcp)
|
|
5
|
+
[](https://nodejs.org)
|
|
6
|
+
[](https://github.com/hwalletvip888-h/hchain-mcp/actions)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
|
|
9
|
+
AI-native multi-chain trading MCP Server — 99 tools over HTTP & stdio.
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install -g hchain-mcp
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
### stdio (local Agent)
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
hchain-mcp
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Set API Key:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
export OKX_API_KEY=xxx
|
|
29
|
+
export OKX_SECRET_KEY=xxx
|
|
30
|
+
export OKX_PASSPHRASE=xxx
|
|
31
|
+
hchain-mcp
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### HTTP (remote Agent)
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
hchain-mcp start:http
|
|
38
|
+
# → http://127.0.0.1:3000
|
|
39
|
+
|
|
40
|
+
# or custom port
|
|
41
|
+
PORT=3099 hchain-mcp start:http
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Endpoints:
|
|
45
|
+
|
|
46
|
+
| Method | Path | Description |
|
|
47
|
+
|--------|------|-------------|
|
|
48
|
+
| POST | `/mcp` | MCP StreamableHTTP |
|
|
49
|
+
| GET | `/health` | Health check |
|
|
50
|
+
|
|
51
|
+
### Claude Code Config
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"mcpServers": {
|
|
56
|
+
"hchain-mcp": {
|
|
57
|
+
"command": "npx",
|
|
58
|
+
"args": ["hchain-mcp"],
|
|
59
|
+
"env": {
|
|
60
|
+
"OKX_API_KEY": "xxx",
|
|
61
|
+
"OKX_SECRET_KEY": "xxx",
|
|
62
|
+
"OKX_PASSPHRASE": "xxx"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Or HTTP mode:
|
|
70
|
+
|
|
71
|
+
```json
|
|
72
|
+
{
|
|
73
|
+
"mcpServers": {
|
|
74
|
+
"hchain-mcp": {
|
|
75
|
+
"url": "http://127.0.0.1:3099/mcp"
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Tools (99)
|
|
82
|
+
|
|
83
|
+
### Phase 1 — Base APIs (95 tools)
|
|
84
|
+
|
|
85
|
+
| Module | Count | Description |
|
|
86
|
+
|--------|:-----:|-------------|
|
|
87
|
+
| Market | 45 | Prices, candles, token info, signals, social |
|
|
88
|
+
| DeFi | 14 | Yield, staking, lending, pool |
|
|
89
|
+
| Trade | 8 | DEX aggregation, quote, swap |
|
|
90
|
+
| Intent | 6 | Intent-based swap + auction |
|
|
91
|
+
| Gateway | 6 | Gas, simulate, broadcast |
|
|
92
|
+
| Payments | 5 | Agent-to-Agent payments (x402) |
|
|
93
|
+
| Balance | 4 | Multi-chain balance |
|
|
94
|
+
| WS | 4 | WebSocket connect/subscribe |
|
|
95
|
+
| TxHistory | 3 | Transaction history |
|
|
96
|
+
|
|
97
|
+
### Phase 2 — API Composition Skills (4 tools)
|
|
98
|
+
|
|
99
|
+
| Tool | Description |
|
|
100
|
+
|------|-------------|
|
|
101
|
+
| `onchainos_skill_trade_pipeline` | One-shot swap: quote → approve → swap → simulate |
|
|
102
|
+
| `onchainos_skill_risk_detect` | 4-dimension risk scan with 0-100 scoring |
|
|
103
|
+
| `onchainos_skill_smart_slippage` | Volatility-based slippage recommendation |
|
|
104
|
+
| `onchainos_skill_signal_aggregate` | Signal discovery with automatic risk filtering |
|
|
105
|
+
|
|
106
|
+
## Docker
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
docker build -t hchain-mcp .
|
|
110
|
+
docker run --rm -e OKX_API_KEY=xxx -e OKX_SECRET_KEY=xxx -e OKX_PASSPHRASE=xxx hchain-mcp
|
|
111
|
+
# HTTP mode:
|
|
112
|
+
docker run --rm -p 3000:3000 -e PORT=3000 -e OKX_API_KEY=xxx -e OKX_SECRET_KEY=xxx -e OKX_PASSPHRASE=xxx hchain-mcp npx hchain-mcp start:http
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Test
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
npm test
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Supported Chains
|
|
122
|
+
|
|
123
|
+
Ethereum, BSC, Polygon, Arbitrum, Base, Optimism, Solana, Sui, TON, Avalanche, Fantom, and 40+ more.
|
|
124
|
+
|
|
125
|
+
## License
|
|
126
|
+
|
|
127
|
+
MIT
|
|
@@ -19,5 +19,6 @@ export declare function toResult<T>(data: T, opts?: {
|
|
|
19
19
|
nextSteps?: NextStep[];
|
|
20
20
|
}): CallToolResult;
|
|
21
21
|
export declare function toError(e: unknown): CallToolResult;
|
|
22
|
+
export declare function resolveAuth(): Auth | null;
|
|
22
23
|
export declare function AUTH_REQUIRED(scope?: "READ" | "TRADE"): CallToolResult;
|
|
23
24
|
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/adapters/shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,MAAM,WAAW,IAAI;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;CAAE;AAE7E,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;CAAE,GAAG,cAAc,CAK3G;AAGD,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,GAAG,cAAc,CA8DlD;AAGD,wBAAgB,aAAa,CAAC,KAAK,GAAE,MAAM,GAAG,OAAgB,GAAG,cAAc,CAS9E"}
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/adapters/shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,MAAM,WAAW,IAAI;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;CAAE;AAE7E,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;CAAE,GAAG,cAAc,CAK3G;AAGD,wBAAgB,OAAO,CAAC,CAAC,EAAE,OAAO,GAAG,cAAc,CA8DlD;AAGD,wBAAgB,WAAW,IAAI,IAAI,GAAG,IAAI,CAOzC;AAGD,wBAAgB,aAAa,CAAC,KAAK,GAAE,MAAM,GAAG,OAAgB,GAAG,cAAc,CAS9E"}
|
package/dist/adapters/shared.js
CHANGED
|
@@ -93,6 +93,17 @@ export function toError(e) {
|
|
|
93
93
|
isError: true,
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
|
+
// ── resolveAuth ──────────────────────────────────────────────
|
|
97
|
+
export function resolveAuth() {
|
|
98
|
+
const k = process.env.OKX_API_KEY, s = process.env.OKX_SECRET_KEY, p = process.env.OKX_PASSPHRASE;
|
|
99
|
+
if (k && s && p)
|
|
100
|
+
return { apiKey: k, secret: s, passphrase: p };
|
|
101
|
+
const a = process.argv.slice(2), g = (f) => { const i = a.indexOf(f); return i >= 0 ? a[i + 1] : undefined; };
|
|
102
|
+
const ka = g("--okx-api-key") ?? g("-k"), sa = g("--okx-secret") ?? g("-s"), pa = g("--okx-passphrase") ?? g("-p");
|
|
103
|
+
if (ka && sa && pa)
|
|
104
|
+
return { apiKey: ka, secret: sa, passphrase: pa };
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
96
107
|
// ── AUTH_REQUIRED ───────────────────────────────────────────
|
|
97
108
|
export function AUTH_REQUIRED(scope = "READ") {
|
|
98
109
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/adapters/shared.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/adapters/shared.ts"],"names":[],"mappings":"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"}
|
package/dist/http.js
CHANGED
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
* 使用原生 node:http 而非 Express, 避免 Express 5 与 @hono/node-server 兼容问题
|
|
7
7
|
*/
|
|
8
8
|
import "dotenv/config";
|
|
9
|
+
import { readFileSync } from "node:fs";
|
|
9
10
|
import { createServer } from "node:http";
|
|
10
11
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
11
12
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
13
|
+
import { resolveAuth } from "./adapters/shared.js";
|
|
12
14
|
import { registerBalanceTools } from "./tools/balance.js";
|
|
13
15
|
import { registerGatewayTools } from "./tools/gateway.js";
|
|
14
16
|
import { registerTxHistoryTools } from "./tools/txhistory.js";
|
|
@@ -19,16 +21,7 @@ import { registerIntentTools } from "./tools/intent.js";
|
|
|
19
21
|
import { registerMarketTools } from "./tools/market.js";
|
|
20
22
|
import { registerWsTools } from "./tools/ws.js";
|
|
21
23
|
import { registerSkillTools } from "./tools/skills.js";
|
|
22
|
-
|
|
23
|
-
const k = process.env.OKX_API_KEY, s = process.env.OKX_SECRET_KEY, p = process.env.OKX_PASSPHRASE;
|
|
24
|
-
if (k && s && p)
|
|
25
|
-
return { apiKey: k, secret: s, passphrase: p };
|
|
26
|
-
const a = process.argv.slice(2), g = (f) => { const i = a.indexOf(f); return i >= 0 ? a[i + 1] : undefined; };
|
|
27
|
-
const ka = g("--okx-api-key") ?? g("-k"), sa = g("--okx-secret") ?? g("-s"), pa = g("--okx-passphrase") ?? g("-p");
|
|
28
|
-
if (ka && sa && pa)
|
|
29
|
-
return { apiKey: ka, secret: sa, passphrase: pa };
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
24
|
+
const { version } = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf-8"));
|
|
32
25
|
/** 简陋 body parser — 读 JSON body 到 req.body */
|
|
33
26
|
function jsonBody(req) {
|
|
34
27
|
return new Promise((resolve, reject) => {
|
|
@@ -46,6 +39,28 @@ function jsonBody(req) {
|
|
|
46
39
|
req.on("error", reject);
|
|
47
40
|
});
|
|
48
41
|
}
|
|
42
|
+
// ── 基础 Rate Limiter ────────────────────────────────────────
|
|
43
|
+
const reqCounts = new Map();
|
|
44
|
+
const RATE_WINDOW_MS = 1000; // 1 秒窗口
|
|
45
|
+
const RATE_MAX = 20; // 每窗口最多 20 请求
|
|
46
|
+
function rateLimited(ip) {
|
|
47
|
+
const now = Date.now();
|
|
48
|
+
const entry = reqCounts.get(ip);
|
|
49
|
+
if (!entry || now > entry.resetAt) {
|
|
50
|
+
reqCounts.set(ip, { count: 1, resetAt: now + RATE_WINDOW_MS });
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
entry.count++;
|
|
54
|
+
return entry.count > RATE_MAX;
|
|
55
|
+
}
|
|
56
|
+
// 每 60s 清理过期条目
|
|
57
|
+
setInterval(() => {
|
|
58
|
+
const now = Date.now();
|
|
59
|
+
for (const [k, v] of reqCounts) {
|
|
60
|
+
if (now > v.resetAt)
|
|
61
|
+
reqCounts.delete(k);
|
|
62
|
+
}
|
|
63
|
+
}, 60_000).unref();
|
|
49
64
|
async function main() {
|
|
50
65
|
const auth = resolveAuth();
|
|
51
66
|
if (!auth) {
|
|
@@ -62,7 +77,7 @@ async function main() {
|
|
|
62
77
|
sessionIdGenerator: () => crypto.randomUUID(),
|
|
63
78
|
});
|
|
64
79
|
// 2. MCP Server + 全部工具注册
|
|
65
|
-
const server = new McpServer({ name: "hchain-mcp", version
|
|
80
|
+
const server = new McpServer({ name: "hchain-mcp", version });
|
|
66
81
|
registerBalanceTools(server, auth);
|
|
67
82
|
registerGatewayTools(server, auth);
|
|
68
83
|
registerTxHistoryTools(server, auth);
|
|
@@ -77,6 +92,13 @@ async function main() {
|
|
|
77
92
|
await server.connect(transport);
|
|
78
93
|
// 4. 原生 HTTP server
|
|
79
94
|
const httpServer = createServer(async (req, res) => {
|
|
95
|
+
// Rate limiting (按 IP)
|
|
96
|
+
const ip = req.socket.remoteAddress ?? "unknown";
|
|
97
|
+
if (rateLimited(ip)) {
|
|
98
|
+
res.writeHead(429, { "Content-Type": "application/json" });
|
|
99
|
+
res.end(JSON.stringify({ error: "Too many requests", retryAfterMs: RATE_WINDOW_MS }));
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
80
102
|
// CORS
|
|
81
103
|
res.setHeader("Access-Control-Allow-Origin", "*");
|
|
82
104
|
res.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, OPTIONS");
|
|
@@ -119,6 +141,18 @@ async function main() {
|
|
|
119
141
|
console.error(`[h-mcp] MCP endpoint: POST http://${host}:${port}/mcp`);
|
|
120
142
|
console.error(`[h-mcp] Health check: GET http://${host}:${port}/health`);
|
|
121
143
|
});
|
|
144
|
+
// Graceful shutdown
|
|
145
|
+
function shutdown(signal) {
|
|
146
|
+
console.error(`[h-mcp] 收到 ${signal},优雅关闭 HTTP 服务器`);
|
|
147
|
+
httpServer.close(() => {
|
|
148
|
+
console.error("[h-mcp] HTTP 服务器已关闭");
|
|
149
|
+
process.exit(0);
|
|
150
|
+
});
|
|
151
|
+
// 强制关闭超时
|
|
152
|
+
setTimeout(() => { console.error("[h-mcp] 强制关闭"); process.exit(1); }, 5000).unref();
|
|
153
|
+
}
|
|
154
|
+
process.on("SIGTERM", () => shutdown("SIGTERM"));
|
|
155
|
+
process.on("SIGINT", () => shutdown("SIGINT"));
|
|
122
156
|
}
|
|
123
157
|
main().catch(e => { console.error("[h-mcp] 启动失败:", e); process.exit(1); });
|
|
124
158
|
//# sourceMappingURL=http.js.map
|
package/dist/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,7 @@ import "dotenv/config";
|
|
|
7
7
|
import { readFileSync } from "node:fs";
|
|
8
8
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
9
9
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
10
|
+
import { resolveAuth } from "./adapters/shared.js";
|
|
10
11
|
import { registerBalanceTools } from "./tools/balance.js";
|
|
11
12
|
import { registerGatewayTools } from "./tools/gateway.js";
|
|
12
13
|
import { registerTxHistoryTools } from "./tools/txhistory.js";
|
|
@@ -18,16 +19,12 @@ import { registerMarketTools } from "./tools/market.js";
|
|
|
18
19
|
import { registerWsTools } from "./tools/ws.js";
|
|
19
20
|
import { registerSkillTools } from "./tools/skills.js";
|
|
20
21
|
const { version } = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf-8"));
|
|
21
|
-
function
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
return { apiKey: k, secret: s, passphrase: p };
|
|
25
|
-
const a = process.argv.slice(2), g = (f) => { const i = a.indexOf(f); return i >= 0 ? a[i + 1] : undefined; };
|
|
26
|
-
const ka = g("--okx-api-key") ?? g("-k"), sa = g("--okx-secret") ?? g("-s"), pa = g("--okx-passphrase") ?? g("-p");
|
|
27
|
-
if (ka && sa && pa)
|
|
28
|
-
return { apiKey: ka, secret: sa, passphrase: pa };
|
|
29
|
-
return null;
|
|
22
|
+
function shutdown(signal) {
|
|
23
|
+
console.error(`[h-mcp] 收到 ${signal},优雅退出`);
|
|
24
|
+
process.exit(0);
|
|
30
25
|
}
|
|
26
|
+
process.on("SIGTERM", () => shutdown("SIGTERM"));
|
|
27
|
+
process.on("SIGINT", () => shutdown("SIGINT"));
|
|
31
28
|
async function main() {
|
|
32
29
|
const auth = resolveAuth();
|
|
33
30
|
if (!auth) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AACH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CACnE,CAAC;AAEF,SAAS,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/balance.js
CHANGED
|
@@ -6,19 +6,19 @@ import { z } from "zod";
|
|
|
6
6
|
import { balanceApi } from "../adapters/onchainos.js";
|
|
7
7
|
import { toResult, toError, AUTH_REQUIRED } from "../adapters/shared.js";
|
|
8
8
|
export function registerBalanceTools(server, auth) {
|
|
9
|
-
server.tool("onchainos_balance_supported_chain", "
|
|
9
|
+
server.tool("onchainos_balance_supported_chain", "链上-账户 | 获取余额 API 支持的链列表", { readOnlyHint: true, idempotentHint: true, destructiveHint: false }, async () => { if (!auth)
|
|
10
10
|
return AUTH_REQUIRED("READ"); try {
|
|
11
11
|
return toResult(await balanceApi.supportedChain(auth));
|
|
12
12
|
}
|
|
13
13
|
catch (e) {
|
|
14
14
|
return toError(e);
|
|
15
15
|
} });
|
|
16
|
-
server.tool("onchainos_balance_total_value", "
|
|
16
|
+
server.tool("onchainos_balance_total_value", "链上-账户 | 获取地址的总资产 USD 估值", {
|
|
17
17
|
address: z.string().describe("钱包地址。Agent 从用户输入或上下文获取"),
|
|
18
18
|
chains: z.string().describe("链索引, 逗号分隔, 最多50个。如 '1'=ETH '56'=BSC '501'=Solana。从 onchainos_balance_supported_chain 获取 chainIndex"),
|
|
19
19
|
assetType: z.enum(["0", "1", "2"]).optional().describe("资产类型: 不传默认所有, '0'=代币+DeFi, '1'=仅代币, '2'=仅DeFi"),
|
|
20
20
|
excludeRiskToken: z.boolean().optional().describe("过滤风险/貔貅代币。不传默认过滤, false 传不过滤"),
|
|
21
|
-
}, { readOnlyHint: true }, async ({ address, chains, assetType, excludeRiskToken }) => {
|
|
21
|
+
}, { readOnlyHint: true, idempotentHint: true, destructiveHint: false }, async ({ address, chains, assetType, excludeRiskToken }) => {
|
|
22
22
|
if (!auth)
|
|
23
23
|
return AUTH_REQUIRED("READ");
|
|
24
24
|
try {
|
|
@@ -28,11 +28,11 @@ export function registerBalanceTools(server, auth) {
|
|
|
28
28
|
return toError(e);
|
|
29
29
|
}
|
|
30
30
|
});
|
|
31
|
-
server.tool("onchainos_balance_all_tokens", "
|
|
31
|
+
server.tool("onchainos_balance_all_tokens", "链上-账户 | 获取地址的代币持仓明细", {
|
|
32
32
|
address: z.string().describe("钱包地址。Agent 从用户输入或上下文获取"),
|
|
33
33
|
chains: z.string().describe("链索引, 逗号分隔, 最多50个。如 '1'=ETH '56'=BSC。从 onchainos_balance_supported_chain 获取"),
|
|
34
34
|
excludeRiskToken: z.enum(["0", "1"]).optional().describe("'0'=过滤风险/貔貅代币(默认), '1'=不过滤"),
|
|
35
|
-
}, { readOnlyHint: true }, async ({ address, chains, excludeRiskToken }) => {
|
|
35
|
+
}, { readOnlyHint: true, idempotentHint: true, destructiveHint: false }, async ({ address, chains, excludeRiskToken }) => {
|
|
36
36
|
if (!auth)
|
|
37
37
|
return AUTH_REQUIRED("READ");
|
|
38
38
|
try {
|
|
@@ -42,11 +42,11 @@ export function registerBalanceTools(server, auth) {
|
|
|
42
42
|
return toError(e);
|
|
43
43
|
}
|
|
44
44
|
});
|
|
45
|
-
server.tool("onchainos_balance_specific_token", "
|
|
45
|
+
server.tool("onchainos_balance_specific_token", "链上-账户 | 批量查询指定代币余额", {
|
|
46
46
|
address: z.string().describe("钱包地址。Agent 从用户输入或上下文获取"),
|
|
47
47
|
tokens: z.string().describe("JSON 数组字符串。格式: [{\"chainIndex\":\"1\",\"tokenContractAddress\":\"0xabc...\"},{\"chainIndex\":\"56\",\"tokenContractAddress\":\"\"}]。chainIndex 用字符串, 主链币传空字符串。最多20个"),
|
|
48
48
|
excludeRiskToken: z.enum(["0", "1"]).optional().describe("'0'=过滤风险/貔貅代币(默认), '1'=不过滤"),
|
|
49
|
-
}, { readOnlyHint: true }, async ({ address, tokens, excludeRiskToken }) => {
|
|
49
|
+
}, { readOnlyHint: true, idempotentHint: true, destructiveHint: false }, async ({ address, tokens, excludeRiskToken }) => {
|
|
50
50
|
if (!auth)
|
|
51
51
|
return AUTH_REQUIRED("READ");
|
|
52
52
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/tools/balance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGzE,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,IAAiB;IAEvE,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAC7C,
|
|
1
|
+
{"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/tools/balance.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGzE,MAAM,UAAU,oBAAoB,CAAC,MAAiB,EAAE,IAAiB;IAEvE,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAC7C,yBAAyB,EACzB,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,EACpE,KAAK,IAAI,EAAE,GAAG,IAAG,CAAC,IAAI;QAAE,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAAC,OAAO,QAAQ,CAAC,MAAM,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,OAAM,CAAC,EAAE,CAAC;QAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC,CAAC,CAAC,CACxJ,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,+BAA+B,EACzC,yBAAyB,EACzB;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACtD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oGAAoG,CAAC;QACjI,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAC,GAAG,EAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QACrG,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;KAClF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,EACpE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,EAAE,EAAE;QACzD,IAAG,CAAC,IAAI;YAAE,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC;YAAC,OAAO,QAAQ,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,OAAM,CAAC,EAAE,CAAC;YAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IAC3I,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,8BAA8B,EACxC,qBAAqB,EACrB;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACtD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4EAA4E,CAAC;QACzG,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;KACtF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,EACpE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,EAAE;QAC9C,IAAG,CAAC,IAAI;YAAE,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC;YAAC,OAAO,QAAQ,CAAC,MAAM,UAAU,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,OAAM,CAAC,EAAE,CAAC;YAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IACtI,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAC5C,oBAAoB,EACpB;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;QACtD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qKAAqK,CAAC;QAClM,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;KACtF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,EACpE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE,EAAE;QAC9C,IAAG,CAAC,IAAI;YAAE,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC;YACH,IAAI,MAAmE,CAAC;YACxE,IAAI,CAAC;gBAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,OAAO,OAAO,CAAC,IAAI,KAAK,CAAC,2FAA2F,CAAC,CAAC,CAAC;YAAC,CAAC;YACtK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;gBAAE,OAAO,OAAO,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAC5H,OAAO,QAAQ,CAAC,MAAM,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAClG,CAAC;QAAC,OAAM,CAAC,EAAE,CAAC;YAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IACnC,CAAC,CACF,CAAC;AAEJ,CAAC"}
|
package/dist/tools/defi.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defi.d.ts","sourceRoot":"","sources":["../../src/tools/defi.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAElD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"defi.d.ts","sourceRoot":"","sources":["../../src/tools/defi.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAElD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAuN5E"}
|