@oobe-protocol-labs/sap-mcp-server 0.9.16 → 0.9.21

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 (611) hide show
  1. package/.env.example +8 -7
  2. package/CHANGELOG.md +238 -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/05_SKILLS_AND_TOOLS.md +16 -8
  7. package/USER_DOCS/06_DESKTOP_GUI_WIZARD.md +5 -5
  8. package/config.example.json +5 -4
  9. package/config.schema.json +7 -2
  10. package/config.secure-example.json +5 -4
  11. package/dist/adapters/index.d.ts +7 -1
  12. package/dist/adapters/index.d.ts.map +1 -1
  13. package/dist/adapters/index.js +7 -1
  14. package/dist/adapters/index.js.map +1 -1
  15. package/dist/adapters/mcp/errors.d.ts +13 -1
  16. package/dist/adapters/mcp/errors.d.ts.map +1 -1
  17. package/dist/adapters/mcp/errors.js +13 -1
  18. package/dist/adapters/mcp/errors.js.map +1 -1
  19. package/dist/adapters/mcp/index.d.ts +7 -1
  20. package/dist/adapters/mcp/index.d.ts.map +1 -1
  21. package/dist/adapters/mcp/index.js +7 -1
  22. package/dist/adapters/mcp/index.js.map +1 -1
  23. package/dist/adapters/mcp/prompt-response.d.ts +13 -1
  24. package/dist/adapters/mcp/prompt-response.d.ts.map +1 -1
  25. package/dist/adapters/mcp/prompt-response.js +13 -1
  26. package/dist/adapters/mcp/prompt-response.js.map +1 -1
  27. package/dist/adapters/mcp/resource-response.d.ts +14 -1
  28. package/dist/adapters/mcp/resource-response.d.ts.map +1 -1
  29. package/dist/adapters/mcp/resource-response.js +14 -1
  30. package/dist/adapters/mcp/resource-response.js.map +1 -1
  31. package/dist/adapters/mcp/sdk-compat.d.ts +11 -3
  32. package/dist/adapters/mcp/sdk-compat.d.ts.map +1 -1
  33. package/dist/adapters/mcp/sdk-compat.js +213 -24
  34. package/dist/adapters/mcp/sdk-compat.js.map +1 -1
  35. package/dist/adapters/mcp/tool-response.d.ts +39 -4
  36. package/dist/adapters/mcp/tool-response.d.ts.map +1 -1
  37. package/dist/adapters/mcp/tool-response.js +39 -4
  38. package/dist/adapters/mcp/tool-response.js.map +1 -1
  39. package/dist/adapters/solana/commitment.d.ts +14 -2
  40. package/dist/adapters/solana/commitment.d.ts.map +1 -1
  41. package/dist/adapters/solana/commitment.js +14 -2
  42. package/dist/adapters/solana/commitment.js.map +1 -1
  43. package/dist/adapters/solana/connection.d.ts +11 -2
  44. package/dist/adapters/solana/connection.d.ts.map +1 -1
  45. package/dist/adapters/solana/connection.js +11 -2
  46. package/dist/adapters/solana/connection.js.map +1 -1
  47. package/dist/adapters/solana/index.d.ts +7 -1
  48. package/dist/adapters/solana/index.d.ts.map +1 -1
  49. package/dist/adapters/solana/index.js +7 -1
  50. package/dist/adapters/solana/index.js.map +1 -1
  51. package/dist/adapters/solana/public-key.d.ts +11 -2
  52. package/dist/adapters/solana/public-key.d.ts.map +1 -1
  53. package/dist/adapters/solana/public-key.js +11 -2
  54. package/dist/adapters/solana/public-key.js.map +1 -1
  55. package/dist/config/defaults.d.ts +5 -0
  56. package/dist/config/defaults.d.ts.map +1 -1
  57. package/dist/config/defaults.js +5 -0
  58. package/dist/config/defaults.js.map +1 -1
  59. package/dist/config/env.d.ts +4 -0
  60. package/dist/config/env.d.ts.map +1 -1
  61. package/dist/config/env.js +11 -6
  62. package/dist/config/env.js.map +1 -1
  63. package/dist/config/index.d.ts +5 -0
  64. package/dist/config/index.d.ts.map +1 -1
  65. package/dist/config/index.js +5 -0
  66. package/dist/config/index.js.map +1 -1
  67. package/dist/config/mcp-client-injection.d.ts.map +1 -1
  68. package/dist/config/mcp-client-injection.js +97 -1
  69. package/dist/config/mcp-client-injection.js.map +1 -1
  70. package/dist/config/paths.d.ts +5 -0
  71. package/dist/config/paths.d.ts.map +1 -1
  72. package/dist/config/paths.js +5 -0
  73. package/dist/config/paths.js.map +1 -1
  74. package/dist/config/profiles.d.ts +3 -10
  75. package/dist/config/profiles.d.ts.map +1 -1
  76. package/dist/config/profiles.js +5 -0
  77. package/dist/config/profiles.js.map +1 -1
  78. package/dist/config/schema.d.ts +5 -0
  79. package/dist/config/schema.d.ts.map +1 -1
  80. package/dist/config/schema.js +5 -0
  81. package/dist/config/schema.js.map +1 -1
  82. package/dist/config/secure-config.d.ts +5 -0
  83. package/dist/config/secure-config.d.ts.map +1 -1
  84. package/dist/config/secure-config.js +5 -0
  85. package/dist/config/secure-config.js.map +1 -1
  86. package/dist/config/setup.d.ts +5 -0
  87. package/dist/config/setup.d.ts.map +1 -1
  88. package/dist/config/setup.js +5 -0
  89. package/dist/config/setup.js.map +1 -1
  90. package/dist/config-cli.d.ts +3 -13
  91. package/dist/config-cli.d.ts.map +1 -1
  92. package/dist/config-cli.js +5 -0
  93. package/dist/config-cli.js.map +1 -1
  94. package/dist/core/constants.d.ts +25 -6
  95. package/dist/core/constants.d.ts.map +1 -1
  96. package/dist/core/constants.js +27 -8
  97. package/dist/core/constants.js.map +1 -1
  98. package/dist/core/errors.d.ts +5 -0
  99. package/dist/core/errors.d.ts.map +1 -1
  100. package/dist/core/errors.js +5 -0
  101. package/dist/core/errors.js.map +1 -1
  102. package/dist/core/guards.d.ts +5 -0
  103. package/dist/core/guards.d.ts.map +1 -1
  104. package/dist/core/guards.js +3 -1
  105. package/dist/core/guards.js.map +1 -1
  106. package/dist/core/index.d.ts +7 -1
  107. package/dist/core/index.d.ts.map +1 -1
  108. package/dist/core/index.js +7 -1
  109. package/dist/core/index.js.map +1 -1
  110. package/dist/core/logger.js +1 -1
  111. package/dist/core/logger.js.map +1 -1
  112. package/dist/core/result.d.ts +77 -9
  113. package/dist/core/result.d.ts.map +1 -1
  114. package/dist/core/result.js +68 -9
  115. package/dist/core/result.js.map +1 -1
  116. package/dist/core/types.d.ts +5 -0
  117. package/dist/core/types.d.ts.map +1 -1
  118. package/dist/core/types.js +3 -4
  119. package/dist/core/types.js.map +1 -1
  120. package/dist/index.d.ts +5 -0
  121. package/dist/index.d.ts.map +1 -1
  122. package/dist/index.js +5 -0
  123. package/dist/index.js.map +1 -1
  124. package/dist/payments/facilitator-rpc-fallback.d.ts.map +1 -1
  125. package/dist/payments/facilitator-rpc-fallback.js +95 -0
  126. package/dist/payments/facilitator-rpc-fallback.js.map +1 -1
  127. package/dist/payments/hosted-tool-eligibility.d.ts +1 -0
  128. package/dist/payments/hosted-tool-eligibility.d.ts.map +1 -1
  129. package/dist/payments/hosted-tool-eligibility.js +1 -0
  130. package/dist/payments/hosted-tool-eligibility.js.map +1 -1
  131. package/dist/payments/mcp-session-cache.d.ts +35 -0
  132. package/dist/payments/mcp-session-cache.d.ts.map +1 -0
  133. package/dist/payments/mcp-session-cache.js +83 -0
  134. package/dist/payments/mcp-session-cache.js.map +1 -0
  135. package/dist/payments/monetization-gate.d.ts +5 -0
  136. package/dist/payments/monetization-gate.d.ts.map +1 -1
  137. package/dist/payments/monetization-gate.js +24 -1
  138. package/dist/payments/monetization-gate.js.map +1 -1
  139. package/dist/payments/pricing.d.ts +1 -0
  140. package/dist/payments/pricing.d.ts.map +1 -1
  141. package/dist/payments/pricing.js +66 -8
  142. package/dist/payments/pricing.js.map +1 -1
  143. package/dist/payments/usage-ledger.d.ts +36 -2
  144. package/dist/payments/usage-ledger.d.ts.map +1 -1
  145. package/dist/payments/usage-ledger.js +121 -4
  146. package/dist/payments/usage-ledger.js.map +1 -1
  147. package/dist/payments/x402-paid-call.d.ts +50 -0
  148. package/dist/payments/x402-paid-call.d.ts.map +1 -1
  149. package/dist/payments/x402-paid-call.js +171 -0
  150. package/dist/payments/x402-paid-call.js.map +1 -1
  151. package/dist/policy/default-policies.d.ts +18 -2
  152. package/dist/policy/default-policies.d.ts.map +1 -1
  153. package/dist/policy/default-policies.js +18 -2
  154. package/dist/policy/default-policies.js.map +1 -1
  155. package/dist/policy/index.d.ts +6 -3
  156. package/dist/policy/index.d.ts.map +1 -1
  157. package/dist/policy/index.js +6 -3
  158. package/dist/policy/index.js.map +1 -1
  159. package/dist/policy/local-policy-engine.d.ts +71 -13
  160. package/dist/policy/local-policy-engine.d.ts.map +1 -1
  161. package/dist/policy/local-policy-engine.js +33 -11
  162. package/dist/policy/local-policy-engine.js.map +1 -1
  163. package/dist/policy/permission-checks.d.ts +29 -3
  164. package/dist/policy/permission-checks.d.ts.map +1 -1
  165. package/dist/policy/permission-checks.js +29 -3
  166. package/dist/policy/permission-checks.js.map +1 -1
  167. package/dist/policy/policy-engine.d.ts +22 -2
  168. package/dist/policy/policy-engine.d.ts.map +1 -1
  169. package/dist/policy/policy-engine.js +22 -2
  170. package/dist/policy/policy-engine.js.map +1 -1
  171. package/dist/policy/policy-types.d.ts +55 -5
  172. package/dist/policy/policy-types.d.ts.map +1 -1
  173. package/dist/policy/policy-types.js +8 -1
  174. package/dist/policy/policy-types.js.map +1 -1
  175. package/dist/policy/risk-level.d.ts +32 -3
  176. package/dist/policy/risk-level.d.ts.map +1 -1
  177. package/dist/policy/risk-level.js +32 -3
  178. package/dist/policy/risk-level.js.map +1 -1
  179. package/dist/policy/spending-limits.d.ts +29 -3
  180. package/dist/policy/spending-limits.d.ts.map +1 -1
  181. package/dist/policy/spending-limits.js +29 -3
  182. package/dist/policy/spending-limits.js.map +1 -1
  183. package/dist/premium/activation-manager.d.ts +43 -0
  184. package/dist/premium/activation-manager.d.ts.map +1 -0
  185. package/dist/premium/activation-manager.js +131 -0
  186. package/dist/premium/activation-manager.js.map +1 -0
  187. package/dist/premium/builtin-plugins.d.ts +143 -0
  188. package/dist/premium/builtin-plugins.d.ts.map +1 -0
  189. package/dist/premium/builtin-plugins.js +394 -0
  190. package/dist/premium/builtin-plugins.js.map +1 -0
  191. package/dist/premium/event-store.d.ts +61 -0
  192. package/dist/premium/event-store.d.ts.map +1 -0
  193. package/dist/premium/event-store.js +130 -0
  194. package/dist/premium/event-store.js.map +1 -0
  195. package/dist/premium/index.d.ts +54 -0
  196. package/dist/premium/index.d.ts.map +1 -0
  197. package/dist/premium/index.js +54 -0
  198. package/dist/premium/index.js.map +1 -0
  199. package/dist/premium/manifest-builder.d.ts +65 -0
  200. package/dist/premium/manifest-builder.d.ts.map +1 -0
  201. package/dist/premium/manifest-builder.js +182 -0
  202. package/dist/premium/manifest-builder.js.map +1 -0
  203. package/dist/premium/meme-radar-capabilities.d.ts +38 -0
  204. package/dist/premium/meme-radar-capabilities.d.ts.map +1 -0
  205. package/dist/premium/meme-radar-capabilities.js +306 -0
  206. package/dist/premium/meme-radar-capabilities.js.map +1 -0
  207. package/dist/premium/metrics.d.ts +27 -0
  208. package/dist/premium/metrics.d.ts.map +1 -0
  209. package/dist/premium/metrics.js +65 -0
  210. package/dist/premium/metrics.js.map +1 -0
  211. package/dist/premium/plugin-validator.d.ts +39 -0
  212. package/dist/premium/plugin-validator.d.ts.map +1 -0
  213. package/dist/premium/plugin-validator.js +325 -0
  214. package/dist/premium/plugin-validator.js.map +1 -0
  215. package/dist/premium/private-manifest-loader.d.ts +111 -0
  216. package/dist/premium/private-manifest-loader.d.ts.map +1 -0
  217. package/dist/premium/private-manifest-loader.js +285 -0
  218. package/dist/premium/private-manifest-loader.js.map +1 -0
  219. package/dist/premium/provider-bridge.d.ts +109 -0
  220. package/dist/premium/provider-bridge.d.ts.map +1 -0
  221. package/dist/premium/provider-bridge.js +239 -0
  222. package/dist/premium/provider-bridge.js.map +1 -0
  223. package/dist/premium/session-manager.d.ts +125 -0
  224. package/dist/premium/session-manager.d.ts.map +1 -0
  225. package/dist/premium/session-manager.js +337 -0
  226. package/dist/premium/session-manager.js.map +1 -0
  227. package/dist/premium/stream-broker.d.ts +98 -0
  228. package/dist/premium/stream-broker.d.ts.map +1 -0
  229. package/dist/premium/stream-broker.js +199 -0
  230. package/dist/premium/stream-broker.js.map +1 -0
  231. package/dist/premium/tech-fundamentals-capabilities.d.ts +37 -0
  232. package/dist/premium/tech-fundamentals-capabilities.d.ts.map +1 -0
  233. package/dist/premium/tech-fundamentals-capabilities.js +283 -0
  234. package/dist/premium/tech-fundamentals-capabilities.js.map +1 -0
  235. package/dist/premium/trading-capabilities.d.ts +36 -0
  236. package/dist/premium/trading-capabilities.d.ts.map +1 -0
  237. package/dist/premium/trading-capabilities.js +205 -0
  238. package/dist/premium/trading-capabilities.js.map +1 -0
  239. package/dist/premium/types.d.ts +518 -0
  240. package/dist/premium/types.d.ts.map +1 -0
  241. package/dist/premium/types.js +23 -0
  242. package/dist/premium/types.js.map +1 -0
  243. package/dist/premium/webhook-engine.d.ts +138 -0
  244. package/dist/premium/webhook-engine.d.ts.map +1 -0
  245. package/dist/premium/webhook-engine.js +510 -0
  246. package/dist/premium/webhook-engine.js.map +1 -0
  247. package/dist/prompts/context/sap-agent-context.prompt.d.ts +5 -0
  248. package/dist/prompts/context/sap-agent-context.prompt.d.ts.map +1 -1
  249. package/dist/prompts/context/sap-agent-context.prompt.js +2 -8
  250. package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -1
  251. package/dist/prompts/context/sap-agent-intent-router.prompt.d.ts +14 -0
  252. package/dist/prompts/context/sap-agent-intent-router.prompt.d.ts.map +1 -0
  253. package/dist/prompts/context/sap-agent-intent-router.prompt.js +155 -0
  254. package/dist/prompts/context/sap-agent-intent-router.prompt.js.map +1 -0
  255. package/dist/prompts/context/sap-agent-start.prompt.js +1 -0
  256. package/dist/prompts/context/sap-agent-start.prompt.js.map +1 -1
  257. package/dist/prompts/developer/debug-sap-error.prompt.d.ts +5 -0
  258. package/dist/prompts/developer/debug-sap-error.prompt.d.ts.map +1 -1
  259. package/dist/prompts/developer/debug-sap-error.prompt.js +3 -4
  260. package/dist/prompts/developer/debug-sap-error.prompt.js.map +1 -1
  261. package/dist/prompts/developer/generate-sap-integration.prompt.d.ts +5 -0
  262. package/dist/prompts/developer/generate-sap-integration.prompt.d.ts.map +1 -1
  263. package/dist/prompts/developer/generate-sap-integration.prompt.js +3 -4
  264. package/dist/prompts/developer/generate-sap-integration.prompt.js.map +1 -1
  265. package/dist/prompts/developer/index.d.ts +4 -1
  266. package/dist/prompts/developer/index.d.ts.map +1 -1
  267. package/dist/prompts/developer/index.js +4 -1
  268. package/dist/prompts/developer/index.js.map +1 -1
  269. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.d.ts +5 -0
  270. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.d.ts.map +1 -1
  271. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js +3 -4
  272. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js.map +1 -1
  273. package/dist/prompts/execution-proof/index.d.ts +4 -1
  274. package/dist/prompts/execution-proof/index.d.ts.map +1 -1
  275. package/dist/prompts/execution-proof/index.js +4 -1
  276. package/dist/prompts/execution-proof/index.js.map +1 -1
  277. package/dist/prompts/execution-proof/verify-execution-proof.prompt.d.ts +5 -0
  278. package/dist/prompts/execution-proof/verify-execution-proof.prompt.d.ts.map +1 -1
  279. package/dist/prompts/execution-proof/verify-execution-proof.prompt.js +3 -4
  280. package/dist/prompts/execution-proof/verify-execution-proof.prompt.js.map +1 -1
  281. package/dist/prompts/index.d.ts +4 -1
  282. package/dist/prompts/index.d.ts.map +1 -1
  283. package/dist/prompts/index.js +4 -1
  284. package/dist/prompts/index.js.map +1 -1
  285. package/dist/prompts/payments/create-paid-api.prompt.d.ts +5 -0
  286. package/dist/prompts/payments/create-paid-api.prompt.d.ts.map +1 -1
  287. package/dist/prompts/payments/create-paid-api.prompt.js +3 -4
  288. package/dist/prompts/payments/create-paid-api.prompt.js.map +1 -1
  289. package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts +5 -0
  290. package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts.map +1 -1
  291. package/dist/prompts/payments/explain-x402-settlement.prompt.js +3 -4
  292. package/dist/prompts/payments/explain-x402-settlement.prompt.js.map +1 -1
  293. package/dist/prompts/payments/index.d.ts +4 -1
  294. package/dist/prompts/payments/index.d.ts.map +1 -1
  295. package/dist/prompts/payments/index.js +4 -1
  296. package/dist/prompts/payments/index.js.map +1 -1
  297. package/dist/prompts/register-prompts.d.ts +18 -2
  298. package/dist/prompts/register-prompts.d.ts.map +1 -1
  299. package/dist/prompts/register-prompts.js +21 -3
  300. package/dist/prompts/register-prompts.js.map +1 -1
  301. package/dist/prompts/registry/analyze-sap-agent.prompt.d.ts +5 -0
  302. package/dist/prompts/registry/analyze-sap-agent.prompt.d.ts.map +1 -1
  303. package/dist/prompts/registry/analyze-sap-agent.prompt.js +3 -4
  304. package/dist/prompts/registry/analyze-sap-agent.prompt.js.map +1 -1
  305. package/dist/prompts/registry/index.d.ts +4 -1
  306. package/dist/prompts/registry/index.d.ts.map +1 -1
  307. package/dist/prompts/registry/index.js +4 -1
  308. package/dist/prompts/registry/index.js.map +1 -1
  309. package/dist/prompts/registry/register-sap-agent.prompt.d.ts +5 -0
  310. package/dist/prompts/registry/register-sap-agent.prompt.d.ts.map +1 -1
  311. package/dist/prompts/registry/register-sap-agent.prompt.js +3 -4
  312. package/dist/prompts/registry/register-sap-agent.prompt.js.map +1 -1
  313. package/dist/remote/premium-memory.d.ts +90 -0
  314. package/dist/remote/premium-memory.d.ts.map +1 -0
  315. package/dist/remote/premium-memory.js +161 -0
  316. package/dist/remote/premium-memory.js.map +1 -0
  317. package/dist/remote/premium-routes.d.ts +99 -0
  318. package/dist/remote/premium-routes.d.ts.map +1 -0
  319. package/dist/remote/premium-routes.js +346 -0
  320. package/dist/remote/premium-routes.js.map +1 -0
  321. package/dist/remote/public-home/sections.d.ts.map +1 -1
  322. package/dist/remote/public-home/sections.js +7 -1
  323. package/dist/remote/public-home/sections.js.map +1 -1
  324. package/dist/remote/public-home/types.d.ts +6 -0
  325. package/dist/remote/public-home/types.d.ts.map +1 -1
  326. package/dist/remote/server.d.ts +18 -0
  327. package/dist/remote/server.d.ts.map +1 -1
  328. package/dist/remote/server.js +298 -116
  329. package/dist/remote/server.js.map +1 -1
  330. package/dist/remote/tx-relay.d.ts +42 -0
  331. package/dist/remote/tx-relay.d.ts.map +1 -0
  332. package/dist/remote/tx-relay.js +118 -0
  333. package/dist/remote/tx-relay.js.map +1 -0
  334. package/dist/resources/current/sap-current-config.resource.d.ts +5 -0
  335. package/dist/resources/current/sap-current-config.resource.d.ts.map +1 -1
  336. package/dist/resources/current/sap-current-config.resource.js +2 -5
  337. package/dist/resources/current/sap-current-config.resource.js.map +1 -1
  338. package/dist/resources/execution-proof/index.d.ts +5 -0
  339. package/dist/resources/execution-proof/index.d.ts.map +1 -1
  340. package/dist/resources/execution-proof/index.js +5 -0
  341. package/dist/resources/execution-proof/index.js.map +1 -1
  342. package/dist/resources/execution-proof/sap-execution-record.resource.d.ts +5 -0
  343. package/dist/resources/execution-proof/sap-execution-record.resource.d.ts.map +1 -1
  344. package/dist/resources/execution-proof/sap-execution-record.resource.js +3 -4
  345. package/dist/resources/execution-proof/sap-execution-record.resource.js.map +1 -1
  346. package/dist/resources/index.d.ts +5 -0
  347. package/dist/resources/index.d.ts.map +1 -1
  348. package/dist/resources/index.js +5 -0
  349. package/dist/resources/index.js.map +1 -1
  350. package/dist/resources/memory/index.d.ts +5 -0
  351. package/dist/resources/memory/index.d.ts.map +1 -1
  352. package/dist/resources/memory/index.js +5 -0
  353. package/dist/resources/memory/index.js.map +1 -1
  354. package/dist/resources/memory/sap-memory.resource.d.ts +5 -0
  355. package/dist/resources/memory/sap-memory.resource.d.ts.map +1 -1
  356. package/dist/resources/memory/sap-memory.resource.js +3 -4
  357. package/dist/resources/memory/sap-memory.resource.js.map +1 -1
  358. package/dist/resources/profile/sap-active-profile.resource.d.ts +5 -0
  359. package/dist/resources/profile/sap-active-profile.resource.d.ts.map +1 -1
  360. package/dist/resources/profile/sap-active-profile.resource.js +2 -5
  361. package/dist/resources/profile/sap-active-profile.resource.js.map +1 -1
  362. package/dist/resources/register-resources.d.ts +5 -0
  363. package/dist/resources/register-resources.d.ts.map +1 -1
  364. package/dist/resources/register-resources.js +3 -1
  365. package/dist/resources/register-resources.js.map +1 -1
  366. package/dist/resources/registry/index.d.ts +5 -0
  367. package/dist/resources/registry/index.d.ts.map +1 -1
  368. package/dist/resources/registry/index.js +5 -0
  369. package/dist/resources/registry/index.js.map +1 -1
  370. package/dist/resources/registry/sap-agent.resource.d.ts +5 -0
  371. package/dist/resources/registry/sap-agent.resource.d.ts.map +1 -1
  372. package/dist/resources/registry/sap-agent.resource.js +3 -4
  373. package/dist/resources/registry/sap-agent.resource.js.map +1 -1
  374. package/dist/resources/registry/sap-global-registry.resource.d.ts +18 -4
  375. package/dist/resources/registry/sap-global-registry.resource.d.ts.map +1 -1
  376. package/dist/resources/registry/sap-global-registry.resource.js +18 -4
  377. package/dist/resources/registry/sap-global-registry.resource.js.map +1 -1
  378. package/dist/resources/reputation/index.d.ts +4 -1
  379. package/dist/resources/reputation/index.d.ts.map +1 -1
  380. package/dist/resources/reputation/index.js +4 -1
  381. package/dist/resources/reputation/index.js.map +1 -1
  382. package/dist/resources/reputation/sap-reputation.resource.d.ts +18 -4
  383. package/dist/resources/reputation/sap-reputation.resource.d.ts.map +1 -1
  384. package/dist/resources/reputation/sap-reputation.resource.js +18 -4
  385. package/dist/resources/reputation/sap-reputation.resource.js.map +1 -1
  386. package/dist/resources/tool-schema/index.d.ts +4 -1
  387. package/dist/resources/tool-schema/index.d.ts.map +1 -1
  388. package/dist/resources/tool-schema/index.js +4 -1
  389. package/dist/resources/tool-schema/index.js.map +1 -1
  390. package/dist/resources/tool-schema/sap-tool-schema.resource.d.ts +18 -4
  391. package/dist/resources/tool-schema/sap-tool-schema.resource.d.ts.map +1 -1
  392. package/dist/resources/tool-schema/sap-tool-schema.resource.js +18 -4
  393. package/dist/resources/tool-schema/sap-tool-schema.resource.js.map +1 -1
  394. package/dist/sap/index.d.ts +7 -1
  395. package/dist/sap/index.d.ts.map +1 -1
  396. package/dist/sap/index.js +7 -1
  397. package/dist/sap/index.js.map +1 -1
  398. package/dist/sap/sap-client-manager.d.ts +80 -13
  399. package/dist/sap/sap-client-manager.d.ts.map +1 -1
  400. package/dist/sap/sap-client-manager.js +80 -13
  401. package/dist/sap/sap-client-manager.js.map +1 -1
  402. package/dist/sap/sap-errors.d.ts +22 -3
  403. package/dist/sap/sap-errors.d.ts.map +1 -1
  404. package/dist/sap/sap-errors.js +22 -3
  405. package/dist/sap/sap-errors.js.map +1 -1
  406. package/dist/sap/sap-types.d.ts +75 -6
  407. package/dist/sap/sap-types.d.ts.map +1 -1
  408. package/dist/sap/sap-types.js +11 -1
  409. package/dist/sap/sap-types.js.map +1 -1
  410. package/dist/schemas/common.schema.d.ts +45 -8
  411. package/dist/schemas/common.schema.d.ts.map +1 -1
  412. package/dist/schemas/common.schema.js +45 -8
  413. package/dist/schemas/common.schema.js.map +1 -1
  414. package/dist/schemas/developer.schema.d.ts +22 -3
  415. package/dist/schemas/developer.schema.d.ts.map +1 -1
  416. package/dist/schemas/developer.schema.js +22 -3
  417. package/dist/schemas/developer.schema.js.map +1 -1
  418. package/dist/schemas/execution-proof.schema.d.ts +29 -4
  419. package/dist/schemas/execution-proof.schema.d.ts.map +1 -1
  420. package/dist/schemas/execution-proof.schema.js +29 -4
  421. package/dist/schemas/execution-proof.schema.js.map +1 -1
  422. package/dist/schemas/identity.schema.d.ts +23 -3
  423. package/dist/schemas/identity.schema.d.ts.map +1 -1
  424. package/dist/schemas/identity.schema.js +23 -3
  425. package/dist/schemas/identity.schema.js.map +1 -1
  426. package/dist/schemas/index.d.ts +11 -1
  427. package/dist/schemas/index.d.ts.map +1 -1
  428. package/dist/schemas/index.js +11 -1
  429. package/dist/schemas/index.js.map +1 -1
  430. package/dist/schemas/memory.schema.d.ts +23 -3
  431. package/dist/schemas/memory.schema.d.ts.map +1 -1
  432. package/dist/schemas/memory.schema.js +23 -3
  433. package/dist/schemas/memory.schema.js.map +1 -1
  434. package/dist/schemas/payments.schema.d.ts +24 -3
  435. package/dist/schemas/payments.schema.d.ts.map +1 -1
  436. package/dist/schemas/payments.schema.js +24 -3
  437. package/dist/schemas/payments.schema.js.map +1 -1
  438. package/dist/schemas/registry.schema.d.ts +36 -4
  439. package/dist/schemas/registry.schema.d.ts.map +1 -1
  440. package/dist/schemas/registry.schema.js +36 -4
  441. package/dist/schemas/registry.schema.js.map +1 -1
  442. package/dist/schemas/reputation.schema.d.ts +22 -3
  443. package/dist/schemas/reputation.schema.d.ts.map +1 -1
  444. package/dist/schemas/reputation.schema.js +22 -3
  445. package/dist/schemas/reputation.schema.js.map +1 -1
  446. package/dist/schemas/settlement.schema.d.ts +31 -4
  447. package/dist/schemas/settlement.schema.d.ts.map +1 -1
  448. package/dist/schemas/settlement.schema.js +31 -4
  449. package/dist/schemas/settlement.schema.js.map +1 -1
  450. package/dist/schemas/tool-schema.schema.d.ts +29 -3
  451. package/dist/schemas/tool-schema.schema.d.ts.map +1 -1
  452. package/dist/schemas/tool-schema.schema.js +29 -3
  453. package/dist/schemas/tool-schema.schema.js.map +1 -1
  454. package/dist/schemas/transaction.schema.d.ts +23 -3
  455. package/dist/schemas/transaction.schema.d.ts.map +1 -1
  456. package/dist/schemas/transaction.schema.js +23 -3
  457. package/dist/schemas/transaction.schema.js.map +1 -1
  458. package/dist/security/approval-required.d.ts +19 -2
  459. package/dist/security/approval-required.d.ts.map +1 -1
  460. package/dist/security/approval-required.js +19 -2
  461. package/dist/security/approval-required.js.map +1 -1
  462. package/dist/security/index.d.ts +7 -1
  463. package/dist/security/index.d.ts.map +1 -1
  464. package/dist/security/index.js +7 -1
  465. package/dist/security/index.js.map +1 -1
  466. package/dist/security/private-key-guard.d.ts +18 -2
  467. package/dist/security/private-key-guard.d.ts.map +1 -1
  468. package/dist/security/private-key-guard.js +19 -2
  469. package/dist/security/private-key-guard.js.map +1 -1
  470. package/dist/security/prompt-injection-notes.d.ts +10 -1
  471. package/dist/security/prompt-injection-notes.d.ts.map +1 -1
  472. package/dist/security/prompt-injection-notes.js +10 -1
  473. package/dist/security/prompt-injection-notes.js.map +1 -1
  474. package/dist/security/unsafe-action-guard.d.ts +36 -10
  475. package/dist/security/unsafe-action-guard.d.ts.map +1 -1
  476. package/dist/security/unsafe-action-guard.js +67 -15
  477. package/dist/security/unsafe-action-guard.js.map +1 -1
  478. package/dist/server/create-server.d.ts +18 -3
  479. package/dist/server/create-server.d.ts.map +1 -1
  480. package/dist/server/create-server.js +18 -3
  481. package/dist/server/create-server.js.map +1 -1
  482. package/dist/server/index.d.ts +6 -1
  483. package/dist/server/index.d.ts.map +1 -1
  484. package/dist/server/index.js +6 -1
  485. package/dist/server/index.js.map +1 -1
  486. package/dist/server/register-capabilities.d.ts +17 -2
  487. package/dist/server/register-capabilities.d.ts.map +1 -1
  488. package/dist/server/register-capabilities.js +17 -2
  489. package/dist/server/register-capabilities.js.map +1 -1
  490. package/dist/server/server-metadata.d.ts +35 -1
  491. package/dist/server/server-metadata.d.ts.map +1 -1
  492. package/dist/server/server-metadata.js +36 -2
  493. package/dist/server/server-metadata.js.map +1 -1
  494. package/dist/session/agent-session.d.ts +35 -4
  495. package/dist/session/agent-session.d.ts.map +1 -1
  496. package/dist/session/agent-session.js +35 -4
  497. package/dist/session/agent-session.js.map +1 -1
  498. package/dist/session/delegated-session.d.ts +31 -3
  499. package/dist/session/delegated-session.d.ts.map +1 -1
  500. package/dist/session/delegated-session.js +31 -3
  501. package/dist/session/delegated-session.js.map +1 -1
  502. package/dist/session/index.d.ts +7 -1
  503. package/dist/session/index.d.ts.map +1 -1
  504. package/dist/session/index.js +7 -1
  505. package/dist/session/index.js.map +1 -1
  506. package/dist/session/redis-session-store.d.ts +94 -21
  507. package/dist/session/redis-session-store.d.ts.map +1 -1
  508. package/dist/session/redis-session-store.js +87 -20
  509. package/dist/session/redis-session-store.js.map +1 -1
  510. package/dist/session/session-limits.d.ts +34 -4
  511. package/dist/session/session-limits.d.ts.map +1 -1
  512. package/dist/session/session-limits.js +34 -4
  513. package/dist/session/session-limits.js.map +1 -1
  514. package/dist/session/session-permissions.d.ts +57 -7
  515. package/dist/session/session-permissions.d.ts.map +1 -1
  516. package/dist/session/session-permissions.js +57 -7
  517. package/dist/session/session-permissions.js.map +1 -1
  518. package/dist/session/session-store.d.ts +9 -1
  519. package/dist/session/session-store.d.ts.map +1 -1
  520. package/dist/session/session-store.js +18 -3
  521. package/dist/session/session-store.js.map +1 -1
  522. package/dist/session/session-types.d.ts +33 -4
  523. package/dist/session/session-types.d.ts.map +1 -1
  524. package/dist/session/session-types.js +9 -1
  525. package/dist/session/session-types.js.map +1 -1
  526. package/dist/signer/index.d.ts +7 -1
  527. package/dist/signer/index.d.ts.map +1 -1
  528. package/dist/signer/index.js +7 -1
  529. package/dist/signer/index.js.map +1 -1
  530. package/dist/signer/load-keypair.d.ts +25 -4
  531. package/dist/signer/load-keypair.d.ts.map +1 -1
  532. package/dist/signer/load-keypair.js +25 -4
  533. package/dist/signer/load-keypair.js.map +1 -1
  534. package/dist/signer/local-keypair-signer.d.ts +16 -2
  535. package/dist/signer/local-keypair-signer.d.ts.map +1 -1
  536. package/dist/signer/local-keypair-signer.js +16 -2
  537. package/dist/signer/local-keypair-signer.js.map +1 -1
  538. package/dist/signer/signer-resolver.d.ts +19 -2
  539. package/dist/signer/signer-resolver.d.ts.map +1 -1
  540. package/dist/signer/signer-resolver.js +26 -3
  541. package/dist/signer/signer-resolver.js.map +1 -1
  542. package/dist/signer/signer-types.d.ts +47 -5
  543. package/dist/signer/signer-types.d.ts.map +1 -1
  544. package/dist/signer/signer-types.js +13 -1
  545. package/dist/signer/signer-types.js.map +1 -1
  546. package/dist/tools/agent-start-tool.js +20 -1
  547. package/dist/tools/agent-start-tool.js.map +1 -1
  548. package/dist/tools/client-sdk-tools.d.ts.map +1 -1
  549. package/dist/tools/client-sdk-tools.js +27 -2
  550. package/dist/tools/client-sdk-tools.js.map +1 -1
  551. package/dist/tools/estimate-tool-cost.d.ts +13 -0
  552. package/dist/tools/estimate-tool-cost.d.ts.map +1 -0
  553. package/dist/tools/estimate-tool-cost.js +139 -0
  554. package/dist/tools/estimate-tool-cost.js.map +1 -0
  555. package/dist/tools/index.d.ts +7 -0
  556. package/dist/tools/index.d.ts.map +1 -1
  557. package/dist/tools/index.js +9 -0
  558. package/dist/tools/index.js.map +1 -1
  559. package/dist/tools/magicblock-tools.d.ts +25 -0
  560. package/dist/tools/magicblock-tools.d.ts.map +1 -1
  561. package/dist/tools/magicblock-tools.js +116 -8
  562. package/dist/tools/magicblock-tools.js.map +1 -1
  563. package/dist/tools/perp-tools.d.ts +39 -0
  564. package/dist/tools/perp-tools.d.ts.map +1 -0
  565. package/dist/tools/perp-tools.js +1110 -0
  566. package/dist/tools/perp-tools.js.map +1 -0
  567. package/dist/tools/premium-tools.d.ts +8 -0
  568. package/dist/tools/premium-tools.d.ts.map +1 -0
  569. package/dist/tools/premium-tools.js +1096 -0
  570. package/dist/tools/premium-tools.js.map +1 -0
  571. package/dist/tools/quick-context-tool.d.ts +16 -0
  572. package/dist/tools/quick-context-tool.d.ts.map +1 -0
  573. package/dist/tools/quick-context-tool.js +228 -0
  574. package/dist/tools/quick-context-tool.js.map +1 -0
  575. package/dist/tools/register-tools.d.ts.map +1 -1
  576. package/dist/tools/register-tools.js +14 -0
  577. package/dist/tools/register-tools.js.map +1 -1
  578. package/dist/tools/sap-sdk-tools.d.ts.map +1 -1
  579. package/dist/tools/sap-sdk-tools.js +42 -32
  580. package/dist/tools/sap-sdk-tools.js.map +1 -1
  581. package/dist/tools/skills-tools.d.ts +6 -0
  582. package/dist/tools/skills-tools.d.ts.map +1 -1
  583. package/dist/tools/skills-tools.js +5 -4
  584. package/dist/tools/skills-tools.js.map +1 -1
  585. package/dist/tools/x402-paid-call-tool.js +2 -2
  586. package/dist/tools/x402-paid-call-tool.js.map +1 -1
  587. package/dist/transports/index.d.ts +6 -1
  588. package/dist/transports/index.d.ts.map +1 -1
  589. package/dist/transports/index.js +6 -1
  590. package/dist/transports/index.js.map +1 -1
  591. package/dist/transports/stdio.d.ts +17 -5
  592. package/dist/transports/stdio.d.ts.map +1 -1
  593. package/dist/transports/stdio.js +17 -5
  594. package/dist/transports/stdio.js.map +1 -1
  595. package/dist/tui/wizard-save.d.ts +88 -8
  596. package/dist/tui/wizard-save.d.ts.map +1 -1
  597. package/dist/tui/wizard-save.js +77 -8
  598. package/dist/tui/wizard-save.js.map +1 -1
  599. package/docs/06_PAYMENTS_X402_AND_PAYSH.md +3 -3
  600. package/docs/07_ENDPOINTS_AND_CLIENTS.md +4 -1
  601. package/docs/14_DESKTOP_WIZARD_RELEASE.md +3 -3
  602. package/docs/16_SAP_AGENT_IDENTITY_PIPELINE.md +6 -0
  603. package/docs/18_PREMIUM_PLUGIN_RUNTIME.md +108 -0
  604. package/docs/BRANCH_AND_CI.md +67 -0
  605. package/docs/README.md +12 -0
  606. package/package.json +8 -9
  607. package/server.json +3 -3
  608. package/skills/sap-agent-registry/SKILL.md +6 -0
  609. package/skills/sap-mcp/SKILL.md +27 -4
  610. package/skills/sap-mcp/TOOL_REFERENCE.md +4 -1
  611. package/skills/sap-payments-x402/SKILL.md +22 -8
