blofin-mcp 1.0.0
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 +92 -0
- package/dist/auth.d.ts +4 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +26 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +14 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +44 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/account.d.ts +5 -0
- package/dist/tools/account.d.ts.map +1 -0
- package/dist/tools/account.js +57 -0
- package/dist/tools/account.js.map +1 -0
- package/dist/tools/asset.d.ts +5 -0
- package/dist/tools/asset.d.ts.map +1 -0
- package/dist/tools/asset.js +99 -0
- package/dist/tools/asset.js.map +1 -0
- package/dist/tools/public.d.ts +5 -0
- package/dist/tools/public.d.ts.map +1 -0
- package/dist/tools/public.js +87 -0
- package/dist/tools/public.js.map +1 -0
- package/dist/tools/trading.d.ts +5 -0
- package/dist/tools/trading.d.ts.map +1 -0
- package/dist/tools/trading.js +335 -0
- package/dist/tools/trading.js.map +1 -0
- package/package.json +26 -0
package/README.md
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# BloFin MCP Server
|
|
2
|
+
|
|
3
|
+
A Model Context Protocol (MCP) server for the [BloFin](https://blofin.com/) cryptocurrency exchange API. Provides tools for market data, account management, and trading operations.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
### Public Data (no authentication required)
|
|
8
|
+
- `get_instruments` - Get available trading instruments and contract specs
|
|
9
|
+
- `get_tickers` - Get latest prices, bid/ask, 24h volume
|
|
10
|
+
- `get_orderbook` - Get order book depth
|
|
11
|
+
- `get_trades` - Get recent trades
|
|
12
|
+
- `get_mark_price` - Get mark/index prices
|
|
13
|
+
- `get_candlesticks` - Get OHLCV candlestick data
|
|
14
|
+
- `get_funding_rate` - Get current funding rates
|
|
15
|
+
- `get_funding_rate_history` - Get historical funding rates
|
|
16
|
+
|
|
17
|
+
### Account (authentication required)
|
|
18
|
+
- `get_balance` - Get futures account balance
|
|
19
|
+
- `get_positions` - Get open positions
|
|
20
|
+
- `get_leverage_info` / `set_leverage` - View/set leverage
|
|
21
|
+
- `get_margin_mode` / `set_margin_mode` - View/set margin mode
|
|
22
|
+
- `get_position_mode` / `set_position_mode` - View/set position mode
|
|
23
|
+
- `get_account_config` - Get account configuration
|
|
24
|
+
|
|
25
|
+
### Trading (authentication required)
|
|
26
|
+
- `place_order` - Place a new order (market, limit, post_only, fok, ioc)
|
|
27
|
+
- `cancel_order` - Cancel an order
|
|
28
|
+
- `batch_orders` / `cancel_batch_orders` - Batch order operations
|
|
29
|
+
- `close_position` - Close a position
|
|
30
|
+
- `get_open_orders` - Get pending orders
|
|
31
|
+
- `get_order_history` - Get order history
|
|
32
|
+
- `get_order_detail` - Get specific order details
|
|
33
|
+
- `get_fills_history` - Get trade fill history
|
|
34
|
+
- `place_tpsl` / `cancel_tpsl` - Take-profit/stop-loss orders
|
|
35
|
+
- `get_pending_tpsl` / `get_tpsl_history` - View TP/SL orders
|
|
36
|
+
- `place_algo_order` / `cancel_algo_order` - Algo/trigger orders
|
|
37
|
+
- `get_pending_algo_orders` / `get_algo_order_history` - View algo orders
|
|
38
|
+
|
|
39
|
+
### Asset Management (authentication required)
|
|
40
|
+
- `get_asset_balances` - Get balances across account types
|
|
41
|
+
- `fund_transfer` - Transfer funds between accounts
|
|
42
|
+
- `get_fund_transfer_history` - Get transfer history
|
|
43
|
+
- `get_deposit_history` / `get_withdrawal_history` - Deposit/withdrawal records
|
|
44
|
+
- `get_apikey_info` - Get API key information
|
|
45
|
+
|
|
46
|
+
## Setup
|
|
47
|
+
|
|
48
|
+
### Environment Variables
|
|
49
|
+
|
|
50
|
+
| Variable | Required | Description |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| `BLOFIN_API_KEY` | Yes | Your BloFin API key |
|
|
53
|
+
| `BLOFIN_API_SECRET` | Yes | Your BloFin API secret |
|
|
54
|
+
| `BLOFIN_PASSPHRASE` | Yes | Your BloFin API passphrase |
|
|
55
|
+
| `BLOFIN_BASE_URL` | No | API base URL (defaults to demo trading) |
|
|
56
|
+
|
|
57
|
+
### Base URLs
|
|
58
|
+
|
|
59
|
+
- Demo Trading: `https://demo-trading-openapi.blofin.com` (default)
|
|
60
|
+
- Production: `https://openapi.blofin.com`
|
|
61
|
+
|
|
62
|
+
### Install & Build
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
npm install
|
|
66
|
+
npm run build
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### MCP Configuration
|
|
70
|
+
|
|
71
|
+
Add to your MCP client configuration (e.g. Claude Desktop):
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"mcpServers": {
|
|
76
|
+
"blofin": {
|
|
77
|
+
"command": "node",
|
|
78
|
+
"args": ["/path/to/blofin-mcp/dist/index.js"],
|
|
79
|
+
"env": {
|
|
80
|
+
"BLOFIN_API_KEY": "your-api-key",
|
|
81
|
+
"BLOFIN_API_SECRET": "your-api-secret",
|
|
82
|
+
"BLOFIN_PASSPHRASE": "your-passphrase",
|
|
83
|
+
"BLOFIN_BASE_URL": "https://openapi.blofin.com"
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## API Documentation
|
|
91
|
+
|
|
92
|
+
See [BloFin API Docs](https://docs.blofin.com/index.html) for full API reference.
|
package/dist/auth.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type AuthHeaders = Record<string, string>;
|
|
2
|
+
export declare function generateSignature(secretKey: string, method: string, path: string, timestamp: string, nonce: string, body?: string): string;
|
|
3
|
+
export declare function createAuthHeaders(apiKey: string, secretKey: string, passphrase: string, method: string, path: string, body?: string): AuthHeaders;
|
|
4
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEjD,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAUR;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,MAAM,GACZ,WAAW,CAab"}
|
package/dist/auth.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
export function generateSignature(secretKey, method, path, timestamp, nonce, body) {
|
|
3
|
+
let prehash = `${path}${method}${timestamp}${nonce}`;
|
|
4
|
+
if (body) {
|
|
5
|
+
prehash += body;
|
|
6
|
+
}
|
|
7
|
+
const hexSignature = crypto
|
|
8
|
+
.createHmac("sha256", secretKey)
|
|
9
|
+
.update(prehash)
|
|
10
|
+
.digest("hex");
|
|
11
|
+
return Buffer.from(hexSignature).toString("base64");
|
|
12
|
+
}
|
|
13
|
+
export function createAuthHeaders(apiKey, secretKey, passphrase, method, path, body) {
|
|
14
|
+
const timestamp = Date.now().toString();
|
|
15
|
+
const nonce = crypto.randomUUID();
|
|
16
|
+
const sign = generateSignature(secretKey, method, path, timestamp, nonce, body);
|
|
17
|
+
return {
|
|
18
|
+
"ACCESS-KEY": apiKey,
|
|
19
|
+
"ACCESS-SIGN": sign,
|
|
20
|
+
"ACCESS-TIMESTAMP": timestamp,
|
|
21
|
+
"ACCESS-NONCE": nonce,
|
|
22
|
+
"ACCESS-PASSPHRASE": passphrase,
|
|
23
|
+
"Content-Type": "application/json",
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAIjC,MAAM,UAAU,iBAAiB,CAC/B,SAAiB,EACjB,MAAc,EACd,IAAY,EACZ,SAAiB,EACjB,KAAa,EACb,IAAa;IAEb,IAAI,OAAO,GAAG,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,EAAE,CAAC;IACrD,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,IAAI,IAAI,CAAC;IAClB,CAAC;IACD,MAAM,YAAY,GAAG,MAAM;SACxB,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC;SAC/B,MAAM,CAAC,OAAO,CAAC;SACf,MAAM,CAAC,KAAK,CAAC,CAAC;IACjB,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAAc,EACd,SAAiB,EACjB,UAAkB,EAClB,MAAc,EACd,IAAY,EACZ,IAAa;IAEb,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAEhF,OAAO;QACL,YAAY,EAAE,MAAM;QACpB,aAAa,EAAE,IAAI;QACnB,kBAAkB,EAAE,SAAS;QAC7B,cAAc,EAAE,KAAK;QACrB,mBAAmB,EAAE,UAAU;QAC/B,cAAc,EAAE,kBAAkB;KACnC,CAAC;AACJ,CAAC"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface BlofinConfig {
|
|
2
|
+
apiKey: string;
|
|
3
|
+
secretKey: string;
|
|
4
|
+
passphrase: string;
|
|
5
|
+
baseUrl: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class BlofinClient {
|
|
8
|
+
private config;
|
|
9
|
+
constructor(config: BlofinConfig);
|
|
10
|
+
publicGet(path: string, params?: Record<string, string>): Promise<unknown>;
|
|
11
|
+
privateGet(path: string, params?: Record<string, string>): Promise<unknown>;
|
|
12
|
+
privatePost(path: string, body: Record<string, unknown>): Promise<unknown>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAI1B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAa1E,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAkB3E,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAkBjF"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { createAuthHeaders } from "./auth.js";
|
|
2
|
+
export class BlofinClient {
|
|
3
|
+
config;
|
|
4
|
+
constructor(config) {
|
|
5
|
+
this.config = config;
|
|
6
|
+
}
|
|
7
|
+
async publicGet(path, params) {
|
|
8
|
+
let url = `${this.config.baseUrl}${path}`;
|
|
9
|
+
if (params) {
|
|
10
|
+
const qs = new URLSearchParams(params).toString();
|
|
11
|
+
if (qs)
|
|
12
|
+
url += `?${qs}`;
|
|
13
|
+
}
|
|
14
|
+
const resp = await fetch(url, {
|
|
15
|
+
method: "GET",
|
|
16
|
+
headers: { "Content-Type": "application/json" },
|
|
17
|
+
});
|
|
18
|
+
return resp.json();
|
|
19
|
+
}
|
|
20
|
+
async privateGet(path, params) {
|
|
21
|
+
let requestPath = path;
|
|
22
|
+
if (params) {
|
|
23
|
+
const qs = new URLSearchParams(params).toString();
|
|
24
|
+
if (qs)
|
|
25
|
+
requestPath += `?${qs}`;
|
|
26
|
+
}
|
|
27
|
+
const headers = createAuthHeaders(this.config.apiKey, this.config.secretKey, this.config.passphrase, "GET", requestPath);
|
|
28
|
+
const url = `${this.config.baseUrl}${requestPath}`;
|
|
29
|
+
const resp = await fetch(url, { method: "GET", headers });
|
|
30
|
+
return resp.json();
|
|
31
|
+
}
|
|
32
|
+
async privatePost(path, body) {
|
|
33
|
+
const bodyStr = JSON.stringify(body);
|
|
34
|
+
const headers = createAuthHeaders(this.config.apiKey, this.config.secretKey, this.config.passphrase, "POST", path, bodyStr);
|
|
35
|
+
const url = `${this.config.baseUrl}${path}`;
|
|
36
|
+
const resp = await fetch(url, {
|
|
37
|
+
method: "POST",
|
|
38
|
+
headers,
|
|
39
|
+
body: bodyStr,
|
|
40
|
+
});
|
|
41
|
+
return resp.json();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAS9C,MAAM,OAAO,YAAY;IACf,MAAM,CAAe;IAE7B,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY,EAAE,MAA+B;QAC3D,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QAC1C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,EAAE,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;YAClD,IAAI,EAAE;gBAAE,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;QAC1B,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC5B,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAY,EAAE,MAA+B;QAC5D,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,EAAE,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;YAClD,IAAI,EAAE;gBAAE,WAAW,IAAI,IAAI,EAAE,EAAE,CAAC;QAClC,CAAC;QACD,MAAM,OAAO,GAAG,iBAAiB,CAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,EAClB,IAAI,CAAC,MAAM,CAAC,SAAS,EACrB,IAAI,CAAC,MAAM,CAAC,UAAU,EACtB,KAAK,EACL,WAAW,CACZ,CAAC;QACF,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,WAAW,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,IAA6B;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,iBAAiB,CAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,EAClB,IAAI,CAAC,MAAM,CAAC,SAAS,EACrB,IAAI,CAAC,MAAM,CAAC,UAAU,EACtB,MAAM,EACN,IAAI,EACJ,OAAO,CACR,CAAC;QACF,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC5B,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;CACF"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { BlofinClient } from "./client.js";
|
|
5
|
+
import { registerPublicTools } from "./tools/public.js";
|
|
6
|
+
import { registerAccountTools } from "./tools/account.js";
|
|
7
|
+
import { registerTradingTools } from "./tools/trading.js";
|
|
8
|
+
import { registerAssetTools } from "./tools/asset.js";
|
|
9
|
+
const DEMO_BASE_URL = "https://demo-trading-openapi.blofin.com";
|
|
10
|
+
const PROD_BASE_URL = "https://openapi.blofin.com";
|
|
11
|
+
function getEnvOrThrow(name) {
|
|
12
|
+
const val = process.env[name];
|
|
13
|
+
if (!val) {
|
|
14
|
+
throw new Error(`Missing required environment variable: ${name}`);
|
|
15
|
+
}
|
|
16
|
+
return val;
|
|
17
|
+
}
|
|
18
|
+
async function main() {
|
|
19
|
+
const apiKey = getEnvOrThrow("BLOFIN_API_KEY");
|
|
20
|
+
const secretKey = getEnvOrThrow("BLOFIN_API_SECRET");
|
|
21
|
+
const passphrase = getEnvOrThrow("BLOFIN_PASSPHRASE");
|
|
22
|
+
const baseUrl = process.env.BLOFIN_BASE_URL || DEMO_BASE_URL;
|
|
23
|
+
const client = new BlofinClient({ apiKey, secretKey, passphrase, baseUrl });
|
|
24
|
+
const server = new McpServer({
|
|
25
|
+
name: "blofin-mcp",
|
|
26
|
+
version: "1.0.0",
|
|
27
|
+
});
|
|
28
|
+
registerPublicTools(server, client);
|
|
29
|
+
registerAccountTools(server, client);
|
|
30
|
+
registerTradingTools(server, client);
|
|
31
|
+
registerAssetTools(server, client);
|
|
32
|
+
const transport = new StdioServerTransport();
|
|
33
|
+
await server.connect(transport);
|
|
34
|
+
}
|
|
35
|
+
main().catch((err) => {
|
|
36
|
+
console.error("Fatal error:", err);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,aAAa,GAAG,yCAAyC,CAAC;AAChE,MAAM,aAAa,GAAG,4BAA4B,CAAC;AAEnD,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,aAAa,CAAC;IAE7D,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAE5E,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEnC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/tools/account.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,EAC1B,MAAM,EAAE,YAAY,QA0GrB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export function registerAccountTools(server, client) {
|
|
3
|
+
server.tool("get_balance", "Get futures account balance details including equity, available balance, frozen amounts.", {}, async () => {
|
|
4
|
+
const result = await client.privateGet("/api/v1/account/balance");
|
|
5
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
6
|
+
});
|
|
7
|
+
server.tool("get_positions", "Get current open positions.", { instId: z.string().optional().describe("Instrument ID, e.g. BTC-USDT") }, async ({ instId }) => {
|
|
8
|
+
const params = {};
|
|
9
|
+
if (instId)
|
|
10
|
+
params.instId = instId;
|
|
11
|
+
const result = await client.privateGet("/api/v1/account/positions", params);
|
|
12
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
13
|
+
});
|
|
14
|
+
server.tool("get_leverage_info", "Get leverage info for an instrument.", {
|
|
15
|
+
instId: z.string().describe("Instrument ID, e.g. BTC-USDT"),
|
|
16
|
+
marginMode: z.string().describe("Margin mode: cross or isolated"),
|
|
17
|
+
}, async ({ instId, marginMode }) => {
|
|
18
|
+
const result = await client.privateGet("/api/v1/account/leverage-info", { instId, marginMode });
|
|
19
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
20
|
+
});
|
|
21
|
+
server.tool("set_leverage", "Set leverage for an instrument.", {
|
|
22
|
+
instId: z.string().describe("Instrument ID, e.g. BTC-USDT"),
|
|
23
|
+
leverage: z.string().describe("Leverage value, e.g. '10'"),
|
|
24
|
+
marginMode: z.string().describe("Margin mode: cross or isolated"),
|
|
25
|
+
positionSide: z.string().optional().describe("Position side: long, short, or net"),
|
|
26
|
+
}, async ({ instId, leverage, marginMode, positionSide }) => {
|
|
27
|
+
const body = { instId, leverage, marginMode };
|
|
28
|
+
if (positionSide)
|
|
29
|
+
body.positionSide = positionSide;
|
|
30
|
+
const result = await client.privatePost("/api/v1/account/set-leverage", body);
|
|
31
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
32
|
+
});
|
|
33
|
+
server.tool("get_margin_mode", "Get current margin mode for an instrument.", { instId: z.string().describe("Instrument ID, e.g. BTC-USDT") }, async ({ instId }) => {
|
|
34
|
+
const result = await client.privateGet("/api/v1/account/margin-mode", { instId });
|
|
35
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
36
|
+
});
|
|
37
|
+
server.tool("set_margin_mode", "Set margin mode for an instrument.", {
|
|
38
|
+
instId: z.string().describe("Instrument ID, e.g. BTC-USDT"),
|
|
39
|
+
marginMode: z.string().describe("Margin mode: cross or isolated"),
|
|
40
|
+
}, async ({ instId, marginMode }) => {
|
|
41
|
+
const result = await client.privatePost("/api/v1/account/set-margin-mode", { instId, marginMode });
|
|
42
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
43
|
+
});
|
|
44
|
+
server.tool("get_position_mode", "Get current position mode (long_short_mode or net_mode).", {}, async () => {
|
|
45
|
+
const result = await client.privateGet("/api/v1/account/position-mode");
|
|
46
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
47
|
+
});
|
|
48
|
+
server.tool("set_position_mode", "Set position mode.", { positionMode: z.string().describe("Position mode: long_short_mode or net_mode") }, async ({ positionMode }) => {
|
|
49
|
+
const result = await client.privatePost("/api/v1/account/set-position-mode", { positionMode });
|
|
50
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
51
|
+
});
|
|
52
|
+
server.tool("get_account_config", "Get account configuration including position mode, account level, etc.", {}, async () => {
|
|
53
|
+
const result = await client.privateGet("/api/v1/account/config");
|
|
54
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/tools/account.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset.d.ts","sourceRoot":"","sources":["../../src/tools/asset.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,wBAAgB,kBAAkB,CAChC,MAAM,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,EAC1B,MAAM,EAAE,YAAY,QAiHrB"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export function registerAssetTools(server, client) {
|
|
3
|
+
server.tool("get_asset_balances", "Get asset balances across different account types (funding, futures, etc.).", {
|
|
4
|
+
accountType: z.string().describe("Account type: funding, futures, copy_trading, earn, spot"),
|
|
5
|
+
currency: z.string().optional().describe("Currency, e.g. USDT"),
|
|
6
|
+
}, async ({ accountType, currency }) => {
|
|
7
|
+
const params = {};
|
|
8
|
+
if (accountType)
|
|
9
|
+
params.accountType = accountType;
|
|
10
|
+
if (currency)
|
|
11
|
+
params.currency = currency;
|
|
12
|
+
const result = await client.privateGet("/api/v1/asset/balances", params);
|
|
13
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
14
|
+
});
|
|
15
|
+
server.tool("fund_transfer", "Transfer funds between accounts (funding, futures, copy_trading, earn, spot).", {
|
|
16
|
+
currency: z.string().describe("Currency, e.g. USDT"),
|
|
17
|
+
amount: z.string().describe("Transfer amount"),
|
|
18
|
+
fromAccount: z.string().describe("Source account: funding, futures, copy_trading, earn, spot"),
|
|
19
|
+
toAccount: z.string().describe("Destination account: funding, futures, copy_trading, earn, spot"),
|
|
20
|
+
clientId: z.string().optional().describe("Client-supplied transfer ID"),
|
|
21
|
+
}, async ({ currency, amount, fromAccount, toAccount, clientId }) => {
|
|
22
|
+
const body = { currency, amount, fromAccount, toAccount };
|
|
23
|
+
if (clientId)
|
|
24
|
+
body.clientId = clientId;
|
|
25
|
+
const result = await client.privatePost("/api/v1/asset/transfer", body);
|
|
26
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
27
|
+
});
|
|
28
|
+
server.tool("get_fund_transfer_history", "Get fund transfer history between accounts.", {
|
|
29
|
+
currency: z.string().optional().describe("Currency, e.g. USDT"),
|
|
30
|
+
fromAccount: z.string().optional().describe("Source account filter"),
|
|
31
|
+
toAccount: z.string().optional().describe("Destination account filter"),
|
|
32
|
+
before: z.string().optional().describe("Pagination - records newer than this timestamp (ms)"),
|
|
33
|
+
after: z.string().optional().describe("Pagination - records earlier than this timestamp (ms)"),
|
|
34
|
+
limit: z.string().optional().describe("Number of results, max 100. Default 100."),
|
|
35
|
+
}, async ({ currency, fromAccount, toAccount, before, after, limit }) => {
|
|
36
|
+
const params = {};
|
|
37
|
+
if (currency)
|
|
38
|
+
params.currency = currency;
|
|
39
|
+
if (fromAccount)
|
|
40
|
+
params.fromAccount = fromAccount;
|
|
41
|
+
if (toAccount)
|
|
42
|
+
params.toAccount = toAccount;
|
|
43
|
+
if (before)
|
|
44
|
+
params.before = before;
|
|
45
|
+
if (after)
|
|
46
|
+
params.after = after;
|
|
47
|
+
if (limit)
|
|
48
|
+
params.limit = limit;
|
|
49
|
+
const result = await client.privateGet("/api/v1/asset/bills", params);
|
|
50
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
51
|
+
});
|
|
52
|
+
server.tool("get_deposit_history", "Get deposit history.", {
|
|
53
|
+
currency: z.string().optional().describe("Currency, e.g. USDT"),
|
|
54
|
+
state: z.string().optional().describe("Status: 0=pending, 1=done, 2=failed, 3=kyt"),
|
|
55
|
+
before: z.string().optional().describe("Pagination - records newer than this timestamp (ms)"),
|
|
56
|
+
after: z.string().optional().describe("Pagination - records earlier than this timestamp (ms)"),
|
|
57
|
+
limit: z.string().optional().describe("Number of results, max 100. Default 20."),
|
|
58
|
+
}, async ({ currency, state, before, after, limit }) => {
|
|
59
|
+
const params = {};
|
|
60
|
+
if (currency)
|
|
61
|
+
params.currency = currency;
|
|
62
|
+
if (state)
|
|
63
|
+
params.state = state;
|
|
64
|
+
if (before)
|
|
65
|
+
params.before = before;
|
|
66
|
+
if (after)
|
|
67
|
+
params.after = after;
|
|
68
|
+
if (limit)
|
|
69
|
+
params.limit = limit;
|
|
70
|
+
const result = await client.privateGet("/api/v1/asset/deposit-history", params);
|
|
71
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
72
|
+
});
|
|
73
|
+
server.tool("get_withdrawal_history", "Get withdrawal history.", {
|
|
74
|
+
currency: z.string().optional().describe("Currency, e.g. USDT"),
|
|
75
|
+
state: z.string().optional().describe("Status: 0=waiting review, 2=failed, 3=success, 4=canceled, 7=processing"),
|
|
76
|
+
before: z.string().optional().describe("Pagination - records newer than this timestamp (ms)"),
|
|
77
|
+
after: z.string().optional().describe("Pagination - records earlier than this timestamp (ms)"),
|
|
78
|
+
limit: z.string().optional().describe("Number of results, max 100. Default 20."),
|
|
79
|
+
}, async ({ currency, state, before, after, limit }) => {
|
|
80
|
+
const params = {};
|
|
81
|
+
if (currency)
|
|
82
|
+
params.currency = currency;
|
|
83
|
+
if (state)
|
|
84
|
+
params.state = state;
|
|
85
|
+
if (before)
|
|
86
|
+
params.before = before;
|
|
87
|
+
if (after)
|
|
88
|
+
params.after = after;
|
|
89
|
+
if (limit)
|
|
90
|
+
params.limit = limit;
|
|
91
|
+
const result = await client.privateGet("/api/v1/asset/withdrawal-history", params);
|
|
92
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
93
|
+
});
|
|
94
|
+
server.tool("get_apikey_info", "Get API key information including permissions, IP whitelist, and expiration.", {}, async () => {
|
|
95
|
+
const result = await client.privateGet("/api/v1/user/query-apikey");
|
|
96
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=asset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset.js","sourceRoot":"","sources":["../../src/tools/asset.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/tools/public.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,wBAAgB,mBAAmB,CACjC,MAAM,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,EAC1B,MAAM,EAAE,YAAY,QAuHrB"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export function registerPublicTools(server, client) {
|
|
3
|
+
server.tool("get_instruments", "Get available trading instruments. Returns contract specifications including min size, tick size, leverage limits.", { instId: z.string().optional().describe("Instrument ID, e.g. BTC-USDT") }, async ({ instId }) => {
|
|
4
|
+
const params = {};
|
|
5
|
+
if (instId)
|
|
6
|
+
params.instId = instId;
|
|
7
|
+
const result = await client.publicGet("/api/v1/market/instruments", params);
|
|
8
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
9
|
+
});
|
|
10
|
+
server.tool("get_tickers", "Get latest price snapshot, best bid/ask, and 24h trading volume for instruments.", { instId: z.string().optional().describe("Instrument ID, e.g. BTC-USDT. If omitted, returns all tickers.") }, async ({ instId }) => {
|
|
11
|
+
const params = {};
|
|
12
|
+
if (instId)
|
|
13
|
+
params.instId = instId;
|
|
14
|
+
const result = await client.publicGet("/api/v1/market/tickers", params);
|
|
15
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
16
|
+
});
|
|
17
|
+
server.tool("get_orderbook", "Get order book depth for an instrument.", {
|
|
18
|
+
instId: z.string().describe("Instrument ID, e.g. BTC-USDT"),
|
|
19
|
+
size: z.string().optional().describe("Depth per side, max 100. Default 1."),
|
|
20
|
+
}, async ({ instId, size }) => {
|
|
21
|
+
const params = { instId };
|
|
22
|
+
if (size)
|
|
23
|
+
params.size = size;
|
|
24
|
+
const result = await client.publicGet("/api/v1/market/books", params);
|
|
25
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
26
|
+
});
|
|
27
|
+
server.tool("get_trades", "Get recent trades for an instrument.", {
|
|
28
|
+
instId: z.string().describe("Instrument ID, e.g. BTC-USDT"),
|
|
29
|
+
limit: z.string().optional().describe("Number of results, max 100. Default 100."),
|
|
30
|
+
}, async ({ instId, limit }) => {
|
|
31
|
+
const params = { instId };
|
|
32
|
+
if (limit)
|
|
33
|
+
params.limit = limit;
|
|
34
|
+
const result = await client.publicGet("/api/v1/market/trades", params);
|
|
35
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
36
|
+
});
|
|
37
|
+
server.tool("get_mark_price", "Get mark price and index price for instruments.", { instId: z.string().optional().describe("Instrument ID, e.g. BTC-USDT") }, async ({ instId }) => {
|
|
38
|
+
const params = {};
|
|
39
|
+
if (instId)
|
|
40
|
+
params.instId = instId;
|
|
41
|
+
const result = await client.publicGet("/api/v1/market/mark-price", params);
|
|
42
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
43
|
+
});
|
|
44
|
+
server.tool("get_candlesticks", "Get candlestick/kline data for an instrument.", {
|
|
45
|
+
instId: z.string().describe("Instrument ID, e.g. BTC-USDT"),
|
|
46
|
+
bar: z.string().optional().describe("Bar size, e.g. 1m, 5m, 15m, 30m, 1H, 4H, 1D, 1W, 1M. Default 1m."),
|
|
47
|
+
after: z.string().optional().describe("Pagination - return records earlier than this timestamp (ms)"),
|
|
48
|
+
before: z.string().optional().describe("Pagination - return records newer than this timestamp (ms)"),
|
|
49
|
+
limit: z.string().optional().describe("Number of results, max 300. Default 100."),
|
|
50
|
+
}, async ({ instId, bar, after, before, limit }) => {
|
|
51
|
+
const params = { instId };
|
|
52
|
+
if (bar)
|
|
53
|
+
params.bar = bar;
|
|
54
|
+
if (after)
|
|
55
|
+
params.after = after;
|
|
56
|
+
if (before)
|
|
57
|
+
params.before = before;
|
|
58
|
+
if (limit)
|
|
59
|
+
params.limit = limit;
|
|
60
|
+
const result = await client.publicGet("/api/v1/market/candles", params);
|
|
61
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
62
|
+
});
|
|
63
|
+
server.tool("get_funding_rate", "Get current funding rate for instruments.", { instId: z.string().optional().describe("Instrument ID, e.g. BTC-USDT") }, async ({ instId }) => {
|
|
64
|
+
const params = {};
|
|
65
|
+
if (instId)
|
|
66
|
+
params.instId = instId;
|
|
67
|
+
const result = await client.publicGet("/api/v1/market/funding-rate", params);
|
|
68
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
69
|
+
});
|
|
70
|
+
server.tool("get_funding_rate_history", "Get historical funding rate data.", {
|
|
71
|
+
instId: z.string().describe("Instrument ID, e.g. BTC-USDT"),
|
|
72
|
+
after: z.string().optional().describe("Pagination - return records earlier than this timestamp (ms)"),
|
|
73
|
+
before: z.string().optional().describe("Pagination - return records newer than this timestamp (ms)"),
|
|
74
|
+
limit: z.string().optional().describe("Number of results, max 100. Default 100."),
|
|
75
|
+
}, async ({ instId, after, before, limit }) => {
|
|
76
|
+
const params = { instId };
|
|
77
|
+
if (after)
|
|
78
|
+
params.after = after;
|
|
79
|
+
if (before)
|
|
80
|
+
params.before = before;
|
|
81
|
+
if (limit)
|
|
82
|
+
params.limit = limit;
|
|
83
|
+
const result = await client.publicGet("/api/v1/market/funding-rate-history", params);
|
|
84
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=public.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/tools/public.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trading.d.ts","sourceRoot":"","sources":["../../src/tools/trading.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,wBAAgB,oBAAoB,CAClC,MAAM,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,EAC1B,MAAM,EAAE,YAAY,QA8XrB"}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export function registerTradingTools(server, client) {
|
|
3
|
+
server.tool("place_order", "Place a new futures order. Supports limit, market, post_only, fok, ioc order types.", {
|
|
4
|
+
instId: z.string().describe("Instrument ID, e.g. BTC-USDT"),
|
|
5
|
+
marginMode: z.string().describe("Margin mode: cross or isolated"),
|
|
6
|
+
positionSide: z.string().optional().describe("Position side: long, short, or net. Default depends on position mode."),
|
|
7
|
+
side: z.string().describe("Order side: buy or sell"),
|
|
8
|
+
orderType: z.string().describe("Order type: market, limit, post_only, fok, ioc"),
|
|
9
|
+
price: z.string().optional().describe("Price (required for limit orders)"),
|
|
10
|
+
size: z.string().describe("Order size in contracts (min 0.1 for BTC-USDT)"),
|
|
11
|
+
reduceOnly: z.boolean().optional().describe("Whether reduce-only order"),
|
|
12
|
+
clientOrderId: z.string().optional().describe("Client-supplied order ID"),
|
|
13
|
+
tpTriggerPrice: z.string().optional().describe("Take profit trigger price"),
|
|
14
|
+
tpOrderPrice: z.string().optional().describe("Take profit order price. -1 for market price."),
|
|
15
|
+
slTriggerPrice: z.string().optional().describe("Stop loss trigger price"),
|
|
16
|
+
slOrderPrice: z.string().optional().describe("Stop loss order price. -1 for market price."),
|
|
17
|
+
brokerId: z.string().optional().describe("Broker ID"),
|
|
18
|
+
}, async (params) => {
|
|
19
|
+
const body = {
|
|
20
|
+
instId: params.instId,
|
|
21
|
+
marginMode: params.marginMode,
|
|
22
|
+
side: params.side,
|
|
23
|
+
orderType: params.orderType,
|
|
24
|
+
size: params.size,
|
|
25
|
+
};
|
|
26
|
+
if (params.positionSide)
|
|
27
|
+
body.positionSide = params.positionSide;
|
|
28
|
+
if (params.price)
|
|
29
|
+
body.price = params.price;
|
|
30
|
+
if (params.reduceOnly !== undefined)
|
|
31
|
+
body.reduceOnly = params.reduceOnly;
|
|
32
|
+
if (params.clientOrderId)
|
|
33
|
+
body.clientOrderId = params.clientOrderId;
|
|
34
|
+
if (params.tpTriggerPrice)
|
|
35
|
+
body.tpTriggerPrice = params.tpTriggerPrice;
|
|
36
|
+
if (params.tpOrderPrice)
|
|
37
|
+
body.tpOrderPrice = params.tpOrderPrice;
|
|
38
|
+
if (params.slTriggerPrice)
|
|
39
|
+
body.slTriggerPrice = params.slTriggerPrice;
|
|
40
|
+
if (params.slOrderPrice)
|
|
41
|
+
body.slOrderPrice = params.slOrderPrice;
|
|
42
|
+
if (params.brokerId)
|
|
43
|
+
body.brokerId = params.brokerId;
|
|
44
|
+
const result = await client.privatePost("/api/v1/trade/order", body);
|
|
45
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
46
|
+
});
|
|
47
|
+
server.tool("cancel_order", "Cancel an existing order.", {
|
|
48
|
+
instId: z.string().describe("Instrument ID, e.g. BTC-USDT"),
|
|
49
|
+
orderId: z.string().optional().describe("Order ID"),
|
|
50
|
+
clientOrderId: z.string().optional().describe("Client-supplied order ID"),
|
|
51
|
+
}, async ({ instId, orderId, clientOrderId }) => {
|
|
52
|
+
const body = { instId };
|
|
53
|
+
if (orderId)
|
|
54
|
+
body.orderId = orderId;
|
|
55
|
+
if (clientOrderId)
|
|
56
|
+
body.clientOrderId = clientOrderId;
|
|
57
|
+
const result = await client.privatePost("/api/v1/trade/cancel-order", body);
|
|
58
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
59
|
+
});
|
|
60
|
+
server.tool("batch_orders", "Place multiple orders at once (up to 20). All must share same instId and marginMode.", {
|
|
61
|
+
orders: z.string().describe("JSON array string of order objects. Each needs: instId, marginMode, side, orderType, size, and optionally price, positionSide, etc."),
|
|
62
|
+
}, async ({ orders }) => {
|
|
63
|
+
const parsed = JSON.parse(orders);
|
|
64
|
+
const result = await client.privatePost("/api/v1/trade/batch-orders", parsed);
|
|
65
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
66
|
+
});
|
|
67
|
+
server.tool("cancel_batch_orders", "Cancel multiple orders at once.", {
|
|
68
|
+
orders: z.string().describe("JSON array string of cancel objects. Each needs: instId, orderId or clientOrderId."),
|
|
69
|
+
}, async ({ orders }) => {
|
|
70
|
+
const parsed = JSON.parse(orders);
|
|
71
|
+
const result = await client.privatePost("/api/v1/trade/cancel-batch-orders", parsed);
|
|
72
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
73
|
+
});
|
|
74
|
+
server.tool("close_position", "Close a position for an instrument.", {
|
|
75
|
+
instId: z.string().describe("Instrument ID, e.g. BTC-USDT"),
|
|
76
|
+
marginMode: z.string().describe("Margin mode: cross or isolated"),
|
|
77
|
+
positionSide: z.string().optional().describe("Position side: long, short, or net"),
|
|
78
|
+
clientOrderId: z.string().optional().describe("Client-supplied order ID"),
|
|
79
|
+
}, async ({ instId, marginMode, positionSide, clientOrderId }) => {
|
|
80
|
+
const body = { instId, marginMode };
|
|
81
|
+
if (positionSide)
|
|
82
|
+
body.positionSide = positionSide;
|
|
83
|
+
if (clientOrderId)
|
|
84
|
+
body.clientOrderId = clientOrderId;
|
|
85
|
+
const result = await client.privatePost("/api/v1/trade/close-position", body);
|
|
86
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
87
|
+
});
|
|
88
|
+
server.tool("get_open_orders", "Get list of currently open/pending orders.", {
|
|
89
|
+
instId: z.string().optional().describe("Instrument ID, e.g. BTC-USDT"),
|
|
90
|
+
orderType: z.string().optional().describe("Order type filter"),
|
|
91
|
+
after: z.string().optional().describe("Pagination - records earlier than this orderId"),
|
|
92
|
+
before: z.string().optional().describe("Pagination - records newer than this orderId"),
|
|
93
|
+
limit: z.string().optional().describe("Number of results, max 100. Default 20."),
|
|
94
|
+
}, async ({ instId, orderType, after, before, limit }) => {
|
|
95
|
+
const params = {};
|
|
96
|
+
if (instId)
|
|
97
|
+
params.instId = instId;
|
|
98
|
+
if (orderType)
|
|
99
|
+
params.orderType = orderType;
|
|
100
|
+
if (after)
|
|
101
|
+
params.after = after;
|
|
102
|
+
if (before)
|
|
103
|
+
params.before = before;
|
|
104
|
+
if (limit)
|
|
105
|
+
params.limit = limit;
|
|
106
|
+
const result = await client.privateGet("/api/v1/trade/orders-pending", params);
|
|
107
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
108
|
+
});
|
|
109
|
+
server.tool("get_order_history", "Get order history.", {
|
|
110
|
+
instId: z.string().optional().describe("Instrument ID, e.g. BTC-USDT"),
|
|
111
|
+
orderType: z.string().optional().describe("Order type filter"),
|
|
112
|
+
after: z.string().optional().describe("Pagination - records earlier than this orderId"),
|
|
113
|
+
before: z.string().optional().describe("Pagination - records newer than this orderId"),
|
|
114
|
+
begin: z.string().optional().describe("Filter begin timestamp (ms)"),
|
|
115
|
+
end: z.string().optional().describe("Filter end timestamp (ms)"),
|
|
116
|
+
limit: z.string().optional().describe("Number of results, max 100. Default 20."),
|
|
117
|
+
}, async ({ instId, orderType, after, before, begin, end, limit }) => {
|
|
118
|
+
const params = {};
|
|
119
|
+
if (instId)
|
|
120
|
+
params.instId = instId;
|
|
121
|
+
if (orderType)
|
|
122
|
+
params.orderType = orderType;
|
|
123
|
+
if (after)
|
|
124
|
+
params.after = after;
|
|
125
|
+
if (before)
|
|
126
|
+
params.before = before;
|
|
127
|
+
if (begin)
|
|
128
|
+
params.begin = begin;
|
|
129
|
+
if (end)
|
|
130
|
+
params.end = end;
|
|
131
|
+
if (limit)
|
|
132
|
+
params.limit = limit;
|
|
133
|
+
const result = await client.privateGet("/api/v1/trade/orders-history", params);
|
|
134
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
135
|
+
});
|
|
136
|
+
server.tool("get_order_detail", "Get details of a specific order.", {
|
|
137
|
+
orderId: z.string().optional().describe("Order ID"),
|
|
138
|
+
clientOrderId: z.string().optional().describe("Client-supplied order ID"),
|
|
139
|
+
}, async ({ orderId, clientOrderId }) => {
|
|
140
|
+
const params = {};
|
|
141
|
+
if (orderId)
|
|
142
|
+
params.orderId = orderId;
|
|
143
|
+
if (clientOrderId)
|
|
144
|
+
params.clientOrderId = clientOrderId;
|
|
145
|
+
const result = await client.privateGet("/api/v1/trade/orders-detail", params);
|
|
146
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
147
|
+
});
|
|
148
|
+
server.tool("get_fills_history", "Get trade fill history for futures.", {
|
|
149
|
+
instId: z.string().optional().describe("Instrument ID, e.g. BTC-USDT"),
|
|
150
|
+
orderId: z.string().optional().describe("Order ID"),
|
|
151
|
+
after: z.string().optional().describe("Pagination - records earlier than this tradeId"),
|
|
152
|
+
before: z.string().optional().describe("Pagination - records newer than this tradeId"),
|
|
153
|
+
begin: z.string().optional().describe("Filter begin timestamp (ms)"),
|
|
154
|
+
end: z.string().optional().describe("Filter end timestamp (ms)"),
|
|
155
|
+
limit: z.string().optional().describe("Number of results, max 100. Default 20."),
|
|
156
|
+
}, async ({ instId, orderId, after, before, begin, end, limit }) => {
|
|
157
|
+
const params = {};
|
|
158
|
+
if (instId)
|
|
159
|
+
params.instId = instId;
|
|
160
|
+
if (orderId)
|
|
161
|
+
params.orderId = orderId;
|
|
162
|
+
if (after)
|
|
163
|
+
params.after = after;
|
|
164
|
+
if (before)
|
|
165
|
+
params.before = before;
|
|
166
|
+
if (begin)
|
|
167
|
+
params.begin = begin;
|
|
168
|
+
if (end)
|
|
169
|
+
params.end = end;
|
|
170
|
+
if (limit)
|
|
171
|
+
params.limit = limit;
|
|
172
|
+
const result = await client.privateGet("/api/v1/trade/fills-history", params);
|
|
173
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
174
|
+
});
|
|
175
|
+
server.tool("place_tpsl", "Place take-profit/stop-loss order for a position.", {
|
|
176
|
+
instId: z.string().describe("Instrument ID, e.g. BTC-USDT"),
|
|
177
|
+
marginMode: z.string().describe("Margin mode: cross or isolated"),
|
|
178
|
+
positionSide: z.string().optional().describe("Position side: long, short, or net"),
|
|
179
|
+
tpTriggerPrice: z.string().optional().describe("Take profit trigger price"),
|
|
180
|
+
tpOrderPrice: z.string().optional().describe("Take profit order price. -1 for market."),
|
|
181
|
+
slTriggerPrice: z.string().optional().describe("Stop loss trigger price"),
|
|
182
|
+
slOrderPrice: z.string().optional().describe("Stop loss order price. -1 for market."),
|
|
183
|
+
size: z.string().optional().describe("Size in contracts"),
|
|
184
|
+
}, async (params) => {
|
|
185
|
+
const body = {
|
|
186
|
+
instId: params.instId,
|
|
187
|
+
marginMode: params.marginMode,
|
|
188
|
+
};
|
|
189
|
+
if (params.positionSide)
|
|
190
|
+
body.positionSide = params.positionSide;
|
|
191
|
+
if (params.tpTriggerPrice)
|
|
192
|
+
body.tpTriggerPrice = params.tpTriggerPrice;
|
|
193
|
+
if (params.tpOrderPrice)
|
|
194
|
+
body.tpOrderPrice = params.tpOrderPrice;
|
|
195
|
+
if (params.slTriggerPrice)
|
|
196
|
+
body.slTriggerPrice = params.slTriggerPrice;
|
|
197
|
+
if (params.slOrderPrice)
|
|
198
|
+
body.slOrderPrice = params.slOrderPrice;
|
|
199
|
+
if (params.size)
|
|
200
|
+
body.size = params.size;
|
|
201
|
+
const result = await client.privatePost("/api/v1/trade/order-tpsl", body);
|
|
202
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
203
|
+
});
|
|
204
|
+
server.tool("cancel_tpsl", "Cancel a take-profit/stop-loss order.", {
|
|
205
|
+
instId: z.string().describe("Instrument ID, e.g. BTC-USDT"),
|
|
206
|
+
tpslId: z.string().describe("TPSL order ID"),
|
|
207
|
+
}, async ({ instId, tpslId }) => {
|
|
208
|
+
const result = await client.privatePost("/api/v1/trade/cancel-tpsl", { instId, tpslId });
|
|
209
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
210
|
+
});
|
|
211
|
+
server.tool("get_pending_tpsl", "Get pending take-profit/stop-loss orders.", {
|
|
212
|
+
instId: z.string().optional().describe("Instrument ID, e.g. BTC-USDT"),
|
|
213
|
+
tpslId: z.string().optional().describe("TPSL order ID"),
|
|
214
|
+
after: z.string().optional().describe("Pagination - records earlier than this ID"),
|
|
215
|
+
before: z.string().optional().describe("Pagination - records newer than this ID"),
|
|
216
|
+
limit: z.string().optional().describe("Number of results, max 100. Default 20."),
|
|
217
|
+
}, async ({ instId, tpslId, after, before, limit }) => {
|
|
218
|
+
const params = {};
|
|
219
|
+
if (instId)
|
|
220
|
+
params.instId = instId;
|
|
221
|
+
if (tpslId)
|
|
222
|
+
params.tpslId = tpslId;
|
|
223
|
+
if (after)
|
|
224
|
+
params.after = after;
|
|
225
|
+
if (before)
|
|
226
|
+
params.before = before;
|
|
227
|
+
if (limit)
|
|
228
|
+
params.limit = limit;
|
|
229
|
+
const result = await client.privateGet("/api/v1/trade/orders-tpsl-pending", params);
|
|
230
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
231
|
+
});
|
|
232
|
+
server.tool("get_tpsl_history", "Get take-profit/stop-loss order history.", {
|
|
233
|
+
instId: z.string().optional().describe("Instrument ID, e.g. BTC-USDT"),
|
|
234
|
+
tpslId: z.string().optional().describe("TPSL order ID"),
|
|
235
|
+
after: z.string().optional().describe("Pagination - records earlier than this ID"),
|
|
236
|
+
before: z.string().optional().describe("Pagination - records newer than this ID"),
|
|
237
|
+
limit: z.string().optional().describe("Number of results, max 100. Default 20."),
|
|
238
|
+
}, async ({ instId, tpslId, after, before, limit }) => {
|
|
239
|
+
const params = {};
|
|
240
|
+
if (instId)
|
|
241
|
+
params.instId = instId;
|
|
242
|
+
if (tpslId)
|
|
243
|
+
params.tpslId = tpslId;
|
|
244
|
+
if (after)
|
|
245
|
+
params.after = after;
|
|
246
|
+
if (before)
|
|
247
|
+
params.before = before;
|
|
248
|
+
if (limit)
|
|
249
|
+
params.limit = limit;
|
|
250
|
+
const result = await client.privateGet("/api/v1/trade/orders-tpsl-history", params);
|
|
251
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
252
|
+
});
|
|
253
|
+
server.tool("place_algo_order", "Place an algo order (trigger/conditional order).", {
|
|
254
|
+
instId: z.string().describe("Instrument ID, e.g. BTC-USDT"),
|
|
255
|
+
marginMode: z.string().describe("Margin mode: cross or isolated"),
|
|
256
|
+
positionSide: z.string().optional().describe("Position side: long, short, or net"),
|
|
257
|
+
side: z.string().describe("Order side: buy or sell"),
|
|
258
|
+
orderType: z.string().describe("Order type: conditional, trigger"),
|
|
259
|
+
size: z.string().describe("Size in contracts"),
|
|
260
|
+
triggerPrice: z.string().optional().describe("Trigger price"),
|
|
261
|
+
orderPrice: z.string().optional().describe("Order price after trigger. -1 for market."),
|
|
262
|
+
reduceOnly: z.boolean().optional().describe("Whether reduce-only order"),
|
|
263
|
+
clientOrderId: z.string().optional().describe("Client-supplied order ID"),
|
|
264
|
+
}, async (params) => {
|
|
265
|
+
const body = {
|
|
266
|
+
instId: params.instId,
|
|
267
|
+
marginMode: params.marginMode,
|
|
268
|
+
side: params.side,
|
|
269
|
+
orderType: params.orderType,
|
|
270
|
+
size: params.size,
|
|
271
|
+
};
|
|
272
|
+
if (params.positionSide)
|
|
273
|
+
body.positionSide = params.positionSide;
|
|
274
|
+
if (params.triggerPrice)
|
|
275
|
+
body.triggerPrice = params.triggerPrice;
|
|
276
|
+
if (params.orderPrice)
|
|
277
|
+
body.orderPrice = params.orderPrice;
|
|
278
|
+
if (params.reduceOnly !== undefined)
|
|
279
|
+
body.reduceOnly = params.reduceOnly;
|
|
280
|
+
if (params.clientOrderId)
|
|
281
|
+
body.clientOrderId = params.clientOrderId;
|
|
282
|
+
const result = await client.privatePost("/api/v1/trade/order-algo", body);
|
|
283
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
284
|
+
});
|
|
285
|
+
server.tool("cancel_algo_order", "Cancel algo orders.", {
|
|
286
|
+
orders: z.string().describe("JSON array string of cancel objects, each with instId and algoId."),
|
|
287
|
+
}, async ({ orders }) => {
|
|
288
|
+
const parsed = JSON.parse(orders);
|
|
289
|
+
const result = await client.privatePost("/api/v1/trade/cancel-algo", parsed);
|
|
290
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
291
|
+
});
|
|
292
|
+
server.tool("get_pending_algo_orders", "Get pending algo orders.", {
|
|
293
|
+
instId: z.string().optional().describe("Instrument ID, e.g. BTC-USDT"),
|
|
294
|
+
algoId: z.string().optional().describe("Algo order ID"),
|
|
295
|
+
after: z.string().optional().describe("Pagination - records earlier than this ID"),
|
|
296
|
+
before: z.string().optional().describe("Pagination - records newer than this ID"),
|
|
297
|
+
limit: z.string().optional().describe("Number of results, max 100. Default 20."),
|
|
298
|
+
}, async ({ instId, algoId, after, before, limit }) => {
|
|
299
|
+
const params = {};
|
|
300
|
+
if (instId)
|
|
301
|
+
params.instId = instId;
|
|
302
|
+
if (algoId)
|
|
303
|
+
params.algoId = algoId;
|
|
304
|
+
if (after)
|
|
305
|
+
params.after = after;
|
|
306
|
+
if (before)
|
|
307
|
+
params.before = before;
|
|
308
|
+
if (limit)
|
|
309
|
+
params.limit = limit;
|
|
310
|
+
const result = await client.privateGet("/api/v1/trade/orders-algo-pending", params);
|
|
311
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
312
|
+
});
|
|
313
|
+
server.tool("get_algo_order_history", "Get algo order history.", {
|
|
314
|
+
instId: z.string().optional().describe("Instrument ID, e.g. BTC-USDT"),
|
|
315
|
+
algoId: z.string().optional().describe("Algo order ID"),
|
|
316
|
+
after: z.string().optional().describe("Pagination - records earlier than this ID"),
|
|
317
|
+
before: z.string().optional().describe("Pagination - records newer than this ID"),
|
|
318
|
+
limit: z.string().optional().describe("Number of results, max 100. Default 20."),
|
|
319
|
+
}, async ({ instId, algoId, after, before, limit }) => {
|
|
320
|
+
const params = {};
|
|
321
|
+
if (instId)
|
|
322
|
+
params.instId = instId;
|
|
323
|
+
if (algoId)
|
|
324
|
+
params.algoId = algoId;
|
|
325
|
+
if (after)
|
|
326
|
+
params.after = after;
|
|
327
|
+
if (before)
|
|
328
|
+
params.before = before;
|
|
329
|
+
if (limit)
|
|
330
|
+
params.limit = limit;
|
|
331
|
+
const result = await client.privateGet("/api/v1/trade/orders-algo-history", params);
|
|
332
|
+
return { content: [{ type: "text", text: JSON.stringify(result, null, 2) }] };
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=trading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trading.js","sourceRoot":"","sources":["../../src/tools/trading.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "blofin-mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"blofin-mcp": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc",
|
|
11
|
+
"start": "node dist/index.js",
|
|
12
|
+
"typecheck": "tsc --noEmit"
|
|
13
|
+
},
|
|
14
|
+
"keywords": ["mcp", "blofin", "trading", "crypto"],
|
|
15
|
+
"author": "",
|
|
16
|
+
"license": "ISC",
|
|
17
|
+
"description": "MCP server for BloFin exchange API - market data, trading, account management",
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
20
|
+
"zod": "^4.3.6"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@types/node": "^25.2.3",
|
|
24
|
+
"typescript": "^5.9.3"
|
|
25
|
+
}
|
|
26
|
+
}
|