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

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 (133) hide show
  1. package/.env.example +30 -0
  2. package/CHANGELOG.md +59 -1
  3. package/README.md +19 -2
  4. package/USER_DOCS/00_START_HERE.md +1 -0
  5. package/USER_DOCS/01_HOSTED_REMOTE_MCP.md +17 -3
  6. package/USER_DOCS/03_PAYMENTS_X402_PAYSH.md +11 -1
  7. package/USER_DOCS/04_CLIENT_CONFIGS.md +4 -3
  8. package/USER_DOCS/05_SKILLS_AND_TOOLS.md +27 -3
  9. package/USER_DOCS/06_DESKTOP_GUI_WIZARD.md +14 -7
  10. package/USER_DOCS/07_SMITHERY_AND_MARKETPLACES.md +163 -0
  11. package/assets/logos/claude.png +0 -0
  12. package/assets/logos/codex.webp +0 -0
  13. package/assets/logos/hermes.png +0 -0
  14. package/assets/logos/openclaw.svg +22 -0
  15. package/config.schema.json +5 -0
  16. package/dist/config/env.d.ts +4 -0
  17. package/dist/config/env.d.ts.map +1 -1
  18. package/dist/config/env.js +3 -0
  19. package/dist/config/env.js.map +1 -1
  20. package/dist/config/mcp-client-injection.js +2 -2
  21. package/dist/config/mcp-client-injection.js.map +1 -1
  22. package/dist/config/paths.d.ts +6 -0
  23. package/dist/config/paths.d.ts.map +1 -1
  24. package/dist/config/paths.js +14 -0
  25. package/dist/config/paths.js.map +1 -1
  26. package/dist/config/wizard.js +3 -3
  27. package/dist/config/wizard.js.map +1 -1
  28. package/dist/core/constants.d.ts +1 -1
  29. package/dist/core/constants.js +1 -1
  30. package/dist/payments/pricing.d.ts +1 -1
  31. package/dist/payments/pricing.d.ts.map +1 -1
  32. package/dist/payments/pricing.js +21 -3
  33. package/dist/payments/pricing.js.map +1 -1
  34. package/dist/payments/x402-paid-call.d.ts +96 -0
  35. package/dist/payments/x402-paid-call.d.ts.map +1 -1
  36. package/dist/payments/x402-paid-call.js +264 -2
  37. package/dist/payments/x402-paid-call.js.map +1 -1
  38. package/dist/policy/local-policy-engine.js +1 -1
  39. package/dist/policy/local-policy-engine.js.map +1 -1
  40. package/dist/prompts/context/sap-agent-context.prompt.js +8 -1
  41. package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -1
  42. package/dist/prompts/context/sap-agent-start.prompt.d.ts +14 -0
  43. package/dist/prompts/context/sap-agent-start.prompt.d.ts.map +1 -0
  44. package/dist/prompts/context/sap-agent-start.prompt.js +96 -0
  45. package/dist/prompts/context/sap-agent-start.prompt.js.map +1 -0
  46. package/dist/prompts/developer/generate-sap-integration.prompt.js +1 -1
  47. package/dist/prompts/developer/generate-sap-integration.prompt.js.map +1 -1
  48. package/dist/prompts/register-prompts.d.ts.map +1 -1
  49. package/dist/prompts/register-prompts.js +3 -1
  50. package/dist/prompts/register-prompts.js.map +1 -1
  51. package/dist/remote/public-home/index.d.ts.map +1 -1
  52. package/dist/remote/public-home/index.js +2 -1
  53. package/dist/remote/public-home/index.js.map +1 -1
  54. package/dist/remote/public-home/scripts.d.ts +1 -1
  55. package/dist/remote/public-home/scripts.d.ts.map +1 -1
  56. package/dist/remote/public-home/scripts.js +29 -0
  57. package/dist/remote/public-home/scripts.js.map +1 -1
  58. package/dist/remote/public-home/sections.d.ts +5 -0
  59. package/dist/remote/public-home/sections.d.ts.map +1 -1
  60. package/dist/remote/public-home/sections.js +76 -4
  61. package/dist/remote/public-home/sections.js.map +1 -1
  62. package/dist/remote/public-home/styles.d.ts +1 -1
  63. package/dist/remote/public-home/styles.d.ts.map +1 -1
  64. package/dist/remote/public-home/styles.js +460 -16
  65. package/dist/remote/public-home/styles.js.map +1 -1
  66. package/dist/remote/public-home/types.d.ts +2 -0
  67. package/dist/remote/public-home/types.d.ts.map +1 -1
  68. package/dist/remote/rate-limiter.d.ts +2 -0
  69. package/dist/remote/rate-limiter.d.ts.map +1 -1
  70. package/dist/remote/rate-limiter.js +23 -0
  71. package/dist/remote/rate-limiter.js.map +1 -1
  72. package/dist/remote/server.d.ts +72 -1
  73. package/dist/remote/server.d.ts.map +1 -1
  74. package/dist/remote/server.js +424 -15
  75. package/dist/remote/server.js.map +1 -1
  76. package/dist/runtime/module-resolution.d.ts.map +1 -1
  77. package/dist/runtime/module-resolution.js +41 -8
  78. package/dist/runtime/module-resolution.js.map +1 -1
  79. package/dist/schemas/settlement.schema.d.ts +2 -2
  80. package/dist/security/tool-permissions.d.ts.map +1 -1
  81. package/dist/security/tool-permissions.js +1 -6
  82. package/dist/security/tool-permissions.js.map +1 -1
  83. package/dist/tools/agent-start-tool.d.ts +12 -0
  84. package/dist/tools/agent-start-tool.d.ts.map +1 -0
  85. package/dist/tools/agent-start-tool.js +156 -0
  86. package/dist/tools/agent-start-tool.js.map +1 -0
  87. package/dist/tools/client-sdk-tools.d.ts +7 -0
  88. package/dist/tools/client-sdk-tools.d.ts.map +1 -1
  89. package/dist/tools/client-sdk-tools.js +80 -4
  90. package/dist/tools/client-sdk-tools.js.map +1 -1
  91. package/dist/tools/index.d.ts +1 -0
  92. package/dist/tools/index.d.ts.map +1 -1
  93. package/dist/tools/index.js +3 -1
  94. package/dist/tools/index.js.map +1 -1
  95. package/dist/tools/register-tools.d.ts.map +1 -1
  96. package/dist/tools/register-tools.js +5 -1
  97. package/dist/tools/register-tools.js.map +1 -1
  98. package/dist/tools/sap-sdk-tools.d.ts +1 -1
  99. package/dist/tools/sap-sdk-tools.d.ts.map +1 -1
  100. package/dist/tools/sap-sdk-tools.js +108 -105
  101. package/dist/tools/sap-sdk-tools.js.map +1 -1
  102. package/dist/tools/sap-sns-tools.d.ts +4 -4
  103. package/dist/tools/sap-sns-tools.js +4 -4
  104. package/dist/tools/skills-tools.js +1 -1
  105. package/dist/tools/skills-tools.js.map +1 -1
  106. package/dist/tools/x402-paid-call-tool.d.ts.map +1 -1
  107. package/dist/tools/x402-paid-call-tool.js +50 -4
  108. package/dist/tools/x402-paid-call-tool.js.map +1 -1
  109. package/dist/tui/config-wizard.js +2 -2
  110. package/dist/tui/config-wizard.js.map +1 -1
  111. package/dist/tui/wizard-save.d.ts.map +1 -1
  112. package/dist/tui/wizard-save.js +7 -3
  113. package/dist/tui/wizard-save.js.map +1 -1
  114. package/dist/wizard-core/desktop-flow.d.ts +1 -1
  115. package/dist/wizard-core/desktop-flow.d.ts.map +1 -1
  116. package/dist/wizard-core/desktop-flow.js +6 -5
  117. package/dist/wizard-core/desktop-flow.js.map +1 -1
  118. package/docs/03_CONFIGURATION_AND_WIZARD.md +1 -0
  119. package/docs/05_REMOTE_VPS_DEPLOYMENT.md +32 -0
  120. package/docs/06_PAYMENTS_X402_AND_PAYSH.md +12 -0
  121. package/docs/07_ENDPOINTS_AND_CLIENTS.md +1 -1
  122. package/docs/09_TOOLS_SKILLS_AND_AGENT_GUIDE.md +42 -11
  123. package/docs/14_DESKTOP_WIZARD_RELEASE.md +2 -1
  124. package/docs/README.md +6 -3
  125. package/docs/_sidebar.md +1 -0
  126. package/package.json +3 -2
  127. package/server.json +3 -3
  128. package/skills/README.md +2 -2
  129. package/skills/sap-escrow-settlement/SKILL.md +15 -11
  130. package/skills/sap-mcp/SKILL.md +39 -20
  131. package/skills/sap-mcp/TOOL_REFERENCE.md +6 -5
  132. package/skills/sap-operations/SKILL.md +6 -7
  133. package/smithery.config.schema.json +59 -0
