mcp-pacemaker 2.0.1 → 2.0.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.
- package/CHANGELOG.md +31 -1
- package/CONTRIBUTING.md +14 -4
- package/README.md +110 -56
- package/package.json +1 -1
- package/ui/dist/third-party-manifest.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,10 +7,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
Target release: **2.0.2**. This candidate has not yet been published.
|
|
11
|
+
|
|
10
12
|
### Fixed
|
|
11
13
|
|
|
12
|
-
-
|
|
14
|
+
- Replace the old GitHub-install quick start in the npm package documentation with
|
|
15
|
+
npm-first installation, exact-version commands, prerequisites and setup boundaries.
|
|
16
|
+
- Preserve npm package-type permissions in isolated consumer checks instead of silently
|
|
17
|
+
reverting directory, file, Git, or remote dependency restrictions to npm defaults.
|
|
18
|
+
- Resolve native directory watcher paths in publication and compatibility test helpers,
|
|
13
19
|
avoiding Windows short-path watcher crashes without changing the selected files.
|
|
20
|
+
- Restore the legacy publisher's skipped-matrix job and whole-second timestamp handling
|
|
21
|
+
in reusable secret-collection admission, preserving source and execution checks.
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- Make the manual npm publisher reusable for explicitly selected stable 1.x/2.x
|
|
26
|
+
versions, with immutable published comparison peers and no active bootstrap actions.
|
|
27
|
+
- Keep the existing GitHub source-CI, collection/review, preparation, OIDC staging,
|
|
28
|
+
verification and separately approved owner-publication route for the selected release.
|
|
29
|
+
|
|
30
|
+
### Security
|
|
31
|
+
|
|
32
|
+
- Record a temporary **2.0.2-only producer risk acceptance** for `smol-toml 1.8.0`
|
|
33
|
+
in the CLI runtime and `braces 3.0.3`, `postcss-selector-parser 6.1.4` and
|
|
34
|
+
`source-map-js 1.2.1` in UI build tooling. The October 6 review keeps the
|
|
35
|
+
original **2026-10-12T00:00:00Z** expiry and binds both unchanged producer
|
|
36
|
+
locks and the exact native reports. Raw audit/OSV findings remain visible.
|
|
37
|
+
Dependency upgrades stay deferred from this documentation release.
|
|
38
|
+
This is not a patch or a clean advisory result; fresh-consumer findings are
|
|
39
|
+
not exempted. Remediation and exception removal are required
|
|
40
|
+
before expiry or the next release. See the
|
|
41
|
+
[exact advisories, exposure, mitigations and follow-up](docs/npm-publishing.md#temporary-202-producer-risk-acceptance).
|
|
42
|
+
|
|
43
|
+
## [2.0.1]
|
|
14
44
|
|
|
15
45
|
### Changed
|
|
16
46
|
|
package/CONTRIBUTING.md
CHANGED
|
@@ -103,15 +103,21 @@ instead of installing bundled Chromium. CI uses bundled Chromium, not that overr
|
|
|
103
103
|
Both standalone test commands **fail** when preparation is missing or candidate bytes have
|
|
104
104
|
changed. Clean and prepare again after changing package files, built assets, or Node major.
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
Historical compatibility baselines remain explicitly **1.3.0 and 2.0.0**.
|
|
107
|
+
Candidate versions must be canonical stable **1.x legacy / 2.x current** versions.
|
|
108
|
+
The owner selects the actual release and any exact opposite-major patch pair;
|
|
109
|
+
support in the harness alone is not evidence that every patch was tested.
|
|
107
110
|
The same harness runs in both maintained branches:
|
|
108
111
|
|
|
109
112
|
| Preparation | Selected legacy / current pair |
|
|
110
113
|
|---|---|
|
|
111
|
-
| Default in the 2.0.
|
|
114
|
+
| Default in the selected 2.0.2 checkout | Immutable 1.3.0 / packed 2.0.2 |
|
|
112
115
|
| Default in the 1.3.1 checkout | Packed 1.3.1 / immutable 2.0.0 |
|
|
113
116
|
| `npm run compat:prepare:baseline` | Immutable 1.3.0 / immutable 2.0.0 |
|
|
114
|
-
| `npm run compat:prepare -- --peer-root <opposite-patch-checkout>` | Packed 1.3.1 / packed 2.0.
|
|
117
|
+
| `npm run compat:prepare -- --peer-root <opposite-patch-checkout>` | Packed 1.3.1 / packed 2.0.2 |
|
|
118
|
+
|
|
119
|
+
These selections are not qualification evidence. The selected 1.3.1/2.0.2 pair
|
|
120
|
+
requires fresh exact-byte gates; earlier 1.3.1/2.0.1 results remain historical.
|
|
115
121
|
|
|
116
122
|
Run both API and browser gates for the explicit patch pair before publishing either complete
|
|
117
123
|
dual-major release set. The two default CI pairs alone do not establish that combined result.
|
|
@@ -175,7 +181,7 @@ API, admin mutation, SSE and MCP requests go to the real backend, without respon
|
|
|
175
181
|
Nested JS assets are included. The old-tab upgrade case does not substitute assets: it stops
|
|
176
182
|
the actual selected 1.x process and starts the selected 2.x process on the same port before refresh.
|
|
177
183
|
|
|
178
|
-
|
|
184
|
+
Only the executed exact version pairs establish compatibility. Writable downgrade is checked on a fresh
|
|
179
185
|
synthetic config with default ownership and inherited security. The test does not change
|
|
180
186
|
tokens, elevate, or set ACLs. It checks unchanged caller authority and, on Windows, the actual
|
|
181
187
|
selected 1.x helper's full/partial audit visibility. Caller-context hashes are not direct measurements
|
|
@@ -200,6 +206,10 @@ the user's global prefix, host configuration, live bridge, or npm credentials. I
|
|
|
200
206
|
resolved caller registry/cache and offline setting without a mirror fallback. Registry
|
|
201
207
|
signatures and provenance are separate post-publication checks, not inferred from this smoke test.
|
|
202
208
|
|
|
209
|
+
The consumer preserves npm's effective `allow-directory`, `allow-file`, `allow-git`, and
|
|
210
|
+
`allow-remote` values, including environment overrides. It does not replace restrictions
|
|
211
|
+
with defaults or grant permissions when an install is rejected.
|
|
212
|
+
|
|
203
213
|
## Changing how a host is wired
|
|
204
214
|
|
|
205
215
|
Host adapters live in `HOSTS` in `bin/cli.mjs`. Each one declares where that host's config
|
package/README.md
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
# mcp-pacemaker
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**A local process supervisor and transport bridge for your MCP servers.** Manage server
|
|
4
|
+
lifetime outside your editor or CLI, with opt-in pre-warming and compatible session sharing.
|
|
5
|
+
The long-running bridge has no third-party runtime dependencies; the setup CLI and dashboards
|
|
6
|
+
have their own dependencies.
|
|
7
|
+
|
|
8
|
+
[Install from npm](https://www.npmjs.com/package/mcp-pacemaker) ·
|
|
9
|
+
[Report a problem](https://github.com/girishkvs/mcp-pacemaker/issues) ·
|
|
10
|
+
[Release notes](https://github.com/girishkvs/mcp-pacemaker/releases)
|
|
4
11
|
|
|
5
12
|
MCP hosts — editors (VS Code, Cursor, Claude Desktop) **and** CLIs (Claude Code, Copilot CLI,
|
|
6
13
|
Codex, Gemini) — run stdio MCP servers as child processes. When the host restarts, crashes, or
|
|
@@ -19,36 +26,45 @@ is separate planned work.
|
|
|
19
26
|
|
|
20
27
|
## Quick start
|
|
21
28
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
29
|
+
Install **mcp-pacemaker 2.0.2** from npm. Use a maintained **Node.js 22 or 24**
|
|
30
|
+
release; Windows also needs PowerShell 7 and Windows Script Host.
|
|
31
|
+
See [installation requirements](#install) before setup.
|
|
25
32
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
33
|
+
```bash
|
|
34
|
+
npm install -g mcp-pacemaker@2.0.2
|
|
35
|
+
mcp-pacemaker --version
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The version check prints `2.0.2` without running setup.
|
|
39
|
+
Before setup, have a readable JSON host configuration containing server definitions, or
|
|
40
|
+
prepare [`~/.mcp-pacemaker/servers.json`](#serversjson). Supported import sources are
|
|
41
|
+
`vscode`, `cursor`, `claude` (Claude Desktop), `copilot-cli` and `gemini`.
|
|
42
|
+
Codex and Claude Code are wiring destinations, not import sources.
|
|
43
|
+
|
|
44
|
+
Then run interactive setup:
|
|
31
45
|
|
|
32
46
|
```bash
|
|
33
|
-
npm i -g github:girishkvs/mcp-pacemaker#v2.0.1
|
|
34
47
|
mcp-pacemaker init
|
|
35
48
|
```
|
|
36
49
|
|
|
37
|
-
|
|
50
|
+
`init` detects supported hosts, imports **one source host** (or reuses `servers.json`),
|
|
51
|
+
asks for confirmation before wiring the selected hosts, registers OS auto-start and
|
|
52
|
+
starts the bridge. Reload or restart the selected hosts afterward.
|
|
38
53
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
5. **starts** the bridge and prints what it wired.
|
|
54
|
+
**Setup changes local configuration and auto-start.** Importing can create or update
|
|
55
|
+
`servers.json` before the wiring confirmation. Existing JSON/TOML host files get a `.bak`
|
|
56
|
+
before replacement; native Claude Code registrations do not. Keep your own protected
|
|
57
|
+
configuration backup, especially before repeating setup.
|
|
44
58
|
|
|
45
|
-
|
|
46
|
-
|
|
59
|
+
`--from` chooses the import source; `--client` chooses wiring destinations. For example,
|
|
60
|
+
`mcp-pacemaker init --from vscode --client codex` imports VS Code's definitions and wires
|
|
61
|
+
Codex. Without `--from`, setup prefers the first detected JSON host; it does not merge
|
|
62
|
+
every detected host. Omit `--yes` to keep the confirmation prompt.
|
|
47
63
|
|
|
48
|
-
|
|
64
|
+
Check the running bridge:
|
|
49
65
|
|
|
50
66
|
```bash
|
|
51
|
-
mcp-pacemaker
|
|
67
|
+
mcp-pacemaker status # status without entering first-run setup
|
|
52
68
|
mcp-pacemaker top # live terminal dashboard
|
|
53
69
|
mcp-pacemaker doctor # diagnose config, reachability, wiring
|
|
54
70
|
```
|
|
@@ -56,12 +72,12 @@ mcp-pacemaker doctor # diagnose config, reachability, wiring
|
|
|
56
72
|
<details>
|
|
57
73
|
<summary>Prefer to drive it yourself? The same steps, one at a time</summary>
|
|
58
74
|
|
|
59
|
-
|
|
60
|
-
`
|
|
61
|
-
|
|
75
|
+
`plan`, `install` and `emit` accept any [supported host](#supported-hosts) as a wiring target.
|
|
76
|
+
`import --from` accepts the five JSON import sources listed above. Run import first unless
|
|
77
|
+
you already have `servers.json`; `plan` needs that file.
|
|
62
78
|
|
|
63
79
|
```bash
|
|
64
|
-
mcp-pacemaker import --from <
|
|
80
|
+
mcp-pacemaker import --from <source> # write servers.json from one JSON host config
|
|
65
81
|
mcp-pacemaker plan --client <host> # dry run: show what install would change
|
|
66
82
|
mcp-pacemaker install --client <host> # wire one host (--port N gives it its own bridge)
|
|
67
83
|
mcp-pacemaker start # start the bridge
|
|
@@ -81,23 +97,32 @@ them in.
|
|
|
81
97
|
|
|
82
98
|
</details>
|
|
83
99
|
|
|
84
|
-
##
|
|
100
|
+
## Which process-sharing mode?
|
|
85
101
|
|
|
86
|
-
|
|
87
|
-
*durable local hosting on a dev workstation* — and adds things they don't:
|
|
102
|
+
Sharing a bridge does not automatically share a server process.
|
|
88
103
|
|
|
89
|
-
| |
|
|
90
|
-
|
|
91
|
-
|
|
|
92
|
-
|
|
|
93
|
-
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
104
|
+
| Mode | Process behavior | Use when |
|
|
105
|
+
|---|---|---|
|
|
106
|
+
| `isolated` (default) | One child per session | The server needs per-client workspace, account or conversation state |
|
|
107
|
+
| `pool` (opt-in) | Pre-started, uninitialized children; each is assigned exclusively to one session | Startup is slow but sessions must remain separate |
|
|
108
|
+
| `shared` (opt-in) | One initialized child for compatible sessions | Tools are stateless, inputs are explicit and the credential context is common |
|
|
109
|
+
|
|
110
|
+
Shared clients must send identical initialization parameters, including `clientInfo`, and
|
|
111
|
+
empty client capabilities. It is not automatic cross-editor sharing. See
|
|
112
|
+
[shared-mode limits](#shared-mode) before enabling it.
|
|
113
|
+
|
|
114
|
+
## Choosing a transport tool
|
|
115
|
+
|
|
116
|
+
Documentation checked September 27, 2026; this is a use-case guide, not a feature benchmark.
|
|
117
|
+
|
|
118
|
+
| Tool | Consider it when |
|
|
119
|
+
|---|---|
|
|
120
|
+
| [Supergateway](https://github.com/supercorp-ai/supergateway) | You want command-line conversion between stdio and HTTP/SSE/WebSocket transports |
|
|
121
|
+
| [mcp-proxy](https://github.com/sparfenyuk/mcp-proxy) | You want a Python-based adapter between local stdio clients/servers and remote MCP transports |
|
|
122
|
+
| **mcp-pacemaker** | You want workstation process supervision, host wiring, auto-start, lifecycle diagnostics and explicit isolation/pooling/sharing policies |
|
|
123
|
+
|
|
124
|
+
These projects have overlapping capabilities. Reconnecting to a fresh server is not recovery
|
|
125
|
+
of arbitrary application state, and a transport bridge is not a sandbox for untrusted tools.
|
|
101
126
|
|
|
102
127
|
## Supported hosts
|
|
103
128
|
|
|
@@ -125,26 +150,25 @@ Use a maintained **Node.js 22 or 24** release. Node 20 remains a compatibility t
|
|
|
125
150
|
end-of-life, not a recommended secure runtime. The bridge has no npm runtime dependencies;
|
|
126
151
|
the setup CLI and dashboard have their own dependencies.
|
|
127
152
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
153
|
+
Install the released package from [npm](https://www.npmjs.com/package/mcp-pacemaker).
|
|
154
|
+
Its repository link should point to
|
|
155
|
+
[`girishkvs/mcp-pacemaker`](https://github.com/girishkvs/mcp-pacemaker).
|
|
156
|
+
Use an exact version for a repeatable installation:
|
|
131
157
|
|
|
132
158
|
```bash
|
|
133
|
-
npm
|
|
134
|
-
|
|
135
|
-
npm i -g github:girishkvs/mcp-pacemaker#v1.3.1
|
|
159
|
+
npm install -g mcp-pacemaker@2.0.2
|
|
160
|
+
mcp-pacemaker --version
|
|
136
161
|
```
|
|
137
162
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
maintainer before installing. For a repeatable installation, choose an exact released version:
|
|
163
|
+
The current line uses the `latest` npm channel; the maintenance line uses `legacy` when that
|
|
164
|
+
channel has been published. Check the actual registry values before choosing a channel:
|
|
141
165
|
|
|
142
166
|
```bash
|
|
143
|
-
npm
|
|
144
|
-
# Or, deliberately:
|
|
145
|
-
npm i -g mcp-pacemaker@1.3.1
|
|
167
|
+
npm view mcp-pacemaker dist-tags --json
|
|
146
168
|
```
|
|
147
169
|
|
|
170
|
+
GitHub tags and npm publication are separate: a tag does not establish that the same
|
|
171
|
+
version or channel is available on npm, or that its package bytes are identical.
|
|
148
172
|
`@1` and `@2` are version ranges, not the maintained channels. They can select a version
|
|
149
173
|
withdrawn from a channel. `upgrade --self` resolves the installed major's channel and prints
|
|
150
174
|
an exact-version command; it never installs or downgrades anything.
|
|
@@ -158,11 +182,26 @@ Automatic configuration edits need .NET Framework 4.6.2 or newer. The bundled he
|
|
|
158
182
|
unsigned; npm provenance is not Authenticode signing or an application-control allowlist.
|
|
159
183
|
Windows ARM64 is not validated.
|
|
160
184
|
|
|
185
|
+
### Version compatibility
|
|
186
|
+
|
|
187
|
+
This README describes **2.0.x**. For 1.3.x immediate-save behavior, see the
|
|
188
|
+
[legacy documentation](https://github.com/girishkvs/mcp-pacemaker/blob/v1.3.1/README.md)
|
|
189
|
+
and [support policy](SECURITY.md#supported-versions). Those documents do not establish
|
|
190
|
+
that a legacy version is available on npm.
|
|
191
|
+
|
|
192
|
+
The historical baselines remain **1.3.0 / 2.0.0**. The earlier **1.3.1 / 2.0.1**
|
|
193
|
+
patch-pair evidence is not transferable to a new release. The selected **1.3.1 / 2.0.2**
|
|
194
|
+
pair requires fresh exact-byte compatibility and service-replacement gates.
|
|
195
|
+
A 2.x client handles legacy immediate saves. A 1.x client cannot write pooling settings to a
|
|
196
|
+
2.x bridge: update the CLI and refresh old dashboard tabs. Before downgrading, settle pending
|
|
197
|
+
or interrupted transactions with 2.x. See the [real-version gates](CONTRIBUTING.md#real-version-compatibility-gates)
|
|
198
|
+
for exact pairs; only the exact executed pairs are covered.
|
|
199
|
+
|
|
161
200
|
### Command reference
|
|
162
201
|
|
|
163
202
|
| Command | What it does |
|
|
164
203
|
|---|---|
|
|
165
|
-
| `init [--client a,b] [--yes]` |
|
|
204
|
+
| `init [--from source] [--client a,b] [--yes]` | Interactive setup: import one source, wire selected hosts, auto-start, launch |
|
|
166
205
|
| `status` | Bridges, wired hosts, servers, and any server currently failing |
|
|
167
206
|
| `reload` | Re-read `servers.json` into the running bridge without restarting it |
|
|
168
207
|
| `doctor` | Diagnose config, bridge reachability, host wiring |
|
|
@@ -171,13 +210,13 @@ Windows ARM64 is not validated.
|
|
|
171
210
|
| `logs [--follow] [--since 2h] [--server name] [--grep text]` | Read and filter durable logs, including retained rotation |
|
|
172
211
|
| `top` / `dashboard` | Live terminal UI / web dashboard |
|
|
173
212
|
| `plan --client <host>` | Dry run — show exactly what `install` would change |
|
|
174
|
-
| `import --from <
|
|
213
|
+
| `import --from <source>` | Build `~/.mcp-pacemaker/servers.json` from one supported JSON host config |
|
|
175
214
|
| `install --client <host> [--port N]` | Wire one host (its own `--port` gives it its own bridge) |
|
|
176
215
|
| `emit --client <host>` | Print the config entries without writing anything |
|
|
177
216
|
| `start` / `stop` | Start or stop bridges (`--port` for one, else all) |
|
|
178
217
|
| `upgrade [--self]` | Re-wire hosts; `--self` only prints same-major, exact-version installation guidance |
|
|
179
218
|
| `update-check [--json]` | Compare the installed version with its maintained npm channel |
|
|
180
|
-
| `uninstall` | Stop
|
|
219
|
+
| `uninstall` | Stop managed bridges, remove auto-start, restore available host-file `.bak` copies; native entries are not restored |
|
|
181
220
|
|
|
182
221
|
> Package installation does not upgrade a running backend. `upgrade` rewires host configuration;
|
|
183
222
|
> it does not replace package files, restart an adopted backend, or update its autostart path.
|
|
@@ -198,7 +237,10 @@ relying on an implicit socket-location fallback.
|
|
|
198
237
|
Isolated and pooled stdio servers support HTTP+SSE (`/<name>/sse`) and Streamable HTTP
|
|
199
238
|
(`/<name>/mcp`). Shared mode requires Streamable HTTP.
|
|
200
239
|
|
|
201
|
-
`install`
|
|
240
|
+
`install` backs up an existing JSON/TOML host file to `.bak`; repeating it replaces that backup.
|
|
241
|
+
`uninstall` restores available host-file backups, leaves files without backups as-is, and
|
|
242
|
+
keeps `servers.json`. Native Claude Code registrations are not backed up or automatically
|
|
243
|
+
restored; record their original definitions separately and restore them through Claude Code.
|
|
202
244
|
|
|
203
245
|
### Replacing or rolling back a running installation
|
|
204
246
|
|
|
@@ -607,7 +649,19 @@ See [the shared-session contract](docs/shared-sessions.md) for limits and failur
|
|
|
607
649
|
## Uninstall
|
|
608
650
|
|
|
609
651
|
```bash
|
|
610
|
-
|
|
652
|
+
mcp-pacemaker uninstall # use the CLI from the matching installed version
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
This stops managed bridges, removes auto-start entries and restores available host-file
|
|
656
|
+
backups. It leaves files without backups and native Claude Code registrations unchanged.
|
|
657
|
+
It is not scoped to one port; review [replacement and rollback](#replacing-or-rolling-back-a-running-installation)
|
|
658
|
+
first if another instance must remain running. Do not fetch a different CLI with `npx`
|
|
659
|
+
to remove an existing installation.
|
|
660
|
+
|
|
661
|
+
After the installed service has been removed successfully, remove the global npm package:
|
|
662
|
+
|
|
663
|
+
```bash
|
|
664
|
+
npm uninstall -g mcp-pacemaker
|
|
611
665
|
```
|
|
612
666
|
|
|
613
667
|
## Project
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-pacemaker",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "Keeps your MCP servers alive across editor restarts, reboots, and token expiry — pluggable auth, cross-platform auto-start, one-command setup. Zero-dependency bridge; a small CLI for setup.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"version": "7.3.6"
|
|
28
28
|
}
|
|
29
29
|
],
|
|
30
|
-
"producerLockSha256": "
|
|
30
|
+
"producerLockSha256": "b88a73a6212e26f4c4dde985d84eadf39870c8758e4698cdd5544b8a55eb8cca",
|
|
31
31
|
"projectLicenseSha256": "590ad9c29ee5580f83b9c05e403ca259d89e8366d1ed4c7207aa5e0a07afbf79",
|
|
32
32
|
"noticesSha256": "11abb641d5175ce3817909603274fd0675b222ed53fae98d3513fd3f25eb56fc",
|
|
33
33
|
"chunks": [
|