remnote-mcp-server 0.14.1 → 0.14.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 +12 -0
- package/README.md +22 -10
- package/dist/websocket-server.d.ts +5 -0
- package/dist/websocket-server.js +64 -10
- package/dist/websocket-server.js.map +1 -1
- package/mcpb/remnote-local/README.md +4 -3
- package/mcpb/remnote-local/manifest.json +2 -2
- package/mcpb/remnote-local/package.json +1 -1
- package/mcpb/remnote-local/remnote-local.mcpb +0 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,18 @@ Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.14.2] - 2026-05-08
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Reject RemNote bridge WebSocket connections that do not send a compatible bridge `hello.version`, with a clearer
|
|
15
|
+
disconnect reason and server log message pointing users to `MCP/OpenClaw Automation Bridge`.
|
|
16
|
+
- Added prominent README troubleshooting guidance for wrong or incompatible RemNote Marketplace plugin installs,
|
|
17
|
+
including the related `quentintou/remnote-mcp-bridge#8` report.
|
|
18
|
+
- Updated Claude Desktop / Cowork setup docs to clarify that local MCPB works for Cowork in the Claude Desktop app
|
|
19
|
+
when desktop extensions are enabled, while remote connectors remain required for web/mobile, cloud-hosted clients,
|
|
20
|
+
and managed deployments without local MCPB.
|
|
21
|
+
|
|
10
22
|
## [0.14.1] - 2026-05-08
|
|
11
23
|
|
|
12
24
|
### Added
|
package/README.md
CHANGED
|
@@ -11,6 +11,13 @@ plugin](https://github.com/robert7/remnote-mcp-bridge).
|
|
|
11
11
|
|
|
12
12
|
> If you run into any issues, please [report them here](https://github.com/robert7/remnote-mcp-server/issues).
|
|
13
13
|
|
|
14
|
+
> **Connection issue? Check the RemNote plugin first.** The RemNote Marketplace may show multiple similarly named
|
|
15
|
+
> `MCP Bridge` plugins. For this server, install the official **MCP/OpenClaw Automation Bridge** plugin by Robert
|
|
16
|
+
> Spiegel and keep it on the same `0.x` minor version line as `remnote-mcp-server` (for example `0.14.x` with
|
|
17
|
+
> `0.14.x`). Wrong plugin flavors or incompatible marketplace copies can connect briefly and then disconnect with a
|
|
18
|
+
> `1008` compatibility message. See the related upstream marketplace confusion report:
|
|
19
|
+
> [quentintou/remnote-mcp-bridge#8](https://github.com/quentintou/remnote-mcp-bridge/issues/8).
|
|
20
|
+
|
|
14
21
|
## What is This?
|
|
15
22
|
|
|
16
23
|
The RemNote MCP Server enables AI assistants like Claude Code to interact directly with your RemNote knowledge base
|
|
@@ -58,9 +65,11 @@ The server acts as a bridge:
|
|
|
58
65
|
**Multi-Agent Support:** Multiple AI agents can connect simultaneously to the same RemNote knowledge base. Each agent
|
|
59
66
|
gets its own MCP session while sharing the WebSocket bridge.
|
|
60
67
|
|
|
61
|
-
**Remote Access:** By default, the server binds to localhost (127.0.0.1) for local AI agents.
|
|
62
|
-
|
|
63
|
-
|
|
68
|
+
**Remote Access:** By default, the server binds to localhost (127.0.0.1) for local AI agents. Claude Desktop and Claude
|
|
69
|
+
Cowork can use the bundled local MCPB extension when desktop extensions are enabled. Cloud-based clients, web/mobile
|
|
70
|
+
surfaces, and managed Claude deployments without local MCPB require remote access—use tunneling tools like ngrok to
|
|
71
|
+
expose the HTTP endpoint securely. The WebSocket connection always stays local for security. See
|
|
72
|
+
[Remote Access Guide](docs/guides/remote-access.md) for setup.
|
|
64
73
|
|
|
65
74
|
## Features
|
|
66
75
|
|
|
@@ -92,9 +101,10 @@ remnote-mcp-stdio --version
|
|
|
92
101
|
|
|
93
102
|
### 2. Install the RemNote Plugin
|
|
94
103
|
|
|
95
|
-
Install the [
|
|
96
|
-
|
|
97
|
-
|
|
104
|
+
Install the official [MCP/OpenClaw Automation Bridge plugin](https://github.com/robert7/remnote-mcp-bridge) in your
|
|
105
|
+
RemNote app. If installing from the RemNote Marketplace, verify the plugin name and author; similarly named
|
|
106
|
+
`MCP Bridge` variants may be incompatible with this server and cause connection loops or `1008` disconnects. Configure
|
|
107
|
+
the plugin to connect to `ws://127.0.0.1:3002`.
|
|
98
108
|
|
|
99
109
|
### 3. Start the Server
|
|
100
110
|
|
|
@@ -114,8 +124,8 @@ Keep this terminal running.
|
|
|
114
124
|
|
|
115
125
|
- [Configuration Guide](docs/guides/configuration.md) - Overview and generic setup
|
|
116
126
|
- [Codex TUI / Codex.app](docs/guides/configuration-codex.md) - HTTP MCP, stdio proxy, and `remnote-cli` skill setup
|
|
117
|
-
- [Claude Desktop Local MCPB](docs/guides/configuration-claude-desktop-local-mcpb.md) - Preferred local
|
|
118
|
-
- [Claude Desktop / Cowork](docs/guides/configuration-claude-desktop-cowork.md) - Remote connector setup when local MCPB is not applicable
|
|
127
|
+
- [Claude Desktop / Cowork Local MCPB](docs/guides/configuration-claude-desktop-local-mcpb.md) - Preferred local desktop setup, no public HTTPS required
|
|
128
|
+
- [Claude Desktop / Cowork Remote Connector](docs/guides/configuration-claude-desktop-cowork.md) - Remote connector setup when local MCPB is not applicable
|
|
119
129
|
- [Claude Code CLI](docs/guides/configuration-claude-code-CLI.md) - Claude Code local MCP setup
|
|
120
130
|
- [ChatGPT](docs/guides/configuration-chatgpt.md) - ChatGPT Apps configuration
|
|
121
131
|
- [Accomplish](docs/guides/configuration-accomplish.md) - Accomplish (Openwork) configuration
|
|
@@ -140,7 +150,8 @@ Keep this terminal running.
|
|
|
140
150
|
- **[CLI Options Reference](docs/guides/cli-options.md)** - Command-line options and environment variables
|
|
141
151
|
- **[remnote-cli Command Reference](docs/guides/cli-command-reference.md)** - Shell command reference for the bundled CLI
|
|
142
152
|
- **[MCP Tools Reference](docs/guides/tools-reference.md)** - Detailed reference for all 9 RemNote tools
|
|
143
|
-
- **[Remote Access Setup](docs/guides/remote-access.md)** - Expose server for
|
|
153
|
+
- **[Remote Access Setup](docs/guides/remote-access.md)** - Expose server for cloud clients or remote connector flows
|
|
154
|
+
(ngrok, etc.)
|
|
144
155
|
|
|
145
156
|
### Help & Advanced
|
|
146
157
|
|
|
@@ -181,7 +192,8 @@ See the [Tools Reference](docs/guides/tools-reference.md) for detailed usage and
|
|
|
181
192
|
|
|
182
193
|
- **[Claude Code CLI](https://claude.com/claude-code)** - Local terminal-based agent
|
|
183
194
|
- **Codex TUI / Codex.app** - Local OpenAI coding agent clients
|
|
184
|
-
- **Claude Desktop / Cowork** -
|
|
195
|
+
- **Claude Desktop / Cowork** - Local MCPB clients when desktop extensions are enabled, or remote connector clients
|
|
196
|
+
when local MCPB is not applicable
|
|
185
197
|
- **[Accomplish](https://github.com/accomplish-ai/accomplish)** - Task-based MCP client (formerly Openwork)
|
|
186
198
|
- **Any MCP client** supporting Streamable HTTP transport
|
|
187
199
|
- **Any local MCP client** supporting stdio transport through `remnote-mcp-stdio`
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Logger } from './logger.js';
|
|
2
2
|
export declare const REQUEST_TIMEOUT_MS = 15000;
|
|
3
|
+
export declare const HELLO_TIMEOUT_MS = 2000;
|
|
3
4
|
export declare class WebSocketServer {
|
|
4
5
|
private wss;
|
|
5
6
|
private client;
|
|
@@ -10,6 +11,8 @@ export declare class WebSocketServer {
|
|
|
10
11
|
private responseLogger;
|
|
11
12
|
private serverVersion;
|
|
12
13
|
private bridgeVersion;
|
|
14
|
+
private clientAccepted;
|
|
15
|
+
private helloTimeout;
|
|
13
16
|
private pendingRequests;
|
|
14
17
|
private connectCallbacks;
|
|
15
18
|
private disconnectCallbacks;
|
|
@@ -23,4 +26,6 @@ export declare class WebSocketServer {
|
|
|
23
26
|
onClientConnect(callback: () => void): void;
|
|
24
27
|
onClientDisconnect(callback: () => void): void;
|
|
25
28
|
private handleMessage;
|
|
29
|
+
private rejectBridge;
|
|
30
|
+
private clearHelloTimeout;
|
|
26
31
|
}
|
package/dist/websocket-server.js
CHANGED
|
@@ -2,6 +2,10 @@ import { WebSocketServer as WSServer, WebSocket } from 'ws';
|
|
|
2
2
|
import { randomUUID } from 'crypto';
|
|
3
3
|
import { checkVersionCompatibility } from './version-compat.js';
|
|
4
4
|
export const REQUEST_TIMEOUT_MS = 15000;
|
|
5
|
+
export const HELLO_TIMEOUT_MS = 2000;
|
|
6
|
+
const POLICY_VIOLATION = 1008;
|
|
7
|
+
const INCOMPATIBLE_BRIDGE_REASON = 'Wrong/incompatible RemNote plugin installed. Install MCP/OpenClaw Automation Bridge matching server.';
|
|
8
|
+
const BRIDGE_REJECTION_LOG_PREFIX = `Rejecting bridge connection: ${INCOMPATIBLE_BRIDGE_REASON}`;
|
|
5
9
|
export class WebSocketServer {
|
|
6
10
|
wss = null;
|
|
7
11
|
client = null;
|
|
@@ -12,6 +16,8 @@ export class WebSocketServer {
|
|
|
12
16
|
responseLogger = null;
|
|
13
17
|
serverVersion;
|
|
14
18
|
bridgeVersion = null;
|
|
19
|
+
clientAccepted = false;
|
|
20
|
+
helloTimeout = null;
|
|
15
21
|
pendingRequests = new Map();
|
|
16
22
|
connectCallbacks = [];
|
|
17
23
|
disconnectCallbacks = [];
|
|
@@ -37,11 +43,18 @@ export class WebSocketServer {
|
|
|
37
43
|
// Only allow single client connection
|
|
38
44
|
if (this.client && this.client.readyState === WebSocket.OPEN) {
|
|
39
45
|
this.logger.warn('Rejecting connection: client already connected');
|
|
40
|
-
ws.close(
|
|
46
|
+
ws.close(POLICY_VIOLATION, 'Only one client allowed');
|
|
41
47
|
return;
|
|
42
48
|
}
|
|
43
49
|
this.client = ws;
|
|
50
|
+
this.clientAccepted = false;
|
|
44
51
|
this.logger.info('WebSocket client connected');
|
|
52
|
+
this.helloTimeout = setTimeout(() => {
|
|
53
|
+
if (this.client === ws && !this.clientAccepted && ws.readyState === WebSocket.OPEN) {
|
|
54
|
+
this.logger.warn(`${BRIDGE_REJECTION_LOG_PREFIX} Detail: hello timeout.`);
|
|
55
|
+
ws.close(POLICY_VIOLATION, INCOMPATIBLE_BRIDGE_REASON);
|
|
56
|
+
}
|
|
57
|
+
}, HELLO_TIMEOUT_MS);
|
|
45
58
|
setImmediate(() => {
|
|
46
59
|
if (ws.readyState !== WebSocket.OPEN) {
|
|
47
60
|
return;
|
|
@@ -52,7 +65,6 @@ export class WebSocketServer {
|
|
|
52
65
|
version: this.serverVersion,
|
|
53
66
|
}));
|
|
54
67
|
});
|
|
55
|
-
this.connectCallbacks.forEach((cb) => cb());
|
|
56
68
|
ws.on('message', (data) => {
|
|
57
69
|
try {
|
|
58
70
|
this.handleMessage(data.toString());
|
|
@@ -63,15 +75,22 @@ export class WebSocketServer {
|
|
|
63
75
|
});
|
|
64
76
|
ws.on('close', () => {
|
|
65
77
|
this.logger.info('WebSocket client disconnected');
|
|
66
|
-
|
|
67
|
-
this.
|
|
78
|
+
const wasAccepted = this.clientAccepted;
|
|
79
|
+
if (this.client === ws) {
|
|
80
|
+
this.client = null;
|
|
81
|
+
this.bridgeVersion = null;
|
|
82
|
+
this.clientAccepted = false;
|
|
83
|
+
this.clearHelloTimeout();
|
|
84
|
+
}
|
|
68
85
|
// Reject all pending requests
|
|
69
86
|
for (const [_id, pending] of this.pendingRequests.entries()) {
|
|
70
87
|
clearTimeout(pending.timeout);
|
|
71
88
|
pending.reject(new Error('Connection lost'));
|
|
72
89
|
}
|
|
73
90
|
this.pendingRequests.clear();
|
|
74
|
-
|
|
91
|
+
if (wasAccepted) {
|
|
92
|
+
this.disconnectCallbacks.forEach((cb) => cb());
|
|
93
|
+
}
|
|
75
94
|
});
|
|
76
95
|
ws.on('error', (error) => {
|
|
77
96
|
this.logger.error({ error }, 'WebSocket client error');
|
|
@@ -84,6 +103,9 @@ export class WebSocketServer {
|
|
|
84
103
|
if (this.client) {
|
|
85
104
|
this.client.close();
|
|
86
105
|
this.client = null;
|
|
106
|
+
this.bridgeVersion = null;
|
|
107
|
+
this.clientAccepted = false;
|
|
108
|
+
this.clearHelloTimeout();
|
|
87
109
|
}
|
|
88
110
|
if (this.wss) {
|
|
89
111
|
this.wss.close(() => {
|
|
@@ -98,7 +120,7 @@ export class WebSocketServer {
|
|
|
98
120
|
});
|
|
99
121
|
}
|
|
100
122
|
async sendRequest(action, payload) {
|
|
101
|
-
if (!this.
|
|
123
|
+
if (!this.isConnected()) {
|
|
102
124
|
throw new Error('RemNote plugin not connected. Please ensure the plugin is installed and running.');
|
|
103
125
|
}
|
|
104
126
|
const id = randomUUID();
|
|
@@ -152,7 +174,7 @@ export class WebSocketServer {
|
|
|
152
174
|
});
|
|
153
175
|
}
|
|
154
176
|
isConnected() {
|
|
155
|
-
return this.client !== null && this.client.readyState === WebSocket.OPEN;
|
|
177
|
+
return this.client !== null && this.client.readyState === WebSocket.OPEN && this.clientAccepted;
|
|
156
178
|
}
|
|
157
179
|
getBridgeVersion() {
|
|
158
180
|
return this.bridgeVersion;
|
|
@@ -174,12 +196,20 @@ export class WebSocketServer {
|
|
|
174
196
|
}, 'Received message');
|
|
175
197
|
// Handle hello from bridge plugin
|
|
176
198
|
if ('type' in message && message.type === 'hello') {
|
|
177
|
-
|
|
178
|
-
|
|
199
|
+
if (typeof message.version !== 'string') {
|
|
200
|
+
this.rejectBridge('Bridge hello missing version', INCOMPATIBLE_BRIDGE_REASON);
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
179
203
|
const warning = checkVersionCompatibility(this.serverVersion, message.version);
|
|
180
204
|
if (warning) {
|
|
181
|
-
this.
|
|
205
|
+
this.rejectBridge(warning, INCOMPATIBLE_BRIDGE_REASON);
|
|
206
|
+
return;
|
|
182
207
|
}
|
|
208
|
+
this.bridgeVersion = message.version;
|
|
209
|
+
this.clientAccepted = true;
|
|
210
|
+
this.clearHelloTimeout();
|
|
211
|
+
this.logger.info({ bridgeVersion: message.version }, 'Bridge identified');
|
|
212
|
+
this.connectCallbacks.forEach((cb) => cb());
|
|
183
213
|
return;
|
|
184
214
|
}
|
|
185
215
|
// Handle pong response to ping
|
|
@@ -195,6 +225,10 @@ export class WebSocketServer {
|
|
|
195
225
|
}
|
|
196
226
|
// Handle response to our request
|
|
197
227
|
if ('id' in message) {
|
|
228
|
+
if (!this.clientAccepted) {
|
|
229
|
+
this.rejectBridge('Bridge sent response before compatible hello', INCOMPATIBLE_BRIDGE_REASON);
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
198
232
|
const response = message;
|
|
199
233
|
const pending = this.pendingRequests.get(response.id);
|
|
200
234
|
if (pending) {
|
|
@@ -211,10 +245,30 @@ export class WebSocketServer {
|
|
|
211
245
|
this.logger.warn({ id: response.id }, 'Unknown request ID');
|
|
212
246
|
}
|
|
213
247
|
}
|
|
248
|
+
if (!this.clientAccepted) {
|
|
249
|
+
this.rejectBridge('Bridge sent message before compatible hello', INCOMPATIBLE_BRIDGE_REASON);
|
|
250
|
+
}
|
|
214
251
|
}
|
|
215
252
|
catch (error) {
|
|
216
253
|
this.logger.error({ error }, 'Error parsing message');
|
|
254
|
+
if (!this.clientAccepted) {
|
|
255
|
+
this.rejectBridge('Bridge sent invalid JSON before compatible hello', INCOMPATIBLE_BRIDGE_REASON);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
rejectBridge(detail, closeReason) {
|
|
260
|
+
this.logger.warn({ detail }, BRIDGE_REJECTION_LOG_PREFIX);
|
|
261
|
+
this.clearHelloTimeout();
|
|
262
|
+
if (this.client && this.client.readyState === WebSocket.OPEN) {
|
|
263
|
+
this.client.close(POLICY_VIOLATION, closeReason);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
clearHelloTimeout() {
|
|
267
|
+
if (!this.helloTimeout) {
|
|
268
|
+
return;
|
|
217
269
|
}
|
|
270
|
+
clearTimeout(this.helloTimeout);
|
|
271
|
+
this.helloTimeout = null;
|
|
218
272
|
}
|
|
219
273
|
}
|
|
220
274
|
//# sourceMappingURL=websocket-server.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-server.js","sourceRoot":"","sources":["../src/websocket-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,IAAI,QAAQ,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"websocket-server.js","sourceRoot":"","sources":["../src/websocket-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,IAAI,QAAQ,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AACrC,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,0BAA0B,GAC9B,sGAAsG,CAAC;AACzG,MAAM,2BAA2B,GAAG,gCAAgC,0BAA0B,EAAE,CAAC;AAEjG,MAAM,OAAO,eAAe;IAClB,GAAG,GAAoB,IAAI,CAAC;IAC5B,MAAM,GAAqB,IAAI,CAAC;IAChC,IAAI,CAAS;IACb,IAAI,CAAS;IACb,MAAM,CAAS;IACf,aAAa,GAAkB,IAAI,CAAC;IACpC,cAAc,GAAkB,IAAI,CAAC;IACrC,aAAa,CAAS;IACtB,aAAa,GAAkB,IAAI,CAAC;IACpC,cAAc,GAAG,KAAK,CAAC;IACvB,YAAY,GAA0B,IAAI,CAAC;IAC3C,eAAe,GAAG,IAAI,GAAG,EAO9B,CAAC;IACI,gBAAgB,GAAsB,EAAE,CAAC;IACzC,mBAAmB,GAAsB,EAAE,CAAC;IAEpD,YACE,IAAY,EACZ,IAAY,EACZ,MAAc,EACd,aAAqB,EACrB,aAAsB,EACtB,cAAuB;QAEvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,IAAI,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,IAAI,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE;gBACjE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,0BAA0B,CAAC,CAAC;gBACpF,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,wBAAwB,CAAC,CAAC;gBACvD,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE;gBAC/B,sCAAsC;gBACtC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;oBAC7D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;oBACnE,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,yBAAyB,CAAC,CAAC;oBACtD,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;gBACjB,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBAC/C,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;oBAClC,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;wBACnF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,2BAA2B,yBAAyB,CAAC,CAAC;wBAC1E,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,0BAA0B,CAAC,CAAC;oBACzD,CAAC;gBACH,CAAC,EAAE,gBAAgB,CAAC,CAAC;gBAErB,YAAY,CAAC,GAAG,EAAE;oBAChB,IAAI,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;wBACrC,OAAO;oBACT,CAAC;oBAED,EAAE,CAAC,IAAI,CACL,IAAI,CAAC,SAAS,CAAC;wBACb,IAAI,EAAE,gBAAgB;wBACtB,IAAI,EAAE,YAAY;wBAClB,OAAO,EAAE,IAAI,CAAC,aAAa;qBAC5B,CAAC,CACH,CAAC;gBACJ,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE;oBACxB,IAAI,CAAC;wBACH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACtC,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,wBAAwB,CAAC,CAAC;oBACzD,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;oBAClB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;oBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;oBACxC,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;wBACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;wBACnB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;wBAC1B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;wBAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAC3B,CAAC;oBAED,8BAA8B;oBAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;wBAC5D,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;wBAC9B,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;oBAC/C,CAAC;oBACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;oBAE7B,IAAI,WAAW,EAAE,CAAC;wBAChB,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;oBACjD,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,wBAAwB,CAAC,CAAC;gBACzD,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;YAED,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE;oBAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;oBAC9C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;oBAChB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,OAAgC;QAChE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAC;QACJ,CAAC;QAED,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;QACxB,MAAM,OAAO,GAAkB,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAErD,4BAA4B;QAC5B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAChC,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC,CAAC;YAClD,CAAC,EAAE,kBAAkB,CAAC,CAAC;YAEvB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE;gBAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE;oBAClB,6BAA6B;oBAC7B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;wBACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;4BACvB,IAAI,EAAE,UAAU;4BAChB,EAAE;4BACF,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;4BACnC,KAAK,EAAE,IAAI;yBACZ,CAAC,CAAC;oBACL,CAAC;oBACD,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC;gBACD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBAChB,mCAAmC;oBACnC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;wBACxB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;4BACvB,IAAI,EAAE,UAAU;4BAChB,EAAE;4BACF,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;4BACnC,KAAK,EAAE,KAAK,CAAC,OAAO;yBACrB,CAAC,CAAC;oBACL,CAAC;oBACD,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;gBACD,OAAO;aACR,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,IAAI,CAAC,MAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAChC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC;IAClG,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,eAAe,CAAC,QAAoB;QAClC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,kBAAkB,CAAC,QAAoB;QACrC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC;IAEO,aAAa,CAAC,IAAY;QAChC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAkB,CAAC;YAElD,IAAI,CAAC,MAAM,CAAC,KAAK,CACf;gBACE,IAAI,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;aACpD,EACD,kBAAkB,CACnB,CAAC;YAEF,kCAAkC;YAClC,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAClD,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACxC,IAAI,CAAC,YAAY,CAAC,8BAA8B,EAAE,0BAA0B,CAAC,CAAC;oBAC9E,OAAO;gBACT,CAAC;gBAED,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC/E,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;oBACvD,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;gBACrC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,mBAAmB,CAAC,CAAC;gBAC1E,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5C,OAAO;YACT,CAAC;YAED,+BAA+B;YAC/B,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACjD,OAAO;YACT,CAAC;YAED,kCAAkC;YAClC,IAAI,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBACjD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;oBAC7D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;gBACrD,CAAC;gBACD,OAAO;YACT,CAAC;YAED,iCAAiC;YACjC,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;gBACpB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;oBACzB,IAAI,CAAC,YAAY,CACf,8CAA8C,EAC9C,0BAA0B,CAC3B,CAAC;oBACF,OAAO;gBACT,CAAC;gBAED,MAAM,QAAQ,GAAG,OAAyB,CAAC;gBAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAEtD,IAAI,OAAO,EAAE,CAAC;oBACZ,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC9B,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBAEzC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;wBACnB,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC5C,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,oBAAoB,CAAC,CAAC;gBAC9D,CAAC;YACH,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzB,IAAI,CAAC,YAAY,CACf,6CAA6C,EAC7C,0BAA0B,CAC3B,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,uBAAuB,CAAC,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzB,IAAI,CAAC,YAAY,CACf,kDAAkD,EAClD,0BAA0B,CAC3B,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,MAAc,EAAE,WAAmB;QACtD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,2BAA2B,CAAC,CAAC;QAC1D,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# RemNote Local MCPB
|
|
2
2
|
|
|
3
|
-
Claude Desktop extension that exposes a local `remnote-mcp-server` to Claude Desktop
|
|
3
|
+
Claude Desktop extension that exposes a local `remnote-mcp-server` to Claude Desktop and eligible Claude Cowork
|
|
4
|
+
desktop sessions without a public HTTPS tunnel.
|
|
4
5
|
|
|
5
6
|
## Usage
|
|
6
7
|
|
|
@@ -13,8 +14,8 @@ Claude Desktop extension that exposes a local `remnote-mcp-server` to Claude Des
|
|
|
13
14
|
http://127.0.0.1:3001/mcp
|
|
14
15
|
```
|
|
15
16
|
|
|
16
|
-
This extension does not start or supervise `remnote-mcp-server`. It is a stdio proxy that forwards Claude Desktop
|
|
17
|
-
calls to the local Streamable HTTP endpoint.
|
|
17
|
+
This extension does not start or supervise `remnote-mcp-server`. It is a stdio proxy that forwards Claude Desktop and
|
|
18
|
+
eligible Claude Cowork tool calls to the local Streamable HTTP endpoint.
|
|
18
19
|
|
|
19
20
|
## Installed Package Path
|
|
20
21
|
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
"name": "remnote-local",
|
|
4
4
|
"display_name": "RemNote Local",
|
|
5
5
|
"version": "0.14.1",
|
|
6
|
-
"description": "Use a locally running RemNote MCP Server from Claude Desktop without a public HTTPS tunnel.",
|
|
7
|
-
"long_description": "RemNote Local is a Claude Desktop extension that exposes RemNote MCP tools over stdio and forwards calls to a local remnote-mcp-server Streamable HTTP endpoint. Start remnote-mcp-server and keep the RemNote Automation Bridge plugin connected before using the tools.",
|
|
6
|
+
"description": "Use a locally running RemNote MCP Server from Claude Desktop or Cowork without a public HTTPS tunnel.",
|
|
7
|
+
"long_description": "RemNote Local is a Claude Desktop extension that exposes RemNote MCP tools over stdio and forwards calls to a local remnote-mcp-server Streamable HTTP endpoint. It can also be used by Claude Cowork in Claude Desktop when desktop extensions are enabled. Start remnote-mcp-server and keep the RemNote Automation Bridge plugin connected before using the tools.",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "Robert Spiegel",
|
|
10
10
|
"email": "nightingale7@gmail.com"
|
|
Binary file
|