bsv-mcp 0.4.0 → 0.5.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,99 @@
1
1
  # BSV MCP Server Changelog
2
2
 
3
+ ## [0.5.0] - 2026-09-08
4
+
5
+ ### Added
6
+
7
+ - Build release tarballs with a separate consumer manifest so Bun installs
8
+ do not try to resolve checkout-only wallet patches.
9
+
10
+ - Use separate identity and ordinals wallets for SIGMA-signed inscriptions
11
+ through the existing 1Sat SDK local pipeline.
12
+
13
+ - Select existing private/WIF Vault entries and link them to local accounts
14
+ without modifying the encrypted Vault.
15
+
16
+ - Import multiple wallets into one Vault and choose global payment, identity,
17
+ and ordinals keys, with independent overrides in native project MCP settings.
18
+
19
+ - Create, import, and unlock an embedded wallet through private local browser
20
+ setup. Activation refreshes the connected MCP session immediately; the ready
21
+ screen shows a compact, animated tool collage from its enabled catalog, with
22
+ pause controls and reduced-motion support.
23
+ - Receive selected PeerPay payments with `wallet_peerPayments` (or the compact
24
+ `wallet_payments` family). Wallet acceptance precedes acknowledgement;
25
+ automatic MessageBox service-fee spending is refused. Availability is limited
26
+ to eligible embedded wallets.
27
+ - Discover skill metadata and links with `utils_find_skills`, using a bounded,
28
+ cached remote index without installing or fetching skill contents.
29
+ - Preflight the published BAP identity before Sigma inscription signing when
30
+ `wallet_createOrdinals` requests `signWithBAP`.
31
+
32
+ ### Changed
33
+
34
+ - Read every default-basket output page when calculating wallet balance,
35
+ and refuse partial totals when pagination is inconsistent.
36
+
37
+ - Supply a non-administrator MCP originator for local SDK calls that omit it,
38
+ preserving spending approval while allowing key and signing operations.
39
+
40
+ - Restrict the hosted Next.js MCP route to public reads, regardless of key
41
+ environment variables, and answer unauthenticated CORS preflight at both
42
+ the root endpoint and `/api/mcp`.
43
+ - Discover custom wallet locations only from explicit local settings.
44
+
45
+ - Retire static tutorial prompts and BRC/BitCom resource entries. Changelog,
46
+ JungleBus, and MCP App resources remain available.
47
+ - Produce consistent production bundles regardless of the caller’s
48
+ `NODE_ENV`, and remove stale local UI build assets from packaged output.
49
+
50
+ - Migrate the server/client/core boundaries and the surrounding server
51
+ lifecycle, stdio transport, hosted adapter, request routing, and
52
+ prompt/resource registrations to the split MCP TypeScript SDK v2 packages.
53
+ - Make protocol `2026-07-28` primary across stdio, local HTTP, and hosted HTTP.
54
+ Accept supported 2025 clients automatically; `MCP_LEGACY_COMPATIBILITY=false`
55
+ explicitly requires modern clients.
56
+ - Execute modern approval-dependent tools through request-scoped continuations
57
+ bound to the original operation, authenticated principal, arguments, and expiry.
58
+ Cancellation and revocation reject pending approvals; replay cannot re-execute
59
+ the callback. Legacy approvals also remain scoped to their requesting client.
60
+ - Open all configured project roles, including BRC-42 child and BRC-157/Yours
61
+ profile derivations. Isolate child-key storage and preserve selected root
62
+ databases and deposit prefixes.
63
+ - Support external per-role signer endpoints, identity pins, and project-specific
64
+ permission origins without local key loading.
65
+ - Expose BRC-100 BAP publication, rotation, attestations, profiles, and signed
66
+ BSocial posts through the selected identity wallet.
67
+ - Preserve ordinal outputs and token amounts in browser-signed dashboard sweeps.
68
+ Verify source transactions and signatures, bind preparation to the user and
69
+ wallet, and reject duplicate submission. Read all dashboard balance pages.
70
+ - Keep `@modelcontextprotocol/sdk` v1 in the staged dependency graph because
71
+ `@modelcontextprotocol/ext-apps` 1.7.5 still declares it as a peer. A local
72
+ MCP Apps adapter calls native SDK v2 `registerTool` and `registerResource`,
73
+ preserving v2 schema conversion and request validation. ext-apps remains for
74
+ shared constants and its browser `App` implementation; this does not make
75
+ ext-apps itself v2-native.
76
+ - Keep the full tool catalog as the default and capability-derived. Add an
77
+ explicit `MCP_TOOL_CATALOG=compact` opt-in profile for bounded read families;
78
+ local compact catalog and routing tests pass; hosted and browser-host
79
+ validation remain separate release gates.
80
+
81
+ ### Compatibility
82
+
83
+ - The catalog is capability-derived. The checked-in manifest is a synthetic
84
+ baseline for one configured server, while wallet mode, enabled modules,
85
+ account context, and the selected profile determine actual tool exposure.
86
+ Compact mode is an explicit opt-in.
87
+ - Modern protocol tests cover stdio and authenticated HTTP, approval accept,
88
+ decline, cancellation, expiry, replay, external signer HTTP crypto, and
89
+ project-role derivations. Installed clients that only negotiate 2025 connect through default legacy
90
+ compatibility; their success is not modern acceptance.
91
+ - The hosted route remains public-read-only. Browser-host MCP Apps integration
92
+ and deployed traffic require validation in their actual host environments.
93
+
94
+ See [MCP client protocol support](docs/mcp-client-protocol-support.md) for
95
+ endpoint contracts and the distinction between protocol and host validation.
96
+
3
97
  ## [0.4.0] - 2026-09-07
