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

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 (178) 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/config/mcp-client-injection.d.ts +1 -1
  6. package/dist/config/mcp-client-injection.d.ts.map +1 -1
  7. package/dist/config/mcp-client-injection.js +35 -0
  8. package/dist/config/mcp-client-injection.js.map +1 -1
  9. package/dist/config/wizard.js +2 -2
  10. package/dist/config/wizard.js.map +1 -1
  11. package/dist/core/constants.d.ts +1 -1
  12. package/dist/core/constants.js +1 -1
  13. package/dist/core/logger.js +1 -1
  14. package/dist/payments/monetization-gate.d.ts +5 -0
  15. package/dist/payments/monetization-gate.d.ts.map +1 -1
  16. package/dist/payments/monetization-gate.js +39 -2
  17. package/dist/payments/monetization-gate.js.map +1 -1
  18. package/dist/payments/prepaid-credit-store.d.ts +111 -0
  19. package/dist/payments/prepaid-credit-store.d.ts.map +1 -0
  20. package/dist/payments/prepaid-credit-store.js +230 -0
  21. package/dist/payments/prepaid-credit-store.js.map +1 -0
  22. package/dist/payments/pricing.d.ts.map +1 -1
  23. package/dist/payments/pricing.js +1 -0
  24. package/dist/payments/pricing.js.map +1 -1
  25. package/dist/payments/schema-validation.d.ts +52 -0
  26. package/dist/payments/schema-validation.d.ts.map +1 -0
  27. package/dist/payments/schema-validation.js +112 -0
  28. package/dist/payments/schema-validation.js.map +1 -0
  29. package/dist/payments/x402-paid-call.d.ts +21 -0
  30. package/dist/payments/x402-paid-call.d.ts.map +1 -1
  31. package/dist/payments/x402-paid-call.js +108 -3
  32. package/dist/payments/x402-paid-call.js.map +1 -1
  33. package/dist/perps/adrena/adrena-builder-commodity.d.ts +63 -0
  34. package/dist/perps/adrena/adrena-builder-commodity.d.ts.map +1 -0
  35. package/dist/perps/adrena/adrena-builder-commodity.js +200 -0
  36. package/dist/perps/adrena/adrena-builder-commodity.js.map +1 -0
  37. package/dist/perps/adrena/adrena-builder-core.d.ts +319 -0
  38. package/dist/perps/adrena/adrena-builder-core.d.ts.map +1 -0
  39. package/dist/perps/adrena/adrena-builder-core.js +516 -0
  40. package/dist/perps/adrena/adrena-builder-core.js.map +1 -0
  41. package/dist/perps/adrena/adrena-builder-liquidity.d.ts +50 -0
  42. package/dist/perps/adrena/adrena-builder-liquidity.d.ts.map +1 -0
  43. package/dist/perps/adrena/adrena-builder-liquidity.js +196 -0
  44. package/dist/perps/adrena/adrena-builder-liquidity.js.map +1 -0
  45. package/dist/perps/adrena/adrena-builder-staking.d.ts +57 -0
  46. package/dist/perps/adrena/adrena-builder-staking.d.ts.map +1 -0
  47. package/dist/perps/adrena/adrena-builder-staking.js +368 -0
  48. package/dist/perps/adrena/adrena-builder-staking.js.map +1 -0
  49. package/dist/perps/adrena/adrena-builder-trading.d.ts +160 -0
  50. package/dist/perps/adrena/adrena-builder-trading.d.ts.map +1 -0
  51. package/dist/perps/adrena/adrena-builder-trading.js +835 -0
  52. package/dist/perps/adrena/adrena-builder-trading.js.map +1 -0
  53. package/dist/perps/adrena/adrena-builder.d.ts +14 -293
  54. package/dist/perps/adrena/adrena-builder.d.ts.map +1 -1
  55. package/dist/perps/adrena/adrena-builder.js +14 -1140
  56. package/dist/perps/adrena/adrena-builder.js.map +1 -1
  57. package/dist/perps/adrena/adrena-constants.d.ts +33 -5
  58. package/dist/perps/adrena/adrena-constants.d.ts.map +1 -1
  59. package/dist/perps/adrena/adrena-constants.js +29 -7
  60. package/dist/perps/adrena/adrena-constants.js.map +1 -1
  61. package/dist/perps/adrena/adrena-idl.d.ts +15084 -0
  62. package/dist/perps/adrena/adrena-idl.d.ts.map +1 -0
  63. package/dist/perps/adrena/adrena-idl.js +29902 -0
  64. package/dist/perps/adrena/adrena-idl.js.map +1 -0
  65. package/dist/perps/adrena/adrena-pda.d.ts +5 -4
  66. package/dist/perps/adrena/adrena-pda.d.ts.map +1 -1
  67. package/dist/perps/adrena/adrena-pda.js +6 -10
  68. package/dist/perps/adrena/adrena-pda.js.map +1 -1
  69. package/dist/perps/adrena/index.d.ts +1 -0
  70. package/dist/perps/adrena/index.d.ts.map +1 -1
  71. package/dist/perps/adrena/index.js +1 -0
  72. package/dist/perps/adrena/index.js.map +1 -1
  73. package/dist/perps/chart-indicators.d.ts +27 -0
  74. package/dist/perps/chart-indicators.d.ts.map +1 -0
  75. package/dist/perps/chart-indicators.js +345 -0
  76. package/dist/perps/chart-indicators.js.map +1 -0
  77. package/dist/perps/chart-tools.d.ts +45 -0
  78. package/dist/perps/chart-tools.d.ts.map +1 -0
  79. package/dist/perps/chart-tools.js +341 -0
  80. package/dist/perps/chart-tools.js.map +1 -0
  81. package/dist/perps/perp-analytics-tools.d.ts +20 -0
  82. package/dist/perps/perp-analytics-tools.d.ts.map +1 -0
  83. package/dist/perps/perp-analytics-tools.js +868 -0
  84. package/dist/perps/perp-analytics-tools.js.map +1 -0
  85. package/dist/perps/perp-constants.d.ts +362 -0
  86. package/dist/perps/perp-constants.d.ts.map +1 -0
  87. package/dist/perps/perp-constants.js +210 -0
  88. package/dist/perps/perp-constants.js.map +1 -0
  89. package/dist/perps/perp-decoders.d.ts +47 -0
  90. package/dist/perps/perp-decoders.d.ts.map +1 -0
  91. package/dist/perps/perp-decoders.js +332 -0
  92. package/dist/perps/perp-decoders.js.map +1 -0
  93. package/dist/policy/policy-engine.d.ts +42 -0
  94. package/dist/policy/policy-engine.d.ts.map +1 -1
  95. package/dist/policy/policy-engine.js +43 -0
  96. package/dist/policy/policy-engine.js.map +1 -1
  97. package/dist/premium/activation-manager.d.ts.map +1 -1
  98. package/dist/premium/activation-manager.js +20 -2
  99. package/dist/premium/activation-manager.js.map +1 -1
  100. package/dist/prompts/context/sap-agent-context.prompt.js +15 -1
  101. package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -1
  102. package/dist/server/server-metadata.d.ts +13 -0
  103. package/dist/server/server-metadata.d.ts.map +1 -1
  104. package/dist/server/server-metadata.js +15 -2
  105. package/dist/server/server-metadata.js.map +1 -1
  106. package/dist/solana/ata-utils.d.ts +39 -0
  107. package/dist/solana/ata-utils.d.ts.map +1 -0
  108. package/dist/solana/ata-utils.js +49 -0
  109. package/dist/solana/ata-utils.js.map +1 -0
  110. package/dist/strategies/trade-journal.d.ts +78 -0
  111. package/dist/strategies/trade-journal.d.ts.map +1 -0
  112. package/dist/strategies/trade-journal.js +92 -0
  113. package/dist/strategies/trade-journal.js.map +1 -0
  114. package/dist/tools/adrena/adrena-commodity-tools.d.ts +15 -0
  115. package/dist/tools/adrena/adrena-commodity-tools.d.ts.map +1 -0
  116. package/dist/tools/adrena/adrena-commodity-tools.js +137 -0
  117. package/dist/tools/adrena/adrena-commodity-tools.js.map +1 -0
  118. package/dist/tools/adrena/adrena-data-tools.d.ts +23 -0
  119. package/dist/tools/adrena/adrena-data-tools.d.ts.map +1 -0
  120. package/dist/tools/adrena/adrena-data-tools.js +437 -0
  121. package/dist/tools/adrena/adrena-data-tools.js.map +1 -0
  122. package/dist/tools/adrena/adrena-helpers.d.ts +46 -0
  123. package/dist/tools/adrena/adrena-helpers.d.ts.map +1 -0
  124. package/dist/tools/adrena/adrena-helpers.js +41 -0
  125. package/dist/tools/adrena/adrena-helpers.js.map +1 -0
  126. package/dist/tools/adrena/adrena-index.d.ts +20 -0
  127. package/dist/tools/adrena/adrena-index.d.ts.map +1 -0
  128. package/dist/tools/adrena/adrena-index.js +75 -0
  129. package/dist/tools/adrena/adrena-index.js.map +1 -0
  130. package/dist/tools/adrena/adrena-limit-order-tools.d.ts +22 -0
  131. package/dist/tools/adrena/adrena-limit-order-tools.d.ts.map +1 -0
  132. package/dist/tools/adrena/adrena-limit-order-tools.js +91 -0
  133. package/dist/tools/adrena/adrena-limit-order-tools.js.map +1 -0
  134. package/dist/tools/adrena/adrena-liquidity-tools.d.ts +15 -0
  135. package/dist/tools/adrena/adrena-liquidity-tools.d.ts.map +1 -0
  136. package/dist/tools/adrena/adrena-liquidity-tools.js +108 -0
  137. package/dist/tools/adrena/adrena-liquidity-tools.js.map +1 -0
  138. package/dist/tools/adrena/adrena-snapshot-tools.d.ts +42 -0
  139. package/dist/tools/adrena/adrena-snapshot-tools.d.ts.map +1 -0
  140. package/dist/tools/adrena/adrena-snapshot-tools.js +124 -0
  141. package/dist/tools/adrena/adrena-snapshot-tools.js.map +1 -0
  142. package/dist/tools/adrena/adrena-staking-tools.d.ts +15 -0
  143. package/dist/tools/adrena/adrena-staking-tools.d.ts.map +1 -0
  144. package/dist/tools/adrena/adrena-staking-tools.js +139 -0
  145. package/dist/tools/adrena/adrena-staking-tools.js.map +1 -0
  146. package/dist/tools/adrena/adrena-trading-tools.d.ts +78 -0
  147. package/dist/tools/adrena/adrena-trading-tools.d.ts.map +1 -0
  148. package/dist/tools/adrena/adrena-trading-tools.js +556 -0
  149. package/dist/tools/adrena/adrena-trading-tools.js.map +1 -0
  150. package/dist/tools/adrena-tools.d.ts +1 -66
  151. package/dist/tools/adrena-tools.d.ts.map +1 -1
  152. package/dist/tools/adrena-tools.js +1 -1061
  153. package/dist/tools/adrena-tools.js.map +1 -1
  154. package/dist/tools/client-sdk-tools.js +1 -1
  155. package/dist/tools/client-sdk-tools.js.map +1 -1
  156. package/dist/tools/memory-tools.d.ts.map +1 -1
  157. package/dist/tools/memory-tools.js +170 -0
  158. package/dist/tools/memory-tools.js.map +1 -1
  159. package/dist/tools/perp-tools.d.ts +6 -174
  160. package/dist/tools/perp-tools.d.ts.map +1 -1
  161. package/dist/tools/perp-tools.js +6 -1716
  162. package/dist/tools/perp-tools.js.map +1 -1
  163. package/dist/tools/premium-tools.d.ts.map +1 -1
  164. package/dist/tools/premium-tools.js +123 -5
  165. package/dist/tools/premium-tools.js.map +1 -1
  166. package/dist/tools/skills-tools.d.ts.map +1 -1
  167. package/dist/tools/skills-tools.js +7 -4
  168. package/dist/tools/skills-tools.js.map +1 -1
  169. package/dist/tools/transaction-tools.d.ts +21 -1
  170. package/dist/tools/transaction-tools.d.ts.map +1 -1
  171. package/dist/tools/transaction-tools.js +114 -30
  172. package/dist/tools/transaction-tools.js.map +1 -1
  173. package/dist/tools/x402-paid-call-tool.d.ts.map +1 -1
  174. package/dist/tools/x402-paid-call-tool.js +288 -0
  175. package/dist/tools/x402-paid-call-tool.js.map +1 -1
  176. package/package.json +3 -2
  177. package/server.json +3 -3
  178. package/skills/sap-clawpump-bridge/SKILL.md +206 -0
