@oobe-protocol-labs/sap-mcp-server 0.2.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/.env.example +3 -0
  2. package/CHANGELOG.md +238 -1
  3. package/README.md +64 -1
  4. package/USER_DOCS/00_START_HERE.md +23 -1
  5. package/USER_DOCS/01_HOSTED_REMOTE_MCP.md +55 -0
  6. package/USER_DOCS/03_PAYMENTS_X402_PAYSH.md +63 -7
  7. package/USER_DOCS/04_CLIENT_CONFIGS.md +164 -11
  8. package/USER_DOCS/06_DESKTOP_GUI_WIZARD.md +262 -0
  9. package/dist/adapters/mcp/sdk-compat.d.ts.map +1 -1
  10. package/dist/adapters/mcp/sdk-compat.js +32 -18
  11. package/dist/adapters/mcp/sdk-compat.js.map +1 -1
  12. package/dist/config/mcp-client-injection.d.ts +72 -2
  13. package/dist/config/mcp-client-injection.d.ts.map +1 -1
  14. package/dist/config/mcp-client-injection.js +691 -15
  15. package/dist/config/mcp-client-injection.js.map +1 -1
  16. package/dist/config/setup.js +1 -1
  17. package/dist/config/setup.js.map +1 -1
  18. package/dist/config/wizard.d.ts.map +1 -1
  19. package/dist/config/wizard.js +164 -85
  20. package/dist/config/wizard.js.map +1 -1
  21. package/dist/core/constants.d.ts +1 -1
  22. package/dist/core/constants.js +1 -1
  23. package/dist/core/logger.js +1 -1
  24. package/dist/payments/facilitator-rpc-fallback.d.ts +43 -0
  25. package/dist/payments/facilitator-rpc-fallback.d.ts.map +1 -0
  26. package/dist/payments/facilitator-rpc-fallback.js +228 -0
  27. package/dist/payments/facilitator-rpc-fallback.js.map +1 -0
  28. package/dist/payments/json-rpc.d.ts.map +1 -1
  29. package/dist/payments/json-rpc.js +2 -1
  30. package/dist/payments/json-rpc.js.map +1 -1
  31. package/dist/payments/monetization-gate.d.ts +43 -2
  32. package/dist/payments/monetization-gate.d.ts.map +1 -1
  33. package/dist/payments/monetization-gate.js +618 -9
  34. package/dist/payments/monetization-gate.js.map +1 -1
  35. package/dist/payments/oobe-facilitator-server.d.ts +12 -1
  36. package/dist/payments/oobe-facilitator-server.d.ts.map +1 -1
  37. package/dist/payments/oobe-facilitator-server.js +109 -8
  38. package/dist/payments/oobe-facilitator-server.js.map +1 -1
  39. package/dist/payments/pay-sh-spec.js +1 -1
  40. package/dist/payments/pricing.d.ts.map +1 -1
  41. package/dist/payments/pricing.js +1 -0
  42. package/dist/payments/pricing.js.map +1 -1
  43. package/dist/payments/usage-ledger.d.ts +10 -0
  44. package/dist/payments/usage-ledger.d.ts.map +1 -1
  45. package/dist/payments/usage-ledger.js +51 -0
  46. package/dist/payments/usage-ledger.js.map +1 -1
  47. package/dist/payments/x402-paid-call.d.ts +53 -0
  48. package/dist/payments/x402-paid-call.d.ts.map +1 -0
  49. package/dist/payments/x402-paid-call.js +370 -0
  50. package/dist/payments/x402-paid-call.js.map +1 -0
  51. package/dist/prompts/context/sap-agent-context.prompt.js +33 -6
  52. package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -1
  53. package/dist/prompts/developer/debug-sap-error.prompt.js +1 -1
  54. package/dist/prompts/developer/debug-sap-error.prompt.js.map +1 -1
  55. package/dist/prompts/developer/generate-sap-integration.prompt.js +6 -2
  56. package/dist/prompts/developer/generate-sap-integration.prompt.js.map +1 -1
  57. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js +1 -1
  58. package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js.map +1 -1
  59. package/dist/prompts/execution-proof/verify-execution-proof.prompt.js +1 -1
  60. package/dist/prompts/execution-proof/verify-execution-proof.prompt.js.map +1 -1
  61. package/dist/prompts/payments/create-paid-api.prompt.js +1 -1
  62. package/dist/prompts/payments/create-paid-api.prompt.js.map +1 -1
  63. package/dist/prompts/payments/explain-x402-settlement.prompt.js +1 -1
  64. package/dist/prompts/payments/explain-x402-settlement.prompt.js.map +1 -1
  65. package/dist/prompts/register-prompts.js +2 -2
  66. package/dist/prompts/register-prompts.js.map +1 -1
  67. package/dist/prompts/registry/analyze-sap-agent.prompt.js +1 -1
  68. package/dist/prompts/registry/analyze-sap-agent.prompt.js.map +1 -1
  69. package/dist/prompts/registry/register-sap-agent.prompt.js +2 -2
  70. package/dist/prompts/registry/register-sap-agent.prompt.js.map +1 -1
  71. package/dist/remote/server.d.ts +150 -1
  72. package/dist/remote/server.d.ts.map +1 -1
  73. package/dist/remote/server.js +1176 -84
  74. package/dist/remote/server.js.map +1 -1
  75. package/dist/resources/current/sap-current-config.resource.d.ts.map +1 -1
  76. package/dist/resources/current/sap-current-config.resource.js +22 -2
  77. package/dist/resources/current/sap-current-config.resource.js.map +1 -1
  78. package/dist/resources/execution-proof/sap-execution-record.resource.js +1 -1
  79. package/dist/resources/execution-proof/sap-execution-record.resource.js.map +1 -1
  80. package/dist/resources/memory/sap-memory.resource.js +1 -1
  81. package/dist/resources/memory/sap-memory.resource.js.map +1 -1
  82. package/dist/resources/profile/sap-active-profile.resource.js +1 -1
  83. package/dist/resources/profile/sap-active-profile.resource.js.map +1 -1
  84. package/dist/resources/register-resources.js +2 -2
  85. package/dist/resources/register-resources.js.map +1 -1
  86. package/dist/resources/registry/sap-agent.resource.js +1 -1
  87. package/dist/resources/registry/sap-agent.resource.js.map +1 -1
  88. package/dist/resources/registry/sap-global-registry.resource.js +1 -1
  89. package/dist/resources/registry/sap-global-registry.resource.js.map +1 -1
  90. package/dist/resources/reputation/sap-reputation.resource.js +1 -1
  91. package/dist/resources/reputation/sap-reputation.resource.js.map +1 -1
  92. package/dist/resources/stats/sap-network-stats.resource.js +1 -1
  93. package/dist/resources/stats/sap-network-stats.resource.js.map +1 -1
  94. package/dist/resources/tool-schema/sap-tool-schema.resource.js +1 -1
  95. package/dist/resources/tool-schema/sap-tool-schema.resource.js.map +1 -1
  96. package/dist/sap/sap-client-manager.js +6 -6
  97. package/dist/sap/sap-client-manager.js.map +1 -1
  98. package/dist/security/tool-permissions.d.ts.map +1 -1
  99. package/dist/security/tool-permissions.js +1 -0
  100. package/dist/security/tool-permissions.js.map +1 -1
  101. package/dist/server/create-server.js +5 -5
  102. package/dist/server/create-server.js.map +1 -1
  103. package/dist/server/register-capabilities.js +4 -4
  104. package/dist/server/register-capabilities.js.map +1 -1
  105. package/dist/server/server-metadata.js +1 -1
  106. package/dist/signer/signer-resolver.js +12 -5
  107. package/dist/signer/signer-resolver.js.map +1 -1
  108. package/dist/tools/client-sdk-tools.js +7 -7
  109. package/dist/tools/client-sdk-tools.js.map +1 -1
  110. package/dist/tools/index.d.ts +2 -0
  111. package/dist/tools/index.d.ts.map +1 -1
  112. package/dist/tools/index.js +4 -0
  113. package/dist/tools/index.js.map +1 -1
  114. package/dist/tools/magicblock-tools.d.ts +28 -0
  115. package/dist/tools/magicblock-tools.d.ts.map +1 -0
  116. package/dist/tools/magicblock-tools.js +578 -0
  117. package/dist/tools/magicblock-tools.js.map +1 -0
  118. package/dist/tools/profile-tools.d.ts.map +1 -1
  119. package/dist/tools/profile-tools.js +44 -0
  120. package/dist/tools/profile-tools.js.map +1 -1
  121. package/dist/tools/register-tools.d.ts.map +1 -1
  122. package/dist/tools/register-tools.js +11 -2
  123. package/dist/tools/register-tools.js.map +1 -1
  124. package/dist/tools/sap-sdk-tools.js +2 -2
  125. package/dist/tools/sap-sdk-tools.js.map +1 -1
  126. package/dist/tools/sap-sns-tools.js +2 -2
  127. package/dist/tools/sap-sns-tools.js.map +1 -1
  128. package/dist/tools/skills-tools.d.ts +1 -1
  129. package/dist/tools/skills-tools.d.ts.map +1 -1
  130. package/dist/tools/skills-tools.js +10 -1
  131. package/dist/tools/skills-tools.js.map +1 -1
  132. package/dist/tools/tool-aliases.d.ts +10 -0
  133. package/dist/tools/tool-aliases.d.ts.map +1 -0
  134. package/dist/tools/tool-aliases.js +23 -0
  135. package/dist/tools/tool-aliases.js.map +1 -0
  136. package/dist/tools/x402-paid-call-tool.d.ts +12 -0
  137. package/dist/tools/x402-paid-call-tool.d.ts.map +1 -0
  138. package/dist/tools/x402-paid-call-tool.js +118 -0
  139. package/dist/tools/x402-paid-call-tool.js.map +1 -0
  140. package/dist/tui/config-wizard.js +2 -2
  141. package/dist/tui/config-wizard.js.map +1 -1
  142. package/dist/wizard-core/desktop-flow.d.ts +82 -0
  143. package/dist/wizard-core/desktop-flow.d.ts.map +1 -0
  144. package/dist/wizard-core/desktop-flow.js +181 -0
  145. package/dist/wizard-core/desktop-flow.js.map +1 -0
  146. package/docs/00_README.md +3 -0
  147. package/docs/03_CONFIGURATION_AND_WIZARD.md +31 -5
  148. package/docs/06_PAYMENTS_X402_AND_PAYSH.md +70 -7
  149. package/docs/07_ENDPOINTS_AND_CLIENTS.md +56 -1
  150. package/docs/10_OPERATIONS_RELEASE_AND_PM2.md +7 -6
  151. package/docs/13_BOUNTY_PROGRAM_PROPOSAL.md +469 -0
  152. package/docs/14_DESKTOP_WIZARD_RELEASE.md +264 -0
  153. package/docs/README.md +104 -0
  154. package/docs/_sidebar.md +31 -0
  155. package/docs/magicblock-tools.md +166 -0
  156. package/docs/x402-protocol-spec.md +984 -0
  157. package/package.json +23 -2
  158. package/server.json +71 -0
  159. package/skills/README.md +3 -2
  160. package/skills/sap-defi/SKILL.md +8 -0
  161. package/skills/sap-mcp/SKILL.md +124 -2
  162. package/skills/sap-payments-x402/SKILL.md +54 -2
