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

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 CHANGED
@@ -2,6 +2,34 @@
2
2
 
3
3
  All notable changes to this project are documented in this file.
4
4
 
5
+ ## 0.9.16 - 2026-07-21
6
+
7
+ ### Added
8
+
9
+ - Added free `sap_agent_context`, a compact hosted orientation tool for exact
10
+ wallet/agent lookups and first-page agent discovery. It gives agents a
11
+ low-friction way to understand SAP state before running paid/broad calls.
12
+ - Added free `sap_agent_next_action`, a routing resolver for common SAP MCP
13
+ errors and partial results. It tells agents whether to use hosted reads,
14
+ `sap_payments_*`, `sap_runtime_repair_plan`, unsigned transaction
15
+ finalization, or signature verification before retrying.
16
+
17
+ ### Improved
18
+
19
+ - Made exact base SAP registry reads free by default:
20
+ `sap_get_agent`, `sap_get_agent_profile`, `sap_get_agent_stats`,
21
+ `sap_get_global_state`, and `sap_is_agent_active`.
22
+ - Made `sap_list_agents` free for compact orientation calls while keeping
23
+ broad, hydrated, full, and protocol-indexed directory scans paid.
24
+ - Added cache and singleflight protection around compact directory reads so
25
+ hosted discovery remains faster under repeated agent/runtime probes.
26
+ - Updated agent bootstrap guidance, SAP skills, payment docs, and tool
27
+ reference files so agents start with context, resolve routing before retrying,
28
+ avoid temporary signing scripts, and use local `sap_payments_*` tools for
29
+ user-signed writes.
30
+ - Expanded pricing tests and server metadata tests to cover the new free
31
+ context/resolver tools and conditional-free discovery behavior.
32
+
5
33
  ## 0.9.15 - 2026-07-20
6
34
 
7
35
  ### Added
package/README.md CHANGED
@@ -134,7 +134,7 @@ For paid/write hosted tools, add the local non-custodial payment bridge as well:
134
134
  ```toml
135
135
  [mcp_servers.sap_payments]
136
136
  command = "npx"
137
- args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.15", "sap-mcp-server"]
137
+ args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.16", "sap-mcp-server"]
138
138
  startup_timeout_sec = 300
139
139
  tool_timeout_sec = 300
140
140
 
@@ -152,7 +152,7 @@ Codex supports Streamable HTTP MCP servers with URL-based entries in `config.tom
152
152
  ```toml
153
153
  [mcp_servers.sap]
154
154
  command = "npx"
155
- args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.15", "sap-mcp-server"]
155
+ args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.16", "sap-mcp-server"]
156
156
 
157
157
  [mcp_servers.sap.env]
158
158
  SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE = "false"
@@ -45,7 +45,7 @@ url = "https://mcp.sap.oobeprotocol.ai/mcp"
45
45
 
46
46
  [mcp_servers.sap_payments]
47
47
  command = "npx.cmd"
48
- args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.15", "sap-mcp-server"]
48
+ args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.16", "sap-mcp-server"]
49
49
  startup_timeout_sec = 300
50
50
  tool_timeout_sec = 300
51
51
 
@@ -65,7 +65,7 @@ the complete local stdio SAP MCP process instead of using the hosted endpoint, u
65
65
  ```toml
66
66
  [mcp_servers.sap]
67
67
  command = "npx.cmd"
68
- args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.15", "sap-mcp-server"]
68
+ args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.16", "sap-mcp-server"]
69
69
 
70
70
  [mcp_servers.sap.env]
71
71
  SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE = "false"
@@ -201,7 +201,7 @@ For Claude Code, use the official MCP CLI pattern:
201
201
 
202
202
  ```bash
203
203
  claude mcp add --transport http sap https://mcp.sap.oobeprotocol.ai/mcp
204
- claude mcp add --transport stdio sap_payments -- npx --yes --package @oobe-protocol-labs/sap-mcp-server@0.9.15 sap-mcp-server
204
+ claude mcp add --transport stdio sap_payments -- npx --yes --package @oobe-protocol-labs/sap-mcp-server@0.9.16 sap-mcp-server
205
205
  ```