@@ -8,7 +8,6 @@ import { existsSync, readFileSync } from 'fs';
8
8
  import * as http from 'http';
9
9
  import { dirname, join, posix } from 'path';
10
10
  import { fileURLToPath } from 'url';
11
- import { Connection } from '@solana/web3.js';
12
11
  import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
13
12
  import { getDataDir, loadConfig } from '../config/env.js';
14
13
  import { MCP_SERVER_VERSION } from '../core/constants.js';
@@ -17,10 +16,12 @@ import { createSapMcpServer } from '../server/create-server.js';
17
16
  import { AuthManager } from './auth/index.js';
18
17
  import { McpMonetizationGate, buildPricingCatalog, resolvePaymentNetwork } from '../payments/index.js';
19
18
  import { generatePayShProviderYaml } from '../payments/pay-sh-spec.js';
19
+ import { listPremiumPlugins, premiumPrivatePluginSupport, publicPremiumProviderStatus, getPremiumMetrics, } from '../premium/index.js';
20
20
  import { RemoteRateLimiter, buildRemoteRateLimitConfigFromEnv } from './rate-limiter.js';
21
21
  import { renderLandingPage } from './public-home/index.js';
22
- import { parseJsonBody, readRequestBody } from '../payments/http-adapter.js';
23
- import { decodeInputBytes, deserializeTransaction } from '../tools/transaction-tools.js';
22
+ import { TX_SUBMIT_PATH, submitSignedTransactionFromHttp } from './tx-relay.js';
23
+ import { tryPremiumRoute } from './premium-routes.js';
24
+ import { PremiumMemoryManager } from './premium-memory.js';
24
25
  const PUBLIC_SERVER_TITLE = 'SAP MCP Server | OOBE Protocol';
