@oobe-protocol-labs/sap-mcp-server 0.9.0 → 0.9.2

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 (113) hide show
  1. package/.env.example +30 -0
  2. package/CHANGELOG.md +43 -2
  3. package/README.md +19 -2
  4. package/USER_DOCS/00_START_HERE.md +1 -0
  5. package/USER_DOCS/01_HOSTED_REMOTE_MCP.md +17 -3
  6. package/USER_DOCS/04_CLIENT_CONFIGS.md +3 -3
  7. package/USER_DOCS/05_SKILLS_AND_TOOLS.md +27 -3
  8. package/USER_DOCS/06_DESKTOP_GUI_WIZARD.md +5 -5
  9. package/USER_DOCS/07_SMITHERY_AND_MARKETPLACES.md +163 -0
  10. package/assets/logos/claude.png +0 -0
  11. package/assets/logos/codex.webp +0 -0
  12. package/assets/logos/hermes.png +0 -0
  13. package/assets/logos/openclaw.svg +22 -0
  14. package/config.schema.json +5 -0
  15. package/dist/config/env.d.ts +4 -0
  16. package/dist/config/env.d.ts.map +1 -1
  17. package/dist/config/env.js +3 -0
  18. package/dist/config/env.js.map +1 -1
  19. package/dist/core/constants.d.ts +6 -1
  20. package/dist/core/constants.d.ts.map +1 -1
  21. package/dist/core/constants.js +14 -1
  22. package/dist/core/constants.js.map +1 -1
  23. package/dist/payments/pricing.d.ts +1 -1
  24. package/dist/payments/pricing.d.ts.map +1 -1
  25. package/dist/payments/pricing.js +20 -3
  26. package/dist/payments/pricing.js.map +1 -1
  27. package/dist/policy/local-policy-engine.js +1 -1
  28. package/dist/policy/local-policy-engine.js.map +1 -1
  29. package/dist/prompts/context/sap-agent-context.prompt.js +6 -0
  30. package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -1
  31. package/dist/prompts/context/sap-agent-start.prompt.d.ts +14 -0
  32. package/dist/prompts/context/sap-agent-start.prompt.d.ts.map +1 -0
  33. package/dist/prompts/context/sap-agent-start.prompt.js +96 -0
  34. package/dist/prompts/context/sap-agent-start.prompt.js.map +1 -0
  35. package/dist/prompts/developer/generate-sap-integration.prompt.js +1 -1
  36. package/dist/prompts/developer/generate-sap-integration.prompt.js.map +1 -1
  37. package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts.map +1 -1
  38. package/dist/prompts/payments/explain-x402-settlement.prompt.js +13 -10
  39. package/dist/prompts/payments/explain-x402-settlement.prompt.js.map +1 -1
  40. package/dist/prompts/register-prompts.d.ts.map +1 -1
  41. package/dist/prompts/register-prompts.js +3 -1
  42. package/dist/prompts/register-prompts.js.map +1 -1
  43. package/dist/remote/public-home/index.d.ts.map +1 -1
  44. package/dist/remote/public-home/index.js +2 -1
  45. package/dist/remote/public-home/index.js.map +1 -1
  46. package/dist/remote/public-home/scripts.d.ts +1 -1
  47. package/dist/remote/public-home/scripts.d.ts.map +1 -1
  48. package/dist/remote/public-home/scripts.js +29 -0
  49. package/dist/remote/public-home/scripts.js.map +1 -1
  50. package/dist/remote/public-home/sections.d.ts +5 -0
  51. package/dist/remote/public-home/sections.d.ts.map +1 -1
  52. package/dist/remote/public-home/sections.js +73 -6
  53. package/dist/remote/public-home/sections.js.map +1 -1
  54. package/dist/remote/public-home/styles.d.ts +1 -1
  55. package/dist/remote/public-home/styles.d.ts.map +1 -1
  56. package/dist/remote/public-home/styles.js +460 -16
  57. package/dist/remote/public-home/styles.js.map +1 -1
  58. package/dist/remote/rate-limiter.d.ts +2 -0
  59. package/dist/remote/rate-limiter.d.ts.map +1 -1
  60. package/dist/remote/rate-limiter.js +23 -0
  61. package/dist/remote/rate-limiter.js.map +1 -1
  62. package/dist/remote/server.d.ts +70 -1
  63. package/dist/remote/server.d.ts.map +1 -1
  64. package/dist/remote/server.js +412 -15
  65. package/dist/remote/server.js.map +1 -1
  66. package/dist/runtime/module-resolution.d.ts.map +1 -1
  67. package/dist/runtime/module-resolution.js +41 -8
  68. package/dist/runtime/module-resolution.js.map +1 -1
  69. package/dist/schemas/settlement.schema.d.ts +2 -2
  70. package/dist/security/tool-permissions.d.ts.map +1 -1
  71. package/dist/security/tool-permissions.js +1 -6
  72. package/dist/security/tool-permissions.js.map +1 -1
  73. package/dist/server/create-server.d.ts.map +1 -1
  74. package/dist/server/create-server.js +2 -1
  75. package/dist/server/create-server.js.map +1 -1
  76. package/dist/tools/agent-start-tool.d.ts +12 -0
  77. package/dist/tools/agent-start-tool.d.ts.map +1 -0
  78. package/dist/tools/agent-start-tool.js +156 -0
  79. package/dist/tools/agent-start-tool.js.map +1 -0
  80. package/dist/tools/client-sdk-tools.d.ts +7 -0
  81. package/dist/tools/client-sdk-tools.d.ts.map +1 -1
  82. package/dist/tools/client-sdk-tools.js +80 -4
  83. package/dist/tools/client-sdk-tools.js.map +1 -1
  84. package/dist/tools/index.d.ts +1 -0
  85. package/dist/tools/index.d.ts.map +1 -1
  86. package/dist/tools/index.js +3 -1
  87. package/dist/tools/index.js.map +1 -1
  88. package/dist/tools/register-tools.d.ts.map +1 -1
  89. package/dist/tools/register-tools.js +5 -1
  90. package/dist/tools/register-tools.js.map +1 -1
  91. package/dist/tools/sap-sdk-tools.d.ts +2 -2
  92. package/dist/tools/sap-sdk-tools.d.ts.map +1 -1
  93. package/dist/tools/sap-sdk-tools.js +111 -108
  94. package/dist/tools/sap-sdk-tools.js.map +1 -1
  95. package/dist/tools/sap-sns-tools.d.ts +4 -4
  96. package/dist/tools/sap-sns-tools.js +4 -4
  97. package/dist/tools/skills-tools.js +1 -1
  98. package/dist/tools/skills-tools.js.map +1 -1
  99. package/docs/05_REMOTE_VPS_DEPLOYMENT.md +32 -0
  100. package/docs/06_PAYMENTS_X402_AND_PAYSH.md +11 -0
  101. package/docs/07_ENDPOINTS_AND_CLIENTS.md +1 -1
  102. package/docs/09_TOOLS_SKILLS_AND_AGENT_GUIDE.md +42 -11
  103. package/docs/14_DESKTOP_WIZARD_RELEASE.md +1 -1
  104. package/docs/README.md +6 -3
  105. package/docs/_sidebar.md +1 -0
  106. package/package.json +3 -2
  107. package/server.json +3 -3
  108. package/skills/README.md +2 -2
  109. package/skills/sap-escrow-settlement/SKILL.md +15 -11
  110. package/skills/sap-mcp/SKILL.md +26 -11
  111. package/skills/sap-mcp/TOOL_REFERENCE.md +6 -5
  112. package/skills/sap-operations/SKILL.md +6 -7
  113. package/smithery.config.schema.json +59 -0
