@lagoon-protocol/lagoon-mcp 0.1.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.
Files changed (335) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +618 -0
  3. package/dist/cache/index.d.ts +97 -0
  4. package/dist/cache/index.d.ts.map +1 -0
  5. package/dist/cache/index.js +106 -0
  6. package/dist/cache/index.js.map +1 -0
  7. package/dist/config.d.ts +34 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +40 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/core/cache-adapter.d.ts +73 -0
  12. package/dist/core/cache-adapter.d.ts.map +1 -0
  13. package/dist/core/cache-adapter.js +47 -0
  14. package/dist/core/cache-adapter.js.map +1 -0
  15. package/dist/core/cache-invalidation.d.ts +72 -0
  16. package/dist/core/cache-invalidation.d.ts.map +1 -0
  17. package/dist/core/cache-invalidation.js +114 -0
  18. package/dist/core/cache-invalidation.js.map +1 -0
  19. package/dist/core/container.d.ts +34 -0
  20. package/dist/core/container.d.ts.map +1 -0
  21. package/dist/core/container.js +75 -0
  22. package/dist/core/container.js.map +1 -0
  23. package/dist/graphql/client.d.ts +32 -0
  24. package/dist/graphql/client.d.ts.map +1 -0
  25. package/dist/graphql/client.js +49 -0
  26. package/dist/graphql/client.js.map +1 -0
  27. package/dist/graphql/fragments/apr-breakdown.fragment.d.ts +64 -0
  28. package/dist/graphql/fragments/apr-breakdown.fragment.d.ts.map +1 -0
  29. package/dist/graphql/fragments/apr-breakdown.fragment.js +62 -0
  30. package/dist/graphql/fragments/apr-breakdown.fragment.js.map +1 -0
  31. package/dist/graphql/fragments/asset-info.fragment.d.ts +18 -0
  32. package/dist/graphql/fragments/asset-info.fragment.d.ts.map +1 -0
  33. package/dist/graphql/fragments/asset-info.fragment.js +36 -0
  34. package/dist/graphql/fragments/asset-info.fragment.js.map +1 -0
  35. package/dist/graphql/fragments/chain-info.fragment.d.ts +18 -0
  36. package/dist/graphql/fragments/chain-info.fragment.d.ts.map +1 -0
  37. package/dist/graphql/fragments/chain-info.fragment.js +32 -0
  38. package/dist/graphql/fragments/chain-info.fragment.js.map +1 -0
  39. package/dist/graphql/fragments/index.d.ts +15 -0
  40. package/dist/graphql/fragments/index.d.ts.map +1 -0
  41. package/dist/graphql/fragments/index.js +21 -0
  42. package/dist/graphql/fragments/index.js.map +1 -0
  43. package/dist/graphql/fragments/pageinfo.fragment.d.ts +33 -0
  44. package/dist/graphql/fragments/pageinfo.fragment.d.ts.map +1 -0
  45. package/dist/graphql/fragments/pageinfo.fragment.js +47 -0
  46. package/dist/graphql/fragments/pageinfo.fragment.js.map +1 -0
  47. package/dist/graphql/fragments/transaction-base.fragment.d.ts +19 -0
  48. package/dist/graphql/fragments/transaction-base.fragment.d.ts.map +1 -0
  49. package/dist/graphql/fragments/transaction-base.fragment.js +32 -0
  50. package/dist/graphql/fragments/transaction-base.fragment.js.map +1 -0
  51. package/dist/graphql/fragments/vault-list.fragment.d.ts +53 -0
  52. package/dist/graphql/fragments/vault-list.fragment.d.ts.map +1 -0
  53. package/dist/graphql/fragments/vault-list.fragment.js +51 -0
  54. package/dist/graphql/fragments/vault-list.fragment.js.map +1 -0
  55. package/dist/graphql/fragments/vault-summary.fragment.d.ts +68 -0
  56. package/dist/graphql/fragments/vault-summary.fragment.d.ts.map +1 -0
  57. package/dist/graphql/fragments/vault-summary.fragment.js +66 -0
  58. package/dist/graphql/fragments/vault-summary.fragment.js.map +1 -0
  59. package/dist/graphql/fragments/vault.fragment.d.ts +133 -0
  60. package/dist/graphql/fragments/vault.fragment.d.ts.map +1 -0
  61. package/dist/graphql/fragments/vault.fragment.js +119 -0
  62. package/dist/graphql/fragments/vault.fragment.js.map +1 -0
  63. package/dist/graphql/fragments.d.ts +183 -0
  64. package/dist/graphql/fragments.d.ts.map +1 -0
  65. package/dist/graphql/fragments.js +297 -0
  66. package/dist/graphql/fragments.js.map +1 -0
  67. package/dist/graphql/queries/export.queries.d.ts +72 -0
  68. package/dist/graphql/queries/export.queries.d.ts.map +1 -0
  69. package/dist/graphql/queries/export.queries.js +202 -0
  70. package/dist/graphql/queries/export.queries.js.map +1 -0
  71. package/dist/graphql/queries/index.d.ts +15 -0
  72. package/dist/graphql/queries/index.d.ts.map +1 -0
  73. package/dist/graphql/queries/index.js +23 -0
  74. package/dist/graphql/queries/index.js.map +1 -0
  75. package/dist/graphql/queries/performance.queries.d.ts +63 -0
  76. package/dist/graphql/queries/performance.queries.d.ts.map +1 -0
  77. package/dist/graphql/queries/performance.queries.js +133 -0
  78. package/dist/graphql/queries/performance.queries.js.map +1 -0
  79. package/dist/graphql/queries/period-summaries.d.ts +15 -0
  80. package/dist/graphql/queries/period-summaries.d.ts.map +1 -0
  81. package/dist/graphql/queries/period-summaries.js +24 -0
  82. package/dist/graphql/queries/period-summaries.js.map +1 -0
  83. package/dist/graphql/queries/portfolio.queries.d.ts +78 -0
  84. package/dist/graphql/queries/portfolio.queries.d.ts.map +1 -0
  85. package/dist/graphql/queries/portfolio.queries.js +198 -0
  86. package/dist/graphql/queries/portfolio.queries.js.map +1 -0
  87. package/dist/graphql/queries/prediction.queries.d.ts +38 -0
  88. package/dist/graphql/queries/prediction.queries.d.ts.map +1 -0
  89. package/dist/graphql/queries/prediction.queries.js +100 -0
  90. package/dist/graphql/queries/prediction.queries.js.map +1 -0
  91. package/dist/graphql/queries/risk.queries.d.ts +37 -0
  92. package/dist/graphql/queries/risk.queries.d.ts.map +1 -0
  93. package/dist/graphql/queries/risk.queries.js +90 -0
  94. package/dist/graphql/queries/risk.queries.js.map +1 -0
  95. package/dist/graphql/queries/search.queries.d.ts +61 -0
  96. package/dist/graphql/queries/search.queries.d.ts.map +1 -0
  97. package/dist/graphql/queries/search.queries.js +103 -0
  98. package/dist/graphql/queries/search.queries.js.map +1 -0
  99. package/dist/graphql/queries/transaction.queries.d.ts +60 -0
  100. package/dist/graphql/queries/transaction.queries.d.ts.map +1 -0
  101. package/dist/graphql/queries/transaction.queries.js +252 -0
  102. package/dist/graphql/queries/transaction.queries.js.map +1 -0
  103. package/dist/graphql/queries/vault.queries.d.ts +54 -0
  104. package/dist/graphql/queries/vault.queries.d.ts.map +1 -0
  105. package/dist/graphql/queries/vault.queries.js +78 -0
  106. package/dist/graphql/queries/vault.queries.js.map +1 -0
  107. package/dist/index.d.ts +12 -0
  108. package/dist/index.d.ts.map +1 -0
  109. package/dist/index.js +32 -0
  110. package/dist/index.js.map +1 -0
  111. package/dist/prompts/competitor-comparison.d.ts +8 -0
  112. package/dist/prompts/competitor-comparison.d.ts.map +1 -0
  113. package/dist/prompts/competitor-comparison.js +432 -0
  114. package/dist/prompts/competitor-comparison.js.map +1 -0
  115. package/dist/prompts/curator-performance.d.ts +8 -0
  116. package/dist/prompts/curator-performance.d.ts.map +1 -0
  117. package/dist/prompts/curator-performance.js +383 -0
  118. package/dist/prompts/curator-performance.js.map +1 -0
  119. package/dist/prompts/financial-analysis.d.ts +8 -0
  120. package/dist/prompts/financial-analysis.d.ts.map +1 -0
  121. package/dist/prompts/financial-analysis.js +480 -0
  122. package/dist/prompts/financial-analysis.js.map +1 -0
  123. package/dist/prompts/index.d.ts +21 -0
  124. package/dist/prompts/index.d.ts.map +1 -0
  125. package/dist/prompts/index.js +50 -0
  126. package/dist/prompts/index.js.map +1 -0
  127. package/dist/prompts/onboarding-first-vault.d.ts +8 -0
  128. package/dist/prompts/onboarding-first-vault.d.ts.map +1 -0
  129. package/dist/prompts/onboarding-first-vault.js +317 -0
  130. package/dist/prompts/onboarding-first-vault.js.map +1 -0
  131. package/dist/prompts/portfolio-optimization.d.ts +8 -0
  132. package/dist/prompts/portfolio-optimization.d.ts.map +1 -0
  133. package/dist/prompts/portfolio-optimization.js +412 -0
  134. package/dist/prompts/portfolio-optimization.js.map +1 -0
  135. package/dist/prompts/protocol-overview.d.ts +8 -0
  136. package/dist/prompts/protocol-overview.d.ts.map +1 -0
  137. package/dist/prompts/protocol-overview.js +398 -0
  138. package/dist/prompts/protocol-overview.js.map +1 -0
  139. package/dist/prompts/shared/disclaimers.d.ts +54 -0
  140. package/dist/prompts/shared/disclaimers.d.ts.map +1 -0
  141. package/dist/prompts/shared/disclaimers.js +400 -0
  142. package/dist/prompts/shared/disclaimers.js.map +1 -0
  143. package/dist/resources/glossary.d.ts +8 -0
  144. package/dist/resources/glossary.d.ts.map +1 -0
  145. package/dist/resources/glossary.js +407 -0
  146. package/dist/resources/glossary.js.map +1 -0
  147. package/dist/resources/index.d.ts +18 -0
  148. package/dist/resources/index.d.ts.map +1 -0
  149. package/dist/resources/index.js +29 -0
  150. package/dist/resources/index.js.map +1 -0
  151. package/dist/resources/schema.d.ts +22 -0
  152. package/dist/resources/schema.d.ts.map +1 -0
  153. package/dist/resources/schema.js +67 -0
  154. package/dist/resources/schema.js.map +1 -0
  155. package/dist/schemas/config.schema.d.ts +46 -0
  156. package/dist/schemas/config.schema.d.ts.map +1 -0
  157. package/dist/schemas/config.schema.js +48 -0
  158. package/dist/schemas/config.schema.js.map +1 -0
  159. package/dist/sdk/__tests__/apr-service.test.d.ts +7 -0
  160. package/dist/sdk/__tests__/apr-service.test.d.ts.map +1 -0
  161. package/dist/sdk/__tests__/apr-service.test.js +385 -0
  162. package/dist/sdk/__tests__/apr-service.test.js.map +1 -0
  163. package/dist/sdk/__tests__/math-utils.test.d.ts +7 -0
  164. package/dist/sdk/__tests__/math-utils.test.d.ts.map +1 -0
  165. package/dist/sdk/__tests__/math-utils.test.js +185 -0
  166. package/dist/sdk/__tests__/math-utils.test.js.map +1 -0
  167. package/dist/sdk/__tests__/simulation-service.test.d.ts +5 -0
  168. package/dist/sdk/__tests__/simulation-service.test.d.ts.map +1 -0
  169. package/dist/sdk/__tests__/simulation-service.test.js +397 -0
  170. package/dist/sdk/__tests__/simulation-service.test.js.map +1 -0
  171. package/dist/sdk/__tests__/vault-utils.test.d.ts +7 -0
  172. package/dist/sdk/__tests__/vault-utils.test.d.ts.map +1 -0
  173. package/dist/sdk/__tests__/vault-utils.test.js +189 -0
  174. package/dist/sdk/__tests__/vault-utils.test.js.map +1 -0
  175. package/dist/sdk/apr-service.d.ts +101 -0
  176. package/dist/sdk/apr-service.d.ts.map +1 -0
  177. package/dist/sdk/apr-service.js +175 -0
  178. package/dist/sdk/apr-service.js.map +1 -0
  179. package/dist/sdk/math-utils.d.ts +138 -0
  180. package/dist/sdk/math-utils.d.ts.map +1 -0
  181. package/dist/sdk/math-utils.js +218 -0
  182. package/dist/sdk/math-utils.js.map +1 -0
  183. package/dist/sdk/simulation-service.d.ts +106 -0
  184. package/dist/sdk/simulation-service.d.ts.map +1 -0
  185. package/dist/sdk/simulation-service.js +143 -0
  186. package/dist/sdk/simulation-service.js.map +1 -0
  187. package/dist/sdk/vault-utils.d.ts +125 -0
  188. package/dist/sdk/vault-utils.d.ts.map +1 -0
  189. package/dist/sdk/vault-utils.js +165 -0
  190. package/dist/sdk/vault-utils.js.map +1 -0
  191. package/dist/server.d.ts +21 -0
  192. package/dist/server.d.ts.map +1 -0
  193. package/dist/server.js +225 -0
  194. package/dist/server.js.map +1 -0
  195. package/dist/services/analytics/protocol-overview.service.d.ts +61 -0
  196. package/dist/services/analytics/protocol-overview.service.d.ts.map +1 -0
  197. package/dist/services/analytics/protocol-overview.service.js +182 -0
  198. package/dist/services/analytics/protocol-overview.service.js.map +1 -0
  199. package/dist/services/analytics/risk.service.d.ts +92 -0
  200. package/dist/services/analytics/risk.service.d.ts.map +1 -0
  201. package/dist/services/analytics/risk.service.js +423 -0
  202. package/dist/services/analytics/risk.service.js.map +1 -0
  203. package/dist/services/base.service.d.ts +39 -0
  204. package/dist/services/base.service.d.ts.map +1 -0
  205. package/dist/services/base.service.js +37 -0
  206. package/dist/services/base.service.js.map +1 -0
  207. package/dist/services/index.d.ts +30 -0
  208. package/dist/services/index.d.ts.map +1 -0
  209. package/dist/services/index.js +101 -0
  210. package/dist/services/index.js.map +1 -0
  211. package/dist/tools/__tests__/simulate-vault.test.d.ts +5 -0
  212. package/dist/tools/__tests__/simulate-vault.test.d.ts.map +1 -0
  213. package/dist/tools/__tests__/simulate-vault.test.js +363 -0
  214. package/dist/tools/__tests__/simulate-vault.test.js.map +1 -0
  215. package/dist/tools/analyze-risk.d.ts +34 -0
  216. package/dist/tools/analyze-risk.d.ts.map +1 -0
  217. package/dist/tools/analyze-risk.js +100 -0
  218. package/dist/tools/analyze-risk.js.map +1 -0
  219. package/dist/tools/compare-vaults.d.ts +29 -0
  220. package/dist/tools/compare-vaults.d.ts.map +1 -0
  221. package/dist/tools/compare-vaults.js +285 -0
  222. package/dist/tools/compare-vaults.js.map +1 -0
  223. package/dist/tools/export-data.d.ts +34 -0
  224. package/dist/tools/export-data.d.ts.map +1 -0
  225. package/dist/tools/export-data.js +309 -0
  226. package/dist/tools/export-data.js.map +1 -0
  227. package/dist/tools/get-price-history.d.ts +29 -0
  228. package/dist/tools/get-price-history.d.ts.map +1 -0
  229. package/dist/tools/get-price-history.js +236 -0
  230. package/dist/tools/get-price-history.js.map +1 -0
  231. package/dist/tools/get-transactions.d.ts +29 -0
  232. package/dist/tools/get-transactions.d.ts.map +1 -0
  233. package/dist/tools/get-transactions.js +181 -0
  234. package/dist/tools/get-transactions.js.map +1 -0
  235. package/dist/tools/index.d.ts +26 -0
  236. package/dist/tools/index.d.ts.map +1 -0
  237. package/dist/tools/index.js +32 -0
  238. package/dist/tools/index.js.map +1 -0
  239. package/dist/tools/optimize-portfolio.d.ts +37 -0
  240. package/dist/tools/optimize-portfolio.d.ts.map +1 -0
  241. package/dist/tools/optimize-portfolio.js +459 -0
  242. package/dist/tools/optimize-portfolio.js.map +1 -0
  243. package/dist/tools/predict-yield.d.ts +30 -0
  244. package/dist/tools/predict-yield.d.ts.map +1 -0
  245. package/dist/tools/predict-yield.js +248 -0
  246. package/dist/tools/predict-yield.js.map +1 -0
  247. package/dist/tools/query-graphql.d.ts +35 -0
  248. package/dist/tools/query-graphql.d.ts.map +1 -0
  249. package/dist/tools/query-graphql.js +54 -0
  250. package/dist/tools/query-graphql.js.map +1 -0
  251. package/dist/tools/registry.d.ts +42 -0
  252. package/dist/tools/registry.d.ts.map +1 -0
  253. package/dist/tools/registry.js +231 -0
  254. package/dist/tools/registry.js.map +1 -0
  255. package/dist/tools/search-vaults.d.ts +40 -0
  256. package/dist/tools/search-vaults.d.ts.map +1 -0
  257. package/dist/tools/search-vaults.js +184 -0
  258. package/dist/tools/search-vaults.js.map +1 -0
  259. package/dist/tools/simulate-vault.d.ts +80 -0
  260. package/dist/tools/simulate-vault.d.ts.map +1 -0
  261. package/dist/tools/simulate-vault.js +281 -0
  262. package/dist/tools/simulate-vault.js.map +1 -0
  263. package/dist/tools/user-portfolio.d.ts +30 -0
  264. package/dist/tools/user-portfolio.d.ts.map +1 -0
  265. package/dist/tools/user-portfolio.js +142 -0
  266. package/dist/tools/user-portfolio.js.map +1 -0
  267. package/dist/tools/vault-data.d.ts +23 -0
  268. package/dist/tools/vault-data.d.ts.map +1 -0
  269. package/dist/tools/vault-data.js +68 -0
  270. package/dist/tools/vault-data.js.map +1 -0
  271. package/dist/tools/vault-performance.d.ts +30 -0
  272. package/dist/tools/vault-performance.d.ts.map +1 -0
  273. package/dist/tools/vault-performance.js +275 -0
  274. package/dist/tools/vault-performance.js.map +1 -0
  275. package/dist/types/generated.d.ts +1109 -0
  276. package/dist/types/generated.d.ts.map +1 -0
  277. package/dist/types/generated.js +2 -0
  278. package/dist/types/generated.js.map +1 -0
  279. package/dist/types/index.d.ts +46 -0
  280. package/dist/types/index.d.ts.map +1 -0
  281. package/dist/types/index.js +8 -0
  282. package/dist/types/index.js.map +1 -0
  283. package/dist/utils/comparison-metrics.d.ts +120 -0
  284. package/dist/utils/comparison-metrics.d.ts.map +1 -0
  285. package/dist/utils/comparison-metrics.js +215 -0
  286. package/dist/utils/comparison-metrics.js.map +1 -0
  287. package/dist/utils/config-loader.d.ts +17 -0
  288. package/dist/utils/config-loader.d.ts.map +1 -0
  289. package/dist/utils/config-loader.js +45 -0
  290. package/dist/utils/config-loader.js.map +1 -0
  291. package/dist/utils/csv-generator.d.ts +89 -0
  292. package/dist/utils/csv-generator.d.ts.map +1 -0
  293. package/dist/utils/csv-generator.js +97 -0
  294. package/dist/utils/csv-generator.js.map +1 -0
  295. package/dist/utils/disclaimers.d.ts +70 -0
  296. package/dist/utils/disclaimers.d.ts.map +1 -0
  297. package/dist/utils/disclaimers.js +161 -0
  298. package/dist/utils/disclaimers.js.map +1 -0
  299. package/dist/utils/errors.d.ts +66 -0
  300. package/dist/utils/errors.d.ts.map +1 -0
  301. package/dist/utils/errors.js +86 -0
  302. package/dist/utils/errors.js.map +1 -0
  303. package/dist/utils/execute-tool-with-cache.d.ts +97 -0
  304. package/dist/utils/execute-tool-with-cache.d.ts.map +1 -0
  305. package/dist/utils/execute-tool-with-cache.js +105 -0
  306. package/dist/utils/execute-tool-with-cache.js.map +1 -0
  307. package/dist/utils/portfolio-optimization.d.ts +100 -0
  308. package/dist/utils/portfolio-optimization.d.ts.map +1 -0
  309. package/dist/utils/portfolio-optimization.js +283 -0
  310. package/dist/utils/portfolio-optimization.js.map +1 -0
  311. package/dist/utils/risk-scoring.d.ts +226 -0
  312. package/dist/utils/risk-scoring.d.ts.map +1 -0
  313. package/dist/utils/risk-scoring.js +523 -0
  314. package/dist/utils/risk-scoring.js.map +1 -0
  315. package/dist/utils/tool-error-handler.d.ts +16 -0
  316. package/dist/utils/tool-error-handler.d.ts.map +1 -0
  317. package/dist/utils/tool-error-handler.js +43 -0
  318. package/dist/utils/tool-error-handler.js.map +1 -0
  319. package/dist/utils/tool-handler.d.ts +33 -0
  320. package/dist/utils/tool-handler.d.ts.map +1 -0
  321. package/dist/utils/tool-handler.js +59 -0
  322. package/dist/utils/tool-handler.js.map +1 -0
  323. package/dist/utils/tool-response.d.ts +16 -0
  324. package/dist/utils/tool-response.d.ts.map +1 -0
  325. package/dist/utils/tool-response.js +25 -0
  326. package/dist/utils/tool-response.js.map +1 -0
  327. package/dist/utils/validators.d.ts +359 -0
  328. package/dist/utils/validators.d.ts.map +1 -0
  329. package/dist/utils/validators.js +233 -0
  330. package/dist/utils/validators.js.map +1 -0
  331. package/dist/utils/yield-prediction.d.ts +69 -0
  332. package/dist/utils/yield-prediction.d.ts.map +1 -0
  333. package/dist/utils/yield-prediction.js +290 -0
  334. package/dist/utils/yield-prediction.js.map +1 -0
  335. package/package.json +83 -0