25
26
  const PUBLIC_SERVER_DESCRIPTION = 'Hosted Solana-native MCP gateway for Synapse Agent Protocol tools, x402/pay.sh monetization, SNS identity, and agent operations.';
26
27
  const LOGO_ASSET_PATH = join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'assets', 'explorer_logo.png');
@@ -40,10 +41,6 @@ const SOLANA_DEVNET_CAIP2 = 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1';
40
41
  const USDC_MAINNET_MINT = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v';
41
42
  const USDC_DEVNET_MINT = '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU';
42
43
  const MCP_REGISTRY_AUTH_PATH = '/.well-known/mcp-registry-auth';
43
- const TX_SUBMIT_PATH = '/tx/submit';
44
- const TX_SUBMIT_MAX_BODY_BYTES = 512_000;
45
- const TX_SUBMIT_DEFAULT_CONFIRMATION_TIMEOUT_MS = 90_000;
46
- const TX_SUBMIT_MAX_CONFIRMATION_TIMEOUT_MS = 180_000;
47
44
  let logoAssetCache;
48
45
  let oobeLogoAssetCache;
49
46
  let paymentStatsCache;
@@ -292,110 +289,6 @@ function writeMcpJsonRpcError(res, status, code, id, message, data) {
292
289
  },
293
290
  });
