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

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 (71) hide show
  1. package/.env.example +14 -0
  2. package/CHANGELOG.md +101 -0
  3. package/README.md +3 -3
  4. package/USER_DOCS/01_HOSTED_REMOTE_MCP.md +1 -1
  5. package/USER_DOCS/04_CLIENT_CONFIGS.md +3 -3
  6. package/USER_DOCS/06_DESKTOP_GUI_WIZARD.md +5 -5
  7. package/dist/config/env.d.ts +32 -0
  8. package/dist/config/env.d.ts.map +1 -1
  9. package/dist/config/env.js +24 -1
  10. package/dist/config/env.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.map +1 -1
  15. package/dist/payments/monetization-gate.js +4 -0
  16. package/dist/payments/monetization-gate.js.map +1 -1
  17. package/dist/payments/pricing.d.ts.map +1 -1
  18. package/dist/payments/pricing.js +39 -1
  19. package/dist/payments/pricing.js.map +1 -1
  20. package/dist/perps/adrena/adrena-builder.d.ts +301 -0
  21. package/dist/perps/adrena/adrena-builder.d.ts.map +1 -0
  22. package/dist/perps/adrena/adrena-builder.js +1148 -0
  23. package/dist/perps/adrena/adrena-builder.js.map +1 -0
  24. package/dist/perps/adrena/adrena-constants.d.ts +135 -0
  25. package/dist/perps/adrena/adrena-constants.d.ts.map +1 -0
  26. package/dist/perps/adrena/adrena-constants.js +100 -0
  27. package/dist/perps/adrena/adrena-constants.js.map +1 -0
  28. package/dist/perps/adrena/adrena-data-api.d.ts +180 -0
  29. package/dist/perps/adrena/adrena-data-api.d.ts.map +1 -0
  30. package/dist/perps/adrena/adrena-data-api.js +169 -0
  31. package/dist/perps/adrena/adrena-data-api.js.map +1 -0
  32. package/dist/perps/adrena/adrena-pda.d.ts +146 -0
  33. package/dist/perps/adrena/adrena-pda.d.ts.map +1 -0
  34. package/dist/perps/adrena/adrena-pda.js +215 -0
  35. package/dist/perps/adrena/adrena-pda.js.map +1 -0
  36. package/dist/perps/adrena/index.d.ts +11 -0
  37. package/dist/perps/adrena/index.d.ts.map +1 -0
  38. package/dist/perps/adrena/index.js +11 -0
  39. package/dist/perps/adrena/index.js.map +1 -0
  40. package/dist/server/server-metadata.d.ts +2 -0
  41. package/dist/server/server-metadata.d.ts.map +1 -1
  42. package/dist/server/server-metadata.js +3 -1
  43. package/dist/server/server-metadata.js.map +1 -1
  44. package/dist/tools/adrena-tools.d.ts +67 -0
  45. package/dist/tools/adrena-tools.d.ts.map +1 -0
  46. package/dist/tools/adrena-tools.js +1062 -0
  47. package/dist/tools/adrena-tools.js.map +1 -0
  48. package/dist/tools/client-sdk-tools.d.ts +15 -0
  49. package/dist/tools/client-sdk-tools.d.ts.map +1 -1
  50. package/dist/tools/client-sdk-tools.js +63 -8
  51. package/dist/tools/client-sdk-tools.js.map +1 -1
  52. package/dist/tools/estimate-tool-cost.d.ts.map +1 -1
  53. package/dist/tools/estimate-tool-cost.js +16 -61
  54. package/dist/tools/estimate-tool-cost.js.map +1 -1
  55. package/dist/tools/perp-tools.d.ts +150 -7
  56. package/dist/tools/perp-tools.d.ts.map +1 -1
  57. package/dist/tools/perp-tools.js +787 -212
  58. package/dist/tools/perp-tools.js.map +1 -1
  59. package/dist/tools/quick-context-tool.js +1 -0
  60. package/dist/tools/quick-context-tool.js.map +1 -1
  61. package/dist/tools/register-tools.d.ts.map +1 -1
  62. package/dist/tools/register-tools.js +4 -0
  63. package/dist/tools/register-tools.js.map +1 -1
  64. package/docs/07_ENDPOINTS_AND_CLIENTS.md +1 -1
  65. package/docs/10_OPERATIONS_RELEASE_AND_PM2.md +54 -6
  66. package/docs/14_DESKTOP_WIZARD_RELEASE.md +3 -3
  67. package/docs/BRANCH_AND_CI.md +2 -2
  68. package/package.json +3 -3
  69. package/server.json +3 -3
  70. package/skills/sap-defi/SKILL.md +93 -22
  71. package/skills/sap-mcp/TOOL_REFERENCE.md +39 -4
