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

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 (602) hide show
  1. package/.env.example +8 -7
  2. package/CHANGELOG.md +199 -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 +64 -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 +102 -0
  244. package/dist/premium/webhook-engine.d.ts.map +1 -0
  245. package/dist/premium/webhook-engine.js +382 -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 +34 -1
  491. package/dist/server/server-metadata.d.ts.map +1 -1
  492. package/dist/server/server-metadata.js +35 -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 +6 -0
  556. package/dist/tools/index.d.ts.map +1 -1
  557. package/dist/tools/index.js +7 -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 +732 -0
  570. package/dist/tools/premium-tools.js.map +1 -0
  571. package/dist/tools/register-tools.d.ts.map +1 -1
  572. package/dist/tools/register-tools.js +9 -0
  573. package/dist/tools/register-tools.js.map +1 -1
  574. package/dist/tools/sap-sdk-tools.d.ts.map +1 -1
  575. package/dist/tools/sap-sdk-tools.js +42 -32
  576. package/dist/tools/sap-sdk-tools.js.map +1 -1
  577. package/dist/tools/x402-paid-call-tool.js +2 -2
  578. package/dist/tools/x402-paid-call-tool.js.map +1 -1
  579. package/dist/transports/index.d.ts +6 -1
  580. package/dist/transports/index.d.ts.map +1 -1
  581. package/dist/transports/index.js +6 -1
  582. package/dist/transports/index.js.map +1 -1
  583. package/dist/transports/stdio.d.ts +17 -5
  584. package/dist/transports/stdio.d.ts.map +1 -1
  585. package/dist/transports/stdio.js +17 -5
  586. package/dist/transports/stdio.js.map +1 -1
  587. package/dist/tui/wizard-save.d.ts +88 -8
  588. package/dist/tui/wizard-save.d.ts.map +1 -1
  589. package/dist/tui/wizard-save.js +77 -8
  590. package/dist/tui/wizard-save.js.map +1 -1
  591. package/docs/06_PAYMENTS_X402_AND_PAYSH.md +3 -3
  592. package/docs/07_ENDPOINTS_AND_CLIENTS.md +4 -1
  593. package/docs/14_DESKTOP_WIZARD_RELEASE.md +3 -3
  594. package/docs/16_SAP_AGENT_IDENTITY_PIPELINE.md +6 -0
  595. package/docs/18_PREMIUM_PLUGIN_RUNTIME.md +108 -0
  596. package/docs/README.md +12 -0
  597. package/package.json +8 -9
  598. package/server.json +3 -3
  599. package/skills/sap-agent-registry/SKILL.md +6 -0
  600. package/skills/sap-mcp/SKILL.md +27 -4
  601. package/skills/sap-mcp/TOOL_REFERENCE.md +4 -1
  602. package/skills/sap-payments-x402/SKILL.md +22 -8
