@oobe-protocol-labs/sap-mcp-server 0.9.38 → 0.9.50

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 (165) hide show
  1. package/dist/config/env.d.ts +19 -0
  2. package/dist/config/env.d.ts.map +1 -1
  3. package/dist/config/env.js +9 -2
  4. package/dist/config/env.js.map +1 -1
  5. package/dist/payments/monetization-gate.d.ts +5 -0
  6. package/dist/payments/monetization-gate.d.ts.map +1 -1
  7. package/dist/payments/monetization-gate.js +39 -2
  8. package/dist/payments/monetization-gate.js.map +1 -1
  9. package/dist/payments/prepaid-credit-store.d.ts +111 -0
  10. package/dist/payments/prepaid-credit-store.d.ts.map +1 -0
  11. package/dist/payments/prepaid-credit-store.js +230 -0
  12. package/dist/payments/prepaid-credit-store.js.map +1 -0
  13. package/dist/payments/pricing.d.ts.map +1 -1
  14. package/dist/payments/pricing.js +1 -0
  15. package/dist/payments/pricing.js.map +1 -1
  16. package/dist/payments/schema-validation.d.ts +52 -0
  17. package/dist/payments/schema-validation.d.ts.map +1 -0
  18. package/dist/payments/schema-validation.js +112 -0
  19. package/dist/payments/schema-validation.js.map +1 -0
  20. package/dist/payments/x402-paid-call.d.ts +21 -0
  21. package/dist/payments/x402-paid-call.d.ts.map +1 -1
  22. package/dist/payments/x402-paid-call.js +108 -3
  23. package/dist/payments/x402-paid-call.js.map +1 -1
  24. package/dist/perps/adrena/adrena-builder-commodity.d.ts +63 -0
  25. package/dist/perps/adrena/adrena-builder-commodity.d.ts.map +1 -0
  26. package/dist/perps/adrena/adrena-builder-commodity.js +200 -0
  27. package/dist/perps/adrena/adrena-builder-commodity.js.map +1 -0
  28. package/dist/perps/adrena/adrena-builder-core.d.ts +319 -0
  29. package/dist/perps/adrena/adrena-builder-core.d.ts.map +1 -0
  30. package/dist/perps/adrena/adrena-builder-core.js +517 -0
  31. package/dist/perps/adrena/adrena-builder-core.js.map +1 -0
  32. package/dist/perps/adrena/adrena-builder-liquidity.d.ts +50 -0
  33. package/dist/perps/adrena/adrena-builder-liquidity.d.ts.map +1 -0
  34. package/dist/perps/adrena/adrena-builder-liquidity.js +196 -0
  35. package/dist/perps/adrena/adrena-builder-liquidity.js.map +1 -0
  36. package/dist/perps/adrena/adrena-builder-staking.d.ts +57 -0
  37. package/dist/perps/adrena/adrena-builder-staking.d.ts.map +1 -0
  38. package/dist/perps/adrena/adrena-builder-staking.js +368 -0
  39. package/dist/perps/adrena/adrena-builder-staking.js.map +1 -0
  40. package/dist/perps/adrena/adrena-builder-trading.d.ts +160 -0
  41. package/dist/perps/adrena/adrena-builder-trading.d.ts.map +1 -0
  42. package/dist/perps/adrena/adrena-builder-trading.js +835 -0
  43. package/dist/perps/adrena/adrena-builder-trading.js.map +1 -0
  44. package/dist/perps/adrena/adrena-builder.d.ts +14 -293
  45. package/dist/perps/adrena/adrena-builder.d.ts.map +1 -1
  46. package/dist/perps/adrena/adrena-builder.js +14 -1140
  47. package/dist/perps/adrena/adrena-builder.js.map +1 -1
  48. package/dist/perps/adrena/adrena-constants.d.ts +33 -5
  49. package/dist/perps/adrena/adrena-constants.d.ts.map +1 -1
  50. package/dist/perps/adrena/adrena-constants.js +29 -7
  51. package/dist/perps/adrena/adrena-constants.js.map +1 -1
  52. package/dist/perps/adrena/adrena-idl.d.ts +15084 -0
  53. package/dist/perps/adrena/adrena-idl.d.ts.map +1 -0
  54. package/dist/perps/adrena/adrena-idl.js +29903 -0
  55. package/dist/perps/adrena/adrena-idl.js.map +1 -0
  56. package/dist/perps/adrena/adrena-pda.d.ts +5 -4
  57. package/dist/perps/adrena/adrena-pda.d.ts.map +1 -1
  58. package/dist/perps/adrena/adrena-pda.js +6 -10
  59. package/dist/perps/adrena/adrena-pda.js.map +1 -1
  60. package/dist/perps/adrena/index.d.ts +1 -0
  61. package/dist/perps/adrena/index.d.ts.map +1 -1
  62. package/dist/perps/adrena/index.js +1 -0
  63. package/dist/perps/adrena/index.js.map +1 -1
  64. package/dist/perps/chart-indicators.d.ts +27 -0
  65. package/dist/perps/chart-indicators.d.ts.map +1 -0
  66. package/dist/perps/chart-indicators.js +345 -0
  67. package/dist/perps/chart-indicators.js.map +1 -0
  68. package/dist/perps/chart-tools.d.ts +45 -0
  69. package/dist/perps/chart-tools.d.ts.map +1 -0
  70. package/dist/perps/chart-tools.js +341 -0
  71. package/dist/perps/chart-tools.js.map +1 -0
  72. package/dist/perps/perp-analytics-tools.d.ts +20 -0
  73. package/dist/perps/perp-analytics-tools.d.ts.map +1 -0
  74. package/dist/perps/perp-analytics-tools.js +868 -0
  75. package/dist/perps/perp-analytics-tools.js.map +1 -0
  76. package/dist/perps/perp-constants.d.ts +362 -0
  77. package/dist/perps/perp-constants.d.ts.map +1 -0
  78. package/dist/perps/perp-constants.js +210 -0
  79. package/dist/perps/perp-constants.js.map +1 -0
  80. package/dist/perps/perp-decoders.d.ts +47 -0
  81. package/dist/perps/perp-decoders.d.ts.map +1 -0
  82. package/dist/perps/perp-decoders.js +332 -0
  83. package/dist/perps/perp-decoders.js.map +1 -0
  84. package/dist/policy/policy-engine.d.ts +42 -0
  85. package/dist/policy/policy-engine.d.ts.map +1 -1
  86. package/dist/policy/policy-engine.js +43 -0
  87. package/dist/policy/policy-engine.js.map +1 -1
  88. package/dist/premium/activation-manager.d.ts.map +1 -1
  89. package/dist/premium/activation-manager.js +20 -2
  90. package/dist/premium/activation-manager.js.map +1 -1
  91. package/dist/prompts/context/sap-agent-context.prompt.js +15 -1
  92. package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -1
  93. package/dist/server/server-metadata.d.ts +13 -0
  94. package/dist/server/server-metadata.d.ts.map +1 -1
  95. package/dist/server/server-metadata.js +15 -2
  96. package/dist/server/server-metadata.js.map +1 -1
  97. package/dist/solana/ata-utils.d.ts +39 -0
  98. package/dist/solana/ata-utils.d.ts.map +1 -0
  99. package/dist/solana/ata-utils.js +49 -0
  100. package/dist/solana/ata-utils.js.map +1 -0
  101. package/dist/strategies/trade-journal.d.ts +78 -0
  102. package/dist/strategies/trade-journal.d.ts.map +1 -0
  103. package/dist/strategies/trade-journal.js +92 -0
  104. package/dist/strategies/trade-journal.js.map +1 -0
  105. package/dist/tools/adrena/adrena-commodity-tools.d.ts +15 -0
  106. package/dist/tools/adrena/adrena-commodity-tools.d.ts.map +1 -0
  107. package/dist/tools/adrena/adrena-commodity-tools.js +137 -0
  108. package/dist/tools/adrena/adrena-commodity-tools.js.map +1 -0
  109. package/dist/tools/adrena/adrena-data-tools.d.ts +23 -0
  110. package/dist/tools/adrena/adrena-data-tools.d.ts.map +1 -0
  111. package/dist/tools/adrena/adrena-data-tools.js +437 -0
  112. package/dist/tools/adrena/adrena-data-tools.js.map +1 -0
  113. package/dist/tools/adrena/adrena-helpers.d.ts +46 -0
  114. package/dist/tools/adrena/adrena-helpers.d.ts.map +1 -0
  115. package/dist/tools/adrena/adrena-helpers.js +41 -0
  116. package/dist/tools/adrena/adrena-helpers.js.map +1 -0
  117. package/dist/tools/adrena/adrena-index.d.ts +20 -0
  118. package/dist/tools/adrena/adrena-index.d.ts.map +1 -0
  119. package/dist/tools/adrena/adrena-index.js +75 -0
  120. package/dist/tools/adrena/adrena-index.js.map +1 -0
  121. package/dist/tools/adrena/adrena-limit-order-tools.d.ts +22 -0
  122. package/dist/tools/adrena/adrena-limit-order-tools.d.ts.map +1 -0
  123. package/dist/tools/adrena/adrena-limit-order-tools.js +91 -0
  124. package/dist/tools/adrena/adrena-limit-order-tools.js.map +1 -0
  125. package/dist/tools/adrena/adrena-liquidity-tools.d.ts +15 -0
  126. package/dist/tools/adrena/adrena-liquidity-tools.d.ts.map +1 -0
  127. package/dist/tools/adrena/adrena-liquidity-tools.js +108 -0
  128. package/dist/tools/adrena/adrena-liquidity-tools.js.map +1 -0
  129. package/dist/tools/adrena/adrena-snapshot-tools.d.ts +42 -0
  130. package/dist/tools/adrena/adrena-snapshot-tools.d.ts.map +1 -0
  131. package/dist/tools/adrena/adrena-snapshot-tools.js +124 -0
  132. package/dist/tools/adrena/adrena-snapshot-tools.js.map +1 -0
  133. package/dist/tools/adrena/adrena-staking-tools.d.ts +15 -0
  134. package/dist/tools/adrena/adrena-staking-tools.d.ts.map +1 -0
  135. package/dist/tools/adrena/adrena-staking-tools.js +139 -0
  136. package/dist/tools/adrena/adrena-staking-tools.js.map +1 -0
  137. package/dist/tools/adrena/adrena-trading-tools.d.ts +78 -0
  138. package/dist/tools/adrena/adrena-trading-tools.d.ts.map +1 -0
  139. package/dist/tools/adrena/adrena-trading-tools.js +556 -0
  140. package/dist/tools/adrena/adrena-trading-tools.js.map +1 -0
  141. package/dist/tools/adrena-tools.d.ts +1 -66
  142. package/dist/tools/adrena-tools.d.ts.map +1 -1
  143. package/dist/tools/adrena-tools.js +1 -1061
  144. package/dist/tools/adrena-tools.js.map +1 -1
  145. package/dist/tools/client-sdk-tools.js +1 -1
  146. package/dist/tools/client-sdk-tools.js.map +1 -1
  147. package/dist/tools/memory-tools.d.ts.map +1 -1
  148. package/dist/tools/memory-tools.js +170 -0
  149. package/dist/tools/memory-tools.js.map +1 -1
  150. package/dist/tools/perp-tools.d.ts +6 -174
  151. package/dist/tools/perp-tools.d.ts.map +1 -1
  152. package/dist/tools/perp-tools.js +6 -1716
  153. package/dist/tools/perp-tools.js.map +1 -1
  154. package/dist/tools/premium-tools.d.ts.map +1 -1
  155. package/dist/tools/premium-tools.js +123 -5
  156. package/dist/tools/premium-tools.js.map +1 -1
  157. package/dist/tools/transaction-tools.d.ts +21 -1
  158. package/dist/tools/transaction-tools.d.ts.map +1 -1
  159. package/dist/tools/transaction-tools.js +114 -30
  160. package/dist/tools/transaction-tools.js.map +1 -1
  161. package/dist/tools/x402-paid-call-tool.d.ts.map +1 -1
  162. package/dist/tools/x402-paid-call-tool.js +288 -0
  163. package/dist/tools/x402-paid-call-tool.js.map +1 -1
  164. package/package.json +3 -2
  165. package/server.json +3 -3
