@ironflowsh/mcp 0.8.0 → 0.9.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.
@@ -0,0 +1,480 @@
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
+ describe_data: obj("Catalog of the SQL tables run_query can read", {
149
+ dialect: d("SQL dialect and database name"),
150
+ tables: arr("Queryable tables", obj("One table", {
151
+ name: d("Table name, e.g. hl.fills"),
152
+ description: d("What one row is"),
153
+ time_column: d("Column the history window filters on"),
154
+ data_from: d("How far back the table goes"),
155
+ columns: arr("Columns", obj("One column", { name: d("Name"), type: d("ClickHouse type"), description: d("Meaning") })),
156
+ })),
157
+ tips: arr("Query tips", d("One tip")),
158
+ examples: arr("Worked examples", obj("One example", { question: d("Question"), sql: d("SQL that answers it") })),
159
+ limits: d("Your tier's limits: history_days, max_execution_seconds, max_rows, budget_seconds_per_hour"),
160
+ tiers: arr("Every tier's limits", d("One tier")),
161
+ }),
162
+ run_query: obj("Query result", {
163
+ columns: arr("Column names in row order", d("Name")),
164
+ column_types: arr("ClickHouse types in row order", d("Type")),
165
+ rows: arr("Rows as positional arrays", d("One row")),
166
+ row_count: d("Rows returned"),
167
+ truncated: d("true when more rows existed than were returned"),
168
+ stats: d("elapsed_ms, rows_read, bytes_read"),
169
+ limits: d("Your tier's limits"),
170
+ budget_remaining_seconds: d("Query seconds left this hour"),
171
+ }),
172
+ get_wallet_behavior: obj("Wallet trading behaviour over the last 30 days", {
173
+ window_days: d("Days the features cover"),
174
+ wallets: arr("Wallets", obj("One wallet", {
175
+ address: d("Wallet address"),
176
+ labels: arr("Behaviour labels", d("Label")),
177
+ volume_usd: d("30-day volume in USD"),
178
+ realized_pnl_usd: d("30-day realized PnL in USD"),
179
+ maker_share: d("Maker volume / volume"),
180
+ fills_per_day: d("Fills per active day"),
181
+ liquidations: d("Liquidation events"),
182
+ })),
183
+ }),
184
+ get_liquidation_summary: obj("Liquidation totals over the window", {
185
+ from: F.from,
186
+ to: F.to,
187
+ market: d("Market filter, or null for all markets"),
188
+ count: d("Number of liquidations"),
189
+ notional_usd: d("Liquidated notional in USD"),
190
+ longs_liquidated_usd: d("Notional of liquidated longs in USD"),
191
+ shorts_liquidated_usd: d("Notional of liquidated shorts in USD"),
192
+ by_market: arr("Top markets by liquidated notional", obj("One market", { market: F.market, count: d("Liquidations"), notional_usd: d("Notional in USD") })),
193
+ largest: obj("Largest single liquidation, or null when there were none", {
194
+ market: F.market,
195
+ side: d('"long" or "short"'),
196
+ notional_usd: d("Notional in USD"),
197
+ price: F.price,
198
+ address: F.address,
199
+ timestamp: F.timestamp,
200
+ }),
201
+ complete: d("False when the page cap was hit and totals are a lower bound"),
202
+ }),
203
+ get_fills: page("Fills for one wallet, newest first", {
204
+ ...MARKET_ROW,
205
+ market_type: F.market_type,
206
+ block_number: F.block_number,
207
+ price: F.price,
208
+ size: F.size,
209
+ side: F.side,
210
+ direction: d('e.g. "Open Long", "Close Short"'),
211
+ fee: F.fee,
212
+ realized_pnl: F.realized_pnl,
213
+ address: F.address,
214
+ }),
215
+ get_mark_prices: page("Mark price samples", {
216
+ ...MARKET_ROW,
217
+ mark_price: d("Mark price"),
218
+ oracle_price: d("Oracle price"),
219
+ funding_rate: d("Current hourly funding rate"),
220
+ }),
221
+ get_vault_operations: page("Vault deposits and withdrawals", {
222
+ source: F.source,
223
+ timestamp: F.timestamp,
224
+ block_number: F.block_number,
225
+ address: d("Depositor"),
226
+ vault: d("Vault address"),
227
+ operation: d("deposit or withdraw"),
228
+ token: d("Token, usually USDC"),
229
+ requested_amount: d("Requested amount"),
230
+ net_amount: d("Amount after commission and closing cost"),
231
+ commission: d("Leader commission"),
232
+ closing_cost: d("Cost of closing positions for the withdrawal"),
233
+ }),
234
+ get_liquidation_levels: obj("Liquidated notional by price bucket", {
235
+ data: arr("Price buckets", obj("One bucket", { market: F.market })),
236
+ }),
237
+ get_vault_leaderboard: obj("Vaults ranked by net deposits", {
238
+ data: arr("Vaults", obj("One vault", { vault: d("Vault address") })),
239
+ }),
240
+ get_funding_stats: obj("Funding statistics per time bucket", {
241
+ data: arr("Buckets", obj("One bucket", {
242
+ source: F.source,
243
+ market: F.market,
244
+ bucket: d("Bucket start, Unix milliseconds"),
245
+ avg_rate: d("Average hourly rate"),
246
+ min_rate: d("Lowest hourly rate"),
247
+ max_rate: d("Highest hourly rate"),
248
+ cumulative_rate: d("Sum of hourly rates in the bucket"),
249
+ })),
250
+ }),
251
+ get_user_state: USER_STATE,
252
+ get_user_funding: obj("Funding paid or received per market per bucket", {
253
+ total_rows: d("Rows in the window before the limit"),
254
+ returned: d("Rows in data, most recent first"),
255
+ address: F.address,
256
+ bucket: d("Bucket size"),
257
+ from: F.from,
258
+ to: F.to,
259
+ data: arr("Buckets", obj("One bucket and market", {
260
+ bucket_start: d("Bucket start, Unix milliseconds"),
261
+ market: F.market,
262
+ market_class: F.market_class,
263
+ funding_payment: d("USD; positive received, negative paid"),
264
+ avg_position: d("Average position size"),
265
+ avg_funding_rate: d("Average hourly rate"),
266
+ interval_count: d("Hourly payments in the bucket"),
267
+ })),
268
+ }),
269
+ get_user_maker_taker: obj("Maker vs taker breakdown", {
270
+ address: F.address,
271
+ from: F.from,
272
+ to: F.to,
273
+ data: arr("Per market", obj("One market", { market: F.market })),
274
+ total: obj("All markets", {
275
+ maker_fills: d("Fills as maker"),
276
+ taker_fills: d("Fills as taker"),
277
+ maker_notional: d("Maker notional in USD"),
278
+ taker_notional: d("Taker notional in USD"),
279
+ maker_fee: d("Maker fees in USD; negative means rebates"),
280
+ taker_fee: d("Taker fees in USD"),
281
+ total_fills: d("All fills"),
282
+ pct_maker: d("Share of fills as maker, 0 to 1"),
283
+ }),
284
+ }),
285
+ get_user_ledger: obj("Vault and transfer ledger", {
286
+ address: F.address,
287
+ from: F.from,
288
+ to: F.to,
289
+ data: arr("Ledger entries", obj("One entry", { timestamp: F.timestamp, type: d("Event type"), amount: d("USD; positive into the account") })),
290
+ }),
291
+ get_pnl_leaderboard: obj("Wallets ranked over the window", {
292
+ from: F.from,
293
+ to: F.to,
294
+ sort_by: d("Ranking metric"),
295
+ data: arr("Wallets", obj("One wallet", {
296
+ ...WALLET_STATS,
297
+ win_rate: F.win_rate,
298
+ markets_count: d("Markets traded"),
299
+ max_drawdown_pct: F.max_drawdown_pct,
300
+ })),
301
+ }),
302
+ get_market_top_wallets: obj("Top wallets on one market", {
303
+ market: F.market,
304
+ from: F.from,
305
+ to: F.to,
306
+ sort_by: d("Ranking metric"),
307
+ data: arr("Wallets", obj("One wallet", {
308
+ ...WALLET_STATS,
309
+ first_seen_ms: d("First fill in the window, Unix milliseconds"),
310
+ last_seen_ms: d("Last fill in the window, Unix milliseconds"),
311
+ })),
312
+ }),
313
+ get_markets_snapshot: obj("Markets ranked by the requested key", {
314
+ sort_by: d("Ranking key used"),
315
+ order: d("desc or asc"),
316
+ total_markets: d("Active markets before filtering"),
317
+ matched: d("Markets past the volume floor"),
318
+ returned: d("Rows in data"),
319
+ data: arr("Ranked markets", obj("One market", {
320
+ market_id: d("Stable market id"),
321
+ display_symbol: F.display_symbol,
322
+ market_class: F.market_class,
323
+ issuer: F.issuer,
324
+ mark_price: d("Current mark price"),
325
+ mark_24h_ago: d("Mark price 24h ago"),
326
+ change_24h_pct: d("24h change as a fraction, e.g. -0.031 for -3.1%"),
327
+ open_interest_base: d("Open interest in base units"),
328
+ open_interest_usd: d("Open interest in USD"),
329
+ funding_rate: d("Current hourly funding rate"),
330
+ mark_ts_ms: d("Mark sample time, Unix milliseconds"),
331
+ volume_24h_usd: d("24h volume in USD"),
332
+ })),
333
+ }),
334
+ get_user_summary: obj("One wallet over a window", {
335
+ address: F.address,
336
+ from: F.from,
337
+ to: F.to,
338
+ state: USER_STATE,
339
+ window: obj("Window totals", {
340
+ fill_count: d("Fills"),
341
+ volume_usd: d("Traded notional in USD"),
342
+ realized_pnl: F.realized_pnl,
343
+ wins: d("Profitable closing fills"),
344
+ losses: d("Losing closing fills"),
345
+ win_rate: F.win_rate,
346
+ fees: d("Fees in USD"),
347
+ maker_notional: d("Maker notional in USD"),
348
+ taker_notional: d("Taker notional in USD"),
349
+ maker_fills: d("Fills as maker"),
350
+ taker_fills: d("Fills as taker"),
351
+ pct_maker: d("Share of fills as maker, 0 to 1"),
352
+ }),
353
+ }),
354
+ get_wallet_labels: {
355
+ ...obj("Labels for notable wallets", {
356
+ generated_at: d("Unix milliseconds"),
357
+ ttl_seconds: d("Cache lifetime"),
358
+ source: F.source,
359
+ labels: {
360
+ type: "object",
361
+ description: "Address to its labels",
362
+ additionalProperties: arr("Labels", obj("One label", { kind: d("whale, smart_money, vault or vault_leader"), name: d("Display label"), rank: d("Rank") })),
363
+ },
364
+ counts: d("Wallets per label kind"),
365
+ note: d("What the labels map includes"),
366
+ }),
367
+ },
368
+ get_user_pnl_series: obj("Realized PnL per bucket", {
369
+ address: F.address,
370
+ from: F.from,
371
+ to: F.to,
372
+ bucket: d("Bucket size"),
373
+ data: arr("Buckets", obj("One bucket", { ts: d("Bucket start, Unix milliseconds"), realized_pnl: F.realized_pnl, fees_usd: d("Fees in USD") })),
374
+ }),
375
+ get_top_traders: obj("Traders ranked across all markets", {
376
+ window: F.window,
377
+ sort: d("Ranking used"),
378
+ traders: arr("Traders", obj("One trader", {
379
+ ...TRADER,
380
+ max_drawdown_pct: F.max_drawdown_pct,
381
+ first_trade_ms: d("First trade, Unix milliseconds"),
382
+ taker_share: d("Share of volume as taker, 0 to 1"),
383
+ liquidations: d("Liquidations in the window"),
384
+ top_pairs: d("Best markets with their win rates"),
385
+ })),
386
+ aggregate: obj("Totals", {
387
+ trader_count: d("Traders ranked"),
388
+ total_pnl_usd: d("Sum of realized PnL in USD"),
389
+ active_today: d("Traders active today"),
390
+ }),
391
+ }),
392
+ get_market_leaders: obj("Best traders on one market", {
393
+ market: F.market,
394
+ window: F.window,
395
+ traders: arr("Traders", obj("One trader", TRADER)),
396
+ }),
397
+ get_early_movers: obj("Wallets whose large orders preceded moves", {
398
+ market: F.market,
399
+ window: F.window,
400
+ formula: d("How the lead score is computed"),
401
+ signals: arr("Wallets", obj("One wallet", {
402
+ address: F.address,
403
+ events: d("Scored large orders"),
404
+ notional_usd: d("Notional of scored orders in USD"),
405
+ lead_score_bps: d("Notional-weighted 30-minute forward return, basis points"),
406
+ hit_rate: d("Share of orders followed by a move in their direction"),
407
+ last_event_ms: d("Last scored order, Unix milliseconds"),
408
+ cancel_ratio_30d: d("Share of large orders cancelled without a fill"),
409
+ })),
410
+ }),
411
+ get_trader_profile: obj("One wallet's trading record", {
412
+ address: F.address,
413
+ window: F.window,
414
+ overall: obj("Headline stats", {
415
+ win_rate: F.win_rate,
416
+ profit_factor: F.profit_factor,
417
+ trades: F.trades,
418
+ max_drawdown_pct: F.max_drawdown_pct,
419
+ realized_pnl_usd: F.realized_pnl_usd,
420
+ first_trade_ms: d("First trade, Unix milliseconds"),
421
+ }),
422
+ markets: arr("Best markets, ranked", obj("One market", {
423
+ market: F.market,
424
+ win_rate: F.win_rate,
425
+ profit_factor: F.profit_factor,
426
+ trades: F.trades,
427
+ avg_notional_usd: F.avg_notional_usd,
428
+ realized_pnl_usd: F.realized_pnl_usd,
429
+ rank: d("Rank among the wallet's markets"),
430
+ last_trade_ms: F.last_trade_ms,
431
+ })),
432
+ liquidation_count: d("Liquidations in the window"),
433
+ trades: d("Recent round-trip trades"),
434
+ }),
435
+ list_cohorts: obj("Wallet cohorts", {
436
+ data: arr("Cohorts", obj("One cohort", { name: d("Cohort name"), description: d("What the cohort contains") })),
437
+ }),
438
+ get_cohort_addresses: obj("Wallets in a cohort", {
439
+ addresses: arr("Wallets", obj("One wallet", { address: F.address, value: d("The metric the cohort ranks by") })),
440
+ fetched_at: d("Unix milliseconds"),
441
+ }),
442
+ get_status: obj("Service status", {
443
+ status: d("operational, degraded or down"),
444
+ timestamp: F.timestamp,
445
+ uptime: d("Time since the last incident"),
446
+ platform: d("Event and market counts"),
447
+ venues: d("Freshness per venue"),
448
+ components: d("data_pipeline, rest_api and streaming health"),
449
+ }),
450
+ get_status_metrics: obj("Rolling performance metrics", {
451
+ api: d("Latency and error rate"),
452
+ pipeline: d("Ingestion latency and throughput"),
453
+ synthetic: d("Synthetic probe latencies"),
454
+ timestamp: F.timestamp,
455
+ }),
456
+ get_status_history: obj("Hourly status timeline", {
457
+ 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") })),
458
+ uptime_percent: d("Share of operational hours"),
459
+ period: d("24h or 7d"),
460
+ }),
461
+ list_markets: obj("Active markets", {
462
+ total_markets: d("Active markets before search"),
463
+ matched: d("Markets matching the search"),
464
+ returned: d("Rows in data"),
465
+ data: arr("Markets", obj("One market", {
466
+ market_id: d("Stable market id"),
467
+ source: F.source,
468
+ market_class: F.market_class,
469
+ issuer: F.issuer,
470
+ base_asset: d("Base asset"),
471
+ quote_asset: F.quote_asset,
472
+ base_market: F.base_market,
473
+ display_symbol: F.display_symbol,
474
+ hl_coin: d("Hyperliquid coin string"),
475
+ active_from_ms: d("Listing time, Unix milliseconds"),
476
+ max_leverage: d("Maximum leverage"),
477
+ })),
478
+ }),
479
+ };
480
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"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"}
package/build/server.d.ts CHANGED
@@ -2,4 +2,5 @@ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
2
  import type { IronflowAPI } from "./api.js";
