@oobe-protocol-labs/sap-mcp-server 0.9.1 → 0.9.3

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 (703) hide show
  1. package/.env.example +8 -7
  2. package/CHANGELOG.md +732 -1
  3. package/README.md +9 -3
  4. package/USER_DOCS/00_START_HERE.md +51 -4
  5. package/USER_DOCS/01_HOSTED_REMOTE_MCP.md +1 -1
  6. package/USER_DOCS/03_PAYMENTS_X402_PAYSH.md +32 -3
  7. package/USER_DOCS/04_CLIENT_CONFIGS.md +14 -7
  8. package/USER_DOCS/05_SKILLS_AND_TOOLS.md +68 -8
  9. package/USER_DOCS/06_DESKTOP_GUI_WIZARD.md +20 -14
  10. package/USER_DOCS/07_SMITHERY_AND_MARKETPLACES.md +7 -0
  11. package/config.example.json +5 -4
  12. package/config.schema.json +9 -4
  13. package/config.secure-example.json +5 -4
  14. package/dist/adapters/index.d.ts +7 -1
  15. package/dist/adapters/index.d.ts.map +1 -1
  16. package/dist/adapters/index.js +7 -1
  17. package/dist/adapters/index.js.map +1 -1
  18. package/dist/adapters/mcp/errors.d.ts +13 -1
  19. package/dist/adapters/mcp/errors.d.ts.map +1 -1
  20. package/dist/adapters/mcp/errors.js +13 -1
  21. package/dist/adapters/mcp/errors.js.map +1 -1
  22. package/dist/adapters/mcp/index.d.ts +7 -1
  23. package/dist/adapters/mcp/index.d.ts.map +1 -1
  24. package/dist/adapters/mcp/index.js +7 -1
  25. package/dist/adapters/mcp/index.js.map +1 -1
  26. package/dist/adapters/mcp/prompt-response.d.ts +13 -1
  27. package/dist/adapters/mcp/prompt-response.d.ts.map +1 -1
  28. package/dist/adapters/mcp/prompt-response.js +13 -1
  29. package/dist/adapters/mcp/prompt-response.js.map +1 -1
  30. package/dist/adapters/mcp/resource-response.d.ts +14 -1
  31. package/dist/adapters/mcp/resource-response.d.ts.map +1 -1
  32. package/dist/adapters/mcp/resource-response.js +14 -1
  33. package/dist/adapters/mcp/resource-response.js.map +1 -1
  34. package/dist/adapters/mcp/sdk-compat.d.ts +11 -3
  35. package/dist/adapters/mcp/sdk-compat.d.ts.map +1 -1
  36. package/dist/adapters/mcp/sdk-compat.js +232 -25
  37. package/dist/adapters/mcp/sdk-compat.js.map +1 -1
  38. package/dist/adapters/mcp/tool-response.d.ts +51 -3
  39. package/dist/adapters/mcp/tool-response.d.ts.map +1 -1
  40. package/dist/adapters/mcp/tool-response.js +48 -3
  41. package/dist/adapters/mcp/tool-response.js.map +1 -1
  42. package/dist/adapters/solana/commitment.d.ts +14 -2
  43. package/dist/adapters/solana/commitment.d.ts.map +1 -1
  44. package/dist/adapters/solana/commitment.js +14 -2
  45. package/dist/adapters/solana/commitment.js.map +1 -1
  46. package/dist/adapters/solana/connection.d.ts +11 -2
  47. package/dist/adapters/solana/connection.d.ts.map +1 -1
  48. package/dist/adapters/solana/connection.js +11 -2
  49. package/dist/adapters/solana/connection.js.map +1 -1
  50. package/dist/adapters/solana/index.d.ts +7 -1
  51. package/dist/adapters/solana/index.d.ts.map +1 -1
  52. package/dist/adapters/solana/index.js +7 -1
  53. package/dist/adapters/solana/index.js.map +1 -1
  54. package/dist/adapters/solana/public-key.d.ts +11 -2
  55. package/dist/adapters/solana/public-key.d.ts.map +1 -1
  56. package/dist/adapters/solana/public-key.js +11 -2
  57. package/dist/adapters/solana/public-key.js.map +1 -1
  58. package/dist/config/defaults.d.ts +5 -0
  59. package/dist/config/defaults.d.ts.map +1 -1
  60. package/dist/config/defaults.js +5 -0
  61. package/dist/config/defaults.js.map +1 -1
  62. package/dist/config/env.d.ts +4 -0
  63. package/dist/config/env.d.ts.map +1 -1
  64. package/dist/config/env.js +15 -10
  65. package/dist/config/env.js.map +1 -1
  66. package/dist/config/index.d.ts +5 -0
  67. package/dist/config/index.d.ts.map +1 -1
  68. package/dist/config/index.js +5 -0
  69. package/dist/config/index.js.map +1 -1
  70. package/dist/config/mcp-client-injection.d.ts.map +1 -1
  71. package/dist/config/mcp-client-injection.js +136 -33
  72. package/dist/config/mcp-client-injection.js.map +1 -1
  73. package/dist/config/paths.d.ts +14 -1
  74. package/dist/config/paths.d.ts.map +1 -1
  75. package/dist/config/paths.js +20 -1
  76. package/dist/config/paths.js.map +1 -1
  77. package/dist/config/profiles.d.ts +3 -10
  78. package/dist/config/profiles.d.ts.map +1 -1
  79. package/dist/config/profiles.js +5 -0
  80. package/dist/config/profiles.js.map +1 -1
  81. package/dist/config/schema.d.ts +5 -0
  82. package/dist/config/schema.d.ts.map +1 -1
  83. package/dist/config/schema.js +5 -0
  84. package/dist/config/schema.js.map +1 -1
  85. package/dist/config/secure-config.d.ts +5 -0
  86. package/dist/config/secure-config.d.ts.map +1 -1
  87. package/dist/config/secure-config.js +5 -0
  88. package/dist/config/secure-config.js.map +1 -1
  89. package/dist/config/setup.d.ts +5 -0
  90. package/dist/config/setup.d.ts.map +1 -1
  91. package/dist/config/setup.js +5 -0
  92. package/dist/config/setup.js.map +1 -1
  93. package/dist/config/wizard.d.ts +6 -0
  94. package/dist/config/wizard.d.ts.map +1 -1
  95. package/dist/config/wizard.js +102 -18
  96. package/dist/config/wizard.js.map +1 -1
  97. package/dist/config-cli.d.ts +3 -13
  98. package/dist/config-cli.d.ts.map +1 -1
  99. package/dist/config-cli.js +14 -1
  100. package/dist/config-cli.js.map +1 -1
  101. package/dist/core/constants.d.ts +38 -6
  102. package/dist/core/constants.d.ts.map +1 -1
  103. package/dist/core/constants.js +49 -6
  104. package/dist/core/constants.js.map +1 -1
  105. package/dist/core/errors.d.ts +5 -0
  106. package/dist/core/errors.d.ts.map +1 -1
  107. package/dist/core/errors.js +5 -0
  108. package/dist/core/errors.js.map +1 -1
  109. package/dist/core/guards.d.ts +5 -0
  110. package/dist/core/guards.d.ts.map +1 -1
  111. package/dist/core/guards.js +3 -1
  112. package/dist/core/guards.js.map +1 -1
  113. package/dist/core/index.d.ts +7 -1
  114. package/dist/core/index.d.ts.map +1 -1
  115. package/dist/core/index.js +7 -1
  116. package/dist/core/index.js.map +1 -1
  117. package/dist/core/logger.js +1 -1
  118. package/dist/core/result.d.ts +77 -9
  119. package/dist/core/result.d.ts.map +1 -1
  120. package/dist/core/result.js +68 -9
  121. package/dist/core/result.js.map +1 -1
  122. package/dist/core/types.d.ts +5 -0
  123. package/dist/core/types.d.ts.map +1 -1
  124. package/dist/core/types.js +3 -4
  125. package/dist/core/types.js.map +1 -1
  126. package/dist/index.d.ts +5 -0
  127. package/dist/index.d.ts.map +1 -1
  128. package/dist/index.js +5 -0
  129. package/dist/index.js.map +1 -1
  130. package/dist/memory/async-processor.d.ts +107 -0
  131. package/dist/memory/async-processor.d.ts.map +1 -0
  132. package/dist/memory/async-processor.js +204 -0
  133. package/dist/memory/async-processor.js.map +1 -0
  134. package/dist/memory/auto-record.d.ts +47 -0
  135. package/dist/memory/auto-record.d.ts.map +1 -0
  136. package/dist/memory/auto-record.js +133 -0
  137. package/dist/memory/auto-record.js.map +1 -0
  138. package/dist/memory/database.d.ts +103 -0
  139. package/dist/memory/database.d.ts.map +1 -0
  140. package/dist/memory/database.js +337 -0
  141. package/dist/memory/database.js.map +1 -0
  142. package/dist/memory/hermes-bridge.d.ts +70 -0
  143. package/dist/memory/hermes-bridge.d.ts.map +1 -0
  144. package/dist/memory/hermes-bridge.js +155 -0
  145. package/dist/memory/hermes-bridge.js.map +1 -0
  146. package/dist/memory/index.d.ts +23 -0
  147. package/dist/memory/index.d.ts.map +1 -0
  148. package/dist/memory/index.js +22 -0
  149. package/dist/memory/index.js.map +1 -0
  150. package/dist/memory/memory-store.d.ts +76 -0
  151. package/dist/memory/memory-store.d.ts.map +1 -0
  152. package/dist/memory/memory-store.js +231 -0
  153. package/dist/memory/memory-store.js.map +1 -0
  154. package/dist/memory/stream-buffer-store.d.ts +69 -0
  155. package/dist/memory/stream-buffer-store.d.ts.map +1 -0
  156. package/dist/memory/stream-buffer-store.js +182 -0
  157. package/dist/memory/stream-buffer-store.js.map +1 -0
  158. package/dist/memory/tool-call-store.d.ts +68 -0
  159. package/dist/memory/tool-call-store.d.ts.map +1 -0
  160. package/dist/memory/tool-call-store.js +189 -0
  161. package/dist/memory/tool-call-store.js.map +1 -0
  162. package/dist/memory/types.d.ts +197 -0
  163. package/dist/memory/types.d.ts.map +1 -0
  164. package/dist/memory/types.js +15 -0
  165. package/dist/memory/types.js.map +1 -0
  166. package/dist/memory/utils.d.ts +30 -0
  167. package/dist/memory/utils.d.ts.map +1 -0
  168. package/dist/memory/utils.js +47 -0
  169. package/dist/memory/utils.js.map +1 -0
  170. package/dist/payments/facilitator-rpc-fallback.d.ts.map +1 -1
  171. package/dist/payments/facilitator-rpc-fallback.js +95 -0
  172. package/dist/payments/facilitator-rpc-fallback.js.map +1 -1
  173. package/dist/payments/hosted-tool-eligibility.d.ts +22 -0
  174. package/dist/payments/hosted-tool-eligibility.d.ts.map +1 -0
  175. package/dist/payments/hosted-tool-eligibility.js +173 -0
  176. package/dist/payments/hosted-tool-eligibility.js.map +1 -0
  177. package/dist/payments/index.d.ts +2 -2
  178. package/dist/payments/index.d.ts.map +1 -1
  179. package/dist/payments/index.js +1 -1
  180. package/dist/payments/index.js.map +1 -1
  181. package/dist/payments/mcp-session-cache.d.ts +35 -0
  182. package/dist/payments/mcp-session-cache.d.ts.map +1 -0
  183. package/dist/payments/mcp-session-cache.js +83 -0
  184. package/dist/payments/mcp-session-cache.js.map +1 -0
  185. package/dist/payments/monetization-gate.d.ts +33 -0
  186. package/dist/payments/monetization-gate.d.ts.map +1 -1
  187. package/dist/payments/monetization-gate.js +124 -12
  188. package/dist/payments/monetization-gate.js.map +1 -1
  189. package/dist/payments/pricing.d.ts +31 -0
  190. package/dist/payments/pricing.d.ts.map +1 -1
  191. package/dist/payments/pricing.js +317 -19
  192. package/dist/payments/pricing.js.map +1 -1
  193. package/dist/payments/usage-ledger.d.ts +36 -2
  194. package/dist/payments/usage-ledger.d.ts.map +1 -1
  195. package/dist/payments/usage-ledger.js +121 -4
  196. package/dist/payments/usage-ledger.js.map +1 -1
  197. package/dist/payments/x402-paid-call.d.ts +121 -0
  198. package/dist/payments/x402-paid-call.d.ts.map +1 -1
  199. package/dist/payments/x402-paid-call.js +428 -1
  200. package/dist/payments/x402-paid-call.js.map +1 -1
  201. package/dist/policy/default-policies.d.ts +18 -2
  202. package/dist/policy/default-policies.d.ts.map +1 -1
  203. package/dist/policy/default-policies.js +18 -2
  204. package/dist/policy/default-policies.js.map +1 -1
  205. package/dist/policy/index.d.ts +6 -3
  206. package/dist/policy/index.d.ts.map +1 -1
  207. package/dist/policy/index.js +6 -3
  208. package/dist/policy/index.js.map +1 -1
  209. package/dist/policy/local-policy-engine.d.ts +71 -13
  210. package/dist/policy/local-policy-engine.d.ts.map +1 -1
  211. package/dist/policy/local-policy-engine.js +33 -11
  212. package/dist/policy/local-policy-engine.js.map +1 -1
  213. package/dist/policy/permission-checks.d.ts +29 -3
  214. package/dist/policy/permission-checks.d.ts.map +1 -1
  215. package/dist/policy/permission-checks.js +29 -3
  216. package/dist/policy/permission-checks.js.map +1 -1
  217. package/dist/policy/policy-engine.d.ts +22 -2
  218. package/dist/policy/policy-engine.d.ts.map +1 -1
  219. package/dist/policy/policy-engine.js +22 -2
  220. package/dist/policy/policy-engine.js.map +1 -1
  221. package/dist/policy/policy-types.d.ts +55 -5
  222. package/dist/policy/policy-types.d.ts.map +1 -1
  223. package/dist/policy/policy-types.js +8 -1
  224. package/dist/policy/policy-types.js.map +1 -1
  225. package/dist/policy/risk-level.d.ts +32 -3
  226. package/dist/policy/risk-level.d.ts.map +1 -1
  227. package/dist/policy/risk-level.js +32 -3
  228. package/dist/policy/risk-level.js.map +1 -1
  229. package/dist/policy/spending-limits.d.ts +29 -3
  230. package/dist/policy/spending-limits.d.ts.map +1 -1
  231. package/dist/policy/spending-limits.js +29 -3
  232. package/dist/policy/spending-limits.js.map +1 -1
  233. package/dist/premium/activation-manager.d.ts +43 -0
  234. package/dist/premium/activation-manager.d.ts.map +1 -0
  235. package/dist/premium/activation-manager.js +131 -0
  236. package/dist/premium/activation-manager.js.map +1 -0
  237. package/dist/premium/builtin-plugins.d.ts +165 -0
  238. package/dist/premium/builtin-plugins.d.ts.map +1 -0
  239. package/dist/premium/builtin-plugins.js +422 -0
  240. package/dist/premium/builtin-plugins.js.map +1 -0
  241. package/dist/premium/event-store.d.ts +61 -0
  242. package/dist/premium/event-store.d.ts.map +1 -0
  243. package/dist/premium/event-store.js +130 -0
  244. package/dist/premium/event-store.js.map +1 -0
  245. package/dist/premium/index.d.ts +54 -0
  246. package/dist/premium/index.d.ts.map +1 -0
  247. package/dist/premium/index.js +54 -0
  248. package/dist/premium/index.js.map +1 -0
  249. package/dist/premium/manifest-builder.d.ts +65 -0
  250. package/dist/premium/manifest-builder.d.ts.map +1 -0
  251. package/dist/premium/manifest-builder.js +182 -0
  252. package/dist/premium/manifest-builder.js.map +1 -0
  253. package/dist/premium/meme-radar-capabilities.d.ts +38 -0
  254. package/dist/premium/meme-radar-capabilities.d.ts.map +1 -0
  255. package/dist/premium/meme-radar-capabilities.js +306 -0
  256. package/dist/premium/meme-radar-capabilities.js.map +1 -0
  257. package/dist/premium/metrics.d.ts +27 -0
  258. package/dist/premium/metrics.d.ts.map +1 -0
  259. package/dist/premium/metrics.js +65 -0
  260. package/dist/premium/metrics.js.map +1 -0
  261. package/dist/premium/plugin-validator.d.ts +39 -0
  262. package/dist/premium/plugin-validator.d.ts.map +1 -0
  263. package/dist/premium/plugin-validator.js +325 -0
  264. package/dist/premium/plugin-validator.js.map +1 -0
  265. package/dist/premium/private-manifest-loader.d.ts +111 -0
  266. package/dist/premium/private-manifest-loader.d.ts.map +1 -0
  267. package/dist/premium/private-manifest-loader.js +285 -0
  268. package/dist/premium/private-manifest-loader.js.map +1 -0
  269. package/dist/premium/provider-bridge.d.ts +133 -0
  270. package/dist/premium/provider-bridge.d.ts.map +1 -0
  271. package/dist/premium/provider-bridge.js +349 -0
  272. package/dist/premium/provider-bridge.js.map +1 -0
  273. package/dist/premium/session-manager.d.ts +125 -0
  274. package/dist/premium/session-manager.d.ts.map +1 -0
  275. package/dist/premium/session-manager.js +337 -0
  276. package/dist/premium/session-manager.js.map +1 -0
  277. package/dist/premium/stream-broker.d.ts +98 -0
  278. package/dist/premium/stream-broker.d.ts.map +1 -0
  279. package/dist/premium/stream-broker.js +199 -0
  280. package/dist/premium/stream-broker.js.map +1 -0
  281. package/dist/premium/tech-fundamentals-capabilities.d.ts +37 -0
  282. package/dist/premium/tech-fundamentals-capabilities.d.ts.map +1 -0
  283. package/dist/premium/tech-fundamentals-capabilities.js +283 -0
  284. package/dist/premium/tech-fundamentals-capabilities.js.map +1 -0
  285. package/dist/premium/trading-capabilities.d.ts +36 -0
  286. package/dist/premium/trading-capabilities.d.ts.map +1 -0
  287. package/dist/premium/trading-capabilities.js +205 -0
  288. package/dist/premium/trading-capabilities.js.map +1 -0
  289. package/dist/premium/types.d.ts +518 -0
  290. package/dist/premium/types.d.ts.map +1 -0
  291. package/dist/premium/types.js +23 -0
  292. package/dist/premium/types.js.map +1 -0
  293. package/dist/premium/webhook-engine.d.ts +138 -0
  294. package/dist/premium/webhook-engine.d.ts.map +1 -0
  295. package/dist/premium/webhook-engine.js +516 -0
  296. package/dist/premium/webhook-engine.js.map +1 -0
  297. package/dist/prompts/context/sap-agent-context.prompt.d.ts +5 -0
  298. package/dist/prompts/context/sap-agent-context.prompt.d.ts.map +1 -1
  299. package/dist/prompts/context/sap-agent-context.prompt.js +20 -16
  300. package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -1
  301. package/dist/prompts/context/sap-agent-intent-router.prompt.d.ts +14 -0
  302. package/dist/prompts/context/sap-agent-intent-router.prompt.d.ts.map +1 -0
  303. package/dist/prompts/context/sap-agent-intent-router.prompt.js +155 -0
  304. package/dist/prompts/context/sap-agent-intent-router.prompt.js.map +1 -0
  305. package/dist/prompts/context/sap-agent-start.prompt.js +7 -0
  306. package/dist/prompts/context/sap-agent-start.prompt.js.map +1 -1
  307. package/dist/prompts/developer/debug-sap-error.prompt.d.ts +5 -0
  308. package/dist/prompts/developer/debug-sap-error.prompt.d.ts.map +1 -1
  309. package/dist/prompts/developer/debug-sap-error.prompt.js +3 -4
  310. package/dist/prompts/developer/debug-sap-error.prompt.js.map +1 -1
  311. package/dist/prompts/developer/generate-sap-integration.prompt.d.ts +5 -0
  312. package/dist/prompts/developer/generate-sap-integration.prompt.d.ts.map +1 -1
  313. package/dist/prompts/developer/generate-sap-integration.prompt.js +3 -4
  314. package/dist/prompts/developer/generate-sap-integration.prompt.js.map +1 -1
  315. package/dist/prompts/developer/index.d.ts +4 -1
  316. package/dist/prompts/developer/index.d.ts.map +1 -1
  317. package/dist/prompts/developer/index.js +4 -1
  318. package/dist/prompts/developer/index.js.map +1 -1
  319. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.d.ts +5 -0
  320. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.d.ts.map +1 -1
  321. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js +3 -4
  322. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js.map +1 -1
  323. package/dist/prompts/execution-proof/index.d.ts +4 -1
  324. package/dist/prompts/execution-proof/index.d.ts.map +1 -1
  325. package/dist/prompts/execution-proof/index.js +4 -1
  326. package/dist/prompts/execution-proof/index.js.map +1 -1
  327. package/dist/prompts/execution-proof/verify-execution-proof.prompt.d.ts +5 -0
  328. package/dist/prompts/execution-proof/verify-execution-proof.prompt.d.ts.map +1 -1
  329. package/dist/prompts/execution-proof/verify-execution-proof.prompt.js +3 -4
  330. package/dist/prompts/execution-proof/verify-execution-proof.prompt.js.map +1 -1
  331. package/dist/prompts/index.d.ts +4 -1
  332. package/dist/prompts/index.d.ts.map +1 -1
  333. package/dist/prompts/index.js +4 -1
  334. package/dist/prompts/index.js.map +1 -1
  335. package/dist/prompts/payments/create-paid-api.prompt.d.ts +5 -0
  336. package/dist/prompts/payments/create-paid-api.prompt.d.ts.map +1 -1
  337. package/dist/prompts/payments/create-paid-api.prompt.js +3 -4
  338. package/dist/prompts/payments/create-paid-api.prompt.js.map +1 -1
  339. package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts +5 -0
  340. package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts.map +1 -1
  341. package/dist/prompts/payments/explain-x402-settlement.prompt.js +16 -14
  342. package/dist/prompts/payments/explain-x402-settlement.prompt.js.map +1 -1
  343. package/dist/prompts/payments/index.d.ts +4 -1
  344. package/dist/prompts/payments/index.d.ts.map +1 -1
  345. package/dist/prompts/payments/index.js +4 -1
  346. package/dist/prompts/payments/index.js.map +1 -1
  347. package/dist/prompts/register-prompts.d.ts +18 -2
  348. package/dist/prompts/register-prompts.d.ts.map +1 -1
  349. package/dist/prompts/register-prompts.js +21 -3
  350. package/dist/prompts/register-prompts.js.map +1 -1
  351. package/dist/prompts/registry/analyze-sap-agent.prompt.d.ts +5 -0
  352. package/dist/prompts/registry/analyze-sap-agent.prompt.d.ts.map +1 -1
  353. package/dist/prompts/registry/analyze-sap-agent.prompt.js +3 -4
  354. package/dist/prompts/registry/analyze-sap-agent.prompt.js.map +1 -1
  355. package/dist/prompts/registry/index.d.ts +4 -1
  356. package/dist/prompts/registry/index.d.ts.map +1 -1
  357. package/dist/prompts/registry/index.js +4 -1
  358. package/dist/prompts/registry/index.js.map +1 -1
  359. package/dist/prompts/registry/register-sap-agent.prompt.d.ts +5 -0
  360. package/dist/prompts/registry/register-sap-agent.prompt.d.ts.map +1 -1
  361. package/dist/prompts/registry/register-sap-agent.prompt.js +22 -23
  362. package/dist/prompts/registry/register-sap-agent.prompt.js.map +1 -1
  363. package/dist/remote/premium-memory.d.ts +90 -0
  364. package/dist/remote/premium-memory.d.ts.map +1 -0
  365. package/dist/remote/premium-memory.js +161 -0
  366. package/dist/remote/premium-memory.js.map +1 -0
  367. package/dist/remote/premium-routes.d.ts +99 -0
  368. package/dist/remote/premium-routes.d.ts.map +1 -0
  369. package/dist/remote/premium-routes.js +347 -0
  370. package/dist/remote/premium-routes.js.map +1 -0
  371. package/dist/remote/public-home/sections.d.ts.map +1 -1
  372. package/dist/remote/public-home/sections.js +23 -4
  373. package/dist/remote/public-home/sections.js.map +1 -1
  374. package/dist/remote/public-home/types.d.ts +9 -0
  375. package/dist/remote/public-home/types.d.ts.map +1 -1
  376. package/dist/remote/server.d.ts +20 -0
  377. package/dist/remote/server.d.ts.map +1 -1
  378. package/dist/remote/server.js +370 -9
  379. package/dist/remote/server.js.map +1 -1
  380. package/dist/remote/tx-relay.d.ts +42 -0
  381. package/dist/remote/tx-relay.d.ts.map +1 -0
  382. package/dist/remote/tx-relay.js +118 -0
  383. package/dist/remote/tx-relay.js.map +1 -0
  384. package/dist/resources/current/sap-current-config.resource.d.ts +5 -0
  385. package/dist/resources/current/sap-current-config.resource.d.ts.map +1 -1
  386. package/dist/resources/current/sap-current-config.resource.js +2 -5
  387. package/dist/resources/current/sap-current-config.resource.js.map +1 -1
  388. package/dist/resources/execution-proof/index.d.ts +5 -0
  389. package/dist/resources/execution-proof/index.d.ts.map +1 -1
  390. package/dist/resources/execution-proof/index.js +5 -0
  391. package/dist/resources/execution-proof/index.js.map +1 -1
  392. package/dist/resources/execution-proof/sap-execution-record.resource.d.ts +5 -0
  393. package/dist/resources/execution-proof/sap-execution-record.resource.d.ts.map +1 -1
  394. package/dist/resources/execution-proof/sap-execution-record.resource.js +3 -4
  395. package/dist/resources/execution-proof/sap-execution-record.resource.js.map +1 -1
  396. package/dist/resources/index.d.ts +5 -0
  397. package/dist/resources/index.d.ts.map +1 -1
  398. package/dist/resources/index.js +5 -0
  399. package/dist/resources/index.js.map +1 -1
  400. package/dist/resources/memory/index.d.ts +5 -0
  401. package/dist/resources/memory/index.d.ts.map +1 -1
  402. package/dist/resources/memory/index.js +5 -0
  403. package/dist/resources/memory/index.js.map +1 -1
  404. package/dist/resources/memory/sap-memory.resource.d.ts +5 -0
  405. package/dist/resources/memory/sap-memory.resource.d.ts.map +1 -1
  406. package/dist/resources/memory/sap-memory.resource.js +3 -4
  407. package/dist/resources/memory/sap-memory.resource.js.map +1 -1
  408. package/dist/resources/profile/sap-active-profile.resource.d.ts +5 -0
  409. package/dist/resources/profile/sap-active-profile.resource.d.ts.map +1 -1
  410. package/dist/resources/profile/sap-active-profile.resource.js +2 -5
  411. package/dist/resources/profile/sap-active-profile.resource.js.map +1 -1
  412. package/dist/resources/register-resources.d.ts +5 -0
  413. package/dist/resources/register-resources.d.ts.map +1 -1
  414. package/dist/resources/register-resources.js +3 -1
  415. package/dist/resources/register-resources.js.map +1 -1
  416. package/dist/resources/registry/index.d.ts +5 -0
  417. package/dist/resources/registry/index.d.ts.map +1 -1
  418. package/dist/resources/registry/index.js +5 -0
  419. package/dist/resources/registry/index.js.map +1 -1
  420. package/dist/resources/registry/sap-agent.resource.d.ts +5 -0
  421. package/dist/resources/registry/sap-agent.resource.d.ts.map +1 -1
  422. package/dist/resources/registry/sap-agent.resource.js +3 -4
  423. package/dist/resources/registry/sap-agent.resource.js.map +1 -1
  424. package/dist/resources/registry/sap-global-registry.resource.d.ts +18 -4
  425. package/dist/resources/registry/sap-global-registry.resource.d.ts.map +1 -1
  426. package/dist/resources/registry/sap-global-registry.resource.js +18 -4
  427. package/dist/resources/registry/sap-global-registry.resource.js.map +1 -1
  428. package/dist/resources/reputation/index.d.ts +4 -1
  429. package/dist/resources/reputation/index.d.ts.map +1 -1
  430. package/dist/resources/reputation/index.js +4 -1
  431. package/dist/resources/reputation/index.js.map +1 -1
  432. package/dist/resources/reputation/sap-reputation.resource.d.ts +18 -4
  433. package/dist/resources/reputation/sap-reputation.resource.d.ts.map +1 -1
  434. package/dist/resources/reputation/sap-reputation.resource.js +18 -4
  435. package/dist/resources/reputation/sap-reputation.resource.js.map +1 -1
  436. package/dist/resources/tool-schema/index.d.ts +4 -1
  437. package/dist/resources/tool-schema/index.d.ts.map +1 -1
  438. package/dist/resources/tool-schema/index.js +4 -1
  439. package/dist/resources/tool-schema/index.js.map +1 -1
  440. package/dist/resources/tool-schema/sap-tool-schema.resource.d.ts +18 -4
  441. package/dist/resources/tool-schema/sap-tool-schema.resource.d.ts.map +1 -1
  442. package/dist/resources/tool-schema/sap-tool-schema.resource.js +18 -4
  443. package/dist/resources/tool-schema/sap-tool-schema.resource.js.map +1 -1
  444. package/dist/sap/index.d.ts +7 -1
  445. package/dist/sap/index.d.ts.map +1 -1
  446. package/dist/sap/index.js +7 -1
  447. package/dist/sap/index.js.map +1 -1
  448. package/dist/sap/sap-client-manager.d.ts +80 -13
  449. package/dist/sap/sap-client-manager.d.ts.map +1 -1
  450. package/dist/sap/sap-client-manager.js +80 -13
  451. package/dist/sap/sap-client-manager.js.map +1 -1
  452. package/dist/sap/sap-errors.d.ts +22 -3
  453. package/dist/sap/sap-errors.d.ts.map +1 -1
  454. package/dist/sap/sap-errors.js +22 -3
  455. package/dist/sap/sap-errors.js.map +1 -1
  456. package/dist/sap/sap-types.d.ts +75 -6
  457. package/dist/sap/sap-types.d.ts.map +1 -1
  458. package/dist/sap/sap-types.js +11 -1
  459. package/dist/sap/sap-types.js.map +1 -1
  460. package/dist/schemas/common.schema.d.ts +45 -8
  461. package/dist/schemas/common.schema.d.ts.map +1 -1
  462. package/dist/schemas/common.schema.js +45 -8
  463. package/dist/schemas/common.schema.js.map +1 -1
  464. package/dist/schemas/developer.schema.d.ts +22 -3
  465. package/dist/schemas/developer.schema.d.ts.map +1 -1
  466. package/dist/schemas/developer.schema.js +22 -3
  467. package/dist/schemas/developer.schema.js.map +1 -1
  468. package/dist/schemas/execution-proof.schema.d.ts +29 -4
  469. package/dist/schemas/execution-proof.schema.d.ts.map +1 -1
  470. package/dist/schemas/execution-proof.schema.js +29 -4
  471. package/dist/schemas/execution-proof.schema.js.map +1 -1
  472. package/dist/schemas/identity.schema.d.ts +23 -3
  473. package/dist/schemas/identity.schema.d.ts.map +1 -1
  474. package/dist/schemas/identity.schema.js +23 -3
  475. package/dist/schemas/identity.schema.js.map +1 -1
  476. package/dist/schemas/index.d.ts +11 -1
  477. package/dist/schemas/index.d.ts.map +1 -1
  478. package/dist/schemas/index.js +11 -1
  479. package/dist/schemas/index.js.map +1 -1
  480. package/dist/schemas/memory.schema.d.ts +23 -3
  481. package/dist/schemas/memory.schema.d.ts.map +1 -1
  482. package/dist/schemas/memory.schema.js +23 -3
  483. package/dist/schemas/memory.schema.js.map +1 -1
  484. package/dist/schemas/payments.schema.d.ts +24 -3
  485. package/dist/schemas/payments.schema.d.ts.map +1 -1
  486. package/dist/schemas/payments.schema.js +24 -3
  487. package/dist/schemas/payments.schema.js.map +1 -1
  488. package/dist/schemas/registry.schema.d.ts +38 -6
  489. package/dist/schemas/registry.schema.d.ts.map +1 -1
  490. package/dist/schemas/registry.schema.js +36 -4
  491. package/dist/schemas/registry.schema.js.map +1 -1
  492. package/dist/schemas/reputation.schema.d.ts +22 -3
  493. package/dist/schemas/reputation.schema.d.ts.map +1 -1
  494. package/dist/schemas/reputation.schema.js +22 -3
  495. package/dist/schemas/reputation.schema.js.map +1 -1
  496. package/dist/schemas/settlement.schema.d.ts +31 -4
  497. package/dist/schemas/settlement.schema.d.ts.map +1 -1
  498. package/dist/schemas/settlement.schema.js +31 -4
  499. package/dist/schemas/settlement.schema.js.map +1 -1
  500. package/dist/schemas/tool-schema.schema.d.ts +29 -3
  501. package/dist/schemas/tool-schema.schema.d.ts.map +1 -1
  502. package/dist/schemas/tool-schema.schema.js +29 -3
  503. package/dist/schemas/tool-schema.schema.js.map +1 -1
  504. package/dist/schemas/transaction.schema.d.ts +23 -3
  505. package/dist/schemas/transaction.schema.d.ts.map +1 -1
  506. package/dist/schemas/transaction.schema.js +23 -3
  507. package/dist/schemas/transaction.schema.js.map +1 -1
  508. package/dist/security/approval-required.d.ts +19 -2
  509. package/dist/security/approval-required.d.ts.map +1 -1
  510. package/dist/security/approval-required.js +19 -2
  511. package/dist/security/approval-required.js.map +1 -1
  512. package/dist/security/index.d.ts +7 -1
  513. package/dist/security/index.d.ts.map +1 -1
  514. package/dist/security/index.js +7 -1
  515. package/dist/security/index.js.map +1 -1
  516. package/dist/security/private-key-guard.d.ts +18 -2
  517. package/dist/security/private-key-guard.d.ts.map +1 -1
  518. package/dist/security/private-key-guard.js +19 -2
  519. package/dist/security/private-key-guard.js.map +1 -1
  520. package/dist/security/prompt-injection-notes.d.ts +10 -1
  521. package/dist/security/prompt-injection-notes.d.ts.map +1 -1
  522. package/dist/security/prompt-injection-notes.js +10 -1
  523. package/dist/security/prompt-injection-notes.js.map +1 -1
  524. package/dist/security/tool-permissions.d.ts.map +1 -1
  525. package/dist/security/tool-permissions.js +12 -0
  526. package/dist/security/tool-permissions.js.map +1 -1
  527. package/dist/security/unsafe-action-guard.d.ts +36 -10
  528. package/dist/security/unsafe-action-guard.d.ts.map +1 -1
  529. package/dist/security/unsafe-action-guard.js +67 -15
  530. package/dist/security/unsafe-action-guard.js.map +1 -1
  531. package/dist/server/create-server.d.ts +18 -3
  532. package/dist/server/create-server.d.ts.map +1 -1
  533. package/dist/server/create-server.js +20 -4
  534. package/dist/server/create-server.js.map +1 -1
  535. package/dist/server/index.d.ts +6 -1
  536. package/dist/server/index.d.ts.map +1 -1
  537. package/dist/server/index.js +6 -1
  538. package/dist/server/index.js.map +1 -1
  539. package/dist/server/register-capabilities.d.ts +17 -2
  540. package/dist/server/register-capabilities.d.ts.map +1 -1
  541. package/dist/server/register-capabilities.js +17 -2
  542. package/dist/server/register-capabilities.js.map +1 -1
  543. package/dist/server/server-metadata.d.ts +35 -1
  544. package/dist/server/server-metadata.d.ts.map +1 -1
  545. package/dist/server/server-metadata.js +36 -2
  546. package/dist/server/server-metadata.js.map +1 -1
  547. package/dist/session/agent-session.d.ts +35 -4
  548. package/dist/session/agent-session.d.ts.map +1 -1
  549. package/dist/session/agent-session.js +35 -4
  550. package/dist/session/agent-session.js.map +1 -1
  551. package/dist/session/delegated-session.d.ts +31 -3
  552. package/dist/session/delegated-session.d.ts.map +1 -1
  553. package/dist/session/delegated-session.js +31 -3
  554. package/dist/session/delegated-session.js.map +1 -1
  555. package/dist/session/index.d.ts +7 -1
  556. package/dist/session/index.d.ts.map +1 -1
  557. package/dist/session/index.js +7 -1
  558. package/dist/session/index.js.map +1 -1
  559. package/dist/session/redis-session-store.d.ts +94 -21
  560. package/dist/session/redis-session-store.d.ts.map +1 -1
  561. package/dist/session/redis-session-store.js +87 -20
  562. package/dist/session/redis-session-store.js.map +1 -1
  563. package/dist/session/session-limits.d.ts +34 -4
  564. package/dist/session/session-limits.d.ts.map +1 -1
  565. package/dist/session/session-limits.js +34 -4
  566. package/dist/session/session-limits.js.map +1 -1
  567. package/dist/session/session-permissions.d.ts +57 -7
  568. package/dist/session/session-permissions.d.ts.map +1 -1
  569. package/dist/session/session-permissions.js +57 -7
  570. package/dist/session/session-permissions.js.map +1 -1
  571. package/dist/session/session-store.d.ts +9 -1
  572. package/dist/session/session-store.d.ts.map +1 -1
  573. package/dist/session/session-store.js +18 -3
  574. package/dist/session/session-store.js.map +1 -1
  575. package/dist/session/session-types.d.ts +33 -4
  576. package/dist/session/session-types.d.ts.map +1 -1
  577. package/dist/session/session-types.js +9 -1
  578. package/dist/session/session-types.js.map +1 -1
  579. package/dist/signer/index.d.ts +7 -1
  580. package/dist/signer/index.d.ts.map +1 -1
  581. package/dist/signer/index.js +7 -1
  582. package/dist/signer/index.js.map +1 -1
  583. package/dist/signer/load-keypair.d.ts +25 -4
  584. package/dist/signer/load-keypair.d.ts.map +1 -1
  585. package/dist/signer/load-keypair.js +25 -4
  586. package/dist/signer/load-keypair.js.map +1 -1
  587. package/dist/signer/local-keypair-signer.d.ts +19 -3
  588. package/dist/signer/local-keypair-signer.d.ts.map +1 -1
  589. package/dist/signer/local-keypair-signer.js +24 -4
  590. package/dist/signer/local-keypair-signer.js.map +1 -1
  591. package/dist/signer/signer-resolver.d.ts +19 -2
  592. package/dist/signer/signer-resolver.d.ts.map +1 -1
  593. package/dist/signer/signer-resolver.js +26 -3
  594. package/dist/signer/signer-resolver.js.map +1 -1
  595. package/dist/signer/signer-types.d.ts +47 -5
  596. package/dist/signer/signer-types.d.ts.map +1 -1
  597. package/dist/signer/signer-types.js +13 -1
  598. package/dist/signer/signer-types.js.map +1 -1
  599. package/dist/strategies/strategy-store.d.ts +82 -0
  600. package/dist/strategies/strategy-store.d.ts.map +1 -0
  601. package/dist/strategies/strategy-store.js +165 -0
  602. package/dist/strategies/strategy-store.js.map +1 -0
  603. package/dist/tools/agent-start-tool.d.ts.map +1 -1
  604. package/dist/tools/agent-start-tool.js +481 -5
  605. package/dist/tools/agent-start-tool.js.map +1 -1
  606. package/dist/tools/client-sdk-tools.d.ts.map +1 -1
  607. package/dist/tools/client-sdk-tools.js +32 -7
  608. package/dist/tools/client-sdk-tools.js.map +1 -1
  609. package/dist/tools/estimate-tool-cost.d.ts +13 -0
  610. package/dist/tools/estimate-tool-cost.d.ts.map +1 -0
  611. package/dist/tools/estimate-tool-cost.js +139 -0
  612. package/dist/tools/estimate-tool-cost.js.map +1 -0
  613. package/dist/tools/index.d.ts +8 -0
  614. package/dist/tools/index.d.ts.map +1 -1
  615. package/dist/tools/index.js +11 -0
  616. package/dist/tools/index.js.map +1 -1
  617. package/dist/tools/magicblock-tools.d.ts +31 -6
  618. package/dist/tools/magicblock-tools.d.ts.map +1 -1
  619. package/dist/tools/magicblock-tools.js +178 -53
  620. package/dist/tools/magicblock-tools.js.map +1 -1
  621. package/dist/tools/memory-tools.d.ts +26 -0
  622. package/dist/tools/memory-tools.d.ts.map +1 -0
  623. package/dist/tools/memory-tools.js +533 -0
  624. package/dist/tools/memory-tools.js.map +1 -0
  625. package/dist/tools/perp-tools.d.ts +39 -0
  626. package/dist/tools/perp-tools.d.ts.map +1 -0
  627. package/dist/tools/perp-tools.js +1110 -0
  628. package/dist/tools/perp-tools.js.map +1 -0
  629. package/dist/tools/premium-tools.d.ts +8 -0
  630. package/dist/tools/premium-tools.d.ts.map +1 -0
  631. package/dist/tools/premium-tools.js +1102 -0
  632. package/dist/tools/premium-tools.js.map +1 -0
  633. package/dist/tools/profile-tools.d.ts.map +1 -1
  634. package/dist/tools/profile-tools.js +18 -1
  635. package/dist/tools/profile-tools.js.map +1 -1
  636. package/dist/tools/quick-context-tool.d.ts +16 -0
  637. package/dist/tools/quick-context-tool.d.ts.map +1 -0
  638. package/dist/tools/quick-context-tool.js +304 -0
  639. package/dist/tools/quick-context-tool.js.map +1 -0
  640. package/dist/tools/register-tools.d.ts.map +1 -1
  641. package/dist/tools/register-tools.js +17 -0
  642. package/dist/tools/register-tools.js.map +1 -1
  643. package/dist/tools/sap-sdk-tools.d.ts +420 -1
  644. package/dist/tools/sap-sdk-tools.d.ts.map +1 -1
  645. package/dist/tools/sap-sdk-tools.js +1548 -127
  646. package/dist/tools/sap-sdk-tools.js.map +1 -1
  647. package/dist/tools/sap-sns-tools.d.ts +2 -2
  648. package/dist/tools/sap-sns-tools.d.ts.map +1 -1
  649. package/dist/tools/sap-sns-tools.js +12 -8
  650. package/dist/tools/sap-sns-tools.js.map +1 -1
  651. package/dist/tools/skills-tools.d.ts +16 -0
  652. package/dist/tools/skills-tools.d.ts.map +1 -1
  653. package/dist/tools/skills-tools.js +282 -5
  654. package/dist/tools/skills-tools.js.map +1 -1
  655. package/dist/tools/tool-aliases.d.ts.map +1 -1
  656. package/dist/tools/tool-aliases.js +7 -0
  657. package/dist/tools/tool-aliases.js.map +1 -1
  658. package/dist/tools/transaction-tools.d.ts +135 -0
  659. package/dist/tools/transaction-tools.d.ts.map +1 -1
  660. package/dist/tools/transaction-tools.js +515 -16
  661. package/dist/tools/transaction-tools.js.map +1 -1
  662. package/dist/tools/x402-paid-call-tool.d.ts.map +1 -1
  663. package/dist/tools/x402-paid-call-tool.js +756 -23
  664. package/dist/tools/x402-paid-call-tool.js.map +1 -1
  665. package/dist/transports/index.d.ts +6 -1
  666. package/dist/transports/index.d.ts.map +1 -1
  667. package/dist/transports/index.js +6 -1
  668. package/dist/transports/index.js.map +1 -1
  669. package/dist/transports/stdio.d.ts +17 -5
  670. package/dist/transports/stdio.d.ts.map +1 -1
  671. package/dist/transports/stdio.js +17 -5
  672. package/dist/transports/stdio.js.map +1 -1
  673. package/dist/tui/wizard-save.d.ts +88 -8
  674. package/dist/tui/wizard-save.d.ts.map +1 -1
  675. package/dist/tui/wizard-save.js +77 -8
  676. package/dist/tui/wizard-save.js.map +1 -1
  677. package/dist/wizard-core/desktop-flow.d.ts.map +1 -1
  678. package/dist/wizard-core/desktop-flow.js +4 -2
  679. package/dist/wizard-core/desktop-flow.js.map +1 -1
  680. package/docs/03_CONFIGURATION_AND_WIZARD.md +5 -3
  681. package/docs/06_PAYMENTS_X402_AND_PAYSH.md +82 -4
  682. package/docs/07_ENDPOINTS_AND_CLIENTS.md +7 -3
  683. package/docs/09_TOOLS_SKILLS_AND_AGENT_GUIDE.md +21 -3
  684. package/docs/14_DESKTOP_WIZARD_RELEASE.md +8 -6
  685. package/docs/16_SAP_AGENT_IDENTITY_PIPELINE.md +304 -0
  686. package/docs/18_PREMIUM_PLUGIN_RUNTIME.md +108 -0
  687. package/docs/BRANCH_AND_CI.md +67 -0
  688. package/docs/README.md +19 -2
  689. package/docs/magicblock-tools.md +70 -29
  690. package/package.json +10 -6
  691. package/server.json +3 -3
  692. package/skills/README.md +12 -2
  693. package/skills/sap-agent-registry/SKILL.md +99 -4
  694. package/skills/sap-defi/SKILL.md +8 -4
  695. package/skills/sap-discovery-indexing/SKILL.md +26 -4
  696. package/skills/sap-escrow-settlement/SKILL.md +22 -4
  697. package/skills/sap-mcp/SKILL.md +140 -22
  698. package/skills/sap-mcp/TOOL_REFERENCE.md +47 -7
  699. package/skills/sap-nft-metaplex/SKILL.md +22 -0
  700. package/skills/sap-operations/SKILL.md +32 -3
  701. package/skills/sap-payments-x402/SKILL.md +85 -8
  702. package/skills/sap-sns/SKILL.md +32 -10
  703. package/smithery.config.schema.json +7 -0
