@ironflowsh/mcp 0.7.1 → 0.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -20
- package/build/api.d.ts +2 -3
- package/build/api.d.ts.map +1 -1
- package/build/api.js +8 -10
- package/build/api.js.map +1 -1
- package/build/budget.d.ts +3 -0
- package/build/budget.d.ts.map +1 -0
- package/build/budget.js +61 -0
- package/build/budget.js.map +1 -0
- package/build/http.d.ts +3 -0
- package/build/http.d.ts.map +1 -0
- package/build/http.js +144 -0
- package/build/http.js.map +1 -0
- package/build/index.js +7 -65
- package/build/index.js.map +1 -1
- package/build/liquidations.d.ts +28 -0
- package/build/liquidations.d.ts.map +1 -0
- package/build/liquidations.js +77 -0
- package/build/liquidations.js.map +1 -0
- package/build/request.d.ts +8 -0
- package/build/request.d.ts.map +1 -0
- package/build/request.js +34 -0
- package/build/request.js.map +1 -0
- package/build/schemas.d.ts +3 -0
- package/build/schemas.d.ts.map +1 -0
- package/build/schemas.js +444 -0
- package/build/schemas.js.map +1 -0
- package/build/server.d.ts +6 -0
- package/build/server.d.ts.map +1 -0
- package/build/server.js +88 -0
- package/build/server.js.map +1 -0
- package/build/shape.d.ts +35 -0
- package/build/shape.d.ts.map +1 -0
- package/build/shape.js +56 -0
- package/build/shape.js.map +1 -0
- package/build/snapshot.d.ts +22 -0
- package/build/snapshot.d.ts.map +1 -0
- package/build/snapshot.js +40 -0
- package/build/snapshot.js.map +1 -0
- package/build/tools.d.ts.map +1 -1
- package/build/tools.js +162 -68
- package/build/tools.js.map +1 -1
- package/package.json +6 -4
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// Liquidation summary across all Hyperliquid markets. The REST feed returns
|
|
2
|
+
// raw rows (up to 1000 per page); an agent asking "who got liquidated in the
|
|
3
|
+
// last hour" needs totals, so the MCP pages through and aggregates.
|
|
4
|
+
export const MAX_SUMMARY_MINUTES = 240; // API cap for queries without a market
|
|
5
|
+
export const MAX_SUMMARY_PAGES = 8;
|
|
6
|
+
const PAGE_SIZE = "1000";
|
|
7
|
+
const TOP_MARKETS = 10;
|
|
8
|
+
const round = (n) => Math.round(n * 100) / 100;
|
|
9
|
+
// summarizeLiquidations fetches every liquidation in the window (up to
|
|
10
|
+
// MAX_SUMMARY_PAGES pages) and returns totals. complete=false means the page
|
|
11
|
+
// cap was hit and the totals are a lower bound.
|
|
12
|
+
export async function summarizeLiquidations(api, minutes, market, now = Date.now()) {
|
|
13
|
+
const from = now - minutes * 60_000;
|
|
14
|
+
const byMarket = new Map();
|
|
15
|
+
let count = 0;
|
|
16
|
+
let longs = 0;
|
|
17
|
+
let shorts = 0;
|
|
18
|
+
let largest = null;
|
|
19
|
+
let cursor = "";
|
|
20
|
+
let complete = false;
|
|
21
|
+
for (let page = 0; page < MAX_SUMMARY_PAGES; page++) {
|
|
22
|
+
const params = { from: String(from), to: String(now), limit: PAGE_SIZE };
|
|
23
|
+
if (market)
|
|
24
|
+
params.market = market;
|
|
25
|
+
if (cursor)
|
|
26
|
+
params.cursor = cursor;
|
|
27
|
+
const resp = (await api.get("/v1/liquidations", params));
|
|
28
|
+
for (const row of resp.data ?? []) {
|
|
29
|
+
const notional = Number(row.price) * Number(row.size);
|
|
30
|
+
if (!Number.isFinite(notional))
|
|
31
|
+
continue;
|
|
32
|
+
const name = row.display_symbol || row.market || "?";
|
|
33
|
+
const isLong = row.side === "sell";
|
|
34
|
+
count++;
|
|
35
|
+
if (isLong)
|
|
36
|
+
longs += notional;
|
|
37
|
+
else
|
|
38
|
+
shorts += notional;
|
|
39
|
+
const agg = byMarket.get(name) ?? { count: 0, notional: 0 };
|
|
40
|
+
agg.count++;
|
|
41
|
+
agg.notional += notional;
|
|
42
|
+
byMarket.set(name, agg);
|
|
43
|
+
if (!largest || notional > largest.notional_usd) {
|
|
44
|
+
largest = {
|
|
45
|
+
market: name,
|
|
46
|
+
side: isLong ? "long" : "short",
|
|
47
|
+
notional_usd: round(notional),
|
|
48
|
+
price: Number(row.price),
|
|
49
|
+
address: row.address,
|
|
50
|
+
timestamp: row.timestamp,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const next = resp.pagination?.next_cursor;
|
|
55
|
+
if (!resp.pagination?.has_more || !next) {
|
|
56
|
+
complete = true;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
cursor = next;
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
from,
|
|
63
|
+
to: now,
|
|
64
|
+
market: market || null,
|
|
65
|
+
count,
|
|
66
|
+
notional_usd: round(longs + shorts),
|
|
67
|
+
longs_liquidated_usd: round(longs),
|
|
68
|
+
shorts_liquidated_usd: round(shorts),
|
|
69
|
+
by_market: [...byMarket.entries()]
|
|
70
|
+
.sort((a, b) => b[1].notional - a[1].notional)
|
|
71
|
+
.slice(0, TOP_MARKETS)
|
|
72
|
+
.map(([m, a]) => ({ market: m, count: a.count, notional_usd: round(a.notional) })),
|
|
73
|
+
largest,
|
|
74
|
+
complete,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=liquidations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"liquidations.js","sourceRoot":"","sources":["../src/liquidations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IncomingMessage } from "node:http";
|
|
2
|
+
export declare class HttpError extends Error {
|
|
3
|
+
readonly status: number;
|
|
4
|
+
constructor(status: number, message: string);
|
|
5
|
+
}
|
|
6
|
+
export declare function readKey(req: IncomingMessage, url: URL): string | undefined;
|
|
7
|
+
export declare function clientIP(req: IncomingMessage, trustProxy: boolean): string | undefined;
|
|
8
|
+
//# sourceMappingURL=request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAKjD,qBAAa,SAAU,SAAQ,KAAK;IAEhC,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM;CAIlB;AAKD,wBAAgB,OAAO,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAW1E;AAID,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAKtF"}
|
package/build/request.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Request helpers for the hosted HTTP server, kept apart from http.ts so
|
|
2
|
+
// they can be tested without starting a listener.
|
|
3
|
+
const KEY_PATTERN = /^if_[A-Za-z0-9_-]{8,128}$/;
|
|
4
|
+
const IP_PATTERN = /^[0-9A-Fa-f.:]{2,45}$/;
|
|
5
|
+
export class HttpError extends Error {
|
|
6
|
+
status;
|
|
7
|
+
constructor(status, message) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.status = status;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
// readKey returns the caller's API key, undefined for keyless use, or throws
|
|
13
|
+
// when a key was sent but is malformed (a typo should not silently degrade
|
|
14
|
+
// to keyless limits).
|
|
15
|
+
export function readKey(req, url) {
|
|
16
|
+
const header = req.headers.authorization?.trim();
|
|
17
|
+
const raw = header ? header.replace(/^Bearer\s+/i, "") : url.searchParams.get("key")?.trim();
|
|
18
|
+
if (!raw)
|
|
19
|
+
return undefined;
|
|
20
|
+
if (!KEY_PATTERN.test(raw)) {
|
|
21
|
+
throw new HttpError(401, 'Malformed API key: send "Authorization: Bearer if_...", or no key for keyless access. Free keys: https://ironflow.sh/key');
|
|
22
|
+
}
|
|
23
|
+
return raw;
|
|
24
|
+
}
|
|
25
|
+
// clientIP returns the caller's IP from the proxy's X-Forwarded-For when
|
|
26
|
+
// FORWARD_CLIENT_IP is on, otherwise undefined (the API sees this server).
|
|
27
|
+
export function clientIP(req, trustProxy) {
|
|
28
|
+
if (!trustProxy)
|
|
29
|
+
return undefined;
|
|
30
|
+
const xff = req.headers["x-forwarded-for"];
|
|
31
|
+
const first = (Array.isArray(xff) ? xff[0] : xff)?.split(",")[0]?.trim();
|
|
32
|
+
return first && IP_PATTERN.test(first) ? first : undefined;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,kDAAkD;AAIlD,MAAM,WAAW,GAAG,2BAA2B,CAAC;AAChD,MAAM,UAAU,GAAG,uBAAuB,CAAC;AAE3C,MAAM,OAAO,SAAU,SAAQ,KAAK;IAEvB;IADX,YACW,MAAc,EACvB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,WAAM,GAAN,MAAM,CAAQ;IAIzB,CAAC;CACF;AAED,6EAA6E;AAC7E,2EAA2E;AAC3E,sBAAsB;AACtB,MAAM,UAAU,OAAO,CAAC,GAAoB,EAAE,GAAQ;IACpD,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;IACjD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IAC7F,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,SAAS,CACjB,GAAG,EACH,0HAA0H,CAC3H,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,yEAAyE;AACzE,2EAA2E;AAC3E,MAAM,UAAU,QAAQ,CAAC,GAAoB,EAAE,UAAmB;IAChE,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACzE,OAAO,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAgH7C,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA6ZhD,CAAC"}
|
package/build/schemas.js
ADDED
|
@@ -0,0 +1,444 @@
|
|
|
1
|
+
// Output schemas for every tool (MCP structured output). Written from real
|
|
2
|
+
// API responses. They describe fields without pinning JSON types or marking
|
|
3
|
+
// fields required: MCP clients validate structuredContent against these, and
|
|
4
|
+
// a schema stricter than the API (a number that arrives as a string, a
|
|
5
|
+
// field that is sometimes null) would turn a working tool into an error.
|
|
6
|
+
const d = (description) => ({ description });
|
|
7
|
+
const obj = (description, properties) => ({
|
|
8
|
+
type: "object",
|
|
9
|
+
description,
|
|
10
|
+
properties,
|
|
11
|
+
});
|
|
12
|
+
const arr = (description, items) => ({ type: "array", description, items });
|
|
13
|
+
// Fields that recur across endpoints.
|
|
14
|
+
const F = {
|
|
15
|
+
source: d("Venue, always hyperliquid"),
|
|
16
|
+
market: d('Display symbol, e.g. "BTC-PERP" or "xyz:NVDA-PERP"'),
|
|
17
|
+
display_symbol: d('Display symbol, e.g. "BTC-PERP" or "xyz:NVDA-PERP"'),
|
|
18
|
+
issuer: d('HIP-3 builder code ("" for native markets)'),
|
|
19
|
+
base_market: d("Display symbol without the HIP-3 issuer prefix"),
|
|
20
|
+
market_type: d("perp, spot or prediction"),
|
|
21
|
+
market_class: d("perp, spot, prediction or option"),
|
|
22
|
+
timestamp: d("Unix milliseconds"),
|
|
23
|
+
block_number: d("Hyperliquid block height"),
|
|
24
|
+
address: d("Wallet address (0x…)"),
|
|
25
|
+
side: d('Fill side, "buy" or "sell"'),
|
|
26
|
+
price: d("Price in USD"),
|
|
27
|
+
size: d("Size in base units"),
|
|
28
|
+
fee: d("Fee paid in USD"),
|
|
29
|
+
realized_pnl: d("Realized PnL in USD"),
|
|
30
|
+
venue: d("Venue, always hyperliquid"),
|
|
31
|
+
quote_asset: d("Quote asset, e.g. USDC"),
|
|
32
|
+
sequence: d("Order of the event within its block"),
|
|
33
|
+
from: d("Window start, Unix milliseconds"),
|
|
34
|
+
to: d("Window end, Unix milliseconds"),
|
|
35
|
+
window: d('Lookback window, e.g. "30d"'),
|
|
36
|
+
win_rate: d("Share of closed trades that were profitable, 0 to 1"),
|
|
37
|
+
profit_factor: d("Gross profit divided by gross loss"),
|
|
38
|
+
trades: d("Closed trades in the window"),
|
|
39
|
+
realized_pnl_usd: d("Realized PnL in USD"),
|
|
40
|
+
avg_notional_usd: d("Average trade size in USD"),
|
|
41
|
+
max_drawdown_pct: d("Largest peak-to-trough drop of the PnL curve, 0 to 1"),
|
|
42
|
+
last_trade_ms: d("Last trade, Unix milliseconds"),
|
|
43
|
+
};
|
|
44
|
+
const PAGINATION = obj("Cursor pagination", {
|
|
45
|
+
next_cursor: d("Pass as cursor to fetch the next page; null on the last page"),
|
|
46
|
+
has_more: d("Whether more rows exist"),
|
|
47
|
+
});
|
|
48
|
+
const page = (description, row) => obj(description, { data: arr(description, obj("One row", row)), pagination: PAGINATION });
|
|
49
|
+
const MARKET_ROW = {
|
|
50
|
+
source: F.source,
|
|
51
|
+
market: F.market,
|
|
52
|
+
issuer: F.issuer,
|
|
53
|
+
base_market: F.base_market,
|
|
54
|
+
display_symbol: F.display_symbol,
|
|
55
|
+
venue: F.venue,
|
|
56
|
+
quote_asset: F.quote_asset,
|
|
57
|
+
timestamp: F.timestamp,
|
|
58
|
+
};
|
|
59
|
+
const POSITION = obj("Open position", {
|
|
60
|
+
market: F.market,
|
|
61
|
+
market_class: F.market_class,
|
|
62
|
+
size: d("Signed size: positive long, negative short"),
|
|
63
|
+
entry_price: d("Average entry price"),
|
|
64
|
+
mark_price: d("Current mark price"),
|
|
65
|
+
position_value: d("Position value in USD"),
|
|
66
|
+
unrealized_pnl: d("Unrealized PnL in USD"),
|
|
67
|
+
realized_pnl: F.realized_pnl,
|
|
68
|
+
return_on_equity: d("Unrealized PnL divided by margin"),
|
|
69
|
+
leverage: d("Leverage"),
|
|
70
|
+
leverage_type: d("cross or isolated"),
|
|
71
|
+
});
|
|
72
|
+
const USER_STATE = obj("Open positions right now", {
|
|
73
|
+
address: F.address,
|
|
74
|
+
as_of_ts: d("Snapshot time, Unix milliseconds"),
|
|
75
|
+
asset_positions: arr("Open positions", POSITION),
|
|
76
|
+
margin_summary: obj("Account totals", {
|
|
77
|
+
total_position_value: d("Sum of position values in USD"),
|
|
78
|
+
total_unrealized_pnl: d("Sum of unrealized PnL in USD"),
|
|
79
|
+
total_realized_pnl: d("Sum of realized PnL in USD"),
|
|
80
|
+
open_markets_count: d("Markets with an open position"),
|
|
81
|
+
}),
|
|
82
|
+
});
|
|
83
|
+
const WALLET_STATS = {
|
|
84
|
+
address: F.address,
|
|
85
|
+
fills: d("Fills in the window"),
|
|
86
|
+
volume_usd: d("Traded notional in USD"),
|
|
87
|
+
realized_pnl: F.realized_pnl,
|
|
88
|
+
wins: d("Profitable closing fills"),
|
|
89
|
+
losses: d("Losing closing fills"),
|
|
90
|
+
maker_fills: d("Fills as maker"),
|
|
91
|
+
taker_fills: d("Fills as taker"),
|
|
92
|
+
pct_maker: d("Share of fills as maker, 0 to 1"),
|
|
93
|
+
};
|
|
94
|
+
const TRADER = {
|
|
95
|
+
address: F.address,
|
|
96
|
+
win_rate: F.win_rate,
|
|
97
|
+
profit_factor: F.profit_factor,
|
|
98
|
+
trades: F.trades,
|
|
99
|
+
realized_pnl_usd: F.realized_pnl_usd,
|
|
100
|
+
avg_notional_usd: F.avg_notional_usd,
|
|
101
|
+
last_trade_ms: F.last_trade_ms,
|
|
102
|
+
};
|
|
103
|
+
// Keyed by tool name. Every tool in tools.ts has an entry (pinned by a test).
|
|
104
|
+
export const outputSchemas = {
|
|
105
|
+
get_price: obj("Latest mark price", { market: F.market, price: F.price }),
|
|
106
|
+
get_recent_trades: page("Trades, newest first", {
|
|
107
|
+
...MARKET_ROW,
|
|
108
|
+
market_type: F.market_type,
|
|
109
|
+
block_number: F.block_number,
|
|
110
|
+
sequence: F.sequence,
|
|
111
|
+
price: F.price,
|
|
112
|
+
size: F.size,
|
|
113
|
+
side: F.side,
|
|
114
|
+
address: F.address,
|
|
115
|
+
fee: F.fee,
|
|
116
|
+
realized_pnl: F.realized_pnl,
|
|
117
|
+
}),
|
|
118
|
+
get_candles: page("OHLCV candles", {
|
|
119
|
+
...MARKET_ROW,
|
|
120
|
+
interval: d("Candle interval"),
|
|
121
|
+
open: d("Open price"),
|
|
122
|
+
high: d("High price"),
|
|
123
|
+
low: d("Low price"),
|
|
124
|
+
close: d("Close price"),
|
|
125
|
+
volume: d("Volume in base units"),
|
|
126
|
+
trade_count: d("Trades in the candle"),
|
|
127
|
+
}),
|
|
128
|
+
get_funding_rates: page("Hourly funding rates", {
|
|
129
|
+
...MARKET_ROW,
|
|
130
|
+
rate: d("Hourly funding rate; positive means longs pay shorts"),
|
|
131
|
+
sequence: F.sequence,
|
|
132
|
+
}),
|
|
133
|
+
get_open_interest: page("Open interest samples", {
|
|
134
|
+
...MARKET_ROW,
|
|
135
|
+
open_interest: d("Open interest in base units"),
|
|
136
|
+
volume_24h: d("24h volume in USD"),
|
|
137
|
+
}),
|
|
138
|
+
get_liquidations: page("Liquidations", {
|
|
139
|
+
...MARKET_ROW,
|
|
140
|
+
market_type: F.market_type,
|
|
141
|
+
block_number: F.block_number,
|
|
142
|
+
address: d("Liquidated wallet"),
|
|
143
|
+
side: d('The liquidated wallet\'s fill side: "sell" closed a long, "buy" closed a short'),
|
|
144
|
+
price: F.price,
|
|
145
|
+
size: F.size,
|
|
146
|
+
realized_pnl: F.realized_pnl,
|
|
147
|
+
}),
|
|
148
|
+
get_liquidation_summary: obj("Liquidation totals over the window", {
|
|
149
|
+
from: F.from,
|
|
150
|
+
to: F.to,
|
|
151
|
+
market: d("Market filter, or null for all markets"),
|
|
152
|
+
count: d("Number of liquidations"),
|
|
153
|
+
notional_usd: d("Liquidated notional in USD"),
|
|
154
|
+
longs_liquidated_usd: d("Notional of liquidated longs in USD"),
|
|
155
|
+
shorts_liquidated_usd: d("Notional of liquidated shorts in USD"),
|
|
156
|
+
by_market: arr("Top markets by liquidated notional", obj("One market", { market: F.market, count: d("Liquidations"), notional_usd: d("Notional in USD") })),
|
|
157
|
+
largest: obj("Largest single liquidation, or null when there were none", {
|
|
158
|
+
market: F.market,
|
|
159
|
+
side: d('"long" or "short"'),
|
|
160
|
+
notional_usd: d("Notional in USD"),
|
|
161
|
+
price: F.price,
|
|
162
|
+
address: F.address,
|
|
163
|
+
timestamp: F.timestamp,
|
|
164
|
+
}),
|
|
165
|
+
complete: d("False when the page cap was hit and totals are a lower bound"),
|
|
166
|
+
}),
|
|
167
|
+
get_fills: page("Fills for one wallet, newest first", {
|
|
168
|
+
...MARKET_ROW,
|
|
169
|
+
market_type: F.market_type,
|
|
170
|
+
block_number: F.block_number,
|
|
171
|
+
price: F.price,
|
|
172
|
+
size: F.size,
|
|
173
|
+
side: F.side,
|
|
174
|
+
direction: d('e.g. "Open Long", "Close Short"'),
|
|
175
|
+
fee: F.fee,
|
|
176
|
+
realized_pnl: F.realized_pnl,
|
|
177
|
+
address: F.address,
|
|
178
|
+
}),
|
|
179
|
+
get_mark_prices: page("Mark price samples", {
|
|
180
|
+
...MARKET_ROW,
|
|
181
|
+
mark_price: d("Mark price"),
|
|
182
|
+
oracle_price: d("Oracle price"),
|
|
183
|
+
funding_rate: d("Current hourly funding rate"),
|
|
184
|
+
}),
|
|
185
|
+
get_vault_operations: page("Vault deposits and withdrawals", {
|
|
186
|
+
source: F.source,
|
|
187
|
+
timestamp: F.timestamp,
|
|
188
|
+
block_number: F.block_number,
|
|
189
|
+
address: d("Depositor"),
|
|
190
|
+
vault: d("Vault address"),
|
|
191
|
+
operation: d("deposit or withdraw"),
|
|
192
|
+
token: d("Token, usually USDC"),
|
|
193
|
+
requested_amount: d("Requested amount"),
|
|
194
|
+
net_amount: d("Amount after commission and closing cost"),
|
|
195
|
+
commission: d("Leader commission"),
|
|
196
|
+
closing_cost: d("Cost of closing positions for the withdrawal"),
|
|
197
|
+
}),
|
|
198
|
+
get_liquidation_levels: obj("Liquidated notional by price bucket", {
|
|
199
|
+
data: arr("Price buckets", obj("One bucket", { market: F.market })),
|
|
200
|
+
}),
|
|
201
|
+
get_vault_leaderboard: obj("Vaults ranked by net deposits", {
|
|
202
|
+
data: arr("Vaults", obj("One vault", { vault: d("Vault address") })),
|
|
203
|
+
}),
|
|
204
|
+
get_funding_stats: obj("Funding statistics per time bucket", {
|
|
205
|
+
data: arr("Buckets", obj("One bucket", {
|
|
206
|
+
source: F.source,
|
|
207
|
+
market: F.market,
|
|
208
|
+
bucket: d("Bucket start, Unix milliseconds"),
|
|
209
|
+
avg_rate: d("Average hourly rate"),
|
|
210
|
+
min_rate: d("Lowest hourly rate"),
|
|
211
|
+
max_rate: d("Highest hourly rate"),
|
|
212
|
+
cumulative_rate: d("Sum of hourly rates in the bucket"),
|
|
213
|
+
})),
|
|
214
|
+
}),
|
|
215
|
+
get_user_state: USER_STATE,
|
|
216
|
+
get_user_funding: obj("Funding paid or received per market per bucket", {
|
|
217
|
+
total_rows: d("Rows in the window before the limit"),
|
|
218
|
+
returned: d("Rows in data, most recent first"),
|
|
219
|
+
address: F.address,
|
|
220
|
+
bucket: d("Bucket size"),
|
|
221
|
+
from: F.from,
|
|
222
|
+
to: F.to,
|
|
223
|
+
data: arr("Buckets", obj("One bucket and market", {
|
|
224
|
+
bucket_start: d("Bucket start, Unix milliseconds"),
|
|
225
|
+
market: F.market,
|
|
226
|
+
market_class: F.market_class,
|
|
227
|
+
funding_payment: d("USD; positive received, negative paid"),
|
|
228
|
+
avg_position: d("Average position size"),
|
|
229
|
+
avg_funding_rate: d("Average hourly rate"),
|
|
230
|
+
interval_count: d("Hourly payments in the bucket"),
|
|
231
|
+
})),
|
|
232
|
+
}),
|
|
233
|
+
get_user_maker_taker: obj("Maker vs taker breakdown", {
|
|
234
|
+
address: F.address,
|
|
235
|
+
from: F.from,
|
|
236
|
+
to: F.to,
|
|
237
|
+
data: arr("Per market", obj("One market", { market: F.market })),
|
|
238
|
+
total: obj("All markets", {
|
|
239
|
+
maker_fills: d("Fills as maker"),
|
|
240
|
+
taker_fills: d("Fills as taker"),
|
|
241
|
+
maker_notional: d("Maker notional in USD"),
|
|
242
|
+
taker_notional: d("Taker notional in USD"),
|
|
243
|
+
maker_fee: d("Maker fees in USD; negative means rebates"),
|
|
244
|
+
taker_fee: d("Taker fees in USD"),
|
|
245
|
+
total_fills: d("All fills"),
|
|
246
|
+
pct_maker: d("Share of fills as maker, 0 to 1"),
|
|
247
|
+
}),
|
|
248
|
+
}),
|
|
249
|
+
get_user_ledger: obj("Vault and transfer ledger", {
|
|
250
|
+
address: F.address,
|
|
251
|
+
from: F.from,
|
|
252
|
+
to: F.to,
|
|
253
|
+
data: arr("Ledger entries", obj("One entry", { timestamp: F.timestamp, type: d("Event type"), amount: d("USD; positive into the account") })),
|
|
254
|
+
}),
|
|
255
|
+
get_pnl_leaderboard: obj("Wallets ranked over the window", {
|
|
256
|
+
from: F.from,
|
|
257
|
+
to: F.to,
|
|
258
|
+
sort_by: d("Ranking metric"),
|
|
259
|
+
data: arr("Wallets", obj("One wallet", {
|
|
260
|
+
...WALLET_STATS,
|
|
261
|
+
win_rate: F.win_rate,
|
|
262
|
+
markets_count: d("Markets traded"),
|
|
263
|
+
max_drawdown_pct: F.max_drawdown_pct,
|
|
264
|
+
})),
|
|
265
|
+
}),
|
|
266
|
+
get_market_top_wallets: obj("Top wallets on one market", {
|
|
267
|
+
market: F.market,
|
|
268
|
+
from: F.from,
|
|
269
|
+
to: F.to,
|
|
270
|
+
sort_by: d("Ranking metric"),
|
|
271
|
+
data: arr("Wallets", obj("One wallet", {
|
|
272
|
+
...WALLET_STATS,
|
|
273
|
+
first_seen_ms: d("First fill in the window, Unix milliseconds"),
|
|
274
|
+
last_seen_ms: d("Last fill in the window, Unix milliseconds"),
|
|
275
|
+
})),
|
|
276
|
+
}),
|
|
277
|
+
get_markets_snapshot: obj("Markets ranked by the requested key", {
|
|
278
|
+
sort_by: d("Ranking key used"),
|
|
279
|
+
order: d("desc or asc"),
|
|
280
|
+
total_markets: d("Active markets before filtering"),
|
|
281
|
+
matched: d("Markets past the volume floor"),
|
|
282
|
+
returned: d("Rows in data"),
|
|
283
|
+
data: arr("Ranked markets", obj("One market", {
|
|
284
|
+
market_id: d("Stable market id"),
|
|
285
|
+
display_symbol: F.display_symbol,
|
|
286
|
+
market_class: F.market_class,
|
|
287
|
+
issuer: F.issuer,
|
|
288
|
+
mark_price: d("Current mark price"),
|
|
289
|
+
mark_24h_ago: d("Mark price 24h ago"),
|
|
290
|
+
change_24h_pct: d("24h change as a fraction, e.g. -0.031 for -3.1%"),
|
|
291
|
+
open_interest_base: d("Open interest in base units"),
|
|
292
|
+
open_interest_usd: d("Open interest in USD"),
|
|
293
|
+
funding_rate: d("Current hourly funding rate"),
|
|
294
|
+
mark_ts_ms: d("Mark sample time, Unix milliseconds"),
|
|
295
|
+
volume_24h_usd: d("24h volume in USD"),
|
|
296
|
+
})),
|
|
297
|
+
}),
|
|
298
|
+
get_user_summary: obj("One wallet over a window", {
|
|
299
|
+
address: F.address,
|
|
300
|
+
from: F.from,
|
|
301
|
+
to: F.to,
|
|
302
|
+
state: USER_STATE,
|
|
303
|
+
window: obj("Window totals", {
|
|
304
|
+
fill_count: d("Fills"),
|
|
305
|
+
volume_usd: d("Traded notional in USD"),
|
|
306
|
+
realized_pnl: F.realized_pnl,
|
|
307
|
+
wins: d("Profitable closing fills"),
|
|
308
|
+
losses: d("Losing closing fills"),
|
|
309
|
+
win_rate: F.win_rate,
|
|
310
|
+
fees: d("Fees in USD"),
|
|
311
|
+
maker_notional: d("Maker notional in USD"),
|
|
312
|
+
taker_notional: d("Taker notional in USD"),
|
|
313
|
+
maker_fills: d("Fills as maker"),
|
|
314
|
+
taker_fills: d("Fills as taker"),
|
|
315
|
+
pct_maker: d("Share of fills as maker, 0 to 1"),
|
|
316
|
+
}),
|
|
317
|
+
}),
|
|
318
|
+
get_wallet_labels: {
|
|
319
|
+
...obj("Labels for notable wallets", {
|
|
320
|
+
generated_at: d("Unix milliseconds"),
|
|
321
|
+
ttl_seconds: d("Cache lifetime"),
|
|
322
|
+
source: F.source,
|
|
323
|
+
labels: {
|
|
324
|
+
type: "object",
|
|
325
|
+
description: "Address to its labels",
|
|
326
|
+
additionalProperties: arr("Labels", obj("One label", { kind: d("whale, smart_money, vault or vault_leader"), name: d("Display label"), rank: d("Rank") })),
|
|
327
|
+
},
|
|
328
|
+
counts: d("Wallets per label kind"),
|
|
329
|
+
note: d("What the labels map includes"),
|
|
330
|
+
}),
|
|
331
|
+
},
|
|
332
|
+
get_user_pnl_series: obj("Realized PnL per bucket", {
|
|
333
|
+
address: F.address,
|
|
334
|
+
from: F.from,
|
|
335
|
+
to: F.to,
|
|
336
|
+
bucket: d("Bucket size"),
|
|
337
|
+
data: arr("Buckets", obj("One bucket", { ts: d("Bucket start, Unix milliseconds"), realized_pnl: F.realized_pnl, fees_usd: d("Fees in USD") })),
|
|
338
|
+
}),
|
|
339
|
+
get_top_traders: obj("Traders ranked across all markets", {
|
|
340
|
+
window: F.window,
|
|
341
|
+
sort: d("Ranking used"),
|
|
342
|
+
traders: arr("Traders", obj("One trader", {
|
|
343
|
+
...TRADER,
|
|
344
|
+
max_drawdown_pct: F.max_drawdown_pct,
|
|
345
|
+
first_trade_ms: d("First trade, Unix milliseconds"),
|
|
346
|
+
taker_share: d("Share of volume as taker, 0 to 1"),
|
|
347
|
+
liquidations: d("Liquidations in the window"),
|
|
348
|
+
top_pairs: d("Best markets with their win rates"),
|
|
349
|
+
})),
|
|
350
|
+
aggregate: obj("Totals", {
|
|
351
|
+
trader_count: d("Traders ranked"),
|
|
352
|
+
total_pnl_usd: d("Sum of realized PnL in USD"),
|
|
353
|
+
active_today: d("Traders active today"),
|
|
354
|
+
}),
|
|
355
|
+
}),
|
|
356
|
+
get_market_leaders: obj("Best traders on one market", {
|
|
357
|
+
market: F.market,
|
|
358
|
+
window: F.window,
|
|
359
|
+
traders: arr("Traders", obj("One trader", TRADER)),
|
|
360
|
+
}),
|
|
361
|
+
get_early_movers: obj("Wallets whose large orders preceded moves", {
|
|
362
|
+
market: F.market,
|
|
363
|
+
window: F.window,
|
|
364
|
+
formula: d("How the lead score is computed"),
|
|
365
|
+
signals: arr("Wallets", obj("One wallet", {
|
|
366
|
+
address: F.address,
|
|
367
|
+
events: d("Scored large orders"),
|
|
368
|
+
notional_usd: d("Notional of scored orders in USD"),
|
|
369
|
+
lead_score_bps: d("Notional-weighted 30-minute forward return, basis points"),
|
|
370
|
+
hit_rate: d("Share of orders followed by a move in their direction"),
|
|
371
|
+
last_event_ms: d("Last scored order, Unix milliseconds"),
|
|
372
|
+
cancel_ratio_30d: d("Share of large orders cancelled without a fill"),
|
|
373
|
+
})),
|
|
374
|
+
}),
|
|
375
|
+
get_trader_profile: obj("One wallet's trading record", {
|
|
376
|
+
address: F.address,
|
|
377
|
+
window: F.window,
|
|
378
|
+
overall: obj("Headline stats", {
|
|
379
|
+
win_rate: F.win_rate,
|
|
380
|
+
profit_factor: F.profit_factor,
|
|
381
|
+
trades: F.trades,
|
|
382
|
+
max_drawdown_pct: F.max_drawdown_pct,
|
|
383
|
+
realized_pnl_usd: F.realized_pnl_usd,
|
|
384
|
+
first_trade_ms: d("First trade, Unix milliseconds"),
|
|
385
|
+
}),
|
|
386
|
+
markets: arr("Best markets, ranked", obj("One market", {
|
|
387
|
+
market: F.market,
|
|
388
|
+
win_rate: F.win_rate,
|
|
389
|
+
profit_factor: F.profit_factor,
|
|
390
|
+
trades: F.trades,
|
|
391
|
+
avg_notional_usd: F.avg_notional_usd,
|
|
392
|
+
realized_pnl_usd: F.realized_pnl_usd,
|
|
393
|
+
rank: d("Rank among the wallet's markets"),
|
|
394
|
+
last_trade_ms: F.last_trade_ms,
|
|
395
|
+
})),
|
|
396
|
+
liquidation_count: d("Liquidations in the window"),
|
|
397
|
+
trades: d("Recent round-trip trades"),
|
|
398
|
+
}),
|
|
399
|
+
list_cohorts: obj("Wallet cohorts", {
|
|
400
|
+
data: arr("Cohorts", obj("One cohort", { name: d("Cohort name"), description: d("What the cohort contains") })),
|
|
401
|
+
}),
|
|
402
|
+
get_cohort_addresses: obj("Wallets in a cohort", {
|
|
403
|
+
addresses: arr("Wallets", obj("One wallet", { address: F.address, value: d("The metric the cohort ranks by") })),
|
|
404
|
+
fetched_at: d("Unix milliseconds"),
|
|
405
|
+
}),
|
|
406
|
+
get_status: obj("Service status", {
|
|
407
|
+
status: d("operational, degraded or down"),
|
|
408
|
+
timestamp: F.timestamp,
|
|
409
|
+
uptime: d("Time since the last incident"),
|
|
410
|
+
platform: d("Event and market counts"),
|
|
411
|
+
venues: d("Freshness per venue"),
|
|
412
|
+
components: d("data_pipeline, rest_api and streaming health"),
|
|
413
|
+
}),
|
|
414
|
+
get_status_metrics: obj("Rolling performance metrics", {
|
|
415
|
+
api: d("Latency and error rate"),
|
|
416
|
+
pipeline: d("Ingestion latency and throughput"),
|
|
417
|
+
synthetic: d("Synthetic probe latencies"),
|
|
418
|
+
timestamp: F.timestamp,
|
|
419
|
+
}),
|
|
420
|
+
get_status_history: obj("Hourly status timeline", {
|
|
421
|
+
points: arr("Hourly buckets", obj("One hour", { ts: d("Hour start, Unix milliseconds"), status: d("Worst status in the hour"), fresh_sec: d("Data age in seconds") })),
|
|
422
|
+
uptime_percent: d("Share of operational hours"),
|
|
423
|
+
period: d("24h or 7d"),
|
|
424
|
+
}),
|
|
425
|
+
list_markets: obj("Active markets", {
|
|
426
|
+
total_markets: d("Active markets before search"),
|
|
427
|
+
matched: d("Markets matching the search"),
|
|
428
|
+
returned: d("Rows in data"),
|
|
429
|
+
data: arr("Markets", obj("One market", {
|
|
430
|
+
market_id: d("Stable market id"),
|
|
431
|
+
source: F.source,
|
|
432
|
+
market_class: F.market_class,
|
|
433
|
+
issuer: F.issuer,
|
|
434
|
+
base_asset: d("Base asset"),
|
|
435
|
+
quote_asset: F.quote_asset,
|
|
436
|
+
base_market: F.base_market,
|
|
437
|
+
display_symbol: F.display_symbol,
|
|
438
|
+
hl_coin: d("Hyperliquid coin string"),
|
|
439
|
+
active_from_ms: d("Listing time, Unix milliseconds"),
|
|
440
|
+
max_leverage: d("Maximum leverage"),
|
|
441
|
+
})),
|
|
442
|
+
}),
|
|
443
|
+
};
|
|
444
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
|
+
import type { IronflowAPI } from "./api.js";
|
|
3
|
+
export declare function packageVersion(): string;
|
|
4
|
+
export declare function createServer(api: IronflowAPI, version: string): Server;
|
|
5
|
+
export declare function structuredFrom(text: string): Record<string, unknown>;
|
|
6
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAe5C,wBAAgB,cAAc,IAAI,MAAM,CAQvC;AAGD,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA+CtE;AAOD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUpE"}
|