206
206
 
207
207
  Set `SAP_MCP_PAYMENTS_BRIDGE_ONLY=true` and `SAP_ALLOWED_TOOLS=all` in the
@@ -106,7 +106,7 @@ url = "https://mcp.sap.oobeprotocol.ai/mcp"
106
106
 
107
107
  [mcp_servers.sap_payments]
108
108
  command = "npx"
109
- args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.15", "sap-mcp-server"]
109
+ args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.16", "sap-mcp-server"]
110
110
  startup_timeout_sec = 300
111
111
  tool_timeout_sec = 300
112
112
 
@@ -138,7 +138,7 @@ Claude Desktop uses a root `mcpServers` JSON object:
138
138
  },
139
139
  "sap_payments": {
140
140
  "command": "npx",
141
- "args": ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.15", "sap-mcp-server"],
141
+ "args": ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.16", "sap-mcp-server"],
142
142
  "env": {
143
143
  "SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE": "false",
144
144
  "SAP_MCP_PAYMENTS_BRIDGE_ONLY": "true",
@@ -170,7 +170,7 @@ Hermes global `mcp.json` uses flat server entries:
170
170
  },
171
171
  "sap_payments": {
172
172
  "command": "npx",
173
- "args": ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.15", "sap-mcp-server"],
173
+ "args": ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.16", "sap-mcp-server"],
174
174
  "env": {
175
175
  "SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE": "false",
176
176
  "SAP_MCP_PAYMENTS_BRIDGE_ONLY": "true",
@@ -193,7 +193,7 @@ mcp_servers:
193
193
  args:
194
194
  - "--yes"
195
195
  - "--package"
196
- - "@oobe-protocol-labs/sap-mcp-server@0.9.15"
196
+ - "@oobe-protocol-labs/sap-mcp-server@0.9.16"
197
197
  - "sap-mcp-server"
198
198
  env:
199
199
  SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE: "false"
@@ -215,7 +215,7 @@ OpenClaw MCP JSON uses the same root `mcpServers` structure as generic MCP clien
215
215
  },
216
216
  "sap_payments": {
217
217
  "command": "npx",
218
- "args": ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.15", "sap-mcp-server"],
218
+ "args": ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.16", "sap-mcp-server"],
219
219
  "env": {
220
220
  "SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE": "false",
221
221
  "SAP_MCP_PAYMENTS_BRIDGE_ONLY": "true",
@@ -66,7 +66,7 @@ export declare const MCP_SERVER_ICON_URL = "https://mcp.sap.oobeprotocol.ai/favi
66
66
  /**
67
67
  * Shared mcp server version definition used by the SAP MCP runtime.
68
68
  */
69
- export declare const MCP_SERVER_VERSION = "0.9.15";
69
+ export declare const MCP_SERVER_VERSION = "0.9.16";
70
70
  /**
71
71
  * SAP protocol treasury that should receive protocol-owned registration fees.
72
72
  */
@@ -77,7 +77,7 @@ export const MCP_SERVER_ICON_URL = 'https://mcp.sap.oobeprotocol.ai/favicon.png'
77
77
  /**
78
78
  * Shared mcp server version definition used by the SAP MCP runtime.
79
79
  */
80
- export const MCP_SERVER_VERSION = '0.9.15';
80
+ export const MCP_SERVER_VERSION = '0.9.16';
81
81
  /**
82
82
  * SAP protocol treasury that should receive protocol-owned registration fees.
83
83
  */
@@ -36,6 +36,7 @@ export interface PricingCatalog {
36
36
  }>;
37
37
  toolSets: {
38
38
  free: string[];
39
+ conditionalFree: string[];
39
40
  readPremium: string[];
40
41
  builders: string[];
41
42
  valueActions: string[];
@@ -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,WAAW,cAAc;IAC7B,MAAM,EAAE,0BAA0B,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC;IACX,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE;QACzB,eAAe,EAAE,OAAO,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC,CAAC;IACH,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,mBAAmB,EAAE,MAAM,EAAE,CAAC;KAC/B,CAAC;IACF,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;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;AAmNN;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,wBAAwB,GAAG,cAAc,CA4DpF;AAED;;;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"}
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,WAAW,cAAc;IAC7B,MAAM,EAAE,0BAA0B,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC;IACX,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE;QACzB,eAAe,EAAE,OAAO,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC,CAAC;IACH,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,YAAY,EAAE,MAAM,EAAE,CAAC;QACvB,mBAAmB,EAAE,MAAM,EAAE,CAAC;KAC/B,CAAC;IACF,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;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;AAsON;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,wBAAwB,GAAG,cAAc,CAoEpF;AAED;;;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,CAkDb;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,wBAAwB,EAAE,aAAa,CAAC,GAAG,WAAW,CAoClH;AA6BD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD"}
@@ -17,9 +17,16 @@ const FREE_MCP_METHODS = new Set([
17
17
  const FREE_TOOLS = new Set([
18
18
  'sap_agent_start',
19
19
  'sap_agent_runtime_status',
20
+ 'sap_agent_next_action',
20
21
  'sap_pricing_catalog',
21
22
  'sap_protocol_invariants',
22
23
  'sap_agent_identity_plan',
24
+ 'sap_agent_context',
25
+ 'sap_get_agent',
26
+ 'sap_get_agent_profile',
27
+ 'sap_get_agent_stats',
28
+ 'sap_get_global_state',
29
+ 'sap_is_agent_active',
23
30
  'sol_get_balance',
24
31
  'spl-token_getBalance',
25
32
  'spl-token_getTokenAccounts',
@@ -62,9 +69,16 @@ const FREE_TOOLS = new Set([
62
69
  const STRICT_FREE_TOOLS = new Set([
63
70
  'sap_agent_start',
64
71
  'sap_agent_runtime_status',
72
+ 'sap_agent_next_action',
65
73
  'sap_pricing_catalog',
66
74
  'sap_protocol_invariants',
67
75
  'sap_agent_identity_plan',
76
+ 'sap_agent_context',
77
+ 'sap_get_agent',
78
+ 'sap_get_agent_profile',
79
+ 'sap_get_agent_stats',
80
+ 'sap_get_global_state',
81
+ 'sap_is_agent_active',
68
82
  'sap_profile_current',
69
83
  'sap_profile_list',
70
84
  'sap_profile_public_key',
@@ -92,7 +106,6 @@ const STRICT_FREE_TOOLS = new Set([
92
106
  const READ_PREMIUM_TOOLS = new Set([
93
107
  'sap_list_all_agents',
94
108
  'sap_discover_agents',
95
- 'sap_list_agents',
96
109
  'sap_network_stats',
97
110
  'sap_fetch_tool',
98
111
  'sap_sns_resolve_domain',
@@ -125,6 +138,10 @@ const READ_PREMIUM_TOOLS = new Set([
125
138
  'das_getAssetsByCollection',
126
139
  'das_searchAssets',
127
140
  ]);
141
+ const CONDITIONAL_FREE_TOOLS = new Set([
142
+ 'sap_list_agents',
143
+ ]);
144
+ const FREE_DIRECTORY_LIMIT = 20;
128
145
  const BUILDER_TOOLS = new Set([
129
146
  'sap_sns_batch_check_domains',
130
147
  'sap_sns_validate_records',
@@ -217,21 +234,25 @@ export function buildPricingCatalog(config) {
217
234
  tiers: {
218
235
  free: {
219
236
  paymentRequired: false,
220
- pricingRule: 'No x402/pay.sh payment challenge. These calls are for bootstrap, status, schema discovery, local payment bridge control, and low-cost public balance checks.',
237
+ pricingRule: 'No x402/pay.sh payment challenge. These calls are for bootstrap, status, schema discovery, exact SAP agent/profile reads, local payment bridge control, low-cost public balance checks, and compact orientation lists.',
221
238
  examples: [
222
239
  'initialize',
223
240
  'tools/list',
224
241
  'sap_agent_start',
225
242
  'sap_agent_runtime_status',
243
+ 'sap_agent_context',
244
+ 'sap_agent_next_action',
226
245
  'sap_pricing_catalog',
246
+ 'sap_get_agent_profile',
227
247
  'sap_payments_readiness',
248
+ 'sap_list_agents limit<=20 view=compact',
228
249
  ],
229
250
  },
230
251
  'read-premium': {
231
252
  paymentRequired: true,
232
253
  priceUsd: clampPrice(config.prices.readPremiumUsd, config),
233
- pricingRule: 'Flat premium read/discovery fee per tool call. Narrow filters, small limits, and pagination are expected.',
234
- examples: ['sap_discover_agents', 'sap_list_all_agents', 'jupiter_getQuote', 'pyth_getPrice', 'das_getAsset'],
254
+ pricingRule: 'Flat premium read/discovery fee per tool call. Broad scans, enriched directory views, analytics, market data, and large pages are paid. Narrow filters, small limits, and pagination are expected.',
255
+ examples: ['sap_discover_agents', 'sap_list_all_agents', 'sap_list_agents view=full', 'jupiter_getQuote', 'pyth_getPrice', 'das_getAsset'],
235
256
  },
236
257
  builder: {
237
258
  paymentRequired: true,
@@ -253,6 +274,7 @@ export function buildPricingCatalog(config) {
253
274
  },
254
275
  toolSets: {
255
276
  free: [...freeTools].sort(),
277
+ conditionalFree: [...CONDITIONAL_FREE_TOOLS].sort(),
256
278
  readPremium: [...READ_PREMIUM_TOOLS].sort(),
257
279
  builders: [...BUILDER_TOOLS].sort(),
258
280
  valueActions: [...VALUE_ACTION_TOOLS].sort(),
@@ -260,6 +282,9 @@ export function buildPricingCatalog(config) {
260
282
  },
261
283
  runtimeRules: [
262
284
  'The x402 Payment Required challenge is the final source of truth for paid hosted calls.',
285
+ `Exact SAP agent/profile reads are free. Use sap_agent_context, sap_get_agent, sap_get_agent_profile, sap_get_agent_stats, sap_is_agent_active, and sap_get_global_state before broad paid discovery.`,
286
+ 'Call sap_agent_next_action before retrying payment_required, hosted_local_signer_required, transient RPC failures, missing sap_payments, or submitted signatures that have not confirmed.',
287
+ `sap_list_agents is free only for compact orientation pages with limit <= ${FREE_DIRECTORY_LIMIT}; larger pages, full hydration, protocol index summaries, and sap_discover_agents/sap_list_all_agents are read-premium.`,
263
288
  'Use sap_payments_call_paid_tool for hosted paid tools when the runtime does not replay x402 natively.',
264
289
  'Use sap_payments_call_external_x402 for external HTTP x402 agents discovered through SAP registry metadata.',
265
290
  'Use hosted unsigned builders plus sap_payments_finalize_transaction for hosted non-custodial transaction flows.',
@@ -314,6 +339,14 @@ function toPaidTier(tier) {
314
339
  * @description Classifies and prices a single MCP tool invocation.
315
340
  */
316
341
  export function priceToolCall(toolCall, config) {
342
+ if (isConditionalFreeToolCall(toolCall)) {
343
+ return {
344
+ toolName: toolCall.toolName,
345
+ tier: 'free',
346
+ priceUsd: 0,
347
+ reason: 'free compact orientation read',
348
+ };
349
+ }
317
350
  const tier = classifyTool(toolCall.toolName, config);
318
351
  if (tier === 'free') {
319
352
  return {
@@ -362,6 +395,9 @@ export function classifyTool(toolName, config) {
362
395
  if (READ_PREMIUM_TOOLS.has(toolName)) {
363
396
  return 'read-premium';
364
397
  }
398
+ if (CONDITIONAL_FREE_TOOLS.has(toolName)) {
399
+ return 'read-premium';
400
+ }
365
401
  if (BUILDER_TOOLS.has(toolName)) {
366
402
  return 'builder';
367
403
  }
@@ -380,6 +416,30 @@ export function classifyTool(toolName, config) {
380
416
  }
381
417
  return 'read-premium';
382
418
  }
419
+ function isConditionalFreeToolCall(toolCall) {
420
+ if (toolCall.toolName !== 'sap_list_agents') {
421
+ return false;
422
+ }
423
+ const args = isRecord(toolCall.arguments) ? toolCall.arguments : {};
424
+ const limit = readOptionalNumber(args.limit) ?? FREE_DIRECTORY_LIMIT;
425
+ const view = typeof args.view === 'string' ? args.view : undefined;
426
+ const hydrate = args.hydrate === true;
427
+ const includeProtocolIndexes = args.includeProtocolIndexes === true;
428
+ return limit <= FREE_DIRECTORY_LIMIT
429
+ && !hydrate
430
+ && view !== 'full'
431
+ && !includeProtocolIndexes;
432
+ }
433
+ function readOptionalNumber(value) {
434
+ if (typeof value === 'number' && Number.isFinite(value)) {
435
+ return value;
436
+ }
437
+ if (typeof value === 'string' && value.trim().length > 0) {
438
+ const parsed = Number(value);
439
+ return Number.isFinite(parsed) ? parsed : undefined;
440
+ }
441
+ return undefined;
442
+ }
383
443
  /**
384
444
  * @name formatUsdPrice
385
445
  * @description Formats a decimal USD price for x402 money parsing while preserving small prices.
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"agent-start-tool.d.ts","sourceRoot":"","sources":["../../src/tools/agent-start-tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAIxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAQtD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAsHnF"}
1
+ {"version":3,"file":"agent-start-tool.d.ts","sourceRoot":"","sources":["../../src/tools/agent-start-tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAIxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAQtD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAgLnF"}
@@ -115,6 +115,58 @@ export function registerAgentStartTool(server, context) {
115
115
  openWorldHint: false,
116
116
  },
117
117
  }, async () => createStructuredJsonResponse({ ...buildPricingCatalog(context.config.monetization) }));
118
+ registerTool(server, 'sap_agent_next_action', {
119
+ title: 'Resolve SAP MCP Next Action',
120
+ description: 'Free routing resolver for SAP MCP errors and partial results. Use this before retrying after payment_required, hosted_local_signer_required, BlockhashNotFound, missing sap_payments, timeout, or a submitted signature that has not confirmed.',
121
+ inputSchema: {
122
+ intent: {
123
+ type: 'string',
124
+ enum: ['connection', 'paid-call', 'registry-write', 'transaction-finalize', 'escrow', 'identity', 'general'],
125
+ description: 'Current user intent or workflow area.',
126
+ },
127
+ toolName: {
128
+ type: 'string',
129
+ description: 'Tool that produced the error or partial result, for example sap_register_agent, sap_update_agent, or sap_create_escrow_v2.',
130
+ },
131
+ errorCode: {
132
+ type: 'string',
133
+ description: 'Machine error code when available, for example hosted_local_signer_required, payment_required, BlockhashNotFound, or expired_or_not_landed.',
134
+ },
135
+ errorMessage: {
136
+ type: 'string',
137
+ description: 'Human or structured error message returned by the runtime, hosted server, local bridge, or wallet/RPC layer.',
138
+ },
139
+ hasSignature: {
140
+ type: 'boolean',
141
+ description: 'True when a transaction signature was already produced or submitted. This prevents unsafe duplicate retries.',
142
+ },
143
+ paymentRequired: {
144
+ type: 'boolean',
145
+ description: 'True when the previous response was an x402/pay.sh payment challenge.',
146
+ },
147
+ },
148
+ outputSchema: {
149
+ type: 'object',
150
+ properties: {
151
+ success: { type: 'boolean', description: 'Whether the resolver produced guidance.' },
152
+ classification: { type: 'string', description: 'Normalized error or routing classification.' },
153
+ retryable: { type: 'boolean', description: 'Whether the underlying issue can generally be retried.' },
154
+ safeToRetryNow: { type: 'boolean', description: 'Whether the agent should retry immediately without risking duplicate writes or duplicate user charges.' },
155
+ paymentCharged: { type: 'string', description: 'Best-effort payment status: no, unknown, possible, or yes.' },
156
+ nextTool: { type: 'string', description: 'Exact preferred next SAP MCP tool, or null when user/runtime action is needed.' },
157
+ nextAction: { type: 'string', description: 'Concrete next action for the agent.' },
158
+ userMessage: { type: 'string', description: 'Short user-facing explanation.' },
159
+ forbiddenActions: { type: 'array', description: 'Actions the agent must not take for this case.', items: { type: 'string' } },
160
+ },
161
+ required: ['success', 'classification', 'retryable', 'safeToRetryNow', 'paymentCharged', 'nextTool', 'nextAction', 'userMessage', 'forbiddenActions'],
162
+ },
163
+ annotations: {
164
+ readOnlyHint: true,
165
+ destructiveHint: false,
166
+ idempotentHint: true,
167
+ openWorldHint: false,
168
+ },
169
+ }, async (input) => createStructuredJsonResponse(buildAgentNextActionPayload(parseNextActionInput(input))));
118
170
  }
119
171
  function parseGoal(input) {
120
172
  if (!input || typeof input !== 'object' || Array.isArray(input)) {
@@ -136,6 +188,119 @@ function parseStatusIntent(input) {
136
188
  }
137
189
  return 'general';
138
190
  }
191
+ function parseNextActionInput(input) {
192
+ const record = input && typeof input === 'object' && !Array.isArray(input)
193
+ ? input
194
+ : {};
195
+ return {
196
+ intent: parseStatusIntent(record),
197
+ toolName: readOptionalString(record.toolName),
198
+ errorCode: readOptionalString(record.errorCode),
199
+ errorMessage: readOptionalString(record.errorMessage),
200
+ hasSignature: record.hasSignature === true,
201
+ paymentRequired: record.paymentRequired === true,
202
+ };
203
+ }
204
+ function readOptionalString(value) {
205
+ return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;
206
+ }
207
+ function buildAgentNextActionPayload(input) {
208
+ const combined = `${input.toolName ?? ''} ${input.errorCode ?? ''} ${input.errorMessage ?? ''}`.toLowerCase();
209
+ const toolName = input.toolName?.toLowerCase() ?? '';
210
+ const baseForbidden = [
211
+ 'Do not read or print keypair JSON.',
212
+ 'Do not create temporary signing scripts.',
213
+ 'Do not generate client-side MCP session IDs.',
214
+ ];
215
+ if (input.hasSignature || containsAny(combined, ['signature', 'expired_or_not_landed', 'not confirm', 'not confirmed', 'confirmation timeout'])) {
216
+ return nextAction({
217
+ classification: 'signature_status_unknown',
218
+ retryable: true,
219
+ safeToRetryNow: false,
220
+ paymentCharged: input.paymentRequired ? 'possible' : 'unknown',
221
+ nextTool: 'sap_payments_finalize_transaction',
222
+ nextAction: 'Verify the submitted signature or transaction status before creating a fresh write. Retry only after confirmation that the previous transaction expired or failed.',
223
+ userMessage: 'A transaction may already have been submitted, so I should verify its status before retrying to avoid duplicate writes.',
224
+ forbiddenActions: [...baseForbidden, 'Do not retry a submitted write until the signature status is known.'],
225
+ });
226
+ }
227
+ if (input.paymentRequired || containsAny(combined, ['payment_required', 'payment required', '402'])) {
228
+ return nextAction({
229
+ classification: 'x402_challenge_required',
230
+ retryable: true,
231
+ safeToRetryNow: true,
232
+ paymentCharged: 'no',
233
+ nextTool: 'sap_payments_call_paid_tool',
234
+ nextAction: 'Call the same hosted tool through sap_payments_call_paid_tool with a maxPriceUsd cap, so the local bridge signs a fresh x402 payment and replays the tool call.',
235
+ userMessage: 'This is a normal x402 challenge, not a failure. I should route it through the local payment bridge.',
236
+ forbiddenActions: [...baseForbidden, 'Do not hand-roll PAYMENT-SIGNATURE headers for hosted SAP tools.'],
237
+ });
238
+ }
239
+ if (containsAny(combined, ['hosted_local_signer_required', 'local signer required', 'hosted server cannot sign', 'no signer configured'])) {
240
+ return nextAction({
241
+ classification: 'local_signer_route_required',
242
+ retryable: false,
243
+ safeToRetryNow: false,
244
+ paymentCharged: 'no',
245
+ nextTool: localSignerToolFor(toolName, input.intent),
246
+ nextAction: 'Switch to the local sap_payments route for this wallet-owned write. Do not retry the hosted accountless write.',
247
+ userMessage: 'The hosted server is non-custodial and correctly refused to sign. I should use the local signing bridge for this write.',
248
+ forbiddenActions: [...baseForbidden, 'Do not retry the hosted direct write after hosted_local_signer_required.'],
249
+ });
250
+ }
251
+ if (containsAny(combined, ['blockhashnotfound', 'node is behind', 'minimum context slot', 'fetch failed', 'transaction_simulation_failed', 'gateway timeout', 'econnreset', 'etimedout'])) {
252
+ return nextAction({
253
+ classification: 'transient_solana_rpc',
254
+ retryable: true,
255
+ safeToRetryNow: true,
256
+ paymentCharged: 'unknown',
257
+ nextTool: input.intent === 'transaction-finalize' ? 'sap_payments_finalize_transaction' : 'sap_payments_call_paid_tool',
258
+ nextAction: 'Retry with a fresh blockhash/challenge through the local bridge. Keep the same user intent and maxPriceUsd cap, and stop if a transaction signature is produced.',
259
+ userMessage: 'This looks like a temporary Solana RPC or blockhash issue. I can retry safely with a fresh challenge unless a signature was already submitted.',
260
+ forbiddenActions: [...baseForbidden, 'Do not reuse an old signed x402 payload.'],
261
+ });
262
+ }
263
+ if (containsAny(combined, ['sap_payments', 'not exposed', 'not injected', 'cannot find module', 'yaml parse', 'connection closes', 'failed during startup', 'tool registry'])) {
264
+ return nextAction({
265
+ classification: 'local_bridge_runtime_missing',
266
+ retryable: false,
267
+ safeToRetryNow: false,
268
+ paymentCharged: 'no',
269
+ nextTool: 'sap_runtime_repair_plan',
270
+ nextAction: 'Run the SAP runtime repair plan, repair the selected agent runtime, then restart the runtime so it reloads the sap_payments tool namespace.',
271
+ userMessage: 'The hosted server can be connected while the local payment bridge is not loaded. Repair the runtime config and restart the agent app.',
272
+ forbiddenActions: [...baseForbidden, 'Do not say paid writes are ready until sap_payments_readiness succeeds.'],
273
+ });
274
+ }
275
+ return nextAction({
276
+ classification: 'general_sap_mcp_routing',
277
+ retryable: false,
278
+ safeToRetryNow: false,
279
+ paymentCharged: 'unknown',
280
+ nextTool: 'sap_agent_runtime_status',
281
+ nextAction: 'Call sap_agent_runtime_status with the closest intent, then choose hosted reads, sap_payments paid calls, local registry writes, or unsigned builder finalization from its routing table.',
282
+ userMessage: 'I should inspect the SAP routing table before choosing the next tool.',
283
+ forbiddenActions: baseForbidden,
284
+ });
285
+ }
286
+ function containsAny(value, needles) {
287
+ return needles.some((needle) => value.includes(needle));
288
+ }
289
+ function localSignerToolFor(toolName, intent) {
290
+ if (toolName.includes('register')) {
291
+ return 'sap_payments_register_agent';
292
+ }
293
+ if (toolName.includes('update')) {
294
+ return 'sap_payments_update_agent';
295
+ }
296
+ if (toolName.includes('escrow') || intent === 'escrow') {
297
+ return 'sap_escrow_build_create_transaction';
298
+ }
299
+ return 'sap_payments_readiness';
300
+ }
301
+ function nextAction(payload) {
302
+ return { success: true, ...payload };
303
+ }
139
304
  function buildRuntimeStatusPayload(context, intent) {
140
305
  const signerConfigured = Boolean(context.signer || context.config.walletPath || context.config.externalSignerUrl);
141
306
  const hostedMode = context.config.mode === 'hosted-api';
@@ -178,7 +343,16 @@ function buildRuntimeStatusPayload(context, intent) {
178
343
  routing: {
179
344
  reads: {
180
345
  route: 'hosted sap',
181
- rule: 'Use hosted reads directly with exact schemas and narrow filters. Use cursors/pagination where returned.',
346
+ rule: 'Use hosted reads directly with exact schemas. Exact SAP profile reads and compact orientation pages are free; broad discovery/enrichment is paid and should use cursors/pagination.',
347
+ freeOrientation: [
348
+ 'sap_agent_context',
349
+ 'sap_get_agent',
350
+ 'sap_get_agent_profile',
351
+ 'sap_get_agent_stats',
352
+ 'sap_is_agent_active',
353
+ 'sap_get_global_state',
354
+ 'sap_list_agents with limit <= 20, view: compact, includeProtocolIndexes: false',
355
+ ],
182
356
  },
183
357
  paidHostedTools: {
184
358
  route: 'local sap_payments -> sap_payments_call_paid_tool',
@@ -281,6 +455,13 @@ function buildAgentStartPayload(context, goal) {
281
455
  required: true,
282
456
  reason: 'Get the concise hosted/accountless/local-bridge truth table before answering connection or write-readiness questions.',
283
457
  },
458
+ {
459
+ namespace: 'hosted sap',
460
+ tool: 'sap_agent_context',
461
+ arguments: { limit: 10 },
462
+ required: false,
463
+ reason: 'Get free compact SAP agent context and routing guidance before paid discovery or broad scans.',
464
+ },
284
465
  {
285
466
  namespace: 'hosted sap',
286
467
  tool: 'sap_skills_bundle',
@@ -318,6 +499,12 @@ function buildAgentStartPayload(context, goal) {
318
499
  required: false,
319
500
  reason: 'If sap_payments is missing, returns the pinned repair command and OS-specific restart instructions.',
320
501
  },
502
+ {
503
+ namespace: 'hosted sap',
504
+ tool: 'sap_agent_next_action',
505
+ required: false,
506
+ reason: 'Classify payment_required, hosted_local_signer_required, transient RPC failures, or missing sap_payments before retrying.',
507
+ },
321
508
  {
322
509
  namespace: 'hosted sap',
323
510
  tool: 'sap_profile_current',
@@ -341,10 +528,12 @@ function buildAgentStartPayload(context, goal) {
341
528
  'Use exact tool names returned by tools/list; do not rewrite hyphens to underscores.',
342
529
  'For a simple connection question, answer briefly. Do not dump the full tool catalog, categories, or every protocol unless the user asks what tools are available.',
343
530
  'For connection/readiness questions, call sap_agent_runtime_status and use its hosted/localBridge/routing fields as the source of truth.',
531
+ 'When an error or partial result appears, call sap_agent_next_action before retrying. It classifies x402 challenges, hosted local-signer guards, transient RPC failures, missing bridge tools, and submitted signatures.',
344
532
  'Hosted SAP MCP is accountless and non-custodial. OOBE never has user keypair bytes.',
345
533
  'Do not report hosted profile default as the user local profile.',
346
534
  'For local wallet/profile questions, prefer sap_payments_profile_current when available.',
347
535
  'For hosted SAP agent discovery, prefer sap_discover_agents with query, wallet, agentPda, protocol, capability, capabilities, hasX402Endpoint, small limit, and pagination.nextCursor before broad scans.',
536
+ 'For initial orientation, use free exact/base reads first: sap_agent_context, sap_get_agent, sap_get_agent_profile, sap_get_agent_stats, sap_is_agent_active, sap_get_global_state, or sap_list_agents with limit <= 20 and view: compact. Use paid sap_discover_agents or sap_list_all_agents only when the user needs search, enrichment, analytics, or larger pages.',
348
537
  'If a capability-filtered SAP agent lookup returns zero rows, retry with query or wallet before saying the agent is absent because secondary indexes can lag AgentAccount rows.',
349
538
  'For free reads, call hosted tools directly.',
350
539
  'For paid/write calls, use sap_payments_call_paid_tool from the local sap_payments bridge when available.',