bsv-mcp 0.5.0 → 0.5.1

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,26 @@
1
1
  # BSV MCP Server Changelog
2
2
 
3
+ ## [0.5.1] - 2026-09-08
4
+
5
+ ### Changed
6
+
7
+ - Start local stdio when no transport is specified, with early stdout guards in
8
+ both source and bundled entry points. Explicit `TRANSPORT=http` retains the
9
+ existing HTTP server; the deployed hosted endpoint and OAuth routes are unchanged.
10
+ - Run the Codex plugin through the local npm executable instead of hosted MCP.
11
+ The executable requires Bun; the npx installer also requires Node.js.
12
+ - Direct homepage tool links to a generated reference with 106 full tools and six
13
+ compact families, category navigation, search, individual URLs and Markdown.
14
+ - Generate tool schemas and registration availability across isolated wallet
15
+ configurations, preserving schema variants and conditional payment tools.
16
+ - Separate task examples from the tool reference and document wallet and backend
17
+ settings in tables. Local installation needs no account sign-in.
18
+
19
+ ### Fixed
20
+
21
+ - Reject invalid transport values before wallet initialization.
22
+ - Honor reduced-motion preferences while scrolling between homepage sections.
23
+
3
24
  ## [0.5.0] - 2026-09-08
4
25
 
5
26
  ### Added
package/README.md CHANGED
@@ -2,109 +2,73 @@
2
2
 
3
3
  BSV MCP connects your AI assistant to Bitcoin SV. Ask it to check a transaction, show your balance, send a payment, or create and trade ordinals (content recorded on the blockchain).