package/.env.example CHANGED
@@ -74,6 +74,32 @@ SAP_HTTP_PORT=8787
74
74
  SAP_HTTP_HOST=127.0.0.1
75
75
  # SAP_HTTP_CORS_ORIGINS=https://app.example.com,https://admin.example.com
76
76
 
77
+ # =============================================================================
78
+ # Hosted Remote Scaling & Backpressure
79
+ # =============================================================================
80
+ # Redis should be enabled for clustered/PM2 multi-process hosted deployments.
81
+ # It shares rate limits and payment usage ledger streams across workers.
82
+ # SAP_MCP_USE_REDIS=true
83
+ # SAP_MCP_REDIS_URL=redis://127.0.0.1:6379
84
+
85
+ # Stateful Streamable HTTP sessions. Idle sessions are closed automatically so
86
+ # crawlers and abandoned agent sessions cannot exhaust memory.
87
+ SAP_MCP_REMOTE_MAX_STATEFUL_SESSIONS=2000
88
+ SAP_MCP_REMOTE_SESSION_IDLE_TTL_MS=600000
89
+ SAP_MCP_REMOTE_SESSION_ABSOLUTE_TTL_MS=3600000
90
+ SAP_MCP_REMOTE_SESSION_CLEANUP_INTERVAL_MS=30000
91
+
92
+ # Global in-process backpressure for active MCP requests/streams.
93
+ # Raise this with enough RAM/CPU and a reverse proxy connection budget.
94
+ SAP_MCP_REMOTE_MAX_IN_FLIGHT_REQUESTS=1024
95
+
96
+ # Node HTTP tuning for reverse-proxied Streamable HTTP.
97
+ SAP_MCP_REMOTE_REQUEST_TIMEOUT_MS=300000
98
+ SAP_MCP_REMOTE_HEADERS_TIMEOUT_MS=65000
99
+ SAP_MCP_REMOTE_KEEP_ALIVE_TIMEOUT_MS=75000
100
+ # 0 means unlimited requests per socket.
101
+ SAP_MCP_REMOTE_MAX_REQUESTS_PER_SOCKET=0
102
+
77
103
  # =============================================================================
