@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 CHANGED
@@ -1,6 +1,8 @@
1
1
  # @ironflowsh/mcp
2
2
 
3
- MCP server for [Ironflow](https://ironflow.sh): read-only Hyperliquid market data and wallet analytics for Claude Desktop, Cursor and any MCP client. It covers native perps, HIP-3 builder markets, HIP-4 outcome markets and spot. 30 tools, all read-only.
3
+ [![smithery badge](https://smithery.ai/badge/ironflow/hyperliquid)](https://smithery.ai/servers/ironflow/hyperliquid)
4
+
5
+ MCP server for [Ironflow](https://ironflow.sh): read-only Hyperliquid market data and wallet analytics for Claude, Cursor and any MCP client. It covers native perps, HIP-3 builder markets, HIP-4 outcome markets and spot. 33 tools, all read-only.
4
6
 
5
7
  No API key needed to start: keyless calls get 10 requests per minute and 24 hours of history. A free key from [ironflow.sh/key](https://ironflow.sh/key) raises that to 60 requests per minute and 30 days.
6
8
 
@@ -14,49 +16,64 @@ No API key needed to start: keyless calls get 10 requests per minute and 24 hour
14
16
 
15
17
  > "Summarize this wallet's last 30 days: PnL, fees, maker share, funding paid."
16
18
 
17
- ## Install
19
+ ## Hosted server (no install)
20
+
21
+ Connect by URL: `https://mcp.ironflow.sh/mcp` (Streamable HTTP).
18
22
 
19
23
  ```bash
20
- npx -y @ironflowsh/mcp
21
- ```
24
+ # Claude Code
25
+ claude mcp add --transport http ironflow https://mcp.ironflow.sh/mcp
22
26
 
23
- Requires Node.js 18+.
27
+ # with a free key
28
+ claude mcp add --transport http ironflow https://mcp.ironflow.sh/mcp \
29
+ --header "Authorization: Bearer if_your_api_key"
30
+ ```
24
31
 
25
- ## Claude Desktop
32
+ Claude desktop and claude.ai: Settings → Connectors → Add custom connector, paste the URL.
26
33
 
27
- Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%/Claude/claude_desktop_config.json` (Windows):
34
+ Cursor (`~/.cursor/mcp.json` or a project's `.cursor/mcp.json`):
28
35
 
29
36
  ```json
30
37
  {
31
38
  "mcpServers": {
32
- "ironflow": {
33
- "command": "npx",
34
- "args": ["-y", "@ironflowsh/mcp"]
35
- }
39
+ "ironflow": { "url": "https://mcp.ironflow.sh/mcp" }
36
40
  }
37
41
  }
38
42
  ```
39
43
 
40
- To use a key in Claude Desktop or Cursor, add `"env": { "IRONFLOW_API_KEY": "if_your_api_key" }` to the server block.
44
+ Clients that cannot send headers can pass the key as `?key=if_your_api_key` on the URL.
41
45
 
42
- ## Claude Code
46
+ ## Local server
43
47
 
44
48
  ```bash
45
- claude mcp add ironflow -- npx -y @ironflowsh/mcp
49
+ npx -y @ironflowsh/mcp
50
+ ```
46
51
 
47
- # with a free key
48
- claude mcp add ironflow -e IRONFLOW_API_KEY=if_your_api_key -- npx -y @ironflowsh/mcp
52
+ Requires Node.js 18+. Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS, `%APPDATA%/Claude/claude_desktop_config.json` on Windows):
53
+
54
+ ```json
55
+ {
56
+ "mcpServers": {
57
+ "ironflow": {
58
+ "command": "npx",
59
+ "args": ["-y", "@ironflowsh/mcp"],
60
+ "env": { "IRONFLOW_API_KEY": "if_your_api_key" }
61
+ }
62
+ }
63
+ }
49
64
  ```
50
65
 
51
- ## Cursor
66
+ The `env` block is optional. Claude Code: `claude mcp add ironflow -- npx -y @ironflowsh/mcp`.
52
67
 
53
- Add the same `mcpServers` block to `~/.cursor/mcp.json` or a project's `.cursor/mcp.json`.
68
+ To host the HTTP server yourself: `npx -y -p @ironflowsh/mcp ironflow-mcp-http` (listens on `PORT`, default 8080, path `/mcp`).
54
69
 
55
70
  ## Tools
56
71
 
57
- **Market data:** `get_price`, `get_recent_trades`, `get_candles`, `get_funding_rates`, `get_open_interest`, `get_liquidations`, `get_fills`, `get_mark_prices`, `get_vault_operations`, `list_markets`, `get_markets_snapshot`
72
+ **Market data:** `get_price`, `get_recent_trades`, `get_candles`, `get_funding_rates`, `get_open_interest`, `get_liquidations`, `get_liquidation_summary`, `get_fills`, `get_mark_prices`, `get_vault_operations`, `list_markets`, `get_markets_snapshot`
73
+
74
+ **Market analytics:** `get_funding_stats`, `get_pnl_leaderboard`, `get_market_top_wallets`, `get_wallet_labels`, `get_liquidation_levels` and `get_vault_leaderboard` (these two need a Builder or Enterprise key)
58
75
 
59
- **Market analytics:** `get_net_flows`, `get_liquidation_levels`, `get_order_flow`, `get_funding_stats`, `get_vault_leaderboard`, `get_pnl_leaderboard`, `get_market_top_wallets`, `get_wallet_labels`
76
+ **Signals:** `get_top_traders`, `get_market_leaders`, `get_early_movers`, `get_trader_profile`
60
77
 
61
78
  **Wallet analytics:** `get_user_state`, `get_user_summary`, `get_user_pnl_series`, `get_user_funding`, `get_user_maker_taker`, `get_user_ledger`
62
79
 
@@ -72,6 +89,7 @@ Fill history covers a rolling 12 months. There is no order book, order status or
72
89
  |---|---|
73
90
  | `IRONFLOW_API_KEY` | optional; free key at [ironflow.sh/key](https://ironflow.sh/key) |
74
91
  | `IRONFLOW_API_URL` | `https://api.ironflow.sh` |
92
+ | `PORT` (HTTP server) | `8080` |
75
93
 
76
94
  ## Links
77
95
 
package/build/api.d.ts CHANGED
@@ -3,7 +3,8 @@ export declare class IronflowAPI {
3
3
  private apiKey?;
4
4
  private source;
5
5
  private userAgent;
6
- constructor(baseUrl?: string, apiKey?: string, source?: string, version?: string);
6
+ private forwardedFor?;
7
+ constructor(baseUrl?: string, apiKey?: string, source?: string, version?: string, forwardedFor?: string);
7
8
  private headers;
8
9
  private apiError;
9
10
  get(path: string, params?: Record<string, string>): Promise<unknown>;
@@ -16,9 +17,7 @@ export declare class IronflowAPI {
16
17
  getFills(address: string, market?: string, limit?: string): Promise<unknown>;
17
18
  getMarkPrices(market: string): Promise<unknown>;
18
19
  getVaultOperations(vault?: string, address?: string, limit?: string): Promise<unknown>;
19
- getNetFlows(interval?: string, limit?: string): Promise<unknown>;
20
20
  getLiquidationLevels(market: string, bucket_size?: string): Promise<unknown>;
21
- getOrderFlow(market?: string): Promise<unknown>;
22
21
  getVaultLeaderboard(limit?: string): Promise<unknown>;
23
22
  getFundingStats(market: string, interval?: string, limit?: string): Promise<unknown>;
24
23
  getUserState(address: string): Promise<unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/build/api.js CHANGED
@@ -6,11 +6,15 @@ export class IronflowAPI {
6
6
  apiKey;
7
7
  source;
8
8
  userAgent;
9
- constructor(baseUrl = DEFAULT_BASE_URL, apiKey, source = DEFAULT_SOURCE, version = "unknown") {
9
+ forwardedFor;
10
+ // forwardedFor is set only by the hosted HTTP server: it passes the MCP
11
+ // client's IP on so keyless rate limits apply per caller, not per server.
12
+ constructor(baseUrl = DEFAULT_BASE_URL, apiKey, source = DEFAULT_SOURCE, version = "unknown", forwardedFor) {
10
13
  this.baseUrl = baseUrl.replace(/\/$/, "");
11
14
  this.apiKey = apiKey;
12
15
  this.source = source;
13
16
  this.userAgent = `ironflow-mcp/${version}`;
17
+ this.forwardedFor = forwardedFor;
14
18
  }
15
19
  headers() {
16
20
  const h = {
@@ -20,6 +24,9 @@ export class IronflowAPI {
20
24
  if (this.apiKey) {
21
25
  h["Authorization"] = `Bearer ${this.apiKey}`;
22
26
  }
27
+ if (this.forwardedFor) {
28
+ h["X-Forwarded-For"] = this.forwardedFor;
29
+ }
23
30
  return h;
24
31
  }
25
32
  async apiError(res) {
@@ -99,18 +106,9 @@ export class IronflowAPI {
99
106
  return this.get("/v1/vault-operations", params);
100
107
  }
101
108
  // ─── Analytics ────────────────────────────────────────────────────────
102
- async getNetFlows(interval = "1d", limit = "7") {
103
- return this.get("/v1/analytics/net-flows", { interval, limit });
104
- }
105
109
  async getLiquidationLevels(market, bucket_size = "100") {
106
110
  return this.get("/v1/analytics/liquidation-levels", { market, bucket_size });
107
111
  }
108
- async getOrderFlow(market = "") {
109
- const params = {};
110
- if (market)
111
- params.market = market;
112
- return this.get("/v1/analytics/order-flow", params);
113
- }
114
112
  async getVaultLeaderboard(limit = "10") {
115
113
  return this.get("/v1/analytics/vault-leaderboard", { limit });
116
114
  }
package/build/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const MAX_RESULT_CHARS = 40000;
2
+ export declare function fitToBudget(value: unknown, maxChars?: number): string;
3
+ //# sourceMappingURL=budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../src/budget.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB,QAAS,CAAC;AA+BvC,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,SAAmB,GAAG,MAAM,CA0B/E"}
@@ -0,0 +1,61 @@
1
+ // Size budget for tool results. MCP clients cap a single tool result (Claude
2
+ // Code at 25k tokens; JSON full of hex addresses and numbers runs about 2.2
3
+ // characters per token, so ~55k characters already fails) and fail the call
4
+ // when it is larger, so a broad query would return nothing at all. Results are
5
+ // sent as compact JSON, and anything still over budget has its largest list
6
+ // or map trimmed from the end (lists are ranked, so the head is kept) with a
7
+ // note telling the model how to narrow the query.
8
+ export const MAX_RESULT_CHARS = 40_000;
9
+ const isPlainObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
10
+ // collections lists the arrays and maps at the root and one level down.
11
+ function collections(root) {
12
+ const out = [];
13
+ const visit = (owner, prefix, depth) => {
14
+ for (const [key, v] of Object.entries(owner)) {
15
+ if (Array.isArray(v) || isPlainObject(v)) {
16
+ out.push({ owner, key, path: prefix + key, size: JSON.stringify(v).length });
17
+ }
18
+ if (isPlainObject(v) && depth === 0)
19
+ visit(v, `${prefix}${key}.`, 1);
20
+ }
21
+ };
22
+ visit(root, "", 0);
23
+ return out;
24
+ }
25
+ const countOf = (v) => (Array.isArray(v) ? v.length : Object.keys(v).length);
26
+ function keepFirst(v, n) {
27
+ if (Array.isArray(v))
28
+ return v.slice(0, n);
29
+ return Object.fromEntries(Object.entries(v).slice(0, n));
30
+ }
31
+ // fitToBudget serializes value as compact JSON no longer than maxChars when
32
+ // trimming can get it there.
33
+ export function fitToBudget(value, maxChars = MAX_RESULT_CHARS) {
34
+ let text = JSON.stringify(value);
35
+ if (text.length <= maxChars || !isPlainObject(value))
36
+ return text;
37
+ const root = { ...value };
38
+ const trimmed = new Map();
39
+ for (let round = 0; round < 30 && text.length > maxChars; round++) {
40
+ // The largest collection that still has something to cut.
41
+ const target = collections(root)
42
+ .filter((c) => countOf(c.owner[c.key]) > 1)
43
+ .sort((a, b) => b.size - a.size)[0];
44
+ if (!target)
45
+ break;
46
+ const current = target.owner[target.key];
47
+ const count = countOf(current);
48
+ const excess = text.length - maxChars * 0.95;
49
+ const keep = Math.max(1, Math.min(count - 1, Math.floor(count * (1 - excess / target.size))));
50
+ target.owner[target.key] = keepFirst(current, keep);
51
+ const prev = trimmed.get(target.path);
52
+ trimmed.set(target.path, { from: prev?.from ?? count, to: keep });
53
+ root.truncated = [...trimmed]
54
+ .map(([path, t]) => `${path} trimmed from ${t.from} to ${t.to} entries`)
55
+ .join("; ")
56
+ .concat(". The result was too large for one tool call; narrow the query (market, address, window, limit or search) to see the rest.");
57
+ text = JSON.stringify(root);
58
+ }
59
+ return text;
60
+ }
61
+ //# sourceMappingURL=budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.js","sourceRoot":"","sources":["../src/budget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":""}
package/build/http.js ADDED
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env node
2
+ // Ironflow MCP Server (Streamable HTTP): the hosted endpoint behind
3
+ // https://mcp.ironflow.sh/mcp. Stateless: every POST builds a fresh server
4
+ // and transport, so any replica can answer any request.
5
+ //
6
+ // Connect without installing anything:
7
+ // claude mcp add --transport http ironflow https://mcp.ironflow.sh/mcp
8
+ //
9
+ // A key is optional. Send it as "Authorization: Bearer if_..." or, for
10
+ // clients that cannot set headers, as ?key=if_... on the URL.
11
+ //
12
+ // Environment:
13
+ // PORT listen port (default 8080)
14
+ // IRONFLOW_API_URL REST API base (default https://api.ironflow.sh)
15
+ // FORWARD_CLIENT_IP "true" only behind a proxy that sets X-Forwarded-For
16
+ // to the real client IP; the IP is passed to the API so
17
+ // keyless limits apply per caller
18
+ import { createServer as createHttpServer } from "node:http";
19
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
20
+ import { IronflowAPI } from "./api.js";
21
+ import { clientIP, HttpError, readKey } from "./request.js";
22
+ import { createServer, packageVersion } from "./server.js";
23
+ const DEFAULT_PORT = 8080;
24
+ const MAX_BODY_BYTES = 1024 * 1024;
25
+ const MCP_PATH = "/mcp";
26
+ const INFO_URL = "https://ironflow.sh/api#mcp";
27
+ const port = Number(process.env.PORT) || DEFAULT_PORT;
28
+ const apiUrl = process.env.IRONFLOW_API_URL || "https://api.ironflow.sh";
29
+ const forwardClientIP = process.env.FORWARD_CLIENT_IP === "true";
30
+ const version = packageVersion();
31
+ // setCors allows browser-based MCP clients (inspectors, web agents). No
32
+ // cookies are involved, so a wildcard origin is safe.
33
+ function setCors(res) {
34
+ res.setHeader("Access-Control-Allow-Origin", "*");
35
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, OPTIONS");
36
+ res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, Accept, Mcp-Session-Id, Mcp-Protocol-Version, Last-Event-ID");
37
+ res.setHeader("Access-Control-Expose-Headers", "Mcp-Session-Id");
38
+ }
39
+ function sendJSON(res, status, body) {
40
+ res.writeHead(status, { "Content-Type": "application/json" });
41
+ res.end(JSON.stringify(body));
42
+ }
43
+ // sendRPCError answers with a JSON-RPC error object, the shape MCP clients
44
+ // know how to display.
45
+ function sendRPCError(res, status, message) {
46
+ sendJSON(res, status, { jsonrpc: "2.0", error: { code: -32000, message }, id: null });
47
+ }
48
+ async function readBody(req) {
49
+ const chunks = [];
50
+ let size = 0;
51
+ for await (const chunk of req) {
52
+ size += chunk.length;
53
+ if (size > MAX_BODY_BYTES)
54
+ throw new HttpError(413, "Request body too large");
55
+ chunks.push(chunk);
56
+ }
57
+ try {
58
+ return JSON.parse(Buffer.concat(chunks).toString("utf-8"));
59
+ }
60
+ catch {
61
+ throw new HttpError(400, "Request body is not valid JSON");
62
+ }
63
+ }
64
+ // describeRPC names what a request did for the access log, without keys,
65
+ // IPs or arguments.
66
+ function describeRPC(body) {
67
+ const msgs = Array.isArray(body) ? body : [body];
68
+ return msgs
69
+ .map((m) => {
70
+ const msg = m;
71
+ return msg.method === "tools/call" ? `tools/call:${msg.params?.name}` : msg.method ?? "?";
72
+ })
73
+ .join(",");
74
+ }
75
+ async function handleMCP(req, res, url) {
76
+ const started = Date.now();
77
+ const key = readKey(req, url);
78
+ const body = await readBody(req);
79
+ const api = new IronflowAPI(apiUrl, key, undefined, `${version}-hosted`, clientIP(req, forwardClientIP));
80
+ const server = createServer(api, version);
81
+ const transport = new StreamableHTTPServerTransport({
82
+ sessionIdGenerator: undefined,
83
+ enableJsonResponse: true,
84
+ });
85
+ res.on("close", () => {
86
+ void transport.close();
87
+ void server.close();
88
+ console.log(JSON.stringify({ msg: "mcp", rpc: describeRPC(body), keyed: Boolean(key), status: res.statusCode, ms: Date.now() - started }));
89
+ });
90
+ await server.connect(transport);
91
+ await transport.handleRequest(req, res, body);
92
+ }
93
+ async function route(req, res) {
94
+ const url = new URL(req.url ?? "/", "http://localhost");
95
+ setCors(res);
96
+ if (req.method === "OPTIONS") {
97
+ res.writeHead(204).end();
98
+ return;
99
+ }
100
+ if (url.pathname === "/healthz") {
101
+ sendJSON(res, 200, { status: "ok", version });
102
+ return;
103
+ }
104
+ if (url.pathname === "/" && (req.method === "GET" || req.method === "HEAD")) {
105
+ res.writeHead(302, { Location: INFO_URL }).end();
106
+ return;
107
+ }
108
+ if (url.pathname !== MCP_PATH) {
109
+ sendJSON(res, 404, { error: "Not found. The MCP endpoint is /mcp" });
110
+ return;
111
+ }
112
+ if (req.method !== "POST") {
113
+ // Stateless server: no standalone SSE stream and no sessions to delete.
114
+ res.setHeader("Allow", "POST, OPTIONS");
115
+ sendRPCError(res, 405, "Method not allowed: this server is stateless, use POST");
116
+ return;
117
+ }
118
+ await handleMCP(req, res, url);
119
+ }
120
+ const httpServer = createHttpServer((req, res) => {
121
+ route(req, res).catch((err) => {
122
+ if (res.headersSent) {
123
+ res.end();
124
+ return;
125
+ }
126
+ if (err instanceof HttpError) {
127
+ sendRPCError(res, err.status, err.message);
128
+ return;
129
+ }
130
+ console.error(JSON.stringify({ msg: "mcp handler failed", error: String(err) }));
131
+ sendRPCError(res, 500, "Internal server error");
132
+ });
133
+ });
134
+ httpServer.listen(port, () => {
135
+ console.log(JSON.stringify({ msg: "ironflow mcp http listening", port, version, apiUrl, forwardClientIP }));
136
+ });
137
+ // Graceful shutdown: stop accepting, let in-flight requests finish.
138
+ for (const signal of ["SIGTERM", "SIGINT"]) {
139
+ process.on(signal, () => {
140
+ httpServer.close(() => process.exit(0));
141
+ setTimeout(() => process.exit(0), 10_000).unref();
142
+ });
143
+ }
144
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
package/build/index.js CHANGED
@@ -1,81 +1,23 @@
1
1
  #!/usr/bin/env node
2
- // Ironflow MCP Server: read-only Hyperliquid data for AI agents.
2
+ // Ironflow MCP Server (stdio): read-only Hyperliquid data for AI agents.
3
3
  //
4
4
  // Usage:
5
5
  // IRONFLOW_API_KEY=if_xxx npx -y @ironflowsh/mcp
6
6
  //
7
7
  // The key is optional: keyless calls get 10 requests per minute and 24 hours
8
8
  // of history; a free key from https://ironflow.sh/key gives 60 and 30 days.
9
- import { readFileSync } from "node:fs";
10
- import { dirname, join } from "node:path";
11
- import { fileURLToPath } from "node:url";
12
- import { Server } from "@modelcontextprotocol/sdk/server/index.js";
9
+ // No install needed at all with the hosted server:
10
+ // claude mcp add --transport http ironflow https://mcp.ironflow.sh/mcp
13
11
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
14
- import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
15
12
  import { IronflowAPI } from "./api.js";
16
- import { tools } from "./tools.js";
13
+ import { createServer, packageVersion } from "./server.js";
17
14
  const apiUrl = process.env.IRONFLOW_API_URL || "https://api.ironflow.sh";
18
15
  const apiKey = process.env.IRONFLOW_API_KEY;
19
16
  if (!apiKey) {
20
17
  // stderr: stdout carries the MCP protocol.
21
18
  console.error("IRONFLOW_API_KEY is not set: running keyless (10 requests per minute, 24 hours of history). Free key for more: https://ironflow.sh/key");
22
19
  }
23
- // Read the package version from package.json so MCP clients see the
24
- // real installed version in serverInfo, not a hardcoded constant that
25
- // drifts on every release.
26
- const here = dirname(fileURLToPath(import.meta.url));
27
- let pkgVersion = "unknown";
28
- try {
29
- const pkgRaw = readFileSync(join(here, "..", "package.json"), "utf-8");
30
- pkgVersion = JSON.parse(pkgRaw).version ?? "unknown";
31
- }
32
- catch {
33
- // Fall through with "unknown" — the server still functions; only
34
- // the version string in initialize() is affected.
35
- }
36
- const api = new IronflowAPI(apiUrl, apiKey, undefined, pkgVersion);
37
- const server = new Server({
38
- name: "ironflow",
39
- version: pkgVersion,
40
- }, {
41
- capabilities: {
42
- tools: {},
43
- },
44
- });
45
- // List all available tools.
46
- server.setRequestHandler(ListToolsRequestSchema, async () => {
47
- return {
48
- tools: tools.map((t) => ({
49
- name: t.name,
50
- description: t.description,
51
- inputSchema: t.inputSchema,
52
- })),
53
- };
54
- });
55
- // Handle tool calls.
56
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
57
- const { name, arguments: args } = request.params;
58
- const tool = tools.find((t) => t.name === name);
59
- if (!tool) {
60
- return {
61
- content: [{ type: "text", text: `Unknown tool: ${name}` }],
62
- isError: true,
63
- };
64
- }
65
- try {
66
- const result = await tool.handler(args ?? {}, api);
67
- return {
68
- content: [{ type: "text", text: result }],
69
- };
70
- }
71
- catch (error) {
72
- const message = error instanceof Error ? error.message : String(error);
73
- return {
74
- content: [{ type: "text", text: `Error: ${message}` }],
75
- isError: true,
76
- };
77
- }
78
- });
79
- const transport = new StdioServerTransport();
80
- await server.connect(transport);
20
+ const version = packageVersion();
21
+ const server = createServer(new IronflowAPI(apiUrl, apiKey, undefined, version), version);
22
+ await server.connect(new StdioServerTransport());
81
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,yEAAyE;AACzE,EAAE;AACF,SAAS;AACT,mDAAmD;AACnD,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,mDAAmD;AACnD,yEAAyE;AAEzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE3D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,yBAAyB,CAAC;AACzE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;IACZ,2CAA2C;IAC3C,OAAO,CAAC,KAAK,CACX,wIAAwI,CACzI,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;AACjC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1F,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { IronflowAPI } from "./api.js";
2
+ export declare const MAX_SUMMARY_MINUTES = 240;
3
+ export declare const MAX_SUMMARY_PAGES = 8;
4
+ export interface LiquidationSummary {
5
+ from: number;
6
+ to: number;
7
+ market: string | null;
8
+ count: number;
9
+ notional_usd: number;
10
+ longs_liquidated_usd: number;
11
+ shorts_liquidated_usd: number;
12
+ by_market: {
13
+ market: string;
14
+ count: number;
15
+ notional_usd: number;
16
+ }[];
17
+ largest: {
18
+ market: string;
19
+ side: "long" | "short";
20
+ notional_usd: number;
21
+ price: number;
22
+ address: string;
23
+ timestamp: number;
24
+ } | null;
25
+ complete: boolean;
26
+ }
27
+ export declare function summarizeLiquidations(api: IronflowAPI, minutes: number, market: string, now?: number): Promise<LiquidationSummary>;
28
+ //# sourceMappingURL=liquidations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"liquidations.d.ts","sourceRoot":"","sources":["../src/liquidations.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AAmBnC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,SAAS,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrE,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACpI,QAAQ,EAAE,OAAO,CAAC;CACnB;AAOD,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,SAAa,GACf,OAAO,CAAC,kBAAkB,CAAC,CA+D7B"}