@oobe-protocol-labs/sap-mcp-server 0.7.4 → 0.8.0
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.
- package/CHANGELOG.md +123 -0
- package/README.md +14 -7
- package/USER_DOCS/00_START_HERE.md +45 -7
- package/USER_DOCS/01_HOSTED_REMOTE_MCP.md +2 -0
- package/USER_DOCS/03_PAYMENTS_X402_PAYSH.md +13 -5
- package/USER_DOCS/04_CLIENT_CONFIGS.md +25 -15
- package/USER_DOCS/06_DESKTOP_GUI_WIZARD.md +36 -21
- package/assets/logos/drift.svg +12 -0
- package/assets/logos/jupiter.ico +0 -0
- package/assets/logos/mcp.svg +11 -0
- package/assets/logos/meteora.png +0 -0
- package/assets/logos/orca.ico +0 -0
- package/assets/logos/raydium.ico +0 -0
- package/assets/logos/smithery.svg +11 -0
- package/assets/oobe-logo.png +0 -0
- package/dist/config/mcp-client-injection.d.ts +26 -7
- package/dist/config/mcp-client-injection.d.ts.map +1 -1
- package/dist/config/mcp-client-injection.js +182 -58
- package/dist/config/mcp-client-injection.js.map +1 -1
- package/dist/config/wizard.d.ts.map +1 -1
- package/dist/config/wizard.js +92 -57
- package/dist/config/wizard.js.map +1 -1
- package/dist/core/constants.d.ts +1 -1
- package/dist/core/constants.js +1 -1
- package/dist/payments/pricing.d.ts.map +1 -1
- package/dist/payments/pricing.js +11 -0
- package/dist/payments/pricing.js.map +1 -1
- package/dist/payments/x402-paid-call.d.ts +85 -1
- package/dist/payments/x402-paid-call.d.ts.map +1 -1
- package/dist/payments/x402-paid-call.js +168 -4
- package/dist/payments/x402-paid-call.js.map +1 -1
- package/dist/prompts/context/sap-agent-context.prompt.js +6 -3
- package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -1
- package/dist/remote/public-home/escape.d.ts +11 -0
- package/dist/remote/public-home/escape.d.ts.map +1 -0
- package/dist/remote/public-home/escape.js +20 -0
- package/dist/remote/public-home/escape.js.map +1 -0
- package/dist/remote/public-home/index.d.ts +8 -0
- package/dist/remote/public-home/index.d.ts.map +1 -0
- package/dist/remote/public-home/index.js +57 -0
- package/dist/remote/public-home/index.js.map +1 -0
- package/dist/remote/public-home/scripts.d.ts +6 -0
- package/dist/remote/public-home/scripts.d.ts.map +1 -0
- package/dist/remote/public-home/scripts.js +106 -0
- package/dist/remote/public-home/scripts.js.map +1 -0
- package/dist/remote/public-home/sections.d.ts +67 -0
- package/dist/remote/public-home/sections.d.ts.map +1 -0
- package/dist/remote/public-home/sections.js +727 -0
- package/dist/remote/public-home/sections.js.map +1 -0
- package/dist/remote/public-home/styles.d.ts +6 -0
- package/dist/remote/public-home/styles.d.ts.map +1 -0
- package/dist/remote/public-home/styles.js +1534 -0
- package/dist/remote/public-home/styles.js.map +1 -0
- package/dist/remote/public-home/types.d.ts +95 -0
- package/dist/remote/public-home/types.d.ts.map +1 -0
- package/dist/remote/public-home/types.js +2 -0
- package/dist/remote/public-home/types.js.map +1 -0
- package/dist/remote/server.d.ts +1 -1
- package/dist/remote/server.d.ts.map +1 -1
- package/dist/remote/server.js +55 -282
- package/dist/remote/server.js.map +1 -1
- package/dist/security/tool-permissions.d.ts.map +1 -1
- package/dist/security/tool-permissions.js +5 -0
- package/dist/security/tool-permissions.js.map +1 -1
- package/dist/tools/magicblock-tools.js +6 -6
- package/dist/tools/magicblock-tools.js.map +1 -1
- package/dist/tools/profile-tools.d.ts.map +1 -1
- package/dist/tools/profile-tools.js +136 -33
- package/dist/tools/profile-tools.js.map +1 -1
- package/dist/tools/register-tools.d.ts.map +1 -1
- package/dist/tools/register-tools.js +5 -0
- package/dist/tools/register-tools.js.map +1 -1
- package/dist/tools/x402-paid-call-tool.d.ts +1 -1
- package/dist/tools/x402-paid-call-tool.d.ts.map +1 -1
- package/dist/tools/x402-paid-call-tool.js +314 -28
- package/dist/tools/x402-paid-call-tool.js.map +1 -1
- package/dist/wizard-core/desktop-flow.d.ts +40 -1
- package/dist/wizard-core/desktop-flow.d.ts.map +1 -1
- package/dist/wizard-core/desktop-flow.js +206 -15
- package/dist/wizard-core/desktop-flow.js.map +1 -1
- package/docs/03_CONFIGURATION_AND_WIZARD.md +6 -2
- package/docs/06_PAYMENTS_X402_AND_PAYSH.md +29 -7
- package/docs/07_ENDPOINTS_AND_CLIENTS.md +1 -1
- package/docs/14_DESKTOP_WIZARD_RELEASE.md +24 -5
- package/docs/15_DASHBOARD_SCREENSHARE_SCRIPT.md +137 -0
- package/docs/README.md +23 -2
- package/package.json +1 -1
- package/server.json +3 -3
- package/skills/sap-mcp/SKILL.md +23 -7
- package/skills/sap-payments-x402/SKILL.md +37 -13
|
@@ -4,53 +4,295 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { registerTool } from '../adapters/mcp/sdk-compat.js';
|
|
6
6
|
import { createTextResponse } from '../adapters/mcp/tool-response.js';
|
|
7
|
-
import {
|
|
7
|
+
import { getActiveProfile, getProfileConfigPath } from '../config/profiles.js';
|
|
8
|
+
import { executeX402PaidCall, inspectX402Receipt, probeX402PaymentChallenge, signX402PaymentChallenge, } from '../payments/x402-paid-call.js';
|
|
9
|
+
const paidCallInputSchema = {
|
|
10
|
+
endpoint: {
|
|
11
|
+
type: 'string',
|
|
12
|
+
description: 'Hosted MCP endpoint. Defaults to https://mcp.sap.oobeprotocol.ai/mcp.',
|
|
13
|
+
},
|
|
14
|
+
toolName: {
|
|
15
|
+
type: 'string',
|
|
16
|
+
description: 'Remote hosted SAP MCP tool name to call, for example sap_list_all_agents.',
|
|
17
|
+
},
|
|
18
|
+
arguments: {
|
|
19
|
+
type: 'object',
|
|
20
|
+
description: 'Arguments for the remote tools/call request.',
|
|
21
|
+
},
|
|
22
|
+
body: {
|
|
23
|
+
type: 'object',
|
|
24
|
+
description: 'Optional full JSON-RPC request body. Use this instead of toolName when the caller already has a complete request.',
|
|
25
|
+
},
|
|
26
|
+
profileName: {
|
|
27
|
+
type: 'string',
|
|
28
|
+
description: 'SAP MCP profile used to sign the x402 payment. Defaults to the active profile.',
|
|
29
|
+
},
|
|
30
|
+
maxPriceUsd: {
|
|
31
|
+
type: 'number',
|
|
32
|
+
description: 'Maximum accepted x402 payment amount in USD. The call aborts if the challenge exceeds this cap.',
|
|
33
|
+
},
|
|
34
|
+
maxAttempts: {
|
|
35
|
+
type: 'number',
|
|
36
|
+
description: 'Optional retry count for transient x402/RPC failures such as BlockhashNotFound. Defaults to 3; max 5.',
|
|
37
|
+
},
|
|
38
|
+
confirm: {
|
|
39
|
+
type: 'boolean',
|
|
40
|
+
description: 'Must be true. Confirms the user allows this helper to sign an x402 payment payload.',
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
const paidCallOutputSchema = {
|
|
44
|
+
type: 'object',
|
|
45
|
+
properties: {
|
|
46
|
+
success: { type: 'boolean', description: 'Whether the hosted paid MCP call completed successfully.' },
|
|
47
|
+
endpoint: { type: 'string', description: 'Hosted MCP endpoint used for the paid call.' },
|
|
48
|
+
sessionId: { type: 'string', description: 'MCP session id used for the unpaid challenge and paid retry.' },
|
|
49
|
+
signerAddress: { type: 'string', description: 'Public address of the local SAP MCP signer. Secret bytes are never returned.' },
|
|
50
|
+
payment: { type: 'object', description: 'Selected payment requirements, including amountUsd, network, asset, and payTo.' },
|
|
51
|
+
settlement: { type: 'object', description: 'x402 settlement response returned by the facilitator when available.' },
|
|
52
|
+
response: { type: 'object', description: 'Remote MCP JSON-RPC response after successful paid retry.' },
|
|
53
|
+
attempts: { type: 'number', description: 'Number of paid-call attempts used.' },
|
|
54
|
+
transientRetries: { type: 'array', items: { type: 'string' }, description: 'Retryable errors encountered before success.' },
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
function redactUrl(value) {
|
|
58
|
+
if (!value) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const url = new URL(value);
|
|
63
|
+
if (url.search) {
|
|
64
|
+
url.search = '?redacted=true';
|
|
65
|
+
}
|
|
66
|
+
return url.toString();
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return value.includes('?') ? `${value.split('?')[0]}?redacted=true` : value;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function networkFromRpcUrl(value) {
|
|
73
|
+
if (!value) {
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
if (value.includes('mainnet')) {
|
|
77
|
+
return 'mainnet-beta';
|
|
78
|
+
}
|
|
79
|
+
if (value.includes('testnet')) {
|
|
80
|
+
return 'testnet';
|
|
81
|
+
}
|
|
82
|
+
if (value.includes('localhost') || value.includes('127.0.0.1') || value.includes('localnet')) {
|
|
83
|
+
return 'localnet';
|
|
84
|
+
}
|
|
85
|
+
return 'devnet';
|
|
86
|
+
}
|
|
8
87
|
/**
|
|
9
88
|
* @name registerX402PaidCallTool
|
|
10
|
-
* @description Registers
|
|
89
|
+
* @description Registers local hosted-payment tools for agents that need to resolve x402-gated SAP MCP calls.
|
|
11
90
|
*/
|
|
12
91
|
export function registerX402PaidCallTool(server, _context) {
|
|
13
|
-
|
|
92
|
+
registerPaymentsProfileCurrentTool(server, _context);
|
|
93
|
+
registerPaymentsCallPaidTool(server, 'sap_payments_call_paid_tool');
|
|
94
|
+
registerPaymentsPrepareChallengeTool(server);
|
|
95
|
+
registerPaymentsSignChallengeTool(server);
|
|
96
|
+
registerPaymentsVerifyReceiptTool(server);
|
|
97
|
+
// Backward-compatible alias used by existing Codex/Hermes/Claude client snippets.
|
|
98
|
+
registerPaymentsCallPaidTool(server, 'sap_x402_paid_call');
|
|
99
|
+
}
|
|
100
|
+
function registerPaymentsProfileCurrentTool(server, context) {
|
|
101
|
+
registerTool(server, 'sap_payments_profile_current', {
|
|
102
|
+
title: 'Show Local SAP Payments Profile',
|
|
103
|
+
description: 'Return the local SAP MCP profile used by the sap_payments bridge for hosted x402 paid/write calls. Use this instead of the remote sap_profile_current when checking the caller wallet, signer, active profile, and local payment readiness. Never returns keypair bytes.',
|
|
104
|
+
inputSchema: {},
|
|
105
|
+
outputSchema: {
|
|
106
|
+
type: 'object',
|
|
107
|
+
properties: {
|
|
108
|
+
serverRole: { type: 'string', description: 'Role of this local MCP server.' },
|
|
109
|
+
activeProfile: { type: 'string', description: 'Profile selected by ~/.config/mcp-sap/.active-profile.' },
|
|
110
|
+
configPath: { type: 'string', description: 'Local profile config path used by the bridge.' },
|
|
111
|
+
mode: { type: 'string', description: 'SAP MCP mode from the local profile.' },
|
|
112
|
+
network: { type: 'string', description: 'Derived Solana network for the local profile RPC.' },
|
|
113
|
+
rpcUrl: { type: 'string', description: 'Redacted RPC URL used by the local profile.' },
|
|
114
|
+
programId: { type: 'string', description: 'SAP program id configured by the local profile.' },
|
|
115
|
+
walletPath: { type: 'string', description: 'Configured local wallet path. File contents are never returned.' },
|
|
116
|
+
walletPathConfigured: { type: 'boolean', description: 'Whether a wallet path is configured.' },
|
|
117
|
+
signerConfigured: { type: 'boolean', description: 'Whether the local bridge resolved a signer.' },
|
|
118
|
+
signerPublicKey: { type: 'string', description: 'Public key of the local signer when available.' },
|
|
119
|
+
secretMaterial: { type: 'string', description: 'Secret handling guarantee.' },
|
|
120
|
+
recommendedPaidTool: { type: 'string', description: 'Tool agents should call for hosted paid/write calls.' },
|
|
121
|
+
},
|
|
122
|
+
required: ['serverRole', 'activeProfile', 'configPath', 'mode', 'walletPathConfigured', 'signerConfigured', 'secretMaterial', 'recommendedPaidTool'],
|
|
123
|
+
},
|
|
124
|
+
annotations: {
|
|
125
|
+
readOnlyHint: true,
|
|
126
|
+
destructiveHint: false,
|
|
127
|
+
idempotentHint: true,
|
|
128
|
+
openWorldHint: false,
|
|
129
|
+
},
|
|
130
|
+
}, async () => createTextResponse(JSON.stringify({
|
|
131
|
+
serverRole: 'local-sap-payments-bridge',
|
|
132
|
+
activeProfile: getActiveProfile(),
|
|
133
|
+
configPath: getProfileConfigPath(getActiveProfile()),
|
|
134
|
+
mode: context.config.mode,
|
|
135
|
+
network: networkFromRpcUrl(context.config.rpcUrl),
|
|
136
|
+
rpcUrl: redactUrl(context.config.rpcUrl),
|
|
137
|
+
programId: context.config.programId,
|
|
138
|
+
agentPubkey: context.config.agentPubkey,
|
|
139
|
+
walletPath: context.config.walletPath,
|
|
140
|
+
walletPathConfigured: Boolean(context.config.walletPath),
|
|
141
|
+
signerConfigured: Boolean(context.signer),
|
|
142
|
+
signerPublicKey: context.signer?.publicKey.toBase58(),
|
|
143
|
+
localProfileVisibility: 'visible-to-local-sap-payments-bridge',
|
|
144
|
+
hostedRemoteVisibility: 'not-visible-to-hosted-accountless-server',
|
|
145
|
+
secretMaterial: 'keypair-bytes-never-returned',
|
|
146
|
+
recommendedPaidTool: 'sap_payments_call_paid_tool',
|
|
147
|
+
agentInstruction: 'For wallet/profile questions, trust this local sap_payments profile result over the remote hosted sap_profile_current result. The hosted SAP MCP server is intentionally accountless.',
|
|
148
|
+
}, null, 2)));
|
|
149
|
+
}
|
|
150
|
+
function registerPaymentsCallPaidTool(server, name) {
|
|
151
|
+
registerTool(server, name, {
|
|
14
152
|
title: 'Pay And Call Hosted SAP MCP Tool',
|
|
15
|
-
description: '
|
|
153
|
+
description: 'High-level local payment bridge. It initializes the hosted MCP session, obtains the x402 challenge, signs with the user-controlled SAP MCP profile wallet, retries the exact remote tool call, settles payment, and returns the tool result plus receipt. Prefer this tool for hosted paid/write SAP MCP calls when the runtime cannot natively replay x402 challenges. Requires confirm: true and maxPriceUsd.',
|
|
154
|
+
inputSchema: paidCallInputSchema,
|
|
155
|
+
outputSchema: paidCallOutputSchema,
|
|
156
|
+
annotations: {
|
|
157
|
+
readOnlyHint: false,
|
|
158
|
+
destructiveHint: false,
|
|
159
|
+
idempotentHint: false,
|
|
160
|
+
openWorldHint: true,
|
|
161
|
+
},
|
|
162
|
+
}, async (input) => {
|
|
163
|
+
try {
|
|
164
|
+
const parsed = parseInput(input);
|
|
165
|
+
const result = await executeX402PaidCall(parsed);
|
|
166
|
+
return createTextResponse(JSON.stringify(result, null, 2));
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
return createTextResponse(formatPaidCallError(error), { isError: true });
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
function registerPaymentsPrepareChallengeTool(server) {
|
|
174
|
+
registerTool(server, 'sap_payments_prepare_challenge', {
|
|
175
|
+
title: 'Prepare Hosted x402 Challenge',
|
|
176
|
+
description: 'Low-level free helper that initializes hosted SAP MCP, calls the target paid tool without payment, and returns the parsed x402 challenge without signing. Use for inspection, policy review, or custom x402 clients. Normal agents should prefer sap_payments_call_paid_tool.',
|
|
16
177
|
inputSchema: {
|
|
17
|
-
endpoint:
|
|
18
|
-
|
|
19
|
-
|
|
178
|
+
endpoint: paidCallInputSchema.endpoint,
|
|
179
|
+
toolName: paidCallInputSchema.toolName,
|
|
180
|
+
arguments: paidCallInputSchema.arguments,
|
|
181
|
+
body: paidCallInputSchema.body,
|
|
182
|
+
maxPriceUsd: {
|
|
183
|
+
type: 'number',
|
|
184
|
+
description: 'Optional maximum acceptable USD price used only to reject oversized challenges during inspection.',
|
|
20
185
|
},
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
186
|
+
},
|
|
187
|
+
outputSchema: {
|
|
188
|
+
type: 'object',
|
|
189
|
+
properties: {
|
|
190
|
+
endpoint: { type: 'string', description: 'Hosted MCP endpoint that returned the challenge.' },
|
|
191
|
+
sessionId: { type: 'string', description: 'MCP session id created for the challenge.' },
|
|
192
|
+
requestBody: { type: 'object', description: 'Canonical JSON-RPC request body used to obtain the challenge.' },
|
|
193
|
+
paymentRequired: { type: 'object', description: 'Parsed x402 PaymentRequired challenge.' },
|
|
194
|
+
selectedRequirements: { type: 'object', description: 'Selected payment requirement from accepts[0].' },
|
|
195
|
+
amountUsd: { type: 'number', description: 'Selected payment amount expressed in USD.' },
|
|
196
|
+
instructions: { type: 'object', description: 'Agent-safe retry and signing instructions.' },
|
|
24
197
|
},
|
|
25
|
-
|
|
198
|
+
},
|
|
199
|
+
annotations: {
|
|
200
|
+
readOnlyHint: true,
|
|
201
|
+
destructiveHint: false,
|
|
202
|
+
idempotentHint: false,
|
|
203
|
+
openWorldHint: true,
|
|
204
|
+
},
|
|
205
|
+
}, async (input) => {
|
|
206
|
+
try {
|
|
207
|
+
const result = await probeX402PaymentChallenge(parseProbeInput(input));
|
|
208
|
+
return createTextResponse(JSON.stringify(result, null, 2));
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
return createTextResponse(formatPaidCallError(error), { isError: true });
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
function registerPaymentsSignChallengeTool(server) {
|
|
216
|
+
registerTool(server, 'sap_payments_sign_challenge', {
|
|
217
|
+
title: 'Sign Hosted x402 Challenge',
|
|
218
|
+
description: 'Low-level local helper that signs a parsed x402 PaymentRequired challenge with the active SAP MCP profile wallet and returns a one-time Payment-Signature header. Use only when building a custom client; normal agents should prefer sap_payments_call_paid_tool so the payment header is not surfaced separately. Requires confirm: true and maxPriceUsd.',
|
|
219
|
+
inputSchema: {
|
|
220
|
+
paymentRequired: {
|
|
26
221
|
type: 'object',
|
|
27
|
-
description: '
|
|
222
|
+
description: 'Parsed x402 PaymentRequired challenge returned by sap_payments_prepare_challenge or the hosted MCP payment_required response.',
|
|
28
223
|
},
|
|
29
|
-
|
|
224
|
+
challenge: {
|
|
30
225
|
type: 'object',
|
|
31
|
-
description: '
|
|
32
|
-
},
|
|
33
|
-
profileName: {
|
|
34
|
-
type: 'string',
|
|
35
|
-
description: 'SAP MCP profile used to sign the x402 payment. Defaults to the active profile.',
|
|
226
|
+
description: 'Alias for paymentRequired for agent runtimes that store the challenge under a generic name.',
|
|
36
227
|
},
|
|
37
|
-
|
|
228
|
+
selectedIndex: {
|
|
38
229
|
type: 'number',
|
|
39
|
-
description: '
|
|
230
|
+
description: 'Index into paymentRequired.accepts to sign. Defaults to 0.',
|
|
40
231
|
},
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
232
|
+
profileName: paidCallInputSchema.profileName,
|
|
233
|
+
maxPriceUsd: paidCallInputSchema.maxPriceUsd,
|
|
234
|
+
confirm: paidCallInputSchema.confirm,
|
|
235
|
+
},
|
|
236
|
+
outputSchema: {
|
|
237
|
+
type: 'object',
|
|
238
|
+
properties: {
|
|
239
|
+
signerAddress: { type: 'string', description: 'Public address of the signer that created the payment authorization.' },
|
|
240
|
+
amountUsd: { type: 'number', description: 'USD amount authorized by the selected challenge.' },
|
|
241
|
+
payment: { type: 'object', description: 'Selected network, asset, and payTo.' },
|
|
242
|
+
headers: { type: 'object', description: 'HTTP headers to attach to the exact paid retry request.' },
|
|
243
|
+
payload: { type: 'object', description: 'x402 payment payload produced by the official client SDK.' },
|
|
244
|
+
warning: { type: 'string', description: 'Safety warning for one-time payment authorization material.' },
|
|
44
245
|
},
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
246
|
+
},
|
|
247
|
+
annotations: {
|
|
248
|
+
readOnlyHint: false,
|
|
249
|
+
destructiveHint: false,
|
|
250
|
+
idempotentHint: false,
|
|
251
|
+
openWorldHint: false,
|
|
252
|
+
},
|
|
253
|
+
}, async (input) => {
|
|
254
|
+
try {
|
|
255
|
+
const result = await signX402PaymentChallenge(parseSignInput(input));
|
|
256
|
+
return createTextResponse(JSON.stringify(result, null, 2));
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
return createTextResponse(formatPaidCallError(error), { isError: true });
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
function registerPaymentsVerifyReceiptTool(server) {
|
|
264
|
+
registerTool(server, 'sap_payments_verify_receipt', {
|
|
265
|
+
title: 'Inspect x402 Payment Receipt',
|
|
266
|
+
description: 'Decodes a PAYMENT-RESPONSE or X-PAYMENT-RESPONSE receipt header into agent-readable JSON. This is a local inspection helper; on-chain finality still comes from the x402 facilitator response and Solana transaction status.',
|
|
267
|
+
inputSchema: {
|
|
268
|
+
receiptHeader: {
|
|
269
|
+
type: 'string',
|
|
270
|
+
description: 'Base64 JSON or raw JSON receipt header returned by PAYMENT-RESPONSE or X-PAYMENT-RESPONSE.',
|
|
48
271
|
},
|
|
272
|
+
paymentResponse: {
|
|
273
|
+
type: 'string',
|
|
274
|
+
description: 'Alias for receiptHeader.',
|
|
275
|
+
},
|
|
276
|
+
},
|
|
277
|
+
outputSchema: {
|
|
278
|
+
type: 'object',
|
|
279
|
+
properties: {
|
|
280
|
+
validJson: { type: 'boolean', description: 'Whether the receipt decoded to JSON.' },
|
|
281
|
+
decoded: { type: 'object', description: 'Decoded receipt payload or the original string when not JSON.' },
|
|
282
|
+
txSignature: { type: 'string', description: 'Settlement transaction signature when present.' },
|
|
283
|
+
network: { type: 'string', description: 'Settlement network when present.' },
|
|
284
|
+
warning: { type: 'string', description: 'Warning when the receipt could not be decoded as JSON.' },
|
|
285
|
+
},
|
|
286
|
+
},
|
|
287
|
+
annotations: {
|
|
288
|
+
readOnlyHint: true,
|
|
289
|
+
destructiveHint: false,
|
|
290
|
+
idempotentHint: true,
|
|
291
|
+
openWorldHint: false,
|
|
49
292
|
},
|
|
50
293
|
}, async (input) => {
|
|
51
294
|
try {
|
|
52
|
-
const
|
|
53
|
-
const result = await executeX402PaidCall(parsed);
|
|
295
|
+
const result = inspectX402Receipt(parseReceiptInput(input));
|
|
54
296
|
return createTextResponse(JSON.stringify(result, null, 2));
|
|
55
297
|
}
|
|
56
298
|
catch (error) {
|
|
@@ -77,6 +319,50 @@ function parseInput(input) {
|
|
|
77
319
|
confirm: record.confirm === true,
|
|
78
320
|
};
|
|
79
321
|
}
|
|
322
|
+
function parseProbeInput(input) {
|
|
323
|
+
if (!input || typeof input !== 'object' || Array.isArray(input)) {
|
|
324
|
+
throw new Error('sap_payments_prepare_challenge requires an input object.');
|
|
325
|
+
}
|
|
326
|
+
const record = input;
|
|
327
|
+
return {
|
|
328
|
+
endpoint: record.endpoint,
|
|
329
|
+
toolName: record.toolName,
|
|
330
|
+
arguments: record.arguments,
|
|
331
|
+
body: record.body,
|
|
332
|
+
maxPriceUsd: record.maxPriceUsd,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
function parseSignInput(input) {
|
|
336
|
+
if (!input || typeof input !== 'object' || Array.isArray(input)) {
|
|
337
|
+
throw new Error('sap_payments_sign_challenge requires an input object.');
|
|
338
|
+
}
|
|
339
|
+
const record = input;
|
|
340
|
+
const paymentRequired = record.paymentRequired ?? record.challenge;
|
|
341
|
+
if (!paymentRequired) {
|
|
342
|
+
throw new Error('paymentRequired is required.');
|
|
343
|
+
}
|
|
344
|
+
if (record.maxPriceUsd === undefined) {
|
|
345
|
+
throw new Error('maxPriceUsd is required.');
|
|
346
|
+
}
|
|
347
|
+
return {
|
|
348
|
+
paymentRequired,
|
|
349
|
+
selectedIndex: record.selectedIndex,
|
|
350
|
+
profileName: record.profileName,
|
|
351
|
+
maxPriceUsd: record.maxPriceUsd,
|
|
352
|
+
confirm: record.confirm === true,
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
function parseReceiptInput(input) {
|
|
356
|
+
if (!input || typeof input !== 'object' || Array.isArray(input)) {
|
|
357
|
+
throw new Error('sap_payments_verify_receipt requires an input object.');
|
|
358
|
+
}
|
|
359
|
+
const record = input;
|
|
360
|
+
const header = record.receiptHeader ?? record.paymentResponse;
|
|
361
|
+
if (!header) {
|
|
362
|
+
throw new Error('receiptHeader is required.');
|
|
363
|
+
}
|
|
364
|
+
return header;
|
|
365
|
+
}
|
|
80
366
|
function formatPaidCallError(error) {
|
|
81
367
|
const message = error instanceof Error ? error.message : String(error);
|
|
82
368
|
const retryable = isRetryablePaymentError(message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x402-paid-call-tool.js","sourceRoot":"","sources":["../../src/tools/x402-paid-call-tool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"x402-paid-call-tool.js","sourceRoot":"","sources":["../../src/tools/x402-paid-call-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,39 @@ export interface DesktopWizardRuntimeStatus {
|
|
|
39
39
|
autoConfigurable: boolean;
|
|
40
40
|
recommendation: string;
|
|
41
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* @name DesktopProfileStatus
|
|
44
|
+
* @description Safe local SAP MCP profile metadata shown by the desktop wizard without reading wallet bytes.
|
|
45
|
+
*/
|
|
46
|
+
export interface DesktopProfileStatus {
|
|
47
|
+
name: string;
|
|
48
|
+
path: string;
|
|
49
|
+
active: boolean;
|
|
50
|
+
mode?: SapMcpMode;
|
|
51
|
+
rpcUrl?: string;
|
|
52
|
+
network?: string;
|
|
53
|
+
agentPubkey?: string;
|
|
54
|
+
walletPath?: string;
|
|
55
|
+
walletExists: boolean;
|
|
56
|
+
externalSignerConfigured: boolean;
|
|
57
|
+
readiness: 'ready' | 'needs-attention';
|
|
58
|
+
issues: string[];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* @name DesktopWizardReadiness
|
|
62
|
+
* @description Post-save readiness audit used to avoid reporting success when local signing or runtime bridge config is broken.
|
|
63
|
+
*/
|
|
64
|
+
export interface DesktopWizardReadiness {
|
|
65
|
+
status: 'ready' | 'needs-attention';
|
|
66
|
+
profileName?: string;
|
|
67
|
+
profileIssues: string[];
|
|
68
|
+
runtimeIssues: Array<{
|
|
69
|
+
runtime: string;
|
|
70
|
+
path: string;
|
|
71
|
+
issues: string[];
|
|
72
|
+
}>;
|
|
73
|
+
nextSteps: string[];
|
|
74
|
+
}
|
|
42
75
|
/**
|
|
43
76
|
* @name DesktopWizardResult
|
|
44
77
|
* @description Result returned after the desktop wizard saves profile and runtime integration state.
|
|
@@ -46,6 +79,7 @@ export interface DesktopWizardRuntimeStatus {
|
|
|
46
79
|
export interface DesktopWizardResult {
|
|
47
80
|
setup?: WizardSetupResult;
|
|
48
81
|
setupMode: DesktopWizardDraft['setupMode'];
|
|
82
|
+
readiness: DesktopWizardReadiness;
|
|
49
83
|
runtimeActions: Array<{
|
|
50
84
|
runtime: string;
|
|
51
85
|
status: 'configured' | 'installed' | 'skipped';
|
|
@@ -69,6 +103,11 @@ export declare function createDefaultDesktopWizardDraft(): DesktopWizardDraft;
|
|
|
69
103
|
* @description Summarizes local runtime config files without exposing secret material.
|
|
70
104
|
*/
|
|
71
105
|
export declare function getDesktopRuntimeStatuses(homeDir?: string): DesktopWizardRuntimeStatus[];
|
|
106
|
+
/**
|
|
107
|
+
* @name getDesktopProfileStatuses
|
|
108
|
+
* @description Lists local SAP MCP config profiles without loading or exposing keypair material.
|
|
109
|
+
*/
|
|
110
|
+
export declare function getDesktopProfileStatuses(homeDir?: string): DesktopProfileStatus[];
|
|
72
111
|
/**
|
|
73
112
|
* @name validateDesktopWizardDraft
|
|
74
113
|
* @description Returns actionable validation errors before persistence.
|
|
@@ -78,5 +117,5 @@ export declare function validateDesktopWizardDraft(draft: DesktopWizardDraft): s
|
|
|
78
117
|
* @name saveDesktopWizardDraft
|
|
79
118
|
* @description Persists a desktop wizard draft and installs selected runtime integrations.
|
|
80
119
|
*/
|
|
81
|
-
export declare function saveDesktopWizardDraft(draft: DesktopWizardDraft): Promise<DesktopWizardResult>;
|
|
120
|
+
export declare function saveDesktopWizardDraft(draft: DesktopWizardDraft, homeDir?: string, platform?: NodeJS.Platform): Promise<DesktopWizardResult>;
|
|
82
121
|
//# sourceMappingURL=desktop-flow.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"desktop-flow.d.ts","sourceRoot":"","sources":["../../src/wizard-core/desktop-flow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"desktop-flow.d.ts","sourceRoot":"","sources":["../../src/wizard-core/desktop-flow.ts"],"names":[],"mappings":"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"}
|