@@ -2,7 +2,8 @@
2
2
 
3
3
  ## 1. Hosted Remote MCP
4
4
 
5
- Use this when the client supports remote Streamable HTTP MCP:
5
+ Use this when the client supports remote Streamable HTTP MCP and expects a root
6
+ `mcpServers` object. Do not paste this JSON into Codex `config.toml`.
6
7
 
7
8
  ```json
8
9
  {
@@ -15,7 +16,88 @@ Use this when the client supports remote Streamable HTTP MCP:
15
16
  }
16
17
  ```
17
18
 
18
- ## 2. Local Stdio MCP
19
+ ## 2. Hosted Codex TOML
20
+
21
+ Codex supports Streamable HTTP MCP servers and uses TOML config, usually at:
22
+
23
+ - macOS/Linux: `~/.codex/config.toml`
24
+ - Windows: `%USERPROFILE%\.codex\config.toml`
25
+
26
+ Use this hosted remote entry:
27
+
28
+ ```toml
29
+ [mcp_servers.sap]
30
+ url = "https://mcp.sap.oobeprotocol.ai/mcp"
31
+ ```
32
+
33
+ Paid/write tools also need a local non-custodial payment bridge. The wizard can
34
+ write both entries automatically. Choose:
35
+
36
+ ```txt
37
+ Configure Codex automatically: hosted sap + local sap_payments bridge
38
+ ```
39
+
40
+ The final Codex setup should look like this:
41
+
42
+ ```toml
43
+ [mcp_servers.sap]
44
+ url = "https://mcp.sap.oobeprotocol.ai/mcp"
45
+
46
+ [mcp_servers.sap_payments]
47
+ command = "npx.cmd"
48
+ args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server", "sap-mcp-server"]
49
+ enabled_tools = ["sap_x402_paid_call", "sap_profile_current", "sap_x402_estimate_cost"]
50
+ tool_timeout_sec = 300
51
+
52
+ [mcp_servers.sap_payments.env]
53
+ SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE = "false"
54
+ SAP_ALLOWED_TOOLS = "sap_x402_paid_call,sap_profile_current,sap_x402_estimate_cost"
55
+ SAP_LOG_LEVEL = "info"
56
+ ```
57
+
58
+ On macOS/Linux, use `command = "npx"` instead of `npx.cmd`.
59
+
60
+ Restart Codex after editing the file. Do not paste the JSON `mcpServers`
61
+ snippet into Codex; Codex expects TOML. If you specifically want Codex to start
62
+ the complete local stdio SAP MCP process instead of using the hosted endpoint, use:
63
+
64
+ ```toml
65
+ [mcp_servers.sap]
66
+ command = "npx.cmd"
67
+ args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server", "sap-mcp-server"]
68
+
69
+ [mcp_servers.sap.env]
70
+ SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE = "false"
71
+ SAP_LOG_LEVEL = "info"
72
+ ```
73
+
74
+ On macOS/Linux, use `command = "npx"` instead of `npx.cmd`.
75
+
76
+ ## 3. Hosted Hermes Configs
77
+
78
+ Hermes global `~/.hermes/mcp.json` uses flat server entries:
79
+
80
+ ```json
81
+ {
82
+ "sap": {
83
+ "url": "https://mcp.sap.oobeprotocol.ai/mcp",
84
+ "transport": "streamable-http"
85
+ }
86
+ }
87
+ ```
88
+
89
+ Hermes profile YAML uses `mcp_servers` with a flat server block:
90
+
91
+ ```yaml
92
+ mcp_servers:
93
+ sap:
94
+ url: https://mcp.sap.oobeprotocol.ai/mcp
95
+ transport: streamable-http
96
+ ```
97
+
98
+ Do not nest `mcpServers.sap` inside a Hermes `mcp_servers.sap` block.
99
+
100
+ ## 4. Local Stdio MCP
19
101
 