@@ -0,0 +1,732 @@
1
+ import { registerTool } from '../adapters/mcp/sdk-compat.js';
2
+ import { createStructuredJsonResponse } from '../adapters/mcp/tool-response.js';
3
+ import { buildPremiumPluginManifestTemplate, createPremiumSessionPlan, getPremiumSession, listPremiumPlugins, listPremiumSessions, premiumPrivatePluginSupport, publicPremiumProviderStatus, validatePremiumPluginManifest, activatePremiumSession, closeSession, registerWebhook, unregisterWebhook, getWebhookSubscription, getWebhookDeliveries, getPremiumMetrics, } from '../premium/index.js';
4
+ const CAPABILITY_TYPES = ['stream', 'webhook', 'tool'];
5
+ function parseCapabilityType(value) {
6
+ if (typeof value !== 'string')
7
+ return undefined;
8
+ return CAPABILITY_TYPES.includes(value) ? value : undefined;
9
+ }
10
+ function readString(value) {
11
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
12
+ }
13
+ function readNumber(value, fallback) {
14
+ return typeof value === 'number' && Number.isFinite(value) ? value : fallback;
15
+ }
16
+ function isPremiumProviderReady(providerEnv) {
17
+ return Array.isArray(providerEnv) && providerEnv.every(envName => Boolean(process.env[envName]));
18
+ }
19
+ function capabilityForCatalog(capability, pluginId) {
20
+ return {
21
+ ...capability,
22
+ ...(pluginId ? { pluginId } : {}),
23
+ providerReady: isPremiumProviderReady(capability.providerEnv),
24
+ };
25
+ }
26
+ const catalogOutputSchema = {
27
+ type: 'object',
28
+ required: ['version', 'plugins', 'providerStatus', 'privatePluginSupport'],
29
+ properties: {
30
+ version: { type: 'string', description: 'Premium plugin catalog contract version.' },
31
+ plugins: {
32
+ type: 'array',
33
+ description: 'Installed premium plugin manifests and their stream/webhook/tool capabilities.',
34
+ items: { type: 'object', additionalProperties: true, description: 'Premium plugin manifest.' },
35
+ },
36
+ providerStatus: {
37
+ type: 'object',
38
+ additionalProperties: { type: 'boolean' },
39
+ description: 'Provider environment readiness map. False means SAP MCP will not claim the feed is live.',
40
+ },
41
+ privatePluginSupport: {
42
+ type: 'object',
43
+ additionalProperties: true,
44
+ description: 'Enterprise plugin loader contract for private or submodule-backed premium capabilities.',
45
+ },
46
+ },
47
+ additionalProperties: false,
48
+ };
49
+ const capabilityCatalogOutputSchema = {
50
+ type: 'object',
51
+ required: ['version', 'type', 'capabilities', 'providerStatus'],
52
+ properties: {
53
+ version: { type: 'string', description: 'Premium capability catalog contract version.' },
54
+ type: { type: 'string', description: 'Capability type requested by the caller.' },
55
+ capabilities: {
56
+ type: 'array',
57
+ description: 'Premium capabilities filtered by type with schemas, pricing, delivery contracts, and provider status.',
58
+ items: { type: 'object', additionalProperties: true, description: 'Premium capability definition.' },
59
+ },
60
+ providerStatus: {
61
+ type: 'object',
62
+ additionalProperties: { type: 'boolean' },
63
+ description: 'Provider environment readiness map for capabilities that need external providers.',
64
+ },
65
+ },
66
+ additionalProperties: false,
67
+ };
68
+ const validationOutputSchema = {
69
+ type: 'object',
70
+ required: ['valid', 'errors', 'warnings'],
71
+ properties: {
72
+ valid: { type: 'boolean', description: 'True only when the manifest can be safely reviewed for premium plugin loading.' },
73
+ errors: {
74
+ type: 'array',
75
+ description: 'Blocking manifest issues. Do not load or publish the plugin until empty.',
76
+ items: { type: 'object', additionalProperties: true, description: 'Manifest validation issue.' },
77
+ },
78
+ warnings: {
79
+ type: 'array',
80
+ description: 'Non-blocking quality issues that should be fixed before marketplace publication.',
81
+ items: { type: 'object', additionalProperties: true, description: 'Manifest validation warning.' },
82
+ },
83
+ },
84
+ additionalProperties: false,
85
+ };
86
+ const templateOutputSchema = {
87
+ type: 'object',
88
+ required: ['manifest', 'validation', 'nextSteps'],
89
+ properties: {
90
+ manifest: {
91
+ type: 'object',
92
+ additionalProperties: true,
93
+ description: 'Data-only premium plugin manifest template. Review, harden schemas, then store it in the private plugin subrepo.',
94
+ },
95
+ validation: {
96
+ type: 'object',
97
+ additionalProperties: true,
98
+ description: 'Validation report for the generated template.',
99
+ },
100
+ nextSteps: {
101
+ type: 'array',
102
+ description: 'Operator steps for validating, plugging, unplugging, and safely exposing this plugin.',
103
+ items: { type: 'string', description: 'One concrete next step.' },
104
+ },
105
+ },
106
+ additionalProperties: false,
107
+ };
108
+ const sessionOutputSchema = {
109
+ type: 'object',
110
+ required: ['session', 'providerStatus', 'monetization'],
111
+ properties: {
112
+ session: {
113
+ type: 'object',
114
+ additionalProperties: true,
115
+ description: 'Premium session plan. This is a planning object and must be paid/activated by the delivery rail before live data is delivered.',
116
+ },
117
+ providerStatus: {
118
+ type: 'object',
119
+ additionalProperties: { type: 'boolean' },
120
+ description: 'Provider readiness at the moment the session was planned.',
121
+ },
122
+ monetization: {
123
+ type: 'object',
124
+ additionalProperties: true,
125
+ description: 'x402/pay.sh payment guidance for the premium stream or webhook activation rail.',
126
+ },
127
+ },
128
+ additionalProperties: false,
129
+ };
130
+ /**
131
+ * @name registerPremiumTools
132
+ * @description Registers premium plugin, stream, webhook, and session-planning tools.
133
+ */
134
+ export function registerPremiumTools(server, context) {
135
+ registerTool(server, 'sap_premium_plugin_catalog', {
136
+ title: 'Premium Plugin Catalog',
137
+ description: 'Free premium capability discovery. Lists SAP MCP stream, webhook, and premium tool plugin manifests with strict schemas, x402/pay.sh pricing contracts, provider readiness, and private enterprise plugin loader guidance. This tool never returns fake live data.',
138
+ inputSchema: {
139
+ type: 'object',
140
+ properties: {
141
+ includeSchemas: {
142
+ type: 'boolean',
143
+ description: 'When true, include full input/output JSON Schemas for every capability so agent runtimes can validate calls before payment.',
144
+ },
145
+ },
146
+ additionalProperties: false,
147
+ },
148
+ outputSchema: catalogOutputSchema,
149
+ }, async (input) => {
150
+ const includeSchemas = Boolean(input?.includeSchemas);
151
+ const plugins = listPremiumPlugins().map(plugin => ({
152
+ ...plugin,
153
+ capabilities: plugin.capabilities.map(capability => {
154
+ const catalogCapability = capabilityForCatalog(capability);
155
+ return includeSchemas
156
+ ? catalogCapability
157
+ : {
158
+ ...catalogCapability,
159
+ inputSchema: { omitted: true, reason: 'Pass includeSchemas=true to inspect strict capability input schemas.' },
160
+ outputSchema: { omitted: true, reason: 'Pass includeSchemas=true to inspect strict capability output schemas.' },
161
+ };
162
+ }),
163
+ }));
164
+ return createStructuredJsonResponse({
165
+ version: '1.0.0',
166
+ plugins,
167
+ providerStatus: publicPremiumProviderStatus(),
168
+ privatePluginSupport: premiumPrivatePluginSupport(),
169
+ });
170
+ });
171
+ registerTool(server, 'sap_stream_catalog', {
172
+ title: 'Premium Stream Catalog',
173
+ description: 'Free stream discovery for paid real-time SAP MCP capabilities. Returns only stream contracts, including event names, latency targets, x402 pricing, strict schemas, provider env requirements, and whether each stream is live or waiting for provider configuration.',
174
+ inputSchema: {
175
+ type: 'object',
176
+ properties: {
177
+ pluginId: {
178
+ type: 'string',
179
+ description: 'Optional premium plugin id used to narrow stream discovery, for example sap-premium-market-data.',
180
+ },
181
+ },
182
+ additionalProperties: false,
183
+ },
184
+ outputSchema: capabilityCatalogOutputSchema,
185
+ }, async (input) => {
186
+ const pluginId = readString(input?.pluginId);
187
+ const capabilities = listPremiumPlugins()
188
+ .filter(plugin => !pluginId || plugin.id === pluginId)
189
+ .flatMap(plugin => plugin.capabilities
190
+ .filter(capability => capability.type === 'stream')
191
+ .map(capability => capabilityForCatalog(capability, plugin.id)));
192
+ return createStructuredJsonResponse({
193
+ version: '1.0.0',
194
+ type: 'stream',
195
+ capabilities,
196
+ providerStatus: publicPremiumProviderStatus(),
197
+ });
198
+ });
199
+ registerTool(server, 'sap_webhook_catalog', {
200
+ title: 'Premium Webhook Catalog',
201
+ description: 'Free webhook discovery for paid SAP MCP event delivery. Returns webhook event contracts, signed-delivery expectations, replay windows, x402/pay.sh pricing, provider readiness, and strict subscription schemas.',
202
+ inputSchema: {
203
+ type: 'object',
204
+ properties: {
205
+ pluginId: {
206
+ type: 'string',
207
+ description: 'Optional premium plugin id used to narrow webhook discovery, for example sap-premium-market-data.',
208
+ },
209
+ },
210
+ additionalProperties: false,
211
+ },
212
+ outputSchema: capabilityCatalogOutputSchema,
213
+ }, async (input) => {
214
+ const pluginId = readString(input?.pluginId);
215
+ const capabilities = listPremiumPlugins()
216
+ .filter(plugin => !pluginId || plugin.id === pluginId)
217
+ .flatMap(plugin => plugin.capabilities
218
+ .filter(capability => capability.type === 'webhook')
219
+ .map(capability => capabilityForCatalog(capability, plugin.id)));
220
+ return createStructuredJsonResponse({
221
+ version: '1.0.0',
222
+ type: 'webhook',
223
+ capabilities,
224
+ providerStatus: publicPremiumProviderStatus(),
225
+ });
226
+ });
227
+ registerTool(server, 'sap_premium_validate_plugin_manifest', {
228
+ title: 'Validate Premium Plugin Manifest',
229
+ description: 'Free manifest validator for SAP MCP premium plugins. Validates ids, semver, descriptions, strict input/output schemas, x402/pay.sh pricing policies, and delivery contracts. It never executes plugin code or loads provider secrets.',
230
+ inputSchema: {
231
+ type: 'object',
232
+ required: ['manifest'],
233
+ properties: {
234
+ manifest: {
235
+ type: 'object',
236
+ additionalProperties: true,
237
+ description: 'Premium plugin manifest candidate to validate before publishing or loading from a private plugin directory.',
238
+ },
239
+ },
240
+ additionalProperties: false,
241
+ },
242
+ outputSchema: validationOutputSchema,
243
+ }, async (input) => {
244
+ const manifest = input?.manifest;
245
+ return createStructuredJsonResponse({ ...validatePremiumPluginManifest(manifest) });
246
+ });
247
+ registerTool(server, 'sap_premium_plugin_template', {
248
+ title: 'Build Premium Plugin Template',
249
+ description: 'Free premium plugin manifest builder. Generates a strict, data-only stream/webhook/tool manifest template that teams can place in a private plugin subrepo, validate, plug, and unplug without executing untrusted code or exposing provider secrets.',
250
+ inputSchema: {
251
+ type: 'object',
252
+ required: ['pluginId', 'capabilityId', 'capabilityType'],
253
+ properties: {
254
+ pluginId: {
255
+ type: 'string',
256
+ description: 'Lowercase premium plugin id, for example sap-premium-custom-alpha. This becomes the manifest id.',
257
+ },
258
+ capabilityId: {
259
+ type: 'string',
260
+ description: 'Lowercase capability id, for example custom.signal.stream or custom:tool:score.',
261
+ },
262
+ capabilityType: {
263
+ type: 'string',
264
+ enum: [...CAPABILITY_TYPES],
265
+ description: 'Capability type to template: stream, webhook, or tool.',
266
+ },
267
+ title: {
268
+ type: 'string',
269
+ description: 'Human-readable plugin and capability title shown to agent runtimes.',
270
+ },
271
+ description: {
272
+ type: 'string',
273
+ description: 'Full agent-facing description explaining the use case, provider boundary, pricing model, and what the capability delivers.',
274
+ },
275
+ publisher: {
276
+ type: 'string',
277
+ description: 'Publisher name used for enterprise review and marketplace metadata.',
278
+ },
279
+ visibility: {
280
+ type: 'string',
281
+ enum: ['public', 'private', 'enterprise'],
282
+ description: 'Discovery visibility. Use private or enterprise for non-public provider contracts.',
283
+ },
284
+ unitPriceUsd: {
285
+ type: 'number',
286
+ description: 'Suggested x402/pay.sh unit price in USD. Agents should see pricing before activation.',
287
+ },
288
+ providerEnv: {
289
+ type: 'array',
290
+ description: 'Uppercase provider env var names required to make the capability live. Do not pass secret values.',
291
+ items: { type: 'string', description: 'Environment variable name, for example SAP_MCP_PREMIUM_CUSTOM_STREAM_URL.' },
292
+ },
293
+ },
294
+ additionalProperties: false,
295
+ },
296
+ outputSchema: templateOutputSchema,
297
+ }, async (input) => {
298
+ const raw = input;
299
+ const capabilityType = parseCapabilityType(raw.capabilityType);
300
+ const pluginId = readString(raw.pluginId);
301
+ const capabilityId = readString(raw.capabilityId);
302
+ if (!pluginId || !capabilityId || !capabilityType) {
303
+ return createStructuredJsonResponse({
304
+ manifest: null,
305
+ validation: {
306
+ valid: false,
307
+ errors: [{ path: '$', severity: 'error', message: 'pluginId, capabilityId, and capabilityType are required.' }],
308
+ warnings: [],
309
+ },
310
+ nextSteps: ['Call this tool again with exact ids and capabilityType from stream, webhook, or tool.'],
311
+ }, { isError: true });
312
+ }
313
+ const manifest = buildPremiumPluginManifestTemplate({
314
+ pluginId,
315
+ capabilityId,
316
+ capabilityType,
317
+ title: readString(raw.title),
318
+ description: readString(raw.description),
319
+ publisher: readString(raw.publisher),
320
+ visibility: ['public', 'private', 'enterprise'].includes(String(raw.visibility))
321
+ ? raw.visibility
322
+ : undefined,
323
+ unitPriceUsd: typeof raw.unitPriceUsd === 'number' ? raw.unitPriceUsd : undefined,
324
+ providerEnv: Array.isArray(raw.providerEnv) ? raw.providerEnv.filter((entry) => typeof entry === 'string') : undefined,
325
+ });
326
+ const validation = validatePremiumPluginManifest(manifest);
327
+ return createStructuredJsonResponse({
328
+ manifest,
329
+ validation,
330
+ nextSteps: [
331
+ 'Tighten inputSchema and outputSchema around the exact provider payload before production.',
332
+ 'Store the manifest as JSON in the private plugin subrepo under manifests/.',
333
+ 'Run sap_premium_validate_plugin_manifest, then deploy with SAP_MCP_ENABLE_PREMIUM_PLUGINS=true and SAP_MCP_PLUGIN_DIR set on the VPS.',
334
+ 'Keep SAP_MCP_PREMIUM_EXPOSE_PRIVATE_DISCOVERY=false unless the deployment is authenticated or the private contract should be visible.',
335
+ 'Remove or rename the manifest file and restart the hosted server to unplug the capability cleanly.',
336
+ ],
337
+ });
338
+ });
339
+ registerTool(server, 'sap_premium_session_start', {
340
+ title: 'Plan Premium Session',
341
+ description: 'Free premium session planner. Creates a bounded session plan for a stream, webhook, or premium tool capability before any x402 charge. Use it to validate plugin id, capability id, requested units, TTL, provider readiness, and estimated price; paid activation happens only on the delivery rail.',
342
+ inputSchema: {
343
+ type: 'object',
344
+ required: ['pluginId', 'capabilityId', 'capabilityType'],
345
+ properties: {
346
+ pluginId: {
347
+ type: 'string',
348
+ description: 'Premium plugin id from sap_premium_plugin_catalog, for example sap-premium-market-data.',
349
+ },
350
+ capabilityId: {
351
+ type: 'string',
352
+ description: 'Capability id from sap_stream_catalog or sap_webhook_catalog, for example jupiter.quote.delta.',
353
+ },
354
+ capabilityType: {
355
+ type: 'string',
356
+ enum: [...CAPABILITY_TYPES],
357
+ description: 'Capability type being planned: stream, webhook, or tool.',
358
+ },
359
+ requestedUnits: {
360
+ type: 'number',
361
+ description: 'Requested paid units for the session. Streams use minutes, webhooks use events, tools use sessions.',
362
+ },
363
+ ttlSeconds: {
364
+ type: 'number',
365
+ description: 'How long the unpaid planning object should remain valid. Clamped between 60 and 3600 seconds.',
366
+ },
367
+ maxPriceUsd: {
368
+ type: 'number',
369
+ description: 'Optional buyer budget cap in USD. Agents should compare this to estimatedPriceUsd before paid activation.',
370
+ },
371
+ consumer: {
372
+ type: 'string',
373
+ description: 'Optional runtime, agent id, wallet, or application identifier requesting the premium session plan.',
374
+ },
375
+ },
376
+ additionalProperties: false,
377
+ },
378
+ outputSchema: sessionOutputSchema,
379
+ }, async (input) => {
380
+ try {
381
+ const raw = input;
382
+ const pluginId = readString(raw.pluginId);
383
+ const capabilityId = readString(raw.capabilityId);
384
+ const capabilityType = parseCapabilityType(raw.capabilityType);
385
+ if (!pluginId || !capabilityId || !capabilityType) {
386
+ return createStructuredJsonResponse({
387
+ session: {
388
+ status: 'invalid_request',
389
+ nextAction: 'Pass pluginId, capabilityId, and capabilityType exactly as returned by the premium catalog tools.',
390
+ },
391
+ providerStatus: publicPremiumProviderStatus(),
392
+ monetization: { paymentRequired: false, reason: 'Invalid planning requests are not charged.' },
393
+ }, { isError: true });
394
+ }
395
+ const request = {
396
+ pluginId,
397
+ capabilityId,
398
+ capabilityType,
399
+ requestedUnits: readNumber(raw.requestedUnits, 1),
400
+ ttlSeconds: readNumber(raw.ttlSeconds, 300),
401
+ maxPriceUsd: typeof raw.maxPriceUsd === 'number' ? raw.maxPriceUsd : undefined,
402
+ consumer: readString(raw.consumer),
403
+ };
404
+ const session = createPremiumSessionPlan(request);
405
+ return createStructuredJsonResponse({
406
+ session,
407
+ providerStatus: publicPremiumProviderStatus(),
408
+ monetization: {
409
+ paymentRequired: false,
410
+ reason: 'This tool plans the session without charging. x402/pay.sh payment is required only when a live premium delivery rail activates the session.',
411
+ hostedPayTo: context.config.monetization?.payTo ?? null,
412
+ provider: context.config.monetization?.provider ?? 'none',
413
+ },
414
+ });
415
+ }
416
+ catch (error) {
417
+ return createStructuredJsonResponse({
418
+ session: {
419
+ status: 'unknown_premium_capability',
420
+ nextAction: error instanceof Error ? error.message : 'Call sap_premium_plugin_catalog and retry with exact ids.',
421
+ },
422
+ providerStatus: publicPremiumProviderStatus(),
423
+ monetization: { paymentRequired: false, reason: 'Unknown premium capabilities are not charged.' },
424
+ }, { isError: true });
425
+ }
426
+ });
427
+ registerTool(server, 'sap_premium_session_status', {
428
+ title: 'Premium Session Status',
429
+ description: 'Free premium session status lookup. Returns the current planning status for a premium stream/webhook/tool session id, or lists recent in-memory session plans when no id is provided. It does not expose secrets or stream payload data.',
430
+ inputSchema: {
431
+ type: 'object',
432
+ properties: {
433
+ sessionId: {
434
+ type: 'string',
435
+ description: 'Optional premium session id returned by sap_premium_session_start.',
436
+ },
437
+ },
438
+ additionalProperties: false,
439
+ },
440
+ outputSchema: {
441
+ type: 'object',
442
+ required: ['sessions'],
443
+ properties: {
444
+ sessions: {
445
+ type: 'array',
446
+ description: 'Matching premium session plans. Empty when the requested session id is unknown or expired from memory.',
447
+ items: { type: 'object', additionalProperties: true, description: 'Premium session record.' },
448
+ },
449
+ },
450
+ additionalProperties: false,
451
+ },
452
+ }, async (input) => {
453
+ const sessionId = readString(input?.sessionId);
454
+ const sessions = sessionId ? [getPremiumSession(sessionId)].filter(Boolean) : listPremiumSessions();
455
+ return createStructuredJsonResponse({ sessions });
456
+ });
457
+ // --- Session activation (Layer 2: Payment Gate) ---
458
+ registerTool(server, 'sap_premium_activate_session', {
459
+ title: 'Activate Premium Session',
460
+ description: 'Activates a pending premium session with a verified x402/pay.sh payment receipt. The caller must have already settled the payment challenge on the delivery rail. This tool does not charge — it binds the receipt and transitions the session from pending_payment to active so the stream/webhook delivery rail can start.',
461
+ inputSchema: {
462
+ type: 'object',
463
+ required: ['sessionId', 'paymentReceipt'],
464
+ properties: {
465
+ sessionId: {
466
+ type: 'string',
467
+ description: 'Premium session id returned by sap_premium_session_start.',
468
+ },
469
+ paymentReceipt: {
470
+ type: 'string',
471
+ description: 'Opaque x402/pay.sh payment receipt string proving settlement.',
472
+ },
473
+ payerAddress: {
474
+ type: 'string',
475
+ description: 'Optional Solana payer public key for audit binding.',
476
+ },
477
+ },
478
+ additionalProperties: false,
479
+ },
480
+ outputSchema: {
481
+ type: 'object',
482
+ required: ['activation'],
483
+ properties: {
484
+ activation: {
485
+ type: 'object',
486
+ additionalProperties: true,
487
+ description: 'Activation result with status, activatedAt, receiptBound, unitsQuota, and reason.',
488
+ },
489
+ },
490
+ additionalProperties: false,
491
+ },
492
+ }, async (input) => {
493
+ const raw = input;
494
+ const sessionId = readString(raw.sessionId);
495
+ const paymentReceipt = readString(raw.paymentReceipt);
496
+ if (!sessionId || !paymentReceipt) {
497
+ return createStructuredJsonResponse({
498
+ activation: {
499
+ status: 'pending_payment',
500
+ activatedAt: null,
501
+ receiptBound: false,
502
+ unitsQuota: 0,
503
+ reason: 'sessionId and paymentReceipt are required.',
504
+ },
505
+ }, { isError: true });
506
+ }
507
+ const activation = activatePremiumSession({
508
+ sessionId,
509
+ paymentReceipt,
510
+ payerAddress: readString(raw.payerAddress),
511
+ });
512
+ return createStructuredJsonResponse({ activation });
513
+ });
514
+ registerTool(server, 'sap_premium_close_session', {
515
+ title: 'Close Premium Session',
516
+ description: 'Closes an active premium session, stopping all stream and webhook delivery. Use this when the buyer wants to stop delivery before the unit quota is exhausted. No refund is issued — the session is simply closed.',
517
+ inputSchema: {
518
+ type: 'object',
519
+ required: ['sessionId', 'reason'],
520
+ properties: {
521
+ sessionId: {
522
+ type: 'string',
523
+ description: 'The active premium session id to close.',
524
+ },
525
+ reason: {
526
+ type: 'string',
527
+ description: 'Human-readable reason for closing the session.',
528
+ },
529
+ },
530
+ additionalProperties: false,
531
+ },
532
+ outputSchema: {
533
+ type: 'object',
534
+ required: ['closed'],
535
+ properties: {
536
+ closed: {
537
+ type: 'object',
538
+ additionalProperties: true,
539
+ description: 'Close result with sessionId, success boolean, and reason.',
540
+ },
541
+ },
542
+ additionalProperties: false,
543
+ },
544
+ }, async (input) => {
545
+ const raw = input;
546
+ const sessionId = readString(raw.sessionId);
547
+ const reason = readString(raw.reason) ?? 'Closed by agent request.';
548
+ if (!sessionId) {
549
+ return createStructuredJsonResponse({
550
+ closed: { sessionId: null, success: false, reason: 'sessionId is required.' },
551
+ }, { isError: true });
552
+ }
553
+ const success = closeSession(sessionId, reason);
554
+ return createStructuredJsonResponse({
555
+ closed: { sessionId, success, reason: success ? 'Session closed.' : 'Session not found or not active.' },
556
+ });
557
+ });
558
+ // --- Webhook management (Layer 3: Delivery Rail) ---
559
+ registerTool(server, 'sap_premium_webhook_register', {
560
+ title: 'Register Premium Webhook',
561
+ description: 'Registers an HTTPS webhook target for signed premium event delivery. The session must be active (activated via sap_premium_activate_session). The target URL must be HTTPS, reachable, and not a private/localhost endpoint in production. Events are filtered to the exact event ids listed in the request.',
562
+ inputSchema: {
563
+ type: 'object',
564
+ required: ['sessionId', 'targetUrl', 'events'],
565
+ properties: {
566
+ sessionId: {
567
+ type: 'string',
568
+ description: 'Active premium session id.',
569
+ },
570
+ targetUrl: {
571
+ type: 'string',
572
+ description: 'HTTPS webhook endpoint owned by the buyer. Localhost and private network URLs are rejected in production.',
573
+ },
574
+ events: {
575
+ type: 'array',
576
+ minItems: 1,
577
+ items: { type: 'string' },
578
+ description: 'Exact event ids to deliver, from the capability delivery contract.',
579
+ },
580
+ signingPublicKey: {
581
+ type: 'string',
582
+ description: 'Optional buyer public key for webhook signature verification.',
583
+ },
584
+ },
585
+ additionalProperties: false,
586
+ },
587
+ outputSchema: {
588
+ type: 'object',
589
+ required: ['subscription'],
590
+ properties: {
591
+ subscription: {
592
+ type: 'object',
593
+ additionalProperties: true,
594
+ description: 'Webhook subscription record with subscriptionId, targetUrl, events, and delivery stats.',
595
+ },
596
+ },
597
+ additionalProperties: false,
598
+ },
599
+ }, async (input) => {
600
+ const raw = input;
601
+ const sessionId = readString(raw.sessionId);
602
+ const targetUrl = readString(raw.targetUrl);
603
+ const events = Array.isArray(raw.events) ? raw.events.filter((e) => typeof e === 'string') : [];
604
+ if (!sessionId || !targetUrl || events.length === 0) {
605
+ return createStructuredJsonResponse({
606
+ subscription: null,
607
+ reason: 'sessionId, targetUrl, and at least one event id are required.',
608
+ }, { isError: true });
609
+ }
610
+ const subscription = await registerWebhook(sessionId, targetUrl, events, readString(raw.signingPublicKey));
611
+ if (!subscription) {
612
+ return createStructuredJsonResponse({
613
+ subscription: null,
614
+ reason: 'Session is not active, URL is invalid, or no matching events.',
615
+ }, { isError: true });
616
+ }
617
+ return createStructuredJsonResponse({ subscription });
618
+ });
619
+ registerTool(server, 'sap_premium_webhook_unregister', {
620
+ title: 'Unregister Premium Webhook',
621
+ description: 'Deactivates and removes a webhook subscription. No further events will be delivered to the target URL.',
622
+ inputSchema: {
623
+ type: 'object',
624
+ required: ['subscriptionId'],
625
+ properties: {
626
+ subscriptionId: {
627
+ type: 'string',
628
+ description: 'Webhook subscription id returned by sap_premium_webhook_register.',
629
+ },
630
+ },
631
+ additionalProperties: false,
632
+ },
633
+ outputSchema: {
634
+ type: 'object',
635
+ required: ['unregistered'],
636
+ properties: {
637
+ unregistered: {
638
+ type: 'object',
639
+ additionalProperties: true,
640
+ description: 'Unregister result with subscriptionId and success boolean.',
641
+ },
642
+ },
643
+ additionalProperties: false,
644
+ },
645
+ }, async (input) => {
646
+ const subscriptionId = readString(input.subscriptionId);
647
+ if (!subscriptionId) {
648
+ return createStructuredJsonResponse({
649
+ unregistered: { subscriptionId: null, success: false },
650
+ }, { isError: true });
651
+ }
652
+ const success = unregisterWebhook(subscriptionId);
653
+ return createStructuredJsonResponse({
654
+ unregistered: { subscriptionId, success },
655
+ });
656
+ });
657
+ registerTool(server, 'sap_premium_webhook_status', {
658
+ title: 'Premium Webhook Status',
659
+ description: 'Returns the current status of a webhook subscription, including delivery stats and recent delivery attempt records with HTTP status codes and signatures.',
660
+ inputSchema: {
661
+ type: 'object',
662
+ required: ['subscriptionId'],
663
+ properties: {
664
+ subscriptionId: {
665
+ type: 'string',
666
+ description: 'Webhook subscription id returned by sap_premium_webhook_register.',
667
+ },
668
+ includeDeliveries: {
669
+ type: 'boolean',
670
+ description: 'When true, include recent delivery attempt records. Default: true.',
671
+ },
672
+ },
673
+ additionalProperties: false,
674
+ },
675
+ outputSchema: {
676
+ type: 'object',
677
+ required: ['subscription'],
678
+ properties: {
679
+ subscription: {
680
+ type: 'object',
681
+ additionalProperties: true,
682
+ description: 'Webhook subscription record, or null if not found.',
683
+ },
684
+ deliveries: {
685
+ type: 'array',
686
+ description: 'Recent delivery attempt records.',
687
+ items: { type: 'object', additionalProperties: true },
688
+ },
689
+ },
690
+ additionalProperties: false,
691
+ },
692
+ }, async (input) => {
693
+ const raw = input;
694
+ const subscriptionId = readString(raw.subscriptionId);
695
+ if (!subscriptionId) {
696
+ return createStructuredJsonResponse({
697
+ subscription: null,
698
+ deliveries: [],
699
+ }, { isError: true });
700
+ }
701
+ const subscription = getWebhookSubscription(subscriptionId);
702
+ const includeDeliveries = raw.includeDeliveries !== false;
703
+ const deliveries = includeDeliveries && subscription ? getWebhookDeliveries(subscriptionId) : [];
704
+ return createStructuredJsonResponse({ subscription, deliveries });
705
+ });
706
+ // --- Metrics (Layer 5: Monitoring) ---
707
+ registerTool(server, 'sap_premium_metrics', {
708
+ title: 'Premium Subsystem Metrics',
709
+ description: 'Returns a point-in-time metrics snapshot of the premium subsystem: active/pending/blocked sessions, total events delivered, estimated revenue, active streams, active webhooks, and provider health status. Use this for monitoring and operational insights.',
710
+ inputSchema: {
711
+ type: 'object',
712
+ properties: {},
713
+ additionalProperties: false,
714
+ },
715
+ outputSchema: {
716
+ type: 'object',
717
+ required: ['metrics'],
718
+ properties: {
719
+ metrics: {
720
+ type: 'object',
721
+ additionalProperties: true,
722
+ description: 'Premium metrics snapshot with session, event, revenue, stream, webhook, and provider health counts.',
723
+ },
724
+ },
725
+ additionalProperties: false,
726
+ },
727
+ }, async () => {
728
+ const metrics = await getPremiumMetrics();
729
+ return createStructuredJsonResponse({ metrics });
730
+ });
731
+ }
732
+ //# sourceMappingURL=premium-tools.js.map