Skip to main content
Glama
robert7
by robert7

RemNote MCP Server

License CI npm version codecov

MCP server that bridges AI agents (e.g. Claude Code) to RemNote via the RemNote Automation Bridge plugin.

If you run into any issues, please report them here.

What is This?

The RemNote MCP Server enables AI assistants like Claude Code to interact directly with your RemNote knowledge base through the Model Context Protocol (MCP). Create notes, hierarchical markdown trees, and RemNote-native flashcards; search and read your knowledge base; update existing notes; and maintain your daily journal, all through conversational commands.

For some agentic workflows or CLI-first automation, the companion app remnote-cli may be a better fit than running a full MCP server. In particular, coding harnesses (Claude Code, GitHub Copilot CLI, Codex CLI, etc.) can use remnote-cli with zero config — paste one prompt that loads the skill file and the agent handles the rest. See Use RemNote from Any Coding Harness.

Related MCP server: ai-brain

Demo

See AI agent examples in action with RemNote: View Demo →

Two-Component Architecture

This system consists of two separate components that work together:

  1. RemNote Automation Bridge - A RemNote plugin that runs in your browser or RemNote desktop app and exposes RemNote API functionality via WebSocket

  2. RemNote MCP Server (this project) - A standalone server that connects your AI assistant to the bridge using MCP protocol

Both components are required for AI integration with RemNote.

For the detailed bridge connection lifecycle, retry phases, and wake-up triggers, use the bridge repo as the source of truth: Connection Lifecycle Guide.

How It Works

AI agents (HTTP) ↔ MCP HTTP Server :3001 ↔ WebSocket Server :3002 ↔ RemNote Plugin ↔ RemNote

The server acts as a bridge:

  • Communicates with AI agents via Streamable HTTP transport (MCP protocol) - supports both local and remote access

  • HTTP server (port 3001) manages MCP sessions for multiple concurrent agents

  • WebSocket server (port 3002) connects to the RemNote browser plugin

  • Translates MCP tool calls into RemNote API actions

Multi-Agent Support: Multiple AI agents can connect simultaneously to the same RemNote knowledge base. Each agent gets its own MCP session while sharing the WebSocket bridge.

Remote Access: By default, the server binds to localhost (127.0.0.1) for local AI agents. Cloud-based services like Claude Desktop and Claude Cowork require remote access—use tunneling tools like ngrok to expose the HTTP endpoint securely. The WebSocket connection always stays local for security. See Remote Access Guide for setup.

Features

  • Create Notes & Flashcards - Create simple notes, hierarchical markdown trees, or RemNote-native flashcards

  • Search Knowledge Base - Run full-text searches or tag-based searches with ancestor context

  • Read Notes - Retrieve note content in markdown or structured form with configurable traversal depth

  • Update Notes - Modify titles, append or replace hierarchical content, and manage tags

  • Journal Entries - Append timestamped daily entries, including hierarchical markdown content

  • Agent Playbook - Return built-in navigation and safety guidance for MCP clients

  • Connection Status - Check server and plugin connection health

Quick Start

1. Install the Server

Version compatibility (0.x semver): install a remnote-mcp-server version compatible with your installed RemNote Automation Bridge plugin version. See the Bridge / Consumer Version Compatibility Guide.

npm install -g remnote-mcp-server

2. Install the RemNote Plugin

Install the RemNote Automation Bridge plugin in your RemNote app. Currently available from GitHub; registration in the RemNote marketplace is pending approval. Configure the plugin to connect to ws://127.0.0.1:3002.

3. Start the Server

remnote-mcp-server

Expected output:

RemNote MCP Server v0.2.1 listening { wsPort: 3002, httpPort: 3001 }

Keep this terminal running.

4. Configure Your AI Client

Documentation

Getting Started

Usage

Help & Advanced

Development

Available MCP Tools

Tool

Description

remnote_create_note

Create notes, markdown trees, or flashcards with title, content, parent, and tags

remnote_search

Search knowledge base with full-text search and parent-context metadata; tags remain optional and SDK-limited

remnote_search_by_tag

Search by tag with ancestor-context resolution

remnote_read_note

Read note by ID with metadata and markdown or structured content; readable tags remain SDK-limited

remnote_update_note

Update title, append/replace content, or modify tags

remnote_append_journal

Append hierarchical content to today's daily document

remnote_read_table

Read Advanced Table columns, rows, and typed property metadata

remnote_get_playbook

Get recommended MCP usage/navigation playbook

remnote_status

Check connection status and statistics

Tools that declare an outputSchema return MCP structuredContent plus a JSON content text block for compatibility. See the MCP tools specification for the protocol contract.

See the Tools Reference for detailed usage and examples.

Supported AI Clients

  • Claude Code CLI - Local terminal-based agent

  • Claude Desktop / Cowork - Remote connector clients (require remote access)

  • Accomplish - Task-based MCP client (formerly Openwork)

  • Any MCP client supporting Streamable HTTP transport

Example Usage

Create notes:

Create a note about "Project Ideas" with content:
- AI-powered note taking
- Personal knowledge management

Search:

Search my RemNote for notes about "machine learning"

Update notes:

Add a tag "important" to note abc123

Journal entries:

Add to my journal: "Completed the RemNote MCP integration"

See the Tools Reference for more examples.

Configuration

Environment Variables

  • REMNOTE_HTTP_PORT - HTTP MCP server port (default: 3001)

  • REMNOTE_HTTP_HOST - HTTP server bind address (default: 127.0.0.1)

  • REMNOTE_WS_PORT - WebSocket server port (default: 3002)

Custom Ports

remnote-mcp-server --http-port 3003 --ws-port 3004

After changing ports, update your MCP client configuration and RemNote plugin settings.

See CLI Options Reference for all options.

Troubleshooting

Server won't start:

  • Check ports aren't in use: lsof -i :3001 and lsof -i :3002

  • Verify installation: which remnote-mcp-server

Plugin won't connect:

  • Verify plugin settings: WebSocket URL ws://127.0.0.1:3002

  • Check server is running: lsof -i :3002

Tools not appearing:

  • Verify configuration: claude mcp list

  • Restart Claude Code completely

  • If this started after upgrades, verify bridge/server version compatibility (0.x minor versions may break); see the Bridge / Consumer Version Compatibility Guide

See the Troubleshooting Guide for detailed solutions.

Contributing & Development

Development setup:

Version compatibility tip: when testing against a local or marketplace-installed bridge plugin, use a server checkout/tag compatible with that bridge plugin version (see the Bridge / Consumer Version Compatibility Guide).

git clone https://github.com/robert7/remnote-mcp-server.git
cd remnote-mcp-server
npm install
npm run build
npm link

Development workflow:

npm run dev          # Watch mode with hot reload
npm test             # Run test suite
./code-quality.sh    # Run all quality checks

See the Development Setup Guide for complete instructions.

Pull requests that affect bridge-consumer behavior should follow the shared PR rules in the bridge repo: Pull Request Guide. In particular, keep bridge/server/CLI parity for shared functionality changes and link related PRs across the affected repos.

For the canonical workflow for updating and running shared live integration coverage, see the Integration Testing Guide.

License

MIT

Available Tools

6 tools
remnote_append_journalC

Append content to today's daily document in RemNote

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesContent to append to today's daily document
timestampNoInclude timestamp (default: true)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states the action ('Append content') but doesn't disclose important behavioral traits like whether this requires authentication, what happens if today's daily document doesn't exist (does it create one?), whether the append is atomic, or what the response looks like. The description is minimal and lacks operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that gets straight to the point with zero wasted words. It's appropriately sized for a simple tool and front-loads the essential information. Every word earns its place in this concise formulation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this is a mutation tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what happens when invoked (success/failure responses), doesn't mention authentication requirements, and doesn't clarify edge cases like missing daily documents. For a tool that modifies data, more operational context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents both parameters ('content' and 'timestamp'). The description doesn't add any parameter semantics beyond what's in the schema - it mentions 'content' but provides no additional context about format, length, or special handling. The baseline score of 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Append content') and target resource ('today's daily document in RemNote'), making the purpose immediately understandable. It doesn't explicitly distinguish from siblings like 'remnote_update_note' which might also modify documents, but the specific focus on 'today's daily document' provides some differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when this tool is appropriate versus 'remnote_update_note' for modifying documents, 'remnote_create_note' for creating new documents, or 'remnote_read_note' for reading documents. The agent must infer usage from the tool name and description alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remnote_create_noteC

Create a new note in RemNote with optional content, parent, and tags

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesThe title of the note
contentNoContent as child bullets (newline-separated)
parentIdNoParent Rem ID
tagsNoTags to apply

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It states the tool creates a note but doesn't disclose permissions needed, whether it's idempotent, error conditions, or what happens on success/failure. For a mutation tool with zero annotation coverage, this is inadequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core action and lists optional parameters without unnecessary detail. Every word earns its place, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with no annotations and no output schema, the description is incomplete. It doesn't address what the tool returns (e.g., note ID, success confirmation), error handling, or behavioral nuances like whether duplicate titles are allowed. Given the complexity of a 4-parameter mutation, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are fully documented in the schema. The description adds marginal value by listing optional parameters (content, parent, tags) but doesn't explain semantics beyond what the schema provides, such as how parentId relates to RemNote structure or tag formatting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create a new note') and resource ('in RemNote'), making the purpose immediately understandable. It distinguishes from siblings like 'remnote_update_note' by specifying creation rather than modification, though it doesn't explicitly contrast with all alternatives like 'remnote_append_journal'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'remnote_update_note' for modifying existing notes or 'remnote_append_journal' for journal-specific operations. It mentions optional parameters but gives no context about prerequisites, typical use cases, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remnote_read_noteC

Read a specific note from RemNote by its Rem ID

