@missionsquad/mcp-defillama 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,241 @@
1
+ /**
2
+ * Response transforms that make DefiLlama payloads small and model-friendly.
3
+ *
4
+ * Two passes run on every response:
5
+ * 1. compaction — trim noisy fields, cap list lengths, downsample series.
6
+ * 2. humanizeDates — render UNIX date/timestamp fields as UTC datetime strings.
7
+ *
8
+ * Compaction is opt-out: pass `full: true` to get the untouched response.
9
+ */
10
+ import { formatUnixToDateTime } from "./datetime.js";
11
+ const DEFAULT_POINTS = 30;
12
+ // ---------------------------------------------------------------------------
13
+ // Generic helpers
14
+ // ---------------------------------------------------------------------------
15
+ const isObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
16
+ /** Evenly downsample an array to at most `max` items, always keeping the ends. */
17
+ export function downsample(arr, max) {
18
+ if (!Array.isArray(arr) || max <= 0 || arr.length <= max)
19
+ return arr;
20
+ if (max === 1)
21
+ return [arr[arr.length - 1]];
22
+ const result = [];
23
+ const step = (arr.length - 1) / (max - 1);
24
+ for (let i = 0; i < max; i++) {
25
+ result.push(arr[Math.round(i * step)]);
26
+ }
27
+ return result;
28
+ }
29
+ /** Keep only the listed keys that are actually present on an object. */
30
+ function pickFields(obj, fields) {
31
+ const out = {};
32
+ for (const key of fields) {
33
+ if (obj[key] !== undefined) {
34
+ out[key] = obj[key];
35
+ }
36
+ }
37
+ return out;
38
+ }
39
+ /** Downsample every array found anywhere in the structure (for chart payloads). */
40
+ function deepDownsample(value, max) {
41
+ if (Array.isArray(value)) {
42
+ return downsample(value, max).map(item => deepDownsample(item, max));
43
+ }
44
+ if (isObject(value)) {
45
+ const out = {};
46
+ for (const [k, v] of Object.entries(value)) {
47
+ out[k] = deepDownsample(v, max);
48
+ }
49
+ return out;
50
+ }
51
+ return value;
52
+ }
53
+ function trimList(arr, fields, limit, sortValue) {
54
+ let items = arr;
55
+ if (sortValue) {
56
+ items = [...arr].sort((a, b) => (sortValue(b) || 0) - (sortValue(a) || 0));
57
+ }
58
+ const sliced = items.slice(0, limit).map(item => (isObject(item) ? pickFields(item, fields) : item));
59
+ return { total: arr.length, returned: sliced.length, items: sliced };
60
+ }
61
+ /** Numeric magnitude of a stablecoin circulating object ({peggedUSD|peggedEUR|peggedVAR}). */
62
+ function circulatingValue(c) {
63
+ if (typeof c === "number")
64
+ return c;
65
+ if (isObject(c))
66
+ return Number(c.peggedUSD ?? c.peggedEUR ?? c.peggedVAR ?? 0) || 0;
67
+ return 0;
68
+ }
69
+ /** Reduce a chainTvls map (flat numbers OR historical {tvl:[...]}) to current per-chain numbers. */
70
+ function currentChainTvlMap(chainTvls) {
71
+ const out = {};
72
+ for (const [chain, v] of Object.entries(chainTvls)) {
73
+ if (typeof v === "number") {
74
+ out[chain] = v;
75
+ }
76
+ else if (isObject(v) && Array.isArray(v.tvl) && v.tvl.length) {
77
+ const last = v.tvl[v.tvl.length - 1];
78
+ const value = last?.totalLiquidityUSD ?? last?.tvl;
79
+ if (typeof value === "number")
80
+ out[chain] = value;
81
+ }
82
+ }
83
+ return out;
84
+ }
85
+ // ---------------------------------------------------------------------------
86
+ // Date humanizing
87
+ // ---------------------------------------------------------------------------
88
+ const DATE_KEYS = new Set(["date", "timestamp", "t", "startTime", "endTime"]);
89
+ // Plausible UNIX range (~2001 in seconds up to year ~5138 in seconds / ms).
90
+ const looksLikeUnix = (n) => Number.isFinite(n) && Math.abs(n) >= 1e9;
91
+ /** Recursively render date/timestamp fields as UTC datetime strings. */
92
+ export function humanizeDates(value) {
93
+ if (Array.isArray(value)) {
94
+ return value.map(humanizeDates);
95
+ }
96
+ if (isObject(value)) {
97
+ const out = {};
98
+ for (const [k, v] of Object.entries(value)) {
99
+ if (DATE_KEYS.has(k) && typeof v === "number" && looksLikeUnix(v)) {
100
+ out[k] = formatUnixToDateTime(v);
101
+ }
102
+ else {
103
+ out[k] = humanizeDates(v);
104
+ }
105
+ }
106
+ return out;
107
+ }
108
+ return value;
109
+ }
110
+ // ---------------------------------------------------------------------------
111
+ // Endpoint-specific compactors
112
+ // ---------------------------------------------------------------------------
113
+ const PROTOCOL_FIELDS = [
114
+ "name", "symbol", "category", "chain", "chains", "tvl",
115
+ "change_1h", "change_1d", "change_7d", "mcap",
116
+ ];
117
+ export function compactProtocols(data, opts = {}) {
118
+ if (opts.full || !Array.isArray(data))
119
+ return data;
120
+ const { total, returned, items } = trimList(data, PROTOCOL_FIELDS, opts.limit ?? 100, p => Number(p?.tvl) || 0);
121
+ return { total, returned, protocols: items };
122
+ }
123
+ export function compactProtocolTvl(data, opts = {}) {
124
+ if (opts.full || !isObject(data))
125
+ return data;
126
+ const points = opts.points ?? DEFAULT_POINTS;
127
+ const out = pickFields(data, [
128
+ "name", "symbol", "url", "category", "chains", "tvlPriceChange",
129
+ ]);
130
+ // Current per-chain TVL: prefer the API's `currentChainTvls`, otherwise derive
131
+ // it from `chainTvls` (which may be flat numbers or historical {tvl:[...]}).
132
+ if (isObject(data.currentChainTvls)) {
133
+ out.currentChainTvls = data.currentChainTvls;
134
+ }
135
+ else if (isObject(data.chainTvls)) {
136
+ const current = currentChainTvlMap(data.chainTvls);
137
+ if (Object.keys(current).length)
138
+ out.currentChainTvls = current;
139
+ }
140
+ // Aggregate TVL: the API may return `tvl` as a number or a historical series.
141
+ const series = Array.isArray(data.tvl) ? data.tvl
142
+ : Array.isArray(data.tvlList) ? data.tvlList
143
+ : undefined;
144
+ if (series) {
145
+ out.tvl = downsample(series, points);
146
+ }
147
+ else if (typeof data.tvl === "number") {
148
+ out.tvl = data.tvl;
149
+ }
150
+ if (opts.includeTokens) {
151
+ if (data.tokens !== undefined)
152
+ out.tokens = data.tokens;
153
+ if (Array.isArray(data.tokensInUsd))
154
+ out.tokensInUsd = downsample(data.tokensInUsd, points);
155
+ }
156
+ return out;
157
+ }
158
+ /** A plain time series (array of dated points), e.g. historical chain TVL. */
159
+ export function compactSeries(data, opts = {}) {
160
+ if (opts.full)
161
+ return data;
162
+ return deepDownsample(data, opts.points ?? DEFAULT_POINTS);
163
+ }
164
+ const CHAIN_FIELDS = ["name", "tvl", "tokenSymbol", "chainId", "gecko_id"];
165
+ export function compactChains(data, opts = {}) {
166
+ if (opts.full || !Array.isArray(data))
167
+ return data;
168
+ const { total, returned, items } = trimList(data, CHAIN_FIELDS, opts.limit ?? 200, c => Number(c?.tvl) || 0);
169
+ return { total, returned, chains: items };
170
+ }
171
+ const POOL_FIELDS = [
172
+ "pool", "chain", "project", "symbol", "tvlUsd",
173
+ "apy", "apyBase", "apyReward", "stablecoin", "ilRisk", "exposure",
174
+ ];
175
+ export function compactPools(data, opts = {}) {
176
+ if (opts.full)
177
+ return data;
178
+ // /pools returns { status, data: [...] }.
179
+ const pools = isObject(data) && Array.isArray(data.data) ? data.data : data;
180
+ if (!Array.isArray(pools))
181
+ return data;
182
+ const { total, returned, items } = trimList(pools, POOL_FIELDS, opts.limit ?? 50, p => Number(p?.tvlUsd) || 0);
183
+ return { total, returned, pools: items };
184
+ }
185
+ const STABLECOIN_FIELDS = ["id", "name", "symbol", "pegType", "pegMechanism", "price", "circulating"];
186
+ export function compactStablecoins(data, opts = {}) {
187
+ if (opts.full || !isObject(data) || !Array.isArray(data.peggedAssets))
188
+ return data;
189
+ const { total, returned, items } = trimList(data.peggedAssets, STABLECOIN_FIELDS, opts.limit ?? 100, s => circulatingValue(s?.circulating));
190
+ return { total, returned, peggedAssets: items };
191
+ }
192
+ const STABLECOIN_CHAIN_FIELDS = ["name", "gecko_id", "tokenSymbol", "totalCirculatingUSD"];
193
+ /** /stablecoinchains is a per-chain entity list (not a time series). */
194
+ export function compactStablecoinChains(data, opts = {}) {
195
+ if (opts.full || !Array.isArray(data))
196
+ return data;
197
+ const { total, returned, items } = trimList(data, STABLECOIN_CHAIN_FIELDS, opts.limit ?? 200, c => circulatingValue(c?.totalCirculatingUSD));
198
+ return { total, returned, chains: items };
199
+ }
200
+ export function compactStablecoinData(data, opts = {}) {
201
+ if (opts.full || !isObject(data))
202
+ return data;
203
+ const out = pickFields(data, [
204
+ "id", "name", "symbol", "pegType", "pegMechanism", "priceSource", "price",
205
+ "circulating", "circulatingPrevDay", "circulatingPrevWeek", "circulating7dAgo",
206
+ "chainCirculating", "delisted",
207
+ ]);
208
+ if (opts.includeTokens && Array.isArray(data.tokens)) {
209
+ out.tokens = downsample(data.tokens, opts.points ?? DEFAULT_POINTS);
210
+ }
211
+ return out;
212
+ }
213
+ const OVERVIEW_PROTOCOL_FIELDS = [
214
+ "name", "displayName", "category", "chains",
215
+ "total24h", "total7d", "total30d", "totalAllTime",
216
+ "change_1d", "change_7d", "change_1m",
217
+ ];
218
+ const OVERVIEW_TOP_FIELDS = [
219
+ "total24h", "total7d", "total30d", "totalAllTime",
220
+ "change_1d", "change_7d", "change_1m",
221
+ "totalDataChart", "totalDataChartBreakdown",
222
+ "allChains", "chain", "protocols",
223
+ ];
224
+ export function compactOverview(data, opts = {}) {
225
+ if (opts.full || !isObject(data))
226
+ return data;
227
+ const points = opts.points ?? DEFAULT_POINTS;
228
+ const out = pickFields(data, OVERVIEW_TOP_FIELDS);
229
+ if (Array.isArray(out.totalDataChart))
230
+ out.totalDataChart = downsample(out.totalDataChart, points);
231
+ if (Array.isArray(out.totalDataChartBreakdown))
232
+ out.totalDataChartBreakdown = downsample(out.totalDataChartBreakdown, points);
233
+ if (Array.isArray(out.protocols)) {
234
+ const { total, returned, items } = trimList(out.protocols, OVERVIEW_PROTOCOL_FIELDS, opts.limit ?? 50, p => Number(p?.total24h) || 0);
235
+ out.protocols = items;
236
+ out.totalProtocols = total;
237
+ out.returnedProtocols = returned;
238
+ }
239
+ return out;
240
+ }
241
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/handlers/transform.ts"],"names":[],"mappings":"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"}
@@ -11,3 +11,11 @@ export declare const createErrorResponse: (message: string) => ToolResultSchema;
11
11
  * @returns A ToolResultSchema with the success message