294
291
  }
295
- async function submitSignedTransactionFromHttp(req, config) {
296
- const body = parseJsonBody(await readRequestBody(req, TX_SUBMIT_MAX_BODY_BYTES));
297
- const input = parseTxSubmitRelayInput(body);
298
- const encodedTransaction = input.signedTransaction ?? input.transaction;
299
- if (!encodedTransaction) {
300
- throw new Error('signedTransaction is required.');
301
- }
302
- const encoding = input.encoding ?? 'base64';
303
- const rawTransaction = decodeInputBytes(encodedTransaction, encoding);
304
- deserializeTransaction(encodedTransaction, encoding);
305
- const connection = new Connection(config.rpcUrl, config.commitment ?? 'confirmed');
306
- const signature = await connection.sendRawTransaction(rawTransaction, {
307
- skipPreflight: input.skipPreflight,
308
- maxRetries: input.maxRetries ?? config.maxRetries,
309
- });
310
- const confirmationTimeoutMs = boundTxSubmitConfirmationTimeout(input.confirmationTimeoutMs);
311
- const desiredCommitment = input.commitment ?? 'confirmed';
312
- const confirmation = await waitForTxSubmitSignatureStatus(connection, signature, confirmationTimeoutMs, desiredCommitment);
313
- return {
314
- success: confirmation.success,
315
- submitted: true,
316
- signature,
317
- confirmationStatus: confirmation.status,
318
- retrySafe: confirmation.retrySafe,
319
- ...(confirmation.slot === undefined ? {} : { slot: confirmation.slot }),
320
- explorerUrl: `https://solscan.io/tx/${signature}`,
321
- audit: {
322
- intentId: input.intentId ?? `sap-tx-${Date.now()}`,
323
- submittedVia: 'hosted-submit-relay',
324
- signerBoundary: 'already-signed-transaction-only',
325
- confirmationTimeoutMs,
326
- desiredCommitment,
327
- retrySafe: confirmation.retrySafe,
328
- secretMaterial: 'never-received',
329
- rule: confirmation.success
330
- ? 'OOBE hosted relay submitted already-signed bytes and observed the transaction on-chain before returning success. The relay never signs and never receives keypair material.'
331
- : 'OOBE hosted relay submitted already-signed bytes but did not observe the requested confirmation state before timeout. Retry only when retrySafe is true and the user confirms.',
332
- },
333
- };
334
- }
335
- function parseTxSubmitRelayInput(value) {
336
- if (!value || typeof value !== 'object' || Array.isArray(value)) {
337
- throw new Error('JSON object body is required.');
338
- }
339
- const record = value;
340
- const commitment = record.commitment;
341
- if (commitment !== undefined && !['processed', 'confirmed', 'finalized'].includes(commitment)) {
342
- throw new Error('commitment must be processed, confirmed, or finalized.');
343
- }
344
- if (record.encoding !== undefined && !['base64', 'base58'].includes(record.encoding)) {
345
- throw new Error('encoding must be base64 or base58.');
346
- }
347
- return record;
348
- }
349
- async function waitForTxSubmitSignatureStatus(connection, signature, timeoutMs, desiredCommitment) {
350
- const startedAt = Date.now();
351
- let lastStatus = 'missing';
352
- let lastSlot;
353
- while (Date.now() - startedAt < timeoutMs) {
354
- const statuses = await connection.getSignatureStatuses([signature], { searchTransactionHistory: true });
355
- const status = statuses.value[0];
356
- if (status?.err) {
357
- return {
358
- success: false,
359
- retrySafe: true,
360
- status: 'failed',
361
- ...(status.slot === undefined ? {} : { slot: status.slot }),
362
- };
363
- }
364
- if (status) {
365
- lastStatus = status.confirmationStatus ?? 'processed';
366
- lastSlot = status.slot;
367
- if (txSubmitCommitmentReached(lastStatus, desiredCommitment)) {
368
- return {
369
- success: true,
370
- retrySafe: false,
371
- status: lastStatus,
372
- ...(lastSlot === undefined ? {} : { slot: lastSlot }),
373
- };
374
- }
375
- }
376
- await new Promise(resolve => setTimeout(resolve, 2_000));
377
- }
378
- return {
379
- success: false,
380
- retrySafe: lastStatus === 'missing',
381
- status: lastStatus === 'missing' ? 'expired_or_not_landed' : lastStatus,
382
- ...(lastSlot === undefined ? {} : { slot: lastSlot }),
383
- };
384
- }
385
- function txSubmitCommitmentReached(current, desired) {
386
- const rank = {
387
- processed: 1,
388
- confirmed: 2,
389
- finalized: 3,
390
- };
391
- return (rank[current] ?? 0) >= rank[desired];
392
- }
393
- function boundTxSubmitConfirmationTimeout(value) {
394
- if (!Number.isFinite(value)) {
395
- return TX_SUBMIT_DEFAULT_CONFIRMATION_TIMEOUT_MS;
396
- }
397
- return Math.max(15_000, Math.min(Number(value), TX_SUBMIT_MAX_CONFIRMATION_TIMEOUT_MS));
398
- }
399
292
  /**
400
293
  * @name readSingleHeader
401
294
  * @description Reads one normalized HTTP header value without accepting ambiguous arrays.
@@ -654,7 +547,10 @@ function readPaymentStatsFromLedger() {
654
547
  totalVolumeUsd: 0,
655
548
  totalSettlements: 0,
656
549
  totalPaymentRequests: 0,
550
+ totalChallengesReturned: 0,
657
551
  totalVerifiedPayments: 0,
552
+ totalVerificationFailures: 0,
553
+ totalEligibilityBlocks: 0,
658
554
  totalFailedSettlements: 0,
659
555
  uniqueRemoteCallers: 0,
660
556
  uniqueUserAgents: 0,
@@ -682,9 +578,18 @@ function readPaymentStatsFromLedger() {
682
578
  if (event.event === 'payment_required') {
683
579
  stats.totalPaymentRequests += 1;
684
580
  }
581
+ if (event.event === 'payment_challenge_returned') {
582
+ stats.totalChallengesReturned += 1;
583
+ }
685
584
  if (event.event === 'payment_verified') {
686
585
  stats.totalVerifiedPayments += 1;
687
586
  }
587
+ if (event.event === 'payment_verification_failed') {
588
+ stats.totalVerificationFailures += 1;
589
+ }
590
+ if (event.event === 'payment_eligibility_blocked') {
591
+ stats.totalEligibilityBlocks += 1;
592
+ }
688
593
  if (event.event === 'payment_settled') {
689
594
  stats.totalSettlements += 1;
690
595
  stats.totalVolumeUsd += event.priceUsd ?? 0;
@@ -801,6 +706,13 @@ export function buildPublicServerInfo(req, config) {
801
706
  serverInfo: `${baseUrl}/server.json`,
802
707
  pricing: `${baseUrl}/pricing.json`,
803
708
  openApi: `${baseUrl}/openapi.json`,
709
+ premiumCatalog: `${baseUrl}/premium/catalog.json`,
710
+ premiumStreams: `${baseUrl}/premium/streams.json`,
711
+ premiumWebhooks: `${baseUrl}/premium/webhooks.json`,
712
+ premiumHealth: `${baseUrl}/premium/health.json`,
713
+ premiumActivate: `${baseUrl}/premium/activate`,
714
+ premiumStreamBase: `${baseUrl}/premium/stream`,
715
+ premiumWebhookRegister: `${baseUrl}/premium/webhook/register`,
804
716
  x402Discovery: `${baseUrl}/.well-known/x402`,
805
717
  smitheryConfigSchema: `${baseUrl}/smithery.config.schema.json`,
806
718
  smitheryServerCard: `${baseUrl}/.well-known/mcp/server-card.json`,
@@ -867,6 +779,49 @@ export function buildMarketplaceConfigurationMetadata(req, config) {
867
779
  },
868
780
  };
869
781
  }
782
+ /**
783
+ * @name buildPremiumDiscoveryDocument
784
+ * @description Builds public premium stream/webhook/plugin contracts for agent runtimes and marketplaces.
785
+ */
786
+ export function buildPremiumDiscoveryDocument(req, config, type) {
787
+ const baseUrl = buildPublicBaseUrl(req, config);
788
+ const plugins = listPremiumPlugins();
789
+ const capabilities = plugins.flatMap(plugin => plugin.capabilities
790
+ .filter(capability => !type || capability.type === type)
791
+ .map(capability => ({
792
+ ...capability,
793
+ pluginId: plugin.id,
794
+ providerReady: capability.providerEnv.every(envName => Boolean(process.env[envName])),
795
+ })));
796
+ return {
797
+ version: '1.0.0',
798
+ service: 'sap-mcp-server',
799
+ serverVersion: MCP_SERVER_VERSION,
800
+ kind: type ? `premium-${type}-catalog` : 'premium-plugin-catalog',
801
+ title: type ? `SAP MCP Premium ${type === 'stream' ? 'Stream' : 'Webhook'} Catalog` : 'SAP MCP Premium Plugin Catalog',
802
+ description: 'Public, secret-free premium capability contracts for SAP MCP. Discovery and planning are free; live delivery requires x402/pay.sh settlement and configured providers.',
803
+ links: {
804
+ catalog: `${baseUrl}/premium/catalog.json`,
805
+ streams: `${baseUrl}/premium/streams.json`,
806
+ webhooks: `${baseUrl}/premium/webhooks.json`,
807
+ docs: `${baseUrl}/docs/18_PREMIUM_PLUGIN_RUNTIME.md`,
808
+ mcp: `${baseUrl}/mcp`,
809
+ pricing: `${baseUrl}/pricing.json`,
810
+ x402Discovery: `${baseUrl}/.well-known/x402`,
811
+ payShProvider: `${baseUrl}/pay/provider.yml`,
812
+ },
813
+ monetization: {
814
+ planning: 'free',
815
+ liveDelivery: 'x402/pay.sh required when the selected provider is live and the session is activated.',
816
+ sourceOfTruth: `${baseUrl}/pricing.json`,
817
+ localBridgeTool: 'sap_payments_call_paid_tool',
818
+ },
819
+ providerStatus: publicPremiumProviderStatus(),
820
+ privatePluginSupport: premiumPrivatePluginSupport(),
821
+ capabilities,
822
+ ...(type ? {} : { plugins }),
823
+ };
824
+ }
870
825
  /**
871
826
  * @name readSmitheryConfigSchema
872
827
  * @description Reads the published Smithery JSON schema from the packaged root.
@@ -1002,6 +957,13 @@ export function buildOpenApiSpec(req, config) {
1002
957
  resources: [`${baseUrl}/mcp`],
1003
958
  openApi: `${baseUrl}/openapi.json`,
1004
959
  pricing: `${baseUrl}/pricing.json`,
960
+ premiumCatalog: `${baseUrl}/premium/catalog.json`,
961
+ premiumStreams: `${baseUrl}/premium/streams.json`,
962
+ premiumWebhooks: `${baseUrl}/premium/webhooks.json`,
963
+ premiumHealth: `${baseUrl}/premium/health.json`,
964
+ premiumActivate: `${baseUrl}/premium/activate`,
965
+ premiumStreamBase: `${baseUrl}/premium/stream`,
966
+ premiumWebhookRegister: `${baseUrl}/premium/webhook/register`,
1005
967
  x402Discovery: `${baseUrl}/.well-known/x402`,
1006
968
  payShProvider: `${baseUrl}/pay/provider.yml`,
1007
969
  ...(config.paymentDiscovery ? { payments: config.paymentDiscovery } : {}),
@@ -1179,6 +1141,171 @@ export function buildOpenApiSpec(req, config) {
1179
1141
  },
1180
1142
  },
1181
1143
  },
1144
+ '/premium/catalog.json': {
1145
+ get: {
1146
+ operationId: 'fetchPremiumCatalog',
1147
+ summary: 'Fetch premium plugin catalog',
1148
+ tags: ['Premium'],
1149
+ responses: {
1150
+ '200': {
1151
+ description: 'Secret-free premium plugin, stream, webhook, schema, pricing, and provider readiness metadata.',
1152
+ content: {
1153
+ 'application/json': {
1154
+ schema: {
1155
+ type: 'object',
1156
+ properties: {
1157
+ version: { type: 'string' },
1158
+ service: { type: 'string' },
1159
+ kind: { type: 'string' },
1160
+ capabilities: { type: 'array', items: { type: 'object', additionalProperties: true } },
1161
+ providerStatus: { type: 'object', additionalProperties: { type: 'boolean' } },
1162
+ },
1163
+ },
1164
+ },
1165
+ },
1166
+ },
1167
+ },
1168
+ },
1169
+ },
1170
+ '/premium/streams.json': {
1171
+ get: {
1172
+ operationId: 'fetchPremiumStreams',
1173
+ summary: 'Fetch premium stream catalog',
1174
+ tags: ['Premium'],
1175
+ responses: {
1176
+ '200': {
1177
+ description: 'Secret-free premium stream contracts with schemas, x402/pay.sh pricing, and provider readiness.',
1178
+ content: { 'application/json': { schema: { type: 'object' } } },
1179
+ },
1180
+ },
1181
+ },
1182
+ },
1183
+ '/premium/webhooks.json': {
1184
+ get: {
1185
+ operationId: 'fetchPremiumWebhooks',
1186
+ summary: 'Fetch premium webhook catalog',
1187
+ tags: ['Premium'],
1188
+ responses: {
1189
+ '200': {
1190
+ description: 'Secret-free premium webhook contracts with signed delivery expectations, pricing, and provider readiness.',
1191
+ content: { 'application/json': { schema: { type: 'object' } } },
1192
+ },
1193
+ },
1194
+ },
1195
+ },
1196
+ '/premium/health.json': {
1197
+ get: {
1198
+ operationId: 'fetchPremiumHealth',
1199
+ summary: 'Fetch premium subsystem health and metrics',
1200
+ tags: ['Premium'],
1201
+ responses: {
1202
+ '200': {
1203
+ description: 'Premium subsystem metrics: active/pending/blocked sessions, events delivered, revenue, active streams/webhooks, and provider health.',
1204
+ content: { 'application/json': { schema: { type: 'object' } } },
1205
+ },
1206
+ },
1207
+ },
1208
+ },
1209
+ '/premium/activate': {
1210
+ post: {
1211
+ operationId: 'activatePremiumSession',
1212
+ summary: 'Activate a premium session with a verified x402/pay.sh receipt',
1213
+ tags: ['Premium'],
1214
+ requestBody: {
1215
+ required: true,
1216
+ content: {
1217
+ 'application/json': {
1218
+ schema: {
1219
+ type: 'object',
1220
+ required: ['sessionId', 'paymentReceipt'],
1221
+ properties: {
1222
+ sessionId: { type: 'string' },
1223
+ paymentReceipt: { type: 'string' },
1224
+ payerAddress: { type: 'string' },
1225
+ },
1226
+ },
1227
+ },
1228
+ },
1229
+ },
1230
+ responses: {
1231
+ '200': {
1232
+ description: 'Session activated successfully.',
1233
+ content: { 'application/json': { schema: { type: 'object' } } },
1234
+ },
1235
+ '400': { description: 'Missing required fields.' },
1236
+ '402': { description: 'Session not in pending_payment status.' },
1237
+ },
1238
+ },
1239
+ },
1240
+ '/premium/stream/{sessionId}': {
1241
+ get: {
1242
+ operationId: 'openPremiumStream',
1243
+ summary: 'Open an SSE stream for an active premium session',
1244
+ tags: ['Premium'],
1245
+ parameters: [
1246
+ { name: 'sessionId', in: 'path', required: true, schema: { type: 'string' } },
1247
+ { name: 'subscriptionKey', in: 'query', schema: { type: 'string' } },
1248
+ { name: 'since', in: 'query', schema: { type: 'string' } },
1249
+ ],
1250
+ responses: {
1251
+ '200': {
1252
+ description: 'SSE event stream. Each event is `event: <type>\\ndata: <json>\\n\\n`.',
1253
+ content: { 'text/event-stream': { schema: { type: 'string' } } },
1254
+ },
1255
+ '403': { description: 'Session not active.' },
1256
+ '406': { description: 'Accept: text/event-stream required.' },
1257
+ },
1258
+ },
1259
+ },
1260
+ '/premium/webhook/register': {
1261
+ post: {
1262
+ operationId: 'registerPremiumWebhook',
1263
+ summary: 'Register an HTTPS webhook target for signed premium event delivery',
1264
+ tags: ['Premium'],
1265
+ requestBody: {
1266
+ required: true,
1267
+ content: {
1268
+ 'application/json': {
1269
+ schema: {
1270
+ type: 'object',
1271
+ required: ['sessionId', 'targetUrl', 'events'],
1272
+ properties: {
1273
+ sessionId: { type: 'string' },
1274
+ targetUrl: { type: 'string', format: 'uri' },
1275
+ events: { type: 'array', items: { type: 'string' }, minItems: 1 },
1276
+ signingPublicKey: { type: 'string' },
1277
+ },
1278
+ },
1279
+ },
1280
+ },
1281
+ },
1282
+ responses: {
1283
+ '201': {
1284
+ description: 'Webhook subscription created. Delivery worker started in background.',
1285
+ content: { 'application/json': { schema: { type: 'object' } } },
1286
+ },
1287
+ '400': { description: 'Missing required fields.' },
1288
+ '402': { description: 'Session not active or URL invalid.' },
1289
+ },
1290
+ },
1291
+ },
1292
+ '/premium/webhook/{subscriptionId}/status': {
1293
+ get: {
1294
+ operationId: 'getPremiumWebhookStatus',
1295
+ summary: 'Check webhook subscription status and recent delivery records',
1296
+ tags: ['Premium'],
1297
+ parameters: [
1298
+ { name: 'subscriptionId', in: 'path', required: true, schema: { type: 'string' } },
1299
+ ],
1300
+ responses: {
1301
+ '200': {
1302
+ description: 'Subscription status with recent delivery attempts.',
1303
+ content: { 'application/json': { schema: { type: 'object' } } },
1304
+ },
1305
+ '404': { description: 'Subscription not found.' },
1306
+ },
1307
+ },
1308
+ },
1182
1309
  },
1183
1310
  };
1184
1311
  }
@@ -1705,6 +1832,8 @@ export class RemoteMCPServer {
1705
1832
  httpTuning;
1706
1833
  sessionCleanupInterval;
1707
1834
  httpServer;
1835
+ monetizationGate;
1836
+ premiumMemoryManager;
1708
1837
  constructor(config) {
1709
1838
  this.appConfig = loadConfig();
1710
1839
  initLogger({
@@ -1727,7 +1856,10 @@ export class RemoteMCPServer {
1727
1856
  this.validateAuthConfig();
1728
1857
  await this.rateLimiter.initialize();
1729
1858
  this.startSessionCleanup();
1730
- const monetizationGate = await McpMonetizationGate.create(this.appConfig);
1859
+ this.monetizationGate = await McpMonetizationGate.create(this.appConfig);
1860
+ // Start premium memory background GC.
1861
+ this.premiumMemoryManager = new PremiumMemoryManager();
1862
+ this.premiumMemoryManager.start();
1731
1863
  this.httpServer = http.createServer(async (req, res) => {
1732
1864
  if (this.applyCors(req, res)) {
1733
1865
  return;
@@ -1753,6 +1885,51 @@ export class RemoteMCPServer {
1753
1885
  }, isHeadMethod(req.method));
1754
1886
  return;
1755
1887
  }
1888
+ if (isPublicReadMethod(req.method) && url.pathname === '/premium/catalog.json') {
1889
+ writeJson(res, 200, buildPremiumDiscoveryDocument(req, this.config), {
1890
+ 'Cache-Control': 'public, max-age=300',
1891
+ }, isHeadMethod(req.method));
1892
+ return;
1893
+ }
1894
+ if (isPublicReadMethod(req.method) && url.pathname === '/premium/streams.json') {
1895
+ writeJson(res, 200, buildPremiumDiscoveryDocument(req, this.config, 'stream'), {
1896
+ 'Cache-Control': 'public, max-age=300',
1897
+ }, isHeadMethod(req.method));
1898
+ return;
1899
+ }
1900
+ if (isPublicReadMethod(req.method) && url.pathname === '/premium/webhooks.json') {
1901
+ writeJson(res, 200, buildPremiumDiscoveryDocument(req, this.config, 'webhook'), {
1902
+ 'Cache-Control': 'public, max-age=300',
1903
+ }, isHeadMethod(req.method));
1904
+ return;
1905
+ }
1906
+ if (isPublicReadMethod(req.method) && url.pathname === '/premium/health.json') {
1907
+ try {
1908
+ const metrics = await getPremiumMetrics();
1909
+ writeJson(res, 200, {
1910
+ version: '1.0.0',
1911
+ service: 'sap-mcp-server',
1912
+ serverVersion: MCP_SERVER_VERSION,
1913
+ timestamp: new Date().toISOString(),
1914
+ ...metrics,
1915
+ }, {
1916
+ 'Cache-Control': 'public, max-age=15',
1917
+ }, isHeadMethod(req.method));
1918
+ }
1919
+ catch (error) {
1920
+ writeJson(res, 500, {
1921
+ error: 'premium_health_error',
1922
+ message: error instanceof Error ? error.message : 'Unknown error.',
1923
+ });
1924
+ }
1925
+ return;
1926
+ }
1927
+ // Premium delivery rail routes (activation, SSE stream, webhook register/status).
1928
+ // These are not public read-only — they handle POST and GET with side effects.
1929
+ const handledByPremiumRoute = await tryPremiumRoute(req, res);
1930
+ if (handledByPremiumRoute) {
1931
+ return;
1932
+ }
1756
1933
  if (isPublicReadMethod(req.method) && url.pathname === '/smithery.config.schema.json') {
1757
1934
  writeJson(res, 200, readSmitheryConfigSchema(), {
1758
1935
  'Cache-Control': 'public, max-age=300',
@@ -1943,8 +2120,8 @@ export class RemoteMCPServer {
1943
2120
  sessionIdGenerator: undefined,
1944
2121
  });
1945
2122
  await perRequestServer.connect(perRequestTransport);
1946
- if (monetizationGate) {
1947
- await monetizationGate.handle(req, res, async (mcpReq, mcpRes, parsedBody) => {
2123
+ if (this.monetizationGate) {
2124
+ await this.monetizationGate.handle(req, res, async (mcpReq, mcpRes, parsedBody) => {
1948
2125
  // Extract tool names from parsed JSON-RPC body for logging
1949
2126
  loggedToolNames = extractToolNamesFromJsonRpc(parsedBody);
1950
2127
  loggedMethod = extractJsonRpcMethod(parsedBody);
@@ -1960,8 +2137,8 @@ export class RemoteMCPServer {
1960
2137
  }
1961
2138
  else {
1962
2139
  // Stateful mode: route each request to the transport created by its initialize response.
1963
- if (monetizationGate) {
1964
- await monetizationGate.handle(req, res, async (mcpReq, mcpRes, parsedBody) => {
2140
+ if (this.monetizationGate) {
2141
+ await this.monetizationGate.handle(req, res, async (mcpReq, mcpRes, parsedBody) => {
1965
2142
  loggedToolNames = extractToolNamesFromJsonRpc(parsedBody);
1966
2143
  loggedMethod = extractJsonRpcMethod(parsedBody);
1967
2144
  await this.handleStatefulMcpRequest(mcpReq, mcpRes, parsedBody);
@@ -2051,7 +2228,12 @@ export class RemoteMCPServer {
2051
2228
  resolve();
2052
2229
  }, 5_000);
2053
2230
  });
2231
+ await this.monetizationGate?.close();
2232
+ this.monetizationGate = undefined;
2054
2233
  await this.rateLimiter.close();
2234
+ // Premium subsystem graceful shutdown: stop streams, webhooks, providers, clear stores.
2235
+ await this.premiumMemoryManager?.shutdown();
2236
+ this.premiumMemoryManager = undefined;
2055
2237
  }
2056
2238
  /**
2057
2239
  * @name validateAuthConfig