@@ -2,10 +2,10 @@
2
2
  * @name tools/perp-tools
3
3
  * @description MCP tools for perpetual futures trading and chart analysis on Solana.
4
4
  *
5
- * Provides 8 tools across two categories:
5
+ * Provides perp analytics plus explicit execution-readiness tooling:
6
6
  *
7
7
  * Read-only tools (7):
8
- * - sap_perp_markets — List Adrena perp markets with mark price, funding, OI.
8
+ * - sap_perp_markets — List Adrena markets with funding/accounting, OI, and oracle ids.
9
9
  * - sap_perp_position_info — Read on-chain perp positions for a wallet.
10
10
  * - sap_perp_funding_history — Compute funding rate from on-chain custody account.
11
11
  * - sap_chart_ohlc — OHLC candlestick data for any Solana token.
@@ -13,20 +13,162 @@
13
13
  * - sap_chart_volume_profile — Volume profile analysis (POC, VAH, VAL).
14
14
  * - sap_perp_liquidation_zones — Compute liquidation zones for open positions.
15
15
  *
16
- * Professional planning tools (1):
16
+ * Professional planning tools:
17
17
  * - sap_perp_trade_plan — Build a trader-grade risk, route, and execution checklist.
18
+ * - sap_perp_builder_status — Report whether a hosted unsigned perps builder is configured.
18
19
  *
19
- * All read-only tools use free APIs (DexScreener, DeFiLlama) and Solana RPC
20
- * (Triton). Execution builders are intentionally not exposed unless the
21
- * account graph is IDL-backed and safe for local finalization.
20
+ * Adrena reads decode Pool, Custody, and Position accounts directly from the
21
+ * official release/39 ABI layout through Solana RPC. Optional provider hooks
22
+ * can enrich reads or build unsigned execution transactions, but SAP MCP never
23
+ * pretends a perps execution route exists until the builder can return a real
24
+ * locally finalizable Solana transaction.
22
25
  *
23
26
  * @module tools/perp-tools
24
27
  */
25
28
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
29
+ import { PublicKey } from '@solana/web3.js';
26
30
  import type { SapMcpContext } from '../core/types.js';
