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 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
@@ -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"}
@@ -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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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,5 @@
1
+ import { BlofinClient } from "../client.js";
2
+ export declare function registerAccountTools(server: {
3
+ tool: Function;
4
+ }, client: BlofinClient): void;
5
+ //# sourceMappingURL=account.d.ts.map
@@ -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,5 @@
1
+ import { BlofinClient } from "../client.js";
2
+ export declare function registerAssetTools(server: {
3
+ tool: Function;
4
+ }, client: BlofinClient): void;
5
+ //# sourceMappingURL=asset.d.ts.map
@@ -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,5 @@
1
+ import { BlofinClient } from "../client.js";
2
+ export declare function registerPublicTools(server: {
3
+ tool: Function;
4
+ }, client: BlofinClient): void;
5
+ //# sourceMappingURL=public.d.ts.map
@@ -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,5 @@
1
+ import { BlofinClient } from "../client.js";
2
+ export declare function registerTradingTools(server: {
3
+ tool: Function;
4
+ }, client: BlofinClient): void;
5
+ //# sourceMappingURL=trading.d.ts.map
@@ -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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,oBAAoB,CAClC,MAA0B,EAC1B,MAAoB;IAEpB,MAAM,CAAC,IAAI,CACT,aAAa,EACb,qFAAqF,EACrF;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC3D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACjE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uEAAuE,CAAC;QACrH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QAChF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QAC1E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QAC3E,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACxE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACzE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAC3E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;QAC7F,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACzE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;QAC3F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;KACtD,EACD,KAAK,EAAE,MAKN,EAAE,EAAE;QACH,MAAM,IAAI,GAA4B;YACpC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC;QACF,IAAI,MAAM,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACjE,IAAI,MAAM,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC5C,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACzE,IAAI,MAAM,CAAC,aAAa;YAAE,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QACpE,IAAI,MAAM,CAAC,cAAc;YAAE,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QACvE,IAAI,MAAM,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACjE,IAAI,MAAM,CAAC,cAAc;YAAE,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QACvE,IAAI,MAAM,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACjE,IAAI,MAAM,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;QACrE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,2BAA2B,EAC3B;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC3D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QACnD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAC1E,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAgE,EAAE,EAAE;QACzG,MAAM,IAAI,GAA4B,EAAE,MAAM,EAAE,CAAC;QACjD,IAAI,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACpC,IAAI,aAAa;YAAE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,4BAA4B,EAAE,IAAI,CAAC,CAAC;QAC5E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,sFAAsF,EACtF;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qIAAqI,CAAC;KACnK,EACD,KAAK,EAAE,EAAE,MAAM,EAAsB,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,4BAA4B,EAAE,MAAM,CAAC,CAAC;QAC9E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,iCAAiC,EACjC;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oFAAoF,CAAC;KAClH,EACD,KAAK,EAAE,EAAE,MAAM,EAAsB,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,mCAAmC,EAAE,MAAM,CAAC,CAAC;QACrF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,qCAAqC,EACrC;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC3D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACjE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAClF,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAC1E,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAyF,EAAE,EAAE;QACnJ,MAAM,IAAI,GAA4B,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC7D,IAAI,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACnD,IAAI,aAAa;YAAE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,8BAA8B,EAAE,IAAI,CAAC,CAAC;QAC9E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,4CAA4C,EAC5C;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACtE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC9D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACvF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QACtF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KACjF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAA4F,EAAE,EAAE;QAC9I,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAC5C,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;QAC/E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,oBAAoB,EACpB;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACtE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC9D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACvF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QACtF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACpE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAChE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KACjF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAA0H,EAAE,EAAE;QACxL,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAC5C,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,IAAI,GAAG;YAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;QAC1B,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;QAC/E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,kCAAkC,EAClC;QACE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QACnD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAC1E,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAgD,EAAE,EAAE;QACjF,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,OAAO;YAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QACtC,IAAI,aAAa;YAAE,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;QAC9E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,qCAAqC,EACrC;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACtE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QACnD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;QACvF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;QACtF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QACpE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAChE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KACjF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAwH,EAAE,EAAE;QACpL,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,OAAO;YAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QACtC,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,IAAI,GAAG;YAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;QAC1B,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;QAC9E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,mDAAmD,EACnD;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC3D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACjE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAClF,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QAC3E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACvF,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACzE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QACrF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;KAC1D,EACD,KAAK,EAAE,MAIN,EAAE,EAAE;QACH,MAAM,IAAI,GAA4B;YACpC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,CAAC;QACF,IAAI,MAAM,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACjE,IAAI,MAAM,CAAC,cAAc;YAAE,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QACvE,IAAI,MAAM,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACjE,IAAI,MAAM,CAAC,cAAc;YAAE,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QACvE,IAAI,MAAM,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACjE,IAAI,MAAM,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;QAC1E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,uCAAuC,EACvC;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC3D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;KAC7C,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAsC,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACzF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,2CAA2C,EAC3C;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACtE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QAClF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACjF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KACjF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAyF,EAAE,EAAE;QACxI,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,mCAAmC,EAAE,MAAM,CAAC,CAAC;QACpF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,0CAA0C,EAC1C;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACtE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QAClF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACjF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KACjF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAyF,EAAE,EAAE;QACxI,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,mCAAmC,EAAE,MAAM,CAAC,CAAC;QACpF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,kDAAkD,EAClD;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC3D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QACjE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAClF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACpD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAClE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC9C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC7D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QACvF,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACxE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KAC1E,EACD,KAAK,EAAE,MAIN,EAAE,EAAE;QACH,MAAM,IAAI,GAA4B;YACpC,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC;QACF,IAAI,MAAM,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACjE,IAAI,MAAM,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACjE,IAAI,MAAM,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAC3D,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACzE,IAAI,MAAM,CAAC,aAAa;YAAE,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;QAC1E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,mBAAmB,EACnB,qBAAqB,EACrB;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC;KACjG,EACD,KAAK,EAAE,EAAE,MAAM,EAAsB,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;QAC7E,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,yBAAyB,EACzB,0BAA0B,EAC1B;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACtE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QAClF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACjF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KACjF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAyF,EAAE,EAAE;QACxI,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,mCAAmC,EAAE,MAAM,CAAC,CAAC;QACpF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,wBAAwB,EACxB,yBAAyB,EACzB;QACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QACtE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QACvD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;QAClF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;QACjF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KACjF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAyF,EAAE,EAAE;QACxI,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QACnC,IAAI,KAAK;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,mCAAmC,EAAE,MAAM,CAAC,CAAC;QACpF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;AACJ,CAAC"}
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
+ }