@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,523 @@
1
+ /**
2
+ * Risk Scoring Utility
3
+ *
4
+ * Multi-factor risk analysis algorithms for vault assessment.
5
+ * Provides comprehensive risk scoring across multiple dimensions.
6
+ */
7
+ /**
8
+ * Risk thresholds for scoring
9
+ */
10
+ export const RISK_THRESHOLDS = {
11
+ // TVL thresholds (USD)
12
+ TVL_VERY_HIGH: 10_000_000, // >$10M = very low risk
13
+ TVL_HIGH: 1_000_000, // >$1M = low risk
14
+ TVL_MEDIUM: 100_000, // >$100K = medium risk
15
+ TVL_LOW: 10_000, // >$10K = high risk
16
+ // Below $10K = critical risk
17
+ // Concentration thresholds (percentage of total assets)
18
+ CONCENTRATION_LOW: 0.1, // <10% = low risk
19
+ CONCENTRATION_MEDIUM: 0.25, // <25% = medium risk
20
+ CONCENTRATION_HIGH: 0.5, // <50% = high risk
21
+ // >50% = critical risk
22
+ // Volatility thresholds (standard deviation of daily returns)
23
+ VOLATILITY_LOW: 0.02, // <2% = low risk
24
+ VOLATILITY_MEDIUM: 0.05, // <5% = medium risk
25
+ VOLATILITY_HIGH: 0.1, // <10% = high risk
26
+ // >10% = critical risk
27
+ // Age thresholds (days)
28
+ AGE_MATURE: 365, // >1 year = low risk
29
+ AGE_ESTABLISHED: 90, // >3 months = medium risk
30
+ AGE_NEW: 30, // >1 month = high risk
31
+ // <1 month = critical risk
32
+ // Overall risk score thresholds
33
+ OVERALL_LOW: 0.3,
34
+ OVERALL_MEDIUM: 0.6,
35
+ OVERALL_HIGH: 0.8,
36
+ // >0.8 = critical
37
+ };
38
+ /**
39
+ * Calculate TVL-based risk score
40
+ * Higher TVL = lower risk (more liquidity and market validation)
41
+ *
42
+ * @param tvl - Total value locked in USD
43
+ * @returns Risk score 0-1 (0 = lowest risk, 1 = highest risk)
44
+ */
45
+ export function calculateTVLRisk(tvl) {
46
+ if (tvl >= RISK_THRESHOLDS.TVL_VERY_HIGH) {
47
+ return 0.1; // Very low risk
48
+ }
49
+ else if (tvl >= RISK_THRESHOLDS.TVL_HIGH) {
50
+ return 0.2; // Low risk
51
+ }
52
+ else if (tvl >= RISK_THRESHOLDS.TVL_MEDIUM) {
53
+ return 0.5; // Medium risk
54
+ }
55
+ else if (tvl >= RISK_THRESHOLDS.TVL_LOW) {
56
+ return 0.8; // High risk
57
+ }
58
+ else {
59
+ return 1.0; // Critical risk
60
+ }
61
+ }
62
+ /**
63
+ * Calculate concentration risk score
64
+ * Measures vault's share of total protocol TVL
65
+ *
66
+ * @param vaultTVL - Vault's TVL in USD
67
+ * @param totalProtocolTVL - Total protocol TVL in USD
68
+ * @returns Risk score 0-1 (0 = lowest risk, 1 = highest risk)
69
+ */
70
+ export function calculateConcentrationRisk(vaultTVL, totalProtocolTVL) {
71
+ if (totalProtocolTVL === 0) {
72
+ return 0.5; // Medium risk if no protocol data
73
+ }
74
+ const concentration = vaultTVL / totalProtocolTVL;
75
+ if (concentration < RISK_THRESHOLDS.CONCENTRATION_LOW) {
76
+ return 0.1; // Low concentration = low risk
77
+ }
78
+ else if (concentration < RISK_THRESHOLDS.CONCENTRATION_MEDIUM) {
79
+ return 0.4; // Medium concentration
80
+ }
81
+ else if (concentration < RISK_THRESHOLDS.CONCENTRATION_HIGH) {
82
+ return 0.7; // High concentration
83
+ }
84
+ else {
85
+ return 1.0; // Critical concentration risk
86
+ }
87
+ }
88
+ /**
89
+ * Calculate volatility risk score
90
+ * Based on price volatility over time
91
+ *
92
+ * @param pricePoints - Array of price per share values over time
93
+ * @returns Risk score 0-1 (0 = lowest risk, 1 = highest risk)
94
+ */
95
+ export function calculateVolatilityRisk(pricePoints) {
96
+ if (pricePoints.length < 2) {
97
+ return 0.5; // Medium risk if insufficient data
98
+ }
99
+ // Calculate daily returns
100
+ const returns = [];
101
+ for (let i = 1; i < pricePoints.length; i++) {
102
+ if (pricePoints[i - 1] !== 0) {
103
+ const dailyReturn = (pricePoints[i] - pricePoints[i - 1]) / pricePoints[i - 1];
104
+ returns.push(dailyReturn);
105
+ }
106
+ }
107
+ if (returns.length === 0) {
108
+ return 0.5; // Medium risk if no valid returns
109
+ }
110
+ // Calculate standard deviation
111
+ const mean = returns.reduce((sum, r) => sum + r, 0) / returns.length;
112
+ const variance = returns.reduce((sum, r) => sum + Math.pow(r - mean, 2), 0) / returns.length;
113
+ const stdDev = Math.sqrt(variance);
114
+ // Map standard deviation to risk score
115
+ if (stdDev < RISK_THRESHOLDS.VOLATILITY_LOW) {
116
+ return 0.1; // Low volatility = low risk
117
+ }
118
+ else if (stdDev < RISK_THRESHOLDS.VOLATILITY_MEDIUM) {
119
+ return 0.4; // Medium volatility
120
+ }
121
+ else if (stdDev < RISK_THRESHOLDS.VOLATILITY_HIGH) {
122
+ return 0.7; // High volatility
123
+ }
124
+ else {
125
+ return 1.0; // Critical volatility risk
126
+ }
127
+ }
128
+ /**
129
+ * Calculate age-based risk score
130
+ * Newer vaults are riskier (less battle-tested)
131
+ *
132
+ * @param ageInDays - Vault age in days
133
+ * @returns Risk score 0-1 (0 = lowest risk, 1 = highest risk)
134
+ */
135
+ export function calculateAgeRisk(ageInDays) {
136
+ if (ageInDays >= RISK_THRESHOLDS.AGE_MATURE) {
137
+ return 0.1; // Mature vault = low risk
138
+ }
139
+ else if (ageInDays >= RISK_THRESHOLDS.AGE_ESTABLISHED) {
140
+ return 0.4; // Established vault = medium-low risk
141
+ }
142
+ else if (ageInDays >= RISK_THRESHOLDS.AGE_NEW) {
143
+ return 0.7; // New vault = high risk
144
+ }
145
+ else {
146
+ return 1.0; // Very new vault = critical risk
147
+ }
148
+ }
149
+ /**
150
+ * Calculate curator reputation risk score
151
+ * Based on curator's track record, professional signals, and vault management
152
+ *
153
+ * @param curatorVaultCount - Number of vaults managed by curator
154
+ * @param curatorSuccessRate - Success rate (0-1) of curator's vaults
155
+ * @param professionalSignals - Professional indicators: website, description, multiple curators
156
+ * @returns Risk score 0-1 (0 = lowest risk, 1 = highest risk)
157
+ */
158
+ export function calculateCuratorRisk(curatorVaultCount, curatorSuccessRate = 0.5, professionalSignals) {
159
+ // Base risk on experience (vault count)
160
+ let experienceRisk;
161
+ if (curatorVaultCount >= 10) {
162
+ experienceRisk = 0.1; // Highly experienced
163
+ }
164
+ else if (curatorVaultCount >= 5) {
165
+ experienceRisk = 0.3; // Moderately experienced
166
+ }
167
+ else if (curatorVaultCount >= 2) {
168
+ experienceRisk = 0.6; // Limited experience
169
+ }
170
+ else {
171
+ experienceRisk = 0.9; // New curator
172
+ }
173
+ // Adjust based on success rate
174
+ const successRateAdjustment = (1 - curatorSuccessRate) * 0.5; // Max 0.5 adjustment
175
+ // Apply professional signals if available
176
+ let professionalAdjustment = 0;
177
+ if (professionalSignals) {
178
+ // Website presence indicates professionalism (-0.1)
179
+ if (professionalSignals.hasWebsite) {
180
+ professionalAdjustment -= 0.1;
181
+ }
182
+ // Description quality indicates transparency (-0.1)
183
+ if (professionalSignals.hasDescription) {
184
+ professionalAdjustment -= 0.1;
185
+ }
186
+ // Multiple curators reduce centralization risk (-0.15)
187
+ if (professionalSignals.multipleCurators) {
188
+ professionalAdjustment -= 0.15;
189
+ }
190
+ // Additional curator count bonus (max -0.1 for 5+ curators)
191
+ if (professionalSignals.curatorCount > 1) {
192
+ const curatorCountBonus = Math.min(0.1, (professionalSignals.curatorCount - 1) * 0.025);
193
+ professionalAdjustment -= curatorCountBonus;
194
+ }
195
+ }
196
+ return Math.max(0, Math.min(1, experienceRisk + successRateAdjustment + professionalAdjustment));
197
+ }
198
+ /**
199
+ * Calculate fee risk score
200
+ * Based on management fees and performance fee impact
201
+ *
202
+ * @param managementFee - Annual management fee percentage (e.g., 2 for 2%)
203
+ * @param performanceFee - Performance fee percentage (e.g., 20 for 20%)
204
+ * @param performanceFeeActive - Whether performance fee is currently active (above HWM)
205
+ * @returns Risk score 0-1 (0 = lowest risk, 1 = highest risk)
206
+ */
207
+ export function calculateFeeRisk(managementFee, performanceFee, performanceFeeActive) {
208
+ // Calculate total fee drag (worst case scenario)
209
+ const annualFeeDrag = managementFee + (performanceFeeActive ? performanceFee * 0.1 : 0);
210
+ // Score based on total fee impact
211
+ if (annualFeeDrag < 1) {
212
+ return 0.1; // Very low fees = low risk
213
+ }
214
+ else if (annualFeeDrag < 2) {
215
+ return 0.3; // Low fees
216
+ }
217
+ else if (annualFeeDrag < 3) {
218
+ return 0.5; // Moderate fees
219
+ }
220
+ else if (annualFeeDrag < 5) {
221
+ return 0.7; // High fees
222
+ }
223
+ else {
224
+ return 1.0; // Very high fees = critical risk
225
+ }
226
+ }
227
+ /**
228
+ * Calculate liquidity risk score
229
+ * Based on safe assets vs pending redemptions coverage
230
+ *
231
+ * @param safeAssets - Assets available for immediate redemptions (USD)
232
+ * @param pendingRedemptions - Outstanding redemption requests (USD)
233
+ * @returns Risk score 0-1 (0 = lowest risk, 1 = highest risk)
234
+ */
235
+ export function calculateLiquidityRisk(safeAssets, pendingRedemptions) {
236
+ // If no pending redemptions, liquidity risk is low
237
+ if (pendingRedemptions === 0) {
238
+ return 0.1; // No redemption pressure = low risk
239
+ }
240
+ // Calculate coverage ratio
241
+ const coverageRatio = safeAssets / pendingRedemptions;
242
+ // Score based on coverage
243
+ if (coverageRatio >= 2.0) {
244
+ return 0.1; // 200%+ coverage = very low risk
245
+ }
246
+ else if (coverageRatio >= 1.5) {
247
+ return 0.3; // 150%+ coverage = low risk
248
+ }
249
+ else if (coverageRatio >= 1.0) {
250
+ return 0.5; // 100%+ coverage = medium risk
251
+ }
252
+ else if (coverageRatio >= 0.5) {
253
+ return 0.7; // 50%+ coverage = high risk
254
+ }
255
+ else {
256
+ return 1.0; // <50% coverage = critical risk
257
+ }
258
+ }
259
+ /**
260
+ * Calculate APR consistency risk score
261
+ * Analyzes volatility of returns across different time periods
262
+ *
263
+ * @param aprData - APR values across different time periods
264
+ * @returns Risk score 0-1 (0 = lowest risk, 1 = highest risk)
265
+ */
266
+ export function calculateAPRConsistencyRisk(aprData) {
267
+ const aprs = [
268
+ aprData.weeklyApr,
269
+ aprData.monthlyApr,
270
+ aprData.yearlyApr,
271
+ aprData.inceptionApr,
272
+ ].filter((apr) => typeof apr === 'number' && apr >= 0);
273
+ if (aprs.length < 2) {
274
+ return 0.5; // Insufficient data = medium risk
275
+ }
276
+ // Calculate coefficient of variation (CV = stdDev / mean)
277
+ const mean = aprs.reduce((sum, apr) => sum + apr, 0) / aprs.length;
278
+ if (mean === 0) {
279
+ return 0.5; // No returns = medium risk
280
+ }
281
+ const variance = aprs.reduce((sum, apr) => sum + Math.pow(apr - mean, 2), 0) / aprs.length;
282
+ const stdDev = Math.sqrt(variance);
283
+ const coefficientOfVariation = stdDev / Math.abs(mean);
284
+ // Score based on consistency (lower CV = lower risk)
285
+ if (coefficientOfVariation < 0.1) {
286
+ return 0.1; // Very consistent (<10% variation) = low risk
287
+ }
288
+ else if (coefficientOfVariation < 0.25) {
289
+ return 0.3; // Moderately consistent (<25% variation)
290
+ }
291
+ else if (coefficientOfVariation < 0.5) {
292
+ return 0.6; // Inconsistent (<50% variation)
293
+ }
294
+ else {
295
+ return 1.0; // Highly volatile (>50% variation) = high risk
296
+ }
297
+ }
298
+ /**
299
+ * Calculate yield sustainability risk score
300
+ * Assesses composition of APR sources (native vs temporary incentives)
301
+ *
302
+ * @param yieldComposition - Breakdown of yield sources
303
+ * @returns Risk score 0-1 (0 = lowest risk, 1 = highest risk)
304
+ */
305
+ export function calculateYieldSustainabilityRisk(yieldComposition) {
306
+ const { totalApr, nativeYieldsApr } = yieldComposition;
307
+ if (totalApr === 0) {
308
+ return 0.5; // No yield data = medium risk
309
+ }
310
+ const sustainableRatio = nativeYieldsApr / totalApr;
311
+ // Score based on sustainability (higher native yield = lower risk)
312
+ if (sustainableRatio > 0.8) {
313
+ return 0.1; // >80% native yields = sustainable
314
+ }
315
+ else if (sustainableRatio > 0.5) {
316
+ return 0.4; // >50% native yields = balanced
317
+ }
318
+ else if (sustainableRatio > 0.2) {
319
+ return 0.7; // >20% native yields = heavy on incentives
320
+ }
321
+ else {
322
+ return 1.0; // <20% native yields = almost entirely temporary
323
+ }
324
+ }
325
+ /**
326
+ * Calculate settlement time risk score
327
+ * Quantifies redemption delay and operational efficiency
328
+ *
329
+ * @param settlementData - Settlement time and pending operations data
330
+ * @returns Risk score 0-1 (0 = lowest risk, 1 = highest risk)
331
+ */
332
+ export function calculateSettlementRisk(settlementData) {
333
+ const { averageSettlementDays, pendingOperationsRatio } = settlementData;
334
+ // Score based on settlement time (faster = lower risk)
335
+ let timeScore = 0;
336
+ if (averageSettlementDays < 1) {
337
+ timeScore = 0.1; // Same day settlement
338
+ }
339
+ else if (averageSettlementDays < 3) {
340
+ timeScore = 0.3; // 1-3 days
341
+ }
342
+ else if (averageSettlementDays < 7) {
343
+ timeScore = 0.6; // 3-7 days
344
+ }
345
+ else {
346
+ timeScore = 0.9; // >1 week
347
+ }
348
+ // Score based on pending operations (lower = lower risk)
349
+ let pendingScore = 0;
350
+ if (pendingOperationsRatio < 0.1) {
351
+ pendingScore = 0.1; // <10% pending
352
+ }
353
+ else if (pendingOperationsRatio < 0.3) {
354
+ pendingScore = 0.4; // <30% pending
355
+ }
356
+ else if (pendingOperationsRatio < 0.5) {
357
+ pendingScore = 0.7; // <50% pending
358
+ }
359
+ else {
360
+ pendingScore = 1.0; // >50% pending = operational bottleneck
361
+ }
362
+ return (timeScore + pendingScore) / 2;
363
+ }
364
+ /**
365
+ * Calculate integration complexity risk score
366
+ * Assesses smart contract attack surface based on number of integrations
367
+ *
368
+ * @param integrationCount - Number of DeFi protocol integrations
369
+ * @returns Risk score 0-1 (0 = lowest risk, 1 = highest risk)
370
+ */
371
+ export function calculateIntegrationComplexityRisk(integrationCount) {
372
+ if (integrationCount === 0) {
373
+ return 0.3; // No integrations = simpler but limited
374
+ }
375
+ else if (integrationCount === 1) {
376
+ return 0.1; // Single integration = focused strategy, low complexity
377
+ }
378
+ else if (integrationCount <= 3) {
379
+ return 0.4; // Moderate complexity
380
+ }
381
+ else if (integrationCount <= 5) {
382
+ return 0.7; // High complexity
383
+ }
384
+ else {
385
+ return 1.0; // Very high complexity = large attack surface
386
+ }
387
+ }
388
+ /**
389
+ * Calculate capacity utilization risk score
390
+ * Assesses deposit headroom and demand signals
391
+ *
392
+ * @param utilizationData - Capacity and utilization data
393
+ * @returns Risk score 0-1 (0 = lowest risk, 1 = highest risk)
394
+ */
395
+ export function calculateCapacityUtilizationRisk(utilizationData) {
396
+ const { totalAssets, maxCapacity } = utilizationData;
397
+ if (!maxCapacity || maxCapacity === 0) {
398
+ return 0.2; // No capacity limit = flexible (low risk)
399
+ }
400
+ const utilizationRatio = totalAssets / maxCapacity;
401
+ if (utilizationRatio < 0.3) {
402
+ return 0.6; // Under-utilized (<30%) = demand concern
403
+ }
404
+ else if (utilizationRatio < 0.7) {
405
+ return 0.2; // Healthy utilization (30-70%)
406
+ }
407
+ else if (utilizationRatio < 0.9) {
408
+ return 0.4; // Getting full (70-90%)
409
+ }
410
+ else {
411
+ return 0.8; // Near capacity (>90%) = deposit risk
412
+ }
413
+ }
414
+ /**
415
+ * Calculate overall risk score with weighted factors
416
+ *
417
+ * @param breakdown - Individual risk factor scores
418
+ * @returns Overall risk score 0-1 and risk level
419
+ */
420
+ export function calculateOverallRisk(breakdown) {
421
+ // Weighted average of 12 risk factors (updated distribution)
422
+ const weights = {
423
+ tvl: 0.1,
424
+ concentration: 0.1,
425
+ volatility: 0.15,
426
+ age: 0.1,
427
+ curator: 0.1,
428
+ fee: 0.1,
429
+ liquidity: 0.1,
430
+ aprConsistency: 0.15, // NEW - Performance predictability
431
+ yieldSustainability: 0.05, // NEW - APR quality
432
+ settlement: 0.05, // NEW - Operational efficiency (combined with liquidity)
433
+ integrationComplexity: 0.05, // NEW - Technical risk
434
+ capacityUtilization: 0.05, // NEW - Operational signal
435
+ };
436
+ const overallRisk = breakdown.tvlRisk * weights.tvl +
437
+ breakdown.concentrationRisk * weights.concentration +
438
+ breakdown.volatilityRisk * weights.volatility +
439
+ breakdown.ageRisk * weights.age +
440
+ breakdown.curatorRisk * weights.curator +
441
+ breakdown.feeRisk * weights.fee +
442
+ breakdown.liquidityRisk * weights.liquidity +
443
+ breakdown.aprConsistencyRisk * weights.aprConsistency +
444
+ breakdown.yieldSustainabilityRisk * weights.yieldSustainability +
445
+ breakdown.settlementRisk * weights.settlement +
446
+ breakdown.integrationComplexityRisk * weights.integrationComplexity +
447
+ breakdown.capacityUtilizationRisk * weights.capacityUtilization;
448
+ // Determine risk level
449
+ let riskLevel;
450
+ if (overallRisk < RISK_THRESHOLDS.OVERALL_LOW) {
451
+ riskLevel = 'Low';
452
+ }
453
+ else if (overallRisk < RISK_THRESHOLDS.OVERALL_MEDIUM) {
454
+ riskLevel = 'Medium';
455
+ }
456
+ else if (overallRisk < RISK_THRESHOLDS.OVERALL_HIGH) {
457
+ riskLevel = 'High';
458
+ }
459
+ else {
460
+ riskLevel = 'Critical';
461
+ }
462
+ return { overallRisk, riskLevel };
463
+ }
464
+ /**
465
+ * Generate comprehensive risk analysis
466
+ *
467
+ * @param params - Risk analysis parameters
468
+ * @returns Complete risk score breakdown
469
+ */
470
+ export function analyzeRisk(params) {
471
+ const tvlRisk = calculateTVLRisk(params.tvl);
472
+ const concentrationRisk = calculateConcentrationRisk(params.tvl, params.totalProtocolTVL);
473
+ const volatilityRisk = calculateVolatilityRisk(params.priceHistory);
474
+ const ageRisk = calculateAgeRisk(params.ageInDays);
475
+ const curatorRisk = calculateCuratorRisk(params.curatorVaultCount, params.curatorSuccessRate, params.curatorProfessionalSignals);
476
+ const feeRisk = calculateFeeRisk(params.managementFee, params.performanceFee, params.performanceFeeActive);
477
+ const liquidityRisk = calculateLiquidityRisk(params.safeAssets, params.pendingRedemptions);
478
+ // Calculate new risk factors (with defaults if data not provided)
479
+ const aprConsistencyRisk = params.aprData ? calculateAPRConsistencyRisk(params.aprData) : 0.5; // Default to medium risk if no data
480
+ const yieldSustainabilityRisk = params.yieldComposition
481
+ ? calculateYieldSustainabilityRisk(params.yieldComposition)
482
+ : 0.5; // Default to medium risk if no data
483
+ const settlementRisk = params.settlementData
484
+ ? calculateSettlementRisk(params.settlementData)
485
+ : 0.5; // Default to medium risk if no data
486
+ const integrationComplexityRisk = params.integrationCount !== undefined
487
+ ? calculateIntegrationComplexityRisk(params.integrationCount)
488
+ : 0.5; // Default to medium risk if no data
489
+ const capacityUtilizationRisk = params.capacityData
490
+ ? calculateCapacityUtilizationRisk(params.capacityData)
491
+ : 0.2; // Default to low risk (no capacity limit)
492
+ const { overallRisk, riskLevel } = calculateOverallRisk({
493
+ tvlRisk,
494
+ concentrationRisk,
495
+ volatilityRisk,
496
+ ageRisk,
497
+ curatorRisk,
498
+ feeRisk,
499
+ liquidityRisk,
500
+ aprConsistencyRisk,
501
+ yieldSustainabilityRisk,
502
+ settlementRisk,
503
+ integrationComplexityRisk,
504
+ capacityUtilizationRisk,
505
+ });
506
+ return {
507
+ tvlRisk,
508
+ concentrationRisk,
509
+ volatilityRisk,
510
+ ageRisk,
511
+ curatorRisk,
512
+ feeRisk,
513
+ liquidityRisk,
514
+ aprConsistencyRisk,
515
+ yieldSustainabilityRisk,
516
+ settlementRisk,
517
+ integrationComplexityRisk,
518
+ capacityUtilizationRisk,
519
+ overallRisk,
520
+ riskLevel,
521
+ };
522
+ }
523
+ //# sourceMappingURL=risk-scoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk-scoring.js","sourceRoot":"","sources":["../../src/utils/risk-scoring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Shared Error Handler for MCP Tools
3
+ *
4
+ * Centralized error handling logic for all MCP tools.
5
+ * Handles validation errors, GraphQL errors, and generic errors.
6
+ */
7
+ import { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
8
+ /**
9
+ * Handle errors consistently across all MCP tools
10
+ *
11
+ * @param error - The error to handle
12
+ * @param toolName - The name of the tool where the error occurred
13
+ * @returns Standardized error response
14
+ */
15
+ export declare function handleToolError(error: unknown, toolName: string): CallToolResult;
16
+ //# sourceMappingURL=tool-error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-error-handler.d.ts","sourceRoot":"","sources":["../../src/utils/tool-error-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAIpE;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CA8BhF"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Shared Error Handler for MCP Tools
3
+ *
4
+ * Centralized error handling logic for all MCP tools.
5
+ * Handles validation errors, GraphQL errors, and generic errors.
6
+ */
7
+ import { z } from 'zod';
8
+ import { ValidationError, errorResponse, logError } from './errors.js';
9
+ /**
10
+ * Handle errors consistently across all MCP tools
11
+ *
12
+ * @param error - The error to handle
13
+ * @param toolName - The name of the tool where the error occurred
14
+ * @returns Standardized error response
15
+ */
16
+ export function handleToolError(error, toolName) {
17
+ // Handle Zod validation errors
18
+ if (error instanceof z.ZodError) {
19
+ const validationError = new ValidationError(`Input validation failed: ${error.errors.map((e) => e.message).join(', ')}`);
20
+ logError(validationError, toolName);
21
+ return errorResponse(validationError);
22
+ }
23
+ // Handle GraphQL errors
24
+ if (error && typeof error === 'object' && 'response' in error) {
25
+ const gqlError = error;
26
+ if (gqlError.response?.errors) {
27
+ logError(error, toolName);
28
+ return {
29
+ content: [
30
+ {
31
+ type: 'text',
32
+ text: `GraphQL Error: ${JSON.stringify(gqlError.response.errors, null, 2)}`,
33
+ },
34
+ ],
35
+ isError: true,
36
+ };
37
+ }
38
+ }
39
+ // Handle all other errors
40
+ logError(error, toolName);
41
+ return errorResponse(error);
42
+ }
43
+ //# sourceMappingURL=tool-error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-error-handler.js","sourceRoot":"","sources":["../../src/utils/tool-error-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvE;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc,EAAE,QAAgB;IAC9D,+BAA+B;IAC/B,IAAI,KAAK,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,eAAe,GAAG,IAAI,eAAe,CACzC,4BAA4B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5E,CAAC;QACF,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QACpC,OAAO,aAAa,CAAC,eAAe,CAAC,CAAC;IACxC,CAAC;IAED,wBAAwB;IACxB,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QAC9D,MAAM,QAAQ,GAAG,KAA8C,CAAC;QAChE,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YAC9B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC1B,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,kBAAkB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;qBAC5E;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC;IAED,0BAA0B;IAC1B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC1B,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Type-Safe Tool Handler Utilities
3
+ *
4
+ * Provides type-safe wrappers for MCP tool handlers to eliminate
5
+ * unsafe type assertions (as never) throughout the codebase.
6
+ */
7
+ import { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
8
+ import { ZodSchema } from 'zod';
9
+ /**
10
+ * Creates a type-safe tool handler that validates input against a schema
11
+ *
12
+ * @param handler - The tool handler function with proper typing
13
+ * @param schema - Zod schema for runtime validation (handles schemas with defaults)
14
+ * @returns A wrapper function that safely handles unknown arguments
15
+ *
16
+ * @example
17
+ * const safeHandler = createToolHandler(
18
+ * executeQueryGraphQL,
19
+ * queryGraphQLInputSchema
20
+ * );
21
+ * await safeHandler(unknownArgs);
22
+ */
23
+ export declare function createToolHandler<TOutput, TInput = TOutput>(handler: (input: TOutput) => Promise<CallToolResult>, schema: ZodSchema<TOutput, any, TInput>): (args: unknown) => Promise<CallToolResult>;
24
+ /**
25
+ * Type-safe wrapper for tool handlers that don't need explicit validation
26
+ *
27
+ * @param handler - The tool handler function
28
+ * @returns A wrapper function that safely casts unknown arguments
29
+ *
30
+ * Note: Use createToolHandler with schema validation instead when possible
31
+ */
32
+ export declare function wrapToolHandler<T>(handler: (input: T) => Promise<CallToolResult>): (args: unknown) => Promise<CallToolResult>;
33
+ //# sourceMappingURL=tool-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-handler.d.ts","sourceRoot":"","sources":["../../src/utils/tool-handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAEhC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EACzD,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,cAAc,CAAC,EAEpD,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GACtC,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,cAAc,CAAC,CAsB5C;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,GAC7C,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,cAAc,CAAC,CAI5C"}