78
104
  # Remote MCP Access Control
79
105
  # =============================================================================
@@ -131,6 +157,10 @@ SAP_MCP_X402_MAX_TIMEOUT_SECONDS=120
131
157
  # SAP_MCP_X402_FACILITATOR_AUTH_TOKEN=
132
158
  # Optional browser/manual checkout link included in 402 JSON responses.
133
159
  # SAP_MCP_PAY_SH_CHECKOUT_URL=https://pay.sh/checkout/YOUR_CHECKOUT_ID
160
+ # Optional strict hosted marketplace mode. Keeps MCP handshake/discovery,
161
+ # base profile, skills bootstrap, and local payment bridge helper tools free,
162
+ # but charges basic balance and operational reads.
163
+ SAP_MCP_MONETIZATION_STRICT_TOOLS=false
134
164
 
135
165
  # OOBE self-hosted x402 facilitator.
136
166
  # The facilitator signer is a dedicated fee-payer keypair used only to complete
package/CHANGELOG.md CHANGED
@@ -2,9 +2,50 @@
2
2
 
3
3
  All notable changes to this project are documented in this file.
4
4
 
5
- ## [Unreleased]
5
+ ## 0.9.2 - 2026-07-17
6
6
 
7
- No unreleased changes yet.
7
+ ### Added
8
+
9
+ - Added the free `sap_agent_start` tool and matching `sap-agent-start` prompt so
10
+ users can tell an agent "Start SAP MCP" instead of pasting a long operations
11
+ prompt. The bootstrap points agents to `sap_skills_bundle`,
12
+ `sap_payments_readiness`, and `sap_payments_call_paid_tool` while preserving
13
+ hosted accountless/non-custodial behavior.
14
+
15
+ ### Fixed
16
+
17
+ - Tightened SAP MCP agent bootstrap behavior so simple connection checks stay
18
+ concise instead of dumping the full tool catalog or protocol category list.
19
+ - Added AgentKit SPL token input alias normalization for common wallet-owner
20
+ fields, reducing schema-discovery retries in agent runtimes.
21
+
22
+ ## 0.9.1 - 2026-07-16
23
+
24
+ Hotfix for hosted SAP MCP users whose agent runtime connected to the remote
25
+ `sap` server but could not start the local non-custodial `sap_payments` bridge
26
+ from an `npx`/`npm exec` install.
27
+
28
+ ### Fixed
29
+
30
+ - Fixed `sap-mcp-server` startup when launched by Hermes, Codex, Claude,
31
+ OpenClaw, or another MCP runtime through `npx` outside the repository. The
32
+ CLI bootstrap now adds both package-local and npm/npx parent `node_modules`
33
+ paths before loading the server, so SAP SDK assets such as
34
+ `@oobe-protocol-labs/synapse-sap-sdk/idl/synapse_agent_sap.json` resolve
35
+ correctly.
36
+ - Made the runtime module resolver find the actual package root from any
37
+ compiled `dist/*` entrypoint instead of assuming a fixed folder depth.
38
+ - Updated generated runtime config examples and wizard tests to pin the local
39
+ `sap_payments` bridge to `@oobe-protocol-labs/sap-mcp-server@0.9.1`.
40
+
41
+ ### Verification
42
+
43
+ - `pnpm run lint`
44
+ - `pnpm run typecheck`
45
+ - `pnpm test -- --run src/runtime/module-resolution.test.ts src/payments/pricing.test.ts src/payments/monetization-gate.test.ts src/remote/server.test.ts`
46
+ - `pnpm run build`
47
+ - Real packaged install smoke test from a temporary directory using the generated
48
+ npm tarball and `SAP_MCP_PAYMENTS_BRIDGE_ONLY=true`.
8
49
 
9
50
  ## 0.9.0 - 2026-07-16
10
51
 
