mcp-pacemaker 1.3.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.
Files changed (40) hide show
  1. package/CHANGELOG.md +424 -0
  2. package/CONTRIBUTING.md +156 -0
  3. package/LICENSE +21 -0
  4. package/README.md +620 -0
  5. package/SECURITY.md +110 -0
  6. package/THIRD_PARTY_NOTICES.txt +366 -0
  7. package/autostart/windows/launcher.vbs +11 -0
  8. package/autostart/windows/register-task.ps1 +63 -0
  9. package/bin/cli.mjs +880 -0
  10. package/bin/config-checks.mjs +62 -0
  11. package/bin/logs.mjs +465 -0
  12. package/bin/mcp-bridge.mjs +2113 -0
  13. package/bin/pooling-config.mjs +553 -0
  14. package/bin/pooling-execution.mjs +91 -0
  15. package/bin/pooling-writer.mjs +169 -0
  16. package/bin/prewarm.mjs +152 -0
  17. package/bin/server-metrics.mjs +69 -0
  18. package/bin/service-control.mjs +124 -0
  19. package/bin/shared-sessions.mjs +1083 -0
  20. package/bin/top.mjs +115 -0
  21. package/bin/update-check.mjs +153 -0
  22. package/bin/windows/PoolingSecurityHelper.build.json +39 -0
  23. package/bin/windows/PoolingSecurityHelper.exe +0 -0
  24. package/bin/windows/src/AssemblyInfo.cs +11 -0
  25. package/bin/windows/src/PoolingSecurityHelper.cs +165 -0
  26. package/bin/windows/src/PoolingSecurityReader.cs +50 -0
  27. package/docs/shared-sessions.md +181 -0
  28. package/examples/servers.example.json +31 -0
  29. package/package.json +77 -0
  30. package/supervisor/bridge-child.mjs +14 -0
  31. package/supervisor/supervise.mjs +172 -0
  32. package/supervisor/supervise.ps1 +23 -0
  33. package/supervisor/supervise.sh +11 -0
  34. package/tools/windows-security-helper/README.md +95 -0
  35. package/tools/windows-security-helper/build.ps1 +262 -0
  36. package/ui/dist/THIRD_PARTY_NOTICES.txt +366 -0
  37. package/ui/dist/assets/index-CIy7uxfd.css +1 -0
  38. package/ui/dist/assets/index-CtaaQsB9.js +8 -0
  39. package/ui/dist/index.html +14 -0
  40. package/ui/dist/third-party-manifest.json +579 -0
