@ironflowsh/mcp 0.11.2 → 0.13.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 +3 -3
- package/build/api.d.ts +5 -0
- package/build/api.d.ts.map +1 -1
- package/build/api.js +28 -0
- package/build/api.js.map +1 -1
- package/build/http.js +11 -4
- package/build/http.js.map +1 -1
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/liquidations.d.ts +67 -0
- package/build/liquidations.d.ts.map +1 -1
- package/build/liquidations.js +32 -0
- package/build/liquidations.js.map +1 -1
- package/build/request.js +1 -1
- package/build/request.js.map +1 -1
- package/build/schemas.d.ts.map +1 -1
- package/build/schemas.js +84 -1
- package/build/schemas.js.map +1 -1
- package/build/server.d.ts +1 -0
- package/build/server.d.ts.map +1 -1
- package/build/server.js +2 -1
- package/build/server.js.map +1 -1
- package/build/tools.d.ts.map +1 -1
- package/build/tools.js +151 -21
- package/build/tools.js.map +1 -1
- package/build/usage.d.ts +7 -0
- package/build/usage.d.ts.map +1 -1
- package/build/usage.js +38 -3
- package/build/usage.js.map +1 -1
- package/package.json +1 -1
package/build/usage.d.ts
CHANGED
|
@@ -4,12 +4,19 @@ export declare function callerHash(ip: string | undefined, salt: string): string
|
|
|
4
4
|
export declare function summarizeArgs(body: unknown): string;
|
|
5
5
|
export declare function toolLogFields(outcomes: {
|
|
6
6
|
isError: boolean;
|
|
7
|
+
error?: string;
|
|
7
8
|
}[], upstream: {
|
|
8
9
|
status: number;
|
|
9
10
|
code?: string;
|
|
10
11
|
}[]): {
|
|
11
12
|
isError?: boolean;
|
|
13
|
+
error?: string;
|
|
12
14
|
upstream?: number[];
|
|
13
15
|
upstream_error?: string;
|
|
14
16
|
};
|
|
17
|
+
export declare class ClientMemory {
|
|
18
|
+
private readonly names;
|
|
19
|
+
remember(caller: string, client: string, now?: number): void;
|
|
20
|
+
recall(caller: string, now?: number): string;
|
|
21
|
+
}
|
|
15
22
|
//# sourceMappingURL=usage.d.ts.map
|
package/build/usage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAqBA,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAInE;AAID,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAQ1D;AAKD,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGvE;AAID,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAOnD;AAQD,wBAAgB,aAAa,CAC3B,QAAQ,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,EAChD,QAAQ,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAC5C;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,CAUrF;AAOD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqD;IAE3E,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,IAAI;IAUhE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,MAAM;CASjD"}
|
package/build/usage.js
CHANGED
|
@@ -5,6 +5,9 @@ import { createHmac } from "node:crypto";
|
|
|
5
5
|
const MAX_CLIENT_APP_LEN = 64;
|
|
6
6
|
const MAX_ARGS_LEN = 600;
|
|
7
7
|
const CALLER_HASH_LEN = 16;
|
|
8
|
+
const MAX_ERROR_LEN = 160;
|
|
9
|
+
const CLIENT_MEMORY_MS = 60 * 60 * 1000;
|
|
10
|
+
const MAX_REMEMBERED_CLIENTS = 10_000;
|
|
8
11
|
const CLIENT_APP_PATTERN = /^[A-Za-z0-9 ._/@()+:-]*$/;
|
|
9
12
|
const messages = (body) => (Array.isArray(body) ? body : [body]);
|
|
10
13
|
// sanitizeClientApp returns a plain, printable app name of at most 64
|
|
@@ -50,17 +53,49 @@ export function summarizeArgs(body) {
|
|
|
50
53
|
}
|
|
51
54
|
// toolLogFields adds how a request's tool calls ended to its access-log
|
|
52
55
|
// line: isError when any tool result went back as an error (the HTTP status
|
|
53
|
-
// stays 200 for those),
|
|
54
|
-
//
|
|
55
|
-
//
|
|
56
|
+
// stays 200 for those), error with the first error's text (so a failure
|
|
57
|
+
// that never reached the API still says why), upstream with the API status
|
|
58
|
+
// of each request the tools made, and upstream_error with the API's error
|
|
59
|
+
// codes. Empty for requests without tool calls.
|
|
56
60
|
export function toolLogFields(outcomes, upstream) {
|
|
57
61
|
if (outcomes.length === 0 && upstream.length === 0)
|
|
58
62
|
return {};
|
|
59
63
|
const codes = [...new Set(upstream.map((u) => u.code).filter(Boolean))];
|
|
64
|
+
const firstError = outcomes.find((o) => o.isError && o.error)?.error;
|
|
60
65
|
return {
|
|
61
66
|
isError: outcomes.length > 0 ? outcomes.some((o) => o.isError) : undefined,
|
|
67
|
+
error: firstError ? firstError.replace(/\s+/g, " ").slice(0, MAX_ERROR_LEN) : undefined,
|
|
62
68
|
upstream: upstream.length > 0 ? upstream.map((u) => u.status) : undefined,
|
|
63
69
|
upstream_error: codes.length > 0 ? codes.join(",") : undefined,
|
|
64
70
|
};
|
|
65
71
|
}
|
|
72
|
+
// The hosted server is stateless, so a tools/call arrives without the
|
|
73
|
+
// clientInfo its client sent at initialize. ClientMemory keeps the app name
|
|
74
|
+
// per caller hash for an hour, so later requests from the same caller can be
|
|
75
|
+
// attributed to it in the log and in X-Ironflow-Client. Several apps behind
|
|
76
|
+
// one IP share a hash; the log marks such names as recalled.
|
|
77
|
+
export class ClientMemory {
|
|
78
|
+
names = new Map();
|
|
79
|
+
remember(caller, client, now = Date.now()) {
|
|
80
|
+
if (!caller || !client)
|
|
81
|
+
return;
|
|
82
|
+
this.names.delete(caller);
|
|
83
|
+
this.names.set(caller, { client, at: now });
|
|
84
|
+
if (this.names.size > MAX_REMEMBERED_CLIENTS) {
|
|
85
|
+
const oldest = this.names.keys().next().value;
|
|
86
|
+
if (oldest !== undefined)
|
|
87
|
+
this.names.delete(oldest);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
recall(caller, now = Date.now()) {
|
|
91
|
+
const hit = caller ? this.names.get(caller) : undefined;
|
|
92
|
+
if (!hit)
|
|
93
|
+
return "";
|
|
94
|
+
if (now - hit.at > CLIENT_MEMORY_MS) {
|
|
95
|
+
this.names.delete(caller);
|
|
96
|
+
return "";
|
|
97
|
+
}
|
|
98
|
+
return hit.client;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
66
101
|
//# sourceMappingURL=usage.js.map
|
package/build/usage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,4EAA4E;AAC5E,yBAAyB;AAEzB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,kBAAkB,GAAG,0BAA0B,CAAC;AAItD,MAAM,QAAQ,GAAG,CAAC,IAAa,EAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAiB,CAAC;AAExG,sEAAsE;AACtE,0EAA0E;AAC1E,iDAAiD;AACjD,MAAM,UAAU,iBAAiB,CAAC,KAAyB;IACzD,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3C,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;AACxC,CAAC;AAED,2EAA2E;AAC3E,uDAAuD;AACvD,MAAM,UAAU,oBAAoB,CAAC,IAAa;IAChD,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC,MAAM,KAAK,YAAY;YAAE,SAAS;QACxC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,IAAI;YAAE,OAAO,EAAE,CAAC;QAC3B,OAAO,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,sEAAsE;AACtE,6EAA6E;AAC7E,uDAAuD;AACvD,MAAM,UAAU,UAAU,CAAC,EAAsB,EAAE,IAAY;IAC7D,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC;IACnB,OAAO,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;AACvF,CAAC;AAED,0EAA0E;AAC1E,2EAA2E;AAC3E,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC,CAAC,MAAM,KAAK,YAAY,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,KAAK,SAAS;YAAE,SAAS;QAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAChD,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,wEAAwE;AACxE,4EAA4E;AAC5E,
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ironflowsh/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"mcpName": "io.github.ironflowsh/hyperliquid",
|
|
5
5
|
"description": "Read-only Hyperliquid market data and wallet analytics MCP server for Claude, Cursor and AI agents",
|
|
6
6
|
"author": "Ironflow <hello@ironflow.sh>",
|