@@ -0,0 +1,341 @@
1
+ /**
2
+ * @name perps/chart-tools
3
+ * @description Chart tool registrations: OHLC, long-term price history, and volume profile.
4
+ *
5
+ * @module perps/chart-tools
6
+ */
7
+ import { createTextResponse } from '../adapters/mcp/tool-response.js';
8
+ import { registerTool } from '../adapters/mcp/sdk-compat.js';
9
+ import { DEFAULT_VP_BUCKETS, DEXSCREENER_API_URL, DEFILAMA_API_URL, VALUE_AREA_PCT, timedFetch, } from './perp-constants.js';
10
+ /* ═══════════════════════════════════════════════════════════════════
11
+ * Tool 4: sap_chart_ohlc
12
+ * ═══════════════════════════════════════════════════════════════════ */
13
+ /**
14
+ * @name registerChartOhlcTool
15
+ * @description Register the sap_chart_ohlc read-only tool.
16
+ *
17
+ * Fetches OHLC candlestick data for any Solana token from DexScreener's
18
+ * free REST API.
19
+ *
20
+ * @param server — MCP server instance.
21
+ * @param context — Runtime context (unused — pure REST call).
22
+ *
23
+ * @internal
24
+ */
25
+ export function registerChartOhlcTool(server, _context) {
26
+ const schema = {
27
+ type: 'object',
28
+ properties: {
29
+ mint: {
30
+ type: 'string',
31
+ description: 'Token mint address (base58) to fetch OHLC data for.',
32
+ },
33
+ resolution: {
34
+ type: 'string',
35
+ description: 'Chart resolution: "5m", "1h", "6h", "24h" (default "1h").',
36
+ enum: ['5m', '1h', '6h', '24h'],
37
+ },
38
+ },
39
+ required: ['mint'],
40
+ additionalProperties: false,
41
+ };
42
+ registerTool(server, 'sap_chart_ohlc', {
43
+ description: 'Fetch OHLC candlestick data for any Solana token from DexScreener. Returns open, high, low, close, volume, liquidity, and FDV. Read-only — uses free DexScreener REST API.',
44
+ inputSchema: schema,
45
+ }, async (args) => {
46
+ const mint = typeof args['mint'] === 'string' ? args['mint'] : '';
47
+ const resolution = typeof args['resolution'] === 'string' ? args['resolution'] : '1h';
48
+ if (!mint) {
49
+ return createTextResponse(JSON.stringify({ error: 'mint is required' }), { isError: true });
50
+ }
51
+ const url = `${DEXSCREENER_API_URL}/tokens/v1/solana/${encodeURIComponent(mint)}`;
52
+ const pairs = await timedFetch(url);
53
+ if (!pairs || pairs.length === 0) {
54
+ return createTextResponse(JSON.stringify({
55
+ error: 'No DexScreener pairs found for this mint',
56
+ mint,
57
+ }), { isError: true });
58
+ }
59
+ const pair = pairs[0];
60
+ const priceUsd = pair.priceUsd ? parseFloat(pair.priceUsd) : 0;
61
+ if (priceUsd <= 0) {
62
+ return createTextResponse(JSON.stringify({
63
+ error: 'No valid price data from DexScreener',
64
+ mint,
65
+ }), { isError: true });
66
+ }
67
+ const priceChange = pair.priceChange ?? {};
68
+ const volume = pair.volume ?? {};
69
+ const liquidity = pair.liquidity?.usd ?? 0;
70
+ const fdv = pair.fdv ?? 0;
71
+ // Derive OHLC from price change percentages for the requested resolution.
72
+ const changeMap = {
73
+ '5m': priceChange['m5'] ?? 0,
74
+ '1h': priceChange['h1'] ?? 0,
75
+ '6h': priceChange['h6'] ?? 0,
76
+ '24h': priceChange['h24'] ?? 0,
77
+ };
78
+ const changePct = changeMap[resolution] ?? changeMap['1h'];
79
+ const open = priceUsd / (1 + changePct / 100);
80
+ const close = priceUsd;
81
+ const high = Math.max(open, close) * 1.001;
82
+ const low = Math.min(open, close) * 0.999;
83
+ const volMap = {
84
+ '5m': (volume['m5'] ?? 0),
85
+ '1h': (volume['h1'] ?? 0),
86
+ '6h': (volume['h6'] ?? 0),
87
+ '24h': (volume['h24'] ?? 0),
88
+ };
89
+ const vol = volMap[resolution] ?? volMap['1h'];
90
+ const candle = {
91
+ timestamp: Date.now(),
92
+ open,
93
+ high,
94
+ low,
95
+ close,
96
+ volume: vol,
97
+ };
98
+ return createTextResponse(JSON.stringify({
99
+ mint,
100
+ symbol: pair.baseToken?.symbol ?? 'unknown',
101
+ resolution,
102
+ candle,
103
+ liquidityUsd: liquidity,
104
+ fdv,
105
+ priceUsd,
106
+ }));
107
+ });
108
+ }
109
+ /* ═══════════════════════════════════════════════════════════════════
110
+ * Tool 5: sap_chart_long_term
111
+ * ═══════════════════════════════════════════════════════════════════ */
112
+ /**
113
+ * @name registerChartLongTermTool
114
+ * @description Register the sap_chart_long_term read-only tool.
115
+ *
116
+ * Fetches long-term price history for a Solana token from DexScreener
117
+ * and optional protocol TVL data from DeFiLlama.
118
+ *
119
+ * @param server — MCP server instance.
120
+ * @param context — Runtime context (unused — pure REST call).
121
+ *
122
+ * @internal
123
+ */
124
+ export function registerChartLongTermTool(server, _context) {
125
+ const schema = {
126
+ type: 'object',
127
+ properties: {
128
+ mint: {
129
+ type: 'string',
130
+ description: 'Token mint address (base58) for price history.',
131
+ },
132
+ protocol: {
133
+ type: 'string',
134
+ description: 'Optional DeFiLlama protocol slug for TVL history (e.g. "jupiter", "raydium").',
135
+ },
136
+ },
137
+ required: ['mint'],
138
+ additionalProperties: false,
139
+ };
140
+ registerTool(server, 'sap_chart_long_term', {
141
+ description: 'Fetch long-term price history for a Solana token from DexScreener and optional protocol TVL data from DeFiLlama. Returns price changes, volume, liquidity, FDV, and TVL history. Read-only — uses free REST APIs.',
142
+ inputSchema: schema,
143
+ }, async (args) => {
144
+ const mint = typeof args['mint'] === 'string' ? args['mint'] : '';
145
+ const protocol = typeof args['protocol'] === 'string' ? args['protocol'] : '';
146
+ if (!mint) {
147
+ return createTextResponse(JSON.stringify({ error: 'mint is required' }), { isError: true });
148
+ }
149
+ // Fetch token price data from DexScreener.
150
+ const dexUrl = `${DEXSCREENER_API_URL}/tokens/v1/solana/${encodeURIComponent(mint)}`;
151
+ const pairs = await timedFetch(dexUrl);
152
+ let priceData = {};
153
+ if (pairs && pairs.length > 0) {
154
+ const pair = pairs[0];
155
+ priceData = {
156
+ symbol: pair.baseToken?.symbol ?? 'unknown',
157
+ priceUsd: pair.priceUsd ?? '0',
158
+ priceChange: pair.priceChange ?? {},
159
+ volume: pair.volume ?? {},
160
+ liquidityUsd: pair.liquidity?.usd ?? 0,
161
+ fdv: pair.fdv ?? 0,
162
+ };
163
+ }
164
+ // Fetch protocol TVL from DeFiLlama if requested.
165
+ let tvlData = {};
166
+ if (protocol) {
167
+ const llamaUrl = `${DEFILAMA_API_URL}/protocol/${encodeURIComponent(protocol)}`;
168
+ const protoData = await timedFetch(llamaUrl);
169
+ if (protoData) {
170
+ tvlData = {
171
+ name: protoData.name,
172
+ currentTvl: protoData.tvl,
173
+ change1d: protoData.change_1d,
174
+ change7d: protoData.change_7d,
175
+ marketcap: protoData.marketcap,
176
+ chain: protoData.chain,
177
+ };
178
+ }
179
+ }
180
+ if (Object.keys(priceData).length === 0 && Object.keys(tvlData).length === 0) {
181
+ return createTextResponse(JSON.stringify({
182
+ error: 'No data available from DexScreener or DeFiLlama',
183
+ mint,
184
+ protocol,
185
+ }), { isError: true });
186
+ }
187
+ return createTextResponse(JSON.stringify({
188
+ mint,
189
+ token: priceData,
190
+ protocolTvl: tvlData,
191
+ }));
192
+ });
193
+ }
194
+ /* ═══════════════════════════════════════════════════════════════════
195
+ * Tool 6: sap_chart_volume_profile
196
+ * ═══════════════════════════════════════════════════════════════════ */
197
+ /**
198
+ * @name computeVolumeProfile
199
+ * @description Compute volume profile (POC, VAH, VAL) from price and volume arrays.
200
+ *
201
+ * Pure TypeScript implementation — no external indicator library.
202
+ *
203
+ * @param prices — Array of price points.
204
+ * @param volumes — Array of volume values (same length as prices).
205
+ * @param bucketCount — Number of price buckets (default 20).
206
+ * @returns Volume profile result with POC, VAH, VAL, and buckets.
207
+ *
208
+ * @internal
209
+ */
210
+ function computeVolumeProfile(prices, volumes, bucketCount = DEFAULT_VP_BUCKETS) {
211
+ if (prices.length === 0 || volumes.length === 0) {
212
+ return { poc: 0, vah: 0, val: 0, buckets: [] };
213
+ }
214
+ const minPrice = Math.min(...prices);
215
+ const maxPrice = Math.max(...prices);
216
+ const range = maxPrice - minPrice;
217
+ if (range === 0) {
218
+ return { poc: minPrice, vah: minPrice, val: minPrice, buckets: [{ priceLow: minPrice, priceHigh: minPrice, volume: volumes.reduce((a, b) => a + b, 0), pctOfTotal: 1 }] };
219
+ }
220
+ const bucketSize = range / bucketCount;
221
+ const buckets = Array.from({ length: bucketCount }, (_, i) => ({
222
+ priceLow: minPrice + i * bucketSize,
223
+ priceHigh: minPrice + (i + 1) * bucketSize,
224
+ volume: 0,
225
+ pctOfTotal: 0,
226
+ }));
227
+ const totalVolume = volumes.reduce((a, b) => a + b, 0);
228
+ if (totalVolume === 0) {
229
+ return { poc: minPrice, vah: maxPrice, val: minPrice, buckets };
230
+ }
231
+ for (let i = 0; i < prices.length; i++) {
232
+ const bucketIdx = Math.min(Math.floor((prices[i] - minPrice) / bucketSize), bucketCount - 1);
233
+ buckets[bucketIdx].volume += volumes[i];
234
+ }
235
+ for (const b of buckets) {
236
+ b.pctOfTotal = b.volume / totalVolume;
237
+ }
238
+ // POC = bucket with highest volume.
239
+ let pocIdx = 0;
240
+ for (let i = 1; i < buckets.length; i++) {
241
+ if (buckets[i].volume > buckets[pocIdx].volume)
242
+ pocIdx = i;
243
+ }
244
+ const poc = (buckets[pocIdx].priceLow + buckets[pocIdx].priceHigh) / 2;
245
+ // Value area: 70% of volume around POC.
246
+ let volAccum = buckets[pocIdx].volume;
247
+ let lowIdx = pocIdx - 1;
248
+ let highIdx = pocIdx + 1;
249
+ while (volAccum / totalVolume < VALUE_AREA_PCT && (lowIdx >= 0 || highIdx < buckets.length)) {
250
+ const lowVol = lowIdx >= 0 ? buckets[lowIdx].volume : 0;
251
+ const highVol = highIdx < buckets.length ? buckets[highIdx].volume : 0;
252
+ if (lowVol >= highVol && lowIdx >= 0) {
253
+ volAccum += lowVol;
254
+ lowIdx--;
255
+ }
256
+ else if (highIdx < buckets.length) {
257
+ volAccum += highVol;
258
+ highIdx++;
259
+ }
260
+ else {
261
+ break;
262
+ }
263
+ }
264
+ const val = buckets[lowIdx + 1]?.priceLow ?? minPrice;
265
+ const vah = buckets[highIdx - 1]?.priceHigh ?? maxPrice;
266
+ return { poc, vah, val, buckets };
267
+ }
268
+ /**
269
+ * @name registerChartVolumeProfileTool
270
+ * @description Register the sap_chart_volume_profile read-only tool.
271
+ *
272
+ * @param server — MCP server instance.
273
+ * @param context — Runtime context (unused — pure REST + local math).
274
+ *
275
+ * @internal
276
+ */
277
+ export function registerChartVolumeProfileTool(server, _context) {
278
+ const schema = {
279
+ type: 'object',
280
+ properties: {
281
+ mint: {
282
+ type: 'string',
283
+ description: 'Token mint address (base58) to compute volume profile for.',
284
+ },
285
+ buckets: {
286
+ type: 'number',
287
+ description: 'Number of price buckets (default 20).',
288
+ minimum: 5,
289
+ maximum: 100,
290
+ },
291
+ },
292
+ required: ['mint'],
293
+ additionalProperties: false,
294
+ };
295
+ registerTool(server, 'sap_chart_volume_profile', {
296
+ description: 'Compute volume profile (POC, VAH, VAL) for any Solana token using DexScreener price and volume data. Returns point of control, value area high/low, and bucket distribution. Read-only — uses free DexScreener REST API + local computation.',
297
+ inputSchema: schema,
298
+ }, async (args) => {
299
+ const mint = typeof args['mint'] === 'string' ? args['mint'] : '';
300
+ const bucketCount = typeof args['buckets'] === 'number' ? args['buckets'] : DEFAULT_VP_BUCKETS;
301
+ if (!mint) {
302
+ return createTextResponse(JSON.stringify({ error: 'mint is required' }), { isError: true });
303
+ }
304
+ // Fetch token data from DexScreener.
305
+ const url = `${DEXSCREENER_API_URL}/tokens/v1/solana/${encodeURIComponent(mint)}`;
306
+ const pairs = await timedFetch(url);
307
+ if (!pairs || pairs.length === 0) {
308
+ return createTextResponse(JSON.stringify({ error: 'No DexScreener data for this mint' }), { isError: true });
309
+ }
310
+ const pair = pairs[0];
311
+ const priceUsd = pair.priceUsd ? parseFloat(pair.priceUsd) : 0;
312
+ if (priceUsd <= 0) {
313
+ return createTextResponse(JSON.stringify({ error: 'No valid price data' }), { isError: true });
314
+ }
315
+ // Derive price points from price change percentages.
316
+ const pc = pair.priceChange ?? {};
317
+ const vol = pair.volume ?? {};
318
+ const prices = [
319
+ priceUsd / (1 + (pc['m5'] ?? 0) / 100),
320
+ priceUsd / (1 + (pc['h1'] ?? 0) / 100),
321
+ priceUsd / (1 + (pc['h6'] ?? 0) / 100),
322
+ priceUsd / (1 + (pc['h24'] ?? 0) / 100),
323
+ priceUsd,
324
+ ];
325
+ const volumes = [
326
+ vol['m5'] ?? 0,
327
+ vol['h1'] ?? 0,
328
+ vol['h6'] ?? 0,
329
+ vol['h24'] ?? 0,
330
+ vol['h24'] ?? 0,
331
+ ];
332
+ const profile = computeVolumeProfile(prices, volumes, bucketCount);
333
+ return createTextResponse(JSON.stringify({
334
+ mint,
335
+ symbol: pair.baseToken?.symbol ?? 'unknown',
336
+ priceUsd,
337
+ volumeProfile: profile,
338
+ }));
339
+ });
340
+ }
341
+ //# sourceMappingURL=chart-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-tools.js","sourceRoot":"","sources":["../../src/perps/chart-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @name perps/perp-analytics-tools
3
+ * @description Perp analytics tool registrations: markets, position info, funding history,
4
+ * liquidation zones, trade plan, builder status, and optional order builder.
5
+ *
6
+ * @module perps/perp-analytics-tools
7
+ */
8
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
9
+ import type { SapMcpContext } from '../core/types.js';
10
+ /**
11
+ * @name registerPerpTools
12
+ * @description Register perp trading analytics, planning, and optional execution-builder tools.
13
+ *
14
+ * @param server — MCP server instance.
15
+ * @param context — Shared runtime context with SAP client, connection, and config.
16
+ *
17
+ * @usedBy `register-tools.ts`
18
+ */
19
+ export declare function registerPerpTools(server: Server, context: SapMcpContext): void;
20
+ //# sourceMappingURL=perp-analytics-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"perp-analytics-tools.d.ts","sourceRoot":"","sources":["../../src/perps/perp-analytics-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AA84BtD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAiB9E"}