@ironflowsh/mcp 0.9.0 → 0.11.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 +34 -22
- package/build/api.d.ts +35 -9
- package/build/api.d.ts.map +1 -1
- package/build/api.js +107 -48
- package/build/api.js.map +1 -1
- package/build/http.js +28 -5
- package/build/http.js.map +1 -1
- package/build/index.js +4 -3
- package/build/index.js.map +1 -1
- package/build/notice.d.ts +10 -0
- package/build/notice.d.ts.map +1 -0
- package/build/notice.js +82 -0
- package/build/notice.js.map +1 -0
- package/build/query.d.ts +3 -0
- package/build/query.d.ts.map +1 -1
- package/build/query.js +24 -0
- package/build/query.js.map +1 -1
- package/build/schemas.d.ts.map +1 -1
- package/build/schemas.js +26 -5
- package/build/schemas.js.map +1 -1
- package/build/server.d.ts +9 -1
- package/build/server.d.ts.map +1 -1
- package/build/server.js +29 -10
- package/build/server.js.map +1 -1
- package/build/shape.d.ts +14 -3
- package/build/shape.d.ts.map +1 -1
- package/build/shape.js +28 -12
- package/build/shape.js.map +1 -1
- package/build/tools.d.ts +1 -0
- package/build/tools.d.ts.map +1 -1
- package/build/tools.js +180 -74
- package/build/tools.js.map +1 -1
- package/build/usage.d.ts +15 -0
- package/build/usage.d.ts.map +1 -0
- package/build/usage.js +66 -0
- package/build/usage.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,37 +1,27 @@
|
|
|
1
1
|
# @ironflowsh/mcp
|
|
2
2
|
|
|
3
|
-
[](https://smithery.ai/servers/ironflow/hyperliquid)
|
|
4
4
|
|
|
5
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. 36 tools, all read-only, including `run_query` for read-only SQL over every Hyperliquid fill, wallet, funding and liquidation table.
|
|
6
6
|
|
|
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.
|
|
7
|
+
No API key needed to start: keyless calls get 10 requests per minute, 500 per day 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.
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Install
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
The hosted server needs no install and no key: `https://mcp.ironflow.sh/mcp` (Streamable HTTP).
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
[](https://cursor.com/install-mcp?name=ironflow&config=eyJ1cmwiOiJodHRwczovL21jcC5pcm9uZmxvdy5zaC9tY3AifQ%3D%3D)
|
|
14
|
+
[](https://insiders.vscode.dev/redirect?url=vscode%3Amcp%2Finstall%3F%257B%2522name%2522%253A%2522ironflow%2522%252C%2522type%2522%253A%2522http%2522%252C%2522url%2522%253A%2522https%253A%252F%252Fmcp.ironflow.sh%252Fmcp%2522%257D)
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
> "Summarize this wallet's last 30 days: PnL, fees, maker share, funding paid."
|
|
18
|
-
|
|
19
|
-
## Hosted server (no install)
|
|
20
|
-
|
|
21
|
-
Connect by URL: `https://mcp.ironflow.sh/mcp` (Streamable HTTP).
|
|
16
|
+
**Claude Code**
|
|
22
17
|
|
|
23
18
|
```bash
|
|
24
|
-
# Claude Code
|
|
25
19
|
claude mcp add --transport http ironflow https://mcp.ironflow.sh/mcp
|
|
26
|
-
|
|
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
20
|
```
|
|
31
21
|
|
|
32
|
-
Claude
|
|
22
|
+
**Claude (claude.ai and Claude Desktop)**: open Customize → Connectors, click Add custom connector, enter the name `Ironflow` and the URL `https://mcp.ironflow.sh/mcp`, then click Add. On Team and Enterprise plans an Owner adds it under Organization settings → Connectors → Add → Custom, and members then click Connect.
|
|
33
23
|
|
|
34
|
-
Cursor
|
|
24
|
+
**Cursor**: the button above, or add this to `~/.cursor/mcp.json` (or a project's `.cursor/mcp.json`):
|
|
35
25
|
|
|
36
26
|
```json
|
|
37
27
|
{
|
|
@@ -41,7 +31,24 @@ Cursor (`~/.cursor/mcp.json` or a project's `.cursor/mcp.json`):
|
|
|
41
31
|
}
|
|
42
32
|
```
|
|
43
33
|
|
|
44
|
-
|
|
34
|
+
**VS Code**: the button above, or
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
code --add-mcp '{"name":"ironflow","type":"http","url":"https://mcp.ironflow.sh/mcp"}'
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Local server (stdio)**: `npx -y @ironflowsh/mcp`, see [Local server](#local-server).
|
|
41
|
+
|
|
42
|
+
### With a free key
|
|
43
|
+
|
|
44
|
+
Send it as `Authorization: Bearer if_your_api_key`, or as `?key=if_your_api_key` on the URL for clients that cannot set headers.
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
claude mcp add --transport http ironflow https://mcp.ironflow.sh/mcp \
|
|
48
|
+
--header "Authorization: Bearer if_your_api_key"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
In Cursor, add `"headers": { "Authorization": "Bearer if_your_api_key" }` next to `url`.
|
|
45
52
|
|
|
46
53
|
## Local server
|
|
47
54
|
|
|
@@ -73,7 +80,7 @@ To host the HTTP server yourself: `npx -y -p @ironflowsh/mcp ironflow-mcp-http`
|
|
|
73
80
|
|
|
74
81
|
**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`
|
|
75
82
|
|
|
76
|
-
**Market analytics:** `get_funding_stats`, `get_pnl_leaderboard`, `get_market_top_wallets`, `get_wallet_labels`, `
|
|
83
|
+
**Market analytics:** `get_funding_stats`, `get_pnl_leaderboard`, `get_market_top_wallets`, `get_wallet_labels`, `get_vault_leaderboard` and `get_liquidation_levels` (needs a Builder or Enterprise key)
|
|
77
84
|
|
|
78
85
|
**Signals:** `get_top_traders`, `get_market_leaders`, `get_early_movers`, `get_trader_profile`
|
|
79
86
|
|
|
@@ -83,7 +90,7 @@ To host the HTTP server yourself: `npx -y -p @ironflowsh/mcp ironflow-mcp-http`
|
|
|
83
90
|
|
|
84
91
|
**Status:** `get_status`, `get_status_metrics`, `get_status_history`
|
|
85
92
|
|
|
86
|
-
Fill history covers a rolling 12 months. There is no order book, order status or streaming tool.
|
|
93
|
+
Markets can be given as display symbols (`BTC-PERP`, `xyz:NVDA-PERP`, `HYPE/USDC`) or Hyperliquid names (`BTC`, `@107`, `xyz:NVDA`), and times as Unix ms, Unix seconds or ISO 8601. When the API reads a name, or serves a window that starts later than asked because of the key's history limit, the result starts with a `notice` saying so. Fill history covers a rolling 12 months. There is no order book, order status or streaming tool.
|
|
87
94
|
|
|
88
95
|
## Configuration
|
|
89
96
|
|
|
@@ -92,6 +99,11 @@ Fill history covers a rolling 12 months. There is no order book, order status or
|
|
|
92
99
|
| `IRONFLOW_API_KEY` | optional; free key at [ironflow.sh/key](https://ironflow.sh/key) |
|
|
93
100
|
| `IRONFLOW_API_URL` | `https://api.ironflow.sh` |
|
|
94
101
|
| `PORT` (HTTP server) | `8080` |
|
|
102
|
+
| `MCP_LOG_SALT` (HTTP server) | random per process; keys the caller hash in the access log |
|
|
103
|
+
|
|
104
|
+
## Usage data
|
|
105
|
+
|
|
106
|
+
Each API call carries two headers so we can see which apps and tools people use: `X-Ironflow-Client` (the MCP client's name and version, e.g. `claude-code/2.1.0`) and `X-Ironflow-Tool` (the tool name). The hosted server logs each request's method, tool arguments, client name, status, whether the tool returned an error, the API status and error code behind it, and a salted hash of the caller's IP. It never logs IPs or API keys.
|
|
95
107
|
|
|
96
108
|
## Links
|
|
97
109
|
|
package/build/api.d.ts
CHANGED
|
@@ -1,13 +1,39 @@
|
|
|
1
|
+
export interface CallContext {
|
|
2
|
+
client?: string;
|
|
3
|
+
tool?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface MarketsQuery {
|
|
6
|
+
source?: string;
|
|
7
|
+
marketClass?: string;
|
|
8
|
+
issuer?: string;
|
|
9
|
+
q?: string;
|
|
10
|
+
includeInactive?: boolean;
|
|
11
|
+
limit?: number;
|
|
12
|
+
cursor?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface UpstreamCall {
|
|
15
|
+
status: number;
|
|
16
|
+
code?: string;
|
|
17
|
+
}
|
|
1
18
|
export declare class IronflowAPI {
|
|
2
19
|
private baseUrl;
|
|
3
20
|
private apiKey?;
|
|
4
21
|
private source;
|
|
5
22
|
private userAgent;
|
|
6
23
|
private forwardedFor?;
|
|
24
|
+
private context;
|
|
25
|
+
private calls;
|
|
26
|
+
private notices;
|
|
7
27
|
constructor(baseUrl?: string, apiKey?: string, source?: string, version?: string, forwardedFor?: string);
|
|
8
28
|
private headers;
|
|
29
|
+
hasKey(): boolean;
|
|
30
|
+
upstreamCalls(): UpstreamCall[];
|
|
31
|
+
private record;
|
|
32
|
+
withContext(context: CallContext): IronflowAPI;
|
|
33
|
+
notice(): string;
|
|
34
|
+
private noteHeaders;
|
|
9
35
|
private apiError;
|
|
10
|
-
get(path: string, params?: Record<string, string
|
|
36
|
+
get(path: string, params?: Record<string, string>, keepEmpty?: readonly string[]): Promise<unknown>;
|
|
11
37
|
post(path: string, body: unknown): Promise<unknown>;
|
|
12
38
|
getPrice(market: string): Promise<string>;
|
|
13
39
|
getRecentTrades(market: string, limit?: string): Promise<unknown>;
|
|
@@ -22,20 +48,20 @@ export declare class IronflowAPI {
|
|
|
22
48
|
getVaultLeaderboard(limit?: string): Promise<unknown>;
|
|
23
49
|
getFundingStats(market: string, interval?: string, limit?: string): Promise<unknown>;
|
|
24
50
|
getUserState(address: string): Promise<unknown>;
|
|
25
|
-
getUserFunding(address: string, market?: string, from?:
|
|
26
|
-
getUserMakerTaker(address: string, market?: string, from?:
|
|
27
|
-
getUserLedger(address: string, from?:
|
|
28
|
-
getPnLLeaderboard(from?:
|
|
29
|
-
getMarketTopWallets(market: string, from?:
|
|
51
|
+
getUserFunding(address: string, market?: string, from?: string, to?: string, bucket?: string): Promise<unknown>;
|
|
52
|
+
getUserMakerTaker(address: string, market?: string, from?: string, to?: string): Promise<unknown>;
|
|
53
|
+
getUserLedger(address: string, from?: string, to?: string, eventTypes?: string, limit?: number): Promise<unknown>;
|
|
54
|
+
getPnLLeaderboard(from?: string, to?: string, limit?: number, sortBy?: string): Promise<unknown>;
|
|
55
|
+
getMarketTopWallets(market: string, from?: string, to?: string, limit?: number, sortBy?: string): Promise<unknown>;
|
|
30
56
|
getMarketsSnapshot(marketClass?: string, issuer?: string): Promise<unknown>;
|
|
31
|
-
getUserSummary(address: string, from?:
|
|
32
|
-
getUserPnLSeries(address: string, from?:
|
|
57
|
+
getUserSummary(address: string, from?: string, to?: string): Promise<unknown>;
|
|
58
|
+
getUserPnLSeries(address: string, from?: string, to?: string, bucketMs?: number): Promise<unknown>;
|
|
33
59
|
getWalletLabels(whaleTopN?: number, smartTopN?: number): Promise<unknown>;
|
|
34
60
|
listCohorts(): Promise<unknown>;
|
|
35
61
|
getCohortAddresses(name: string): Promise<unknown>;
|
|
36
62
|
getStatus(): Promise<unknown>;
|
|
37
63
|
getStatusMetrics(): Promise<unknown>;
|
|
38
64
|
getStatusHistory(period?: string): Promise<unknown>;
|
|
39
|
-
listMarkets(
|
|
65
|
+
listMarkets(query?: MarketsQuery): Promise<unknown>;
|
|
40
66
|
}
|
|
41
67
|
//# sourceMappingURL=api.d.ts.map
|
package/build/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/build/api.js
CHANGED
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
// Ironflow REST API client. Uses native fetch — no external HTTP dependencies.
|
|
2
|
+
import { formatNotices, readNotice } from "./notice.js";
|
|
3
|
+
import { sanitizeClientApp } from "./usage.js";
|
|
2
4
|
const DEFAULT_BASE_URL = "https://api.ironflow.sh";
|
|
3
5
|
const DEFAULT_SOURCE = "hyperliquid";
|
|
6
|
+
const TOOL_PATTERN = /^[a-z0-9_]{1,48}$/;
|
|
7
|
+
const ERROR_CODE_PATTERN = /^[A-Z0-9_]{1,48}$/;
|
|
8
|
+
const MAX_NOTICES = 20;
|
|
4
9
|
export class IronflowAPI {
|
|
5
10
|
baseUrl;
|
|
6
11
|
apiKey;
|
|
7
12
|
source;
|
|
8
13
|
userAgent;
|
|
9
14
|
forwardedFor;
|
|
15
|
+
context = {};
|
|
16
|
+
// Shared by every withContext copy, so the hosted server can read what
|
|
17
|
+
// the tool calls of one request did upstream.
|
|
18
|
+
calls = [];
|
|
19
|
+
// Notice headers of this copy's responses: one withContext copy per tool
|
|
20
|
+
// call, so a tool result carries only its own notices.
|
|
21
|
+
notices = [];
|
|
10
22
|
// forwardedFor is set only by the hosted HTTP server: it passes the MCP
|
|
11
23
|
// client's IP on so keyless rate limits apply per caller, not per server.
|
|
12
24
|
constructor(baseUrl = DEFAULT_BASE_URL, apiKey, source = DEFAULT_SOURCE, version = "unknown", forwardedFor) {
|
|
@@ -27,37 +39,88 @@ export class IronflowAPI {
|
|
|
27
39
|
if (this.forwardedFor) {
|
|
28
40
|
h["X-Forwarded-For"] = this.forwardedFor;
|
|
29
41
|
}
|
|
42
|
+
const client = sanitizeClientApp(this.context.client);
|
|
43
|
+
if (client)
|
|
44
|
+
h["X-Ironflow-Client"] = client;
|
|
45
|
+
if (this.context.tool && TOOL_PATTERN.test(this.context.tool)) {
|
|
46
|
+
h["X-Ironflow-Tool"] = this.context.tool;
|
|
47
|
+
}
|
|
30
48
|
return h;
|
|
31
49
|
}
|
|
50
|
+
// hasKey reports whether requests carry an API key.
|
|
51
|
+
hasKey() {
|
|
52
|
+
return Boolean(this.apiKey);
|
|
53
|
+
}
|
|
54
|
+
// upstreamCalls returns the status (and error code) of every API request
|
|
55
|
+
// made so far through this client or its withContext copies.
|
|
56
|
+
upstreamCalls() {
|
|
57
|
+
return [...this.calls];
|
|
58
|
+
}
|
|
59
|
+
record(status, code) {
|
|
60
|
+
this.calls.push(code && ERROR_CODE_PATTERN.test(code) ? { status, code } : { status });
|
|
61
|
+
}
|
|
62
|
+
// withContext returns a copy of this client that tags its requests with
|
|
63
|
+
// the given caller context. A copy, so concurrent tool calls on a shared
|
|
64
|
+
// stdio client never see each other's tool name.
|
|
65
|
+
withContext(context) {
|
|
66
|
+
const copy = Object.create(IronflowAPI.prototype);
|
|
67
|
+
Object.assign(copy, this);
|
|
68
|
+
copy.context = { ...context };
|
|
69
|
+
copy.notices = [];
|
|
70
|
+
return copy;
|
|
71
|
+
}
|
|
72
|
+
// notice returns what the API said beside the data of this client's
|
|
73
|
+
// responses (a resolved market name, history cut short by the tier, a
|
|
74
|
+
// next step), as one line for the agent; "" when it said nothing.
|
|
75
|
+
notice() {
|
|
76
|
+
return formatNotices(this.notices);
|
|
77
|
+
}
|
|
78
|
+
noteHeaders(res, requestedMarket) {
|
|
79
|
+
const n = readNotice(res.headers, requestedMarket);
|
|
80
|
+
if (n && this.notices.length < MAX_NOTICES)
|
|
81
|
+
this.notices.push(n);
|
|
82
|
+
}
|
|
83
|
+
// apiError keeps the API's code, message and detail: the message names the
|
|
84
|
+
// next step (a free key, a narrower window), which the agent passes on.
|
|
32
85
|
async apiError(res) {
|
|
33
86
|
const text = await res.text();
|
|
87
|
+
const retry = Number(res.headers.get("retry-after"));
|
|
88
|
+
const retryNote = Number.isFinite(retry) && retry > 0 ? ` Retry after ${retry} s.` : "";
|
|
34
89
|
try {
|
|
35
90
|
const parsed = JSON.parse(text);
|
|
36
91
|
const code = parsed.error?.code;
|
|
37
92
|
const message = parsed.error?.message;
|
|
93
|
+
const detail = parsed.error?.detail ? ` (${parsed.error.detail})` : "";
|
|
94
|
+
this.record(res.status, code);
|
|
38
95
|
if (code) {
|
|
39
|
-
return new Error(`Ironflow API error ${res.status} ${code}: ${message ?? text}`);
|
|
96
|
+
return new Error(`Ironflow API error ${res.status} ${code}: ${message ?? text}${detail}${retryNote}`);
|
|
40
97
|
}
|
|
41
98
|
}
|
|
42
99
|
catch {
|
|
43
100
|
// Non-JSON response — fall through to raw text.
|
|
101
|
+
this.record(res.status);
|
|
44
102
|
}
|
|
45
|
-
return new Error(`Ironflow API error ${res.status}: ${text}`);
|
|
103
|
+
return new Error(`Ironflow API error ${res.status}: ${text}${retryNote}`);
|
|
46
104
|
}
|
|
47
|
-
|
|
105
|
+
// get sends a GET with the given query. Empty values are left out, except
|
|
106
|
+
// keys named in keepEmpty, where an empty value means something (issuer=
|
|
107
|
+
// asks /v1/markets for native markets only).
|
|
108
|
+
async get(path, params = {}, keepEmpty = []) {
|
|
48
109
|
// Always include source.
|
|
49
110
|
if (!params.source) {
|
|
50
111
|
params.source = this.source;
|
|
51
112
|
}
|
|
52
113
|
const url = new URL(path, this.baseUrl);
|
|
53
114
|
for (const [k, v] of Object.entries(params)) {
|
|
54
|
-
if (v)
|
|
115
|
+
if (v || (v === "" && keepEmpty.includes(k)))
|
|
55
116
|
url.searchParams.set(k, v);
|
|
56
117
|
}
|
|
57
118
|
const res = await fetch(url.toString(), { headers: this.headers() });
|
|
119
|
+
this.noteHeaders(res, params.market || params.coin);
|
|
58
120
|
if (!res.ok) {
|
|
59
121
|
throw await this.apiError(res);
|
|
60
122
|
}
|
|
123
|
+
this.record(res.status);
|
|
61
124
|
const ctype = res.headers.get("content-type") ?? "";
|
|
62
125
|
if (ctype.includes("application/json")) {
|
|
63
126
|
return res.json();
|
|
@@ -72,9 +135,11 @@ export class IronflowAPI {
|
|
|
72
135
|
headers: this.headers(),
|
|
73
136
|
body: JSON.stringify(body),
|
|
74
137
|
});
|
|
138
|
+
this.noteHeaders(res);
|
|
75
139
|
if (!res.ok) {
|
|
76
140
|
throw await this.apiError(res);
|
|
77
141
|
}
|
|
142
|
+
this.record(res.status);
|
|
78
143
|
return res.json();
|
|
79
144
|
}
|
|
80
145
|
// ─── Convenience methods ──────────────────────────────────────────────
|
|
@@ -132,58 +197,43 @@ export class IronflowAPI {
|
|
|
132
197
|
async getUserState(address) {
|
|
133
198
|
return this.get("/v1/analytics/user-state", { address });
|
|
134
199
|
}
|
|
135
|
-
async getUserFunding(address, market = "", from =
|
|
200
|
+
async getUserFunding(address, market = "", from = "", to = "", bucket = "1d") {
|
|
136
201
|
const params = { address, bucket };
|
|
137
202
|
if (market)
|
|
138
203
|
params.market = market;
|
|
139
|
-
|
|
140
|
-
params.from = String(from);
|
|
141
|
-
if (to > 0)
|
|
142
|
-
params.to = String(to);
|
|
204
|
+
setWindow(params, from, to);
|
|
143
205
|
return this.get("/v1/analytics/user-funding", params);
|
|
144
206
|
}
|
|
145
|
-
async getUserMakerTaker(address, market = "", from =
|
|
207
|
+
async getUserMakerTaker(address, market = "", from = "", to = "") {
|
|
146
208
|
const params = { address };
|
|
147
209
|
if (market)
|
|
148
210
|
params.market = market;
|
|
149
|
-
|
|
150
|
-
params.from = String(from);
|
|
151
|
-
if (to > 0)
|
|
152
|
-
params.to = String(to);
|
|
211
|
+
setWindow(params, from, to);
|
|
153
212
|
return this.get("/v1/analytics/user-maker-taker", params);
|
|
154
213
|
}
|
|
155
|
-
async getUserLedger(address, from =
|
|
214
|
+
async getUserLedger(address, from = "", to = "", eventTypes = "", limit = 1000) {
|
|
156
215
|
const params = { address, limit: String(limit) };
|
|
157
|
-
|
|
158
|
-
params.from = String(from);
|
|
159
|
-
if (to > 0)
|
|
160
|
-
params.to = String(to);
|
|
216
|
+
setWindow(params, from, to);
|
|
161
217
|
if (eventTypes)
|
|
162
218
|
params.event_types = eventTypes;
|
|
163
219
|
return this.get("/v1/analytics/user-ledger", params);
|
|
164
220
|
}
|
|
165
221
|
// ─── Cross-wallet ranking (v0.34+) ───────────────────────────────────
|
|
166
|
-
async getPnLLeaderboard(from =
|
|
222
|
+
async getPnLLeaderboard(from = "", to = "", limit = 50, sortBy = "realized_pnl") {
|
|
167
223
|
const params = {
|
|
168
224
|
limit: String(limit),
|
|
169
225
|
sort_by: sortBy,
|
|
170
226
|
};
|
|
171
|
-
|
|
172
|
-
params.from = String(from);
|
|
173
|
-
if (to > 0)
|
|
174
|
-
params.to = String(to);
|
|
227
|
+
setWindow(params, from, to);
|
|
175
228
|
return this.get("/v1/analytics/leaderboard-pnl", params);
|
|
176
229
|
}
|
|
177
|
-
async getMarketTopWallets(market, from =
|
|
230
|
+
async getMarketTopWallets(market, from = "", to = "", limit = 25, sortBy = "volume") {
|
|
178
231
|
const params = {
|
|
179
232
|
market,
|
|
180
233
|
limit: String(limit),
|
|
181
234
|
sort_by: sortBy,
|
|
182
235
|
};
|
|
183
|
-
|
|
184
|
-
params.from = String(from);
|
|
185
|
-
if (to > 0)
|
|
186
|
-
params.to = String(to);
|
|
236
|
+
setWindow(params, from, to);
|
|
187
237
|
return this.get("/v1/analytics/market-top-wallets", params);
|
|
188
238
|
}
|
|
189
239
|
async getMarketsSnapshot(marketClass = "", issuer = "") {
|
|
@@ -198,20 +248,14 @@ export class IronflowAPI {
|
|
|
198
248
|
params.issuer = issuer;
|
|
199
249
|
return this.get("/v1/markets/snapshot", params);
|
|
200
250
|
}
|
|
201
|
-
async getUserSummary(address, from =
|
|
251
|
+
async getUserSummary(address, from = "", to = "") {
|
|
202
252
|
const params = { address };
|
|
203
|
-
|
|
204
|
-
params.from = String(from);
|
|
205
|
-
if (to > 0)
|
|
206
|
-
params.to = String(to);
|
|
253
|
+
setWindow(params, from, to);
|
|
207
254
|
return this.get("/v1/analytics/user-summary", params);
|
|
208
255
|
}
|
|
209
|
-
async getUserPnLSeries(address, from =
|
|
256
|
+
async getUserPnLSeries(address, from = "", to = "", bucketMs = 0) {
|
|
210
257
|
const params = { address };
|
|
211
|
-
|
|
212
|
-
params.from = String(from);
|
|
213
|
-
if (to > 0)
|
|
214
|
-
params.to = String(to);
|
|
258
|
+
setWindow(params, from, to);
|
|
215
259
|
if (bucketMs > 0)
|
|
216
260
|
params.bucket_ms = String(bucketMs);
|
|
217
261
|
return this.get("/v1/analytics/user-pnl-series", params);
|
|
@@ -242,16 +286,31 @@ export class IronflowAPI {
|
|
|
242
286
|
params.period = period;
|
|
243
287
|
return this.get("/v1/status/history", params);
|
|
244
288
|
}
|
|
245
|
-
async listMarkets(
|
|
289
|
+
async listMarkets(query = {}) {
|
|
246
290
|
const params = {};
|
|
247
|
-
if (source)
|
|
248
|
-
params.source = source;
|
|
249
|
-
if (
|
|
250
|
-
params.market_class =
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
291
|
+
if (query.source)
|
|
292
|
+
params.source = query.source;
|
|
293
|
+
if (query.marketClass)
|
|
294
|
+
params.market_class = query.marketClass;
|
|
295
|
+
if (query.issuer !== undefined)
|
|
296
|
+
params.issuer = query.issuer;
|
|
297
|
+
if (query.q)
|
|
298
|
+
params.q = query.q;
|
|
299
|
+
if (query.includeInactive)
|
|
300
|
+
params.include_inactive = "true";
|
|
301
|
+
if (query.limit)
|
|
302
|
+
params.limit = String(query.limit);
|
|
303
|
+
if (query.cursor)
|
|
304
|
+
params.cursor = query.cursor;
|
|
305
|
+
return this.get("/v1/markets", params, ["issuer"]);
|
|
255
306
|
}
|
|
256
307
|
}
|
|
308
|
+
// setWindow adds from and to when set. Both pass through as the caller gave
|
|
309
|
+
// them: the API reads Unix ms, Unix seconds and ISO 8601.
|
|
310
|
+
function setWindow(params, from, to) {
|
|
311
|
+
if (from)
|
|
312
|
+
params.from = from;
|
|
313
|
+
if (to)
|
|
314
|
+
params.to = to;
|
|
315
|
+
}
|
|
257
316
|
//# sourceMappingURL=api.js.map
|
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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"}
|
package/build/http.js
CHANGED
|
@@ -15,11 +15,16 @@
|
|
|
15
15
|
// FORWARD_CLIENT_IP "true" only behind a proxy that sets X-Forwarded-For
|
|
16
16
|
// to the real client IP; the IP is passed to the API so
|
|
17
17
|
// keyless limits apply per caller
|
|
18
|
+
// MCP_LOG_SALT keys the caller-IP hash in the access log; use the
|
|
19
|
+
// API's REQUEST_LOG_SALT so a caller hashes the same in
|
|
20
|
+
// both logs (random per process when unset)
|
|
21
|
+
import { randomBytes } from "node:crypto";
|
|
18
22
|
import { createServer as createHttpServer } from "node:http";
|
|
19
23
|
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
20
24
|
import { IronflowAPI } from "./api.js";
|
|
21
25
|
import { clientIP, HttpError, readKey } from "./request.js";
|
|
22
26
|
import { createServer, packageVersion } from "./server.js";
|
|
27
|
+
import { callerHash, clientFromInitialize, sanitizeClientApp, summarizeArgs, toolLogFields } from "./usage.js";
|
|
23
28
|
const DEFAULT_PORT = 8080;
|
|
24
29
|
const MAX_BODY_BYTES = 1024 * 1024;
|
|
25
30
|
const MCP_PATH = "/mcp";
|
|
@@ -28,6 +33,7 @@ const port = Number(process.env.PORT) || DEFAULT_PORT;
|
|
|
28
33
|
const apiUrl = process.env.IRONFLOW_API_URL || "https://api.ironflow.sh";
|
|
29
34
|
const forwardClientIP = process.env.FORWARD_CLIENT_IP === "true";
|
|
30
35
|
const version = packageVersion();
|
|
36
|
+
const logSalt = process.env.MCP_LOG_SALT || randomBytes(32).toString("hex");
|
|
31
37
|
// setCors allows browser-based MCP clients (inspectors, web agents). No
|
|
32
38
|
// cookies are involved, so a wildcard origin is safe.
|
|
33
39
|
function setCors(res) {
|
|
@@ -61,8 +67,8 @@ async function readBody(req) {
|
|
|
61
67
|
throw new HttpError(400, "Request body is not valid JSON");
|
|
62
68
|
}
|
|
63
69
|
}
|
|
64
|
-
// describeRPC names what a request did for the access log, without keys
|
|
65
|
-
// IPs
|
|
70
|
+
// describeRPC names what a request did for the access log, without keys or
|
|
71
|
+
// IPs. Tool arguments are logged separately (args).
|
|
66
72
|
function describeRPC(body) {
|
|
67
73
|
const msgs = Array.isArray(body) ? body : [body];
|
|
68
74
|
return msgs
|
|
@@ -76,8 +82,14 @@ async function handleMCP(req, res, url) {
|
|
|
76
82
|
const started = Date.now();
|
|
77
83
|
const key = readKey(req, url);
|
|
78
84
|
const body = await readBody(req);
|
|
79
|
-
const
|
|
80
|
-
const
|
|
85
|
+
const ip = clientIP(req, forwardClientIP);
|
|
86
|
+
const userAgent = sanitizeClientApp(req.headers["user-agent"]);
|
|
87
|
+
const api = new IronflowAPI(apiUrl, key, undefined, `${version}-hosted`, ip);
|
|
88
|
+
const outcomes = [];
|
|
89
|
+
const server = createServer(api, version, {
|
|
90
|
+
fallbackClient: userAgent,
|
|
91
|
+
onToolResult: (outcome) => outcomes.push(outcome),
|
|
92
|
+
});
|
|
81
93
|
const transport = new StreamableHTTPServerTransport({
|
|
82
94
|
sessionIdGenerator: undefined,
|
|
83
95
|
enableJsonResponse: true,
|
|
@@ -85,7 +97,18 @@ async function handleMCP(req, res, url) {
|
|
|
85
97
|
res.on("close", () => {
|
|
86
98
|
void transport.close();
|
|
87
99
|
void server.close();
|
|
88
|
-
console.log(JSON.stringify({
|
|
100
|
+
console.log(JSON.stringify({
|
|
101
|
+
msg: "mcp",
|
|
102
|
+
rpc: describeRPC(body),
|
|
103
|
+
keyed: Boolean(key),
|
|
104
|
+
status: res.statusCode,
|
|
105
|
+
ms: Date.now() - started,
|
|
106
|
+
client: clientFromInitialize(body) || undefined,
|
|
107
|
+
ua: userAgent || undefined,
|
|
108
|
+
caller: callerHash(ip, logSalt) || undefined,
|
|
109
|
+
args: summarizeArgs(body) || undefined,
|
|
110
|
+
...toolLogFields(outcomes, api.upstreamCalls()),
|
|
111
|
+
}));
|
|
89
112
|
});
|
|
90
113
|
await server.connect(transport);
|
|
91
114
|
await transport.handleRequest(req, res, body);
|
package/build/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":";AAEA,oEAAoE;AACpE,2EAA2E;AAC3E,wDAAwD;AACxD,EAAE;AACF,uCAAuC;AACvC,yEAAyE;AACzE,EAAE;AACF,uEAAuE;AACvE,8DAA8D;AAC9D,EAAE;AACF,eAAe;AACf,kDAAkD;AAClD,uEAAuE;AACvE,4EAA4E;AAC5E,6EAA6E;AAC7E,uDAAuD;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|
package/build/index.js
CHANGED
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
// Usage:
|
|
5
5
|
// IRONFLOW_API_KEY=if_xxx npx -y @ironflowsh/mcp
|
|
6
6
|
//
|
|
7
|
-
// The key is optional: keyless calls get 10 requests per minute
|
|
8
|
-
// of history; a free key from https://ironflow.sh/key gives 60
|
|
7
|
+
// The key is optional: keyless calls get 10 requests per minute, 500 per day
|
|
8
|
+
// and 24 hours of history; a free key from https://ironflow.sh/key gives 60
|
|
9
|
+
// per minute and 30 days.
|
|
9
10
|
// No install needed at all with the hosted server:
|
|
10
11
|
// claude mcp add --transport http ironflow https://mcp.ironflow.sh/mcp
|
|
11
12
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
@@ -15,7 +16,7 @@ const apiUrl = process.env.IRONFLOW_API_URL || "https://api.ironflow.sh";
|
|
|
15
16
|
const apiKey = process.env.IRONFLOW_API_KEY;
|
|
16
17
|
if (!apiKey) {
|
|
17
18
|
// stderr: stdout carries the MCP protocol.
|
|
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");
|
|
19
|
+
console.error("IRONFLOW_API_KEY is not set: running keyless (10 requests per minute, 500 per day, 24 hours of history). Free key for more: https://ironflow.sh/key");
|
|
19
20
|
}
|
|
20
21
|
const version = packageVersion();
|
|
21
22
|
const server = createServer(new IronflowAPI(apiUrl, apiKey, undefined, version), version);
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,0BAA0B;AAC1B,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,qJAAqJ,CACtJ,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"}
|