3
3
  export declare function packageVersion(): string;
4
4
  export declare function createServer(api: IronflowAPI, version: string): Server;
5
+ export declare function structuredFrom(text: string): Record<string, unknown>;
5
6
  //# sourceMappingURL=server.d.ts.map
@@ -1 +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;AAS5C,wBAAgB,cAAc,IAAI,MAAM,CAQvC;AAGD,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAkCtE"}
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"}
package/build/server.js CHANGED
@@ -5,9 +5,13 @@ import { dirname, join } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
6
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
7
7
  import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
8
+ import { fitToBudget } from "./budget.js";
9
+ import { outputSchemas } from "./schemas.js";
8
10
  import { tools } from "./tools.js";
11
+ // One-line summary for MCP directories and client server lists.
12
+ const DESCRIPTION = "Read-only Hyperliquid market data and wallet analytics from our own nodes: trades, funding, liquidations, open interest, wallet PnL and trader rankings. Native perps, HIP-3, HIP-4 and spot. No API key needed.";
9
13
  // Server-level guidance the client shows the model alongside the tool list.
10
- const INSTRUCTIONS = "Read-only Hyperliquid market data from Ironflow's own nodes: trades, candles, funding, open interest, liquidations, mark prices, market snapshots and wallet analytics for native perps, HIP-3 builder markets and spot. Markets use display symbols such as BTC-PERP or xyz:NVDA-PERP; call list_markets when unsure. Keyless use allows 10 requests per minute and 24 hours of history; a free key from https://ironflow.sh/key raises that to 60 per minute and 30 days.";
14
+ const INSTRUCTIONS = "Read-only Hyperliquid market data from Ironflow's own nodes: trades, candles, funding, open interest, liquidations, mark prices, market snapshots and wallet analytics for native perps, HIP-3 builder markets and spot. Markets use display symbols such as BTC-PERP or xyz:NVDA-PERP; call list_markets when unsure. For anything the named tools do not cover, call describe_data and then run_query with ClickHouse SQL over the hl.* tables. Keyless use allows 10 requests per minute and 24 hours of history; a free key from https://ironflow.sh/key raises that to 60 per minute and 30 days.";
11
15
  // Reads the package version from package.json so MCP clients see the real