31
+ export declare const ADRENA_POSITION_OWNER_MEMCMP_OFFSET = 16;
32
+ interface PerpMarketProviderRecord {
33
+ symbol?: string;
34
+ market?: string;
35
+ custodyAddress?: string;
36
+ poolAddress?: string;
37
+ custodyMint?: string;
38
+ markPrice?: number;
39
+ fundingRate?: number;
40
+ openInterestLong?: number;
41
+ openInterestShort?: number;
42
+ volume24h?: number;
43
+ provider?: string;
44
+ [key: string]: unknown;
45
+ }
46
+ interface DecodedAdrenaPool {
47
+ poolAddress: string;
48
+ name: string;
49
+ type?: string;
50
+ allowTrade: boolean;
51
+ allowSwap: boolean;
52
+ registeredCustodyCount: number;
53
+ custodies: string[];
54
+ lpTokenPriceUsd: number;
55
+ aumUsd: number;
56
+ }
57
+ interface DecodedAdrenaCustody {
58
+ symbol: string;
59
+ market: string;
60
+ custodyAddress: string;
61
+ poolAddress: string;
62
+ poolName?: string;
63
+ poolType?: string;
64
+ custodyMint: string;
65
+ tokenAccount: string;
66
+ oracle: string;
67
+ tradeOracle: string;
68
+ oracleFeedId: number;
69
+ tradeOracleFeedId: number;
70
+ decimals: number;
71
+ allowTrade: boolean;
72
+ allowSwap: boolean;
73
+ isStable: boolean;
74
+ isSynthetic: boolean;
75
+ version: number;
76
+ kind: 'collateral' | 'perp' | 'synthetic-perp' | 'unknown';
77
+ markPrice: number | null;
78
+ markPriceSource: 'not_in_custody_account';
79
+ maxInitialLeverage: number;
80
+ maxLeverage: number;
81
+ maxPositionLockedUsd: number;
82
+ openInterestLong: number;
83
+ openInterestShort: number;
84
+ openPositionsLong: number;
85
+ openPositionsShort: number;
86
+ borrowSizeLongUsd: number;
87
+ borrowSizeShortUsd: number;
88
+ collateralLongUsd: number;
89
+ collateralShortUsd: number;
90
+ lockedAmountLongRaw: string;
91
+ lockedAmountShortRaw: string;
92
+ tradeOiLongUsd: number;
93
+ tradeOiShortUsd: number;
94
+ cumulativeOpenPositionUsd: number;
95
+ assetsRaw: {
96
+ collateral: string;
97
+ owned: string;
98
+ locked: string;
99
+ };
100
+ borrowRate: {
101
+ currentRateRaw: string;
102
+ lastUpdate: number;
103
+ };
104
+ funding: {
105
+ currentRateLongToShortRaw: string;
106
+ lastUpdate: number;
107
+ cumulativeLongToShortRaw: string;
108
+ cumulativeShortToLongRaw: string;
109
+ maxHourlyFundingRateRaw: string;
110
+ minTotalOiUsd: number;
111
+ imbalanceSensitivityBps: number;
112
+ };
113
+ }
114
+ interface DecodedAdrenaPosition {
115
+ positionKey: string;
116
+ market: string;
117
+ side: 'long' | 'short';
118
+ sideRaw: number;
119
+ owner: string;
120
+ poolAddress: string;
121
+ custodyAddress: string;
122
+ collateralCustodyAddress: string;
123
+ openTime: number;
124
+ updateTime: number;
125
+ entryPrice: number;
126
+ entryPriceRaw: string;
127
+ size: number;
128
+ collateral: number;
129
+ borrowSizeUsd: number;
130
+ leverage: number;
131
+ unrealizedPnl: number;
132
+ unrealizedInterestUsd: number;
133
+ unrealizedFundingPaidUsd: number;
134
+ unrealizedFundingReceivedUsd: number;
135
+ lockedAmountRaw: string;
136
+ collateralAmountRaw: string;
137
+ liquidationPrice: number;
138
+ takeProfitLimitPrice: number | null;
139
+ stopLossLimitPrice: number | null;
140
+ stopLossClosePositionPrice: number | null;
141
+ id: string;
142
+ }
143
+ export declare function normalizePerpProviderMarkets(payload: unknown, marketFilter?: string): PerpMarketProviderRecord[];
144
+ /**
145
+ * @name discToBase58
146
+ * @description Convert an 8-byte discriminator Buffer to a base58 string for
147
+ * use in `getProgramAccounts` memcmp filters.
148
+ *
149
+ * @param disc — 8-byte discriminator Buffer.
150
+ * @returns Base58-encoded string.
151
+ *
152
+ * @internal
153
+ */
154
+ export declare function discToBase58(disc: Buffer): string;
155
+ /**
156
+ * @name readAdrenaLimitedString
157
+ * @description Read Adrena `LimitedString` (31-byte value + 1-byte length)
158
+ * from an account data buffer.
159
+ *
160
+ * @param buf — Source buffer.
161
+ * @param offset — Offset to the LimitedString field.
162
+ * @returns Decoded symbol string, or empty string on failure.
163
+ *
164
+ * @internal
165
+ */
166
+ export declare function readAdrenaLimitedString(buf: Buffer, offset: number): string;
167
+ export declare function decodeAdrenaCustodyAccount(pubkey: PublicKey, data: Buffer, pool?: DecodedAdrenaPool): DecodedAdrenaCustody | null;
168
+ export declare function decodeAdrenaPositionAccount(pubkey: PublicKey, data: Buffer, marketsByCustody?: Map<string, DecodedAdrenaCustody>): DecodedAdrenaPosition | null;
27
169
  /**
28
170
  * @name registerPerpTools
29
- * @description Register all 8 perp trading analytics and planning MCP tools.
171
+ * @description Register perp trading analytics, planning, and optional execution-builder tools.
30
172
  *
31
173
  * @param server — MCP server instance.
32
174
  * @param context — Shared runtime context with SAP client, connection, and config.
@@ -34,4 +176,5 @@ import type { SapMcpContext } from '../core/types.js';
34
176
  * @usedBy `register-tools.ts`
35
177
  */
36
178
  export declare function registerPerpTools(server: Server, context: SapMcpContext): void;
179
+ export {};
37
180
  //# sourceMappingURL=perp-tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"perp-tools.d.ts","sourceRoot":"","sources":["../../src/tools/perp-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAkyCtD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAa9E"}
1
+ {"version":3,"file":"perp-tools.d.ts","sourceRoot":"","sources":["../../src/tools/perp-tools.ts"],"names":[],"mappings":"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"}