@continuumdao/continuum-node-sdk 1.3.19 → 1.3.21
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/dist/core/chart/fetch-metadata.d.ts +12 -0
- package/dist/core/chart/fetch-metadata.d.ts.map +1 -0
- package/dist/core/chart/fetch-metadata.js +87 -0
- package/dist/core/chart/fetch-metadata.js.map +1 -0
- package/dist/core/chart/fetch-result.d.ts +2 -1
- package/dist/core/chart/fetch-result.d.ts.map +1 -1
- package/dist/core/chart/fetch-result.js +43 -40
- package/dist/core/chart/fetch-result.js.map +1 -1
- package/dist/core/chart/index.d.ts +1 -0
- package/dist/core/chart/index.d.ts.map +1 -1
- package/dist/core/chart/index.js +1 -0
- package/dist/core/chart/index.js.map +1 -1
- package/dist/core/chart/prepare-from-rows.d.ts +1 -1
- package/dist/core/chart/prepare-from-rows.d.ts.map +1 -1
- package/dist/core/chart/prepare-from-rows.js +46 -12
- package/dist/core/chart/prepare-from-rows.js.map +1 -1
- package/dist/mcp/chart.d.ts.map +1 -1
- package/dist/mcp/chart.js +3 -4
- package/dist/mcp/chart.js.map +1 -1
- package/dist/mcp/defi/discovery.d.ts.map +1 -1
- package/dist/mcp/defi/discovery.js +14 -21
- package/dist/mcp/defi/discovery.js.map +1 -1
- package/dist/mcp/defi/ohlcv-chart-workflow.d.ts +5 -0
- package/dist/mcp/defi/ohlcv-chart-workflow.d.ts.map +1 -0
- package/dist/mcp/defi/ohlcv-chart-workflow.js +16 -0
- package/dist/mcp/defi/ohlcv-chart-workflow.js.map +1 -0
- package/dist/mcp/resources/chart.md +23 -2
- package/package.json +2 -2
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Title/label embedded by the fetch step (execute script), not inferred from user chat. */
|
|
2
|
+
export type FetchChartMetadata = {
|
|
3
|
+
title?: string;
|
|
4
|
+
label?: string;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Read explicit chart metadata from a fetch tool payload.
|
|
8
|
+
* Accepts `{ title, label, result }`, `{ result: { title, label, bars } }`,
|
|
9
|
+
* Hyperliquid `{ ohlcv: { coin, interval, candles } }`, or GMX `{ symbol, timeframe, candles }`.
|
|
10
|
+
*/
|
|
11
|
+
export declare function extractChartMetadataFromFetchPayload(payload: unknown): FetchChartMetadata;
|
|
12
|
+
//# sourceMappingURL=fetch-metadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-metadata.d.ts","sourceRoot":"","sources":["../../../src/core/chart/fetch-metadata.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAE5F,MAAM,MAAM,kBAAkB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAqDF;;;;GAIG;AACH,wBAAgB,oCAAoC,CAAC,OAAO,EAAE,OAAO,GAAG,kBAAkB,CAgCzF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/** Title/label embedded by the fetch step (execute script), not inferred from user chat. */
|
|
2
|
+
function readMetaField(record, key) {
|
|
3
|
+
const raw = record[key];
|
|
4
|
+
if (typeof raw !== 'string') {
|
|
5
|
+
return undefined;
|
|
6
|
+
}
|
|
7
|
+
const trimmed = raw.trim();
|
|
8
|
+
return trimmed || undefined;
|
|
9
|
+
}
|
|
10
|
+
function metadataFromRecord(record) {
|
|
11
|
+
const title = readMetaField(record, 'title');
|
|
12
|
+
const label = readMetaField(record, 'label');
|
|
13
|
+
if (!title && !label) {
|
|
14
|
+
return {};
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
...(title ? { title } : {}),
|
|
18
|
+
...(label ? { label } : {}),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function metadataFromOhlcvWrapper(ohlcv) {
|
|
22
|
+
const coinRaw = ohlcv.coin ?? ohlcv.symbol;
|
|
23
|
+
const coin = typeof coinRaw === 'string' ? coinRaw.trim() : '';
|
|
24
|
+
const intervalRaw = ohlcv.interval ?? ohlcv.timeframe;
|
|
25
|
+
const interval = typeof intervalRaw === 'string' ? intervalRaw.trim() : '';
|
|
26
|
+
if (!coin) {
|
|
27
|
+
return {};
|
|
28
|
+
}
|
|
29
|
+
const label = coin;
|
|
30
|
+
const title = interval ? `${coin} ${interval.toUpperCase()}` : coin;
|
|
31
|
+
return { title, label };
|
|
32
|
+
}
|
|
33
|
+
/** GMX fetch_ohlcv: `{ symbol, timeframe, candles }` at top level (not nested under ohlcv). */
|
|
34
|
+
function metadataFromFlatDefiOhlcvFetch(record) {
|
|
35
|
+
if (!('candles' in record)) {
|
|
36
|
+
return {};
|
|
37
|
+
}
|
|
38
|
+
const symbolRaw = record.symbol;
|
|
39
|
+
const symbol = typeof symbolRaw === 'string' ? symbolRaw.trim() : '';
|
|
40
|
+
if (!symbol) {
|
|
41
|
+
return {};
|
|
42
|
+
}
|
|
43
|
+
const label = symbol.split('[')[0]?.trim() || symbol;
|
|
44
|
+
const intervalRaw = record.timeframe ?? record.interval;
|
|
45
|
+
const interval = typeof intervalRaw === 'string' ? intervalRaw.trim() : '';
|
|
46
|
+
const title = interval ? `${label} ${interval.toUpperCase()}` : label;
|
|
47
|
+
return { title, label };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Read explicit chart metadata from a fetch tool payload.
|
|
51
|
+
* Accepts `{ title, label, result }`, `{ result: { title, label, bars } }`,
|
|
52
|
+
* Hyperliquid `{ ohlcv: { coin, interval, candles } }`, or GMX `{ symbol, timeframe, candles }`.
|
|
53
|
+
*/
|
|
54
|
+
export function extractChartMetadataFromFetchPayload(payload) {
|
|
55
|
+
if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
|
|
56
|
+
return {};
|
|
57
|
+
}
|
|
58
|
+
const record = payload;
|
|
59
|
+
const direct = metadataFromRecord(record);
|
|
60
|
+
if (direct.title || direct.label) {
|
|
61
|
+
return direct;
|
|
62
|
+
}
|
|
63
|
+
const fromFlat = metadataFromFlatDefiOhlcvFetch(record);
|
|
64
|
+
if (fromFlat.title || fromFlat.label) {
|
|
65
|
+
return fromFlat;
|
|
66
|
+
}
|
|
67
|
+
const ohlcv = record.ohlcv;
|
|
68
|
+
if (ohlcv && typeof ohlcv === 'object' && !Array.isArray(ohlcv)) {
|
|
69
|
+
const fromOhlcv = metadataFromOhlcvWrapper(ohlcv);
|
|
70
|
+
if (fromOhlcv.title || fromOhlcv.label) {
|
|
71
|
+
return fromOhlcv;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const result = record.result;
|
|
75
|
+
if (result && typeof result === 'object' && !Array.isArray(result)) {
|
|
76
|
+
const fromResult = metadataFromRecord(result);
|
|
77
|
+
if (fromResult.title || fromResult.label) {
|
|
78
|
+
return fromResult;
|
|
79
|
+
}
|
|
80
|
+
const nestedOhlcv = result.ohlcv;
|
|
81
|
+
if (nestedOhlcv && typeof nestedOhlcv === 'object' && !Array.isArray(nestedOhlcv)) {
|
|
82
|
+
return metadataFromOhlcvWrapper(nestedOhlcv);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return {};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=fetch-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-metadata.js","sourceRoot":"","sources":["../../../src/core/chart/fetch-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { type BuildOhlcvBarsFromPriceVolumeOptions } from './price-volume-bars.js';
|
|
3
3
|
export type ExtractOhlcvBarsOptions = BuildOhlcvBarsFromPriceVolumeOptions;
|
|
4
4
|
export declare function parseJsonIfString(raw: unknown): unknown;
|
|
5
|
+
/** True when a row normalizes to a candle (same rules as prepareChart). */
|
|
5
6
|
export declare function looksLikeOhlcvBar(row: unknown): boolean;
|
|
6
7
|
/** True when at least one row carries a usable volume field (including zero). */
|
|
7
8
|
export declare function barRowsHaveVolume(rows: unknown[]): boolean;
|
|
@@ -10,5 +11,5 @@ export declare function barRowsHaveVolume(rows: unknown[]): boolean;
|
|
|
10
11
|
* Accepts bar objects, OHLC tuples, `{ result: [...] }`, spot `{ prices, total_volumes }` (marketChart),
|
|
11
12
|
* stringified JSON, or common API wrappers.
|
|
12
13
|
*/
|
|
13
|
-
export declare function extractOhlcvBarsFromUnknown(payload: unknown, options?: ExtractOhlcvBarsOptions): unknown[] | null;
|
|
14
|
+
export declare function extractOhlcvBarsFromUnknown(payload: unknown, options?: ExtractOhlcvBarsOptions, depth?: number): unknown[] | null;
|
|
14
15
|
//# sourceMappingURL=fetch-result.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-result.d.ts","sourceRoot":"","sources":["../../../src/core/chart/fetch-result.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAE9F,OAAO,EAEN,KAAK,oCAAoC,EACzC,MAAM,wBAAwB,CAAC;AAGhC,MAAM,MAAM,uBAAuB,GAAG,oCAAoC,CAAC;AAE3E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAgBvD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"fetch-result.d.ts","sourceRoot":"","sources":["../../../src/core/chart/fetch-result.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAE9F,OAAO,EAEN,KAAK,oCAAoC,EACzC,MAAM,wBAAwB,CAAC;AAGhC,MAAM,MAAM,uBAAuB,GAAG,oCAAoC,CAAC;AAE3E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAgBvD;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAQvD;AAoGD,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAwB1D;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAC1C,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,uBAA4B,EACrC,KAAK,SAAI,GACP,OAAO,EAAE,GAAG,IAAI,CAUlB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Vendor-agnostic OHLCV bar extraction from MCP tool results (any fetch/execute payload). */
|
|
2
2
|
import { buildOhlcvBarsFromPriceVolumeSeries, } from './price-volume-bars.js';
|
|
3
|
-
import { coerceFiniteNumber, ohlcvTupleToRow } from './point-normalize.js';
|
|
3
|
+
import { coerceFiniteNumber, normalizeCandleRow, ohlcvTupleToRow } from './point-normalize.js';
|
|
4
4
|
export function parseJsonIfString(raw) {
|
|
5
5
|
if (typeof raw !== 'string') {
|
|
6
6
|
return raw;
|
|
@@ -19,26 +19,15 @@ export function parseJsonIfString(raw) {
|
|
|
19
19
|
}
|
|
20
20
|
return raw;
|
|
21
21
|
}
|
|
22
|
+
/** True when a row normalizes to a candle (same rules as prepareChart). */
|
|
22
23
|
export function looksLikeOhlcvBar(row) {
|
|
24
|
+
if (looksLikeOhlcvTuple(row)) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
23
27
|
if (!row || typeof row !== 'object' || Array.isArray(row)) {
|
|
24
28
|
return false;
|
|
25
29
|
}
|
|
26
|
-
|
|
27
|
-
const hasPrice = 'open' in r ||
|
|
28
|
-
'high' in r ||
|
|
29
|
-
'low' in r ||
|
|
30
|
-
'close' in r ||
|
|
31
|
-
'o' in r ||
|
|
32
|
-
'h' in r ||
|
|
33
|
-
'l' in r ||
|
|
34
|
-
'c' in r;
|
|
35
|
-
const hasTime = 'time' in r ||
|
|
36
|
-
't' in r ||
|
|
37
|
-
'timestampMs' in r ||
|
|
38
|
-
'openTime' in r ||
|
|
39
|
-
'startTime' in r ||
|
|
40
|
-
'periodStartUnix' in r;
|
|
41
|
-
return hasPrice && hasTime;
|
|
30
|
+
return normalizeCandleRow(row) != null;
|
|
42
31
|
}
|
|
43
32
|
function looksLikeOhlcvTuple(row) {
|
|
44
33
|
if (!Array.isArray(row) || row.length < 5) {
|
|
@@ -66,6 +55,41 @@ const NESTED_BAR_KEYS = [
|
|
|
66
55
|
'klines',
|
|
67
56
|
'candlesticks',
|
|
68
57
|
];
|
|
58
|
+
const MAX_OHLCV_WRAPPER_DEPTH = 6;
|
|
59
|
+
function extractOhlcvBarsFromRecord(record, options, depth) {
|
|
60
|
+
if (depth > MAX_OHLCV_WRAPPER_DEPTH) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const fromMarketChart = extractMarketChartBars(record, options);
|
|
64
|
+
if (fromMarketChart?.length) {
|
|
65
|
+
return fromMarketChart;
|
|
66
|
+
}
|
|
67
|
+
for (const key of NESTED_BAR_KEYS) {
|
|
68
|
+
if (!(key in record)) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const nested = extractOhlcvBarsFromUnknown(record[key], options, depth + 1);
|
|
72
|
+
if (nested?.length) {
|
|
73
|
+
return nested;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
for (const value of Object.values(record)) {
|
|
77
|
+
if (Array.isArray(value)) {
|
|
78
|
+
const direct = barArrayFromParsed(value);
|
|
79
|
+
if (direct?.length) {
|
|
80
|
+
return direct;
|
|
81
|
+
}
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (value && typeof value === 'object') {
|
|
85
|
+
const nested = extractOhlcvBarsFromRecord(value, options, depth + 1);
|
|
86
|
+
if (nested?.length) {
|
|
87
|
+
return nested;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
69
93
|
function looksLikePriceVolumePoint(row) {
|
|
70
94
|
return Array.isArray(row) && row.length >= 2 && coerceFiniteNumber(row[1]) != null;
|
|
71
95
|
}
|
|
@@ -108,7 +132,7 @@ export function barRowsHaveVolume(rows) {
|
|
|
108
132
|
* Accepts bar objects, OHLC tuples, `{ result: [...] }`, spot `{ prices, total_volumes }` (marketChart),
|
|
109
133
|
* stringified JSON, or common API wrappers.
|
|
110
134
|
*/
|
|
111
|
-
export function extractOhlcvBarsFromUnknown(payload, options = {}) {
|
|
135
|
+
export function extractOhlcvBarsFromUnknown(payload, options = {}, depth = 0) {
|
|
112
136
|
const parsed = parseJsonIfString(payload);
|
|
113
137
|
const direct = barArrayFromParsed(parsed);
|
|
114
138
|
if (direct) {
|
|
@@ -117,27 +141,6 @@ export function extractOhlcvBarsFromUnknown(payload, options = {}) {
|
|
|
117
141
|
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
118
142
|
return null;
|
|
119
143
|
}
|
|
120
|
-
|
|
121
|
-
const fromMarketChart = extractMarketChartBars(record, options);
|
|
122
|
-
if (fromMarketChart?.length) {
|
|
123
|
-
return fromMarketChart;
|
|
124
|
-
}
|
|
125
|
-
for (const key of NESTED_BAR_KEYS) {
|
|
126
|
-
if (!(key in record)) {
|
|
127
|
-
continue;
|
|
128
|
-
}
|
|
129
|
-
const child = record[key];
|
|
130
|
-
if (child && typeof child === 'object' && !Array.isArray(child)) {
|
|
131
|
-
const fromNestedMarketChart = extractMarketChartBars(child, options);
|
|
132
|
-
if (fromNestedMarketChart?.length) {
|
|
133
|
-
return fromNestedMarketChart;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
const nested = extractOhlcvBarsFromUnknown(child, options);
|
|
137
|
-
if (nested?.length) {
|
|
138
|
-
return nested;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
return null;
|
|
144
|
+
return extractOhlcvBarsFromRecord(parsed, options, depth);
|
|
142
145
|
}
|
|
143
146
|
//# sourceMappingURL=fetch-result.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-result.js","sourceRoot":"","sources":["../../../src/core/chart/fetch-result.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAE9F,OAAO,EACN,mCAAmC,GAEnC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAC,kBAAkB,EAAE,eAAe,EAAC,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"fetch-result.js","sourceRoot":"","sources":["../../../src/core/chart/fetch-result.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { prepareChartCore, isChartV1Payload } from './prepare-core.js';
|
|
2
2
|
export { prepareChart } from './prepare.js';
|
|
3
3
|
export { prepareChartFromRows, PrepareChartFromRowsInputSchema } from './prepare-from-rows.js';
|
|
4
|
+
export { extractChartMetadataFromFetchPayload } from './fetch-metadata.js';
|
|
4
5
|
export { barRowsHaveVolume, extractOhlcvBarsFromUnknown, looksLikeOhlcvBar, type ExtractOhlcvBarsOptions, } from './fetch-result.js';
|
|
5
6
|
export { DEFAULT_CHART_EMA_PERIOD, DEFAULT_CHART_RSI_PERIOD, buildDefaultCandlestickOverlays, ensureVolumeHistogramSeries, } from './chart-defaults.js';
|
|
6
7
|
export { expandChartOverlays } from './overlays.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,oBAAoB,EAAE,+BAA+B,EAAC,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EACN,iBAAiB,EACjB,2BAA2B,EAC3B,iBAAiB,EACjB,KAAK,uBAAuB,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,wBAAwB,EACxB,wBAAwB,EACxB,+BAA+B,EAC/B,2BAA2B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,EACb,KAAK,kBAAkB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,wBAAwB,EAAE,iBAAiB,EAAE,KAAK,QAAQ,EAAE,KAAK,+BAA+B,EAAC,MAAM,YAAY,CAAC;AAC5H,OAAO,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACN,mCAAmC,EACnC,KAAK,aAAa,EAClB,KAAK,oCAAoC,GACzC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,SAAS,GACd,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,oBAAoB,EAAE,+BAA+B,EAAC,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAC,oCAAoC,EAAC,MAAM,qBAAqB,CAAC;AACzE,OAAO,EACN,iBAAiB,EACjB,2BAA2B,EAC3B,iBAAiB,EACjB,KAAK,uBAAuB,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,wBAAwB,EACxB,wBAAwB,EACxB,+BAA+B,EAC/B,2BAA2B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,EACb,KAAK,kBAAkB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,wBAAwB,EAAE,iBAAiB,EAAE,KAAK,QAAQ,EAAE,KAAK,+BAA+B,EAAC,MAAM,YAAY,CAAC;AAC5H,OAAO,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACN,mCAAmC,EACnC,KAAK,aAAa,EAClB,KAAK,oCAAoC,GACzC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,SAAS,GACd,MAAM,cAAc,CAAC"}
|
package/dist/core/chart/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { prepareChartCore, isChartV1Payload } from './prepare-core.js';
|
|
2
2
|
export { prepareChart } from './prepare.js';
|
|
3
3
|
export { prepareChartFromRows, PrepareChartFromRowsInputSchema } from './prepare-from-rows.js';
|
|
4
|
+
export { extractChartMetadataFromFetchPayload } from './fetch-metadata.js';
|
|
4
5
|
export { barRowsHaveVolume, extractOhlcvBarsFromUnknown, looksLikeOhlcvBar, } from './fetch-result.js';
|
|
5
6
|
export { DEFAULT_CHART_EMA_PERIOD, DEFAULT_CHART_RSI_PERIOD, buildDefaultCandlestickOverlays, ensureVolumeHistogramSeries, } from './chart-defaults.js';
|
|
6
7
|
export { expandChartOverlays } from './overlays.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,oBAAoB,EAAE,+BAA+B,EAAC,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EACN,iBAAiB,EACjB,2BAA2B,EAC3B,iBAAiB,GAEjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,wBAAwB,EACxB,wBAAwB,EACxB,+BAA+B,EAC/B,2BAA2B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,GAEb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,wBAAwB,EAAE,iBAAiB,EAAsD,MAAM,YAAY,CAAC;AAC5H,OAAO,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACN,mCAAmC,GAGnC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,GAMpB,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,oBAAoB,EAAE,+BAA+B,EAAC,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAC,oCAAoC,EAAC,MAAM,qBAAqB,CAAC;AACzE,OAAO,EACN,iBAAiB,EACjB,2BAA2B,EAC3B,iBAAiB,GAEjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACN,wBAAwB,EACxB,wBAAwB,EACxB,+BAA+B,EAC/B,2BAA2B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,GAEb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,wBAAwB,EAAE,iBAAiB,EAAsD,MAAM,YAAY,CAAC;AAC5H,OAAO,EAAC,sBAAsB,EAAC,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AACrD,OAAO,EACN,mCAAmC,GAGnC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,GAMpB,MAAM,cAAc,CAAC"}
|
|
@@ -4,7 +4,7 @@ import type { PrepareChartOutput } from './schemas.js';
|
|
|
4
4
|
export declare const PrepareChartFromRowsInputSchema: z.ZodPreprocess<z.ZodObject<{
|
|
5
5
|
rows: z.ZodOptional<z.ZodArray<z.ZodUnknown>>;
|
|
6
6
|
toolResult: z.ZodOptional<z.ZodUnknown>;
|
|
7
|
-
title: z.
|
|
7
|
+
title: z.ZodString;
|
|
8
8
|
label: z.ZodOptional<z.ZodString>;
|
|
9
9
|
height: z.ZodOptional<z.ZodNumber>;
|
|
10
10
|
options: z.ZodOptional<z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare-from-rows.d.ts","sourceRoot":"","sources":["../../../src/core/chart/prepare-from-rows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"prepare-from-rows.d.ts","sourceRoot":"","sources":["../../../src/core/chart/prepare-from-rows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAI5C,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,cAAc,CAAC;AA0FrD,eAAO,MAAM,+BAA+B;;;;;;;;;;;;mBAG3C,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAA2B,CAAC;AAEzE,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,yBAAyB,GAC9B,SAAS,CAAC,kBAAkB,CAAC,CAmE/B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { extractChartMetadataFromFetchPayload } from './fetch-metadata.js';
|
|
2
3
|
import { extractOhlcvBarsFromUnknown, barRowsHaveVolume, parseJsonIfString } from './fetch-result.js';
|
|
3
4
|
import { prepareChart } from './prepare.js';
|
|
4
5
|
import { PrepareChartInputSchema, PrepareChartOutputSchema } from './schemas.js';
|
|
@@ -12,6 +13,26 @@ const PrepareChartFromRowsOptionsSchema = z
|
|
|
12
13
|
})
|
|
13
14
|
.strict()
|
|
14
15
|
.optional();
|
|
16
|
+
function applyFetchMetadata(input) {
|
|
17
|
+
const sources = [
|
|
18
|
+
input.toolResult,
|
|
19
|
+
input.executeResult,
|
|
20
|
+
input.fetchResult,
|
|
21
|
+
input.result,
|
|
22
|
+
].filter(v => v != null);
|
|
23
|
+
for (const source of sources) {
|
|
24
|
+
const meta = extractChartMetadataFromFetchPayload(source);
|
|
25
|
+
if (!input.title && meta.title) {
|
|
26
|
+
input.title = meta.title;
|
|
27
|
+
}
|
|
28
|
+
if (!input.label && meta.label) {
|
|
29
|
+
input.label = meta.label;
|
|
30
|
+
}
|
|
31
|
+
if (input.title && input.label) {
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
15
36
|
function preprocessPrepareChartFromRowsInput(raw) {
|
|
16
37
|
if (!raw || typeof raw !== 'object') {
|
|
17
38
|
return raw;
|
|
@@ -26,16 +47,27 @@ function preprocessPrepareChartFromRowsInput(raw) {
|
|
|
26
47
|
input.rows = rows;
|
|
27
48
|
}
|
|
28
49
|
}
|
|
50
|
+
if ('options' in input &&
|
|
51
|
+
input.options &&
|
|
52
|
+
typeof input.options === 'object' &&
|
|
53
|
+
!Array.isArray(input.options)) {
|
|
54
|
+
const options = { ...input.options };
|
|
55
|
+
const hasRows = Array.isArray(input.rows) && input.rows.length > 0;
|
|
56
|
+
if (hasRows && 'bucketSec' in options) {
|
|
57
|
+
delete options.bucketSec;
|
|
58
|
+
}
|
|
59
|
+
input.options = options;
|
|
60
|
+
}
|
|
61
|
+
applyFetchMetadata(input);
|
|
29
62
|
return input;
|
|
30
63
|
}
|
|
31
64
|
const PrepareChartFromRowsInputInnerSchema = z
|
|
32
65
|
.object({
|
|
33
|
-
/** OHLCV rows from any fetch tool (preferred). */
|
|
34
66
|
rows: z.array(z.unknown()).min(1).optional(),
|
|
35
|
-
/** Full JSON from a prior MCP tool call; bars are extracted automatically. */
|
|
36
67
|
toolResult: z.unknown().optional(),
|
|
37
|
-
|
|
38
|
-
|
|
68
|
+
/** Required — must describe the fetched series (asset, interval, window), not the user chat verbatim. */
|
|
69
|
+
title: z.string().trim().min(1).max(256),
|
|
70
|
+
label: z.string().trim().min(1).max(128).optional(),
|
|
39
71
|
height: z.number().int().min(120).max(800).optional(),
|
|
40
72
|
options: PrepareChartFromRowsOptionsSchema,
|
|
41
73
|
})
|
|
@@ -78,9 +110,11 @@ export function prepareChartFromRows(input) {
|
|
|
78
110
|
reason: 'No OHLCV bars found. Pass `rows` from your fetch tool or `toolResult` (e.g. `{ result: [...] }`, `{ prices, total_volumes }`, or `{ ohlcv: { candles: [...] } }`).',
|
|
79
111
|
};
|
|
80
112
|
}
|
|
113
|
+
const title = data.title.trim();
|
|
114
|
+
const label = data.label?.trim() || title;
|
|
81
115
|
const prepareInput = PrepareChartInputSchema.parse({
|
|
82
|
-
|
|
83
|
-
|
|
116
|
+
title,
|
|
117
|
+
label,
|
|
84
118
|
...(data.height != null ? { height: data.height } : {}),
|
|
85
119
|
bars,
|
|
86
120
|
options: {
|
|
@@ -92,18 +126,18 @@ export function prepareChartFromRows(input) {
|
|
|
92
126
|
if (!chartResult.ok) {
|
|
93
127
|
return chartResult;
|
|
94
128
|
}
|
|
95
|
-
|
|
129
|
+
const warnings = [];
|
|
130
|
+
if (!barRowsHaveVolume(bars)) {
|
|
131
|
+
warnings.push('No volume in OHLCV rows — volume pane omitted. For CoinGecko spot charts use `coins.marketChart.get` (prices + total_volumes), not `coins.ohlc.get`.');
|
|
132
|
+
}
|
|
133
|
+
if (warnings.length === 0) {
|
|
96
134
|
return chartResult;
|
|
97
135
|
}
|
|
98
136
|
return {
|
|
99
137
|
ok: true,
|
|
100
138
|
data: {
|
|
101
139
|
...chartResult.data,
|
|
102
|
-
meta: {
|
|
103
|
-
warnings: [
|
|
104
|
-
'No volume in OHLCV rows — volume pane omitted. For CoinGecko spot charts use `coins.marketChart.get` (prices + total_volumes), not `coins.ohlc.get`.',
|
|
105
|
-
],
|
|
106
|
-
},
|
|
140
|
+
meta: { warnings },
|
|
107
141
|
},
|
|
108
142
|
};
|
|
109
143
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare-from-rows.js","sourceRoot":"","sources":["../../../src/core/chart/prepare-from-rows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,2BAA2B,EAAE,iBAAiB,EAAE,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AACpG,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAC,uBAAuB,EAAE,wBAAwB,EAAC,MAAM,cAAc,CAAC;AAE/E,MAAM,iCAAiC,GAAG,CAAC;KACzC,MAAM,CAAC;IACP,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IACxD,uGAAuG;IACvG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9D,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC3C,sBAAsB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC9C,CAAC;KACD,MAAM,EAAE;KACR,QAAQ,EAAE,CAAC;AAEb,SAAS,mCAAmC,CAAC,GAAY;IACxD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrC,OAAO,GAAG,CAAC;IACZ,CAAC;IACD,MAAM,KAAK,GAAG,EAAC,GAAI,GAA+B,EAAC,CAAC;IACpD,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;QAC3B,KAAK,CAAC,UAAU,GAAG,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,oCAAoC,GAAG,CAAC;KAC5C,MAAM,CAAC;IACP,
|
|
1
|
+
{"version":3,"file":"prepare-from-rows.js","sourceRoot":"","sources":["../../../src/core/chart/prepare-from-rows.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/chart.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../src/mcp/chart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAiCvE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../src/mcp/chart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAiCvE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6B1D"}
|
package/dist/mcp/chart.js
CHANGED
|
@@ -21,10 +21,9 @@ export function registerChartTools(server) {
|
|
|
21
21
|
server.registerTool(camelToSnake('prepareChartFromRows'), {
|
|
22
22
|
description: 'Build a continuum/chart/v1 payload from OHLCV rows returned by any price fetch tool ' +
|
|
23
23
|
'(CoinGecko execute, ctm_*_fetch_ohlcv, exchange APIs, etc.). ' +
|
|
24
|
-
'REQUIRED:
|
|
25
|
-
'
|
|
26
|
-
'Never
|
|
27
|
-
'Adds default EMA(50), RSI(14), and volume pane when rows include volume.',
|
|
24
|
+
'REQUIRED: `title` (what you fetched — asset, interval, window) plus `rows` OR `toolResult`. ' +
|
|
25
|
+
'Fetch may return `{ title, label, result }`; chart metadata must match the data, not the user chat. ' +
|
|
26
|
+
'Never `{}`. Adds default EMA(50), RSI(14), and volume pane when rows include volume.',
|
|
28
27
|
inputSchema: PrepareChartFromRowsInputSchema,
|
|
29
28
|
outputSchema: PrepareChartFromRowsOutputSchema,
|
|
30
29
|
}, async (input) => chartToolResult(prepareChartFromRows(input)));
|
package/dist/mcp/chart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart.js","sourceRoot":"","sources":["../../src/mcp/chart.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AACtD,OAAO,EACN,+BAA+B,EAC/B,gCAAgC,EAChC,oBAAoB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACN,uBAAuB,EACvB,wBAAwB,GACxB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAC,YAAY,EAAE,yBAAyB,EAAC,MAAM,iBAAiB,CAAC;AAExE,SAAS,eAAe,CACvB,MAAoB;IAEpB,MAAM,UAAU,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACvD,OAAO,UAAU,CAAC;IACnB,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,KAAK,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO;YACN,GAAG,UAAU;YACb,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,KAAK,KAAK,CAAC,IAAI,EAAE,EAAC,CAAC;SAChE,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CAClB,YAAY,CAAC,sBAAsB,CAAC,EACpC;QACC,WAAW,EACV,sFAAsF;YACtF,+DAA+D;YAC/D,
|
|
1
|
+
{"version":3,"file":"chart.js","sourceRoot":"","sources":["../../src/mcp/chart.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AACtD,OAAO,EACN,+BAA+B,EAC/B,gCAAgC,EAChC,oBAAoB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACN,uBAAuB,EACvB,wBAAwB,GACxB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAC,YAAY,EAAE,yBAAyB,EAAC,MAAM,iBAAiB,CAAC;AAExE,SAAS,eAAe,CACvB,MAAoB;IAEpB,MAAM,UAAU,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACvD,OAAO,UAAU,CAAC;IACnB,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,KAAK,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO;YACN,GAAG,UAAU;YACb,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,WAAW,KAAK,KAAK,CAAC,IAAI,EAAE,EAAC,CAAC;SAChE,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CAClB,YAAY,CAAC,sBAAsB,CAAC,EACpC;QACC,WAAW,EACV,sFAAsF;YACtF,+DAA+D;YAC/D,8FAA8F;YAC9F,sGAAsG;YACtG,sFAAsF;QACvF,WAAW,EAAE,+BAA+B;QAC5C,YAAY,EAAE,gCAAgC;KAC9C,EACD,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAC7D,CAAC;IAEF,MAAM,CAAC,YAAY,CAClB,YAAY,CAAC,cAAc,CAAC,EAC5B;QACC,WAAW,EACV,2GAA2G;YAC3G,6FAA6F;YAC7F,yDAAyD;YACzD,yFAAyF;QAC1F,WAAW,EAAE,uBAAuB;QACpC,YAAY,EAAE,wBAAwB;KACtC,EACD,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAC/D,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/mcp/defi/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAQvE,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/mcp/defi/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAQvE,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,cAAc,CAAC;AAsBtD,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,mBAAmB,GAC9B,IAAI,CAsRN"}
|
|
@@ -3,6 +3,7 @@ import { getProtocolModules } from '@continuumdao/ctm-mpc-defi/agent';
|
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { resolveChainRegistryEntry } from '../../core/registry/networks.js';
|
|
5
5
|
import { markProtocolLoaded } from './register-protocol-tools.js';
|
|
6
|
+
import { defiOhlcvChartWorkflowReminder, defiProtocolFetchOhlcvToolName, } from './ohlcv-chart-workflow.js';
|
|
6
7
|
import { isUniswapApiKeyConfigured, UNISWAP_API_KEY_ENV, UNISWAP_API_KEY_SIGNUP_URL, } from './uniswap-api-key.js';
|
|
7
8
|
const protocolIdSchema = z.object({
|
|
8
9
|
protocolId: z.string().min(1),
|
|
@@ -52,6 +53,7 @@ export function registerDefiDiscoveryTools(server, config, defiContext) {
|
|
|
52
53
|
advisoryTools: z.array(z.string()),
|
|
53
54
|
skillPreview: z.string().optional(),
|
|
54
55
|
skillHint: z.string().optional(),
|
|
56
|
+
chartWorkflow: z.string().optional(),
|
|
55
57
|
uniswapApiKeyConfigured: z.boolean().optional(),
|
|
56
58
|
uniswapApiKeyEnvVar: z.string().optional(),
|
|
57
59
|
uniswapApiKeySignupUrl: z.string().optional(),
|
|
@@ -72,13 +74,17 @@ export function registerDefiDiscoveryTools(server, config, defiContext) {
|
|
|
72
74
|
uniswapApiKeySignupUrl: UNISWAP_API_KEY_SIGNUP_URL,
|
|
73
75
|
}
|
|
74
76
|
: {};
|
|
75
|
-
|
|
77
|
+
const fetchOhlcvTool = defiProtocolFetchOhlcvToolName(protocolId);
|
|
78
|
+
const chartWorkflow = fetchOhlcvTool
|
|
79
|
+
? defiOhlcvChartWorkflowReminder(protocolId, fetchOhlcvTool)
|
|
80
|
+
: undefined;
|
|
81
|
+
const buildPayload = (toolNames) => {
|
|
76
82
|
const advisor = getProtocolSupportAdvisor(protocolId);
|
|
77
83
|
const skill = getProtocolSkill(protocolId);
|
|
78
|
-
|
|
84
|
+
return {
|
|
79
85
|
loaded: true,
|
|
80
86
|
protocolId,
|
|
81
|
-
toolNames
|
|
87
|
+
toolNames,
|
|
82
88
|
tokenFilter: advisor?.tokenFilter,
|
|
83
89
|
advisoryTools: [
|
|
84
90
|
'get_defi_protocol_supported_chains',
|
|
@@ -89,32 +95,19 @@ export function registerDefiDiscoveryTools(server, config, defiContext) {
|
|
|
89
95
|
skillHint: skill
|
|
90
96
|
? 'Call get_defi_protocol_skill for full SKILL.md workflow guidance.'
|
|
91
97
|
: undefined,
|
|
98
|
+
...(chartWorkflow ? { chartWorkflow } : {}),
|
|
92
99
|
...uniswapExtras,
|
|
93
100
|
};
|
|
101
|
+
};
|
|
102
|
+
if (defiContext.isLoaded(protocolId)) {
|
|
103
|
+
const payload = buildPayload(defiContext.getToolNames(protocolId));
|
|
94
104
|
return {
|
|
95
105
|
content: [{ type: 'text', text: JSON.stringify(payload) }],
|
|
96
106
|
structuredContent: payload,
|
|
97
107
|
};
|
|
98
108
|
}
|
|
99
109
|
const toolNames = markProtocolLoaded(defiContext, protocolId);
|
|
100
|
-
const
|
|
101
|
-
const skill = getProtocolSkill(protocolId);
|
|
102
|
-
const payload = {
|
|
103
|
-
loaded: true,
|
|
104
|
-
protocolId,
|
|
105
|
-
toolNames,
|
|
106
|
-
tokenFilter: advisor?.tokenFilter,
|
|
107
|
-
advisoryTools: [
|
|
108
|
-
'get_defi_protocol_supported_chains',
|
|
109
|
-
'get_defi_protocol_supported_tokens',
|
|
110
|
-
'get_defi_protocol_skill',
|
|
111
|
-
],
|
|
112
|
-
skillPreview: skill?.slice(0, 500),
|
|
113
|
-
skillHint: skill
|
|
114
|
-
? 'Call get_defi_protocol_skill for full SKILL.md workflow guidance.'
|
|
115
|
-
: undefined,
|
|
116
|
-
...uniswapExtras,
|
|
117
|
-
};
|
|
110
|
+
const payload = buildPayload(toolNames);
|
|
118
111
|
void server.server.sendToolListChanged?.().catch(() => undefined);
|
|
119
112
|
return {
|
|
120
113
|
content: [{ type: 'text', text: JSON.stringify(payload) }],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/mcp/defi/discovery.ts"],"names":[],"mappings":"AACA,OAAO,EACN,gBAAgB,EAChB,yBAAyB,EACzB,mBAAmB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,kBAAkB,EAAC,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAC,yBAAyB,EAAC,MAAM,iCAAiC,CAAC;AAE1E,OAAO,EAAC,kBAAkB,EAAC,MAAM,8BAA8B,CAAC;AAChE,OAAO,EACN,yBAAyB,EACzB,mBAAmB,EACnB,0BAA0B,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC7B,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACpC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7B,CAAC,CAAC;AAEH,MAAM,UAAU,0BAA0B,CACzC,MAAiB,EACjB,MAAqB,EACrB,WAAgC;IAEhC,MAAM,CAAC,YAAY,CAClB,qBAAqB,EACrB;QACC,WAAW,EACV,kFAAkF;QACnF,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE;QAClC,YAAY,EAAE,CAAC;aACb,MAAM,CAAC;YACP,SAAS,EAAE,CAAC,CAAC,KAAK,CACjB,CAAC,CAAC,MAAM,CAAC;gBACR,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;gBACtB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;gBACzB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;gBACnB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;gBACvB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;aACrB,CAAC,CACF;SACD,CAAC;aACD,MAAM,EAAE;KACV,EACD,KAAK,IAAI,EAAE;QACV,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAChD,UAAU,EAAE,CAAC,CAAC,EAAE;YAChB,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAClC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM;YAC7B,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM;SAC3C,CAAC,CAAC,CAAC;QACJ,OAAO;YACN,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,CAAC;YACrE,iBAAiB,EAAE,EAAC,SAAS,EAAC;SAC9B,CAAC;IACH,CAAC,CACD,CAAC;IAEF,MAAM,CAAC,YAAY,CAClB,oBAAoB,EACpB;QACC,WAAW,EACV,iPAAiP;QAClP,WAAW,EAAE,gBAAgB;QAC7B,YAAY,EAAE,CAAC;aACb,MAAM,CAAC;YACP,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;YACnB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;YACtB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAChC,uBAAuB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YAC/C,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC1C,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAC7C,CAAC;aACD,MAAM,EAAE;KACV,EACD,KAAK,EAAE,EAAC,UAAU,EAAC,EAAE,EAAE;QACtB,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QAChE,IAAI,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;gBACN,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,qBAAqB,UAAU,EAAE,EAAC,CAAC;gBAC3E,OAAO,EAAE,IAAI;aACb,CAAC;QACH,CAAC;QACD,MAAM,aAAa,GAClB,UAAU,KAAK,YAAY;YAC1B,CAAC,CAAC;gBACA,uBAAuB,EAAE,MAAM,yBAAyB,CAAC,MAAM,CAAC;gBAChE,mBAAmB,EAAE,mBAAmB;gBACxC,sBAAsB,EAAE,0BAA0B;aAClD;YACF,CAAC,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/mcp/defi/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** First fetch_ohlcv tool for a protocol, if any. */
|
|
2
|
+
export declare function defiProtocolFetchOhlcvToolName(protocolId: string): string | undefined;
|
|
3
|
+
/** Injected on load_defi_protocol so dynamic protocol load carries chart rules in the same tool result. */
|
|
4
|
+
export declare function defiOhlcvChartWorkflowReminder(protocolId: string, fetchTool: string): string;
|
|
5
|
+
//# sourceMappingURL=ohlcv-chart-workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ohlcv-chart-workflow.d.ts","sourceRoot":"","sources":["../../../src/mcp/defi/ohlcv-chart-workflow.ts"],"names":[],"mappings":"AAEA,qDAAqD;AACrD,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAErF;AAED,2GAA2G;AAC3G,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQ5F"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { getToolsForProtocol } from './catalog-adapter.js';
|
|
2
|
+
/** First fetch_ohlcv tool for a protocol, if any. */
|
|
3
|
+
export function defiProtocolFetchOhlcvToolName(protocolId) {
|
|
4
|
+
return getToolsForProtocol(protocolId).find(t => t.name.includes('fetch_ohlcv'))?.name;
|
|
5
|
+
}
|
|
6
|
+
/** Injected on load_defi_protocol so dynamic protocol load carries chart rules in the same tool result. */
|
|
7
|
+
export function defiOhlcvChartWorkflowReminder(protocolId, fetchTool) {
|
|
8
|
+
return [
|
|
9
|
+
`Charting ${protocolId} OHLCV (required when the operator asks to chart/graph/plot):`,
|
|
10
|
+
`1. Call ${fetchTool} for candle rows.`,
|
|
11
|
+
'2. Same agent turn — call continuum__prepare_chart_from_rows with the full fetch JSON as toolResult and a descriptive title (asset + interval + window).',
|
|
12
|
+
'Fetching candles does not render a chart. The UI only draws continuum/chart/v1 from the prepare_chart_from_rows MCP result — not assistant markdown.',
|
|
13
|
+
'Also see node skills chart-defaults and chart-periods (initialLoad). Full protocol detail: get_defi_protocol_skill.',
|
|
14
|
+
].join('\n');
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ohlcv-chart-workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ohlcv-chart-workflow.js","sourceRoot":"","sources":["../../../src/mcp/defi/ohlcv-chart-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,sBAAsB,CAAC;AAEzD,qDAAqD;AACrD,MAAM,UAAU,8BAA8B,CAAC,UAAkB;IAChE,OAAO,mBAAmB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC;AACxF,CAAC;AAED,2GAA2G;AAC3G,MAAM,UAAU,8BAA8B,CAAC,UAAkB,EAAE,SAAiB;IACnF,OAAO;QACN,YAAY,UAAU,+DAA+D;QACrF,WAAW,SAAS,mBAAmB;QACvC,0JAA0J;QAC1J,sJAAsJ;QACtJ,qHAAqH;KACrH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC"}
|
|
@@ -20,13 +20,30 @@ Each object in **`series[].data`** is normalized before charting. **`prepare_cha
|
|
|
20
20
|
|--------|------------|---------------------|
|
|
21
21
|
| CoinGecko / agent | `time` (Unix **seconds**) | numbers |
|
|
22
22
|
| Hyperliquid `fetch_ohlcv` | `timestampMs` | strings → coerced |
|
|
23
|
-
| GMX `fetch_ohlcv` | `timestampMs` | strings (no volume on row) |
|
|
23
|
+
| GMX `fetch_ohlcv` | `timestampMs` | strings (no volume on row); top-level `{ symbol, timeframe, candles }` |
|
|
24
24
|
| Binance `get_klines` (JSON) | `openTime` (ms) | strings → coerced |
|
|
25
25
|
| Bybit `getMarketKline` | tuple `[startTime, …]` or `{ startTime, open, … }` | strings → coerced |
|
|
26
26
|
| Bitget REST / MCP | tuple `[ts, o,h,l,c,vol,…]` or `{ timestamp, … }` | strings → coerced |
|
|
27
27
|
| CoinMarketCap OHLCV API | `{ time_open, quote: { USD: { … } } }` | numbers; nested `quote` flattened |
|
|
28
28
|
| Uniswap subgraph (`PoolHourData` / `PoolDayData`) | `periodStartUnix` | `open`/`high`/`low`/`close`, optional `volumeUSD` |
|
|
29
29
|
|
|
30
|
+
### Generic OHLCV engine (adding a new source)
|
|
31
|
+
|
|
32
|
+
SDK charting is **vendor-agnostic** after fetch:
|
|
33
|
+
|
|
34
|
+
1. **`extractOhlcvBarsFromUnknown`** — pulls a bar array from any MCP/tool JSON (nested wrappers, stringified JSON, `{ prices, total_volumes }` spot series). Walks unknown wrapper keys up to depth 6; prefers known keys (`result`, `candles`, `ohlcv`, `klines`, …).
|
|
35
|
+
2. **`normalizeCandleRow`** (`point-normalize.ts`) — single source of truth per bar: time fields (`time`, `timestampMs`, `timestamp`, `openTime`, `t`, `periodStartUnix`, …), OHLC aliases (`o`/`h`/`l`/`c`, `price_*`), nested CMC `quote.USD`, numeric strings → numbers, ms → sec.
|
|
36
|
+
3. **`prepare_chart_from_rows`** / **`prepareChart`** — sort, dedupe, trim, optional volume histogram (only when volume present), default EMA/RSI overlays.
|
|
37
|
+
|
|
38
|
+
**Volume optional:** rows without `volume` / `v` / tuple index 5 chart as **candles only** (warning in `meta.warnings`; volume pane omitted). GMX is an example.
|
|
39
|
+
|
|
40
|
+
**New fetch tool checklist:**
|
|
41
|
+
|
|
42
|
+
- Return bars as an array of objects or OHLC tuples, anywhere in the JSON tree (or add a known wrapper key to `NESTED_BAR_KEYS` in `fetch-result.ts` if you want it prioritized).
|
|
43
|
+
- Prefer `{ title, label, …bars… }` on the fetch payload for chart titles; otherwise `extractChartMetadataFromFetchPayload` infers from common DeFi shapes.
|
|
44
|
+
- Add one **`extractOhlcvBarsFromUnknown` + `prepareChartFromRows`** test with a sample row from your API.
|
|
45
|
+
- Optional: extend **`mapOhlcFieldAliases`** / **`flattenVendorCandleRow`** in `point-normalize.ts` only when the row shape is genuinely new (not covered by existing time/OHLC fields).
|
|
46
|
+
|
|
30
47
|
- **`ctm_uniswap_v4_*`** MCP tools do **not** return candles — only quotes, swaps, and LP. Pool OHLCV comes from a **subgraph** or third-party indexer; map `poolHourDatas` into **`series[0].data`**.
|
|
31
48
|
- Times in **milliseconds** (>1e12) are converted to **seconds** automatically.
|
|
32
49
|
- **`open` / `high` / `low` / `close` / `volume`** may be numbers or numeric strings.
|
|
@@ -261,7 +278,11 @@ First bar: close ≥ open → green volume. Second: close < open → red volume.
|
|
|
261
278
|
- **`priceScaleId`**: `"left"` | `"right"` — use different scales for unlike units.
|
|
262
279
|
- **`overlay`**: `true` — draw line/area on the main price pane.
|
|
263
280
|
|
|
264
|
-
When the user asks to graph, plot, or chart data, call **`prepare_chart`** after assembling series — do not rely on markdown tables alone.
|
|
281
|
+
When the user asks to graph, plot, or chart data, call **`prepare_chart_from_rows`** (or **`prepare_chart`**) after assembling series — do not rely on markdown tables alone.
|
|
282
|
+
|
|
283
|
+
**Where charts appear:** the node app renders charts under the **MCP result** row for `prepare_chart` / `prepare_chart_from_rows`, not inside the assistant text bubble. A prose reply like “chart prepared” without a successful chart tool result means nothing was rendered.
|
|
284
|
+
|
|
285
|
+
**Hyperliquid / DeFi `fetch_ohlcv`:** returns `{ ohlcv: { coin, interval, candles: [...] } }`. After `fetch_ohlcv`, call `prepare_chart_from_rows` with the **full fetch JSON** as `toolResult` and a descriptive `title`. The node auto-binds the last OHLCV fetch when `prepare_chart_from_rows` is called with only a title.
|
|
265
286
|
|
|
266
287
|
## KeyGen orchestration (sub-agents)
|
|
267
288
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@continuumdao/continuum-node-sdk",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.21",
|
|
4
4
|
"description": "JSON SDK for the Continuum node client management API",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"homepage": "https://github.com/ContinuumDAO/continuum-node-sdk#readme",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"sync-vendor-defi": "bash scripts/sync-vendor-defi.sh"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@continuumdao/ctm-mpc-defi": "^0.2.
|
|
43
|
+
"@continuumdao/ctm-mpc-defi": "^0.2.18",
|
|
44
44
|
"@curvefi/api": "^2.69.2",
|
|
45
45
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
46
46
|
"express": "^5.2.1",
|