12
16
  // version in serverInfo instead of a constant that drifts on every release.
13
17
  export function packageVersion() {
@@ -22,12 +26,23 @@ export function packageVersion() {
22
26
  }
23
27
  // createServer wires the tool list and tool calls to one API client.
24
28
  export function createServer(api, version) {
25
- const server = new Server({ name: "ironflow", version }, { capabilities: { tools: {} }, instructions: INSTRUCTIONS });
29
+ const server = new Server({
30
+ name: "ironflow",
31
+ title: "Ironflow Hyperliquid",
32
+ version,
33
+ description: DESCRIPTION,
34
+ websiteUrl: "https://ironflow.sh/api#mcp",
35
+ icons: [
36
+ { src: "https://ironflow.sh/apple-touch-icon.png", mimeType: "image/png", sizes: ["256x256"] },
37
+ { src: "https://ironflow.sh/favicon.svg", mimeType: "image/svg+xml", sizes: ["any"] },
38
+ ],
39
+ }, { capabilities: { tools: {} }, instructions: INSTRUCTIONS });
26
40
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
27
41
  tools: tools.map((t) => ({
28
42
  name: t.name,
29
43
  description: t.description,
30
44
  inputSchema: t.inputSchema,
45
+ outputSchema: outputSchemas[t.name],
31
46
  annotations: { readOnlyHint: true, openWorldHint: true },
32
47
  })),
33
48
  }));