@@ -1 +1 @@
1
- {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/payments/pricing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGnE;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,cAAc,GAAG,SAAS,GAAG,cAAc,GAAG,OAAO,CAAC;AAEzF;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GACvB;IACE,QAAQ,EAAE,KAAK,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B,GACD;IACE,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AA4HN;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,gBAAgB,EAC/B,MAAM,EAAE,wBAAwB,GAC/B,eAAe,CAqCjB;AASD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,wBAAwB,GAC/B,WAAW,CAyCb;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CA+B1D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD"}
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/payments/pricing.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGnE;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,cAAc,GAAG,SAAS,GAAG,cAAc,GAAG,OAAO,CAAC;AAEzF;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GACvB;IACE,QAAQ,EAAE,KAAK,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,WAAW,EAAE,CAAC;CAC7B,GACD;IACE,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AA8IN;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,gBAAgB,EAC/B,MAAM,EAAE,wBAAwB,GAC/B,eAAe,CAqCjB;AASD;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,wBAAwB,GAC/B,WAAW,CAyCb;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,aAAa,CAAC,GAAG,WAAW,CAgClH;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD"}
@@ -15,6 +15,7 @@ const FREE_MCP_METHODS = new Set([
15
15
  'resources/read',
16
16
  ]);
17
17
  const FREE_TOOLS = new Set([
18
+ 'sap_agent_start',
18
19
  'sol_get_balance',
19
20
  'spl-token_getBalance',
20
21
  'spl-token_getTokenAccounts',
@@ -29,6 +30,22 @@ const FREE_TOOLS = new Set([
29
30
  'sap_skills_install',
30
31
  'sap_get_network_overview',
31
32
  'sap_payments_profile_current',
33
+ 'sap_payments_readiness',
34
+ 'sap_payments_prepare_challenge',
35
+ 'sap_payments_sign_challenge',
36
+ 'sap_payments_call_paid_tool',
37
+ 'sap_payments_verify_receipt',
38
+ ]);
39
+ const STRICT_FREE_TOOLS = new Set([
40
+ 'sap_agent_start',
41
+ 'sap_profile_current',
42
+ 'sap_profile_list',
43
+ 'sap_profile_public_key',
44
+ 'sap_skills_list',
45
+ 'sap_skills_bundle',
46
+ 'sap_skills_install',
47
+ 'sap_payments_profile_current',
48
+ 'sap_payments_readiness',
32
49
  'sap_payments_prepare_challenge',
33
50
  'sap_payments_sign_challenge',
34
51
  'sap_payments_call_paid_tool',
@@ -163,7 +180,7 @@ function toPaidTier(tier) {
163
180
  * @description Classifies and prices a single MCP tool invocation.
164
181
  */
165
182
  export function priceToolCall(toolCall, config) {
166
- const tier = classifyTool(toolCall.toolName);
183
+ const tier = classifyTool(toolCall.toolName, config);
167
184
  if (tier === 'free') {
168
185
  return {
169
186
  toolName: toolCall.toolName,
@@ -203,8 +220,9 @@ export function priceToolCall(toolCall, config) {
203
220
  * @name classifyTool
204
221
  * @description Maps a tool name to the default hosted monetization tier.
205
222
  */
206
- export function classifyTool(toolName) {
207
- if (FREE_TOOLS.has(toolName)) {
223
+ export function classifyTool(toolName, config) {
224
+ const freeTools = config?.strictTools ? STRICT_FREE_TOOLS : FREE_TOOLS;
225
+ if (freeTools.has(toolName)) {
208
226
  return 'free';
209
227
  }
210
228
  if (READ_PREMIUM_TOOLS.has(toolName)) {
@@ -1 +1 @@
1
- {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/payments/pricing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/payments/pricing.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@
4
4
  * @description Local helper for paying and retrying hosted SAP MCP x402 tool calls with a user-controlled SAP profile signer.
5
5
  */
6
6
  import type { PaymentPayload, PaymentRequired, PaymentRequirements, SettleResponse } from '@x402/core/types';
7
+ import { type SapMcpConfig } from '../config/env.js';
7
8
  export declare const DEFAULT_X402_PAID_CALL_ENDPOINT = "https://mcp.sap.oobeprotocol.ai/mcp";
8
9
  /**
9
10
  * @name X402PaidCallInput
@@ -87,6 +88,67 @@ export interface X402ReceiptInspectionResult {
87
88
  network?: string;
88
89
  warning?: string;
89
90
  }
91
+ /**
92
+ * @name AgentCommercePolicySnapshot
93
+ * @description Redacted local policy limits used by agents before paying or moving value.
94
+ */
95
+ export interface AgentCommercePolicySnapshot {
96
+ autoPayX402BelowUsd: number;
97
+ dailyX402LimitUsd?: number;
98
+ maxTradeUsd?: number;
99
+ maxSlippageBps: number;
100
+ requireConfirmationAboveUsd: number;
101
+ allowedProtocols: readonly string[];
102
+ maxAttempts: number;
103
+ }
104
+ /**
105
+ * @name X402PaymentReadinessResult
106
+ * @description Full local readiness snapshot for hosted paid/write SAP MCP workflows.
107
+ */
108
+ export interface X402PaymentReadinessResult {
109
+ hostedMcp: {
110
+ endpoint: string;
111
+ accountModel: 'hosted-remote-accountless';
112
+ toolNamespace: 'sap';
113
+ };
114
+ localBridge: {
115
+ status: 'connected';
116
+ toolNamespace: 'sap_payments';
117
+ preferredTool: 'sap_payments_call_paid_tool';
118
+ readinessTool: 'sap_payments_readiness';
119
+ };
120
+ profile: {
121
+ activeProfile: string;
122
+ configPath: string;
123
+ mode: SapMcpConfig['mode'];
124
+ network: string;
125
+ rpcUrl: string;
126
+ programId: string;
127
+ walletPathConfigured: boolean;
128
+ walletFileExists: boolean;
129
+ signerConfigured: boolean;
130
+ signerPublicKey?: string;
131
+ agentPubkey?: string;
132
+ secretMaterial: 'keypair-bytes-never-returned';
133
+ };
134
+ balances: {
135
+ checked: boolean;
136
+ sol?: number;
137
+ usdc?: number;
138
+ usdcMint: string;
139
+ payerBalanceEnoughForAutoPay?: boolean;
140
+ error?: string;
141
+ };
142
+ policy: AgentCommercePolicySnapshot;
143
+ readiness: {
144
+ status: 'ready' | 'degraded' | 'not-ready';
145
+ canPayX402: boolean;
146
+ canExecuteWriteTools: boolean;
147
+ issues: readonly string[];
148
+ nextAction: string;
149
+ };
150
+ agentInstruction: string;
151
+ }
90
152
  /**
91
153
  * @name X402PaidCallResult
92
154
  * @description Result returned after a hosted MCP paid request is completed.
@@ -106,6 +168,35 @@ export interface X402PaidCallResult {
106
168
  response: unknown;
107
169
  attempts: number;
108
170
  transientRetries: readonly string[];
171
+ audit: X402PaidCallAudit;
172
+ }
173
+ /**
174
+ * @name X402PaidCallAudit
175
+ * @description Agent-readable proof object for one hosted paid MCP execution.
176
+ */
177
+ export interface X402PaidCallAudit {
178
+ intentId: string;
179
+ profileName: string;
180
+ signerAddress: string;
181
+ endpoint: string;
182
+ toolName?: string;
183
+ requestMethod: string;
184
+ payment: {
185
+ amountUsd: number;
186
+ network: string;
187
+ asset: string;
188
+ payTo: string;
189
+ };
190
+ receipt: {
191
+ present: boolean;
192
+ transaction?: string;
193
+ network?: string;
194
+ amount?: string;
195
+ payer?: string;
196
+ };
197
+ attempts: number;
198
+ transientRetries: readonly string[];
199
+ secretMaterial: 'keypair-bytes-never-returned';
109
200
  }
110
201
  interface JsonRpcRequest {
111
202
  jsonrpc: '2.0';
@@ -118,6 +209,11 @@ interface JsonRpcRequest {
118
209
  * @description Initializes MCP, obtains x402 payment requirements, signs locally, retries the call, and returns the settlement receipt.
119
210
  */
120
211
  export declare function executeX402PaidCall(input: X402PaidCallInput): Promise<X402PaidCallResult>;
212
+ /**
213
+ * @name getX402PaymentReadiness
214
+ * @description Checks local profile, signer, RPC, balances, and commerce policy for hosted paid/write workflows.
215
+ */
216
+ export declare function getX402PaymentReadiness(profileName?: string, endpoint?: string): Promise<X402PaymentReadinessResult>;
121
217
  /**
122
218
  * @name probeX402PaymentChallenge
123
219
  * @description Initializes hosted MCP and returns a parsed x402 challenge for one unpaid tool call without signing.
@@ -1 +1 @@
1
- {"version":3,"file":"x402-paid-call.d.ts","sourceRoot":"","sources":["../../src/payments/x402-paid-call.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"x402-paid-call.d.ts","sourceRoot":"","sources":["../../src/payments/x402-paid-call.ts"],"names":[],"mappings":"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"}
@@ -3,18 +3,22 @@
3
3
  * @name X402PaidCallHelper
4
4
  * @description Local helper for paying and retrying hosted SAP MCP x402 tool calls with a user-controlled SAP profile signer.
5
5
  */
6
- import { readFileSync } from 'fs';
6
+ import { existsSync, readFileSync } from 'fs';
7
+ import { createHash } from 'crypto';
7
8
  import { x402Client, x402HTTPClient } from '@x402/core/client';
8
9
  import { registerExactSvmScheme } from '@x402/svm/exact/client';
9
10
  import { createKeyPairSignerFromBytes } from '@solana/kit';
11
+ import { Connection, PublicKey } from '@solana/web3.js';
10
12
  import { loadConfig } from '../config/env.js';
11
- import { getProfileConfigPath } from '../config/profiles.js';
13
+ import { getActiveProfile, getProfileConfigPath } from '../config/profiles.js';
12
14
  import { MCP_SERVER_VERSION } from '../core/constants.js';
13
15
  export const DEFAULT_X402_PAID_CALL_ENDPOINT = 'https://mcp.sap.oobeprotocol.ai/mcp';
14
16
  const MCP_PROTOCOL_VERSION = '2025-06-18';
15
17
  const DEFAULT_MAX_ATTEMPTS = 3;
16
18
  const MAX_ALLOWED_ATTEMPTS = 5;
17
19
  const RETRY_BASE_DELAY_MS = 500;
20
+ const MAINNET_USDC_MINT = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v';
21
+ const DEVNET_USDC_MINT = '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU';
18
22
  /**
19
23
  * @name executeX402PaidCall
20
24
  * @description Initializes MCP, obtains x402 payment requirements, signs locally, retries the call, and returns the settlement receipt.
@@ -22,6 +26,7 @@ const RETRY_BASE_DELAY_MS = 500;
22
26
  export async function executeX402PaidCall(input) {
23
27
  validateInput(input);
24
28
  const endpoint = input.endpoint ?? DEFAULT_X402_PAID_CALL_ENDPOINT;
29
+ const profileName = input.profileName ?? getActiveProfile();
25
30
  const config = loadPaymentProfile(input.profileName);
26
31
  const signer = await loadClientSigner(config);
27
32
  const httpClient = createHttpPaymentClient(signer);
@@ -37,6 +42,7 @@ export async function executeX402PaidCall(input) {
37
42
  signerAddress: String(signer.address),
38
43
  httpClient,
39
44
  requestBody,
45
+ profileName,
40
46
  maxPriceUsd: input.maxPriceUsd,
41
47
  attempt,
42
48
  transientRetries,
@@ -53,6 +59,89 @@ export async function executeX402PaidCall(input) {
53
59
  }
54
60
  throw new Error('x402 paid call exhausted retries.');
55
61
  }
62
+ /**
63
+ * @name getX402PaymentReadiness
64
+ * @description Checks local profile, signer, RPC, balances, and commerce policy for hosted paid/write workflows.
65
+ */
66
+ export async function getX402PaymentReadiness(profileName, endpoint = DEFAULT_X402_PAID_CALL_ENDPOINT) {
67
+ const activeProfile = profileName ?? getActiveProfile();
68
+ const configPath = getProfileConfigPath(activeProfile);
69
+ let config;
70
+ let signerAddress;
71
+ const issues = [];
72
+ try {
73
+ config = loadPaymentProfile(profileName);
74
+ }
75
+ catch (error) {
76
+ const message = error instanceof Error ? error.message : String(error);
77
+ issues.push(`profile_load_failed: ${message}`);
78
+ }
79
+ if (config) {
80
+ try {
81
+ const signer = await loadClientSigner(config);
82
+ signerAddress = String(signer.address);
83
+ }
84
+ catch (error) {
85
+ const message = error instanceof Error ? error.message : String(error);
86
+ issues.push(`signer_unavailable: ${message}`);
87
+ }
88
+ }
89
+ const policy = readAgentCommercePolicy();
90
+ const network = networkFromRpcUrl(config?.rpcUrl);
91
+ const usdcMint = usdcMintForNetwork(network);
92
+ const balances = await readBalanceSnapshot(config?.rpcUrl, signerAddress, usdcMint, policy.autoPayX402BelowUsd);
93
+ if (balances.error) {
94
+ issues.push(`balance_check_degraded: ${balances.error}`);
95
+ }
96
+ const walletFileExists = Boolean(config?.walletPath && existsSync(config.walletPath));
97
+ if (config?.walletPath && !walletFileExists) {
98
+ issues.push('wallet_file_missing');
99
+ }
100
+ const canPayX402 = Boolean(signerAddress && balances.payerBalanceEnoughForAutoPay !== false);
101
+ const canExecuteWriteTools = Boolean(signerAddress && config?.mode !== 'readonly');
102
+ const status = !config || !signerAddress || !walletFileExists
103
+ ? 'not-ready'
104
+ : issues.length > 0
105
+ ? 'degraded'
106
+ : 'ready';
107
+ return {
108
+ hostedMcp: {
109
+ endpoint,
110
+ accountModel: 'hosted-remote-accountless',
111
+ toolNamespace: 'sap',
112
+ },
113
+ localBridge: {
114
+ status: 'connected',
115
+ toolNamespace: 'sap_payments',
116
+ preferredTool: 'sap_payments_call_paid_tool',
117
+ readinessTool: 'sap_payments_readiness',
118
+ },
119
+ profile: {
120
+ activeProfile,
121
+ configPath,
122
+ mode: config?.mode ?? 'readonly',
123
+ network,
124
+ rpcUrl: redactUrl(config?.rpcUrl),
125
+ programId: config?.programId ?? '',
126
+ walletPathConfigured: Boolean(config?.walletPath),
127
+ walletFileExists,
128
+ signerConfigured: Boolean(signerAddress),
129
+ ...(signerAddress ? { signerPublicKey: signerAddress } : {}),
130
+ ...(config?.agentPubkey ? { agentPubkey: config.agentPubkey } : {}),
131
+ secretMaterial: 'keypair-bytes-never-returned',
132
+ },
133
+ balances,
134
+ policy,
135
+ readiness: {
136
+ status,
137
+ canPayX402,
138
+ canExecuteWriteTools,
139
+ issues,
140
+ nextAction: readinessNextAction(status, issues, canPayX402),
141
+ },
142
+ agentInstruction: 'Call sap_payments_readiness first for hosted paid/write workflows. If status is ready or degraded with canPayX402=true, use sap_payments_call_paid_tool for paid hosted tools. Do not infer local wallet state from hosted sap_profile_current.',
143
+ };
144
+ }
56
145
  /**
57
146
  * @name probeX402PaymentChallenge
58
147
  * @description Initializes hosted MCP and returns a parsed x402 challenge for one unpaid tool call without signing.
@@ -156,6 +245,31 @@ async function executePaidAttempt(options) {
156
245
  if (isJsonRpcError(paid.body)) {
157
246
  throw new Error(`Paid MCP call returned JSON-RPC error: ${JSON.stringify(paid.body.error)}`);
158
247
  }
248
+ const toolName = extractToolName(options.requestBody);
249
+ const audit = {
250
+ intentId: buildIntentId(options.requestBody, options.sessionId),
251
+ profileName: options.profileName,
252
+ signerAddress: options.signerAddress,
253
+ endpoint: options.endpoint,
254
+ ...(toolName ? { toolName } : {}),
255
+ requestMethod: options.requestBody.method,
256
+ payment: {
257
+ amountUsd,
258
+ network: selectedRequirements.network,
259
+ asset: selectedRequirements.asset,
260
+ payTo: selectedRequirements.payTo,
261
+ },
262
+ receipt: {
263
+ present: Boolean(paymentResult.settleResponse),
264
+ ...(paymentResult.settleResponse?.transaction ? { transaction: paymentResult.settleResponse.transaction } : {}),
265
+ ...(paymentResult.settleResponse?.network ? { network: paymentResult.settleResponse.network } : {}),
266
+ ...(paymentResult.settleResponse?.amount ? { amount: paymentResult.settleResponse.amount } : {}),
267
+ ...(paymentResult.settleResponse?.payer ? { payer: paymentResult.settleResponse.payer } : {}),
268
+ },
269
+ attempts: options.attempt,
270
+ transientRetries: options.transientRetries,
271
+ secretMaterial: 'keypair-bytes-never-returned',
272
+ };
159
273
  return {
160
274
  success: true,
161
275
  endpoint: options.endpoint,
@@ -171,6 +285,7 @@ async function executePaidAttempt(options) {
171
285
  response: paid.body,
172
286
  attempts: options.attempt,
173
287
  transientRetries: options.transientRetries,
288
+ audit,
174
289
  };
175
290
  }
176
291
  function validateInput(input) {
@@ -394,6 +509,153 @@ function sleep(ms) {
394
509
  function isJsonRpcError(value) {
395
510
  return value !== null && typeof value === 'object' && 'error' in value;
396
511
  }
512
+ function networkFromRpcUrl(value) {
513
+ if (!value) {
514
+ return 'mainnet-beta';
515
+ }
516
+ if (value.includes('mainnet')) {
517
+ return 'mainnet-beta';
518
+ }
519
+ if (value.includes('testnet')) {
520
+ return 'testnet';
521
+ }
522
+ if (value.includes('localhost') || value.includes('127.0.0.1') || value.includes('localnet')) {
523
+ return 'localnet';
524
+ }
525
+ return 'devnet';
526
+ }
527
+ function usdcMintForNetwork(network) {
528
+ return network === 'devnet' ? DEVNET_USDC_MINT : MAINNET_USDC_MINT;
529
+ }
530
+ function redactUrl(value) {
531
+ if (!value) {
532
+ return '';
533
+ }
534
+ try {
535
+ const url = new URL(value);
536
+ if (url.search) {
537
+ url.search = '?redacted=true';
538
+ }
539
+ return url.toString();
540
+ }
541
+ catch {
542
+ return value.includes('?') ? `${value.split('?')[0]}?redacted=true` : value;
543
+ }
544
+ }
545
+ async function readBalanceSnapshot(rpcUrl, signerAddress, usdcMint, autoPayX402BelowUsd) {
546
+ if (!rpcUrl || !signerAddress) {
547
+ return {
548
+ checked: false,
549
+ usdcMint,
550
+ error: 'missing_rpc_or_signer',
551
+ };
552
+ }
553
+ try {
554
+ const connection = new Connection(rpcUrl, 'confirmed');
555
+ const owner = new PublicKey(signerAddress);
556
+ const mint = new PublicKey(usdcMint);
557
+ const [lamports, tokenAccounts] = await Promise.all([
558
+ connection.getBalance(owner, 'confirmed'),
559
+ connection.getParsedTokenAccountsByOwner(owner, { mint }, 'confirmed'),
560
+ ]);
561
+ const usdc = tokenAccounts.value.reduce((total, account) => {
562
+ const parsed = account.account.data.parsed;
563
+ if (!isRecord(parsed) || !isRecord(parsed.info) || !isRecord(parsed.info.tokenAmount)) {
564
+ return total;
565
+ }
566
+ const amount = parsed.info.tokenAmount.uiAmount;
567
+ return total + (typeof amount === 'number' && Number.isFinite(amount) ? amount : 0);
568
+ }, 0);
569
+ return {
570
+ checked: true,
571
+ sol: lamports / 1_000_000_000,
572
+ usdc,
573
+ usdcMint,
574
+ payerBalanceEnoughForAutoPay: usdc >= autoPayX402BelowUsd,
575
+ };
576
+ }
577
+ catch (error) {
578
+ return {
579
+ checked: false,
580
+ usdcMint,
581
+ error: error instanceof Error ? error.message : String(error),
582
+ };
583
+ }
584
+ }
585
+ function readAgentCommercePolicy() {
586
+ return {
587
+ autoPayX402BelowUsd: readPositiveNumberEnv('SAP_MCP_X402_AUTO_PAY_MAX_USD', 0.02),
588
+ dailyX402LimitUsd: readOptionalPositiveNumberEnv('SAP_MCP_X402_DAILY_LIMIT_USD'),
589
+ maxTradeUsd: readOptionalPositiveNumberEnv('SAP_MCP_MAX_TRADE_USD') ?? 10,
590
+ maxSlippageBps: readPositiveNumberEnv('SAP_MCP_MAX_SLIPPAGE_BPS', 100),
591
+ requireConfirmationAboveUsd: readPositiveNumberEnv('SAP_MCP_REQUIRE_CONFIRMATION_ABOVE_USD', 1),
592
+ allowedProtocols: readListEnv('SAP_MCP_ALLOWED_PROTOCOLS', ['jupiter', 'sns', 'sap', 'metaplex']),
593
+ maxAttempts: readIntegerEnv('SAP_MCP_X402_MAX_ATTEMPTS', DEFAULT_MAX_ATTEMPTS, 1, MAX_ALLOWED_ATTEMPTS),
594
+ };
595
+ }
596
+ function readPositiveNumberEnv(name, fallback) {
597
+ const value = process.env[name];
598
+ if (!value) {
599
+ return fallback;
600
+ }
601
+ const parsed = Number(value);
602
+ return Number.isFinite(parsed) && parsed >= 0 ? parsed : fallback;
603
+ }
604
+ function readOptionalPositiveNumberEnv(name) {
605
+ const value = process.env[name];
606
+ if (!value) {
607
+ return undefined;
608
+ }
609
+ const parsed = Number(value);
610
+ return Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined;
611
+ }
612
+ function readIntegerEnv(name, fallback, min, max) {
613
+ const value = process.env[name];
614
+ if (!value) {
615
+ return fallback;
616
+ }
617
+ const parsed = Number(value);
618
+ return Number.isInteger(parsed) && parsed >= min && parsed <= max ? parsed : fallback;
619
+ }
620
+ function readListEnv(name, fallback) {
621
+ const value = process.env[name];
622
+ if (!value) {
623
+ return fallback;
624
+ }
625
+ const parsed = value.split(',').map(item => item.trim()).filter(Boolean);
626
+ return parsed.length > 0 ? parsed : fallback;
627
+ }
628
+ function readinessNextAction(status, issues, canPayX402) {
629
+ if (status === 'ready') {
630
+ return 'Use sap_payments_call_paid_tool for hosted paid/write SAP MCP calls.';
631
+ }
632
+ if (canPayX402) {
633
+ return 'Proceed with paid calls if the user accepts degraded readiness; retry transient RPC errors with fresh challenges.';
634
+ }
635
+ if (issues.some(issue => issue.includes('wallet_file_missing'))) {
636
+ return 'Run the SAP MCP wizard repair or update the active profile walletPath to an existing dedicated keypair.';
637
+ }
638
+ if (issues.some(issue => issue.includes('signer_unavailable'))) {
639
+ return 'Run the SAP MCP wizard full setup or repair the local signer before paid/write calls.';
640
+ }
641
+ return 'Run the SAP MCP wizard repair flow, restart the agent runtime, then call sap_payments_readiness again.';
642
+ }
643
+ function extractToolName(requestBody) {
644
+ if (requestBody.method !== 'tools/call' || !isRecord(requestBody.params)) {
645
+ return undefined;
646
+ }
647
+ const name = requestBody.params.name;
648
+ return typeof name === 'string' ? name : undefined;
649
+ }
650
+ function buildIntentId(requestBody, sessionId) {
651
+ const source = JSON.stringify({
652
+ method: requestBody.method,
653
+ params: requestBody.params ?? null,
654
+ sessionId,
655
+ at: Date.now(),
656
+ });
657
+ return `sap-intent-${createHash('sha256').update(source).digest('hex').slice(0, 16)}`;
658
+ }
397
659
  function parseCliArgs(argv) {
398
660
  const parsed = { confirm: false };
399
661
  for (let index = 0; index < argv.length; index += 1) {