@oobe-protocol-labs/sap-mcp-server 0.9.10 → 0.9.13
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 +56 -0
- package/USER_DOCS/00_START_HERE.md +2 -1
- package/USER_DOCS/03_PAYMENTS_X402_PAYSH.md +2 -1
- package/USER_DOCS/04_CLIENT_CONFIGS.md +4 -3
- package/USER_DOCS/05_SKILLS_AND_TOOLS.md +8 -4
- package/USER_DOCS/06_DESKTOP_GUI_WIZARD.md +6 -6
- package/dist/config/mcp-client-injection.d.ts.map +1 -1
- package/dist/config/mcp-client-injection.js +4 -3
- package/dist/config/mcp-client-injection.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 +2 -0
- package/dist/payments/pricing.js.map +1 -1
- package/dist/prompts/context/sap-agent-context.prompt.js +2 -1
- package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -1
- package/dist/prompts/context/sap-agent-start.prompt.js +2 -1
- package/dist/prompts/context/sap-agent-start.prompt.js.map +1 -1
- package/dist/remote/public-home/sections.d.ts.map +1 -1
- package/dist/remote/public-home/sections.js +4 -2
- package/dist/remote/public-home/sections.js.map +1 -1
- package/dist/remote/public-home/types.d.ts +1 -0
- package/dist/remote/public-home/types.d.ts.map +1 -1
- package/dist/remote/server.d.ts +1 -0
- package/dist/remote/server.d.ts.map +1 -1
- package/dist/remote/server.js +153 -0
- package/dist/remote/server.js.map +1 -1
- package/dist/security/tool-permissions.d.ts.map +1 -1
- package/dist/security/tool-permissions.js +1 -0
- package/dist/security/tool-permissions.js.map +1 -1
- package/dist/tools/agent-start-tool.js +7 -3
- package/dist/tools/agent-start-tool.js.map +1 -1
- package/dist/tools/sap-sdk-tools.d.ts +8 -0
- package/dist/tools/sap-sdk-tools.d.ts.map +1 -1
- package/dist/tools/sap-sdk-tools.js +1 -1
- package/dist/tools/sap-sdk-tools.js.map +1 -1
- package/dist/tools/skills-tools.d.ts.map +1 -1
- package/dist/tools/skills-tools.js +10 -1
- package/dist/tools/skills-tools.js.map +1 -1
- package/dist/tools/transaction-tools.d.ts +56 -0
- package/dist/tools/transaction-tools.d.ts.map +1 -1
- package/dist/tools/transaction-tools.js +215 -18
- package/dist/tools/transaction-tools.js.map +1 -1
- package/dist/tools/x402-paid-call-tool.d.ts.map +1 -1
- package/dist/tools/x402-paid-call-tool.js +213 -3
- package/dist/tools/x402-paid-call-tool.js.map +1 -1
- package/docs/03_CONFIGURATION_AND_WIZARD.md +1 -0
- package/docs/06_PAYMENTS_X402_AND_PAYSH.md +10 -2
- package/docs/07_ENDPOINTS_AND_CLIENTS.md +1 -1
- package/docs/14_DESKTOP_WIZARD_RELEASE.md +2 -1
- package/package.json +1 -1
- package/server.json +3 -3
- package/skills/sap-agent-registry/SKILL.md +7 -4
- package/skills/sap-mcp/SKILL.md +6 -3
- package/skills/sap-payments-x402/SKILL.md +14 -2
- package/smithery.config.schema.json +7 -0
|
@@ -8,6 +8,9 @@ import { registerTool } from '../adapters/mcp/sdk-compat.js';
|
|
|
8
8
|
import { createTextResponse } from '../adapters/mcp/tool-response.js';
|
|
9
9
|
const SYSTEM_TRANSFER_INSTRUCTION_INDEX = 2;
|
|
10
10
|
const SYSTEM_TRANSFER_LAYOUT_BYTES = 12;
|
|
11
|
+
const DEFAULT_CONFIRMATION_TIMEOUT_MS = 90_000;
|
|
12
|
+
const MAX_CONFIRMATION_TIMEOUT_MS = 180_000;
|
|
13
|
+
const DEFAULT_TX_SUBMIT_RELAY_URL = 'https://mcp.sap.oobeprotocol.ai/tx/submit';
|
|
11
14
|
/**
|
|
12
15
|
* @name decodeInputBytes
|
|
13
16
|
* @description Decodes base64/base58 transaction text into raw bytes.
|
|
@@ -134,6 +137,162 @@ export function serializeTransaction(transaction) {
|
|
|
134
137
|
verifySignatures: false,
|
|
135
138
|
}).toString('base64');
|
|
136
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* @name submitSignedTransactionWithLifecycle
|
|
142
|
+
* @description Submits a signed transaction through the configured local RPC and waits for a bounded confirmation result.
|
|
143
|
+
* @param context - Shared MCP runtime context.
|
|
144
|
+
* @param input - Signed transaction plus send/confirmation options.
|
|
145
|
+
* @returns Submission lifecycle result with retry guidance.
|
|
146
|
+
*/
|
|
147
|
+
export async function submitSignedTransactionWithLifecycle(context, input) {
|
|
148
|
+
const signedTransaction = input.signedTransaction;
|
|
149
|
+
const encoding = input.encoding ?? 'base64';
|
|
150
|
+
const rawTransaction = decodeInputBytes(signedTransaction, encoding);
|
|
151
|
+
await assertTransactionPolicy(context, deserializeTransaction(signedTransaction, encoding));
|
|
152
|
+
const signature = await context.connection.sendRawTransaction(rawTransaction, {
|
|
153
|
+
skipPreflight: input.skipPreflight,
|
|
154
|
+
maxRetries: input.maxRetries ?? context.config.maxRetries,
|
|
155
|
+
});
|
|
156
|
+
const confirmationTimeoutMs = boundConfirmationTimeout(input.confirmationTimeoutMs);
|
|
157
|
+
const desiredCommitment = input.commitment ?? 'confirmed';
|
|
158
|
+
const confirmation = await waitForSignatureStatus(context, signature, confirmationTimeoutMs, desiredCommitment);
|
|
159
|
+
return {
|
|
160
|
+
success: confirmation.success,
|
|
161
|
+
submitted: true,
|
|
162
|
+
signature,
|
|
163
|
+
confirmationStatus: confirmation.status,
|
|
164
|
+
retrySafe: confirmation.retrySafe,
|
|
165
|
+
...(confirmation.slot === undefined ? {} : { slot: confirmation.slot }),
|
|
166
|
+
explorerUrl: `https://solscan.io/tx/${signature}`,
|
|
167
|
+
audit: {
|
|
168
|
+
intentId: input.intentId ?? `sap-tx-${Date.now()}`,
|
|
169
|
+
submittedVia: 'local-rpc',
|
|
170
|
+
confirmationTimeoutMs,
|
|
171
|
+
desiredCommitment,
|
|
172
|
+
retrySafe: confirmation.retrySafe,
|
|
173
|
+
rule: confirmation.success
|
|
174
|
+
? 'The signed transaction was submitted and observed on-chain before returning success.'
|
|
175
|
+
: 'The signed transaction was submitted but did not reach the requested confirmation state before timeout; retry only when retrySafe is true and the user confirms.',
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* @name submitSignedTransactionViaRelay
|
|
181
|
+
* @description Submits a signed transaction to the hosted OOBE submit relay. The relay never signs; it only broadcasts and confirms already-signed bytes.
|
|
182
|
+
* @param input - Signed transaction plus send/confirmation options.
|
|
183
|
+
* @returns Relay lifecycle result with retry guidance.
|
|
184
|
+
*/
|
|
185
|
+
export async function submitSignedTransactionViaRelay(input) {
|
|
186
|
+
const relayUrl = input.submitRelayUrl ?? process.env.SAP_MCP_TX_SUBMIT_RELAY_URL ?? DEFAULT_TX_SUBMIT_RELAY_URL;
|
|
187
|
+
validateRelayUrl(relayUrl);
|
|
188
|
+
const response = await fetch(relayUrl, {
|
|
189
|
+
method: 'POST',
|
|
190
|
+
headers: {
|
|
191
|
+
'Content-Type': 'application/json',
|
|
192
|
+
Accept: 'application/json',
|
|
193
|
+
},
|
|
194
|
+
body: JSON.stringify({
|
|
195
|
+
signedTransaction: input.signedTransaction,
|
|
196
|
+
encoding: input.encoding ?? 'base64',
|
|
197
|
+
skipPreflight: input.skipPreflight,
|
|
198
|
+
maxRetries: input.maxRetries,
|
|
199
|
+
confirmationTimeoutMs: input.confirmationTimeoutMs,
|
|
200
|
+
commitment: input.commitment,
|
|
201
|
+
intentId: input.intentId,
|
|
202
|
+
}),
|
|
203
|
+
});
|
|
204
|
+
const body = await response.json().catch(() => undefined);
|
|
205
|
+
if (!response.ok) {
|
|
206
|
+
const message = typeof body === 'object' && body && 'error' in body
|
|
207
|
+
? String(body.error)
|
|
208
|
+
: `submit relay returned HTTP ${response.status}`;
|
|
209
|
+
throw new Error(message);
|
|
210
|
+
}
|
|
211
|
+
if (!isRelaySubmitResult(body)) {
|
|
212
|
+
throw new Error('submit relay returned an invalid transaction lifecycle response.');
|
|
213
|
+
}
|
|
214
|
+
return {
|
|
215
|
+
...body,
|
|
216
|
+
audit: {
|
|
217
|
+
...body.audit,
|
|
218
|
+
submittedVia: 'hosted-submit-relay',
|
|
219
|
+
relayUrl,
|
|
220
|
+
signerBoundary: 'local-signer-remote-submit-only',
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
async function waitForSignatureStatus(context, signature, timeoutMs, desiredCommitment) {
|
|
225
|
+
const startedAt = Date.now();
|
|
226
|
+
let lastStatus = 'missing';
|
|
227
|
+
let lastSlot;
|
|
228
|
+
while (Date.now() - startedAt < timeoutMs) {
|
|
229
|
+
const statuses = await context.connection.getSignatureStatuses([signature], { searchTransactionHistory: true });
|
|
230
|
+
const status = statuses.value[0];
|
|
231
|
+
if (status?.err) {
|
|
232
|
+
return {
|
|
233
|
+
success: false,
|
|
234
|
+
retrySafe: true,
|
|
235
|
+
status: 'failed',
|
|
236
|
+
...(status.slot === undefined ? {} : { slot: status.slot }),
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
if (status) {
|
|
240
|
+
lastStatus = status.confirmationStatus ?? 'processed';
|
|
241
|
+
lastSlot = status.slot;
|
|
242
|
+
if (commitmentReached(lastStatus, desiredCommitment)) {
|
|
243
|
+
return {
|
|
244
|
+
success: true,
|
|
245
|
+
retrySafe: false,
|
|
246
|
+
status: lastStatus,
|
|
247
|
+
...(lastSlot === undefined ? {} : { slot: lastSlot }),
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
await sleep(2_000);
|
|
252
|
+
}
|
|
253
|
+
return {
|
|
254
|
+
success: false,
|
|
255
|
+
retrySafe: lastStatus === 'missing',
|
|
256
|
+
status: lastStatus === 'missing' ? 'expired_or_not_landed' : lastStatus,
|
|
257
|
+
...(lastSlot === undefined ? {} : { slot: lastSlot }),
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
function commitmentReached(current, desired) {
|
|
261
|
+
const rank = {
|
|
262
|
+
processed: 1,
|
|
263
|
+
confirmed: 2,
|
|
264
|
+
finalized: 3,
|
|
265
|
+
};
|
|
266
|
+
return (rank[current] ?? 0) >= rank[desired];
|
|
267
|
+
}
|
|
268
|
+
function boundConfirmationTimeout(value) {
|
|
269
|
+
if (!Number.isFinite(value)) {
|
|
270
|
+
return DEFAULT_CONFIRMATION_TIMEOUT_MS;
|
|
271
|
+
}
|
|
272
|
+
return Math.max(15_000, Math.min(Number(value), MAX_CONFIRMATION_TIMEOUT_MS));
|
|
273
|
+
}
|
|
274
|
+
function validateRelayUrl(value) {
|
|
275
|
+
const url = new URL(value);
|
|
276
|
+
if (url.protocol !== 'https:' && url.hostname !== '127.0.0.1' && url.hostname !== 'localhost') {
|
|
277
|
+
throw new Error('submitRelayUrl must use https, localhost, or 127.0.0.1.');
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
function isRelaySubmitResult(value) {
|
|
281
|
+
if (!value || typeof value !== 'object') {
|
|
282
|
+
return false;
|
|
283
|
+
}
|
|
284
|
+
const record = value;
|
|
285
|
+
return typeof record.success === 'boolean'
|
|
286
|
+
&& record.submitted === true
|
|
287
|
+
&& typeof record.signature === 'string'
|
|
288
|
+
&& typeof record.confirmationStatus === 'string'
|
|
289
|
+
&& typeof record.retrySafe === 'boolean'
|
|
290
|
+
&& typeof record.explorerUrl === 'string'
|
|
291
|
+
&& typeof record.audit === 'object';
|
|
292
|
+
}
|
|
293
|
+
async function sleep(ms) {
|
|
294
|
+
await new Promise(resolve => setTimeout(resolve, ms));
|
|
295
|
+
}
|
|
137
296
|
/**
|
|
138
297
|
* @name describeTransaction
|
|
139
298
|
* @description Builds a stable JSON preview from a Solana transaction.
|
|
@@ -234,16 +393,38 @@ export async function finalizeTransactionWithLocalSigner(context, input) {
|
|
|
234
393
|
},
|
|
235
394
|
};
|
|
236
395
|
if (input.submit === true) {
|
|
237
|
-
const
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
396
|
+
const submitResult = input.submitViaRelay === false
|
|
397
|
+
? await submitSignedTransactionWithLifecycle(context, {
|
|
398
|
+
signedTransaction: signedTransactionBase64,
|
|
399
|
+
encoding: 'base64',
|
|
400
|
+
skipPreflight: input.skipPreflight,
|
|
401
|
+
maxRetries: input.maxRetries,
|
|
402
|
+
confirmationTimeoutMs: input.confirmationTimeoutMs,
|
|
403
|
+
commitment: input.commitment,
|
|
404
|
+
intentId: input.intentId,
|
|
405
|
+
})
|
|
406
|
+
: await submitSignedTransactionViaRelay({
|
|
407
|
+
signedTransaction: signedTransactionBase64,
|
|
408
|
+
encoding: 'base64',
|
|
409
|
+
skipPreflight: input.skipPreflight,
|
|
410
|
+
maxRetries: input.maxRetries,
|
|
411
|
+
confirmationTimeoutMs: input.confirmationTimeoutMs,
|
|
412
|
+
commitment: input.commitment,
|
|
413
|
+
submitRelayUrl: input.submitRelayUrl,
|
|
414
|
+
intentId: input.intentId,
|
|
415
|
+
});
|
|
416
|
+
result.success = submitResult.success;
|
|
417
|
+
result.submitted = submitResult.submitted;
|
|
418
|
+
result.signature = submitResult.signature;
|
|
419
|
+
result.confirmationStatus = submitResult.confirmationStatus;
|
|
420
|
+
result.retrySafe = submitResult.retrySafe;
|
|
421
|
+
result.explorerUrl = submitResult.explorerUrl;
|
|
243
422
|
result.audit = {
|
|
244
423
|
...result.audit,
|
|
245
|
-
|
|
246
|
-
|
|
424
|
+
...submitResult.audit,
|
|
425
|
+
submitted: submitResult.submitted,
|
|
426
|
+
signature: submitResult.signature,
|
|
427
|
+
transactionLanded: submitResult.success,
|
|
247
428
|
};
|
|
248
429
|
}
|
|
249
430
|
return result;
|
|
@@ -335,22 +516,38 @@ export function registerTransactionTools(server, context) {
|
|
|
335
516
|
encoding: { type: 'string', enum: ['base64', 'base58'], description: 'Input encoding' },
|
|
336
517
|
skipPreflight: { type: 'boolean', description: 'Skip RPC preflight checks' },
|
|
337
518
|
maxRetries: { type: 'number', description: 'Maximum RPC send retries' },
|
|
519
|
+
confirmationTimeoutMs: { type: 'number', description: 'Bounded confirmation wait in milliseconds. Defaults to 90000; maximum 180000.' },
|
|
520
|
+
commitment: { type: 'string', enum: ['processed', 'confirmed', 'finalized'], description: 'Desired confirmation status before returning success. Defaults to confirmed.' },
|
|
521
|
+
submitViaRelay: { type: 'boolean', description: 'When true, submit through the hosted OOBE relay. The relay only broadcasts already-signed bytes and never signs. Defaults to false for this local tool.' },
|
|
522
|
+
submitRelayUrl: { type: 'string', description: 'Optional submit relay URL. Must be HTTPS, localhost, or 127.0.0.1.' },
|
|
523
|
+
intentId: { type: 'string', description: 'Optional caller-provided id binding submission, confirmation, and audit output.' },
|
|
338
524
|
},
|
|
339
525
|
}, async (input) => {
|
|
340
526
|
try {
|
|
341
527
|
if (!input.signedTransaction) {
|
|
342
528
|
throw new Error('signedTransaction is required');
|
|
343
529
|
}
|
|
344
|
-
const
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
530
|
+
const result = input.submitViaRelay === true
|
|
531
|
+
? await submitSignedTransactionViaRelay({
|
|
532
|
+
signedTransaction: input.signedTransaction,
|
|
533
|
+
encoding: input.encoding,
|
|
534
|
+
skipPreflight: input.skipPreflight,
|
|
535
|
+
maxRetries: input.maxRetries,
|
|
536
|
+
confirmationTimeoutMs: input.confirmationTimeoutMs,
|
|
537
|
+
commitment: input.commitment,
|
|
538
|
+
submitRelayUrl: input.submitRelayUrl,
|
|
539
|
+
intentId: input.intentId,
|
|
540
|
+
})
|
|
541
|
+
: await submitSignedTransactionWithLifecycle(context, {
|
|
542
|
+
signedTransaction: input.signedTransaction,
|
|
543
|
+
encoding: input.encoding,
|
|
544
|
+
skipPreflight: input.skipPreflight,
|
|
545
|
+
maxRetries: input.maxRetries,
|
|
546
|
+
confirmationTimeoutMs: input.confirmationTimeoutMs,
|
|
547
|
+
commitment: input.commitment,
|
|
548
|
+
intentId: input.intentId,
|
|
549
|
+
});
|
|
550
|
+
return createTextResponse(JSON.stringify(result, null, 2), { isError: !result.success });
|
|
354
551
|
}
|
|
355
552
|
catch (error) {
|
|
356
553
|
return createTextResponse(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`, { isError: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-tools.js","sourceRoot":"","sources":["../../src/tools/transaction-tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transaction-tools.js","sourceRoot":"","sources":["../../src/tools/transaction-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x402-paid-call-tool.d.ts","sourceRoot":"","sources":["../../src/tools/x402-paid-call-tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAIxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"x402-paid-call-tool.d.ts","sourceRoot":"","sources":["../../src/tools/x402-paid-call-tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAIxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAuLtD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAatF"}
|
|
@@ -7,6 +7,7 @@ import { createTextResponse } from '../adapters/mcp/tool-response.js';
|
|
|
7
7
|
import { getActiveProfile, getProfileConfigPath } from '../config/profiles.js';
|
|
8
8
|
import { executeX402PaidCall, executeExternalX402Call, getX402PaymentReadiness, inspectX402Receipt, probeX402PaymentChallenge, signX402PaymentChallenge, } from '../payments/x402-paid-call.js';
|
|
9
9
|
import { finalizeTransactionWithLocalSigner } from './transaction-tools.js';
|
|
10
|
+
import { parseRegisterAgentArgs } from './sap-sdk-tools.js';
|
|
10
11
|
const paidCallInputSchema = {
|
|
11
12
|
endpoint: {
|
|
12
13
|
type: 'string',
|
|
@@ -95,6 +96,7 @@ export function registerX402PaidCallTool(server, _context) {
|
|
|
95
96
|
registerPaymentsReadinessTool(server);
|
|
96
97
|
registerPaymentsCallPaidTool(server, 'sap_payments_call_paid_tool');
|
|
97
98
|
registerPaymentsCallExternalX402Tool(server);
|
|
99
|
+
registerPaymentsRegisterAgentTool(server, _context);
|
|
98
100
|
registerPaymentsFinalizeTransactionTool(server, _context);
|
|
99
101
|
registerPaymentsPrepareChallengeTool(server);
|
|
100
102
|
registerPaymentsSignChallengeTool(server);
|
|
@@ -102,6 +104,160 @@ export function registerX402PaidCallTool(server, _context) {
|
|
|
102
104
|
// Backward-compatible alias used by existing Codex/Hermes/Claude client snippets.
|
|
103
105
|
registerPaymentsCallPaidTool(server, 'sap_x402_paid_call');
|
|
104
106
|
}
|
|
107
|
+
function registerPaymentsRegisterAgentTool(server, context) {
|
|
108
|
+
registerTool(server, 'sap_payments_register_agent', {
|
|
109
|
+
title: 'Register SAP Agent With Local Signer',
|
|
110
|
+
description: 'Local non-custodial SAP registry write for hosted users. Use this when hosted sap_register_agent returns hosted_local_signer_required. It registers the active local SAP MCP profile wallet as an on-chain SAP agent with the local signer; OOBE never receives keypair bytes. This tool does not pay a hosted x402 fee because it runs locally through sap_payments. Requires confirm: true.',
|
|
111
|
+
inputSchema: {
|
|
112
|
+
name: { type: 'string', description: 'Human-readable SAP agent name.' },
|
|
113
|
+
description: { type: 'string', description: 'Detailed description of the agent purpose and capabilities.' },
|
|
114
|
+
capabilities: { type: 'array', description: 'Capability objects or strings identifying what the agent can do, for example "jupiter:swap" or "sns:identity".' },
|
|
115
|
+
pricing: { type: 'array', description: 'Pricing tier objects defining per-call costs, rate limits, and settlement terms. Use micro-USDC/base token units where applicable.' },
|
|
116
|
+
protocols: { type: 'array', items: { type: 'string' }, description: 'Protocol identifiers supported by the agent, for example sap, mcp, jupiter, sns, metaplex, or x402.' },
|
|
117
|
+
agentId: { type: 'string', description: 'Optional stable agent identifier, for example solking.' },
|
|
118
|
+
agentUri: { type: 'string', description: 'Optional URI to the agent off-chain metadata or service endpoint.' },
|
|
119
|
+
metadataUri: { type: 'string', description: 'Alias for agentUri; URI to off-chain agent metadata JSON.' },
|
|
120
|
+
x402Endpoint: { type: 'string', description: 'Optional x402 payment/discovery endpoint URL advertised by this agent.' },
|
|
121
|
+
confirmationTimeoutMs: {
|
|
122
|
+
type: 'number',
|
|
123
|
+
description: 'Optional local confirmation wait in milliseconds. Defaults to 90000 so the tool can distinguish confirmed registration from an expired/not-landed transaction.',
|
|
124
|
+
},
|
|
125
|
+
confirm: { type: 'boolean', description: 'Must be true. Confirms the user wants the local signer to submit this SAP registry transaction.' },
|
|
126
|
+
},
|
|
127
|
+
outputSchema: {
|
|
128
|
+
type: 'object',
|
|
129
|
+
properties: {
|
|
130
|
+
success: { type: 'boolean', description: 'Whether the local SAP agent registration account was confirmed on-chain.' },
|
|
131
|
+
signature: { type: 'string', description: 'Solana transaction signature returned by the SAP SDK.' },
|
|
132
|
+
confirmationStatus: { type: 'string', description: 'Final local confirmation result: confirmed, finalized, processed, expired, missing, or failed.' },
|
|
133
|
+
signerPublicKey: { type: 'string', description: 'Public key of the local SAP MCP signer that registered the agent.' },
|
|
134
|
+
profile: { type: 'string', description: 'Active local SAP MCP profile used for registration when available.' },
|
|
135
|
+
agent: { type: 'object', description: 'Agent registration fields submitted on-chain.' },
|
|
136
|
+
audit: { type: 'object', description: 'Agent-readable proof that the write was local, non-custodial, and did not use hosted x402.' },
|
|
137
|
+
},
|
|
138
|
+
required: ['success', 'signature', 'confirmationStatus', 'signerPublicKey', 'agent', 'audit'],
|
|
139
|
+
},
|
|
140
|
+
annotations: {
|
|
141
|
+
readOnlyHint: false,
|
|
142
|
+
destructiveHint: false,
|
|
143
|
+
idempotentHint: false,
|
|
144
|
+
openWorldHint: false,
|
|
145
|
+
},
|
|
146
|
+
}, async (input) => {
|
|
147
|
+
try {
|
|
148
|
+
const parsed = parseRegisterAgentInput(input);
|
|
149
|
+
const activeProfile = getActiveProfile();
|
|
150
|
+
const signerPublicKey = context.signer?.publicKey.toBase58();
|
|
151
|
+
if (!signerPublicKey) {
|
|
152
|
+
throw new Error('No local signer configured. Run the SAP MCP wizard full setup or repair the local sap_payments bridge, then restart the agent runtime.');
|
|
153
|
+
}
|
|
154
|
+
const args = parseRegisterAgentArgs(parsed);
|
|
155
|
+
const signature = await context.sapClient.agent.register(args);
|
|
156
|
+
const confirmation = await waitForLocalAgentRegistration(context, signature, parsed.confirmationTimeoutMs);
|
|
157
|
+
if (!confirmation.confirmed) {
|
|
158
|
+
return createTextResponse(JSON.stringify({
|
|
159
|
+
success: false,
|
|
160
|
+
signature,
|
|
161
|
+
confirmationStatus: confirmation.status,
|
|
162
|
+
signerPublicKey,
|
|
163
|
+
profile: activeProfile,
|
|
164
|
+
agentPda: confirmation.agentPda,
|
|
165
|
+
agent: {
|
|
166
|
+
name: args.name,
|
|
167
|
+
description: args.description,
|
|
168
|
+
agentId: args.agentId,
|
|
169
|
+
agentUri: args.agentUri,
|
|
170
|
+
x402Endpoint: args.x402Endpoint,
|
|
171
|
+
protocols: args.protocols,
|
|
172
|
+
capabilityCount: args.capabilities.length,
|
|
173
|
+
pricingTierCount: args.pricing.length,
|
|
174
|
+
},
|
|
175
|
+
audit: {
|
|
176
|
+
action: 'sap_payments_register_agent',
|
|
177
|
+
registeredLocally: true,
|
|
178
|
+
hostedX402Charged: false,
|
|
179
|
+
signerBoundary: 'local-sap-payments-bridge',
|
|
180
|
+
secretMaterial: 'keypair-bytes-never-returned',
|
|
181
|
+
transactionLanded: false,
|
|
182
|
+
retrySafe: confirmation.retrySafe,
|
|
183
|
+
rule: 'The local signer submitted the SAP registry transaction, but the transaction did not confirm or the agent account was not found inside the local confirmation window.',
|
|
184
|
+
nextAction: confirmation.retrySafe
|
|
185
|
+
? 'Ask the user for confirmation, then retry sap_payments_register_agent once with the same fields and confirm: true. Do not call hosted sap_register_agent.'
|
|
186
|
+
: 'Do not retry automatically. Inspect the signature and local RPC health first.',
|
|
187
|
+
},
|
|
188
|
+
}, null, 2), { isError: true });
|
|
189
|
+
}
|
|
190
|
+
return createTextResponse(JSON.stringify({
|
|
191
|
+
success: true,
|
|
192
|
+
signature,
|
|
193
|
+
confirmationStatus: confirmation.status,
|
|
194
|
+
signerPublicKey,
|
|
195
|
+
profile: activeProfile,
|
|
196
|
+
agentPda: confirmation.agentPda,
|
|
197
|
+
agent: {
|
|
198
|
+
name: args.name,
|
|
199
|
+
description: args.description,
|
|
200
|
+
agentId: args.agentId,
|
|
201
|
+
agentUri: args.agentUri,
|
|
202
|
+
x402Endpoint: args.x402Endpoint,
|
|
203
|
+
protocols: args.protocols,
|
|
204
|
+
capabilityCount: args.capabilities.length,
|
|
205
|
+
pricingTierCount: args.pricing.length,
|
|
206
|
+
},
|
|
207
|
+
audit: {
|
|
208
|
+
action: 'sap_payments_register_agent',
|
|
209
|
+
registeredLocally: true,
|
|
210
|
+
hostedX402Charged: false,
|
|
211
|
+
signerBoundary: 'local-sap-payments-bridge',
|
|
212
|
+
secretMaterial: 'keypair-bytes-never-returned',
|
|
213
|
+
transactionLanded: true,
|
|
214
|
+
rule: 'Hosted sap_register_agent is accountless and cannot sign user-owned registry writes. This local bridge submitted the SAP registry transaction with the user-controlled profile signer.',
|
|
215
|
+
},
|
|
216
|
+
}, null, 2));
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
return createTextResponse(formatLocalRegistryError(error), { isError: true });
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
async function waitForLocalAgentRegistration(context, signature, timeoutMs = 90_000) {
|
|
224
|
+
const boundedTimeoutMs = Math.max(15_000, Math.min(timeoutMs, 180_000));
|
|
225
|
+
const startedAt = Date.now();
|
|
226
|
+
const [agentPda] = context.sapClient.agent.deriveAgent();
|
|
227
|
+
let lastStatus = 'missing';
|
|
228
|
+
while (Date.now() - startedAt < boundedTimeoutMs) {
|
|
229
|
+
const statuses = await context.connection.getSignatureStatuses([signature], { searchTransactionHistory: true });
|
|
230
|
+
const status = statuses.value[0];
|
|
231
|
+
if (status?.err) {
|
|
232
|
+
return {
|
|
233
|
+
confirmed: false,
|
|
234
|
+
retrySafe: true,
|
|
235
|
+
status: 'failed',
|
|
236
|
+
agentPda: agentPda.toBase58(),
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
lastStatus = status?.confirmationStatus ?? lastStatus;
|
|
240
|
+
const agent = await context.sapClient.agent.fetchNullable();
|
|
241
|
+
if (agent) {
|
|
242
|
+
return {
|
|
243
|
+
confirmed: true,
|
|
244
|
+
retrySafe: false,
|
|
245
|
+
status: status?.confirmationStatus ?? 'confirmed',
|
|
246
|
+
agentPda: agentPda.toBase58(),
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
await sleep(2_000);
|
|
250
|
+
}
|
|
251
|
+
return {
|
|
252
|
+
confirmed: false,
|
|
253
|
+
retrySafe: lastStatus === 'missing',
|
|
254
|
+
status: lastStatus === 'missing' ? 'expired_or_not_landed' : lastStatus,
|
|
255
|
+
agentPda: agentPda.toBase58(),
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
async function sleep(ms) {
|
|
259
|
+
await new Promise(resolve => setTimeout(resolve, ms));
|
|
260
|
+
}
|
|
105
261
|
function registerPaymentsCallExternalX402Tool(server) {
|
|
106
262
|
registerTool(server, 'sap_payments_call_external_x402', {
|
|
107
263
|
title: 'Pay And Call External x402 Endpoint',
|
|
@@ -165,7 +321,7 @@ function registerPaymentsCallExternalX402Tool(server) {
|
|
|
165
321
|
function registerPaymentsFinalizeTransactionTool(server, context) {
|
|
166
322
|
registerTool(server, 'sap_payments_finalize_transaction', {
|
|
167
323
|
title: 'Finalize Transaction With Local Signer',
|
|
168
|
-
description: 'Local non-custodial transaction finalizer for hosted SAP MCP builders. Use this when a hosted tool returns transactionBase64, transaction, or an unsigned Solana transaction. It previews, signs with the active local SAP MCP profile signer, and optionally submits through the
|
|
324
|
+
description: 'Local non-custodial transaction finalizer for hosted SAP MCP builders. Use this when a hosted tool returns transactionBase64, transaction, or an unsigned Solana transaction. It previews, signs with the active local SAP MCP profile signer, and optionally submits through the OOBE hosted submit relay for reliable confirmation. The relay only broadcasts already-signed bytes and never receives keypair material. Never create temporary signing scripts, read keypair JSON, or call hosted sap_sign_transaction for user-owned signatures. Requires confirm: true.',
|
|
169
325
|
inputSchema: {
|
|
170
326
|
transaction: {
|
|
171
327
|
type: 'string',
|
|
@@ -192,6 +348,23 @@ function registerPaymentsFinalizeTransactionTool(server, context) {
|
|
|
192
348
|
type: 'number',
|
|
193
349
|
description: 'Optional Solana RPC sendRawTransaction maxRetries value, used only when submit is true.',
|
|
194
350
|
},
|
|
351
|
+
confirmationTimeoutMs: {
|
|
352
|
+
type: 'number',
|
|
353
|
+
description: 'Optional bounded confirmation wait in milliseconds. Defaults to 90000; maximum 180000.',
|
|
354
|
+
},
|
|
355
|
+
commitment: {
|
|
356
|
+
type: 'string',
|
|
357
|
+
enum: ['processed', 'confirmed', 'finalized'],
|
|
358
|
+
description: 'Desired confirmation status before returning success. Defaults to confirmed.',
|
|
359
|
+
},
|
|
360
|
+
submitViaRelay: {
|
|
361
|
+
type: 'boolean',
|
|
362
|
+
description: 'When submit is true, defaults to true. Set false only when the user explicitly wants local RPC submission instead of the OOBE hosted submit relay.',
|
|
363
|
+
},
|
|
364
|
+
submitRelayUrl: {
|
|
365
|
+
type: 'string',
|
|
366
|
+
description: 'Optional submit relay URL. Must be HTTPS, localhost, or 127.0.0.1. Defaults to https://mcp.sap.oobeprotocol.ai/tx/submit.',
|
|
367
|
+
},
|
|
195
368
|
confirm: {
|
|
196
369
|
type: 'boolean',
|
|
197
370
|
description: 'Must be true. Confirms the user allows the local SAP MCP signer to sign this transaction.',
|
|
@@ -208,6 +381,9 @@ function registerPaymentsFinalizeTransactionTool(server, context) {
|
|
|
208
381
|
action: { type: 'string', description: 'preview-sign or preview-sign-submit.' },
|
|
209
382
|
submitted: { type: 'boolean', description: 'Whether the signed transaction was submitted to RPC.' },
|
|
210
383
|
signature: { type: 'string', description: 'Solana transaction signature when submit is true.' },
|
|
384
|
+
confirmationStatus: { type: 'string', description: 'Confirmed/finalized/failed/expired_or_not_landed status when submit is true.' },
|
|
385
|
+
retrySafe: { type: 'boolean', description: 'Whether the agent may ask the user to retry without risking a known landed duplicate.' },
|
|
386
|
+
explorerUrl: { type: 'string', description: 'Solana explorer URL for the submitted signature.' },
|
|
211
387
|
signerPublicKey: { type: 'string', description: 'Public key of the local signer that signed the transaction.' },
|
|
212
388
|
nativeTransferSol: { type: 'number', description: 'Estimated native SOL transferred by the transaction.' },
|
|
213
389
|
preview: { type: 'object', description: 'Decoded transaction preview and policy result.' },
|
|
@@ -522,6 +698,16 @@ function parseExternalInput(input) {
|
|
|
522
698
|
confirm: record.confirm === true,
|
|
523
699
|
};
|
|
524
700
|
}
|
|
701
|
+
function parseRegisterAgentInput(input) {
|
|
702
|
+
if (!input || typeof input !== 'object' || Array.isArray(input)) {
|
|
703
|
+
throw new Error('sap_payments_register_agent requires an input object.');
|
|
704
|
+
}
|
|
705
|
+
const record = input;
|
|
706
|
+
if (record.confirm !== true) {
|
|
707
|
+
throw new Error('confirm: true is required to submit a local SAP registry transaction.');
|
|
708
|
+
}
|
|
709
|
+
return record;
|
|
710
|
+
}
|
|
525
711
|
function parseProbeInput(input) {
|
|
526
712
|
if (!input || typeof input !== 'object' || Array.isArray(input)) {
|
|
527
713
|
throw new Error('sap_payments_prepare_challenge requires an input object.');
|
|
@@ -581,6 +767,10 @@ function parseFinalizeTransactionInput(input) {
|
|
|
581
767
|
submit: record.submit === true,
|
|
582
768
|
skipPreflight: record.skipPreflight,
|
|
583
769
|
maxRetries: record.maxRetries,
|
|
770
|
+
confirmationTimeoutMs: record.confirmationTimeoutMs,
|
|
771
|
+
commitment: record.commitment,
|
|
772
|
+
submitViaRelay: record.submitViaRelay !== false,
|
|
773
|
+
submitRelayUrl: record.submitRelayUrl,
|
|
584
774
|
confirm: record.confirm === true,
|
|
585
775
|
intentId: record.intentId,
|
|
586
776
|
};
|
|
@@ -602,6 +792,26 @@ function formatPaidCallError(error) {
|
|
|
602
792
|
};
|
|
603
793
|
return JSON.stringify(payload, null, 2);
|
|
604
794
|
}
|
|
795
|
+
function formatLocalRegistryError(error) {
|
|
796
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
797
|
+
const normalized = message.toLowerCase();
|
|
798
|
+
const signerMissing = normalized.includes('no local signer') || normalized.includes('no signer configured');
|
|
799
|
+
const retryable = isRetryablePaymentError(message);
|
|
800
|
+
const category = signerMissing
|
|
801
|
+
? 'local_signer_missing'
|
|
802
|
+
: 'local_registry_write_failed';
|
|
803
|
+
return JSON.stringify({
|
|
804
|
+
success: false,
|
|
805
|
+
error: message,
|
|
806
|
+
retryable,
|
|
807
|
+
category,
|
|
808
|
+
hostedX402Charged: false,
|
|
809
|
+
agentInstruction: 'For SAP agent registration from hosted-user setups, call sap_payments_register_agent from the local sap_payments bridge. Do not retry hosted sap_register_agent after hosted_local_signer_required, and do not create temporary signing scripts or read keypair JSON.',
|
|
810
|
+
nextAction: signerMissing
|
|
811
|
+
? 'Call sap_payments_readiness. If signerConfigured is false, run the SAP MCP wizard full setup or repair flow and restart the agent runtime.'
|
|
812
|
+
: 'Check the registration fields, local profile, SOL fee balance, and SAP program/RPC status. Retry sap_payments_register_agent only after explicit user confirmation.',
|
|
813
|
+
}, null, 2);
|
|
814
|
+
}
|
|
605
815
|
function formatFinalizeTransactionError(error) {
|
|
606
816
|
const message = error instanceof Error ? error.message : String(error);
|
|
607
817
|
return JSON.stringify({
|
|
@@ -611,8 +821,8 @@ function formatFinalizeTransactionError(error) {
|
|
|
611
821
|
category: message.toLowerCase().includes('no local signer') || message.toLowerCase().includes('no signer')
|
|
612
822
|
? 'local_signer_missing'
|
|
613
823
|
: 'local_transaction_finalization_failed',
|
|
614
|
-
agentInstruction: 'Do not create temporary signing scripts, do not read keypair JSON, and do not call hosted sap_sign_transaction for user-owned signatures. Use sap_payments_finalize_transaction from the local sap_payments bridge.
|
|
615
|
-
nextAction: 'Call sap_payments_readiness. If the local signer is ready, retry sap_payments_finalize_transaction with confirm: true. If readiness says missing bridge or signer, run the wizard repair flow.',
|
|
824
|
+
agentInstruction: 'Do not create temporary signing scripts, do not read keypair JSON, and do not call hosted sap_sign_transaction for user-owned signatures. Use sap_payments_finalize_transaction from the local sap_payments bridge. For submit:true, prefer the default hosted submit relay unless the user explicitly requests local RPC submission.',
|
|
825
|
+
nextAction: 'Call sap_payments_readiness. If the local signer is ready, retry sap_payments_finalize_transaction with confirm: true, submit: true, and the same transaction only when retrySafe is true or the prior attempt never submitted. If readiness says missing bridge or signer, run the wizard repair flow.',
|
|
616
826
|
}, null, 2);
|
|
617
827
|
}
|
|
618
828
|
function isRetryablePaymentError(message) {
|