@missionsquad/mcp-defillama 1.0.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.
@@ -1,20 +1,127 @@
1
- export interface GetProtocolsInput {
1
+ /** A 12-hour datetime string ("06/15/2024 03:30 PM", UTC assumed) or UNIX seconds. */
2
+ export type DateTimeInput = string | number;
3
+ /** Options that control response compaction (all optional). */
4
+ export interface CompactInput {
5
+ /** Return the complete, untrimmed response instead of the compact default. */
6
+ full?: boolean;
2
7
  }
3
- export interface GetProtocolTvlInput {
8
+ /** Adds a downsampling control for time-series responses. */
9
+ export interface SeriesCompactInput extends CompactInput {
10
+ /** Max number of data points to keep (default 30). */
11
+ points?: number;
12
+ }
13
+ /** Adds an item cap for list responses. */
14
+ export interface ListCompactInput extends CompactInput {
15
+ /** Max number of items to keep. */
16
+ limit?: number;
17
+ }
18
+ /** Query options shared by the DEX/options/fees overview & summary endpoints. */
19
+ export interface OverviewOptionsInput extends CompactInput {
20
+ excludeTotalDataChart?: boolean;
21
+ excludeTotalDataChartBreakdown?: boolean;
22
+ dataType?: string;
23
+ /** Max number of chart points to keep (default 30). */
24
+ points?: number;
25
+ /** Max number of protocols to keep in the breakdown. */
26
+ limit?: number;
27
+ }
28
+ export interface GetProtocolsInput extends ListCompactInput {
29
+ }
30
+ export interface GetProtocolTvlInput extends SeriesCompactInput {
4
31
  protocol: string;
32
+ /** Include token-level balances/breakdowns in the response. */
33
+ includeTokens?: boolean;
34
+ }
35
+ export interface GetHistoricalChainTvlInput extends SeriesCompactInput {
5
36
  }
6
- export interface GetChainTvlInput {
37
+ export interface GetChainTvlInput extends SeriesCompactInput {
7
38
  chain: string;
8
39
  }
40
+ export interface GetCurrentProtocolTvlInput {
41
+ protocol: string;
42
+ }
43
+ export interface GetChainsInput extends ListCompactInput {
44
+ }
9
45
  export interface GetTokenPricesInput {
10
46
  coins: string[];
11
47
  }
12
48
  export interface GetHistoricalPricesInput {
13
49
  coins: string[];
14
- timestamp: number;
50
+ timestamp: DateTimeInput;
51
+ }
52
+ export interface GetBatchHistoricalPricesInput {
53
+ /** Map of coin identifier to an array of datetime strings or UNIX seconds. */
54
+ coins: Record<string, DateTimeInput[]>;
55
+ searchWidth?: string;
56
+ }
57
+ export interface GetPriceChartInput extends SeriesCompactInput {
58
+ coins: string[];
59
+ start?: DateTimeInput;
60
+ end?: DateTimeInput;
61
+ span?: number;
62
+ period?: string;
63
+ searchWidth?: string;
64
+ }
65
+ export interface GetPricePercentageChangeInput {
66
+ coins: string[];
67
+ timestamp?: DateTimeInput;
68
+ lookForward?: boolean;
69
+ period?: string;
70
+ }
71
+ export interface GetFirstPricesInput {
72
+ coins: string[];
15
73
  }
16
- export interface GetStablecoinsInput {
74
+ export interface GetBlockInput {
75
+ chain: string;
76
+ timestamp: DateTimeInput;
77
+ }
78
+ export interface GetStablecoinsInput extends ListCompactInput {
79
+ includePrices?: boolean;
80
+ }
81
+ export interface GetStablecoinChartsAllInput extends SeriesCompactInput {
82
+ stablecoin?: number | string;
83
+ }
84
+ export interface GetStablecoinChartsChainInput extends SeriesCompactInput {
85
+ chain: string;
86
+ stablecoin?: number | string;
17
87
  }
18
- export interface GetStablecoinDataInput {
88
+ export interface GetStablecoinDataInput extends SeriesCompactInput {
19
89
  asset: string;
90
+ /** Include token-level breakdowns in the response. */
91
+ includeTokens?: boolean;
92
+ }
93
+ export interface GetStablecoinChainsInput extends ListCompactInput {
94
+ }
95
+ export interface GetStablecoinPricesInput extends SeriesCompactInput {
96
+ }
97
+ export interface GetPoolsInput extends ListCompactInput {
98
+ }
99
+ export interface GetPoolChartInput extends SeriesCompactInput {
100
+ pool: string;
101
+ }
102
+ export interface GetDexsOverviewInput extends OverviewOptionsInput {
103
+ }
104
+ export interface GetDexsOverviewByChainInput extends OverviewOptionsInput {
105
+ chain: string;
106
+ }
107
+ export interface GetDexSummaryInput extends OverviewOptionsInput {
108
+ protocol: string;
109
+ }
110
+ export interface GetOptionsOverviewInput extends OverviewOptionsInput {
111
+ }
112
+ export interface GetOptionsOverviewByChainInput extends OverviewOptionsInput {
113
+ chain: string;
114
+ }
115
+ export interface GetOptionSummaryInput extends OverviewOptionsInput {
116
+ protocol: string;
117
+ }
118
+ export interface GetOpenInterestOverviewInput extends OverviewOptionsInput {
119
+ }
120
+ export interface GetFeesOverviewInput extends OverviewOptionsInput {
121
+ }
122
+ export interface GetFeesOverviewByChainInput extends OverviewOptionsInput {
123
+ chain: string;
124
+ }
125
+ export interface GetFeeSummaryInput extends OverviewOptionsInput {
126
+ protocol: string;
20
127
  }
@@ -1,2 +1,5 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Shared
3
+ // ---------------------------------------------------------------------------
1
4
  export {};
2
5
  //# sourceMappingURL=defillama.types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defillama.types.js","sourceRoot":"","sources":["../../src/handlers/defillama.types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"defillama.types.js","sourceRoot":"","sources":["../../src/handlers/defillama.types.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,SAAS;AACT,8EAA8E"}
@@ -0,0 +1,34 @@
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
+ export interface CompactOptions {
11
+ /** Return the complete, untrimmed response. */
12
+ full?: boolean;
13
+ /** Max number of points to keep when downsampling a time series. */
14
+ points?: number;
15
+ /** Max number of items to keep for list endpoints. */
16
+ limit?: number;
17
+ /** Include token-level breakdowns (protocol/stablecoin detail endpoints). */
18
+ includeTokens?: boolean;
19
+ }
20
+ /** Evenly downsample an array to at most `max` items, always keeping the ends. */
21
+ export declare function downsample<T>(arr: T[], max: number): T[];
22
+ /** Recursively render date/timestamp fields as UTC datetime strings. */
23
+ export declare function humanizeDates(value: any): any;
24
+ export declare function compactProtocols(data: any, opts?: CompactOptions): any;
25
+ export declare function compactProtocolTvl(data: any, opts?: CompactOptions): any;
26
+ /** A plain time series (array of dated points), e.g. historical chain TVL. */
27
+ export declare function compactSeries(data: any, opts?: CompactOptions): any;
28
+ export declare function compactChains(data: any, opts?: CompactOptions): any;
29
+ export declare function compactPools(data: any, opts?: CompactOptions): any;
30
+ export declare function compactStablecoins(data: any, opts?: CompactOptions): any;
31
+ /** /stablecoinchains is a per-chain entity list (not a time series). */
32
+ export declare function compactStablecoinChains(data: any, opts?: CompactOptions): any;
33
+ export declare function compactStablecoinData(data: any, opts?: CompactOptions): any;
34
+ export declare function compactOverview(data: any, opts?: CompactOptions): any;
@@ -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.0.0",
8
+ version: "1.2.0",
9
9
  }, {
10
10
  capabilities: {
11
11
  tools: {}