12
12
  */
13
13
  export declare const createSuccessResponse: (message: string) => ToolResultSchema;
14
+ /**
15
+ * Utility function to return structured data as a compact (minified) JSON
16
+ * response. Compact JSON keeps the payload small and directly parseable by
17
+ * model clients, unlike a prose-prefixed, pretty-printed blob.
18
+ * @param data Any JSON-serializable value
19
+ * @returns A ToolResultSchema wrapping the serialized data
20
+ */
21
+ export declare const jsonResponse: (data: unknown) => ToolResultSchema;
@@ -26,4 +26,20 @@ export const createSuccessResponse = (message) => {
26
26
  isError: false
27
27
  };
28
28
  };
29
+ /**
30
+ * Utility function to return structured data as a compact (minified) JSON
31
+ * response. Compact JSON keeps the payload small and directly parseable by
32
+ * model clients, unlike a prose-prefixed, pretty-printed blob.
33
+ * @param data Any JSON-serializable value
34
+ * @returns A ToolResultSchema wrapping the serialized data
35
+ */
36
+ export const jsonResponse = (data) => {
37
+ return {
38
+ content: [{
39
+ type: "text",
40
+ text: JSON.stringify(data)
41
+ }],
42
+ isError: false
43
+ };
44
+ };
29
45
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/handlers/utils.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAoB,EAAE;IACvE,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO;aACd,CAAC;QACF,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAoB,EAAE;IACzE,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO;aACd,CAAC;QACF,OAAO,EAAE,KAAK;KACf,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/handlers/utils.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAe,EAAoB,EAAE;IACvE,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO;aACd,CAAC;QACF,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAoB,EAAE;IACzE,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO;aACd,CAAC;QACF,OAAO,EAAE,KAAK;KACf,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAa,EAAoB,EAAE;IAC9D,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,CAAC;QACF,OAAO,EAAE,KAAK;KACf,CAAC;AACJ,CAAC,CAAC"}
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprot
5
5
  import { handlers, tools } from "./tools.js";
6
6
  const server = new Server({
7
7
  name: "mcp-defillama",
8
- version: "1.1.0",
8
+ version: "1.2.0",
9
9
  }, {
10
10
  capabilities: {
11
11
  tools: {}