ParametersJSON Schema
NameRequiredDescriptionDefault
remIdYesThe Rem ID to read
depthNoDepth of children to include (0-10, default: 3)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool reads a note, implying a read-only operation, but doesn't clarify if it requires authentication, has rate limits, or what the output format looks like (e.g., structured data or raw text). For a tool with no annotation coverage, this leaves significant gaps in understanding its behavior and constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that efficiently conveys the core purpose without unnecessary words. It's front-loaded with the key action and resource, making it easy to parse. Every part of the sentence earns its place by specifying the tool's function and key input, resulting in zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of reading a note (which could involve permissions, data formats, or errors) and the lack of annotations and output schema, the description is incomplete. It doesn't address what the tool returns (e.g., note content, metadata, or error messages), authentication needs, or potential limitations. For a tool with no structured support, more context is needed to ensure reliable use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema fully documents both parameters ('remId' and 'depth') with descriptions. The description adds no additional parameter semantics beyond what's in the schema, such as explaining what a 'Rem ID' is or providing examples. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Read') and resource ('a specific note from RemNote'), making the purpose immediately understandable. It specifies the key identifier ('by its Rem ID'), which distinguishes it from other read operations that might use different identifiers. However, it doesn't explicitly differentiate from sibling tools like 'remnote_search' or 'remnote_status', which could also involve reading data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to prefer this over 'remnote_search' for finding notes, or how it relates to 'remnote_status' for system information. There's no context about prerequisites, such as needing an existing Rem ID, or exclusions for when other tools might be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remnote_statusA

Check the connection status and statistics of the RemNote MCP bridge

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool checks status and statistics but does not describe what specific statistics are returned, whether it performs network calls, or any error conditions. This leaves significant gaps in understanding the tool's behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the purpose without any wasted words. It is appropriately sized for a no-parameter tool and communicates the essential information clearly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no output schema), the description is adequate but incomplete. It lacks details on what statistics are returned and behavioral context, which would be helpful for an agent to understand the tool's output and usage fully. It meets the minimum viable standard but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and the schema description coverage is 100%, so there is no need for parameter documentation. The description appropriately does not discuss parameters, earning a baseline score of 4 for not adding unnecessary information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Check') and the target ('connection status and statistics of the RemNote MCP bridge'), distinguishing it from sibling tools that perform CRUD operations on notes. It precisely communicates what the tool does without being vague or tautological.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, context, or exclusions, leaving the agent to infer usage based on the purpose alone. This lack of explicit guidance reduces its effectiveness in tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remnote_update_noteC

Update an existing note in RemNote (change title, append content, or modify tags)

ParametersJSON Schema
NameRequiredDescriptionDefault
remIdYesThe Rem ID to update
titleNoNew title
appendContentNoContent to append as children
addTagsNoTags to add
removeTagsNoTags to remove

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the tool updates an existing note but doesn't disclose behavioral traits such as whether it requires specific permissions, if changes are reversible, potential rate limits, or what happens to unspecified fields (e.g., does it overwrite or merge?). For a mutation tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core action ('Update an existing note in RemNote') and specifies key operations. There's no wasted text, and it's appropriately sized for the tool's complexity. However, it could be slightly more structured by separating usage hints or behavioral details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (mutation with 5 parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't cover behavioral aspects like permissions or side effects, doesn't explain return values (since no output schema), and provides minimal parameter guidance beyond the schema. For a tool that modifies data, this leaves significant gaps for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 5 parameters (remId, title, appendContent, addTags, removeTags) with descriptions. The description adds minimal value beyond the schema by listing actions ('change title, append content, or modify tags'), which loosely maps to parameters but doesn't provide additional syntax, format details, or constraints. Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('update') and resource ('existing note in RemNote') with specific actions ('change title, append content, or modify tags'). It distinguishes from siblings like 'remnote_create_note' (create vs. update) and 'remnote_read_note' (read vs. update), though it doesn't explicitly mention all siblings. The purpose is specific but could be more differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing note ID), exclusions (e.g., not for creating new notes), or comparisons to siblings like 'remnote_append_journal' (which might be for journal-specific updates). Usage is implied by the verb 'update' but lacks explicit context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv1.0.0
    • First observedremnote_append_journal
    • First observedremnote_create_note
    • First observedremnote_read_note
    • First observedremnote_search
    • First observedremnote_status
    • First observedremnote_update_note

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: append_journal targets daily documents, create/read/update_note handle note lifecycle operations, search finds notes, and status checks connectivity. There is no overlap in functionality, making tool selection unambiguous for an agent.

Naming Consistency5/5

All tools follow a consistent 'remnote_verb_noun' pattern with snake_case throughout (e.g., remnote_append_journal, remnote_create_note). The naming is predictable and adheres to a uniform convention without any deviations.

Tool Count5/5

With 6 tools, the server is well-scoped for managing a knowledge base like RemNote. It covers core operations (create, read, update, search) plus specialized functions (append_journal, status), avoiding bloat while ensuring each tool earns its place.

Completeness4/5

The toolset provides strong CRUD coverage for notes and search, with additional utilities for journaling and status checks. A minor gap exists in note deletion functionality, but agents can work around this by updating notes or using other methods, and the core workflows are well-supported.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables users to create, link, explore, and synthesize atomic notes using the Zettelkasten method through MCP-compatible clients like Claude.
    MIT