remnote-mcp-server 0.1.3 → 0.2.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
@@ -7,6 +7,54 @@ Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.2.1] - 2026-02-11
11
+
12
+ ### Added
13
+
14
+ - `publish-to-npm.sh` script to automate npm publishing workflow with proper error checking
15
+ - Pre-flight checks: git clean, npm authentication, package.json validation
16
+ - Automatic code quality verification via `./code-quality.sh`
17
+ - Package contents verification with `npm pack --dry-run`
18
+ - User confirmation required before actual publish
19
+ - Post-publication git tag creation and push
20
+ - Success summary with next-step reminders (GitHub release, CHANGELOG update)
21
+
22
+ ## [0.2.0] - 2026-02-11
23
+
24
+ ### Changed
25
+
26
+ - **BREAKING**: Transport refactored from stdio to Streamable HTTP (SSE)
27
+ - Users must start server independently with `npm start` or `npm run dev`
28
+ - Server runs as long-running process on port 3001 (HTTP) and 3002 (WebSocket)
29
+ - Claude Code configuration must use `http` transport type instead of `stdio`
30
+ - Multiple Claude Code sessions can now connect to a single server instance
31
+ - TypeScript module resolution changed from "node" to "Node16" for SDK deep imports compatibility
32
+ - README.md "Claude Code CLI" section now includes complete `claude mcp` command examples
33
+ - Shows `claude mcp add` command with expected output
34
+ - Shows `claude mcp list` for verifying connection health
35
+ - Shows `claude mcp remove` for unregistering the server
36
+ - Positioned before manual configuration section as recommended approach
37
+
38
+ ### Added
39
+
40
+ - Multi-agent support: Multiple AI agents can now connect to the same RemNote knowledge base simultaneously
41
+ - HTTP MCP server with Streamable HTTP (SSE) transport for session management
42
+ - New `REMNOTE_HTTP_PORT` environment variable (default: 3001)
43
+ - Express-based HTTP server with JSON parsing middleware
44
+ - Session lifecycle management: multiple concurrent MCP sessions with independent state
45
+ - Comprehensive HTTP server test suite (15 tests covering initialization, session management, SSE streams, and error
46
+ cases)
47
+ - "Two-Component Architecture" section in README.md for consistency with RemNote MCP Bridge documentation
48
+
49
+ ### Dependencies
50
+
51
+ - Added `express` ^5.2.0 for HTTP server
52
+ - Added `@types/express` ^5.0.0 for TypeScript support
53
+
54
+ ### Fixed
55
+
56
+ - Fixed `remnote_status` tool action name mismatch (server sent 'status', plugin expected 'get_status')
57
+
10
58
  ## [0.1.3] - 2026-02-07
11
59
 
12
60
  ### Added
package/README.md CHANGED
@@ -1,15 +1,27 @@
1
1
  # RemNote MCP Server
2
2
 
