@oobe-protocol-labs/sap-mcp-server 0.9.37 → 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.
- package/.env.example +14 -0
- package/CHANGELOG.md +85 -0
- package/README.md +3 -3
- package/USER_DOCS/01_HOSTED_REMOTE_MCP.md +1 -1
- package/USER_DOCS/04_CLIENT_CONFIGS.md +3 -3
- package/USER_DOCS/06_DESKTOP_GUI_WIZARD.md +5 -5
- package/dist/config/env.d.ts +51 -0
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +32 -2
- package/dist/config/env.js.map +1 -1
- package/dist/core/constants.d.ts +1 -1
- package/dist/core/constants.js +1 -1
- package/dist/core/logger.js +1 -1
- package/dist/payments/monetization-gate.d.ts +5 -0
- package/dist/payments/monetization-gate.d.ts.map +1 -1
- package/dist/payments/monetization-gate.js +39 -2
- package/dist/payments/monetization-gate.js.map +1 -1
- package/dist/payments/prepaid-credit-store.d.ts +111 -0
- package/dist/payments/prepaid-credit-store.d.ts.map +1 -0
- package/dist/payments/prepaid-credit-store.js +230 -0
- package/dist/payments/prepaid-credit-store.js.map +1 -0
- package/dist/payments/pricing.d.ts.map +1 -1
- package/dist/payments/pricing.js +40 -1
- package/dist/payments/pricing.js.map +1 -1
- package/dist/payments/schema-validation.d.ts +52 -0
- package/dist/payments/schema-validation.d.ts.map +1 -0
- package/dist/payments/schema-validation.js +112 -0
- package/dist/payments/schema-validation.js.map +1 -0
- package/dist/payments/x402-paid-call.d.ts +21 -0
- package/dist/payments/x402-paid-call.d.ts.map +1 -1
- package/dist/payments/x402-paid-call.js +108 -3
- package/dist/payments/x402-paid-call.js.map +1 -1
- package/dist/perps/adrena/adrena-builder-commodity.d.ts +63 -0
- package/dist/perps/adrena/adrena-builder-commodity.d.ts.map +1 -0
- package/dist/perps/adrena/adrena-builder-commodity.js +200 -0
- package/dist/perps/adrena/adrena-builder-commodity.js.map +1 -0
- package/dist/perps/adrena/adrena-builder-core.d.ts +319 -0
- package/dist/perps/adrena/adrena-builder-core.d.ts.map +1 -0
- package/dist/perps/adrena/adrena-builder-core.js +517 -0
- package/dist/perps/adrena/adrena-builder-core.js.map +1 -0
- package/dist/perps/adrena/adrena-builder-liquidity.d.ts +50 -0
- package/dist/perps/adrena/adrena-builder-liquidity.d.ts.map +1 -0
- package/dist/perps/adrena/adrena-builder-liquidity.js +196 -0
- package/dist/perps/adrena/adrena-builder-liquidity.js.map +1 -0
- package/dist/perps/adrena/adrena-builder-staking.d.ts +57 -0
- package/dist/perps/adrena/adrena-builder-staking.d.ts.map +1 -0
- package/dist/perps/adrena/adrena-builder-staking.js +368 -0
- package/dist/perps/adrena/adrena-builder-staking.js.map +1 -0
- package/dist/perps/adrena/adrena-builder-trading.d.ts +160 -0
- package/dist/perps/adrena/adrena-builder-trading.d.ts.map +1 -0
- package/dist/perps/adrena/adrena-builder-trading.js +835 -0
- package/dist/perps/adrena/adrena-builder-trading.js.map +1 -0
- package/dist/perps/adrena/adrena-builder.d.ts +22 -0
- package/dist/perps/adrena/adrena-builder.d.ts.map +1 -0
- package/dist/perps/adrena/adrena-builder.js +22 -0
- package/dist/perps/adrena/adrena-builder.js.map +1 -0
- package/dist/perps/adrena/adrena-constants.d.ts +163 -0
- package/dist/perps/adrena/adrena-constants.d.ts.map +1 -0
- package/dist/perps/adrena/adrena-constants.js +122 -0
- package/dist/perps/adrena/adrena-constants.js.map +1 -0
- package/dist/perps/adrena/adrena-data-api.d.ts +180 -0
- package/dist/perps/adrena/adrena-data-api.d.ts.map +1 -0
- package/dist/perps/adrena/adrena-data-api.js +169 -0
- package/dist/perps/adrena/adrena-data-api.js.map +1 -0
- package/dist/perps/adrena/adrena-idl.d.ts +15084 -0
- package/dist/perps/adrena/adrena-idl.d.ts.map +1 -0
- package/dist/perps/adrena/adrena-idl.js +29903 -0
- package/dist/perps/adrena/adrena-idl.js.map +1 -0
- package/dist/perps/adrena/adrena-pda.d.ts +147 -0
- package/dist/perps/adrena/adrena-pda.d.ts.map +1 -0
- package/dist/perps/adrena/adrena-pda.js +211 -0
- package/dist/perps/adrena/adrena-pda.js.map +1 -0
- package/dist/perps/adrena/index.d.ts +12 -0
- package/dist/perps/adrena/index.d.ts.map +1 -0
- package/dist/perps/adrena/index.js +12 -0
- package/dist/perps/adrena/index.js.map +1 -0
- package/dist/perps/chart-indicators.d.ts +27 -0
- package/dist/perps/chart-indicators.d.ts.map +1 -0
- package/dist/perps/chart-indicators.js +345 -0
- package/dist/perps/chart-indicators.js.map +1 -0
- package/dist/perps/chart-tools.d.ts +45 -0
- package/dist/perps/chart-tools.d.ts.map +1 -0
- package/dist/perps/chart-tools.js +341 -0
- package/dist/perps/chart-tools.js.map +1 -0
- package/dist/perps/perp-analytics-tools.d.ts +20 -0
- package/dist/perps/perp-analytics-tools.d.ts.map +1 -0
- package/dist/perps/perp-analytics-tools.js +868 -0
- package/dist/perps/perp-analytics-tools.js.map +1 -0
- package/dist/perps/perp-constants.d.ts +362 -0
- package/dist/perps/perp-constants.d.ts.map +1 -0
- package/dist/perps/perp-constants.js +210 -0
- package/dist/perps/perp-constants.js.map +1 -0
- package/dist/perps/perp-decoders.d.ts +47 -0
- package/dist/perps/perp-decoders.d.ts.map +1 -0
- package/dist/perps/perp-decoders.js +332 -0
- package/dist/perps/perp-decoders.js.map +1 -0
- package/dist/policy/policy-engine.d.ts +42 -0
- package/dist/policy/policy-engine.d.ts.map +1 -1
- package/dist/policy/policy-engine.js +43 -0
- package/dist/policy/policy-engine.js.map +1 -1
- package/dist/premium/activation-manager.d.ts.map +1 -1
- package/dist/premium/activation-manager.js +20 -2
- package/dist/premium/activation-manager.js.map +1 -1
- package/dist/prompts/context/sap-agent-context.prompt.js +15 -1
- package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -1
- package/dist/server/server-metadata.d.ts +15 -0
- package/dist/server/server-metadata.d.ts.map +1 -1
- package/dist/server/server-metadata.js +16 -1
- package/dist/server/server-metadata.js.map +1 -1
- package/dist/solana/ata-utils.d.ts +39 -0
- package/dist/solana/ata-utils.d.ts.map +1 -0
- package/dist/solana/ata-utils.js +49 -0
- package/dist/solana/ata-utils.js.map +1 -0
- package/dist/strategies/trade-journal.d.ts +78 -0
- package/dist/strategies/trade-journal.d.ts.map +1 -0
- package/dist/strategies/trade-journal.js +92 -0
- package/dist/strategies/trade-journal.js.map +1 -0
- package/dist/tools/adrena/adrena-commodity-tools.d.ts +15 -0
- package/dist/tools/adrena/adrena-commodity-tools.d.ts.map +1 -0
- package/dist/tools/adrena/adrena-commodity-tools.js +137 -0
- package/dist/tools/adrena/adrena-commodity-tools.js.map +1 -0
- package/dist/tools/adrena/adrena-data-tools.d.ts +23 -0
- package/dist/tools/adrena/adrena-data-tools.d.ts.map +1 -0
- package/dist/tools/adrena/adrena-data-tools.js +437 -0
- package/dist/tools/adrena/adrena-data-tools.js.map +1 -0
- package/dist/tools/adrena/adrena-helpers.d.ts +46 -0
- package/dist/tools/adrena/adrena-helpers.d.ts.map +1 -0
- package/dist/tools/adrena/adrena-helpers.js +41 -0
- package/dist/tools/adrena/adrena-helpers.js.map +1 -0
- package/dist/tools/adrena/adrena-index.d.ts +20 -0
- package/dist/tools/adrena/adrena-index.d.ts.map +1 -0
- package/dist/tools/adrena/adrena-index.js +75 -0
- package/dist/tools/adrena/adrena-index.js.map +1 -0
- package/dist/tools/adrena/adrena-limit-order-tools.d.ts +22 -0
- package/dist/tools/adrena/adrena-limit-order-tools.d.ts.map +1 -0
- package/dist/tools/adrena/adrena-limit-order-tools.js +91 -0
- package/dist/tools/adrena/adrena-limit-order-tools.js.map +1 -0
- package/dist/tools/adrena/adrena-liquidity-tools.d.ts +15 -0
- package/dist/tools/adrena/adrena-liquidity-tools.d.ts.map +1 -0
- package/dist/tools/adrena/adrena-liquidity-tools.js +108 -0
- package/dist/tools/adrena/adrena-liquidity-tools.js.map +1 -0
- package/dist/tools/adrena/adrena-snapshot-tools.d.ts +42 -0
- package/dist/tools/adrena/adrena-snapshot-tools.d.ts.map +1 -0
- package/dist/tools/adrena/adrena-snapshot-tools.js +124 -0
- package/dist/tools/adrena/adrena-snapshot-tools.js.map +1 -0
- package/dist/tools/adrena/adrena-staking-tools.d.ts +15 -0
- package/dist/tools/adrena/adrena-staking-tools.d.ts.map +1 -0
- package/dist/tools/adrena/adrena-staking-tools.js +139 -0
- package/dist/tools/adrena/adrena-staking-tools.js.map +1 -0
- package/dist/tools/adrena/adrena-trading-tools.d.ts +78 -0
- package/dist/tools/adrena/adrena-trading-tools.d.ts.map +1 -0
- package/dist/tools/adrena/adrena-trading-tools.js +556 -0
- package/dist/tools/adrena/adrena-trading-tools.js.map +1 -0
- package/dist/tools/adrena-tools.d.ts +2 -0
- package/dist/tools/adrena-tools.d.ts.map +1 -0
- package/dist/tools/adrena-tools.js +2 -0
- package/dist/tools/adrena-tools.js.map +1 -0
- package/dist/tools/client-sdk-tools.d.ts +8 -0
- package/dist/tools/client-sdk-tools.d.ts.map +1 -1
- package/dist/tools/client-sdk-tools.js +32 -7
- package/dist/tools/client-sdk-tools.js.map +1 -1
- package/dist/tools/memory-tools.d.ts.map +1 -1
- package/dist/tools/memory-tools.js +170 -0
- package/dist/tools/memory-tools.js.map +1 -1
- package/dist/tools/perp-tools.d.ts +6 -31
- package/dist/tools/perp-tools.d.ts.map +1 -1
- package/dist/tools/perp-tools.js +6 -1141
- package/dist/tools/perp-tools.js.map +1 -1
- package/dist/tools/premium-tools.d.ts.map +1 -1
- package/dist/tools/premium-tools.js +123 -5
- package/dist/tools/premium-tools.js.map +1 -1
- package/dist/tools/quick-context-tool.js +1 -0
- package/dist/tools/quick-context-tool.js.map +1 -1
- package/dist/tools/register-tools.d.ts.map +1 -1
- package/dist/tools/register-tools.js +4 -0
- package/dist/tools/register-tools.js.map +1 -1
- package/dist/tools/transaction-tools.d.ts +21 -1
- package/dist/tools/transaction-tools.d.ts.map +1 -1
- package/dist/tools/transaction-tools.js +114 -30
- package/dist/tools/transaction-tools.js.map +1 -1
- package/dist/tools/x402-paid-call-tool.d.ts.map +1 -1
- package/dist/tools/x402-paid-call-tool.js +288 -0
- package/dist/tools/x402-paid-call-tool.js.map +1 -1
- package/docs/07_ENDPOINTS_AND_CLIENTS.md +1 -1
- package/docs/10_OPERATIONS_RELEASE_AND_PM2.md +54 -6
- package/docs/14_DESKTOP_WIZARD_RELEASE.md +3 -3
- package/docs/BRANCH_AND_CI.md +2 -2
- package/package.json +3 -2
- package/server.json +3 -3
- package/skills/sap-defi/SKILL.md +93 -22
- package/skills/sap-mcp/TOOL_REFERENCE.md +39 -4
|
@@ -0,0 +1,75 @@
|
|
|
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 { logger } from '../../core/logger.js';
|
|
9
|
+
import { registerAdrenaOpenLongTool } from './adrena-trading-tools.js';
|
|
10
|
+
import { registerAdrenaOpenShortTool } from './adrena-trading-tools.js';
|
|
11
|
+
import { registerAdrenaCloseLongTool } from './adrena-trading-tools.js';
|
|
12
|
+
import { registerAdrenaCloseShortTool } from './adrena-trading-tools.js';
|
|
13
|
+
import { registerAdrenaSetStopLossTool } from './adrena-trading-tools.js';
|
|
14
|
+
import { registerAdrenaSetTakeProfitTool } from './adrena-trading-tools.js';
|
|
15
|
+
import { registerAdrenaCancelStopLossTool } from './adrena-trading-tools.js';
|
|
16
|
+
import { registerAdrenaCancelTakeProfitTool } from './adrena-trading-tools.js';
|
|
17
|
+
import { registerAdrenaSimulatePositionTool } from './adrena-trading-tools.js';
|
|
18
|
+
import { registerAdrenaPositionPackageTool } from './adrena-trading-tools.js';
|
|
19
|
+
import { registerAdrenaTradeIntentTool } from './adrena-trading-tools.js';
|
|
20
|
+
import { registerAdrenaMarketSnapshotTool } from './adrena-snapshot-tools.js';
|
|
21
|
+
import { registerAdrenaAddLimitOrderTool } from './adrena-limit-order-tools.js';
|
|
22
|
+
import { registerAdrenaCancelLimitOrderTool } from './adrena-limit-order-tools.js';
|
|
23
|
+
import { registerAdrenaCommodityTools } from './adrena-commodity-tools.js';
|
|
24
|
+
import { registerAdrenaLiquiditySwapTools } from './adrena-liquidity-tools.js';
|
|
25
|
+
import { registerAdrenaStakingTools } from './adrena-staking-tools.js';
|
|
26
|
+
import { registerAdrenaDataApiTools } from './adrena-data-tools.js';
|
|
27
|
+
import { registerAdrenaGetMarketsTool } from './adrena-data-tools.js';
|
|
28
|
+
/* ═══════════════════════════════════════════════════════════════════
|
|
29
|
+
* Main registration function
|
|
30
|
+
* ═══════════════════════════════════════════════════════════════════ */
|
|
31
|
+
/**
|
|
32
|
+
* @name registerAdrenaTools
|
|
33
|
+
* @description Register all Adrena perps protocol tools: trading builders, commodity builders, liquidity/swap, staking, and Data API.
|
|
34
|
+
*
|
|
35
|
+
* @param server — MCP server instance.
|
|
36
|
+
* @param context — Shared runtime context with Solana connection.
|
|
37
|
+
*
|
|
38
|
+
* @usedBy `register-tools.ts`
|
|
39
|
+
*/
|
|
40
|
+
export function registerAdrenaTools(server, context) {
|
|
41
|
+
logger.debug('Registering Adrena perps protocol tools');
|
|
42
|
+
// Trading builders
|
|
43
|
+
registerAdrenaOpenLongTool(server, context);
|
|
44
|
+
registerAdrenaOpenShortTool(server, context);
|
|
45
|
+
registerAdrenaCloseLongTool(server, context);
|
|
46
|
+
registerAdrenaCloseShortTool(server, context);
|
|
47
|
+
// SL / TP builders
|
|
48
|
+
registerAdrenaSetStopLossTool(server, context);
|
|
49
|
+
registerAdrenaSetTakeProfitTool(server, context);
|
|
50
|
+
registerAdrenaCancelStopLossTool(server, context);
|
|
51
|
+
registerAdrenaCancelTakeProfitTool(server, context);
|
|
52
|
+
// Free simulation (dry-run, no x402 charge)
|
|
53
|
+
registerAdrenaSimulatePositionTool(server, context);
|
|
54
|
+
// Batch position builder (open + SL + TP atomic)
|
|
55
|
+
registerAdrenaPositionPackageTool(server, context);
|
|
56
|
+
// Intent-level trading API (resolves mint, leverage, collateral automatically)
|
|
57
|
+
registerAdrenaTradeIntentTool(server, context);
|
|
58
|
+
// Market snapshot with TTL cache (reduces polling costs 20x)
|
|
59
|
+
registerAdrenaMarketSnapshotTool(server, context);
|
|
60
|
+
// Limit order builders
|
|
61
|
+
registerAdrenaAddLimitOrderTool(server, context);
|
|
62
|
+
registerAdrenaCancelLimitOrderTool(server, context);
|
|
63
|
+
// Commodity builders
|
|
64
|
+
registerAdrenaCommodityTools(server, context);
|
|
65
|
+
// Liquidity & swap builders
|
|
66
|
+
registerAdrenaLiquiditySwapTools(server, context);
|
|
67
|
+
// Staking builders
|
|
68
|
+
registerAdrenaStakingTools(server, context);
|
|
69
|
+
// Data API tools
|
|
70
|
+
registerAdrenaDataApiTools(server, context);
|
|
71
|
+
// On-chain markets reader
|
|
72
|
+
registerAdrenaGetMarketsTool(server, context);
|
|
73
|
+
logger.debug('Adrena perps tools registered', { count: 36 });
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=adrena-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adrena-index.js","sourceRoot":"","sources":["../../../src/tools/adrena/adrena-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name tools/adrena/adrena-limit-order-tools
|
|
3
|
+
* @description Limit order builder tool registrations for Adrena perps:
|
|
4
|
+
* add limit order, cancel limit order.
|
|
5
|
+
*
|
|
6
|
+
* @module tools/adrena/adrena-limit-order-tools
|
|
7
|
+
*/
|
|
8
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
9
|
+
import type { SapMcpContext } from '../../core/types.js';
|
|
10
|
+
/**
|
|
11
|
+
* @name registerAdrenaAddLimitOrderTool
|
|
12
|
+
* @description Register sap_adrena_build_add_limit_order.
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export declare function registerAdrenaAddLimitOrderTool(server: Server, context: SapMcpContext): void;
|
|
16
|
+
/**
|
|
17
|
+
* @name registerAdrenaCancelLimitOrderTool
|
|
18
|
+
* @description Register sap_adrena_build_cancel_limit_order.
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
export declare function registerAdrenaCancelLimitOrderTool(server: Server, context: SapMcpContext): void;
|
|
22
|
+
//# sourceMappingURL=adrena-limit-order-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adrena-limit-order-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/adrena/adrena-limit-order-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAqBzD;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAuC5F;AAED;;;;GAIG;AACH,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CA2B/F"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name tools/adrena/adrena-limit-order-tools
|
|
3
|
+
* @description Limit order builder tool registrations for Adrena perps:
|
|
4
|
+
* add limit order, cancel limit order.
|
|
5
|
+
*
|
|
6
|
+
* @module tools/adrena/adrena-limit-order-tools
|
|
7
|
+
*/
|
|
8
|
+
import { createTextResponse } from '../../adapters/mcp/tool-response.js';
|
|
9
|
+
import { registerTool } from '../../adapters/mcp/sdk-compat.js';
|
|
10
|
+
import { buildAddLimitOrder, buildCancelLimitOrder, } from '../../perps/adrena/index.js';
|
|
11
|
+
import { MAIN_POOL_TOKENS, COLLATERAL_TOKENS, priceToRaw, getConnection, parsePublicKey, } from './adrena-helpers.js';
|
|
12
|
+
/* ═══════════════════════════════════════════════════════════════════
|
|
13
|
+
* Limit Order Builders
|
|
14
|
+
* ═══════════════════════════════════════════════════════════════════ */
|
|
15
|
+
/**
|
|
16
|
+
* @name registerAdrenaAddLimitOrderTool
|
|
17
|
+
* @description Register sap_adrena_build_add_limit_order.
|
|
18
|
+
* @internal
|
|
19
|
+
*/
|
|
20
|
+
export function registerAdrenaAddLimitOrderTool(server, context) {
|
|
21
|
+
const schema = {
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {
|
|
24
|
+
owner: { type: 'string', description: 'Order owner wallet public key (base58).' },
|
|
25
|
+
principalToken: { type: 'string', description: 'Asset to trade.', enum: MAIN_POOL_TOKENS },
|
|
26
|
+
collateralToken: { type: 'string', description: 'Collateral token.', enum: COLLATERAL_TOKENS },
|
|
27
|
+
collateralAmount: { type: 'number', description: 'Collateral amount in human-readable units.', minimum: 0 },
|
|
28
|
+
leverage: { type: 'number', description: 'Leverage multiplier.', minimum: 1, maximum: 100 },
|
|
29
|
+
side: { type: 'string', description: 'Order side.', enum: ['long', 'short'] },
|
|
30
|
+
triggerPriceUsd: { type: 'number', description: 'Trigger price in USD. Order fills when oracle reaches this price.', minimum: 0 },
|
|
31
|
+
limitPriceUsd: { type: 'number', description: 'Optional limit price cap. Omit for market price at fill.', minimum: 0 },
|
|
32
|
+
},
|
|
33
|
+
required: ['owner', 'principalToken', 'collateralToken', 'collateralAmount', 'leverage', 'side', 'triggerPriceUsd'],
|
|
34
|
+
additionalProperties: false,
|
|
35
|
+
};
|
|
36
|
+
registerTool(server, 'sap_adrena_build_add_limit_order', {
|
|
37
|
+
description: 'Build an unsigned transaction to place a limit order on Adrena. The order fills when the oracle price reaches the trigger price. Returns transactionBase64 for local signing.',
|
|
38
|
+
inputSchema: schema,
|
|
39
|
+
}, async (args) => {
|
|
40
|
+
try {
|
|
41
|
+
const owner = parsePublicKey(String(args['owner']));
|
|
42
|
+
const principalToken = String(args['principalToken']).toUpperCase();
|
|
43
|
+
const collateralToken = String(args['collateralToken']).toUpperCase();
|
|
44
|
+
const collateralAmount = Number(args['collateralAmount']);
|
|
45
|
+
const leverage = Number(args['leverage']);
|
|
46
|
+
const side = args['side'] === 'short' ? 'short' : 'long';
|
|
47
|
+
const triggerPriceUsd = Number(args['triggerPriceUsd']);
|
|
48
|
+
const limitPriceUsd = args['limitPriceUsd'] !== undefined ? Number(args['limitPriceUsd']) : null;
|
|
49
|
+
const triggerPrice = priceToRaw(triggerPriceUsd);
|
|
50
|
+
const limitPrice = limitPriceUsd !== null ? priceToRaw(limitPriceUsd) : null;
|
|
51
|
+
const result = await buildAddLimitOrder(getConnection(context), owner, principalToken, collateralToken, collateralAmount, leverage, side, triggerPrice, limitPrice);
|
|
52
|
+
return createTextResponse(JSON.stringify(result, null, 2));
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
return createTextResponse(JSON.stringify({ error: 'Failed to build add limit order transaction', message: err instanceof Error ? err.message : 'Unknown error' }), { isError: true });
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* @name registerAdrenaCancelLimitOrderTool
|
|
61
|
+
* @description Register sap_adrena_build_cancel_limit_order.
|
|
62
|
+
* @internal
|
|
63
|
+
*/
|
|
64
|
+
export function registerAdrenaCancelLimitOrderTool(server, context) {
|
|
65
|
+
const schema = {
|
|
66
|
+
type: 'object',
|
|
67
|
+
properties: {
|
|
68
|
+
owner: { type: 'string', description: 'Order owner wallet public key (base58).' },
|
|
69
|
+
collateralToken: { type: 'string', description: 'Collateral token used for the order.', enum: COLLATERAL_TOKENS },
|
|
70
|
+
orderId: { type: 'number', description: 'Limit order ID to cancel.' },
|
|
71
|
+
},
|
|
72
|
+
required: ['owner', 'collateralToken', 'orderId'],
|
|
73
|
+
additionalProperties: false,
|
|
74
|
+
};
|
|
75
|
+
registerTool(server, 'sap_adrena_build_cancel_limit_order', {
|
|
76
|
+
description: 'Build an unsigned transaction to cancel a limit order on Adrena. Returns transactionBase64 for local signing.',
|
|
77
|
+
inputSchema: schema,
|
|
78
|
+
}, async (args) => {
|
|
79
|
+
try {
|
|
80
|
+
const owner = parsePublicKey(String(args['owner']));
|
|
81
|
+
const collateralToken = String(args['collateralToken']).toUpperCase();
|
|
82
|
+
const orderId = BigInt(Math.floor(Number(args['orderId'])));
|
|
83
|
+
const result = await buildCancelLimitOrder(getConnection(context), owner, collateralToken, orderId);
|
|
84
|
+
return createTextResponse(JSON.stringify(result, null, 2));
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
return createTextResponse(JSON.stringify({ error: 'Failed to build cancel limit order transaction', message: err instanceof Error ? err.message : 'Unknown error' }), { isError: true });
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=adrena-limit-order-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adrena-limit-order-tools.js","sourceRoot":"","sources":["../../../src/tools/adrena/adrena-limit-order-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name tools/adrena/adrena-liquidity-tools
|
|
3
|
+
* @description Liquidity and swap builder tool registrations for Adrena.
|
|
4
|
+
*
|
|
5
|
+
* @module tools/adrena/adrena-liquidity-tools
|
|
6
|
+
*/
|
|
7
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
8
|
+
import type { SapMcpContext } from '../../core/types.js';
|
|
9
|
+
/**
|
|
10
|
+
* @name registerAdrenaLiquiditySwapTools
|
|
11
|
+
* @description Register liquidity and swap builder tools.
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export declare function registerAdrenaLiquiditySwapTools(server: Server, context: SapMcpContext): void;
|
|
15
|
+
//# sourceMappingURL=adrena-liquidity-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adrena-liquidity-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/adrena/adrena-liquidity-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAmBzD;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CA0F7F"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name tools/adrena/adrena-liquidity-tools
|
|
3
|
+
* @description Liquidity and swap builder tool registrations for Adrena.
|
|
4
|
+
*
|
|
5
|
+
* @module tools/adrena/adrena-liquidity-tools
|
|
6
|
+
*/
|
|
7
|
+
import { createTextResponse } from '../../adapters/mcp/tool-response.js';
|
|
8
|
+
import { registerTool } from '../../adapters/mcp/sdk-compat.js';
|
|
9
|
+
import { buildAddLiquidity, buildRemoveLiquidity, buildSwap, } from '../../perps/adrena/index.js';
|
|
10
|
+
import { COLLATERAL_TOKENS, getConnection, parsePublicKey, } from './adrena-helpers.js';
|
|
11
|
+
/* ═══════════════════════════════════════════════════════════════════
|
|
12
|
+
* Liquidity & Swap Builders
|
|
13
|
+
* ═══════════════════════════════════════════════════════════════════ */
|
|
14
|
+
/**
|
|
15
|
+
* @name registerAdrenaLiquiditySwapTools
|
|
16
|
+
* @description Register liquidity and swap builder tools.
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export function registerAdrenaLiquiditySwapTools(server, context) {
|
|
20
|
+
// Add liquidity
|
|
21
|
+
registerTool(server, 'sap_adrena_build_add_liquidity', {
|
|
22
|
+
description: 'Build an unsigned transaction to add liquidity to an Adrena pool. Deposits collateral and receives LP tokens. Returns transactionBase64 for local signing.',
|
|
23
|
+
inputSchema: {
|
|
24
|
+
type: 'object',
|
|
25
|
+
properties: {
|
|
26
|
+
owner: { type: 'string', description: 'Liquidity provider wallet public key (base58).' },
|
|
27
|
+
collateralToken: { type: 'string', description: 'Collateral token to deposit.', enum: COLLATERAL_TOKENS },
|
|
28
|
+
amount: { type: 'number', description: 'Amount in human-readable units.', minimum: 0 },
|
|
29
|
+
minLpAmountOut: { type: 'number', description: 'Minimum LP tokens to receive (raw). 0 for no slippage protection.', minimum: 0 },
|
|
30
|
+
poolName: { type: 'string', description: 'Pool to add liquidity to.', enum: ['main-pool', 'commodities-pool'] },
|
|
31
|
+
},
|
|
32
|
+
required: ['owner', 'collateralToken', 'amount'],
|
|
33
|
+
additionalProperties: false,
|
|
34
|
+
},
|
|
35
|
+
}, async (args) => {
|
|
36
|
+
try {
|
|
37
|
+
const owner = parsePublicKey(String(args['owner']));
|
|
38
|
+
const collateralToken = String(args['collateralToken']).toUpperCase();
|
|
39
|
+
const amount = Number(args['amount']);
|
|
40
|
+
const minLpAmountOut = args['minLpAmountOut'] !== undefined ? BigInt(Math.floor(Number(args['minLpAmountOut']))) : 0n;
|
|
41
|
+
const poolName = (args['poolName'] === 'commodities-pool' ? 'commodities-pool' : 'main-pool');
|
|
42
|
+
const result = await buildAddLiquidity(getConnection(context), owner, collateralToken, amount, minLpAmountOut, poolName);
|
|
43
|
+
return createTextResponse(JSON.stringify(result, null, 2));
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
return createTextResponse(JSON.stringify({ error: 'Failed to build add liquidity transaction', message: err instanceof Error ? err.message : 'Unknown error' }), { isError: true });
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
// Remove liquidity
|
|
50
|
+
registerTool(server, 'sap_adrena_build_remove_liquidity', {
|
|
51
|
+
description: 'Build an unsigned transaction to remove liquidity from an Adrena pool. Burns LP tokens and receives collateral. Returns transactionBase64 for local signing.',
|
|
52
|
+
inputSchema: {
|
|
53
|
+
type: 'object',
|
|
54
|
+
properties: {
|
|
55
|
+
owner: { type: 'string', description: 'Liquidity provider wallet public key (base58).' },
|
|
56
|
+
collateralToken: { type: 'string', description: 'Collateral token to receive.', enum: COLLATERAL_TOKENS },
|
|
57
|
+
lpAmountIn: { type: 'number', description: 'LP tokens to burn (raw, 6 decimals).', minimum: 0 },
|
|
58
|
+
minAmountOut: { type: 'number', description: 'Minimum collateral to receive (raw). 0 for no slippage protection.', minimum: 0 },
|
|
59
|
+
poolName: { type: 'string', description: 'Pool to remove liquidity from.', enum: ['main-pool', 'commodities-pool'] },
|
|
60
|
+
},
|
|
61
|
+
required: ['owner', 'collateralToken', 'lpAmountIn'],
|
|
62
|
+
additionalProperties: false,
|
|
63
|
+
},
|
|
64
|
+
}, async (args) => {
|
|
65
|
+
try {
|
|
66
|
+
const owner = parsePublicKey(String(args['owner']));
|
|
67
|
+
const collateralToken = String(args['collateralToken']).toUpperCase();
|
|
68
|
+
const lpAmountIn = BigInt(Math.floor(Number(args['lpAmountIn'])));
|
|
69
|
+
const minAmountOut = args['minAmountOut'] !== undefined ? BigInt(Math.floor(Number(args['minAmountOut']))) : 0n;
|
|
70
|
+
const poolName = (args['poolName'] === 'commodities-pool' ? 'commodities-pool' : 'main-pool');
|
|
71
|
+
const result = await buildRemoveLiquidity(getConnection(context), owner, collateralToken, lpAmountIn, minAmountOut, poolName);
|
|
72
|
+
return createTextResponse(JSON.stringify(result, null, 2));
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
return createTextResponse(JSON.stringify({ error: 'Failed to build remove liquidity transaction', message: err instanceof Error ? err.message : 'Unknown error' }), { isError: true });
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
// Swap
|
|
79
|
+
registerTool(server, 'sap_adrena_build_swap', {
|
|
80
|
+
description: 'Build an unsigned transaction to swap tokens through an Adrena pool. Uses zero-slippage oracle pricing. Returns transactionBase64 for local signing.',
|
|
81
|
+
inputSchema: {
|
|
82
|
+
type: 'object',
|
|
83
|
+
properties: {
|
|
84
|
+
owner: { type: 'string', description: 'Swapper wallet public key (base58).' },
|
|
85
|
+
fromToken: { type: 'string', description: 'Token to swap from.', enum: COLLATERAL_TOKENS },
|
|
86
|
+
toToken: { type: 'string', description: 'Token to swap to.', enum: COLLATERAL_TOKENS },
|
|
87
|
+
amount: { type: 'number', description: 'Amount to swap in human-readable units.', minimum: 0 },
|
|
88
|
+
minAmountOut: { type: 'number', description: 'Minimum amount to receive (raw). 0 for no slippage protection.', minimum: 0 },
|
|
89
|
+
},
|
|
90
|
+
required: ['owner', 'fromToken', 'toToken', 'amount'],
|
|
91
|
+
additionalProperties: false,
|
|
92
|
+
},
|
|
93
|
+
}, async (args) => {
|
|
94
|
+
try {
|
|
95
|
+
const owner = parsePublicKey(String(args['owner']));
|
|
96
|
+
const fromToken = String(args['fromToken']).toUpperCase();
|
|
97
|
+
const toToken = String(args['toToken']).toUpperCase();
|
|
98
|
+
const amount = Number(args['amount']);
|
|
99
|
+
const minAmountOut = args['minAmountOut'] !== undefined ? BigInt(Math.floor(Number(args['minAmountOut']))) : 0n;
|
|
100
|
+
const result = await buildSwap(getConnection(context), owner, fromToken, toToken, amount, minAmountOut);
|
|
101
|
+
return createTextResponse(JSON.stringify(result, null, 2));
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
return createTextResponse(JSON.stringify({ error: 'Failed to build swap transaction', message: err instanceof Error ? err.message : 'Unknown error' }), { isError: true });
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=adrena-liquidity-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adrena-liquidity-tools.js","sourceRoot":"","sources":["../../../src/tools/adrena/adrena-liquidity-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name tools/adrena/adrena-snapshot-tools
|
|
3
|
+
* @description Market snapshot tool with TTL cache for reduced x402 costs.
|
|
4
|
+
*
|
|
5
|
+
* @module tools/adrena/adrena-snapshot-tools
|
|
6
|
+
*/
|
|
7
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
8
|
+
import type { SapMcpContext } from '../../core/types.js';
|
|
9
|
+
/** Market snapshot response. */
|
|
10
|
+
export interface MarketSnapshotResult {
|
|
11
|
+
timestamp: string;
|
|
12
|
+
cached: boolean;
|
|
13
|
+
cacheTtlSeconds: number;
|
|
14
|
+
markets: MarketEntry[];
|
|
15
|
+
prices: Record<string, number>;
|
|
16
|
+
poolInfo: PoolInfo;
|
|
17
|
+
}
|
|
18
|
+
/** Single market entry in the snapshot. */
|
|
19
|
+
interface MarketEntry {
|
|
20
|
+
symbol: string;
|
|
21
|
+
pool: string;
|
|
22
|
+
allowTrade: boolean;
|
|
23
|
+
allowSwap: boolean;
|
|
24
|
+
maxInitialLeverage: number;
|
|
25
|
+
maxLeverage: number;
|
|
26
|
+
decimals: number;
|
|
27
|
+
}
|
|
28
|
+
/** Pool info in the snapshot. */
|
|
29
|
+
interface PoolInfo {
|
|
30
|
+
poolAddress: string;
|
|
31
|
+
aumUsd: number;
|
|
32
|
+
lpTokenSupply: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* @name registerAdrenaMarketSnapshotTool
|
|
36
|
+
* @description Register sap_market_snapshot — returns markets + prices + pool info
|
|
37
|
+
* in a single call with a 30-second TTL cache. Reduces x402 costs for polling bots.
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
export declare function registerAdrenaMarketSnapshotTool(server: Server, context: SapMcpContext): void;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=adrena-snapshot-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adrena-snapshot-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/adrena/adrena-snapshot-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAiBzD,gCAAgC;AAChC,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,2CAA2C;AAC3C,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,iCAAiC;AACjC,UAAU,QAAQ;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACvB;AAID;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAwG7F"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name tools/adrena/adrena-snapshot-tools
|
|
3
|
+
* @description Market snapshot tool with TTL cache for reduced x402 costs.
|
|
4
|
+
*
|
|
5
|
+
* @module tools/adrena/adrena-snapshot-tools
|
|
6
|
+
*/
|
|
7
|
+
import { createTextResponse } from '../../adapters/mcp/tool-response.js';
|
|
8
|
+
import { registerTool } from '../../adapters/mcp/sdk-compat.js';
|
|
9
|
+
import { getConnection } from './adrena-helpers.js';
|
|
10
|
+
import { adrenaDataApi } from '../../perps/adrena/adrena-data-api.js';
|
|
11
|
+
import { ADRENA_MAIN_POOL_ADDRESS, ADRENA_CUSTODIES } from '../../perps/adrena/adrena-constants.js';
|
|
12
|
+
import { logger } from '../../core/logger.js';
|
|
13
|
+
/** TTL for the market snapshot cache in milliseconds. */
|
|
14
|
+
const SNAPSHOT_CACHE_TTL_MS = 30_000;
|
|
15
|
+
let snapshotCache = null;
|
|
16
|
+
/**
|
|
17
|
+
* @name registerAdrenaMarketSnapshotTool
|
|
18
|
+
* @description Register sap_market_snapshot — returns markets + prices + pool info
|
|
19
|
+
* in a single call with a 30-second TTL cache. Reduces x402 costs for polling bots.
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
export function registerAdrenaMarketSnapshotTool(server, context) {
|
|
23
|
+
registerTool(server, 'sap_market_snapshot', {
|
|
24
|
+
description: 'Returns a complete market snapshot: all Adrena market data (leverage, OI, flags), live oracle prices, and pool health (AUM, LP supply) in one call. Includes a 30-second TTL cache — repeated calls within the cache window return cached data without re-fetching. Reduces market data costs by 20x for polling bots.',
|
|
25
|
+
inputSchema: {
|
|
26
|
+
type: 'object',
|
|
27
|
+
properties: {
|
|
28
|
+
forceRefresh: {
|
|
29
|
+
type: 'boolean',
|
|
30
|
+
description: 'When true, bypasses the cache and fetches fresh data. Default false.',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
additionalProperties: false,
|
|
34
|
+
},
|
|
35
|
+
}, async (args) => {
|
|
36
|
+
try {
|
|
37
|
+
const forceRefresh = args['forceRefresh'] === true;
|
|
38
|
+
// Check cache first.
|
|
39
|
+
if (!forceRefresh && snapshotCache && Date.now() - snapshotCache.timestamp < SNAPSHOT_CACHE_TTL_MS) {
|
|
40
|
+
const cached = {
|
|
41
|
+
...snapshotCache.data,
|
|
42
|
+
cached: true,
|
|
43
|
+
timestamp: new Date(snapshotCache.timestamp).toISOString(),
|
|
44
|
+
};
|
|
45
|
+
return createTextResponse(JSON.stringify(cached, null, 2));
|
|
46
|
+
}
|
|
47
|
+
const connection = getConnection(context);
|
|
48
|
+
// Fetch prices from the Adrena Data API.
|
|
49
|
+
let prices = {};
|
|
50
|
+
try {
|
|
51
|
+
const tradingPrices = await adrenaDataApi.getLastTradingPrices();
|
|
52
|
+
if (tradingPrices && Array.isArray(tradingPrices)) {
|
|
53
|
+
for (const p of tradingPrices) {
|
|
54
|
+
if (p.symbol && p.priceUsd) {
|
|
55
|
+
prices[p.symbol] = Number(p.priceUsd);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (priceErr) {
|
|
61
|
+
logger.warn('Market snapshot: failed to fetch trading prices', { error: priceErr instanceof Error ? priceErr.message : String(priceErr) });
|
|
62
|
+
}
|
|
63
|
+
// Read custody accounts on-chain for market data.
|
|
64
|
+
const markets = [];
|
|
65
|
+
for (const [symbol, custody] of Object.entries(ADRENA_CUSTODIES)) {
|
|
66
|
+
try {
|
|
67
|
+
const custodyInfo = await connection.getAccountInfo(new (await import('@solana/web3.js')).PublicKey(custody.address), 'confirmed');
|
|
68
|
+
if (!custodyInfo || !custodyInfo.data || custodyInfo.data.length < 184)
|
|
69
|
+
continue;
|
|
70
|
+
const d = custodyInfo.data;
|
|
71
|
+
const allowTrade = d[10] === 1;
|
|
72
|
+
const allowSwap = d[11] === 1;
|
|
73
|
+
const maxInitialLeverageBps = d.readUInt32LE(176);
|
|
74
|
+
const maxLeverageBps = d.readUInt32LE(180);
|
|
75
|
+
const decimals = d[12];
|
|
76
|
+
markets.push({
|
|
77
|
+
symbol,
|
|
78
|
+
pool: custody.pool === ADRENA_MAIN_POOL_ADDRESS ? 'main-pool' : 'commodities-pool',
|
|
79
|
+
allowTrade,
|
|
80
|
+
allowSwap,
|
|
81
|
+
maxInitialLeverage: maxInitialLeverageBps / 10000,
|
|
82
|
+
maxLeverage: maxLeverageBps / 10000,
|
|
83
|
+
decimals,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Skip unreadable custody.
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Read main pool account for pool health.
|
|
91
|
+
let poolInfo = { poolAddress: ADRENA_MAIN_POOL_ADDRESS, aumUsd: 0, lpTokenSupply: 0 };
|
|
92
|
+
try {
|
|
93
|
+
const poolInfo_raw = await connection.getAccountInfo(new (await import('@solana/web3.js')).PublicKey(ADRENA_MAIN_POOL_ADDRESS), 'confirmed');
|
|
94
|
+
if (poolInfo_raw && poolInfo_raw.data && poolInfo_raw.data.length >= 80) {
|
|
95
|
+
const aumUsdRaw = poolInfo_raw.data.readBigUInt64LE(16) + (BigInt(poolInfo_raw.data.readBigUInt64LE(24)) << 64n);
|
|
96
|
+
const lpTokenSupply = poolInfo_raw.data.readBigUInt64LE(32);
|
|
97
|
+
poolInfo = {
|
|
98
|
+
poolAddress: ADRENA_MAIN_POOL_ADDRESS,
|
|
99
|
+
aumUsd: Number(aumUsdRaw) / 1e6,
|
|
100
|
+
lpTokenSupply: Number(lpTokenSupply),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// Best-effort pool read.
|
|
106
|
+
}
|
|
107
|
+
const result = {
|
|
108
|
+
timestamp: new Date().toISOString(),
|
|
109
|
+
cached: false,
|
|
110
|
+
cacheTtlSeconds: SNAPSHOT_CACHE_TTL_MS / 1000,
|
|
111
|
+
markets,
|
|
112
|
+
prices,
|
|
113
|
+
poolInfo,
|
|
114
|
+
};
|
|
115
|
+
// Update cache.
|
|
116
|
+
snapshotCache = { data: { ...result }, timestamp: Date.now() };
|
|
117
|
+
return createTextResponse(JSON.stringify(result, null, 2));
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
return createTextResponse(JSON.stringify({ error: 'Failed to build market snapshot', message: err instanceof Error ? err.message : 'Unknown error' }), { isError: true });
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=adrena-snapshot-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adrena-snapshot-tools.js","sourceRoot":"","sources":["../../../src/tools/adrena/adrena-snapshot-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AACpG,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,yDAAyD;AACzD,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAoCrC,IAAI,aAAa,GAA0B,IAAI,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAAC,MAAc,EAAE,OAAsB;IACrF,YAAY,CAAC,MAAM,EAAE,qBAAqB,EAAE;QAC1C,WAAW,EAAE,wTAAwT;QACrU,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,YAAY,EAAE;oBACZ,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,sEAAsE;iBACpF;aACF;YACD,oBAAoB,EAAE,KAAK;SAC5B;KACF,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;YAEnD,qBAAqB;YACrB,IAAI,CAAC,YAAY,IAAI,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC,SAAS,GAAG,qBAAqB,EAAE,CAAC;gBACnG,MAAM,MAAM,GAAyB;oBACnC,GAAG,aAAa,CAAC,IAAI;oBACrB,MAAM,EAAE,IAAI;oBACZ,SAAS,EAAE,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE;iBAC3D,CAAC;gBACF,OAAO,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7D,CAAC;YAED,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YAE1C,yCAAyC;YACzC,IAAI,MAAM,GAA2B,EAAE,CAAC;YACxC,IAAI,CAAC;gBACH,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,oBAAoB,EAAE,CAAC;gBACjE,IAAI,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;oBAClD,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;wBAC9B,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;4BAC3B,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;wBACxC,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,QAAQ,EAAE,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,iDAAiD,EAAE,EAAE,KAAK,EAAE,QAAQ,YAAY,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC7I,CAAC;YAED,kDAAkD;YAClD,MAAM,OAAO,GAAkB,EAAE,CAAC;YAClC,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBACjE,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC;oBACnI,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG;wBAAE,SAAS;oBACjF,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC;oBAC3B,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;oBAC/B,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;oBAC9B,MAAM,qBAAqB,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;oBAClD,MAAM,cAAc,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;oBAC3C,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvB,OAAO,CAAC,IAAI,CAAC;wBACX,MAAM;wBACN,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,wBAAwB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB;wBAClF,UAAU;wBACV,SAAS;wBACT,kBAAkB,EAAE,qBAAqB,GAAG,KAAK;wBACjD,WAAW,EAAE,cAAc,GAAG,KAAK;wBACnC,QAAQ;qBACT,CAAC,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACP,2BAA2B;gBAC7B,CAAC;YACH,CAAC;YAED,0CAA0C;YAC1C,IAAI,QAAQ,GAAa,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;YAChG,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,EAAE,WAAW,CAAC,CAAC;gBAC7I,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;oBACxE,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;oBACjH,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;oBAC5D,QAAQ,GAAG;wBACT,WAAW,EAAE,wBAAwB;wBACrC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG;wBAC/B,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC;qBACrC,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,yBAAyB;YAC3B,CAAC;YAED,MAAM,MAAM,GAAyB;gBACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACnC,MAAM,EAAE,KAAK;gBACb,eAAe,EAAE,qBAAqB,GAAG,IAAI;gBAC7C,OAAO;gBACP,MAAM;gBACN,QAAQ;aACT,CAAC;YAEF,gBAAgB;YAChB,aAAa,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAE/D,OAAO,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5K,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name tools/adrena/adrena-staking-tools
|
|
3
|
+
* @description Staking builder tool registrations for Adrena.
|
|
4
|
+
*
|
|
5
|
+
* @module tools/adrena/adrena-staking-tools
|
|
6
|
+
*/
|
|
7
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
8
|
+
import type { SapMcpContext } from '../../core/types.js';
|
|
9
|
+
/**
|
|
10
|
+
* @name registerAdrenaStakingTools
|
|
11
|
+
* @description Register staking builder tools.
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export declare function registerAdrenaStakingTools(server: Server, context: SapMcpContext): void;
|
|
15
|
+
//# sourceMappingURL=adrena-staking-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adrena-staking-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/adrena/adrena-staking-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAmBzD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAsHvF"}
|