4
98
 
5
99
  ### Breaking changes
@@ -377,4 +471,4 @@
377
471
  - Ordinals tools for NFT functionality
378
472
  - BSV tools for blockchain interaction
379
473
  - MNEE token tools
380
- - Utility tools for data conversion
474
+ - Utility tools for data conversion
package/README.md CHANGED
@@ -4,33 +4,227 @@ BSV MCP connects your AI assistant to Bitcoin SV. Ask it to check a transaction,
4
4
 
5
5
  [Documentation](https://bsvmcp.com/docs) · [Connect hosted](https://bsvmcp.com/connect) · [npm](https://www.npmjs.com/package/bsv-mcp) · [Issues](https://github.com/b-open-io/bsv-mcp/issues)
6
6
 
7
+ ## Install in ChatGPT desktop or Codex
8
+
9
+ In Plugins, choose **Add marketplace** and enter `b-open-io/claude-plugins`.
10
+ Leave Git ref and Sparse paths blank. Select **BSV MCP** in the bOpen marketplace
11
+ and install it. Authenticate through Sigma Identity when prompted, then start a
12
+ new chat and ask: “Run bsv_status and explain which services are available.”
13
+
14
+ The plugin uses hosted MCP, so you do not need Bun or a local wallet. Signing in
15
+ does not authorize spending or connect a wallet on your computer. For wallet
16
+ operations, use the local setup below. If you already have a manual BSV MCP
17
+ connection, choose which connection to use to avoid duplicate tools.
18
+
7
19
  ## Quick start
8
20
 
9
- Install [Bun](https://bun.sh). Set up an encrypted account with `bunx bsv-mcp@latest init`, or connect an existing signer as described in [wallet setup](https://bsvmcp.com/docs#wallets). Then register the server:
21
+ Install [Bun](https://bun.sh), clone this repository, and build the local
22
+ server. The local wallet registrations below use the source checkout's launcher;
23
+ `scripts/local-mcp-launcher.ts` is not included in the npm package.
24
+
25
+ ```sh
26
+ git clone https://github.com/b-open-io/bsv-mcp.git
27
+ cd bsv-mcp
28
+ bun install
29
+ bun run build
30
+ ```
31
+
32
+ For legacy embedded mode, create an encrypted account in a local terminal. The
33
+ source-checkout launcher can open it after creation:
34
+
35
+ ```sh
36
+ bun run index.ts init --account default
37
+ ```
38
+
39
+ For a new local Vault, or to import an existing wallet through the private
40
+ browser setup, register the built server directly:
41
+
42
+ ```sh
43
+ # Codex: local Vault setup and unlock
44
+ codex mcp add bsv-mcp-vault \
45
+ -- bun --no-env-file /absolute/path/to/bsv-mcp/dist/index.js --stdio
46
+ ```
47
+
48
+ If the server reports that wallet setup is needed, ask your agent to run
49
+ `wallet_onboarding`, then create, import, or unlock the wallet in the browser.
50
+
51
+ Choose one explicit local wallet mode when registering the server:
10
52
 
11
53
  ```sh
12
- # Codex
13
- codex mcp add bsv-mcp -- bunx bsv-mcp@latest --stdio
54
+ # Codex: existing BRC-100 signer
55
+ codex mcp add bsv-mcp-external \
56
+ --env BRC100_WALLET_URL=https://signer.example/rpc \
57
+ --env BRC100_WALLET_ORIGINATOR=bsv-mcp.local \
58
+ -- bun --no-env-file /absolute/path/to/bsv-mcp/scripts/local-mcp-launcher.ts external
14
59
 
15
- # Claude Code
16
- claude mcp add --transport stdio bsv-mcp -- bunx bsv-mcp@latest --stdio
60
+ # Codex: existing encrypted local account (legacy account path)
61
+ codex mcp add bsv-mcp-embedded \
62
+ --env BSV_MCP_ACCOUNT=default \
63
+ -- bun --no-env-file /absolute/path/to/bsv-mcp/scripts/local-mcp-launcher.ts embedded
64
+
65
+ # Codex: project-bound Vault roles
66
+ codex mcp add bsv-mcp-project \
67
+ -- bun --no-env-file /absolute/path/to/bsv-mcp/scripts/local-mcp-launcher.ts project \
68
+ --project-root /absolute/path/to/project --project-id project.example
69
+ ```
70
+
71
+ Claude Code uses the same launcher and can register either mode with
72
+ `claude mcp add --transport stdio`, for example:
73
+
74
+ ```sh
75
+ claude mcp add --transport stdio bsv-mcp-external \
76
+ --env BRC100_WALLET_URL=https://signer.example/rpc \
77
+ --env BRC100_WALLET_ORIGINATOR=bsv-mcp.local \
78
+ -- bun --no-env-file /absolute/path/to/bsv-mcp/scripts/local-mcp-launcher.ts external
17
79
  ```
18
80
 
19
- Or install the Claude Code plugin from the b-open-io marketplace:
81
+ Set `BSV_MCP_PASSWORD` in the MCP host's runtime environment for the launcher's
82
+ existing-account embedded mode and for project mode. The direct Vault setup
83
+ registration above collects its password in the local browser instead.
84
+ Do not put that password in the registration command or saved MCP configuration.
85
+ The launcher passes it to the child only at runtime, never through argv or its
86
+ diagnostics. `BRC100_WALLET_URL` and `BRC100_WALLET_ORIGINATOR` are read at
87
+ runtime for external mode. Claude Code uses the same launcher command with
88
+ `claude mcp add --transport stdio` and its `--env` options for non-secret values.
89
+
90
+ The launcher starts the checked-out `dist/index.js` with `--no-env-file`, an
91
+ explicit mode, and a working directory outside the checkout. Its embedded mode
92
+ requires an existing encrypted account; it does not create or migrate one. Use
93
+ the direct server registration above when the browser setup must create or
94
+ import a local Vault wallet.
95
+
96
+ Or install the Claude Code plugin from the b-open-io marketplace for hosted MCP:
20
97
 
21
98
  ```sh
22
99
  claude plugin install bsv-mcp@b-open-io
23
100
  ```
24
101
 
25
- For other clients, use `bunx bsv-mcp@latest --stdio` as the MCP server command (stdio transport). For hosted access, connect to **https://bsvmcp.com**. See [client setup](https://bsvmcp.com/#install).
102
+ For another local client, register the same launcher command for external or
103
+ legacy embedded mode, or register `bun --no-env-file .../dist/index.js --stdio`
104
+ for browser-based Vault setup. For hosted access, connect to
105
+ **https://bsvmcp.com**. See [client setup](https://bsvmcp.com/#install).
26
106
 
27
107
  Ask your agent: **“Run bsv_status, then show my wallet balance.”**
28
108
 
109
+ ## MCP protocol compatibility
110
+
111
+ Protocol revision `2026-07-28` is preferred, with supported 2025 clients
112
+ accepted automatically on stdio and HTTP. No compatibility override is needed.
113
+ Set `MCP_LEGACY_COMPATIBILITY=false` only to require modern clients. This
114
+ setting also passes through the local launcher. The installed desktop client
115
+ was verified using legacy requests; modern support is tested separately.
116
+
117
+ Modern clients support wallet operations and request-scoped approval. Approval
118
+ continuations retain the original operation and bind to its authenticated user,
119
+ arguments, and expiry. Decline, cancellation, or session revocation stops the
120
+ operation; replaying a continuation does not repeat a transaction. A client
121
+ without form elicitation cannot approve a spend. External wallets retain their
122
+ own signer permission flow. The hosted route exposes public reads only.
123
+
124
+ For the split SDK v2 client:
125
+
126
+ ```ts
127
+ const client = new Client(
128
+ { name: "my-app", version: "1" },
129
+ { versionNegotiation: { mode: "auto" }, capabilities: { elicitation: { form: {} } } },
130
+ );
131
+ ```
132
+
133
+ Register a real human approval handler before using approval-dependent tools.
134
+ Older installed Codex clients may require the explicit compatibility setting;
135
+ this does not constitute modern client acceptance.
136
+
137
+ The full tool catalog remains the default and is capability-derived: wallet
138
+ mode, enabled modules, account context, and the selected profile determine what
139
+ `tools/list` returns. The checked-in manifest is a synthetic baseline for one
140
+ configured server, not a promise of a fixed default count. Set
141
+ `MCP_TOOL_CATALOG=compact` only to opt into bounded read families; compact mode
142
+ is a staged capability pending release validation. Tool availability still
143
+ depends on wallet mode and enabled modules. Its baseline read families are
144
+ `bsv_read`, `ordinals_read`, `wallet_read`, and `utility`, each with a bounded
145
+ operation enum; unknown operations are rejected. Eligible sessions also expose
146
+ separate mutating `wallet_setup` and `wallet_payments` families. See the [MCP client
147
+ protocol support guide](docs/mcp-client-protocol-support.md) for the per-family
148
+ operation bounds, endpoint contracts, MCP Apps compatibility, and validation
149
+ status.
150
+
151
+ ## Local wallet modes
152
+
153
+ External mode connects to an existing BRC-100 signer. The signer keeps the
154
+ private keys, wallet storage, and permission decisions; BSV MCP receives only
155
+ the SDK signer interface. Embedded mode uses an encrypted local Vault wallet.
156
+ The wallet-ready screen displays an interactive cloud of the connected session’s
157
+ available tools, generated from its live catalog.
158
+
159
+ When setup is needed, `wallet_onboarding` opens the private browser flow to
160
+ create, import, or unlock it. The selected account's database and storage
161
+ configuration remain in use. The launcher's existing-account embedded mode
162
+ still supplies `BSV_MCP_PASSWORD` at runtime.
163
+ Project mode opens every explicitly assigned role: `payments`,
164
+ `identity-signing`, `one-sat`, and `encryption`. It requires paired project
165
+ selectors and `BSV_MCP_PASSWORD` at runtime; set `VAULT_PATH` when the Vault
166
+ module does not provide a default path. Bindings pin the selected public key
167
+ and support direct keys, BRC-42 children, and BRC-157/Yours profile leaves.
168
+ Changing the project binding or expiring its session revokes captured handles.
169
+ Derived keys have separate storage; selecting the account's payment root keeps
170
+ its existing database and deposit prefix.
171
+
172
+ BRC-100 tools accept `walletRole` (`payments`, `identity`, `ordinals`, or
173
+ `encryption`). Method defaults select the matching role, and sign/abort action
174
+ continuations retain their originating wallet and authenticated user. An
175
+ unassigned role fails rather than borrowing another key. BAP tools use the
176
+ identity wallet for publication, rotation, attestations, and profiles without
177
+ exporting an xprv. That wallet also funds those transactions and retains BAP
178
+ records. Signed BSocial posts and SIGMA inscriptions use the configured identity.
179
+
180
+ External registrations can use the same project root/ID pair to derive an
181
+ isolated permission origin, without a Vault password. Optional
182
+ `BRC100_WALLET_PUBLIC_KEY` pins the signer identity. `BRC100_WALLET_ROLES` is a
183
+ JSON object selecting independent role endpoints and public-key pins; see
184
+ [external signer configuration](docs/external-signer.md). The source launcher
185
+ accepts `external --project-root /absolute/project --project-id project.example`.
186
+ It defaults to disabled broadcasting; set `DISABLE_BROADCASTING=false` in its
187
+ runtime environment to enable transaction tools with the signer's approval.
188
+
189
+ Each mode has its own process environment and should be registered as a separate
190
+ server when you need to switch between them. The hosted plugin is a third path:
191
+ it does not read a wallet on your computer.
192
+
193
+ Embedded wallets can list pending PeerPay payments and receive a selected
194
+ payment with `wallet_peerPayments`. Receiving requires a message ID and
195
+ acknowledges the message only after the wallet accepts it. These operations do
196
+ not pay MessageBox service fees. External signers and Droplit do not expose this tool. Project sessions require
197
+ an assigned payment role.
198
+
199
+ ## Find a skill
200
+
201
+ Use `utils_find_skills` with a short keyword query to find skills in the bOpen
202
+ catalog. It returns up to five descriptions and links to versioned `SKILL.md`
203
+ files. It does not download skill contents or install plugins. In compact mode,
204
+ select `utils_find_skills` from the `utility` tool.
205
+
206
+ The static tutorial prompts and BRC/BitCom resource catalog have been retired.
207
+ Use the skill finder for those references. Changelog, JungleBus documentation,
208
+ and the dashboard app resource remain available.
209
+
29
210
  ## Bring your wallet and infrastructure
30
211
 
31
- Connect a compatible existing wallet with `BRC100_WALLET_URL`, or select an encrypted account with `BSV_MCP_ACCOUNT` and unlock it with `BSV_MCP_PASSWORD` in the process environment. Startup never creates keys. An existing wallet keeps its keys and controls permissions. See the wallet setup guide for the required wallet API and configuration.
212
+ Connect a compatible existing wallet with `BRC100_WALLET_URL`, select a legacy
213
+ encrypted account with `BSV_MCP_ACCOUNT` and unlock it with
214
+ `BSV_MCP_PASSWORD`, or use the local Vault browser setup. If setup is needed,
215
+ ask your agent to run `wallet_onboarding`; after a restart, run it again to
216
+ unlock the saved Vault. Startup never creates keys. An existing wallet keeps
217
+ its keys and controls permissions. `PRIVATE_KEY_WIF` and `IDENTITY_KEY_WIF` are
218
+ legacy compatibility inputs; they trigger a persistent Vault migration warning
219
+ and should be removed after importing the keys into Vault. See the wallet setup
220
+ guide for the required wallet API and configuration.
32
221
 
33
- The default 1Sat backend is `https://api.1sat.app`. Override `ONESAT_API_URL` to use a compatible deployment; configure wallet storage, explorer, content, and legacy services separately. Available tools depend on wallet mode and enabled modules.
222
+ The default 1Sat API backend is `https://api.1sat.app`. New mainnet embedded
223
+ accounts use `https://wallet.1sat.app` for wallet storage by default; testnet
224
+ accounts do not select a remote storage provider unless configured. Override
225
+ `ONESAT_API_URL` for API services and `REMOTE_STORAGE_URL` for wallet storage;
226
+ these are separate settings. Available tools depend on wallet mode and enabled
227
+ modules.
34
228
 
35
229
  - [Wallet setup](https://bsvmcp.com/docs#wallets)
36
230
  - [Backend configuration](https://bsvmcp.com/docs#backends)
@@ -45,8 +239,20 @@ The default 1Sat backend is `https://api.1sat.app`. Override `ONESAT_API_URL` to
45
239
  bun install
46
240
  bun run dev # Website
47
241
  bun run build:all # MCP server and dashboard
48
- bun dist/index.js --stdio # Local stdio launch; npm publication is not required
242
+ # Supply BRC100_WALLET_URL in the host environment before this launch.
243
+ bun --no-env-file scripts/local-mcp-launcher.ts external # Source-checkout local launch
49
244
  bun test
50
245
  ```
51
246
 
52
247
  Experimental software; APIs may change. Keep a wallet backup. If a transaction request times out, check whether it succeeded before sending it again. MIT licensed.
248
+
249
+ ## Preparing a release package
250
+
251
+ Run `bun run pack:release /tmp` to build and create the release tarball. Install
252
+ or publish that tarball, for example `bun publish /tmp/bsv-mcp-0.5.0.tgz`,
253
+ after completing the release checks and selecting the release version.
254
+ Do not publish directly from the checkout: its manifest contains Bun patches
255
+ needed to build the wallet fixes, which fail to resolve in consumer projects.
256
+ The release command stages a separate manifest without build scripts, development
257
+ dependencies, or patch declarations; the compiled bundle includes the wallet fixes.
258
+ The destination directory must already exist.