package/SECURITY.md ADDED
@@ -0,0 +1,110 @@
1
+ # Security Policy
2
+
3
+ ## Supported versions
4
+
5
+ Install the newest patch in the selected maintained line. Compatibility fixtures for older
6
+ releases preserve their historical behavior; they do not make those releases supported.
7
+
8
+ | Version | Supported |
9
+ | ------- | --------- |
10
+ | Newest 2.x patch | Current security and compatibility maintenance |
11
+ | Newest 1.3.x patch, starting with 1.3.1 | Legacy security and compatibility fixes through March 31, 2027 |
12
+ | 1.0.x-1.2.x, 1.3.0, and superseded patches | No |
13
+
14
+ The legacy line does not receive 2.x batching or new features. Its `legacy` npm channel is an
15
+ explicit opt-in, not the default for new users. After the legacy support window, migrate to
16
+ the current line. Node 20 compatibility is not a promise to fix vulnerabilities in an
17
+ end-of-life Node runtime; use a maintained Node release.
18
+
19
+ ## Reporting a vulnerability
20
+
21
+ Please report security issues privately through
22
+ [GitHub Security Advisories](https://github.com/girishkvs/mcp-pacemaker/security/advisories/new).
23
+ Do not open a public issue for a vulnerability.
24
+
25
+ Include the version, your platform, what an attacker can achieve, and steps to reproduce.
26
+ You can expect an acknowledgement within 7 days and an assessment within 30.
27
+
28
+ ## Threat model
29
+
30
+ The bridge is a local service holding long-lived credentials for the MCP servers it manages,
31
+ so a few properties matter more than usual:
32
+
33
+ - **It binds to `127.0.0.1` by default.** Passing `--host 0.0.0.0` exposes every configured
34
+ server, and the credentials injected on their behalf, to anything that can reach the port.
35
+ Do not do this on an untrusted network.
36
+ - **There is no user authentication on the proxy path.** Any local process that can open the
37
+ port can use the bridged servers. Treat access to the port as equivalent to access to every
38
+ credential the bridge holds.
39
+ - **Administrative endpoints require a nonce.** `/admin/*` is guarded by a random nonce written
40
+ to `~/.mcp-pacemaker/admin.nonce` on startup, readable only by the user running the bridge.
41
+ This covers `/admin/reload`, which re-reads `servers.json` — see the note below on why that
42
+ file is a trusted input.
43
+ - **Pooling controls are opt-in configuration writes.** The dashboard's Enable/Disable/Undo
44
+ buttons and the equivalent CLI actions require the admin nonce. Browser writes also require
45
+ a matching Origin when provided. Only `sharing` and `minWarm` can be changed; commands,
46
+ environment and auth settings are not accepted. Requests are bounded to 4 KiB.
47
+ Edits require a content revision, preserve unrelated JSON, keep a backup and replace the file
48
+ atomically. Undo restores the previous bytes only while that revision is still current.
49
+ These checks detect stale clients and observed editor changes; a non-cooperating external
50
+ writer can still race the final filesystem check/rename because portable filesystem CAS
51
+ is unavailable. Do not edit the file concurrently with an admin action.
52
+ - **Timeout is not proof of rollback.** Pooling operations have a nine-second budget and
53
+ shared cancellation before file-replacement ownership. Once replacement has started, it
54
+ can finish after cancellation or timeout. Uncertain and late-committed outcomes are reported
55
+ explicitly; saved state is reloaded, including after worker failure with config watching off.
56
+ Reconciliation failures are logged, not treated as success. Operations are never replayed,
57
+ and a failed worker refuses subsequent writes until the bridge restarts.
58
+ - **Config backups and Undo contain config data.** `servers.json.bak` has the previous config
59
+ and is protected like the source file, including its Windows DACL. Temporary files are given
60
+ the same permissions before data is written. Bounded in-memory Undo records can include
61
+ credential-bearing configuration; they are not returned to the browser or written elsewhere.
62
+ - **Windows timestamp changes are not permission changes by themselves.** Automatic writes
63
+ capture native non-audit security sections, audit policy and file attributes. A changed
64
+ timestamp is accepted only when that verified state, content and file identity still match.
65
+ Unreadable audit policy is refused before staging; security that cannot be preserved on both
66
+ replacement and backup files is also refused. No automatic elevation or security-policy
67
+ changes are performed. The built-in audit-read API uses only rights assigned to the account.
68
+ Inspection uses the bundled own-source .NET Framework helper, with no runtime compilation,
69
+ download or PowerShell fallback. Build metadata checks source/binary consistency; it is not
70
+ code signing or protection against replacement of the entire package.
71
+ - **Shared mode is not a user-security boundary.** It is opt-in for stateless tools with one
72
+ common credential context. Only a tools capability derived from the real upstream is exposed;
73
+ unsupported client capabilities and protocol methods fail explicitly. IDs, progress,
74
+ cancellation and cursors are scoped to virtual sessions, but a tool implementation can still
75
+ keep hidden process-global state. The operator must confirm that sharing that state is safe.
76
+ Do not enable it for separate users, accounts, workspaces or conversations. Dispatched work
77
+ is never replayed automatically, and deleting one session does not prove its tool stopped.
78
+ - **The bridge reloads `servers.json` when it changes.** A running bridge watches its config and
79
+ applies edits without a restart, so anything that can write that file can change what the
80
+ bridge runs, at the moment it writes — not only at the next start. The file is already a
81
+ trusted input for the reason below; watching it widens *when* that trust is exercised. Set
82
+ `MCP_CONFIG_WATCH=0` to require an explicit `mcp-pacemaker reload` instead.
83
+ - **Health probing makes requests you did not.** With `MCP_HEALTH_INTERVAL_MS` set, the bridge
84
+ periodically sends an `initialize` to each HTTP server, carrying that server's configured
85
+ credential. It is off by default for exactly that reason. stdio servers are never probed.
86
+ - **Tokens live in memory only.** Credentials obtained from an auth command are cached in the
87
+ process and never written to disk. The dashboard shows time-to-expiry, never the value.
88
+ - **Session initialization metadata is written to disk.** To re-establish a session after a
89
+ restart, `~/.mcp-pacemaker/sessions.json` records session ids and the `initialize` parameters
90
+ the client sent (protocol version, declared capabilities, client name and any extra fields).
91
+ Business requests and tool results are not recorded there. Treat it as sensitive because
92
+ client-defined initialization fields can contain additional data. Delete it to drop all resumable sessions, or
93
+ run with `MCP_RESUME=0` to never write it. Records past `MCP_RESUME_TTL_MS` (24h by default)
94
+ are refused and pruned, so the file does not accumulate indefinitely.
95
+ - **The log records activity, not content.** `~/.mcp-pacemaker/bridge.log` holds the same lines
96
+ the dashboard shows: server names, session ids, pids, timings and errors. It does not contain
97
+ credentials, request bodies or tool results, though a server's own stderr is included and an
98
+ error message a server chooses to print could carry anything. It is rolled at
99
+ `MCP_LOG_MAX_BYTES`; set that to `0` to disable the file entirely.
100
+ - **Auth commands run in a shell.** `servers.json` is a trusted input: anything in an `auth`
101
+ command executes with your privileges. Do not load a `servers.json` you did not write.
102
+ - **Client configs are rewritten in place.** `install` backs each file up to `<file>.bak`
103
+ before writing, and `plan` shows the exact change first.
104
+
105
+ ## Out of scope
106
+
107
+ - Vulnerabilities in the MCP servers the bridge launches or proxies to.
108
+ - Consequences of deliberately binding to a non-loopback address.
109
+ - Anything requiring an attacker to already have write access to your `servers.json` or your
110
+ host's MCP configuration.
@@ -0,0 +1,366 @@
1
+ MCP Pacemaker - third-party notices
2
+
3
+ Dashboard entries come from retained Rollup modules and observed generated CSS.
4
+ Runtime supplements bind upstream license text to reviewed installed producer versions.
5
+ ui/dist/third-party-manifest.json records module and artifact hashes.
6
+ The project itself remains under its separate MIT LICENSE.
7
+ This inventory is technical attribution evidence, not a legal compliance certification.
8
+
9
+ CLI dependencies are installed separately by npm, not copied into this UI bundle.
10
+ Attribution supplied by those packages remains in their installed package directories.
11
+ This UI inventory does not audit every separately resolved CLI dependency.
12
+ Those dependencies are not represented as bundled UI code in this notice.
13
+
14
+ Bundled dashboard code
15
+
16
+ ==============================================================================
17
+ lucide-react@0.462.0
18
+ Declared license: ISC
19
+
20
+ --- LICENSE ---
21
+ ISC License
22
+
23
+ Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT). All other copyright (c) for Lucide are held by Lucide Contributors 2022.
24
+
25
+ Permission to use, copy, modify, and/or distribute this software for any
26
+ purpose with or without fee is hereby granted, provided that the above
27
+ copyright notice and this permission notice appear in all copies.
28
+
29
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
30
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
31
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
32
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
33
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
34
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
35
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
36
+
37
+ --- upstream/feather-LICENSE.txt ---
38
+ Source: https://raw.githubusercontent.com/feathericons/feather/1b002399e8758fb2bccea4d07312dc9e0f43dcb8/LICENSE
39
+ Lucide's LICENSE identifies Feather MIT portions. Its bundled terminal icon retains the polyline and line in this upstream revision; this is a license source, not a claim that the Feather npm package is installed.
40
+
41
+ The MIT License (MIT)
42
+
43
+ Copyright (c) 2013-2023 Cole Bemis
44
+
45
+ Permission is hereby granted, free of charge, to any person obtaining a copy
46
+ of this software and associated documentation files (the "Software"), to deal
47
+ in the Software without restriction, including without limitation the rights
48
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
49
+ copies of the Software, and to permit persons to whom the Software is
50
+ furnished to do so, subject to the following conditions:
51
+
52
+ The above copyright notice and this permission notice shall be included in all
53
+ copies or substantial portions of the Software.
54
+
55
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
56
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
57
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
58
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
59
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
60
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
61
+ SOFTWARE.
62
+
63
+ --- Notices retained from contributing source files ---
64
+ /**
65
+ * @license lucide-react v0.462.0 - ISC
66
+ *
67
+ * This source code is licensed under the ISC license.
68
+ * See the LICENSE file in the root directory of this source tree.
69
+ */
70
+
71
+ ==============================================================================
72
+ react@18.3.1
73
+ Declared license: MIT
74
+
75
+ --- LICENSE ---
76
+ MIT License
77
+
78
+ Copyright (c) Facebook, Inc. and its affiliates.
79
+
80
+ Permission is hereby granted, free of charge, to any person obtaining a copy
81
+ of this software and associated documentation files (the "Software"), to deal
82
+ in the Software without restriction, including without limitation the rights
83
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
84
+ copies of the Software, and to permit persons to whom the Software is
85
+ furnished to do so, subject to the following conditions:
86
+
87
+ The above copyright notice and this permission notice shall be included in all
88
+ copies or substantial portions of the Software.
89
+
90
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
91
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
92
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
93
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
94
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
95
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
96
+ SOFTWARE.
97
+
98
+ --- Notices retained from contributing source files ---
99
+ /**
100
+ * @license React
101
+ * react-jsx-runtime.production.min.js
102
+ *
103
+ * Copyright (c) Facebook, Inc. and its affiliates.
104
+ *
105
+ * This source code is licensed under the MIT license found in the
106
+ * LICENSE file in the root directory of this source tree.
107
+ */
108
+ /**
109
+ * @license React
110
+ * react.production.min.js
111
+ *
112
+ * Copyright (c) Facebook, Inc. and its affiliates.
113
+ *
114
+ * This source code is licensed under the MIT license found in the
115
+ * LICENSE file in the root directory of this source tree.
116
+ */
117
+
118
+ ==============================================================================
119
+ react-dom@18.3.1
120
+ Declared license: MIT
121
+
122
+ --- LICENSE ---
123
+ MIT License
124
+
125
+ Copyright (c) Facebook, Inc. and its affiliates.
126
+
127
+ Permission is hereby granted, free of charge, to any person obtaining a copy
128
+ of this software and associated documentation files (the "Software"), to deal
129
+ in the Software without restriction, including without limitation the rights
130
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
131
+ copies of the Software, and to permit persons to whom the Software is
132
+ furnished to do so, subject to the following conditions:
133
+
134
+ The above copyright notice and this permission notice shall be included in all
135
+ copies or substantial portions of the Software.
136
+
137
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
138
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
139
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
140
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
141
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
142
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
143
+ SOFTWARE.
144
+
145
+ --- Notices retained from contributing source files ---
146
+ /**
147
+ * @license React
148
+ * react-dom.production.min.js
149
+ *
150
+ * Copyright (c) Facebook, Inc. and its affiliates.
151
+ *
152
+ * This source code is licensed under the MIT license found in the
153
+ * LICENSE file in the root directory of this source tree.
154
+ */
155
+
156
+ ==============================================================================
157
+ scheduler@0.23.2
158
+ Declared license: MIT
159
+
160
+ --- LICENSE ---
161
+ MIT License
162
+
163
+ Copyright (c) Facebook, Inc. and its affiliates.
164
+
165
+ Permission is hereby granted, free of charge, to any person obtaining a copy
166
+ of this software and associated documentation files (the "Software"), to deal
167
+ in the Software without restriction, including without limitation the rights
168
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
169
+ copies of the Software, and to permit persons to whom the Software is
170
+ furnished to do so, subject to the following conditions:
171
+
172
+ The above copyright notice and this permission notice shall be included in all
173
+ copies or substantial portions of the Software.
174
+
175
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
176
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
177
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
178
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
179
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
180
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
181
+ SOFTWARE.
182
+
183
+ --- Notices retained from contributing source files ---
184
+ /**
185
+ * @license React
186
+ * scheduler.production.min.js
187
+ *
188
+ * Copyright (c) Facebook, Inc. and its affiliates.
189
+ *
190
+ * This source code is licensed under the MIT license found in the
191
+ * LICENSE file in the root directory of this source tree.
192
+ */
193
+
194
+ ==============================================================================
195
+ tailwindcss@3.4.19
196
+ Declared license: MIT
197
+
198
+ --- LICENSE ---
199
+ MIT License
200
+
201
+ Copyright (c) Tailwind Labs, Inc.
202
+
203
+ Permission is hereby granted, free of charge, to any person obtaining a copy
204
+ of this software and associated documentation files (the "Software"), to deal
205
+ in the Software without restriction, including without limitation the rights
206
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
207
+ copies of the Software, and to permit persons to whom the Software is
208
+ furnished to do so, subject to the following conditions:
209
+
210
+ The above copyright notice and this permission notice shall be included in all
211
+ copies or substantial portions of the Software.
212
+
213
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
214
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
215
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
216
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
217
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
218
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
219
+ SOFTWARE.
220
+
221
+ --- lib/css/LICENSE ---
222
+ MIT License
223
+
224
+ Copyright (c) Nicolas Gallagher
225
+ Copyright (c) Jonathan Neal
226
+ Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
227
+ Copyright (c) Adam Wathan
228
+ Copyright (c) Jonathan Reinink
229
+
230
+ Permission is hereby granted, free of charge, to any person obtaining a copy
231
+ of this software and associated documentation files (the "Software"), to deal
232
+ in the Software without restriction, including without limitation the rights
233
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
234
+ copies of the Software, and to permit persons to whom the Software is
235
+ furnished to do so, subject to the following conditions:
236
+
237
+ The above copyright notice and this permission notice shall be included in all
238
+ copies or substantial portions of the Software.
239
+
240
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
241
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
242
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
243
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
244
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
245
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
246
+ SOFTWARE.
247
+
248
+ ==============================================================================
249
+ vite@7.3.6
250
+ Declared license: MIT
251
+
252
+ --- LICENSE.md: # Vite core license ---
253
+ # Vite core license
254
+ Vite is released under the MIT license:
255
+
256
+ MIT License
257
+
258
+ Copyright (c) 2019-present, VoidZero Inc. and Vite contributors
259
+
260
+ Permission is hereby granted, free of charge, to any person obtaining a copy
261
+ of this software and associated documentation files (the "Software"), to deal
262
+ in the Software without restriction, including without limitation the rights
263
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
264
+ copies of the Software, and to permit persons to whom the Software is
265
+ furnished to do so, subject to the following conditions:
266
+
267
+ The above copyright notice and this permission notice shall be included in all
268
+ copies or substantial portions of the Software.
269
+
270
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
271
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
272
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
273
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
274
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
275
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
276
+ SOFTWARE.
277
+
278
+ --- LICENSE.md: ## @rollup/plugin-alias, @rollup/plugin-commonjs, @rollup/plugin-dynamic-import-vars, @rollup/pluginutils ---
279
+ ## @rollup/plugin-alias, @rollup/plugin-commonjs, @rollup/plugin-dynamic-import-vars, @rollup/pluginutils
280
+ License: MIT
281
+ By: Johannes Stein
282
+ Repository: https://github.com/rollup/plugins
283
+
284
+ License: MIT
285
+ By: Rich Harris
286
+ Repository: https://github.com/rollup/plugins
287
+
288
+ License: MIT
289
+ By: LarsDenBakker
290
+ Repository: https://github.com/rollup/plugins
291
+
292
+ License: MIT
293
+ By: Rich Harris
294
+ Repository: https://github.com/rollup/plugins
295
+
296
+ > The MIT License (MIT)
297
+ >
298
+ > Copyright (c) 2019 RollupJS Plugin Contributors (https://github.com/rollup/plugins/graphs/contributors)
299
+ >
300
+ > Permission is hereby granted, free of charge, to any person obtaining a copy
301
+ > of this software and associated documentation files (the "Software"), to deal
302
+ > in the Software without restriction, including without limitation the rights
303
+ > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
304
+ > copies of the Software, and to permit persons to whom the Software is
305
+ > furnished to do so, subject to the following conditions:
306
+ >
307
+ > The above copyright notice and this permission notice shall be included in
308
+ > all copies or substantial portions of the Software.
309
+ >
310
+ > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
311
+ > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
312
+ > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
313
+ > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
314
+ > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
315
+ > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
316
+ > THE SOFTWARE.
317
+
318
+ ---------------------------------------
319
+
320
+ Separately installed runtime supplements (not UI-bundled)
321
+
322
+ ==============================================================================
323
+ yoga-layout@3.2.1
324
+ Declared license: MIT
325
+
326
+ --- upstream/yoga-LICENSE.txt ---
327
+ Source: https://raw.githubusercontent.com/facebook/yoga/042f5013152eb81c1552dec945b88f7b95ca350f/LICENSE
328
+ Supplement for the separately npm-installed runtime package, whose published source refers to this upstream LICENSE. This package is not bundled into the dashboard.
329
+
330
+ MIT License
331
+
332
+ Copyright (c) Facebook, Inc. and its affiliates.
333
+
334
+ Permission is hereby granted, free of charge, to any person obtaining a copy
335
+ of this software and associated documentation files (the "Software"), to deal
336
+ in the Software without restriction, including without limitation the rights
337
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
338
+ copies of the Software, and to permit persons to whom the Software is
339
+ furnished to do so, subject to the following conditions:
340
+
341
+ The above copyright notice and this permission notice shall be included in all
342
+ copies or substantial portions of the Software.
343
+
344
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
345
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
346
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
347
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
348
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
349
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
350
+ SOFTWARE.
351
+
352
+ --- Notices retained from contributing source files ---
353
+ /**
354
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
355
+ *
356
+ * This source code is licensed under the MIT license found in the
357
+ * LICENSE file in the root directory of this source tree.
358
+ *
359
+ * @format
360
+ */
361
+ /**
362
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
363
+ *
364
+ * This source code is licensed under the MIT license found in the
365
+ * LICENSE file in the root directory of this source tree.
366
+ */
@@ -0,0 +1,11 @@
1
+ ' Launches the mcp-pacemaker supervisor hidden (no console window).
2
+ ' Invoked by the "McpPacemaker" scheduled task. Arg 0 = port (optional, default 8791).
3
+ Dim shell, fso, here, root, ps1, port
4
+ Set shell = CreateObject("WScript.Shell")
5
+ Set fso = CreateObject("Scripting.FileSystemObject")
6
+ here = fso.GetParentFolderName(WScript.ScriptFullName) ' autostart\windows
7
+ root = fso.GetParentFolderName(fso.GetParentFolderName(here)) ' repo root
8
+ ps1 = fso.BuildPath(root, "supervisor\supervise.ps1")
9
+ port = "8791"
10
+ If WScript.Arguments.Count > 0 Then port = WScript.Arguments(0)
11
+ shell.Run "pwsh.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -File """ & ps1 & """ -Port " & port, 0, False
@@ -0,0 +1,63 @@
1
+ <#
2
+ .SYNOPSIS Registers the "McpPacemaker" per-user scheduled task (Windows), no admin required.
3
+ .DESCRIPTION
4
+ Uses the Task Scheduler COM API (works even where the ScheduledTasks PS module reports
5
+ "Invalid namespace" and schtasks.exe /Create needs elevation). Starts the supervisor at
6
+ logon AND on workstation unlock (unlock covers sleep/wake, where logon never fires).
7
+ .PARAMETER Port Port to pass through to the supervisor (default 8791).
8
+ .PARAMETER TaskName Selected per-user task name (default McpPacemaker-<port>).
9
+ .OUTPUTS
10
+ Registration result.
11
+ .EXAMPLE
12
+ .\register-task.ps1 -Port 8791
13
+ #>
14
+ [CmdletBinding()]
15
+ param([ValidateRange(1, 65535)][int]$Port = 8791, [string]$TaskName = "McpPacemaker-$Port")
16
+
17
+ $ErrorActionPreference = 'Stop'
18
+ try {
19
+ $installationRoot = (Resolve-Path -LiteralPath (Join-Path -Path $PSScriptRoot -ChildPath '..\..')).Path
20
+ if ($installationRoot -match '(^|[\\/])_npx([\\/]|$)') {
21
+ throw 'Cache-backed npx roots cannot host autostart. Install in a durable root first.'
22
+ }
23
+ $vbs = Join-Path $PSScriptRoot 'launcher.vbs'
24
+ $user = "$env:USERDOMAIN\$env:USERNAME"
25
+
26
+ $svc = New-Object -ComObject Schedule.Service
27
+ $svc.Connect()
28
+ $folder = $svc.GetFolder('\')
29
+
30
+ $def = $svc.NewTask(0)
31
+ $def.RegistrationInfo.Description = "Starts the mcp-pacemaker bridge supervisor (port $Port) at logon and on workstation unlock."
32
+ $def.RegistrationInfo.Author = $user
33
+
34
+ $def.Settings.Enabled = $true
35
+ $def.Settings.StartWhenAvailable = $true
36
+ $def.Settings.DisallowStartIfOnBatteries = $false
37
+ $def.Settings.StopIfGoingOnBatteries = $false
38
+ $def.Settings.ExecutionTimeLimit = 'PT0S'
39
+ $def.Settings.RestartCount = 3
40
+ $def.Settings.RestartInterval = 'PT1M'
41
+ $def.Settings.MultipleInstances = 2 # IgnoreNew
42
+
43
+ $logon = $def.Triggers.Create(9) # TASK_TRIGGER_LOGON
44
+ $logon.UserId = $user
45
+ $unlock = $def.Triggers.Create(11) # TASK_TRIGGER_SESSION_STATE_CHANGE
46
+ $unlock.StateChange = 8 # TASK_SESSION_UNLOCK
47
+ $unlock.UserId = $user
48
+
49
+ $action = $def.Actions.Create(0) # TASK_ACTION_EXEC
50
+ $action.Path = 'wscript.exe'
51
+ $action.Arguments = "`"$vbs`" $Port"
52
+
53
+ $def.Principal.UserId = $user
54
+ $def.Principal.LogonType = 3 # interactive token (no stored password)
55
+ $def.Principal.RunLevel = 0 # least privilege (so user CLI auth context works)
56
+
57
+ $folder.RegisterTaskDefinition($TaskName, $def, 6, $user, $null, 3) | Out-Null
58
+ Write-Output "OK: registered '$TaskName' (logon + unlock; $user; port $Port)"
59
+ }
60
+ catch {
61
+ Write-Output "FAIL: $($_.Exception.Message)"
62
+ exit 1
63
+ }