4
4
 
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)
5
+ [Documentation](https://bsvmcp.com/docs) · [All tools](https://bsvmcp.com/docs/tools) · [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
7
+ ## Install
8
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
-
19
- ## Quick start
20
-
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:
9
+ Install [Bun](https://bun.sh) to run the server and Node.js for the `npx` commands below, then add it to your client:
41
10
 
42
11
  ```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.
12
+ # Codex
13
+ codex mcp add bsv-mcp -- npx -y bsv-mcp@latest --stdio
50
14
 
51
- Choose one explicit local wallet mode when registering the server:
52
-
53
- ```sh
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
59
-
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
15
+ # Claude Code
16
+ claude mcp add --transport stdio bsv-mcp -- npx -y bsv-mcp@latest --stdio
69
17
  ```
70
18
 
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
19
+ Choose one command. For Cursor or Claude Desktop, use this server configuration:
20
+
21
+ ```json
22
+ {
23
+ "mcpServers": {
24
+ "bsv-mcp": {
25
+ "command": "npx",
26
+ "args": ["-y", "bsv-mcp@latest", "--stdio"]
27
+ }
28
+ }
29
+ }
79
30
  ```
80
31
 
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:
97
-
98
- ```sh
99
- claude plugin install bsv-mcp@b-open-io
32
+ Restart your client, then ask: **“Run bsv_status and explain what is available.”**
33
+ Local stdio needs no Sigma account or OAuth sign-in. It is also the default when
34
+ no transport is specified. Existing self-hosted HTTP remains opt-in through
35
+ `TRANSPORT=http`; the deployed hosted endpoint is unchanged.
36
+
37
+ For the Codex desktop plugin, add `b-open-io/claude-plugins` in the plugin
38
+ marketplace and install **BSV MCP**. The plugin starts the local npm executable
39
+ and requires Node.js and Bun. Claude Code and Grok plugins bundle the local server and
40
+ require Bun. Choose one registration to avoid duplicate tools.
41
+
42
+ ## Connect a wallet
43
+
44
+ Ask your assistant to run `wallet_onboarding`. Create, import or unlock a Vault
45
+ in the local browser. Back it up before funding. Enter passwords only in the
46
+ local setup UI, never in chat. After a server restart, unlock it again.
47
+
48
+ To use an existing BRC-100 wallet, configure its signing API instead:
49
+
50
+ ```json
51
+ {
52
+ "mcpServers": {
53
+ "bsv-mcp": {
54
+ "command": "npx",
55
+ "args": ["-y", "bsv-mcp@latest", "--stdio"],
56
+ "env": {
57
+ "BRC100_WALLET_URL": "http://127.0.0.1:3321",
58
+ "BRC100_WALLET_ORIGINATOR": "bsv-mcp.local"
59
+ }
60
+ }
61
+ }
62
+ }
100
63
  ```
101
64
 
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).
65
+ The wallet keeps its keys and controls permission requests. Its signing API is
66
+ separate from a wallet-storage endpoint. See [wallet setup](https://bsvmcp.com/docs#wallets)
67
+ for network settings, account selection and project roles.
106
68
 
107
- Ask your agent: **“Run bsv_status, then show my wallet balance.”**
69
+ The package also includes the Bun-based `bsv-mcp-local` launcher for explicit external,
70
+ legacy embedded and project configurations. Source-checkout examples live in
71
+ [the installation guide](docs/install-verification.md).
108
72
 
109
73
  ## MCP protocol compatibility
110
74
 
@@ -131,15 +95,14 @@ const client = new Client(
131
95
  ```
132
96
 
133
97
  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.
98
+ Legacy protocol compatibility is enabled by default; the connected client must support the approval flow needed by the requested tool.
136
99
 
137
100
  The full tool catalog remains the default and is capability-derived: wallet
138
101
  mode, enabled modules, account context, and the selected profile determine what
139
102
  `tools/list` returns. The checked-in manifest is a synthetic baseline for one
140
103
  configured server, not a promise of a fixed default count. Set
141
104
  `MCP_TOOL_CATALOG=compact` only to opt into bounded read families; compact mode
142
- is a staged capability pending release validation. Tool availability still
105
+ uses the same underlying handlers. Tool availability still
143
106
  depends on wallet mode and enabled modules. Its baseline read families are
144
107
  `bsv_read`, `ordinals_read`, `wallet_read`, and `utility`, each with a bounded
145
108
  operation enum; unknown operations are rejected. Eligible sessions also expose
@@ -187,8 +150,7 @@ It defaults to disabled broadcasting; set `DISABLE_BROADCASTING=false` in its
187
150
  runtime environment to enable transaction tools with the signer's approval.
188
151
 
189
152
  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.
153
+ server when you need to switch between them. Use only the registrations needed by the project.
192
154
 
193
155
  Embedded wallets can list pending PeerPay payments and receive a selected
194
156
  payment with `wallet_peerPayments`. Receiving requires a message ID and
@@ -228,7 +190,7 @@ modules.
228
190
 
229
191
  - [Wallet setup](https://bsvmcp.com/docs#wallets)
230
192
  - [Backend configuration](https://bsvmcp.com/docs#backends)
231
- - [Tools and workflows](https://bsvmcp.com/docs#tools)
193
+ - [Tools and workflows](https://bsvmcp.com/docs/tools)
232
194
  - [Paid service requests](https://bsvmcp.com/docs#x402)
233
195
  - [Sponsorship](https://bsvmcp.com/docs#sponsorship) and [agent delegation](https://bsvmcp.com/docs#delegation)
234
196
  - [Troubleshooting and development](https://bsvmcp.com/docs#troubleshooting)
@@ -249,7 +211,7 @@ Experimental software; APIs may change. Keep a wallet backup. If a transaction r
249
211
  ## Preparing a release package
250
212
 
251
213
  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`,
214
+ or publish that tarball, for example `bun publish /tmp/bsv-mcp-0.5.1.tgz`,
253
215
  after completing the release checks and selecting the release version.
254
216
  Do not publish directly from the checkout: its manifest contains Bun patches
255
217
  needed to build the wallet fixes, which fail to resolve in consumer projects.
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var __isStdio = process.argv.includes("--stdio") || (process.env.TRANSPORT || "").toLowerCase() === "stdio";
3
+ var __isStdio = process.argv.includes("--stdio") || (process.env.TRANSPORT ?? (process.argv.length <= 2 ? "stdio" : "")).toLowerCase() === "stdio";
4
4
  if (__isStdio) {
5
5
  var __err = console.error.bind(console);
6
6
  console.log = function() { __err.apply(null, ["[log]"].concat([].slice.call(arguments))); };
@@ -71,7 +71,7 @@ var __require = /* @__PURE__ */ createRequire(import.meta.url);
71
71
  // utils/stdioGuard.ts
72
72
  var isStdio2;
73
73
  var init_stdioGuard = __esm(() => {
74
- isStdio2 = process.argv.includes("--stdio") || process.env.TRANSPORT?.toLowerCase() === "stdio";
74
+ isStdio2 = process.argv.includes("--stdio") || (process.env.TRANSPORT ?? (process.argv.length <= 2 ? "stdio" : "")).toLowerCase() === "stdio";
75
75
  if (isStdio2) {
76
76
  const err = console.error.bind(console);
77
77
  console.log = (...args) => err("[log]", ...args);
@@ -25873,7 +25873,7 @@ var init_package = __esm(() => {
25873
25873
  name: "bsv-mcp",
25874
25874
  module: "dist/index.js",
25875
25875
  type: "module",
25876
- version: "0.5.0",
25876
+ version: "0.5.1",
25877
25877
  license: "MIT",
25878
25878
  author: "satchmo",
25879
25879
  description: "A collection of Bitcoin SV (BSV) tools for the Model Context Protocol (MCP) framework",
@@ -260731,7 +260731,7 @@ var require_timestamp2 = __commonJS(function(exports, module) {
260731
260731
 
260732
260732
  // node_modules/knex/lib/migrations/migrate/MigrationGenerator.js
260733
260733
  var require_MigrationGenerator = __commonJS(function(exports, module) {
260734
- var __dirname = "/Users/satchmo/code/bsv-mcp/node_modules/knex/lib/migrations/migrate";
260734
+ var __dirname = "/Users/satchmo/.codex/worktrees/local-mcp-tool-reference/node_modules/knex/lib/migrations/migrate";
260735
260735
  var path = __require("path");
260736
260736
  var { writeJsFileUsingTemplate } = require_template2();
260737
260737
  var { getMergedConfig } = require_migrator_configuration_merger();
@@ -261438,7 +261438,7 @@ var require_seeder_configuration_merger = __commonJS(function(exports, module) {
261438
261438
 
261439
261439
  // node_modules/knex/lib/migrations/seed/Seeder.js
261440
261440
  var require_Seeder = __commonJS(function(exports, module) {
261441
- var __dirname = "/Users/satchmo/code/bsv-mcp/node_modules/knex/lib/migrations/seed";
261441
+ var __dirname = "/Users/satchmo/.codex/worktrees/local-mcp-tool-reference/node_modules/knex/lib/migrations/seed";
261442
261442
  var path = __require("path");
261443
261443
  var { ensureDirectoryExists } = require_fs();
261444
261444
  var { writeJsFileUsingTemplate } = require_template2();
@@ -313109,15 +313109,16 @@ async function main() {
313109
313109
  console.log(`
313110
313110
  BSV MCP Server v${package_default.version}
313111
313111
 
313112
- Usage: bun run index.ts [options]
313112
+ Usage: bsv-mcp [options]
313113
313113
 
313114
313114
  Options:
313115
+ --stdio Use local stdio (the default; overrides TRANSPORT)
313115
313116
  --help, -h Show this help message
313116
313117
  --version, -v Show version information
313117
313118
  vault-setup Open the local read-only Vault migration preview
313118
313119
 
313119
313120
  Environment Variables:
313120
- TRANSPORT Transport mode: 'stdio' or 'http' (default: http)
313121
+ TRANSPORT Transport mode: 'stdio' or 'http' (default: stdio; HTTP requires explicit opt-in)
313121
313122
  PORT HTTP server port (default: 3000)
313122
313123
  BRC100_WALLET_URL Existing SDK HTTPWalletJSON signer RPC URL
313123
313124
  BRC100_WALLET_ORIGINATOR Signer permission origin (default: bsv-mcp.local)
@@ -313156,6 +313157,12 @@ Authentication:
313156
313157
  console.log(`${package_default.name} v${package_default.version}`);
313157
313158
  process.exit(0);
313158
313159
  }
313160
+ if (CONFIG.transportMode !== "stdio" && CONFIG.transportMode !== "http") {
313161
+ throw new Error("TRANSPORT must be stdio or http; omit it to run locally over stdio");
313162
+ }
313163
+ if (args.some((arg) => arg !== "--stdio")) {
313164
+ throw new Error("Unknown server argument; use --help for supported commands");
313165
+ }
313159
313166
  const projectConfig = readProjectWalletConfig();
313160
313167
  const projectRuntime = projectConfig ? await createProjectWalletRuntime() : undefined;
313161
313168
  const externalWallet = projectRuntime ? undefined : readExternalWalletConfig();
@@ -313842,7 +313849,7 @@ var init_server2 = __esm(() => {
313842
313849
  loadBapTools: process.env.DISABLE_BAP_TOOLS !== "true",
313843
313850
  loadBsocialTools: process.env.DISABLE_BSOCIAL_TOOLS !== "true",
313844
313851
  disableBroadcasting: process.env.DISABLE_BROADCASTING === "true",
313845
- transportMode: process.argv.includes("--stdio") ? "stdio" : process.env.TRANSPORT?.toLowerCase() || "http",
313852
+ transportMode: process.argv.includes("--stdio") ? "stdio" : (process.env.TRANSPORT ?? "stdio").toLowerCase(),
313846
313853
  port: Number.parseInt(process.env.PORT || "3000", 10),
313847
313854
  useDroplitApi: process.env.USE_DROPLIT_API === "true",
313848
313855
  droplitApiUrl: process.env.DROPLIT_API_URL || "http://127.0.0.1:4000",
@@ -313858,7 +313865,7 @@ var init_server2 = __esm(() => {
313858
313865
  });
313859
313866
 
313860
313867
  // utils/stdioGuard.ts
313861
- var isStdio = process.argv.includes("--stdio") || process.env.TRANSPORT?.toLowerCase() === "stdio";
313868
+ var isStdio = process.argv.includes("--stdio") || (process.env.TRANSPORT ?? (process.argv.length <= 2 ? "stdio" : "")).toLowerCase() === "stdio";
313862
313869
  if (isStdio) {
313863
313870
  const err = console.error.bind(console);
313864
313871
  console.log = (...args) => err("[log]", ...args);
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "bsv-mcp",
3
3
  "module": "dist/index.js",
4
4
  "type": "module",
5
- "version": "0.5.0",
5
+ "version": "0.5.1",
6
6
  "license": "MIT",
7
7
  "author": "satchmo",
8
8
  "description": "A collection of Bitcoin SV (BSV) tools for the Model Context Protocol (MCP) framework",