3
- [![CI](https://github.com/robert7/remnote-mcp-server/actions/workflows/ci.yml/badge.svg)](https://github.com/robert7/remnote-mcp-server/actions/workflows/ci.yml)
4
- [![npm version](https://img.shields.io/npm/v/remnote-mcp-server.svg)](https://www.npmjs.com/package/remnote-mcp-server)
3
+ ![Status](https://img.shields.io/badge/status-beta-yellow) ![License](https://img.shields.io/badge/license-MIT-blue)
4
+ ![CI](https://github.com/robert7/remnote-mcp-server/actions/workflows/ci.yml/badge.svg)
5
+ [![codecov](https://codecov.io/gh/robert7/remnote-mcp-server/branch/main/graph/badge.svg)](https://codecov.io/gh/robert7/remnote-mcp-server)
5
6
 
6
- MCP server that bridges Claude Code (and other MCP clients) to [RemNote](https://remnote.com/) via the [RemNote MCP
7
- Bridge plugin](https://github.com/robert7/remnote-mcp-bridge).
7
+ MCP server that bridges AI agents (e.g. Claude Code) to [RemNote](https://remnote.com/) via the [RemNote MCP Bridge
8
+ plugin](https://github.com/robert7/remnote-mcp-bridge).
8
9
 
9
10
  ## Demo
10
11
 
11
12
  See Claude Code in action with RemNote: **[View Demo →](docs/demo.md)**
12
13
 
14
+ ## Two-Component Architecture
15
+
16
+ This system consists of **two separate components** that work together:
17
+
18
+ 1. **[RemNote MCP Bridge](https://github.com/robert7/remnote-mcp-bridge)** - A RemNote plugin that runs in your browser
19
+ or RemNote desktop app and exposes RemNote API functionality via WebSocket
20
+ 2. **RemNote MCP Server** (this repository) - A standalone server that connects your AI assistant to the bridge using
21
+ MCP protocol
22
+
23
+ **Both components are required** for AI integration with RemNote.
24
+
13
25
  ## What is This?
14
26
 
15
27
  The RemNote MCP Server enables AI assistants like Claude Code to interact directly with your RemNote knowledge base
@@ -19,13 +31,14 @@ notes, and maintain your daily journal—all through conversational commands.
19
31
  **Architecture:**
20
32
 
21
33
  ```text
22
- AI agent (e.g. Claude Code, MCP Client) ↔ MCP Server (stdio) ↔ WebSocket Server :3002 ↔ RemNote Plugin ↔ RemNote
34
+ AI agents (HTTP) ↔ MCP HTTP Server :3001 ↔ WebSocket Server :3002 ↔ RemNote Plugin ↔ RemNote
23
35
  ```
24
36
 
25
37
  The server acts as a bridge:
26
38
 
27
- - Communicates with Claude Code via stdio transport (MCP protocol)
28
- - Runs a WebSocket server (port 3002) that the RemNote browser plugin connects to
39
+ - Communicates with AI agents via Streamable HTTP transport (MCP protocol)
40
+ - HTTP server (port 3001) manages MCP sessions for multiple concurrent agents
41
+ - WebSocket server (port 3002) connects to the RemNote browser plugin
29
42
  - Translates MCP tool calls into RemNote API actions
30
43
 
31
44
  ## Features
@@ -37,41 +50,25 @@ The server acts as a bridge:
37
50
  - **Journal Entries** - Append timestamped entries to daily documents
38
51
  - **Connection Status** - Check server and plugin connection health
39
52
 
40
- ## Important Limitations
41
-
42
- **This MCP server enforces a strict 1:1:1 relationship:** one AI agent ↔ one MCP server instance ↔ one RemNote plugin
43
- connection.
44
-
45
- ### Multi-Agent Constraints
46
-
47
- You **cannot** use multiple AI agents (e.g., two Claude Code sessions) with the same RemNote knowledge base
48
- simultaneously. Three architectural constraints prevent this:
53
+ ## Multi-Agent Support
49
54
 
50
- 1. **stdio transport is point-to-point** - Each MCP server process communicates with exactly one AI agent via
51
- stdin/stdout. The transport protocol doesn't support multiple clients.
52
- 2. **WebSocket enforces single-client** - The server explicitly rejects multiple RemNote plugin connections. Only one
53
- plugin instance can connect to port 3002 at a time (connection code: 1008).
54
- 3. **Port binding conflict** - Multiple server instances attempting to use the default port 3002 will fail with
55
- `EADDRINUSE`.
55
+ **Multiple AI agents can now connect simultaneously!** The server uses Streamable HTTP transport, allowing multiple
56
+ Claude Code sessions (or other MCP clients) to access the same RemNote knowledge base concurrently.
56
57
 
57
- ### Practical Implications
58
+ ### How It Works
58
59
 
59
- - **One agent at a time** - Close one Claude Code session before starting another if both need RemNote access
60
- - **No concurrent access** - Cannot have multiple AI assistants modifying your RemNote knowledge base simultaneously
61
- - **Separate workspaces don't help** - Even with different ports, only one plugin instance can connect to RemNote at a
62
- time
60
+ - One long-running server process on ports 3001 (HTTP) and 3002 (WebSocket)
61
+ - Multiple AI agents connect via HTTP and get independent MCP sessions
62
+ - All sessions share the same WebSocket bridge to RemNote
63
+ - Concurrent requests are handled via UUID-based correlation
63
64
 
64
- ### Alternative Approach
65
+ ### Limitations
65
66
 
66
- If you need multiple AI agents with separate note-taking systems, use separate RemNote accounts/workspaces and configure
67
- each with its own MCP server instance on different ports.
67
+ The WebSocket bridge still enforces a **single RemNote plugin connection**. This means:
68
68
 
69
- ### Future Plans
70
-
71
- **HTTP transport migration planned** - The single-agent limitation is a temporary architectural constraint. A future
72
- version will migrate from stdio transport to HTTP transport (SSE), which would allow multiple AI agents to connect
73
- to the same MCP server instance simultaneously. This would remove constraint #1 above while maintaining the existing
74
- WebSocket bridge to RemNote.
69
+ - Multiple AI agents can connect to the server
70
+ - But only one RemNote app instance can be connected at a time
71
+ - This is a RemNote plugin limitation, not an MCP server limitation
75
72
 
76
73
  ## Prerequisites
77
74
 
@@ -139,23 +136,23 @@ which remnote-mcp-server
139
136
 
140
137
  After unlinking, you can install the published npm package globally with `npm install -g remnote-mcp-server` if needed.
141
138
 
142
- **About stdio transport**
139
+ **About Streamable HTTP Transport**
143
140
 
144
- This MCP server uses [stdio transport](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#stdio),
145
- the preferred communication mechanism for MCP. In stdio transport, Claude Code launches the server as a subprocess and
146
- exchanges JSON-RPC messages via standard input/output streams.
141
+ This MCP server uses [Streamable HTTP
142
+ transport](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports#http-with-sse), a communication
143
+ mechanism for MCP that supports multiple concurrent clients.
147
144
 
148
145
  **Key characteristics:**
149
146
 
150
- - **Lifecycle management**: Claude Code automatically starts the server when it launches and stops it on exit. The
151
- server is launched as a subprocess, not a standalone service.
152
- - **Message protocol**: Communication uses newline-delimited JSON-RPC messages on stdin (client server) and stdout
153
- (server → client). No HTTP/REST endpoints are exposed.
154
- - **Logging constraint**: stdout is reserved exclusively for MCP protocol messages. All logging must go to stderr, which
155
- is why the codebase uses `console.error()` for logs.
147
+ - **Lifecycle management**: You must start the server independently (`npm start` or `npm run dev`). Claude Code connects
148
+ to the running server via HTTP.
149
+ - **Message protocol**: Communication uses JSON-RPC over HTTP POST for requests and Server-Sent Events (SSE) for
150
+ notifications.
151
+ - **Multi-client support**: Multiple AI agents can connect simultaneously, each with their own MCP session.
152
+ - **Session management**: Server tracks sessions via `mcp-session-id` headers and UUID-based request correlation.
156
153
 
157
- This architecture provides tight integration with Claude Code while maintaining process isolation and security
158
- boundaries. For technical details, see the [MCP
154
+ This architecture enables multiple Claude Code windows to access RemNote concurrently while maintaining process
155
+ isolation and security boundaries. For technical details, see the [MCP
159
156
  specification](https://modelcontextprotocol.io/specification/2025-06-18/basic/transports).
160
157
 
161
158
  ### 2. Install RemNote MCP Bridge Plugin
@@ -167,91 +164,139 @@ Install the [RemNote MCP Bridge plugin](https://github.com/robert7/remnote-mcp-b
167
164
  3. Configure WebSocket URL: `ws://127.0.0.1:3002`
168
165
  4. Enable auto-reconnect
169
166
 
170
- ### 3. Configure Claude Code CLI
167
+ ### 3. Start the Server
171
168
 
172
- MCP servers are configured in `~/.claude.json` under the `mcpServers` key within project-specific sections.
169
+ **IMPORTANT:** You must start the server before using it with Claude Code.
173
170
 
174
- **Add to your `~/.claude.json`:**
171
+ ```bash
172
+ # Production mode
173
+ npm start
175
174
 
176
- ```json
177
- {
178
- "projects": {
179
- "/Users/username": {
180
- "mcpServers": {
181
- "remnote": {
182
- "type": "stdio",
183
- "command": "remnote-mcp-server",
184
- "args": [],
185
- "env": {
186
- "REMNOTE_WS_PORT": "3002"
187
- }
188
- }
189
- }
190
- }
191
- }
192
- }
175
+ # OR development mode (with hot reload)
176
+ npm run dev
177
+ ```
178
+
179
+ Expected output:
180
+ ```
181
+ [WebSocket Server] Listening on port 3002
182
+ [HTTP Server] Listening on port 3001
183
+ ```
184
+
185
+ Keep this terminal running. The server must be running for Claude Code to connect.
186
+
187
+ ## Configuration of AI Agents
188
+
189
+ ### Claude Code CLI
190
+
191
+ Use the `claude mcp` CLI commands to add, test, and remove the MCP server.
192
+
193
+ **Add the server:**
194
+
195
+ ```bash
196
+ # goto your project directory
197
+ cd /Users/username/Projects/sample-project
198
+ claude mcp add remnote --transport http http://localhost:3001/mcp
199
+ ```
200
+
201
+ Example output:
202
+
203
+ ```text
204
+ Added HTTP MCP server remnote with URL: http://localhost:3001/mcp to local config
205
+ File modified: /Users/username/.claude.json [project: /Users/username/Projects/sample-project]
206
+ ```
207
+
208
+ **Verify connection:**
209
+
210
+ ```bash
211
+ claude mcp list
212
+ ```
213
+
214
+ Example output:
215
+
216
+ ```text
217
+ remnote: http://localhost:3001/mcp (HTTP) - ✓ Connected
218
+ ```
219
+
220
+ As alternative you can use `/mcp` command in any Claude Code session to check the connection health.
221
+
222
+ **Using the server:**
223
+
224
+ Once configured, Claude Code automatically loads RemNote tools in your sessions. See the [Example Usage](#example-usage)
225
+ section below for conversational commands.
226
+
227
+ ```bash
228
+ # In any Claude Code session
229
+ claude
230
+
231
+ prompt:
232
+ show remnote note titles related do AI assisted coding
233
+ ...
234
+ remnote - remnote_search (MCP)(query: "AI assisted coding", limit: 20, includeContent: false)
235
+ ...
236
+ Found 20 notes related to "AI assisted coding". The main results include:
237
+
238
+ Primary note:
239
+ - AI assisted coding (remId: qtVwh5XBQbJM2HfSp)
240
+
241
+ Related tools/platforms:
242
+ - Claude Code
243
+ - Gemini CLI
244
+ ...
193
245
  ```
194
246
 
195
- **Configuration Notes:**
247
+ **Remove the server:**
248
+
249
+ ```bash
250
+ claude mcp remove remnote
251
+ ```
196
252
 
197
- - **Global availability:** Use your home directory path (`/Users/username`) to make RemNote tools available in all
198
- projects
199
- - **Project-specific:** Use a specific project path to limit availability to that project
200
- - **Multiple projects:** Add `mcpServers` configuration under each project path as needed
253
+ Example output:
201
254
 
202
- **Example with multiple projects:**
255
+ ```text
256
+ ✓ Removed MCP server "remnote"
257
+ Config: /Users/username/.claude.json
258
+ ```
259
+
260
+ ### Claude Code CLI (manual configuration)
261
+
262
+ If you prefer to manually configure the MCP server in Claude Code CLI instead of using `claude mcp add`, you can
263
+ directly edit your `~/.claude.json` file.
264
+
265
+ MCP servers are configured in `~/.claude.json` under the `mcpServers` key within project-specific sections.
266
+
267
+ **Add to your `~/.claude.json`:**
203
268
 
204
269
  ```json
205
270
  {
206
271
  "projects": {
207
272
  "/Users/username": {
273
+ ...
208
274
  "mcpServers": {
209
275
  "remnote": {
210
- "type": "stdio",
211
- "command": "remnote-mcp-server",
212
- "args": [],
213
- "env": {
214
- "REMNOTE_WS_PORT": "3002"
215
- }
216
- }
217
- }
218
- },
219
- "/Users/username/Projects/my-project": {
220
- "mcpServers": {
221
- "remnote": {
222
- "type": "stdio",
223
- "command": "remnote-mcp-server",
224
- "args": [],
225
- "env": {
226
- "REMNOTE_WS_PORT": "3002"
227
- }
276
+ "type": "http",
277
+ "url": "http://localhost:3001/mcp"
228
278
  }
229
- }
230
- }
231
- }
279
+ ...
232
280
  }
233
281
  ```
234
282
 
235
- ### 4. Restart Claude Code
236
-
237
- Restart Claude Code completely to load the MCP server configuration. The server will start automatically when Claude
238
- Code launches.
283
+ Restart Claude Code completely to load the MCP server configuration. Claude Code will connect to the running server.
239
284
 
240
285
  ## Verification
241
286
 
242
287
  ### Check Server is Running
243
288
 
244
- After Claude Code restarts, verify the server started:
289
+ Verify both ports are listening:
245
290
 
246
291
  ```bash
247
- # Check process is running
248
- ps aux | grep remnote-mcp-server
292
+ # Check HTTP port (MCP)
293
+ lsof -i :3001
249
294
 
250
- # Check WebSocket port is listening
295
+ # Check WebSocket port (RemNote bridge)
251
296
  lsof -i :3002
252
297
  ```
253
298
 
254
- You should see the `remnote-mcp-server` process running.
299
+ You should see the `node` process listening on both ports.
255
300
 
256
301
  ### Check RemNote Plugin Connection
257
302
 
@@ -343,30 +388,22 @@ Check if RemNote is connected
343
388
 
344
389
  ### Environment Variables
345
390
 
391
+ - `REMNOTE_HTTP_PORT` - HTTP MCP server port (default: 3001)
346
392
  - `REMNOTE_WS_PORT` - WebSocket server port (default: 3002)
347
393
 
348
- **Example with custom port:**
394
+ **Example with custom ports:**
349
395
 
350
- ```json
351
- {
352
- "projects": {
353
- "/Users/username": {
354
- "mcpServers": {
355
- "remnote": {
356
- "type": "stdio",
357
- "command": "remnote-mcp-server",
358
- "args": [],
359
- "env": {
360
- "REMNOTE_WS_PORT": "3003"
361
- }
362
- }
363
- }
364
- }
365
- }
366
- }
396
+ ```bash
397
+ # Set environment variables before starting
398
+ export REMNOTE_HTTP_PORT=3003
399
+ export REMNOTE_WS_PORT=3004
400
+ npm start
367
401
  ```
368
402
 
369
- **Note:** If you change the port, you must also update the WebSocket URL in the RemNote MCP Bridge plugin settings.
403
+ Then update your `~/.claude.json` and RemNote plugin settings to use the new ports.
404
+
405
+ **Note:** If you change the WebSocket port, you must also update the WebSocket URL in the RemNote MCP Bridge plugin
406
+ settings.
370
407
 
371
408
  ### RemNote Plugin Settings
372
409
 
@@ -379,43 +416,35 @@ Configure in the plugin control panel:
379
416
 
380
417
  ### Server Not Starting
381
418
 
382
- 1. **Check if installed globally:**
419
+ 1. **Verify the server is running:**
383
420
  ```bash
384
- which remnote-mcp-server
421
+ lsof -i :3001
422
+ lsof -i :3002
385
423
  ```
386
- Should return a path to the executable.
424
+ Both ports should show active listeners.
387
425
 
388
- 2. **Reinstall if needed:**
389
-
390
- **For npm installation:**
391
- ```bash
392
- npm install -g remnote-mcp-server
393
- ```
426
+ 2. **Check server output:**
427
+ - You should see: `[HTTP Server] Listening on port 3001`
428
+ - And: `[WebSocket Server] Listening on port 3002`
429
+ 3. **If server fails to start:**
430
+ - Check if ports are already in use (see "Port Already in Use" below)
431
+ - Verify installation: `which remnote-mcp-server`
432
+ - Check server logs for errors
394
433
 
395
- **For source installation:**
396
- ```bash
397
- cd ~/Projects/_private/remnote-mcp-server
398
- npm link
399
- ```
400
-
401
- 3. **Check Claude Code logs:**
402
- ```bash
403
- tail -f ~/.claude/debug/mcp-*.log
404
- ```
434
+ ### Port Already in Use
405
435
 
406
- ### Port 3002 Already in Use
407
-
408
- If you see "EADDRINUSE" error:
436
+ If you see "EADDRINUSE" error for port 3001 or 3002:
409
437
 
410
438
  ```bash
411
- # Find what's using the port
439
+ # Find what's using the ports
440
+ lsof -i :3001
412
441
  lsof -i :3002
413
442
 
414
443
  # Kill the process if needed
415
444
  kill -9 <PID>
416
445
  ```
417
446
 
418
- Alternatively, configure a different port in both `~/.claude.json` and the RemNote plugin settings.
447
+ Alternatively, configure different ports using environment variables (see Configuration section).
419
448
 
420
449
  ### Plugin Won't Connect
421
450
 
@@ -447,32 +476,34 @@ Alternatively, configure a different port in both `~/.claude.json` and the RemNo
447
476
 
448
477
  ### Configuration Not Working
449
478
 
450
- **Common issue:** Using the old `~/.claude/.mcp.json` file format
479
+ **Common issues:**
480
+
481
+ ❌ **Wrong transport type:**
482
+ ```json
483
+ "type": "stdio" // OLD - doesn't work anymore
484
+ ```
485
+
486
+ ✅ **Correct transport type:**
487
+ ```json
488
+ "type": "http" // NEW - required
489
+ ```
451
490
 
452
- ❌ **Old format (deprecated):**
491
+ ❌ **Using command instead of URL:**
453
492
  ```json
454
- // File: ~/.claude/.mcp.json
455
493
  {
456
- "remnote": { ... }
494
+ "type": "stdio",
495
+ "command": "remnote-mcp-server" // OLD
457
496
  }
458
497
  ```
459
498
 
460
- ✅ **Correct format:**
499
+ ✅ **Correct configuration:**
461
500
  ```json
462
- // File: ~/.claude.json
463
501
  {
464
- "projects": {
465
- "/Users/username": {
466
- "mcpServers": {
467
- "remnote": { ... }
468
- }
469
- }
470
- }
502
+ "type": "http",
503
+ "url": "http://127.0.0.1:3001/mcp" // NEW
471
504
  }
472
505
  ```
473
506
 
474
- The `enabledMcpjsonServers` setting in `~/.claude/settings.json` is also deprecated and no longer needed.
475
-
476
507
  ## Development
477
508
 
478
509
  ### Setup
@@ -513,10 +544,9 @@ Run `./code-quality.sh` to ensure all checks pass.
513
544
 
514
545
  ### Manual Testing
515
546
 
516
- To test the server independently (without Claude Code):
547
+ To test the server:
517
548
 
518
549
  ```bash
519
- # Stop Claude Code first to free port 3002
520
550
  cd ~/Projects/_private/remnote-mcp-server
521
551
  npm run dev
522
552
  ```
@@ -524,7 +554,7 @@ npm run dev
524
554
  Expected output:
525
555
  ```
526
556
  [WebSocket Server] Listening on port 3002
527
- [MCP Server] Server started on stdio
557
+ [HTTP Server] Listening on port 3001
528
558
  ```
529
559
 
530
560
  When the RemNote plugin connects:
@@ -533,11 +563,13 @@ When the RemNote plugin connects:
533
563
  [RemNote Bridge] RemNote plugin connected
534
564
  ```
535
565
 
566
+ When Claude Code connects, you'll see HTTP requests in the logs.
567
+
536
568
  Press Ctrl+C to stop.
537
569
 
538
570
  ### Development Documentation
539
571
 
540
- - **[IMPLEMENTATION.md](./IMPLEMENTATION.md)** - Technical implementation details
572
+ - **[docs/architecture.md](./docs/architecture.md)** - Architecture and design rationale
541
573
  - **[AGENTS.md](./AGENTS.md)** - AI agent and developer guidance
542
574
  - **[CHANGELOG.md](./CHANGELOG.md)** - Version history
543
575
 
@@ -0,0 +1,21 @@
1
+ import { WebSocketServer } from './websocket-server.js';
2
+ interface ServerInfo {
3
+ name: string;
4
+ version: string;
5
+ }
6
+ export declare class HttpMcpServer {
7
+ private app;
8
+ private server;
9
+ private port;
10
+ private wsServer;
11
+ private serverInfo;
12
+ private transports;
13
+ constructor(port: number, wsServer: WebSocketServer, serverInfo: ServerInfo);
14
+ private setupRoutes;
15
+ private initializeNewSession;
16
+ private handleSessionRequest;
17
+ start(): Promise<void>;
18
+ stop(): Promise<void>;
19
+ getActiveSessionCount(): number;
20
+ }
21
+ export {};
@@ -0,0 +1,186 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
3
+ import express from 'express';
4
+ import { randomUUID } from 'crypto';
5
+ import { registerAllTools } from './tools/index.js';
6
+ export class HttpMcpServer {
7
+ app;
8
+ server = null;
9
+ port;
10
+ wsServer;
11
+ serverInfo;
12
+ transports = new Map();
13
+ constructor(port, wsServer, serverInfo) {
14
+ this.port = port;
15
+ this.wsServer = wsServer;
16
+ this.serverInfo = serverInfo;
17
+ // Create Express app with JSON parsing
18
+ this.app = express();
19
+ this.app.use(express.json());
20
+ // Route handlers
21
+ this.setupRoutes();
22
+ }
23
+ setupRoutes() {
24
+ // POST: Handle session initialization and requests
25
+ this.app.post('/mcp', async (req, res) => {
26
+ try {
27
+ const sessionId = req.headers['mcp-session-id'];
28
+ const body = req.body;
29
+ // Check if this is an initialize request
30
+ const isInitializeRequest = body && body.method === 'initialize' && body.jsonrpc === '2.0';
31
+ if (!sessionId && isInitializeRequest) {
32
+ // New session initialization
33
+ await this.initializeNewSession(req, res, body);
34
+ }
35
+ else if (sessionId) {
36
+ // Existing session request
37
+ await this.handleSessionRequest(sessionId, req, res, body);
38
+ }
39
+ else {
40
+ // Missing session ID for non-initialize request
41
+ res.status(400).json({
42
+ jsonrpc: '2.0',
43
+ error: {
44
+ code: -32600,
45
+ message: 'Missing mcp-session-id header for non-initialize request',
46
+ },
47
+ id: body?.id ?? null,
48
+ });
49
+ }
50
+ }
51
+ catch (error) {
52
+ console.error('[HTTP Server] Error handling POST request:', error);
53
+ res.status(500).json({
54
+ jsonrpc: '2.0',
55
+ error: {
56
+ code: -32603,
57
+ message: error instanceof Error ? error.message : String(error),
58
+ },
59
+ id: null,
60
+ });
61
+ }
62
+ });
63
+ // GET: SSE stream for session notifications
64
+ this.app.get('/mcp', async (req, res) => {
65
+ const sessionId = req.headers['mcp-session-id'];
66
+ if (!sessionId) {
67
+ res.status(400).json({ error: 'Missing mcp-session-id header' });
68
+ return;
69
+ }
70
+ const transport = this.transports.get(sessionId);
71
+ if (!transport) {
72
+ res.status(404).json({ error: `Session not found: ${sessionId}` });
73
+ return;
74
+ }
75
+ // Let transport handle SSE stream setup
76
+ await transport.handleRequest(req, res);
77
+ });
78
+ // DELETE: Terminate session
79
+ this.app.delete('/mcp', async (req, res) => {
80
+ const sessionId = req.headers['mcp-session-id'];
81
+ if (!sessionId) {
82
+ res.status(400).json({ error: 'Missing mcp-session-id header' });
83
+ return;
84
+ }
85
+ const transport = this.transports.get(sessionId);
86
+ if (!transport) {
87
+ res.status(404).json({ error: `Session not found: ${sessionId}` });
88
+ return;
89
+ }
90
+ // Let transport handle session termination
91
+ await transport.handleRequest(req, res);
92
+ });
93
+ }
94
+ async initializeNewSession(req, res, body) {
95
+ // Create new transport with session ID generator
96
+ const transport = new StreamableHTTPServerTransport({
97
+ sessionIdGenerator: () => randomUUID(),
98
+ onsessioninitialized: (sessionId) => {
99
+ this.transports.set(sessionId, transport);
100
+ console.error(`[HTTP Server] New session initialized: ${sessionId}`);
101
+ },
102
+ });
103
+ // Set up onclose handler to clean up transport when closed
104
+ transport.onclose = () => {
105
+ const sessionId = transport.sessionId;
106
+ if (sessionId && this.transports.has(sessionId)) {
107
+ console.error(`[HTTP Server] Session closed: ${sessionId}`);
108
+ this.transports.delete(sessionId);
109
+ }
110
+ };
111
+ // Create new MCP server instance for this session
112
+ const server = new Server(this.serverInfo, {
113
+ capabilities: {
114
+ tools: {},
115
+ },
116
+ });
117
+ // Register all tools with the shared WebSocket server
118
+ registerAllTools(server, this.wsServer);
119
+ // Connect server to transport
120
+ await server.connect(transport);
121
+ // Handle the initialize request
122
+ await transport.handleRequest(req, res, body);
123
+ }
124
+ async handleSessionRequest(sessionId, req, res, body) {
125
+ const transport = this.transports.get(sessionId);
126
+ if (!transport) {
127
+ res.status(400).json({
128
+ jsonrpc: '2.0',
129
+ error: {
130
+ code: -32600,
131
+ message: `Invalid session ID: ${sessionId}`,
132
+ },
133
+ id: body?.id ?? null,
134
+ });
135
+ return;
136
+ }
137
+ await transport.handleRequest(req, res, body);
138
+ }
139
+ async start() {
140
+ return new Promise((resolve, reject) => {
141
+ try {
142
+ this.server = this.app.listen(this.port, () => {
143
+ console.error(`[HTTP Server] Listening on port ${this.port}`);
144
+ resolve();
145
+ });
146
+ this.server.on('error', (error) => {
147
+ console.error('[HTTP Server] Server error:', error);
148
+ reject(error);
149
+ });
150
+ }
151
+ catch (error) {
152
+ reject(error);
153
+ }
154
+ });
155
+ }
156
+ async stop() {
157
+ // Close all active transports
158
+ for (const [sessionId, transport] of this.transports.entries()) {
159
+ try {
160
+ console.error(`[HTTP Server] Closing session: ${sessionId}`);
161
+ await transport.close();
162
+ this.transports.delete(sessionId);
163
+ }
164
+ catch (error) {
165
+ console.error(`[HTTP Server] Error closing session ${sessionId}:`, error);
166
+ }
167
+ }
168
+ // Close HTTP server
169
+ return new Promise((resolve) => {
170
+ if (this.server) {
171
+ this.server.close(() => {
172
+ console.error('[HTTP Server] Server stopped');
173
+ this.server = null;
174
+ resolve();
175
+ });
176
+ }
177
+ else {
178
+ resolve();
179
+ }
180
+ });
181
+ }
182
+ getActiveSessionCount() {
183
+ return this.transports.size;
184
+ }
185
+ }
186
+ //# sourceMappingURL=http-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,OAAsD,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAOpD,MAAM,OAAO,aAAa;IAChB,GAAG,CAAU;IACb,MAAM,GAAyC,IAAI,CAAC;IACpD,IAAI,CAAS;IACb,QAAQ,CAAkB;IAC1B,UAAU,CAAa;IACvB,UAAU,GAAG,IAAI,GAAG,EAAyC,CAAC;IAEtE,YAAY,IAAY,EAAE,QAAyB,EAAE,UAAsB;QACzE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAE7B,uCAAuC;QACvC,IAAI,CAAC,GAAG,GAAG,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAE7B,iBAAiB;QACjB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAEO,WAAW;QACjB,mDAAmD;QACnD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;YAC1D,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;gBACtE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;gBAEtB,yCAAyC;gBACzC,MAAM,mBAAmB,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC;gBAE3F,IAAI,CAAC,SAAS,IAAI,mBAAmB,EAAE,CAAC;oBACtC,6BAA6B;oBAC7B,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;gBAClD,CAAC;qBAAM,IAAI,SAAS,EAAE,CAAC;oBACrB,2BAA2B;oBAC3B,MAAM,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC7D,CAAC;qBAAM,CAAC;oBACN,gDAAgD;oBAChD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBACnB,OAAO,EAAE,KAAK;wBACd,KAAK,EAAE;4BACL,IAAI,EAAE,CAAC,KAAK;4BACZ,OAAO,EAAE,0DAA0D;yBACpE;wBACD,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI;qBACrB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;gBACnE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACnB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACL,IAAI,EAAE,CAAC,KAAK;wBACZ,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;qBAChE;oBACD,EAAE,EAAE,IAAI;iBACT,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,4CAA4C;QAC5C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;YACzD,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;YAEtE,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAC;gBACjE,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,SAAS,EAAE,EAAE,CAAC,CAAC;gBACnE,OAAO;YACT,CAAC;YAED,wCAAwC;YACxC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,4BAA4B;QAC5B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;YAC5D,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;YAEtE,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAC;gBACjE,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,SAAS,EAAE,EAAE,CAAC,CAAC;gBACnE,OAAO;YACT,CAAC;YAED,2CAA2C;YAC3C,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,GAAY,EAAE,GAAa,EAAE,IAAa;QAC3E,iDAAiD;QACjD,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;YAClD,kBAAkB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE;YACtC,oBAAoB,EAAE,CAAC,SAAiB,EAAE,EAAE;gBAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBAC1C,OAAO,CAAC,KAAK,CAAC,0CAA0C,SAAS,EAAE,CAAC,CAAC;YACvE,CAAC;SACF,CAAC,CAAC;QAEH,2DAA2D;QAC3D,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;YACvB,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;YACtC,IAAI,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChD,OAAO,CAAC,KAAK,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAC;gBAC5D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC;QAEF,kDAAkD;QAClD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE;YACzC,YAAY,EAAE;gBACZ,KAAK,EAAE,EAAE;aACV;SACF,CAAC,CAAC;QAEH,sDAAsD;QACtD,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAExC,8BAA8B;QAC9B,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEhC,gCAAgC;QAChC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,SAAiB,EACjB,GAAY,EACZ,GAAa,EACb,IAAa;QAEb,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEjD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,CAAC,KAAK;oBACZ,OAAO,EAAE,uBAAuB,SAAS,EAAE;iBAC5C;gBACD,EAAE,EAAG,IAAyB,EAAE,EAAE,IAAI,IAAI;aAC3C,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;oBAC5C,OAAO,CAAC,KAAK,CAAC,mCAAmC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC9D,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;gBAEH,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBAChC,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;oBACpD,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,8BAA8B;QAC9B,KAAK,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/D,IAAI,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,kCAAkC,SAAS,EAAE,CAAC,CAAC;gBAC7D,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;gBACxB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,SAAS,GAAG,EAAE,KAAK,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;oBACrB,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;oBAC9C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;oBACnB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAC9B,CAAC;CACF"}
package/dist/index.js CHANGED
@@ -1,25 +1,15 @@
1
1
  #!/usr/bin/env node
2
- import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
- import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
2
  import { createRequire } from 'module';
5
3
  import { WebSocketServer } from './websocket-server.js';
6
- import { registerAllTools } from './tools/index.js';
4
+ import { HttpMcpServer } from './http-server.js';
7
5
  const require = createRequire(import.meta.url);
8
6
  const packageJson = require('../package.json');
9
7
  const WS_PORT = parseInt(process.env.REMNOTE_WS_PORT || '3002', 10);
8
+ const HTTP_PORT = parseInt(process.env.REMNOTE_HTTP_PORT || '3001', 10);
10
9
  async function main() {
11
- // Initialize MCP server
12
- const mcpServer = new Server({
13
- name: 'remnote-mcp-server',
14
- version: packageJson.version,
15
- }, {
16
- capabilities: {
17
- tools: {},
18
- },
19
- });
20
10
  // Initialize WebSocket server for RemNote plugin
21
11
  const wsServer = new WebSocketServer(WS_PORT);
22
- // Log connection status to stderr (stdio reserved for MCP)
12
+ // Log connection status
23
13
  wsServer.onClientConnect(() => {
24
14
  console.error('[RemNote Bridge] RemNote plugin connected');
25
15
  });
@@ -29,17 +19,17 @@ async function main() {
29
19
  // Start WebSocket server
30
20
  await wsServer.start();
31
21
  console.error(`[WebSocket Server] Listening on port ${WS_PORT}`);
32
- // Register all RemNote MCP tools
33
- registerAllTools(mcpServer, wsServer);
34
- // Set up stdio transport for MCP
35
- const transport = new StdioServerTransport();
36
- await mcpServer.connect(transport);
37
- console.error('[MCP Server] Server started on stdio');
22
+ // Initialize HTTP MCP server
23
+ const httpServer = new HttpMcpServer(HTTP_PORT, wsServer, {
24
+ name: 'remnote-mcp-server',
25
+ version: packageJson.version,
26
+ });
27
+ await httpServer.start();
38
28
  // Graceful shutdown
39
29
  const shutdown = async () => {
40
30
  console.error('[MCP Server] Shutting down...');
31
+ await httpServer.stop();
41
32
  await wsServer.stop();
42
- await mcpServer.close();
43
33
  process.exit(0);
44
34
  };
45
35
  process.on('SIGINT', shutdown);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAEpE,KAAK,UAAU,IAAI;IACjB,wBAAwB;IACxB,MAAM,SAAS,GAAG,IAAI,MAAM,CAC1B;QACE,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,WAAW,CAAC,OAAO;KAC7B,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;SACV;KACF,CACF,CAAC;IAEF,iDAAiD;IACjD,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;IAE9C,2DAA2D;IAC3D,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE;QAC5B,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,CAAC,GAAG,EAAE;QAC/B,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,yBAAyB;IACzB,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;IACvB,OAAO,CAAC,KAAK,CAAC,wCAAwC,OAAO,EAAE,CAAC,CAAC;IAEjE,iCAAiC;IACjC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEtC,iCAAiC;IACjC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnC,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAEtD,oBAAoB;IACpB,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AACpE,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAExE,KAAK,UAAU,IAAI;IACjB,iDAAiD;IACjD,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;IAE9C,wBAAwB;IACxB,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE;QAC5B,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,CAAC,GAAG,EAAE;QAC/B,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,yBAAyB;IACzB,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;IACvB,OAAO,CAAC,KAAK,CAAC,wCAAwC,OAAO,EAAE,CAAC,CAAC;IAEjE,6BAA6B;IAC7B,MAAM,UAAU,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE;QACxD,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,WAAW,CAAC,OAAO;KAC7B,CAAC,CAAC;IAEH,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;IAEzB,oBAAoB;IACpB,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC/C,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -130,7 +130,7 @@ export function registerAllTools(server, wsServer) {
130
130
  ],
131
131
  };
132
132
  }
133
- const result = await wsServer.sendRequest('status', {});
133
+ const result = await wsServer.sendRequest('get_status', {});
134
134
  return {
135
135
  content: [
136
136
  {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remnote-mcp-server",
3
- "version": "0.1.3",
3
+ "version": "0.2.1",
4
4
  "description": "MCP server bridge for RemNote knowledge base",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -53,10 +53,12 @@
53
53
  "homepage": "https://github.com/robert7/remnote-mcp-server#readme",
54
54
  "dependencies": {
55
55
  "@modelcontextprotocol/sdk": "^1.26.0",
56
+ "express": "^5.2.0",
56
57
  "ws": "^8.19.0",
57
58
  "zod": "^4.3.6"
58
59
  },
59
60
  "devDependencies": {
61
+ "@types/express": "^5.0.0",
60
62
  "@types/node": "^25.2.1",
61
63
  "@types/ws": "^8.18.1",
62
64
  "@typescript-eslint/eslint-plugin": "^6.21.0",