@@ -12,11 +12,13 @@ import { Connection, PublicKey } from '@solana/web3.js';
12
12
  import { loadConfig } from '../config/env.js';
13
13
  import { getActiveProfile, getProfileConfigPath } from '../config/profiles.js';
14
14
  import { MCP_SERVER_VERSION } from '../core/constants.js';
15
+ import { getCachedSession, cacheSession, invalidateSession } from './mcp-session-cache.js';
15
16
  export const DEFAULT_X402_PAID_CALL_ENDPOINT = 'https://mcp.sap.oobeprotocol.ai/mcp';
16
17
  const MCP_PROTOCOL_VERSION = '2025-06-18';
17
18
  const DEFAULT_MAX_ATTEMPTS = 3;
18
19
  const MAX_ALLOWED_ATTEMPTS = 5;
19
20
  const RETRY_BASE_DELAY_MS = 500;
21
+ const MAX_EXTERNAL_BODY_BYTES = 256 * 1024;
20
22
  const MAINNET_USDC_MINT = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v';
21
23
  const DEVNET_USDC_MINT = '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU';
22
24
  /**
@@ -59,6 +61,167 @@ export async function executeX402PaidCall(input) {
59
61
  }
60
62
  throw new Error('x402 paid call exhausted retries.');
61
63
  }
64
+ /**
65
+ * @name executeX402BatchPaidCall
66
+ * @description Executes multiple paid tool calls in parallel with a shared MCP session.
67
+ * Uses concurrency-limited parallelism (default 3) to avoid overwhelming the hosted server.
68
+ * Each call gets its own x402 challenge and payment — no shared payment across calls.
69
+ */
70
+ export async function executeX402BatchPaidCall(input) {
71
+ if (!input.confirm) {
72
+ throw new Error('Batch x402 paid calls require confirm: true because they sign payment payloads.');
73
+ }
74
+ if (!Number.isFinite(input.maxPriceUsd) || input.maxPriceUsd <= 0) {
75
+ throw new Error('Batch x402 paid calls require a positive maxPriceUsd spending cap.');
76
+ }
77
+ if (!input.calls || input.calls.length === 0) {
78
+ throw new Error('Batch x402 paid calls require at least one call.');
79
+ }
80
+ const endpoint = input.endpoint ?? DEFAULT_X402_PAID_CALL_ENDPOINT;
81
+ const profileName = input.profileName ?? getActiveProfile();
82
+ const config = loadPaymentProfile(input.profileName);
83
+ const signer = await loadClientSigner(config);
84
+ const httpClient = createHttpPaymentClient(signer);
85
+ const sessionId = await initializeMcpSession(endpoint);
86
+ const maxAttempts = normalizeMaxAttempts(input.maxAttempts);
87
+ const maxTotalUsd = normalizeBatchMaxTotalUsd(input.maxTotalUsd, input.maxPriceUsd, input.calls.length);
88
+ const enforceExplicitTotalCap = input.maxTotalUsd !== undefined;
89
+ const concurrency = enforceExplicitTotalCap ? 1 : Math.max(1, Math.min(input.concurrency ?? 3, 8));
90
+ const signerAddress = String(signer.address);
91
+ // Execute calls with limited concurrency
92
+ const results = [];
93
+ const queue = Array.from(input.calls.entries());
94
+ let reservedAmountUsd = 0;
95
+ async function processOne(index) {
96
+ while (index < queue.length) {
97
+ const [, call] = queue[index];
98
+ if (reservedAmountUsd + input.maxPriceUsd > maxTotalUsd) {
99
+ results[index] = {
100
+ success: false,
101
+ error: `batch_max_total_exceeded: refusing ${call.toolName}; per-call cap ${formatClientUsd(input.maxPriceUsd)} would exceed batch cap ${formatClientUsd(maxTotalUsd)}.`,
102
+ toolName: call.toolName,
103
+ };
104
+ index += concurrency;
105
+ continue;
106
+ }
107
+ reservedAmountUsd += input.maxPriceUsd;
108
+ const requestBody = buildToolCallRequest(call.toolName, call.arguments);
109
+ const transientRetries = [];
110
+ let lastError;
111
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
112
+ try {
113
+ const result = await executePaidAttempt({
114
+ endpoint,
115
+ sessionId,
116
+ signerAddress,
117
+ httpClient,
118
+ requestBody,
119
+ profileName,
120
+ maxPriceUsd: input.maxPriceUsd,
121
+ attempt,
122
+ transientRetries,
123
+ });
124
+ results[index] = result;
125
+ break;
126
+ }
127
+ catch (error) {
128
+ const retry = classifyPaidCallRetry(error);
129
+ if (!retry.retryable || attempt >= maxAttempts) {
130
+ lastError = error instanceof Error ? error.message : String(error);
131
+ results[index] = {
132
+ success: false,
133
+ error: lastError,
134
+ toolName: call.toolName,
135
+ };
136
+ break;
137
+ }
138
+ transientRetries.push(retry.reason);
139
+ await sleep(RETRY_BASE_DELAY_MS * attempt);
140
+ }
141
+ }
142
+ index += concurrency;
143
+ }
144
+ }
145
+ // Launch concurrent workers
146
+ const workers = Array.from({ length: Math.min(concurrency, queue.length) }, (_, i) => processOne(i));
147
+ await Promise.all(workers);
148
+ const succeeded = results.filter(r => r.success).length;
149
+ const totalAmountUsd = results.reduce((sum, r) => sum + ('payment' in r ? r.payment.amountUsd : 0), 0);
150
+ return {
151
+ success: succeeded === results.length,
152
+ endpoint,
153
+ sessionId,
154
+ totalCalls: input.calls.length,
155
+ succeeded,
156
+ failed: results.length - succeeded,
157
+ totalAmountUsd,
158
+ results,
159
+ audit: {
160
+ profileName,
161
+ signerAddress,
162
+ totalAmountUsd,
163
+ maxTotalUsd,
164
+ callCount: input.calls.length,
165
+ concurrency,
166
+ },
167
+ };
168
+ }
169
+ function normalizeBatchMaxTotalUsd(value, maxPriceUsd, callCount) {
170
+ const defaultTotal = maxPriceUsd * callCount;
171
+ if (value === undefined) {
172
+ return defaultTotal;
173
+ }
174
+ if (!Number.isFinite(value) || value <= 0) {
175
+ throw new Error('Batch x402 paid calls require maxTotalUsd to be positive when provided.');
176
+ }
177
+ if (value < maxPriceUsd) {
178
+ throw new Error('Batch x402 paid calls require maxTotalUsd to be at least maxPriceUsd for one call.');
179
+ }
180
+ return value;
181
+ }
182
+ function formatClientUsd(value) {
183
+ return `$${value.toFixed(6).replace(/0+$/, '').replace(/\.$/, '')}`;
184
+ }
185
+ /**
186
+ * @name executeExternalX402Call
187
+ * @description Calls a generic HTTP x402 endpoint by fetching its challenge, signing locally, retrying with the payment header, and returning the receipt.
188
+ */
189
+ export async function executeExternalX402Call(input) {
190
+ validateExternalInput(input);
191
+ const url = normalizeExternalUrl(input.url);
192
+ const method = normalizeHttpMethod(input.method);
193
+ const profileName = input.profileName ?? getActiveProfile();
194
+ const config = loadPaymentProfile(input.profileName);
195
+ const signer = await loadClientSigner(config);
196
+ const httpClient = createHttpPaymentClient(signer);
197
+ const maxAttempts = normalizeMaxAttempts(input.maxAttempts);
198
+ const transientRetries = [];
199
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
200
+ try {
201
+ return await executeExternalPaidAttempt({
202
+ url,
203
+ method,
204
+ headers: normalizeExternalHeaders(input.headers),
205
+ body: input.body,
206
+ signerAddress: String(signer.address),
207
+ httpClient,
208
+ profileName,
209
+ maxPriceUsd: input.maxPriceUsd,
210
+ attempt,
211
+ transientRetries,
212
+ });
213
+ }
214
+ catch (error) {
215
+ const retry = classifyPaidCallRetry(error);
216
+ if (!retry.retryable || attempt >= maxAttempts) {
217
+ throw error;
218
+ }
219
+ transientRetries.push(retry.reason);
220
+ await sleep(RETRY_BASE_DELAY_MS * attempt);
221
+ }
222
+ }
223
+ throw new Error('external x402 call exhausted retries.');
224
+ }
62
225
  /**
63
226
  * @name getX402PaymentReadiness
64
227
  * @description Checks local profile, signer, RPC, balances, and commerce policy for hosted paid/write workflows.
@@ -229,6 +392,15 @@ export function inspectX402Receipt(receiptHeader) {
229
392
  }
230
393
  async function executePaidAttempt(options) {
231
394
  const unpaid = await postMcp(options.endpoint, options.requestBody, options.sessionId);
395
+ // If the cached session expired server-side, invalidate and re-initialize once
396
+ if (unpaid.response.status === 404 || isSessionNotFound(unpaid.body)) {
397
+ if (options.sessionRefreshAttempted) {
398
+ throw new Error(`MCP session refresh failed: ${JSON.stringify(unpaid.body)}`);
399
+ }
400
+ invalidateSession(options.endpoint);
401
+ const freshSession = await initializeMcpSession(options.endpoint);
402
+ return executePaidAttempt({ ...options, sessionId: freshSession, sessionRefreshAttempted: true });
403
+ }
232
404
  const paymentRequired = getPaymentRequiredResponse(options.httpClient, unpaid.response, unpaid.body);
233
405
  const selectedRequirements = selectSingleRequirement(paymentRequired, options.maxPriceUsd);
234
406
  const amountUsd = paymentRequirementsAmountUsd(selectedRequirements);
@@ -288,6 +460,94 @@ async function executePaidAttempt(options) {
288
460
  audit,
289
461
  };
290
462
  }
463
+ async function executeExternalPaidAttempt(options) {
464
+ const unpaid = await fetchExternal(options.url, options.method, options.headers, options.body);
465
+ if (unpaid.response.status !== 402) {
466
+ return buildExternalResultWithoutPayment(options, unpaid);
467
+ }
468
+ const paymentRequired = getPaymentRequiredResponse(options.httpClient, unpaid.response, unpaid.body);
469
+ const selectedRequirements = selectSingleRequirement(paymentRequired, options.maxPriceUsd);
470
+ const amountUsd = paymentRequirementsAmountUsd(selectedRequirements);
471
+ const paymentPayload = await options.httpClient.createPaymentPayload({
472
+ ...paymentRequired,
473
+ accepts: [selectedRequirements],
474
+ });
475
+ const paymentHeaders = options.httpClient.encodePaymentSignatureHeader(paymentPayload);
476
+ const paid = await fetchExternal(options.url, options.method, {
477
+ ...options.headers,
478
+ ...paymentHeaders,
479
+ }, options.body);
480
+ const paymentResult = await options.httpClient.processPaymentResult(paymentPayload, name => paid.response.headers.get(name), paid.response.status);
481
+ if (!paid.response.ok) {
482
+ throw new Error(`External x402 call failed with HTTP ${paid.response.status}: ${JSON.stringify(paid.body)}`);
483
+ }
484
+ const audit = {
485
+ intentId: buildExternalIntentId(options.url, options.method),
486
+ profileName: options.profileName,
487
+ signerAddress: options.signerAddress,
488
+ url: options.url,
489
+ method: options.method,
490
+ payment: {
491
+ amountUsd,
492
+ network: selectedRequirements.network,
493
+ asset: selectedRequirements.asset,
494
+ payTo: selectedRequirements.payTo,
495
+ },
496
+ receipt: {
497
+ present: Boolean(paymentResult.settleResponse),
498
+ ...(paymentResult.settleResponse?.transaction ? { transaction: paymentResult.settleResponse.transaction } : {}),
499
+ ...(paymentResult.settleResponse?.network ? { network: paymentResult.settleResponse.network } : {}),
500
+ ...(paymentResult.settleResponse?.amount ? { amount: paymentResult.settleResponse.amount } : {}),
501
+ ...(paymentResult.settleResponse?.payer ? { payer: paymentResult.settleResponse.payer } : {}),
502
+ },
503
+ attempts: options.attempt,
504
+ transientRetries: options.transientRetries,
505
+ secretMaterial: 'keypair-bytes-never-returned',
506
+ };
507
+ return {
508
+ success: true,
509
+ url: options.url,
510
+ method: options.method,
511
+ signerAddress: options.signerAddress,
512
+ payment: audit.payment,
513
+ settlement: paymentResult.settleResponse,
514
+ response: {
515
+ status: paid.response.status,
516
+ headers: safeResponseHeaders(paid.response.headers),
517
+ body: paid.body,
518
+ },
519
+ attempts: options.attempt,
520
+ transientRetries: options.transientRetries,
521
+ audit,
522
+ };
523
+ }
524
+ function buildExternalResultWithoutPayment(options, result) {
525
+ const audit = {
526
+ intentId: buildExternalIntentId(options.url, options.method),
527
+ profileName: options.profileName,
528
+ signerAddress: options.signerAddress,
529
+ url: options.url,
530
+ method: options.method,
531
+ receipt: { present: false },
532
+ attempts: options.attempt,
533
+ transientRetries: options.transientRetries,
534
+ secretMaterial: 'keypair-bytes-never-returned',
535
+ };
536
+ return {
537
+ success: result.response.ok,
538
+ url: options.url,
539
+ method: options.method,
540
+ signerAddress: options.signerAddress,
541
+ response: {
542
+ status: result.response.status,
543
+ headers: safeResponseHeaders(result.response.headers),
544
+ body: result.body,
545
+ },
546
+ attempts: options.attempt,
547
+ transientRetries: options.transientRetries,
548
+ audit,
549
+ };
550
+ }
291
551
  function validateInput(input) {
292
552
  if (!input.confirm) {
293
553
  throw new Error('x402 paid calls require confirm: true because they sign a payment payload.');
@@ -299,6 +559,17 @@ function validateInput(input) {
299
559
  throw new Error('Provide either body or toolName.');
300
560
  }
301
561
  }
562
+ function validateExternalInput(input) {
563
+ if (!input.confirm) {
564
+ throw new Error('external x402 calls require confirm: true because they sign a payment payload.');
565
+ }
566
+ if (!Number.isFinite(input.maxPriceUsd) || input.maxPriceUsd <= 0) {
567
+ throw new Error('external x402 calls require a positive maxPriceUsd spending cap.');
568
+ }
569
+ if (!input.url || typeof input.url !== 'string') {
570
+ throw new Error('url is required for external x402 calls.');
571
+ }
572
+ }
302
573
  function loadPaymentProfile(profileName) {
303
574
  if (profileName) {
304
575
  return loadConfig(getProfileConfigPath(profileName));
@@ -327,6 +598,11 @@ function createHttpPaymentClient(signer) {
327
598
  return new x402HTTPClient(client);
328
599
  }
329
600
  async function initializeMcpSession(endpoint) {
601
+ // Check cache first — reuse session if still valid (5min TTL)
602
+ const cached = getCachedSession(endpoint);
603
+ if (cached) {
604
+ return cached;
605
+ }
330
606
  const initBody = {
331
607
  jsonrpc: '2.0',
332
608
  id: 'sap-x402-paid-call-init',
@@ -350,6 +626,8 @@ async function initializeMcpSession(endpoint) {
350
626
  throw new Error('Hosted MCP initialize response did not include mcp-session-id.');
351
627
  }
352
628
  await postMcp(endpoint, initializedBody, sessionId);
629
+ // Cache the session for reuse by subsequent paid calls
630
+ cacheSession(endpoint, sessionId);
353
631
  return sessionId;
354
632
  }
355
633
  function buildToolCallRequest(toolName, args) {
@@ -381,6 +659,50 @@ async function postMcp(endpoint, body, sessionId, extraHeaders = {}) {
381
659
  body: parseMcpHttpBody(text, response.headers.get('content-type') ?? ''),
382
660
  };
383
661
  }
662
+ async function fetchExternal(url, method, headers, body) {
663
+ const hasBody = method !== 'GET' && method !== 'HEAD' && body !== undefined;
664
+ const requestHeaders = {
665
+ Accept: 'application/json',
666
+ ...headers,
667
+ };
668
+ let requestBody;
669
+ if (hasBody) {
670
+ if (typeof body === 'string') {
671
+ requestBody = body;
672
+ }
673
+ else {
674
+ requestHeaders['Content-Type'] = requestHeaders['Content-Type'] ?? requestHeaders['content-type'] ?? 'application/json';
675
+ requestBody = JSON.stringify(body);
676
+ }
677
+ if (Buffer.byteLength(requestBody) > MAX_EXTERNAL_BODY_BYTES) {
678
+ throw new Error(`External x402 request body exceeds ${MAX_EXTERNAL_BODY_BYTES} bytes.`);
679
+ }
680
+ }
681
+ const response = await fetch(url, {
682
+ method,
683
+ headers: requestHeaders,
684
+ ...(requestBody !== undefined ? { body: requestBody } : {}),
685
+ });
686
+ const text = await response.text();
687
+ return {
688
+ response,
689
+ body: parseExternalHttpBody(text, response.headers.get('content-type') ?? ''),
690
+ };
691
+ }
692
+ function parseExternalHttpBody(text, contentType) {
693
+ if (!text.trim()) {
694
+ return null;
695
+ }
696
+ if (contentType.includes('application/json') || text.trim().startsWith('{') || text.trim().startsWith('[')) {
697
+ try {
698
+ return JSON.parse(text);
699
+ }
700
+ catch {
701
+ return text;
702
+ }
703
+ }
704
+ return text;
705
+ }
384
706
  function getPaymentRequiredResponse(httpClient, response, body) {
385
707
  return httpClient.getPaymentRequiredResponse(name => response.headers.get(name), body);
386
708
  }
@@ -468,9 +790,97 @@ function normalizeMaxAttempts(value) {
468
790
  }
469
791
  return value;
470
792
  }
793
+ function normalizeExternalUrl(value) {
794
+ const url = new URL(value);
795
+ if (url.protocol !== 'https:' && url.protocol !== 'http:') {
796
+ throw new Error('External x402 URL must use http or https.');
797
+ }
798
+ if (url.username || url.password) {
799
+ throw new Error('External x402 URL must not contain embedded credentials.');
800
+ }
801
+ assertExternalHostAllowed(url.hostname);
802
+ return url.toString();
803
+ }
804
+ function assertExternalHostAllowed(hostname) {
805
+ const normalized = hostname.toLowerCase();
806
+ if (normalized === 'localhost' || normalized.endsWith('.localhost') || normalized.endsWith('.local')) {
807
+ throw new Error('External x402 URL must not target local hostnames.');
808
+ }
809
+ if (normalized === '0.0.0.0' || normalized === '::' || normalized === '::1' || normalized.startsWith('127.')) {
810
+ throw new Error('External x402 URL must not target loopback addresses.');
811
+ }
812
+ if (normalized.startsWith('10.') ||
813
+ normalized.startsWith('192.168.') ||
814
+ /^172\.(1[6-9]|2\d|3[0-1])\./.test(normalized) ||
815
+ normalized.startsWith('169.254.')) {
816
+ throw new Error('External x402 URL must not target private or link-local addresses.');
817
+ }
818
+ }
819
+ function normalizeHttpMethod(value) {
820
+ const method = (value ?? 'POST').toUpperCase();
821
+ const allowed = new Set(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']);
822
+ if (!allowed.has(method)) {
823
+ throw new Error('method must be one of GET, POST, PUT, PATCH, or DELETE.');
824
+ }
825
+ return method;
826
+ }
827
+ function normalizeExternalHeaders(value) {
828
+ const headers = {};
829
+ for (const [key, rawValue] of Object.entries(value ?? {})) {
830
+ const normalized = key.toLowerCase();
831
+ if (normalized === 'payment-signature' || normalized === 'x-payment' || normalized === 'payment-response' || normalized === 'x-payment-response') {
832
+ throw new Error(`Do not provide ${key}; the local x402 helper creates payment headers itself.`);
833
+ }
834
+ if (normalized === 'authorization' || normalized === 'cookie' || normalized === 'set-cookie') {
835
+ throw new Error(`Refusing to forward sensitive header ${key} through generic x402 helper.`);
836
+ }
837
+ headers[key] = String(rawValue);
838
+ }
839
+ return headers;
840
+ }
841
+ function safeResponseHeaders(headers) {
842
+ const safe = new Set([
843
+ 'content-type',
844
+ 'payment-response',
845
+ 'x-payment-response',
846
+ 'x402-version',
847
+ 'x-request-id',
848
+ ]);
849
+ const out = {};
850
+ headers.forEach((value, key) => {
851
+ if (safe.has(key.toLowerCase())) {
852
+ out[key] = value;
853
+ }
854
+ });
855
+ return out;
856
+ }
471
857
  function classifyPaidCallRetry(error) {
472
858
  const message = error instanceof Error ? error.message : String(error);
473
859
  const normalized = message.toLowerCase();
860
+ // Explicit maxPriceUsd exceeded check — not retryable, agent needs to raise the cap
861
+ if (normalized.includes('exceeds maxpriceusd')) {
862
+ return {
863
+ retryable: false,
864
+ reason: 'max_price_exceeded',
865
+ hint: 'The tool cost exceeds the maxPriceUsd cap. Use sap_estimate_tool_cost to get the expected cost, then retry with maxPriceUsd set to at least 1.5x the estimated price.',
866
+ };
867
+ }
868
+ // Session not found — not retryable with same session, but the caller should re-initialize
869
+ if (normalized.includes('mcp_session_not_found') || normalized.includes('mcp_session_required')) {
870
+ return {
871
+ retryable: false,
872
+ reason: 'session_expired',
873
+ hint: 'The MCP session expired. The session cache has been invalidated. Retry with a fresh session.',
874
+ };
875
+ }
876
+ // Hosted local signer required — not retryable via x402, use local sap_payments
877
+ if (normalized.includes('hosted_local_signer_required')) {
878
+ return {
879
+ retryable: false,
880
+ reason: 'local_signer_required',
881
+ hint: 'This tool requires a local Solana signature. Do NOT use sap_payments_call_paid_tool. Use the local sap_payments equivalent (e.g. sap_payments_register_agent, sap_payments_finalize_transaction).',
882
+ };
883
+ }
474
884
  const retryable = containsAny(normalized, [
475
885
  'blockhashnotfound',
476
886
  'blockhash not found',
@@ -509,6 +919,15 @@ function sleep(ms) {
509
919
  function isJsonRpcError(value) {
510
920
  return value !== null && typeof value === 'object' && 'error' in value;
511
921
  }
922
+ function isSessionNotFound(body) {
923
+ if (!isJsonRpcError(body))
924
+ return false;
925
+ const error = body.error;
926
+ if (!error || typeof error !== 'object')
927
+ return false;
928
+ const message = error.message;
929
+ return message === 'mcp_session_not_found' || message === 'mcp_session_required';
930
+ }
512
931
  function networkFromRpcUrl(value) {
513
932
  if (!value) {
514
933
  return 'mainnet-beta';
@@ -584,7 +1003,7 @@ async function readBalanceSnapshot(rpcUrl, signerAddress, usdcMint, autoPayX402B
584
1003
  }
585
1004
  function readAgentCommercePolicy() {
586
1005
  return {
587
- autoPayX402BelowUsd: readPositiveNumberEnv('SAP_MCP_X402_AUTO_PAY_MAX_USD', 0.02),
1006
+ autoPayX402BelowUsd: readPositiveNumberEnv('SAP_MCP_X402_AUTO_PAY_MAX_USD', 0.05),
588
1007
  dailyX402LimitUsd: readOptionalPositiveNumberEnv('SAP_MCP_X402_DAILY_LIMIT_USD'),
589
1008
  maxTradeUsd: readOptionalPositiveNumberEnv('SAP_MCP_MAX_TRADE_USD') ?? 10,
590
1009
  maxSlippageBps: readPositiveNumberEnv('SAP_MCP_MAX_SLIPPAGE_BPS', 100),
@@ -656,6 +1075,14 @@ function buildIntentId(requestBody, sessionId) {
656
1075
  });
657
1076
  return `sap-intent-${createHash('sha256').update(source).digest('hex').slice(0, 16)}`;
658
1077
  }
1078
+ function buildExternalIntentId(url, method) {
1079
+ const source = JSON.stringify({
1080
+ url,
1081
+ method,
1082
+ at: Date.now(),
1083
+ });
1084
+ return `sap-external-x402-${createHash('sha256').update(source).digest('hex').slice(0, 16)}`;
1085
+ }
659
1086
  function parseCliArgs(argv) {
660
1087
  const parsed = { confirm: false };
661
1088
  for (let index = 0; index < argv.length; index += 1) {