@@ -0,0 +1,29 @@
1
+ /**
2
+ * get_price_history Tool
3
+ *
4
+ * Historical price data with OHLCV (Open, High, Low, Close, Volume) time-series analysis.
5
+ * Provides price trends and volatility metrics for vault share price over time.
6
+ *
7
+ * Use cases:
8
+ * - Price trend analysis and pattern recognition
9
+ * - Volatility assessment and risk evaluation
10
+ * - Historical price point identification for entry/exit decisions
11
+ * - Performance: ~300-500 tokens per vault per time range
12
+ *
13
+ * Cache strategy:
14
+ * - 30-minute TTL for price history data
15
+ * - Cache key: price_history:{address}:{chainId}:{timeRange}
16
+ * - Cache hit rate target: 75-85%
17
+ * - Cache tags: [CacheTag.VAULT, CacheTag.ANALYTICS] for invalidation
18
+ */
19
+ import { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
20
+ import { PriceHistoryInput } from '../utils/validators.js';
21
+ import { ServiceContainer } from '../core/container.js';
22
+ /**
23
+ * Create the executeGetPriceHistory function with DI container
24
+ *
25
+ * @param container - Service container with dependencies
26
+ * @returns Configured tool executor function
27
+ */
28
+ export declare function createExecuteGetPriceHistory(container: ServiceContainer): (input: PriceHistoryInput) => Promise<CallToolResult>;
29
+ //# sourceMappingURL=get-price-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-price-history.d.ts","sourceRoot":"","sources":["../../src/tools/get-price-history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAI3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AA6QxD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,gBAAgB,GAC1B,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC,cAAc,CAAC,CA8DvD"}
@@ -0,0 +1,236 @@
1
+ /**
2
+ * get_price_history Tool
3
+ *
4
+ * Historical price data with OHLCV (Open, High, Low, Close, Volume) time-series analysis.
5
+ * Provides price trends and volatility metrics for vault share price over time.
6
+ *
7
+ * Use cases:
8
+ * - Price trend analysis and pattern recognition
9
+ * - Volatility assessment and risk evaluation
10
+ * - Historical price point identification for entry/exit decisions
11
+ * - Performance: ~300-500 tokens per vault per time range
12
+ *
13
+ * Cache strategy:
14
+ * - 30-minute TTL for price history data
15
+ * - Cache key: price_history:{address}:{chainId}:{timeRange}
16
+ * - Cache hit rate target: 75-85%
17
+ * - Cache tags: [CacheTag.VAULT, CacheTag.ANALYTICS] for invalidation
18
+ */
19
+ import { getToolDisclaimer } from '../utils/disclaimers.js';
20
+ import { PRICE_HISTORY_QUERY } from '../graphql/queries/index.js';
21
+ import { executeToolWithCache } from '../utils/execute-tool-with-cache.js';
22
+ import { CacheTag } from '../core/cache-invalidation.js';
23
+ import { cacheKeys, cacheTTL } from '../cache/index.js';
24
+ /**
25
+ * Time range constants (in seconds)
26
+ */
27
+ const TIME_RANGES = {
28
+ '7d': 7 * 24 * 60 * 60,
29
+ '30d': 30 * 24 * 60 * 60,
30
+ '90d': 90 * 24 * 60 * 60,
31
+ '1y': 365 * 24 * 60 * 60,
32
+ all: 0, // No time limit
33
+ };
34
+ /**
35
+ * Type guard for TotalAssetsUpdatedData
36
+ */
37
+ function isTotalAssetsUpdated(data) {
38
+ return (typeof data === 'object' && data !== null && 'totalAssetsUsd' in data && 'totalSupply' in data);
39
+ }
40
+ /**
41
+ * Aggregate transactions into OHLCV time buckets
42
+ * Groups data by day for cleaner visualization
43
+ */
44
+ function aggregateOHLCV(transactions) {
45
+ if (transactions.length === 0)
46
+ return [];
47
+ // Group transactions by day (86400 seconds)
48
+ const dayBuckets = new Map();
49
+ for (const tx of transactions) {
50
+ if (!isTotalAssetsUpdated(tx.data))
51
+ continue;
52
+ const timestamp = parseInt(tx.timestamp, 10);
53
+ const dayTimestamp = Math.floor(timestamp / 86400) * 86400;
54
+ if (!dayBuckets.has(dayTimestamp)) {
55
+ dayBuckets.set(dayTimestamp, []);
56
+ }
57
+ dayBuckets.get(dayTimestamp).push(tx);
58
+ }
59
+ // Convert buckets to OHLCV data points
60
+ const ohlcvData = [];
61
+ for (const [dayTimestamp, txs] of Array.from(dayBuckets.entries()).sort((a, b) => a[0] - b[0])) {
62
+ const prices = txs
63
+ .filter((tx) => isTotalAssetsUpdated(tx.data))
64
+ .map((tx) => {
65
+ // Calculate price per share from totalAssetsUsd / totalSupply
66
+ const totalSupply = parseFloat(tx.data.totalSupply) / 1e18; // Convert from wei to decimal
67
+ return totalSupply > 0 ? tx.data.totalAssetsUsd / totalSupply : 0;
68
+ });
69
+ if (prices.length === 0)
70
+ continue;
71
+ const volumes = txs
72
+ .filter((tx) => isTotalAssetsUpdated(tx.data))
73
+ .map((tx) => tx.data.totalAssetsUsd);
74
+ const open = prices[0];
75
+ const close = prices[prices.length - 1];
76
+ const high = Math.max(...prices);
77
+ const low = Math.min(...prices);
78
+ const volume = volumes.reduce((sum, v) => sum + v, 0) / volumes.length; // Average TVL for the day
79
+ ohlcvData.push({
80
+ timestamp: dayTimestamp,
81
+ open,
82
+ high,
83
+ low,
84
+ close,
85
+ volume,
86
+ blockNumber: txs[txs.length - 1].blockNumber,
87
+ });
88
+ }
89
+ return ohlcvData;
90
+ }
91
+ /**
92
+ * Calculate price statistics from OHLCV data
93
+ */
94
+ function calculateStatistics(ohlcvData) {
95
+ if (ohlcvData.length === 0) {
96
+ return {
97
+ currentPrice: 0,
98
+ startPrice: 0,
99
+ highPrice: 0,
100
+ lowPrice: 0,
101
+ averagePrice: 0,
102
+ percentChange: 0,
103
+ volatility: 0,
104
+ totalVolume: 0,
105
+ dataPoints: 0,
106
+ };
107
+ }
108
+ const prices = ohlcvData.map((d) => d.close);
109
+ const currentPrice = prices[prices.length - 1];
110
+ const startPrice = prices[0];
111
+ const highPrice = Math.max(...ohlcvData.map((d) => d.high));
112
+ const lowPrice = Math.min(...ohlcvData.map((d) => d.low));
113
+ const averagePrice = prices.reduce((sum, p) => sum + p, 0) / prices.length;
114
+ const percentChange = startPrice > 0 ? ((currentPrice - startPrice) / startPrice) * 100 : 0;
115
+ // Calculate volatility (standard deviation)
116
+ const squaredDiffs = prices.map((p) => Math.pow(p - averagePrice, 2));
117
+ const variance = squaredDiffs.reduce((sum, d) => sum + d, 0) / prices.length;
118
+ const volatility = Math.sqrt(variance);
119
+ const totalVolume = ohlcvData.reduce((sum, d) => sum + d.volume, 0);
120
+ return {
121
+ currentPrice,
122
+ startPrice,
123
+ highPrice,
124
+ lowPrice,
125
+ averagePrice,
126
+ percentChange,
127
+ volatility,
128
+ totalVolume,
129
+ dataPoints: ohlcvData.length,
130
+ };
131
+ }
132
+ /**
133
+ * Transform raw GraphQL response into markdown-formatted output
134
+ * Uses closure to capture input values and timestamp filter
135
+ */
136
+ function createTransformPriceHistoryData(input, timestampGte) {
137
+ return (data) => {
138
+ // Filter transactions by timestamp client-side (since API doesn't support timestamp filtering)
139
+ const filteredItems = timestampGte > 0
140
+ ? data.transactions.items.filter((item) => parseInt(item.timestamp) >= timestampGte)
141
+ : data.transactions.items;
142
+ // Aggregate into OHLCV time-series
143
+ const ohlcvData = aggregateOHLCV(filteredItems);
144
+ // Calculate statistics
145
+ const statistics = calculateStatistics(ohlcvData);
146
+ // Format output as markdown based on responseFormat
147
+ const responseFormat = (input.responseFormat ?? 'summary');
148
+ let markdown = `# Price History: ${input.vaultAddress}\n\n` +
149
+ `**Chain ID**: ${input.chainId}\n` +
150
+ `**Time Range**: ${input.timeRange}\n` +
151
+ `**Data Points**: ${statistics.dataPoints}\n\n` +
152
+ `## Price Statistics\n\n` +
153
+ `- **Current Price**: $${statistics.currentPrice.toFixed(6)}\n` +
154
+ `- **Start Price**: $${statistics.startPrice.toFixed(6)}\n` +
155
+ `- **High Price**: $${statistics.highPrice.toFixed(6)}\n` +
156
+ `- **Low Price**: $${statistics.lowPrice.toFixed(6)}\n` +
157
+ `- **Average Price**: $${statistics.averagePrice.toFixed(6)}\n` +
158
+ `- **Change**: ${statistics.percentChange > 0 ? '+' : ''}${statistics.percentChange.toFixed(2)}%\n` +
159
+ `- **Volatility (σ)**: $${statistics.volatility.toFixed(6)}\n` +
160
+ `- **Total Volume**: $${(statistics.totalVolume / 1000000).toFixed(2)}M\n\n`;
161
+ // Include OHLCV table for 'summary' and 'detailed' formats
162
+ if (responseFormat === 'summary' || responseFormat === 'detailed') {
163
+ markdown +=
164
+ `## OHLCV Data (Daily)\n\n` +
165
+ `| Date | Open | High | Low | Close | Volume |\n` +
166
+ `|------|------|------|-----|-------|--------|\n` +
167
+ ohlcvData
168
+ .map((d) => {
169
+ const date = new Date(d.timestamp * 1000).toISOString().split('T')[0];
170
+ return `| ${date} | $${d.open.toFixed(6)} | $${d.high.toFixed(6)} | $${d.low.toFixed(6)} | $${d.close.toFixed(6)} | $${(d.volume / 1000000).toFixed(2)}M |`;
171
+ })
172
+ .join('\n') +
173
+ `\n\n`;
174
+ }
175
+ markdown += `**Data Completeness**: ${data.transactions.pageInfo.hasNextPage ? 'More data available (truncated at 2000 points)' : 'Complete'}\n`;
176
+ return { markdown };
177
+ };
178
+ }
179
+ /**
180
+ * Create the executeGetPriceHistory function with DI container
181
+ *
182
+ * @param container - Service container with dependencies
183
+ * @returns Configured tool executor function
184
+ */
185
+ export function createExecuteGetPriceHistory(container) {
186
+ return async (input) => {
187
+ // Calculate timestamp threshold (0 for 'all')
188
+ const now = Math.floor(Date.now() / 1000);
189
+ const timeRangeSeconds = TIME_RANGES[input.timeRange];
190
+ const timestampGte = timeRangeSeconds > 0 ? now - timeRangeSeconds : 0;
191
+ // Build query variables
192
+ const variables = {
193
+ where: {
194
+ vault_in: [input.vaultAddress],
195
+ type_in: ['TotalAssetsUpdated'],
196
+ },
197
+ orderBy: 'timestamp',
198
+ orderDirection: 'asc',
199
+ first: 1000, // GraphQL API limit: 1-1000
200
+ };
201
+ const executor = executeToolWithCache({
202
+ container,
203
+ cacheKey: (input) => `${cacheKeys.priceHistory(input.vaultAddress, input.chainId, input.timeRange)}:${input.responseFormat || 'summary'}`,
204
+ cacheTTL: cacheTTL.priceHistory,
205
+ query: PRICE_HISTORY_QUERY,
206
+ variables: () => variables,
207
+ validateResult: (data) => ({
208
+ valid: !!(data.transactions && data.transactions.items.length > 0),
209
+ message: data.transactions && data.transactions.items.length > 0
210
+ ? undefined
211
+ : `No price history data found for vault ${input.vaultAddress} on chain ${input.chainId} in the ${input.timeRange} time range.`,
212
+ }),
213
+ transformResult: createTransformPriceHistoryData(input, timestampGte),
214
+ toolName: 'get_price_history',
215
+ });
216
+ // Register cache tags for invalidation
217
+ const cacheKey = cacheKeys.priceHistory(input.vaultAddress, input.chainId, input.timeRange);
218
+ container.cacheInvalidator.register(cacheKey, [CacheTag.VAULT, CacheTag.ANALYTICS]);
219
+ // Execute and get result
220
+ const result = await executor(input);
221
+ // Transform JSON output to markdown text format with legal disclaimer
222
+ // executeToolWithCache returns JSON, but this tool should return markdown
223
+ if (!result.isError && result.content[0]?.type === 'text') {
224
+ try {
225
+ const output = JSON.parse(result.content[0].text);
226
+ result.content[0].text = output.markdown + getToolDisclaimer('price_history');
227
+ }
228
+ catch (error) {
229
+ // If parsing fails, content is already in the right format
230
+ console.error('Failed to parse price history output:', error);
231
+ }
232
+ }
233
+ return result;
234
+ };
235
+ }
236
+ //# sourceMappingURL=get-price-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-price-history.js","sourceRoot":"","sources":["../../src/tools/get-price-history.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * get_transactions Tool
3
+ *
4
+ * Vault transaction history with flexible filtering, pagination, and ordering.
5
+ * Supports all transaction types with 5-minute caching.
6
+ *
7
+ * Use cases:
8
+ * - Transaction history for specific vaults
9
+ * - Filtering by transaction type (deposits, redemptions, etc.)
10
+ * - Pagination and ordering support
11
+ * - Performance: ~300-800 tokens per query (depending on result count)
12
+ *
13
+ * Cache strategy:
14
+ * - 5-minute TTL for frequently changing transaction data
15
+ * - Cache key includes filters, pagination, and ordering
16
+ * - Cache hit rate target: 60-70%
17
+ * - Cache tags: [CacheTag.TRANSACTION] for invalidation
18
+ */
19
+ import { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
20
+ import { type GetTransactionsInput } from '../utils/validators.js';
21
+ import { ServiceContainer } from '../core/container.js';
22
+ /**
23
+ * Create the executeGetTransactions function with DI container
24
+ *
25
+ * @param container - Service container with dependencies
26
+ * @returns Configured tool executor function
27
+ */
28
+ export declare function createExecuteGetTransactions(container: ServiceContainer): (input: GetTransactionsInput) => Promise<CallToolResult>;
29
+ //# sourceMappingURL=get-transactions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-transactions.d.ts","sourceRoot":"","sources":["../../src/tools/get-transactions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAmKxD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,SAAS,EAAE,gBAAgB,GAC1B,CAAC,KAAK,EAAE,oBAAoB,KAAK,OAAO,CAAC,cAAc,CAAC,CAoG1D"}
@@ -0,0 +1,181 @@
1
+ /**
2
+ * get_transactions Tool
3
+ *
4
+ * Vault transaction history with flexible filtering, pagination, and ordering.
5
+ * Supports all transaction types with 5-minute caching.
6
+ *
7
+ * Use cases:
8
+ * - Transaction history for specific vaults
9
+ * - Filtering by transaction type (deposits, redemptions, etc.)
10
+ * - Pagination and ordering support
11
+ * - Performance: ~300-800 tokens per query (depending on result count)
12
+ *
13
+ * Cache strategy:
14
+ * - 5-minute TTL for frequently changing transaction data
15
+ * - Cache key includes filters, pagination, and ordering
16
+ * - Cache hit rate target: 60-70%
17
+ * - Cache tags: [CacheTag.TRANSACTION] for invalidation
18
+ */
19
+ import { createHash } from 'crypto';
20
+ import { getToolDisclaimer } from '../utils/disclaimers.js';
21
+ import { TRANSACTIONS_QUERY } from '../graphql/queries/index.js';
22
+ import { executeToolWithCache } from '../utils/execute-tool-with-cache.js';
23
+ import { CacheTag } from '../core/cache-invalidation.js';
24
+ import { cacheKeys, cacheTTL } from '../cache/index.js';
25
+ /**
26
+ * Build the where filter for the transactions query
27
+ */
28
+ function buildWhereFilter(input) {
29
+ const where = {
30
+ chainId_eq: input.chainId,
31
+ vault_in: [input.vaultAddress.toLowerCase()],
32
+ };
33
+ if (input.transactionTypes && input.transactionTypes.length > 0) {
34
+ where.type_in = input.transactionTypes;
35
+ }
36
+ return where;
37
+ }
38
+ /**
39
+ * Generate a hash of the filters for cache key uniqueness
40
+ */
41
+ function hashFilters(filters) {
42
+ const hash = createHash('md5');
43
+ hash.update(JSON.stringify(filters));
44
+ return hash.digest('hex').slice(0, 8);
45
+ }
46
+ /**
47
+ * Transform raw GraphQL response into processed output
48
+ * Uses closure to capture input parameters
49
+ */
50
+ function createTransformTransactionsData(input) {
51
+ return (data) => {
52
+ const transactions = data.transactions.items;
53
+ const pageInfo = data.transactions.pageInfo;
54
+ return {
55
+ vaultAddress: input.vaultAddress,
56
+ chainId: input.chainId,
57
+ transactions: transactions.map((tx) => ({
58
+ id: tx.id,
59
+ type: tx.type,
60
+ timestamp: tx.timestamp,
61
+ blockNumber: tx.blockNumber,
62
+ hash: tx.hash,
63
+ logIndex: tx.logIndex,
64
+ chain: {
65
+ id: tx.chain.id,
66
+ name: tx.chain.name,
67
+ },
68
+ vault: {
69
+ id: tx.data.vault?.id || '',
70
+ address: tx.data.vault?.address || input.vaultAddress.toLowerCase(),
71
+ symbol: tx.data.vault?.symbol || 'UNKNOWN',
72
+ },
73
+ data: (tx.data || {}),
74
+ })),
75
+ pageInfo: {
76
+ hasNextPage: pageInfo.hasNextPage,
77
+ hasPreviousPage: pageInfo.hasPreviousPage,
78
+ count: pageInfo.count,
79
+ totalCount: pageInfo.totalCount,
80
+ },
81
+ filters: {
82
+ transactionTypes: input.transactionTypes,
83
+ orderBy: input.orderBy || 'blockNumber',
84
+ orderDirection: input.orderDirection || 'desc',
85
+ },
86
+ };
87
+ };
88
+ }
89
+ /**
90
+ * Create the executeGetTransactions function with DI container
91
+ *
92
+ * @param container - Service container with dependencies
93
+ * @returns Configured tool executor function
94
+ */
95
+ export function createExecuteGetTransactions(container) {
96
+ // Map to track in-flight requests at tool level (shared across all calls)
97
+ const inFlightRequests = new Map();
98
+ return async (input) => {
99
+ // Extract parameters with defaults
100
+ const first = input.pagination?.first ?? 100;
101
+ const skip = input.pagination?.skip ?? 0;
102
+ const orderBy = input.orderBy ?? 'blockNumber';
103
+ const orderDirection = input.orderDirection ?? 'desc';
104
+ // Build where filter
105
+ const where = buildWhereFilter(input);
106
+ const filterHash = hashFilters(where);
107
+ // Generate cache key for deduplication (including responseFormat)
108
+ const responseFormat = (input.responseFormat ?? 'list');
109
+ const cacheKey = `${cacheKeys.transactions({
110
+ vaultAddress: input.vaultAddress.toLowerCase(),
111
+ chainId: input.chainId,
112
+ filterHash,
113
+ first,
114
+ skip,
115
+ orderBy,
116
+ orderDirection,
117
+ })}:${responseFormat}`;
118
+ // Check for in-flight request with same key (request deduplication)
119
+ const inFlight = inFlightRequests.get(cacheKey);
120
+ if (inFlight) {
121
+ return await inFlight;
122
+ }
123
+ // Create new request promise
124
+ const requestPromise = (async () => {
125
+ try {
126
+ const executor = executeToolWithCache({
127
+ container,
128
+ cacheKey: () => cacheKey,
129
+ cacheTTL: cacheTTL.transactions,
130
+ query: TRANSACTIONS_QUERY,
131
+ variables: () => ({
132
+ first,
133
+ skip,
134
+ where,
135
+ orderBy,
136
+ orderDirection,
137
+ }),
138
+ validateResult: (data) => {
139
+ // Missing transactions object entirely = malformed response (error)
140
+ if (!data.transactions) {
141
+ return {
142
+ valid: false,
143
+ message: `No transaction data found for vault ${input.vaultAddress}`,
144
+ isError: true, // Malformed response structure
145
+ };
146
+ }
147
+ // Null/undefined items array = malformed response (error)
148
+ if (data.transactions.items === null || data.transactions.items === undefined) {
149
+ return {
150
+ valid: false,
151
+ message: `No transaction data found for vault ${input.vaultAddress}`,
152
+ isError: true, // Malformed response structure
153
+ };
154
+ }
155
+ // Empty array OR has items = valid response (transform will handle empty arrays)
156
+ return { valid: true };
157
+ },
158
+ transformResult: createTransformTransactionsData(input),
159
+ toolName: 'get_transactions',
160
+ });
161
+ // Register cache tags for invalidation
162
+ container.cacheInvalidator.register(cacheKey, [CacheTag.TRANSACTION]);
163
+ const result = await executor(input);
164
+ // Add legal disclaimer to output
165
+ if (!result.isError && result.content[0]?.type === 'text') {
166
+ result.content[0].text = result.content[0].text + getToolDisclaimer('get_transactions');
167
+ }
168
+ return result;
169
+ }
170
+ finally {
171
+ // Clean up in-flight request regardless of success/failure
172
+ inFlightRequests.delete(cacheKey);
173
+ }
174
+ })();
175
+ // Store in-flight request
176
+ inFlightRequests.set(cacheKey, requestPromise);
177
+ // Return the promise
178
+ return await requestPromise;
179
+ };
180
+ }
181
+ //# sourceMappingURL=get-transactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-transactions.js","sourceRoot":"","sources":["../../src/tools/get-transactions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Tool Registry (DEPRECATED)
3
+ *
4
+ * This file is deprecated. Use src/tools/registry.ts instead.
5
+ * Kept for backward compatibility only.
6
+ */
7
+ import { CallToolRequest, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
8
+ /**
9
+ * @deprecated Use ToolDefinition from './registry.js' instead
10
+ */
11
+ export type { ToolDefinition as Tool } from './registry.js';
12
+ /**
13
+ * @deprecated Use TOOL_REGISTRY from './registry.js' instead
14
+ * Tool array kept for backward compatibility only
15
+ */
16
+ export { TOOL_REGISTRY as tools } from './registry.js';
17
+ /**
18
+ * @deprecated Tool handlers are now managed by the registry
19
+ * Use registerTools() from './registry.js' instead
20
+ */
21
+ /**
22
+ * @deprecated Use registerTools() from './registry.js' instead
23
+ * This function is kept for backward compatibility only
24
+ */
25
+ export declare function handleToolCall(request: CallToolRequest): CallToolResult;
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAErF;;GAEG;AACH,YAAY,EAAE,cAAc,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAE5D;;;GAGG;AACH,OAAO,EAAE,aAAa,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AAEvD;;;GAGG;AAEH;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAYvE"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Tool Registry (DEPRECATED)
3
+ *
4
+ * This file is deprecated. Use src/tools/registry.ts instead.
5
+ * Kept for backward compatibility only.
6
+ */
7
+ /**
8
+ * @deprecated Use TOOL_REGISTRY from './registry.js' instead
9
+ * Tool array kept for backward compatibility only
10
+ */
11
+ export { TOOL_REGISTRY as tools } from './registry.js';
12
+ /**
13
+ * @deprecated Tool handlers are now managed by the registry
14
+ * Use registerTools() from './registry.js' instead
15
+ */
16
+ /**
17
+ * @deprecated Use registerTools() from './registry.js' instead
18
+ * This function is kept for backward compatibility only
19
+ */
20
+ export function handleToolCall(request) {
21
+ const toolName = request.params.name;
22
+ return {
23
+ content: [
24
+ {
25
+ type: 'text',
26
+ text: `Tool "${toolName}" should be called via the MCP server. Use registerTools() from './registry.js'.`,
27
+ },
28
+ ],
29
+ isError: true,
30
+ };
31
+ }
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH;;;GAGG;AACH,OAAO,EAAE,aAAa,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AAEvD;;;GAGG;AAEH;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAwB;IACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;IAErC,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,SAAS,QAAQ,kFAAkF;aAC1G;SACF;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * optimize_portfolio Tool
3
+ *
4
+ * Portfolio optimization with rebalancing recommendations using parallel vault queries.
5
+ * Analyzes current holdings and provides optimal allocation strategy based on
6
+ * per-vault historical data (price history and performance metrics).
7
+ *
8
+ * Implementation:
9
+ * - Executes N parallel GraphQL queries (one per vault) using Promise.all
10
+ * - Each vault gets up to 1000 transactions of historical data
11
+ * - Processes per-vault price history for accurate volatility calculation
12
+ * - Uses per-vault performance data for expected APR estimation
13
+ *
14
+ * Use cases:
15
+ * - Portfolio rebalancing and optimization
16
+ * - Risk-adjusted allocation strategies (equal_weight, risk_parity, max_sharpe, min_variance)
17
+ * - Diversification improvement
18
+ * - Performance enhancement through optimal weighting
19
+ * - Performance: ~800-1200 tokens per optimization (scales with vault count)
20
+ *
21
+ * Cache strategy:
22
+ * - 30-minute TTL (balances freshness with stability)
23
+ * - Cache key: portfolio_optimization:{chainId}:{vaultAddresses}:{strategy}
24
+ * - Cache hit rate target: 70-80%
25
+ * - Cache tags: [CacheTag.PORTFOLIO, CacheTag.ANALYTICS] for invalidation
26
+ */
27
+ import { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
28
+ import { OptimizePortfolioInput } from '../utils/validators.js';
29
+ import { ServiceContainer } from '../core/container.js';
30
+ /**
31
+ * Create the executeOptimizePortfolio function with DI container
32
+ *
33
+ * @param container - Service container with dependencies
34
+ * @returns Configured tool executor function
35
+ */
36
+ export declare function createExecuteOptimizePortfolio(container: ServiceContainer): (input: OptimizePortfolioInput) => Promise<CallToolResult>;
37
+ //# sourceMappingURL=optimize-portfolio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimize-portfolio.d.ts","sourceRoot":"","sources":["../../src/tools/optimize-portfolio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAUhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAkexD;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,gBAAgB,GAC1B,CAAC,KAAK,EAAE,sBAAsB,KAAK,OAAO,CAAC,cAAc,CAAC,CA0F5D"}