@@ -41,8 +56,10 @@ export function createServer(api, version) {
41
56
  };
42
57
  }
43
58
  try {
44
- const result = await tool.handler(args ?? {}, api);
45
- return { content: [{ type: "text", text: result }] };
59
+ const structured = structuredFrom(await tool.handler(args ?? {}, api));
60
+ // Compact JSON, trimmed to fit a client's per-result limit.
61
+ const text = fitToBudget(structured);
62
+ return { content: [{ type: "text", text }], structuredContent: JSON.parse(text) };
46
63
  }
47
64
  catch (error) {
48
65
  const message = error instanceof Error ? error.message : String(error);
@@ -51,4 +68,21 @@ export function createServer(api, version) {
51
68
  });
52
69
  return server;
53
70
  }
71
+ // structuredFrom turns a tool's JSON text into MCP structured output. Every
72
+ // tool declares an output schema, and clients reject a successful result
73
+ // without structuredContent, so anything that is not a JSON object is
74
+ // wrapped as { result }. The schemas mark no field required, so the wrapper
75
+ // still validates.
76
+ export function structuredFrom(text) {
77
+ try {
78
+ const parsed = JSON.parse(text);
79
+ if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
80
+ return parsed;
81
+ }
82
+ return { result: parsed };
83
+ }
84
+ catch {
85
+ return { result: text };
86
+ }
87
+ }
54
88
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ type Row = Record<string, unknown>;
2
+ export declare const DEFAULT_MARKETS_LIMIT = 100;
3
+ export declare const DEFAULT_FUNDING_ROWS = 200;
4
+ export declare function shapeMarkets(resp: {
5
+ data?: Row[];
6
+ }, opts: {
7
+ search?: string;
8
+ limit?: number;
9
+ }): {
10
+ total_markets: number;
11
+ matched: number;
12
+ returned: number;
13
+ data: Row[];
14
+ };
15
+ export declare function shapeWalletLabels(resp: {
16
+ counts?: unknown;
17
+ labels?: Record<string, Row[]>;
18
+ } & Row, opts: {
19
+ addresses?: string[];
20
+ }): {
21
+ counts: unknown;
22
+ labels: {
23
+ [k: string]: Row[];
24
+ };
25
+ note: string;
26
+ };
27
+ export declare function shapeUserFunding(resp: {
28
+ data?: Row[];
29
+ } & Row, limit?: number): {
30
+ total_rows: number;
31
+ returned: number;
32
+ data: Row[];
33
+ };
34
+ export {};
35
+ //# sourceMappingURL=shape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../src/shape.ts"],"names":[],"mappings":"AAKA,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEnC,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAqBxC,wBAAgB,YAAY,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;CAAE,EAAE,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;EAU7F;AAOD,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;CAAE,GAAG,GAAG,EAChE,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE;;;;;;EAc/B;AAGD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;CAAE,GAAG,GAAG,EAAE,KAAK,SAAuB;;;;EAI1F"}