20
102
  Use this when the client requires stdio:
21
103
 
@@ -27,15 +109,15 @@ Use this when the client requires stdio:
27
109
  "args": ["/absolute/path/to/sap-mcp-server/dist/bin/sap-mcp-server.js"],
28
110
  "cwd": "/absolute/path/to/sap-mcp-server",
29
111
  "env": {
30
- "SAP_MCP_PROFILE": "default",
31
- "SAP_MCP_LOG_LEVEL": "info"
112
+ "SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE": "false",
113
+ "SAP_LOG_LEVEL": "info"
32
114
  }
33
115
  }
34
116
  }
35
117
  }
36
118
  ```
37
119
 
38
- ## 3. Hermes YAML Concept
120
+ ## 5. Local Hermes YAML Concept
39
121
 
40
122
  ```yaml
41
123
  mcp_servers:
@@ -45,11 +127,11 @@ mcp_servers:
45
127
  - /absolute/path/to/sap-mcp-server/dist/bin/sap-mcp-server.js
46
128
  cwd: /absolute/path/to/sap-mcp-server
47
129
  env:
48
- SAP_MCP_PROFILE: default
49
- SAP_MCP_LOG_LEVEL: info
130
+ SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE: "false"
131
+ SAP_LOG_LEVEL: info
50
132
  ```
51
133
 
52
- ## 4. Codex TOML Concept
134
+ ## 6. Local Codex TOML Concept
53
135
 
54
136
  ```toml