package/README.md CHANGED
@@ -60,6 +60,17 @@ Create or select a profile:
60
60
  npx sap-mcp-config wizard
61
61
  ```
62
62
 
63
+ After connecting hosted SAP MCP in an agent runtime, start the agent context
64
+ with one short message:
65
+
66
+ ```text
67
+ Start SAP MCP.
68
+ ```
69
+
70
+ The agent should call the free `sap_agent_start` tool or `sap-agent-start`
71
+ prompt, load `sap_skills_bundle`, and use the local `sap_payments` bridge for
72
+ paid/write hosted calls.
73
+
63
74
  Inspect the active profile:
64
75
 
65
76
  ```bash
@@ -117,7 +128,7 @@ For paid/write hosted tools, add the local non-custodial payment bridge as well:
117
128
  ```toml
118
129
  [mcp_servers.sap_payments]
119
130
  command = "npx"
120
- args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.0", "sap-mcp-server"]
131
+ args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.2", "sap-mcp-server"]
121
132
  startup_timeout_sec = 300
122
133
  tool_timeout_sec = 300
123
134
 
@@ -135,7 +146,7 @@ Codex supports Streamable HTTP MCP servers with URL-based entries in `config.tom
135
146
  ```toml
136
147
  [mcp_servers.sap]
137
148
  command = "npx"
138
- args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.0", "sap-mcp-server"]
149
+ args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.2", "sap-mcp-server"]
139
150
 
140
151
  [mcp_servers.sap.env]
141
152
  SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE = "false"
@@ -180,6 +191,12 @@ DELETE /mcp
180
191
 
181
192
  `GET /docs` serves the public documentation site for install, start, configuration, hosted remote MCP, x402/pay.sh payments, and MCP client setup.
182
193
 
194
+ Marketplace listings such as Smithery can use [`smithery.config.schema.json`](smithery.config.schema.json)
195
+ to explain the hosted setup path. The schema intentionally asks for no
196
+ secrets: SAP MCP hosted reads work remotely, while paid/write calls use the
197
+ wizard-managed local `sap_payments` bridge, local profile policy, and
198
+ user-controlled signer.
199
+
183
200
  See [05. Remote VPS Deployment](docs/05_REMOTE_VPS_DEPLOYMENT.md) and [07. Endpoints And Clients](docs/07_ENDPOINTS_AND_CLIENTS.md).
184
201
 
185
202
  ## 6. Monetization
@@ -188,3 +188,4 @@ npm exec --yes --package @oobe-protocol-labs/sap-mcp-server -- sap-mcp-config au
188
188
  | `04_CLIENT_CONFIGS.md` | Claude, Hermes, Codex, OpenClaw config examples |
189
189
  | `05_SKILLS_AND_TOOLS.md` | Skills, tool selection, and security behavior |
190
190
  | `06_DESKTOP_GUI_WIZARD.md` | Desktop GUI wizard install, hosted setup, local payment bridge, and runtime behavior |
191
+ | `07_SMITHERY_AND_MARKETPLACES.md` | Smithery setup schema, marketplace usage, native x402 clients, and local bridge guidance |
@@ -108,7 +108,21 @@ npm exec --yes --package @oobe-protocol-labs/sap-mcp-server -- sap-mcp-config sh
108
108
  npm exec --yes --package @oobe-protocol-labs/sap-mcp-server -- sap-mcp-config profile-info
109
109
  ```
110
110
 
111
- ## 4. Test Hosted MCP Manually
111
+ ## 4. First Agent Message
112
+
113
+ After the hosted `sap` server and local `sap_payments` bridge are configured,
114
+ restart the agent runtime and say:
115
+
116
+ ```text
117
+ Start SAP MCP.
118
+ ```
119
+
120
+ The agent should call `sap_agent_start`, load `sap_skills_bundle`, inspect
121
+ hosted profile state, and use `sap_payments_readiness` before paid/write calls.
122
+ This is the normal path for non-technical users. They should not need to paste a
123
+ long prompt or manually explain x402.
124
+
125
+ ## 5. Test Hosted MCP Manually
112
126
 
113
127
  Initialize:
114
128
 
@@ -130,7 +144,7 @@ curl -iN https://mcp.sap.oobeprotocol.ai/mcp \
130
144
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
131
145
  ```
132
146
 
133
- ## 5. Free Tool Smoke Test
147
+ ## 6. Free Tool Smoke Test
134
148
 
135
149
  ```bash
136
150
  curl -iN https://mcp.sap.oobeprotocol.ai/mcp \
@@ -143,7 +157,7 @@ curl -iN https://mcp.sap.oobeprotocol.ai/mcp \
143
157
 
