@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 +28 -0
- package/README.md +2 -2
- package/USER_DOCS/04_CLIENT_CONFIGS.md +3 -3
- package/USER_DOCS/06_DESKTOP_GUI_WIZARD.md +5 -5
- package/dist/core/constants.d.ts +1 -1
- package/dist/core/constants.js +1 -1
- package/dist/payments/pricing.d.ts +1 -0
- package/dist/payments/pricing.d.ts.map +1 -1
- package/dist/payments/pricing.js +64 -4
- package/dist/payments/pricing.js.map +1 -1
- package/dist/tools/agent-start-tool.d.ts.map +1 -1
- package/dist/tools/agent-start-tool.js +190 -1
- package/dist/tools/agent-start-tool.js.map +1 -1
- package/dist/tools/sap-sdk-tools.d.ts.map +1 -1
- package/dist/tools/sap-sdk-tools.js +178 -10
- package/dist/tools/sap-sdk-tools.js.map +1 -1
- package/docs/06_PAYMENTS_X402_AND_PAYSH.md +18 -2
- package/docs/07_ENDPOINTS_AND_CLIENTS.md +1 -1
- package/docs/09_TOOLS_SKILLS_AND_AGENT_GUIDE.md +16 -5
- package/docs/14_DESKTOP_WIZARD_RELEASE.md +3 -3
- package/package.json +4 -1
- package/server.json +3 -3
- package/skills/README.md +10 -2
- package/skills/sap-agent-registry/SKILL.md +21 -6
- package/skills/sap-discovery-indexing/SKILL.md +11 -0
- package/skills/sap-mcp/SKILL.md +22 -12
- package/skills/sap-mcp/TOOL_REFERENCE.md +16 -6
- package/skills/sap-operations/SKILL.md +11 -0
- package/skills/sap-payments-x402/SKILL.md +11 -3
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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",
|
package/dist/core/constants.d.ts
CHANGED
|
@@ -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.
|
|
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
|
*/
|
package/dist/core/constants.js
CHANGED
|
@@ -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.
|
|
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
|
*/
|
|
@@ -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;
|
|
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"}
|
package/dist/payments/pricing.js
CHANGED
|
@@ -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,
|
|
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,
|
|
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
|
|
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.',
|