@@ -0,0 +1,437 @@
1
+ /**
2
+ * @name tools/adrena/adrena-data-tools
3
+ * @description Data API and on-chain market reader tool registrations for Adrena.
4
+ *
5
+ * @module tools/adrena/adrena-data-tools
6
+ */
7
+ import { PublicKey } from '@solana/web3.js';
8
+ import { createTextResponse } from '../../adapters/mcp/tool-response.js';
9
+ import { registerTool } from '../../adapters/mcp/sdk-compat.js';
10
+ import { adrenaDataApi, } from '../../perps/adrena/index.js';
11
+ import { ADRENA_CUSTODIES, ADRENA_MAIN_POOL_ADDRESS, ADRENA_COMMODITIES_POOL_ADDRESS } from '../../perps/adrena/adrena-constants.js';
12
+ import { getConnection, } from './adrena-helpers.js';
13
+ /* ═══════════════════════════════════════════════════════════════════
14
+ * Data API Tools
15
+ * ═══════════════════════════════════════════════════════════════════ */
16
+ /**
17
+ * @name registerAdrenaDataApiTools
18
+ * @description Register Adrena Data API (REST) tools for market data and analytics.
19
+ * @internal
20
+ */
21
+ export function registerAdrenaDataApiTools(server, context) {
22
+ // Get positions
23
+ registerTool(server, 'sap_adrena_get_positions', {
24
+ description: 'Fetch position history for a wallet from the Adrena Data API. Returns closed and open positions with P&L, entry/exit prices, and status.',
25
+ inputSchema: {
26
+ type: 'object',
27
+ properties: {
28
+ wallet: { type: 'string', description: 'Wallet public key (base58).' },
29
+ },
30
+ required: ['wallet'],
31
+ additionalProperties: false,
32
+ },
33
+ }, async (args) => {
34
+ const wallet = String(args['wallet'] ?? '').trim();
35
+ if (!wallet) {
36
+ return createTextResponse(JSON.stringify({ error: 'wallet is required' }), { isError: true });
37
+ }
38
+ const positions = await adrenaDataApi.getPositions(wallet);
39
+ if (positions === null) {
40
+ return createTextResponse(JSON.stringify({ error: 'Failed to fetch positions from Adrena Data API', wallet }), { isError: true });
41
+ }
42
+ return createTextResponse(JSON.stringify({ wallet, positions, count: positions.length }, null, 2));
43
+ });
44
+ // Get pool info — reads directly from on-chain Pool account (Data API endpoint is broken)
45
+ registerTool(server, 'sap_adrena_get_pool_info', {
46
+ description: 'Read Adrena pool statistics directly from the on-chain Pool account. Returns TVL (AUM), LP token price, pool name, custody list, trade/swap flags, and fees debt. This bypasses the broken datapi.adrena.trade REST endpoint and reads real data from Solana mainnet. Use this before opening positions to check pool health and available custodies.',
47
+ inputSchema: {
48
+ type: 'object',
49
+ properties: {
50
+ poolName: { type: 'string', description: 'Pool name. Supported: main-pool (default), commodities-pool.', enum: ['main-pool', 'commodities-pool'] },
51
+ },
52
+ additionalProperties: false,
53
+ },
54
+ }, async (args) => {
55
+ try {
56
+ const poolName = args['poolName'] === 'commodities-pool' ? 'commodities-pool' : 'main-pool';
57
+ const connection = getConnection(context);
58
+ const poolAddress = poolName === 'commodities-pool'
59
+ ? ADRENA_COMMODITIES_POOL_ADDRESS
60
+ : ADRENA_MAIN_POOL_ADDRESS;
61
+ const accountInfo = await connection.getAccountInfo(new PublicKey(poolAddress), 'confirmed');
62
+ if (!accountInfo || !accountInfo.data || accountInfo.data.length < 48) {
63
+ return createTextResponse(JSON.stringify({ error: `Pool account ${poolAddress} not found or too small` }), { isError: true });
64
+ }
65
+ const d = accountInfo.data;
66
+ // Pool layout (release/39): 8 disc + 1 bump + 1 lpBump + 1 nbStable + 1 init + 1 allowTrade + 1 allowSwap + 1 liqState + 1 custodyCount + 32 name + 256 custodies(8×32) + ...
67
+ const allowTrade = d[12] === 1;
68
+ const allowSwap = d[13] === 1;
69
+ const custodyCount = d[15];
70
+ // Name is a LimitedString at offset 16 (31 bytes + 1 length byte at offset 47)
71
+ const nameLen = d[47];
72
+ const name = d.subarray(16, 16 + Math.min(nameLen, 31)).toString('utf8').replace(/\0/g, '');
73
+ // Custodies array at offset 48 (8 × 32 bytes = 256 bytes)
74
+ const custodies = [];
75
+ for (let i = 0; i < Math.min(custodyCount, 8); i++) {
76
+ const off = 48 + i * 32;
77
+ if (off + 32 > d.length)
78
+ break;
79
+ custodies.push(new PublicKey(d.subarray(off, off + 32)).toBase58());
80
+ }
81
+ // LP token price at offset 328 (u64, USD 6 decimals)
82
+ const lpTokenPriceUsd = Number(d.readBigUInt64LE(328)) / 1e6;
83
+ // AUM at offset 448 (u64, USD 6 decimals)
84
+ const aumUsd = Number(d.readBigUInt64LE(448)) / 1e6;
85
+ // Fees debt at offset 304 (u64)
86
+ const feesDebtUsd = Number(d.readBigUInt64LE(304)) / 1e6;
87
+ // Referrers fee debt at offset 312
88
+ const referrersFeeDebtUsd = Number(d.readBigUInt64LE(312)) / 1e6;
89
+ return createTextResponse(JSON.stringify({
90
+ poolName: name || poolName,
91
+ poolAddress,
92
+ allowTrade,
93
+ allowSwap,
94
+ custodyCount,
95
+ custodies,
96
+ lpTokenPriceUsd,
97
+ aumUsd,
98
+ tvlUsd: aumUsd,
99
+ feesDebtUsd,
100
+ referrersFeeDebtUsd,
101
+ dataLength: d.length,
102
+ source: 'on-chain-rpc',
103
+ }, null, 2));
104
+ }
105
+ catch (err) {
106
+ return createTextResponse(JSON.stringify({ error: 'Failed to read pool info from on-chain account', message: err instanceof Error ? err.message : 'Unknown error' }), { isError: true });
107
+ }
108
+ });
109
+ // Get custody info
110
+ registerTool(server, 'sap_adrena_get_custody_info', {
111
+ description: 'Fetch per-asset custody statistics from the Adrena Data API. Returns open interest, utilization, volume, and fees for each custody.',
112
+ inputSchema: {
113
+ type: 'object',
114
+ properties: {
115
+ symbol: { type: 'string', description: 'Optional symbol filter (e.g. JITOSOL, WBTC).' },
116
+ },
117
+ additionalProperties: false,
118
+ },
119
+ }, async (args) => {
120
+ const symbol = typeof args['symbol'] === 'string' ? args['symbol'] : undefined;
121
+ const custodies = await adrenaDataApi.getCustodyInfo(symbol);
122
+ if (custodies === null) {
123
+ return createTextResponse(JSON.stringify({ error: 'Failed to fetch custody info from Adrena Data API' }), { isError: true });
124
+ }
125
+ return createTextResponse(JSON.stringify({ custodies, count: custodies.length }, null, 2));
126
+ });
127
+ // Get trader info
128
+ registerTool(server, 'sap_adrena_get_trader_info', {
129
+ description: 'Fetch trader performance metrics from the Adrena Data API. Returns total volume, P&L, fees, win rate, and rank.',
130
+ inputSchema: {
131
+ type: 'object',
132
+ properties: {
133
+ wallet: { type: 'string', description: 'Trader wallet public key (base58).' },
134
+ },
135
+ required: ['wallet'],
136
+ additionalProperties: false,
137
+ },
138
+ }, async (args) => {
139
+ const wallet = String(args['wallet'] ?? '').trim();
140
+ if (!wallet) {
141
+ return createTextResponse(JSON.stringify({ error: 'wallet is required' }), { isError: true });
142
+ }
143
+ const trader = await adrenaDataApi.getTraderInfo(wallet);
144
+ if (trader === null) {
145
+ return createTextResponse(JSON.stringify({ error: 'Failed to fetch trader info from Adrena Data API', wallet }), { isError: true });
146
+ }
147
+ return createTextResponse(JSON.stringify(trader, null, 2));
148
+ });
149
+ // Get trader leaderboard
150
+ registerTool(server, 'sap_adrena_get_trader_leaderboard', {
151
+ description: 'Fetch trader leaderboard from the Adrena Data API. Returns top traders by volume and P&L.',
152
+ inputSchema: {
153
+ type: 'object',
154
+ properties: {
155
+ limit: { type: 'number', description: 'Optional limit. Default 50.', minimum: 1, maximum: 500 },
156
+ },
157
+ additionalProperties: false,
158
+ },
159
+ }, async (args) => {
160
+ const limit = typeof args['limit'] === 'number' ? args['limit'] : undefined;
161
+ const traders = await adrenaDataApi.getTraderProfiles(limit);
162
+ if (traders === null) {
163
+ return createTextResponse(JSON.stringify({ error: 'Failed to fetch trader leaderboard from Adrena Data API' }), { isError: true });
164
+ }
165
+ return createTextResponse(JSON.stringify({ traders, count: traders.length }, null, 2));
166
+ });
167
+ // Get mutagen points
168
+ registerTool(server, 'sap_adrena_get_mutagen', {
169
+ description: 'Fetch Mutagen points for a wallet from the Adrena Data API. Returns total points, rank, and breakdown.',
170
+ inputSchema: {
171
+ type: 'object',
172
+ properties: {
173
+ wallet: { type: 'string', description: 'Wallet public key (base58).' },
174
+ },
175
+ required: ['wallet'],
176
+ additionalProperties: false,
177
+ },
178
+ }, async (args) => {
179
+ const wallet = String(args['wallet'] ?? '').trim();
180
+ if (!wallet) {
181
+ return createTextResponse(JSON.stringify({ error: 'wallet is required' }), { isError: true });
182
+ }
183
+ const mutagen = await adrenaDataApi.getMutagen(wallet);
184
+ if (mutagen === null) {
185
+ return createTextResponse(JSON.stringify({ error: 'Failed to fetch mutagen points from Adrena Data API', wallet }), { isError: true });
186
+ }
187
+ return createTextResponse(JSON.stringify(mutagen, null, 2));
188
+ });
189
+ // Get mutagen leaderboard
190
+ registerTool(server, 'sap_adrena_get_mutagen_leaderboard', {
191
+ description: 'Fetch Mutagen points leaderboard from the Adrena Data API. Returns top wallets by points.',
192
+ inputSchema: {
193
+ type: 'object',
194
+ properties: {
195
+ limit: { type: 'number', description: 'Optional limit. Default 50.', minimum: 1, maximum: 500 },
196
+ },
197
+ additionalProperties: false,
198
+ },
199
+ }, async (args) => {
200
+ const limit = typeof args['limit'] === 'number' ? args['limit'] : undefined;
201
+ const leaderboard = await adrenaDataApi.getMutagenLeaderboard(limit);
202
+ if (leaderboard === null) {
203
+ return createTextResponse(JSON.stringify({ error: 'Failed to fetch mutagen leaderboard from Adrena Data API' }), { isError: true });
204
+ }
205
+ return createTextResponse(JSON.stringify({ leaderboard, count: leaderboard.length }, null, 2));
206
+ });
207
+ // Get prices (ADX/ALP)
208
+ registerTool(server, 'sap_adrena_get_prices', {
209
+ description: 'Fetch current ADX and ALP token prices from the Adrena Data API.',
210
+ inputSchema: {
211
+ type: 'object',
212
+ properties: {},
213
+ additionalProperties: false,
214
+ },
215
+ }, async () => {
216
+ const prices = await adrenaDataApi.getPrice();
217
+ if (prices === null) {
218
+ return createTextResponse(JSON.stringify({ error: 'Failed to fetch prices from Adrena Data API' }), { isError: true });
219
+ }
220
+ return createTextResponse(JSON.stringify(prices, null, 2));
221
+ });
222
+ // Get last trading prices
223
+ registerTool(server, 'sap_adrena_get_trading_prices', {
224
+ description: 'Fetch latest oracle trading prices for all Adrena assets. Returns price and custody address for each traded asset.',
225
+ inputSchema: {
226
+ type: 'object',
227
+ properties: {},
228
+ additionalProperties: false,
229
+ },
230
+ }, async () => {
231
+ const prices = await adrenaDataApi.getLastTradingPrices();
232
+ if (prices === null) {
233
+ return createTextResponse(JSON.stringify({ error: 'Failed to fetch trading prices from Adrena Data API' }), { isError: true });
234
+ }
235
+ return createTextResponse(JSON.stringify({ prices, count: prices.length }, null, 2));
236
+ });
237
+ // Get position status (live P&L)
238
+ registerTool(server, 'sap_adrena_get_position_status', {
239
+ description: 'Fetch live position status (P&L, size, liquidation price, entry price, oracle price) from the Adrena Data API for a specific wallet and token.',
240
+ inputSchema: {
241
+ type: 'object',
242
+ properties: {
243
+ wallet: { type: 'string', description: 'Wallet public key (base58).' },
244
+ principalToken: { type: 'string', description: 'Principal token symbol (e.g. JITOSOL, WBTC, BONK, XAU).' },
245
+ side: { type: 'string', description: 'Position side.', enum: ['long', 'short'] },
246
+ },
247
+ required: ['wallet', 'principalToken', 'side'],
248
+ additionalProperties: false,
249
+ },
250
+ }, async (args) => {
251
+ const wallet = String(args['wallet'] ?? '').trim();
252
+ const principalToken = String(args['principalToken'] ?? '').trim().toUpperCase();
253
+ const side = args['side'] === 'short' ? 'short' : 'long';
254
+ if (!wallet || !principalToken) {
255
+ return createTextResponse(JSON.stringify({ error: 'wallet and principalToken are required' }), { isError: true });
256
+ }
257
+ const positions = await adrenaDataApi.getPositions(wallet);
258
+ if (positions === null) {
259
+ return createTextResponse(JSON.stringify({ error: 'Failed to fetch positions from Adrena Data API' }), { isError: true });
260
+ }
261
+ const matching = positions.filter(p => p.principalToken?.toUpperCase() === principalToken &&
262
+ p.side?.toLowerCase() === side);
263
+ if (matching.length === 0) {
264
+ return createTextResponse(JSON.stringify({ wallet, principalToken, side, status: 'no_open_position', message: `No ${side} position found for ${principalToken}` }));
265
+ }
266
+ return createTextResponse(JSON.stringify({ wallet, principalToken, side, positions: matching, count: matching.length }, null, 2));
267
+ });
268
+ }
269
+ /* ═══════════════════════════════════════════════════════════════════
270
+ * On-chain Markets Reader
271
+ * ═══════════════════════════════════════════════════════════════════ */
272
+ /**
273
+ * @name registerAdrenaGetMarketsTool
274
+ * @description Register sap_adrena_get_markets — reads all custody accounts on-chain
275
+ * and returns real market data: mint, decimals, max leverage, trade/swap flags,
276
+ * oracle feed IDs, open interest, and collateral stats.
277
+ * @internal
278
+ */
279
+ export function registerAdrenaGetMarketsTool(server, context) {
280
+ registerTool(server, 'sap_adrena_get_markets', {
281
+ description: 'Read all Adrena custody accounts directly from Solana mainnet and return real market data for every supported asset: mint address, decimals, max initial leverage, max leverage, allowTrade/allowSwap flags, oracle feed IDs, open interest (long/short USD), locked amounts, borrow rates, and funding rates. This is the authoritative source for what markets Adrena supports and their current on-chain parameters. Use this before opening positions to verify leverage limits and trade availability.',
282
+ inputSchema: {
283
+ type: 'object',
284
+ properties: {
285
+ poolName: {
286
+ type: 'string',
287
+ description: 'Optional pool filter. Supported: main-pool, commodities-pool. Omit for all pools.',
288
+ enum: ['main-pool', 'commodities-pool'],
289
+ },
290
+ },
291
+ additionalProperties: false,
292
+ },
293
+ }, async (args) => {
294
+ try {
295
+ const poolFilter = args['poolName'] === 'commodities-pool'
296
+ ? 'commodities-pool'
297
+ : args['poolName'] === 'main-pool'
298
+ ? 'main-pool'
299
+ : null;
300
+ const connection = getConnection(context);
301
+ const allCustodies = Object.entries(ADRENA_CUSTODIES).map(([symbol, info]) => ({
302
+ symbol,
303
+ address: info.address,
304
+ pool: info.pool === ADRENA_MAIN_POOL_ADDRESS ? 'main-pool' : 'commodities-pool',
305
+ kind: info.kind,
306
+ }));
307
+ const markets = [];
308
+ for (const cust of allCustodies) {
309
+ if (poolFilter && cust.pool !== poolFilter)
310
+ continue;
311
+ try {
312
+ const accountInfo = await connection.getAccountInfo(new PublicKey(cust.address), 'confirmed');
313
+ if (!accountInfo || !accountInfo.data || accountInfo.data.length < 916) {
314
+ markets.push({
315
+ symbol: cust.symbol,
316
+ custodyAddress: cust.address,
317
+ pool: cust.pool,
318
+ kind: cust.kind,
319
+ error: 'Custody account not found or too small',
320
+ });
321
+ continue;
322
+ }
323
+ const d = accountInfo.data;
324
+ const mintRaw = new PublicKey(d.subarray(48, 80)).toBase58();
325
+ const tokenAccount = new PublicKey(d.subarray(80, 112)).toBase58();
326
+ // Leverage values are in BPS: divide by 10000 for human-readable
327
+ const maxInitialLeverageBps = d.readUInt32LE(176);
328
+ const maxLeverageBps = d.readUInt32LE(180);
329
+ const maxPositionLockedUsd = Number(d.readBigUInt64LE(184)) / 1e6; // USD 6 decimals
330
+ // Open interest
331
+ const longOiUsd = Number(d.readBigUInt64LE(408)) / 1e6;
332
+ const shortOiUsd = Number(d.readBigUInt64LE(608)) / 1e6;
333
+ // Collateral
334
+ const longCollateralUsd = Number(d.readBigUInt64LE(472)) / 1e6;
335
+ const shortCollateralUsd = Number(d.readBigUInt64LE(672)) / 1e6;
336
+ // Locked amounts
337
+ const longLockedRaw = d.readBigUInt64LE(424).toString();
338
+ const shortLockedRaw = d.readBigUInt64LE(624).toString();
339
+ // Position counts
340
+ const longCount = Number(d.readBigUInt64LE(400));
341
+ const shortCount = Number(d.readBigUInt64LE(600));
342
+ // Borrow rate
343
+ const borrowRateRaw = d.readBigUInt64LE(800).toString();
344
+ const borrowRateLastUpdate = Number(d.readBigUInt64LE(808));
345
+ // Funding
346
+ const fundingLongToShortRaw = d.readBigUInt64LE(864).toString();
347
+ const fundingLastUpdate = Number(d.readBigUInt64LE(872));
348
+ const fundingMaxHourlyRateRaw = d.readBigUInt64LE(840).toString();
349
+ const minTotalOiUsd = Number(d.readBigUInt64LE(848)) / 1e6;
350
+ const imbalanceSensitivityBps = d.readUInt32LE(856);
351
+ // Flags
352
+ const allowTrade = d[10] === 1;
353
+ const allowSwap = d[11] === 1;
354
+ const oracleFeedId = d[914];
355
+ const tradeOracleFeedId = d[915];
356
+ // Assets
357
+ const assetsCollateralRaw = d.readBigUInt64LE(376).toString();
358
+ const assetsOwnedRaw = d.readBigUInt64LE(384).toString();
359
+ const assetsLockedRaw = d.readBigUInt64LE(392).toString();
360
+ const isSystemMint = mintRaw === '11111111111111111111111111111111';
361
+ markets.push({
362
+ symbol: cust.symbol,
363
+ custodyAddress: cust.address,
364
+ pool: cust.pool,
365
+ kind: cust.kind,
366
+ mint: isSystemMint ? null : mintRaw,
367
+ mintIsSynthetic: isSystemMint,
368
+ decimals: d[12],
369
+ tokenAccount,
370
+ allowTrade,
371
+ allowSwap,
372
+ maxInitialLeverage: maxInitialLeverageBps / 10000,
373
+ maxLeverage: maxLeverageBps / 10000,
374
+ maxInitialLeverageBps,
375
+ maxLeverageBps,
376
+ maxPositionLockedUsd,
377
+ openInterest: {
378
+ longUsd: longOiUsd,
379
+ shortUsd: shortOiUsd,
380
+ longPositions: longCount,
381
+ shortPositions: shortCount,
382
+ },
383
+ collateral: {
384
+ longUsd: longCollateralUsd,
385
+ shortUsd: shortCollateralUsd,
386
+ },
387
+ lockedAmounts: {
388
+ longRaw: longLockedRaw,
389
+ shortRaw: shortLockedRaw,
390
+ },
391
+ assets: {
392
+ collateralRaw: assetsCollateralRaw,
393
+ ownedRaw: assetsOwnedRaw,
394
+ lockedRaw: assetsLockedRaw,
395
+ },
396
+ borrowRate: {
397
+ raw: borrowRateRaw,
398
+ lastUpdate: borrowRateLastUpdate,
399
+ },
400
+ funding: {
401
+ currentLongToShortRaw: fundingLongToShortRaw,
402
+ maxHourlyRateRaw: fundingMaxHourlyRateRaw,
403
+ lastUpdate: fundingLastUpdate,
404
+ minTotalOiUsd,
405
+ imbalanceSensitivityBps,
406
+ },
407
+ oracle: {
408
+ feedId: oracleFeedId,
409
+ tradeFeedId: tradeOracleFeedId,
410
+ },
411
+ });
412
+ }
413
+ catch (err) {
414
+ markets.push({
415
+ symbol: cust.symbol,
416
+ custodyAddress: cust.address,
417
+ pool: cust.pool,
418
+ kind: cust.kind,
419
+ error: err instanceof Error ? err.message : 'Failed to read custody account',
420
+ });
421
+ }
422
+ }
423
+ return createTextResponse(JSON.stringify({
424
+ poolFilter: poolFilter ?? 'all',
425
+ marketCount: markets.length,
426
+ markets,
427
+ }, null, 2));
428
+ }
429
+ catch (err) {
430
+ return createTextResponse(JSON.stringify({
431
+ error: 'Failed to read Adrena markets from on-chain custody accounts',
432
+ message: err instanceof Error ? err.message : 'Unknown error',
433
+ }), { isError: true });
434
+ }
435
+ });
436
+ }
437
+ //# sourceMappingURL=adrena-data-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adrena-data-tools.js","sourceRoot":"","sources":["../../../src/tools/adrena/adrena-data-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @name tools/adrena/adrena-helpers
3
+ * @description Shared helpers, constants, and JSON schema types for Adrena tool modules.
4
+ *
5
+ * @module tools/adrena/adrena-helpers
6
+ */
7
+ import { PublicKey, Connection } from '@solana/web3.js';
8
+ import type { SapMcpContext } from '../../core/types.js';
9
+ export interface JsonSchemaProperty {
10
+ readonly type: string;
11
+ readonly description: string;
12
+ readonly enum?: readonly string[];
13
+ readonly minimum?: number;
14
+ readonly maximum?: number;
15
+ }
16
+ export interface JsonSchema {
17
+ readonly type: 'object';
18
+ readonly properties: Record<string, JsonSchemaProperty>;
19
+ readonly required?: readonly string[];
20
+ readonly additionalProperties?: boolean;
21
+ }
22
+ /** Supported principal tokens for the main pool. */
23
+ export declare const MAIN_POOL_TOKENS: readonly ["JITOSOL", "WBTC", "BONK"];
24
+ /** Supported commodity tokens. */
25
+ export declare const COMMODITY_TOKENS: readonly ["XAU", "XAG", "WTI"];
26
+ /** Supported collateral tokens. */
27
+ export declare const COLLATERAL_TOKENS: readonly ["USDC", "JITOSOL", "WBTC", "BONK"];
28
+ /**
29
+ * Convert a human-readable price to Adrena raw price (10^10 scaling).
30
+ * @param priceUsd — Price in USD.
31
+ * @returns Raw price as bigint.
32
+ */
33
+ export declare function priceToRaw(priceUsd: number): bigint;
34
+ /**
35
+ * Get the connection from context.
36
+ * @param context — SAP MCP context.
37
+ * @returns Solana connection.
38
+ */
39
+ export declare function getConnection(context: SapMcpContext): Connection;
40
+ /**
41
+ * Parse and validate a public key.
42
+ * @param value — Base58 public key string.
43
+ * @returns PublicKey or throws.
44
+ */
45
+ export declare function parsePublicKey(value: string): PublicKey;
46
+ //# sourceMappingURL=adrena-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adrena-helpers.d.ts","sourceRoot":"","sources":["../../../src/tools/adrena/adrena-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMzD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACxD,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;CACzC;AAMD,oDAAoD;AACpD,eAAO,MAAM,gBAAgB,sCAAuC,CAAC;AAErE,kCAAkC;AAClC,eAAO,MAAM,gBAAgB,gCAAiC,CAAC;AAE/D,mCAAmC;AACnC,eAAO,MAAM,iBAAiB,8CAA+C,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,UAAU,CAEhE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAEvD"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @name tools/adrena/adrena-helpers
3
+ * @description Shared helpers, constants, and JSON schema types for Adrena tool modules.
4
+ *
5
+ * @module tools/adrena/adrena-helpers
6
+ */
7
+ import { PublicKey } from '@solana/web3.js';
8
+ /* ═══════════════════════════════════════════════════════════════════
9
+ * Helpers
10
+ * ═══════════════════════════════════════════════════════════════════ */
11
+ /** Supported principal tokens for the main pool. */
12
+ export const MAIN_POOL_TOKENS = ['JITOSOL', 'WBTC', 'BONK'];
13
+ /** Supported commodity tokens. */
14
+ export const COMMODITY_TOKENS = ['XAU', 'XAG', 'WTI'];
15
+ /** Supported collateral tokens. */
16
+ export const COLLATERAL_TOKENS = ['USDC', 'JITOSOL', 'WBTC', 'BONK'];
17
+ /**
18
+ * Convert a human-readable price to Adrena raw price (10^10 scaling).
19
+ * @param priceUsd — Price in USD.
20
+ * @returns Raw price as bigint.
21
+ */
22
+ export function priceToRaw(priceUsd) {
23
+ return BigInt(Math.floor(priceUsd * Math.pow(10, 10)));
24
+ }
25
+ /**
26
+ * Get the connection from context.
27
+ * @param context — SAP MCP context.
28
+ * @returns Solana connection.
29
+ */
30
+ export function getConnection(context) {
31
+ return context.connection;
32
+ }
33
+ /**
34
+ * Parse and validate a public key.
35
+ * @param value — Base58 public key string.
36
+ * @returns PublicKey or throws.
37
+ */
38
+ export function parsePublicKey(value) {
39
+ return new PublicKey(value);
40
+ }
41
+ //# sourceMappingURL=adrena-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adrena-helpers.js","sourceRoot":"","sources":["../../../src/tools/adrena/adrena-helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAC;AAsBxD;;yEAEyE;AAEzE,oDAAoD;AACpD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAErE,kCAAkC;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAE/D,mCAAmC;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAE9E;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAsB;IAClD,OAAO,OAAO,CAAC,UAAU,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @name tools/adrena/adrena-index
3
+ * @description Main entry point for Adrena tool registration. Re-exports
4
+ * registerAdrenaTools which calls all sub-registrations.
5
+ *
6
+ * @module tools/adrena/adrena-index
7
+ */
8
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
9
+ import type { SapMcpContext } from '../../core/types.js';
10
+ /**
11
+ * @name registerAdrenaTools
12
+ * @description Register all Adrena perps protocol tools: trading builders, commodity builders, liquidity/swap, staking, and Data API.
13
+ *
14
+ * @param server — MCP server instance.
15
+ * @param context — Shared runtime context with Solana connection.
16
+ *
17
+ * @usedBy `register-tools.ts`
18
+ */
19
+ export declare function registerAdrenaTools(server: Server, context: SapMcpContext): void;
20
+ //# sourceMappingURL=adrena-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adrena-index.d.ts","sourceRoot":"","sources":["../../../src/tools/adrena/adrena-index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AA2BzD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CA+ChF"}