144
158
  The RPC URL in returned metadata must be redacted if it contains query secrets.
145
159
 
146
- ## 6. Paid Tool Smoke Test
160
+ ## 7. Paid Tool Smoke Test
147
161
 
148
162
  ```bash
149
163
  curl -iN https://mcp.sap.oobeprotocol.ai/mcp \
@@ -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.0", "sap-mcp-server"]
48
+ args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.2", "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.0", "sap-mcp-server"]
68
+ args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.2", "sap-mcp-server"]
69
69
 
70
70
  [mcp_servers.sap.env]
71
71
  SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE = "false"
@@ -194,7 +194,7 @@ For Claude Code, use the official MCP CLI pattern:
194
194
 
195
195
  ```bash
196
196
  claude mcp add --transport http sap https://mcp.sap.oobeprotocol.ai/mcp
197
- claude mcp add --transport stdio sap_payments -- npx --yes --package @oobe-protocol-labs/sap-mcp-server@0.9.0 sap-mcp-server
197
+ claude mcp add --transport stdio sap_payments -- npx --yes --package @oobe-protocol-labs/sap-mcp-server@0.9.2 sap-mcp-server
198
198
  ```
199
199
 
200
200
  Set `SAP_MCP_PAYMENTS_BRIDGE_ONLY=true` and `SAP_ALLOWED_TOOLS=all` in the
@@ -1,6 +1,30 @@
1
1
  # Skills And Tool Usage
2
2
 
3
- ## 1. Install Skills
3
+ ## 1. Start SAP MCP
4
+
5
+ Users should not need to paste a long operations prompt. After connecting the
6
+ hosted `sap` MCP server, say this to the agent:
7
+
8
+ ```text
9
+ Start SAP MCP.
10
+ ```
11
+
12
+ The agent should then:
13
+
14
+ 1. call `sap_agent_start`;
15
+ 2. call `sap_skills_bundle` with `includeContents: true`;
16
+ 3. use exact tool names from `tools/list`;
17
+ 4. call `sap_payments_readiness` if the local `sap_payments` bridge is visible;
18
+ 5. use `sap_payments_call_paid_tool` for paid hosted tools that return x402 payment requirements.
19
+
20
+ If `sap_payments` is missing, run the wizard repair flow and restart the agent
21
+ runtime:
22
+
23
+ ```bash
24
+ npm exec --yes --package @oobe-protocol-labs/sap-mcp-server -- sap-mcp-config wizard
25
+ ```
26
+
27
+ ## 2. Install Skills
4
28
 
5
29
  List bundled skills:
6
30
 
@@ -34,7 +58,7 @@ Install bundled skills into a local agent skill directory:
34
58
  }
35
59
  ```
36
60
 
37
- ## 2. Tool Selection
61
+ ## 3. Tool Selection
38
62
 
39
63
  Use profile and context first:
40
64
 
@@ -63,7 +87,7 @@ Use transactions:
63
87
  - `sap_sign_transaction`
64
88
  - `sap_submit_signed_transaction`
65
89
 
66
- ## 3. Agent Safety
90
+ ## 4. Agent Safety
67
91
 
68
92
  Agents must not:
69
93
 