55
137
  [mcp_servers.sap]
@@ -58,11 +140,11 @@ args = ["/absolute/path/to/sap-mcp-server/dist/bin/sap-mcp-server.js"]
58
140
  cwd = "/absolute/path/to/sap-mcp-server"
59
141
 
60
142
  [mcp_servers.sap.env]
61
- SAP_MCP_PROFILE = "default"
62
- SAP_MCP_LOG_LEVEL = "info"
143
+ SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE = "false"
144
+ SAP_LOG_LEVEL = "info"
63
145
  ```
64
146
 
65
- ## 5. Wizard Injection
147
+ ## 7. Wizard Injection
66
148
 
67
149
  The wizard can automatically detect and update supported client config files. If a SAP MCP entry already exists, the wizard should show the existing config and ask whether to merge, override, skip, or print manual instructions.
68
150
 
@@ -71,3 +153,74 @@ Run:
71
153
  ```bash
72
154
  npm exec --yes --package @oobe-protocol-labs/sap-mcp-server -- sap-mcp-config wizard
73
155
  ```
156
+
157
+ ## 8. x402 Paid-Call Addon
158
+
159
+ Hosted SAP MCP paid tools return an x402 challenge. Some agent runtimes expose remote MCP tools but do not yet have a native x402 replay path. The wizard can install a local addon bundle for Hermes, Claude, Codex, OpenClaw, or custom runtimes:
160
+
161
+ ```txt
162
+ ~/.config/mcp-sap/addons/x402-paid-call
163
+ ```
164
+
165
+ The addon command is:
166
+
167
+ ```bash
168
+ npm exec --yes --package @oobe-protocol-labs/sap-mcp-server -- sap-mcp-x402-paid-call \
169
+ --tool sap_list_all_agents \
170
+ --arguments '{"limit":5}' \
171
+ --max-usd 0.02 \
172
+ --confirm
173
+ ```
174
+
175
+ For Codex, the recommended runtime integration is the local `sap_payments` MCP
176
+ bridge shown above. It exposes only:
177
+
178
+ ```txt
179
+ sap_x402_paid_call
180
+ sap_profile_current
181
+ sap_x402_estimate_cost
182
+ ```
183
+
184
+ For Claude Code, use the official MCP CLI pattern:
185
+
186
+ ```bash
187
+ claude mcp add --transport http sap https://mcp.sap.oobeprotocol.ai/mcp
188
+ claude mcp add --transport stdio sap_payments -- npx --yes --package @oobe-protocol-labs/sap-mcp-server sap-mcp-server
189
+ ```
190
+
191
+ Set `SAP_ALLOWED_TOOLS=sap_x402_paid_call,sap_profile_current,sap_x402_estimate_cost`
192
+ in the local bridge environment if your Claude runtime exposes environment
193
+ configuration. This keeps the local bridge focused on payment retries.
194
+
195
+ Hermes plugin/addon concept:
196
+
197
+ ```json
198
+ {
199
+ "plugins": {
200
+ "x402_paid_call": {
201
+ "command": "sap-mcp-x402-paid-call",
202
+ "description": "Pay and retry hosted SAP MCP x402 tool calls with the active local SAP MCP profile.",
203
+ "args": [],
204
+ "env": {
205
+ "SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE": "false"
206
+ }
207
+ }
208
+ }
209
+ }
210
+ ```
211
+
212
+ Local MCP tool alternative:
213
+
214
+ ```json
215
+ {
216
+ "name": "sap_x402_paid_call",
217
+ "arguments": {
218
+ "toolName": "sap_list_all_agents",
219
+ "arguments": { "limit": 5 },
220
+ "maxPriceUsd": 0.02,
221
+ "confirm": true
222
+ }
223
+ }
224
+ ```
225
+
226
+ Do not add wallet paths, keypair bytes, RPC API keys, or profile-specific overrides to hosted MCP client config. Hosted MCP config points to `https://mcp.sap.oobeprotocol.ai/mcp`; the local addon/profile signs only the payment payload on the user's machine.
@@ -0,0 +1,262 @@
1
+ # Desktop GUI Wizard
2
+
3
+ ## 1. What It Is
4
+
5
+ The SAP MCP Desktop Wizard is the normie-friendly installer for users who do not want to edit MCP JSON, TOML, or YAML by hand.
6
+
7
+ It creates the same real SAP MCP profile as the CLI/TUI wizard:
8
+
9
+ - a named profile under `~/.config/mcp-sap`;
10
+ - a dedicated local SAP MCP wallet or external signer boundary;
11
+ - conservative policy limits;
12
+ - hosted MCP config for `https://mcp.sap.oobeprotocol.ai/mcp`;
13
+ - optional local x402 paid-call bridge for agent runtimes.
14
+
15
+ The desktop app is not a mock installer. It calls the same setup modules used by `sap-mcp-config wizard`.
16
+
17
+ The first screen lets you choose one of two modes:
18
+
19
+ | Mode | Use It When |
20
+ | --- | --- |
21
+ | **Full SAP MCP setup** | You are creating or refreshing a SAP MCP profile, wallet boundary, policy limits, hosted MCP entry, and x402 payment bridge. |
22
+ | **Install x402 payment client only** | You already have `~/.config/mcp-sap` configured, hosted tools are visible, but paid/write calls still return `payment_required`. |
23
+
24
+ ## 2. When To Use It
25
+
26
+ Use the desktop wizard when:
27
+
28
+ 1. You want hosted SAP MCP but local signing.
29
+ 2. You are setting up Codex, Hermes, Claude, OpenClaw, or another MCP client.
30
+ 3. You need paid/write tools to work through x402.
31
+ 4. You want a dedicated SAP MCP wallet separate from Solana CLI.
32
+ 5. You prefer a guided GUI instead of terminal prompts.
33
+
34
+ Use the CLI wizard instead when you are on a server, SSH session, CI environment, or headless machine.
35
+
36
+ ## 3. Download Options
37
+
38
+ The hosted endpoint exposes the installer descriptor:
39
+
40
+ ```txt
41
+ https://mcp.sap.oobeprotocol.ai/.well-known/sap-mcp-wizard.json
42
+ ```
43
+
44
+ Release artifacts are published on GitHub releases:
45
+
46
+ ```txt
47
+ https://github.com/OOBE-PROTOCOL/sap-mcp/releases
48
+ ```
49
+
50
+ Expected artifacts:
51
+
52
+ | Platform | Artifact |
53
+ | --- | --- |
54
+ | macOS | `SAP-MCP-Wizard-<version>-<arch>.dmg` or `.zip` |
55
+ | Windows | `SAP-MCP-Wizard-Setup-<version>-x64.exe` |
56
+ | Linux | `sap-mcp-wizard-<version>-<arch>.tar.gz` |
57
+
58
+ macOS builds must be signed and notarized for a zero-warning double-click install after downloading from Chrome, Safari, or another browser. Free public builds are ad-hoc signed but not Apple-notarized, so macOS may block them as "damaged" until you remove the quarantine flag.
59
+
60
+ For an unsigned SAP MCP Wizard build that you downloaded from the official GitHub release, copy the app to `/Applications`, then run:
61
+
62
+ ```bash
63
+ xattr -dr com.apple.quarantine "/Applications/SAP MCP Wizard.app"
64
+ ```
65
+
66
+ Then open the app again from Finder.
67
+
68
+ Do not paste wallet/keypair material into support chats while troubleshooting installer issues.
69
+
70
+ ## 4. GUI Flow
71
+
72
+ The desktop wizard walks through:
73
+
74
+ 1. **Setup**: choose full setup or x402 payment-client-only repair.
75
+ 2. **Profile**: choose a real profile name; the wizard refuses ambiguous `default` profiles.
76
+ 3. **Wallet**: create a dedicated SAP MCP wallet or point to an existing dedicated keypair path.
77
+ 4. **Policy**: set max transaction value, daily limits, log level, and optional Bento Guard settings.
78
+ 5. **Runtimes**: detect local agent runtimes and configure hosted SAP MCP plus local `sap_payments`.
79
+ 6. **Review**: show config path, wallet boundary, hosted MCP endpoint, and runtime actions before writing.
80
+
81
+ In x402 payment-client-only mode, the wizard skips profile, wallet, and policy steps. It only installs or repairs runtime MCP client entries and the optional addon bundle.
82
+
83
+ The renderer never receives keypair bytes. Wallet creation and file writes happen in the local main process.
84
+
85
+ ## 5. Codex Setup From GUI
86
+
87
+ For Codex, the desktop wizard can write both entries:
88
+
89
+ ```toml
90
+ [mcp_servers.sap]
91
+ url = "https://mcp.sap.oobeprotocol.ai/mcp"
92
+
93
+ [mcp_servers.sap_payments]
94
+ command = "npx"
95
+ args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server", "sap-mcp-server"]
96
+ enabled_tools = ["sap_x402_paid_call", "sap_profile_current", "sap_x402_estimate_cost"]
97
+ tool_timeout_sec = 300
98
+
99
+ [mcp_servers.sap_payments.env]
100
+ SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE = "false"
101
+ SAP_ALLOWED_TOOLS = "sap_x402_paid_call,sap_profile_current,sap_x402_estimate_cost"
102
+ SAP_LOG_LEVEL = "info"
103
+ ```
104
+
105
+ On Windows, the command is `npx.cmd`.
106
+
107
+ The hosted `sap` server lists and executes remote SAP MCP tools. The local `sap_payments` bridge signs x402 payment proofs with the active local SAP MCP profile and retries paid hosted calls without exposing keypair bytes.
108
+
109
+ ## 6. Runtime Configs Written By The GUI
110
+
111
+ The GUI writes runtime-native config shapes. It does not paste profile names, wallet paths, RPC API keys, or keypair bytes into hosted MCP entries.
112
+
113
+ ### 6.1 Claude Desktop
114
+
115
+ Claude Desktop uses a root `mcpServers` JSON object:
116
+
117
+ ```json
118
+ {
119
+ "mcpServers": {
120
+ "sap": {
121
+ "type": "http",
122
+ "url": "https://mcp.sap.oobeprotocol.ai/mcp"
123
+ },
124
+ "sap_payments": {
125
+ "command": "npx",
126
+ "args": ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server", "sap-mcp-server"],
127
+ "env": {
128
+ "SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE": "false",
129
+ "SAP_ALLOWED_TOOLS": "sap_x402_paid_call,sap_profile_current,sap_x402_estimate_cost",
130
+ "SAP_LOG_LEVEL": "info"
131
+ }
132
+ }
133
+ }
134
+ }
135
+ ```
136
+
137
+ Known paths:
138
+
139
+ | OS | Path |
140
+ | --- | --- |
141
+ | macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` |
142
+ | Windows | `%USERPROFILE%\AppData\Roaming\Claude\claude_desktop_config.json` |
143
+ | Linux | `~/.config/Claude/claude_desktop_config.json` |
144
+
145
+ ### 6.2 Hermes
146
+
147
+ Hermes global `mcp.json` uses flat server entries:
148
+
149
+ ```json
150
+ {
151
+ "sap": {
152
+ "url": "https://mcp.sap.oobeprotocol.ai/mcp",
153
+ "transport": "streamable-http"
154
+ },
155
+ "sap_payments": {
156
+ "command": "npx",
157
+ "args": ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server", "sap-mcp-server"],
158
+ "env": {
159
+ "SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE": "false",
160
+ "SAP_ALLOWED_TOOLS": "sap_x402_paid_call,sap_profile_current,sap_x402_estimate_cost",
161
+ "SAP_LOG_LEVEL": "info"
162
+ }
163
+ }
164
+ }
165
+ ```
166
+
167
+ Hermes profile YAML uses top-level `mcp_servers`:
168
+
169
+ ```yaml
170
+ mcp_servers:
171
+ sap:
172
+ url: https://mcp.sap.oobeprotocol.ai/mcp
173
+ transport: streamable-http
174
+ sap_payments:
175
+ command: npx
176
+ args:
177
+ - --yes
178
+ - --package
179
+ - @oobe-protocol-labs/sap-mcp-server
180
+ - sap-mcp-server
181
+ env:
182
+ SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE: "false"
183
+ SAP_ALLOWED_TOOLS: sap_x402_paid_call,sap_profile_current,sap_x402_estimate_cost
184
+ SAP_LOG_LEVEL: info
185
+ ```
186
+
187
+ ### 6.3 OpenClaw
188
+
189
+ OpenClaw MCP JSON uses the same root `mcpServers` structure as generic MCP clients:
190
+
191
+ ```json
192
+ {
193
+ "mcpServers": {
194
+ "sap": {
195
+ "url": "https://mcp.sap.oobeprotocol.ai/mcp",
196
+ "transport": "streamable-http"
197
+ },
198
+ "sap_payments": {
199
+ "command": "npx",
200
+ "args": ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server", "sap-mcp-server"],
201
+ "env": {
202
+ "SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE": "false",
203
+ "SAP_ALLOWED_TOOLS": "sap_x402_paid_call,sap_profile_current,sap_x402_estimate_cost",
204
+ "SAP_LOG_LEVEL": "info"
205
+ }
206
+ }
207
+ }
208
+ }
209
+ ```
210
+
211
+ On Windows, command-backed bridge entries use `npx.cmd`.
212
+
213
+ ## 7. x402 Client Addon
214
+
215
+ The GUI can also install the x402 addon bundle under:
216
+
217
+ ```txt
218
+ ~/.config/mcp-sap/addons/x402-paid-call
219
+ ```
220
+
221
+ Direct helper command:
222
+
223
+ ```bash
224
+ npm exec --yes --package @oobe-protocol-labs/sap-mcp-server -- sap-mcp-x402-paid-call \
225
+ --tool sap_list_all_agents \
226
+ --arguments '{"limit":5}' \
227
+ --max-usd 0.02 \
228
+ --confirm
229
+ ```
230
+
231
+ Use the helper when your agent runtime can see hosted tools but cannot natively sign and replay x402 challenges.
232
+
233
+ ## 8. CLI Fallback
234
+
235
+ The same setup can always be done from terminal:
236
+
237
+ ```bash
238
+ npm exec --yes --package @oobe-protocol-labs/sap-mcp-server -- sap-mcp-config wizard
239
+ ```
240
+
241
+ Show active profile:
242
+
243
+ ```bash
244
+ npm exec --yes --package @oobe-protocol-labs/sap-mcp-server -- sap-mcp-config show
245
+ ```
246
+
247
+ Install from hosted script:
248
+
249
+ ```bash
250
+ curl -fsSL https://mcp.sap.oobeprotocol.ai/wizard/install.sh | bash
251
+ ```
252
+
253
+ Read the script before running it when operating in a security-sensitive environment.
254
+
255
+ ## 9. Security Rules
256
+
257
+ 1. Do not paste keypair bytes into agent chat, MCP config, GitHub issues, or support tickets.
258
+ 2. Do not configure hosted MCP with `SAP_WALLET_PATH` or RPC API-key overrides.
259
+ 3. Keep the SAP MCP wallet separate from `~/.config/solana/id.json`.
260
+ 4. Use the local `sap_payments` bridge only for x402 helper tools.
261
+ 5. Restart the agent runtime after the wizard updates client config.
262
+ 6. For production wallets, prefer external signer or delegated session mode once available for your runtime.
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-compat.d.ts","sourceRoot":"","sources":["../../../src/adapters/mcp/sdk-compat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,KAAK,EACV,IAAI,EACJ,QAAQ,EACR,gBAAgB,EAChB,MAAM,EACP,MAAM,oCAAoC,CAAC;AAW5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAsBzD,KAAK,eAAe,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9C,KAAK,uBAAuB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAChG,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AA8GzE;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAEpF;AAqOD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAG,OAAO,EAC3C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB,EACD,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmF7C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,OAAO,EACf,UAAU,EAAE;IACV,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,EACD,OAAO,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;EA0DzB;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,OAAO,EACf,UAAU,EAAE;IACV,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,EACD,OAAO,EAAE,uBAAuB;;;;;;;;;;;;;;;;;;;;EAmGjC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EACf,UAAU,EAAE;IACV,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;CACJ,EACD,OAAO,EAAE,aAAa;;;;;;;;;;;;;;;;;;EAmEvB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,CAEzD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,EAAE,CAEjE;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAEjF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAE7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG;IAChD,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CAClB,CAGA"}
1
+ {"version":3,"file":"sdk-compat.d.ts","sourceRoot":"","sources":["../../../src/adapters/mcp/sdk-compat.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@
15
15
  import { ListToolsRequestSchema, CallToolRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, ListResourceTemplatesRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
16
16
  import { logger } from '../../core/logger.js';
17
17
  import { checkToolPermissions, privateKeyGuard } from '../../security/index.js';
18
+ import { canonicalizeToolName } from '../../tools/tool-aliases.js';
18
19
  // Track which handlers have been registered to avoid duplicates
19
20
  const handlerRegistry = new WeakMap();
20
21
  const executionContexts = new WeakMap();
@@ -288,6 +289,18 @@ function ensureHandlerRegistry(server) {
288
289
  }
289
290
  return handlerRegistry.get(server);
290
291
  }
292
+ /**
293
+ * @name filterVisibleTools
294
+ * @description Applies the configured allow-list to tools/list so bridge-only MCP clients do not see the full tool surface.
295
+ */
296
+ function filterVisibleTools(server, tools) {
297
+ const context = executionContexts.get(server);
298
+ if (!context || context.config.allowedTools === 'all') {
299
+ return tools;
300
+ }
301
+ const allowed = new Set(context.config.allowedTools);
302
+ return tools.filter((tool) => allowed.has(tool.name));
303
+ }
291
304
  /**
292
305
  * Tool registration helper
293
306
  *
@@ -313,18 +326,19 @@ export function registerTool(server, name, definition, handler) {
313
326
  if (!registry.tools) {
314
327
  // Register tools/list handler
315
328
  server.setRequestHandler(ListToolsRequestSchema, async () => {
316
- const tools = withRegistrationStore(server).tools || [];
329
+ const tools = filterVisibleTools(server, withRegistrationStore(server).tools || []);
317
330
  logger.debug('Handling tools/list', { count: tools.length });
318
331
  return { tools };
319
332
  });
320
333
  // Register tools/call handler
321
334
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
322
335
  const { name: toolName, arguments: args } = request.params;
323
- logger.debug('Handling tools/call', { tool: toolName, args });
336
+ const canonicalToolName = canonicalizeToolName(toolName);
337
+ logger.debug('Handling tools/call', { tool: toolName, canonicalTool: canonicalToolName, args });
324
338
  const handlers = withRegistrationStore(server).toolHandlers || {};
325
- const handler = handlers[toolName];
339
+ const handler = handlers[canonicalToolName];
326
340
  if (!handler) {
327
- logger.error('Tool not found', { tool: toolName });
341
+ logger.error('Tool not found', { tool: toolName, canonicalTool: canonicalToolName });
328
342
  throw new Error(`Tool not found: ${toolName}`);
329
343
  }
330
344
  try {
@@ -332,35 +346,35 @@ export function registerTool(server, name, definition, handler) {
332
346
  if (context) {
333
347
  const keyGuard = privateKeyGuard(args || {});
334
348
  if (!keyGuard.safe) {
335
- logger.warn('Tool call blocked by private key guard', { tool: toolName, reason: keyGuard.reason });
349
+ logger.warn('Tool call blocked by private key guard', { tool: canonicalToolName, requestedTool: toolName, reason: keyGuard.reason });
336
350
  throw new Error(keyGuard.reason || 'Potential private key detected');
337
351
  }
338
- const permission = checkToolPermissions(context, toolName);
352
+ const permission = checkToolPermissions(context, canonicalToolName);
339
353
  if (!permission.allowed) {
340
- logger.warn('Tool call blocked by permissions', { tool: toolName, reason: permission.reason });
341
- throw new Error(permission.reason || `Tool '${toolName}' is not allowed`);
354
+ logger.warn('Tool call blocked by permissions', { tool: canonicalToolName, requestedTool: toolName, reason: permission.reason });
355
+ throw new Error(permission.reason || `Tool '${canonicalToolName}' is not allowed`);
342
356
  }
343
- const policy = await context.policyEngine.checkPermission(toolName, {
344
- toolName,
357
+ const policy = await context.policyEngine.checkPermission(canonicalToolName, {
358
+ toolName: canonicalToolName,
345
359
  args: isPlainObject(args) ? args : {},
346
360
  user: context.signer?.publicKey.toBase58() || context.session?.agentId || 'local-mcp-client',
347
361
  });
348
362
  if (!policy.allowed) {
349
- logger.warn('Tool call blocked by policy', { tool: toolName, reason: policy.reason });
350
- throw new Error(policy.reason || `Tool '${toolName}' is blocked by policy`);
363
+ logger.warn('Tool call blocked by policy', { tool: canonicalToolName, requestedTool: toolName, reason: policy.reason });
364
+ throw new Error(policy.reason || `Tool '${canonicalToolName}' is blocked by policy`);
351
365
  }
352
366
  }
353
367
  const result = await handler(args || {});
354
- logger.debug('Tool call completed', { tool: toolName });
368
+ logger.debug('Tool call completed', { tool: canonicalToolName, requestedTool: toolName });
355
369
  return toToolCallResult(result);
356
370
  }
357
371
  catch (error) {
358
- logger.error('Tool call failed', { tool: toolName, error });
372
+ logger.error('Tool call failed', { tool: canonicalToolName, requestedTool: toolName, error });
359
373
  throw error;
360
374
  }
361
375
  });
362
376
  registry.tools = true;
363
- logger.info('JSON-RPC handlers registered for tools');
377
+ logger.debug('JSON-RPC handlers registered for tools');
364
378
  }
365
379
  return tool;
366
380
  }
@@ -414,7 +428,7 @@ export function registerResource(server, uri, schema, definition, handler) {
414
428
  }
415
429
  });
416
430
  registry.resources = true;
417
- logger.info('JSON-RPC handlers registered for resources');
431
+ logger.debug('JSON-RPC handlers registered for resources');
418
432
  }
419
433
  return resource;
420
434
  }
@@ -505,7 +519,7 @@ export function registerResourceTemplate(server, uriTemplate, schema, definition
505
519
  throw new Error(`Resource not found: ${resourceUri}`);
506
520
  });
507
521
  registry.resources = true;
508
- logger.info('JSON-RPC handlers registered for resource templates');
522
+ logger.debug('JSON-RPC handlers registered for resource templates');
509
523
  }
510
524
  return template;
511
525
  }
@@ -568,7 +582,7 @@ export function registerPrompt(server, name, schema, definition, handler) {
568
582
  }
569
583
  });
570
584
  registry.prompts = true;
571
- logger.info('JSON-RPC handlers registered for prompts');
585
+ logger.debug('JSON-RPC handlers registered for prompts');
572
586
  }
573
587
  return prompt;
574
588
  }