@@ -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.0", "sap-mcp-server"]
109
+ args = ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.2", "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.0", "sap-mcp-server"],
141
+ "args": ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.2", "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.0", "sap-mcp-server"],
173
+ "args": ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.2", "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.0
196
+ - @oobe-protocol-labs/sap-mcp-server@0.9.2
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.0", "sap-mcp-server"],
218
+ "args": ["--yes", "--package", "@oobe-protocol-labs/sap-mcp-server@0.9.2", "sap-mcp-server"],
219
219
  "env": {
220
220
  "SAP_MCP_ALLOW_ENV_CONFIG_OVERRIDE": "false",
221
221
  "SAP_MCP_PAYMENTS_BRIDGE_ONLY": "true",
@@ -0,0 +1,163 @@
1
+ # Smithery And MCP Marketplaces
2
+
3
+ ## 1. What Smithery Connects To
4
+
5
+ Smithery connects to the hosted SAP MCP endpoint:
6
+
7
+ ```txt
8
+ https://mcp.sap.oobeprotocol.ai/mcp
9
+ ```
10
+
11
+ The hosted endpoint is non-custodial. It can expose tools, prompts, resources,
12
+ metadata, free discovery calls, and x402 payment challenges, but it does not
13
+ store or load user keypairs.
14
+
15
+ Marketplace metadata:
16
+
17
+ ```txt
18
+ https://mcp.sap.oobeprotocol.ai/server.json
19
+ https://mcp.sap.oobeprotocol.ai/.well-known/mcp/server-card.json
20
+ https://mcp.sap.oobeprotocol.ai/smithery.config.schema.json
21
+ https://mcp.sap.oobeprotocol.ai/.well-known/x402
22
+ https://mcp.sap.oobeprotocol.ai/pay/provider.yml
23
+ ```
24
+
25
+ ## 2. Recommended Smithery Mode
26
+
27
+ Use Smithery first for free discovery and tool inspection:
28
+
29
+ - `initialize`
30
+ - `tools/list`
31
+ - `prompts/list`
32
+ - `resources/list`
33
+ - `sap_profile_current`
34
+ - `sap_skills_list`
35
+ - `sap_get_network_overview`
36
+ - `sap_payments_readiness` when the local bridge is also installed
37
+
38
+ Paid/write calls return an x402 challenge. That is expected behavior, not an
39
+ authentication error.
40
+
41
+ ## 3. Paid Tool Options
42
+
43
+ There are three supported paths for paid hosted SAP MCP tools.
44
+
45
+ | Path | Use When | What Pays |
46
+ | --- | --- | --- |
47
+ | Free discovery | The user is browsing tools, docs, metadata, or base context. | Nothing. |
48
+ | Native x402 client | The agent runtime or marketplace can parse `PAYMENT-REQUIRED`, sign locally, and retry with `PAYMENT-SIGNATURE` or `X-PAYMENT`. | The runtime's x402 wallet or payer. |
49
+ | Local `sap_payments` bridge | The runtime can call local MCP tools but does not replay x402 itself. | The user's local SAP MCP profile or external signer. |
50
+
51
+ The hosted server never signs for the user.
52
+
53
+ ## 4. Smithery Config Schema
54
+
55
+ SAP MCP publishes a Smithery-friendly JSON schema:
56
+
57
+ ```txt
58
+ https://mcp.sap.oobeprotocol.ai/smithery.config.schema.json
59
+ ```
60
+
61
+ The schema is intentionally optional because free discovery works immediately.
62
+ It asks the user or runtime to declare the intended usage mode:
63
+
64
+ - `free-discovery`
65
+ - `x402-native-client`
66
+ - `local-sap-payments-bridge`
67
+
68
+ When publishing or refreshing SAP MCP on Smithery, pass the same schema file:
69
+
70
+ ```bash
71
+ npx --yes smithery mcp publish https://mcp.sap.oobeprotocol.ai/mcp \
72
+ -n oobe-protocol/sap-mcp \
73
+ --config-schema smithery.config.schema.json
74
+ ```
75
+
76
+ ## 5. Local Bridge Setup
77
+
78
+ For most users who want paid/write tools, run the wizard locally:
79
+
80
+ ```bash
81
+ npm exec --yes --package @oobe-protocol-labs/sap-mcp-server -- sap-mcp-config wizard
82
+ ```
83
+
84
+ Choose the recommended full hosted setup. The wizard configures:
85
+
86
+ - hosted `sap` remote MCP;
87
+ - local `sap_payments` MCP bridge;
88
+ - active SAP MCP profile;
89
+ - local wallet or external signer boundary;
90
+ - policy limits for paid/write operations.
91
+
92
+ After restarting the agent runtime, ask the agent to run:
93
+
94
+ ```txt
95
+ sap_payments_readiness
96
+ sap_payments_profile_current
97
+ ```
98
+
99
+ Then paid hosted calls should be routed through:
100
+
101
+ ```txt
102
+ sap_payments_call_paid_tool
103
+ ```
104
+
105
+ ## 6. Native x402 Client Flow
106
+
107
+ If the user already has an x402-capable client, the flow is:
108
+
109
+ 1. Call the hosted paid tool normally.
110
+ 2. Receive `HTTP 402` with `PAYMENT-REQUIRED`.
111
+ 3. Parse the first accepted requirement from `accepts[0]`.
112
+ 4. Build and sign a fresh payment payload from that exact requirement.
113
+ 5. Retry the exact same MCP method and params in the same MCP session.
114
+ 6. Send the proof as `PAYMENT-SIGNATURE` or `X-PAYMENT`.
115
+ 7. Read `PAYMENT-RESPONSE` or `X-PAYMENT-RESPONSE` as the receipt.
116
+
117
+ The JSON-RPC `id` may change during retry, but the method and params must stay
118
+ the same. SAP MCP binds payment to the canonical tool request, not to a private
119
+ server-side session wallet.
120
+
121
+ ## 7. Why Calls Can Exceed Paid Volume
122
+
123
+ Marketplace traffic often contains many unpaid probes:
124
+
125
+ - capability scanning;
126
+ - `tools/list`;
127
+ - agents trying paid tools without an x402 payer;
128
+ - retries that stop after receiving the challenge;
129
+ - read-only marketplace analytics.
130
+
131
+ Those requests count as calls or payment challenges, but they do not count as
132
+ settled volume. Settled volume only increases when a valid x402 proof is
133
+ verified and settled through the OOBE facilitator.
134
+
135
+ ## 8. Strict Marketplace Monetization
136
+
137
+ OOBE hosted deployments can run strict tool monetization:
138
+
139
+ ```bash
140
+ SAP_MCP_MONETIZATION_STRICT_TOOLS=true
141
+ ```
142
+
143
+ In strict mode, MCP handshake and discovery still work, but every operational
144
+ tool call outside base profile, skill bootstrap, and local `sap_payments` bridge
145
+ helpers requires x402 payment. This is the correct mode when public marketplace
146
+ traffic should not receive free balance, token-account, or operational reads.
147
+
148
+ Strict mode does not make Smithery or any marketplace pay automatically. It only
149
+ ensures that unpaid operational calls are challenged consistently. The caller
150
+ still needs a native x402 payer, a custom x402 CLI/proxy, or the local
151
+ `sap_payments` bridge.
152
+
153
+ ## 9. Agent Instructions
154
+
155
+ Agents should summarize SAP MCP marketplace state like this:
156
+
157
+ > SAP MCP hosted tools are connected. Free discovery works directly. Paid or
158
+ > write tools require either a native x402-capable client or the local
159
+ > `sap_payments` bridge created by the SAP MCP wizard. OOBE never receives
160
+ > user keypair bytes.
161
+
162
+ Avoid saying the hosted server "has no signer" as if the user is blocked. The
163
+ correct trust model is: remote tools, local signatures.
Binary file
Binary file
Binary file
@@ -0,0 +1,22 @@
1
+ <svg viewBox="0 0 120 120" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <defs>
3
+ <linearGradient id="lobster-gradient" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" stop-color="#ff4d4d"/>
5
+ <stop offset="100%" stop-color="#991b1b"/>
6
+ </linearGradient>
7
+ </defs>
8
+ <!-- Body -->
9
+ <path d="M60 10 C30 10 15 35 15 55 C15 75 30 95 45 100 L45 110 L55 110 L55 100 C55 100 60 102 65 100 L65 110 L75 110 L75 100 C90 95 105 75 105 55 C105 35 90 10 60 10Z" fill="url(#lobster-gradient)"/>
10
+ <!-- Left Claw -->
11
+ <path d="M20 45 C5 40 0 50 5 60 C10 70 20 65 25 55 C28 48 25 45 20 45Z" fill="url(#lobster-gradient)"/>
12
+ <!-- Right Claw -->
13
+ <path d="M100 45 C115 40 120 50 115 60 C110 70 100 65 95 55 C92 48 95 45 100 45Z" fill="url(#lobster-gradient)"/>
14
+ <!-- Antenna -->
15
+ <path d="M45 15 Q35 5 30 8" stroke="#ff4d4d" stroke-width="3" stroke-linecap="round"/>
16
+ <path d="M75 15 Q85 5 90 8" stroke="#ff4d4d" stroke-width="3" stroke-linecap="round"/>
17
+ <!-- Eyes -->
18
+ <circle cx="45" cy="35" r="6" fill="#050810"/>
19
+ <circle cx="75" cy="35" r="6" fill="#050810"/>
20
+ <circle cx="46" cy="34" r="2.5" fill="#00e5cc"/>
21
+ <circle cx="76" cy="34" r="2.5" fill="#00e5cc"/>
22
+ </svg>
@@ -307,6 +307,11 @@
307
307
  "format": "uri",
308
308
  "description": "Optional pay.sh checkout URL included in 402 response bodies."
309
309
  },
310
+ "strictTools": {
311
+ "type": "boolean",
312
+ "default": false,
313
+ "description": "When true, hosted monetization charges every non-essential tool call. MCP handshake/discovery, base profile, skills bootstrap, and local payment bridge helper tools remain free."
314
+ },
310
315
  "prices": {
311
316
  "type": "object",
312
317
  "additionalProperties": false,
@@ -55,6 +55,7 @@ export declare const envSchema: z.ZodObject<{
55
55
  SAP_MCP_X402_FACILITATOR_AUTH_TOKEN: z.ZodOptional<z.ZodString>;
56
56
  SAP_MCP_X402_MAX_TIMEOUT_SECONDS: z.ZodDefault<z.ZodNumber>;
57
57
  SAP_MCP_PAY_SH_CHECKOUT_URL: z.ZodOptional<z.ZodString>;
58
+ SAP_MCP_MONETIZATION_STRICT_TOOLS: z.ZodDefault<z.ZodEffects<z.ZodBoolean, boolean, unknown>>;
58
59
  SAP_MCP_PRICE_READ_PREMIUM_USD: z.ZodDefault<z.ZodNumber>;
59
60
  SAP_MCP_PRICE_BUILDER_USD: z.ZodDefault<z.ZodNumber>;
60
61
  SAP_MCP_PRICE_VALUE_FIXED_USD: z.ZodDefault<z.ZodNumber>;
@@ -88,6 +89,7 @@ export declare const envSchema: z.ZodObject<{
88
89
  SAP_MCP_MONETIZATION_ENABLED: boolean;
89
90
  SAP_MCP_MONETIZATION_PROVIDER: "x402" | "pay-sh";
90
91
  SAP_MCP_X402_MAX_TIMEOUT_SECONDS: number;
92
+ SAP_MCP_MONETIZATION_STRICT_TOOLS: boolean;
91
93
  SAP_MCP_PRICE_READ_PREMIUM_USD: number;
92
94
  SAP_MCP_PRICE_BUILDER_USD: number;
93
95
  SAP_MCP_PRICE_VALUE_FIXED_USD: number;
@@ -153,6 +155,7 @@ export declare const envSchema: z.ZodObject<{
153
155
  SAP_MCP_X402_FACILITATOR_AUTH_TOKEN?: string | undefined;
154
156
  SAP_MCP_X402_MAX_TIMEOUT_SECONDS?: number | undefined;
155
157
  SAP_MCP_PAY_SH_CHECKOUT_URL?: string | undefined;
158
+ SAP_MCP_MONETIZATION_STRICT_TOOLS?: unknown;
156
159
  SAP_MCP_PRICE_READ_PREMIUM_USD?: number | undefined;
157
160
  SAP_MCP_PRICE_BUILDER_USD?: number | undefined;
158
161
  SAP_MCP_PRICE_VALUE_FIXED_USD?: number | undefined;
@@ -234,6 +237,7 @@ export interface SapMcpMonetizationConfig {
234
237
  facilitatorAuthToken?: string;
235
238
  maxTimeoutSeconds: number;
236
239
  payShCheckoutUrl?: string;
240
+ strictTools: boolean;
237
241
  prices: {
238
242
  readPremiumUsd: number;
239
243
  builderUsd: number;
@@ -1 +1 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/config/env.ts"],"names":[],"mappings":"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"}
@@ -112,6 +112,7 @@ export const envSchema = z.object({
112
112
  SAP_MCP_X402_FACILITATOR_AUTH_TOKEN: z.string().optional(),
113
113
  SAP_MCP_X402_MAX_TIMEOUT_SECONDS: z.coerce.number().positive().default(120),
114
114
  SAP_MCP_PAY_SH_CHECKOUT_URL: z.string().url().optional(),
115
+ SAP_MCP_MONETIZATION_STRICT_TOOLS: booleanEnvSchema.default(false),
115
116
  SAP_MCP_PRICE_READ_PREMIUM_USD: z.coerce.number().positive().default(0.008),
116
117
  SAP_MCP_PRICE_BUILDER_USD: z.coerce.number().positive().default(0.05),
117
118
  SAP_MCP_PRICE_VALUE_FIXED_USD: z.coerce.number().nonnegative().default(0.2),
@@ -518,6 +519,8 @@ function transformToRuntimeConfig(env, fileConfig = {}) {
518
519
  facilitatorAuthToken: env.SAP_MCP_X402_FACILITATOR_AUTH_TOKEN,
519
520
  maxTimeoutSeconds: env.SAP_MCP_X402_MAX_TIMEOUT_SECONDS,
520
521
  payShCheckoutUrl: env.SAP_MCP_PAY_SH_CHECKOUT_URL,
522
+ strictTools: asOptionalBoolean(monetizationConfig.strictTools)
523
+ ?? env.SAP_MCP_MONETIZATION_STRICT_TOOLS,
521
524
  prices: {
522
525
  readPremiumUsd: asOptionalNumber(monetizationPrices.readPremiumUsd) ?? env.SAP_MCP_PRICE_READ_PREMIUM_USD,
523
526
  builderUsd: asOptionalNumber(monetizationPrices.builderUsd) ?? env.SAP_MCP_PRICE_BUILDER_USD,