Skip to main content
Glama
NoteDiscovery MCP Server

NoteDiscovery MCP Server

by gamosoft

What is NoteDiscovery?

NoteDiscovery is a lightweight, self-hosted note-taking application that puts you in complete control of your knowledge base. Write, organize, and discover your notes with a beautiful, modern interfaceโ€”all running on your own server.

Related MCP server: brainMD

๐ŸŽฏ Who is it for?

  • Privacy-conscious users who want complete control over their data

  • Developers who prefer markdown and local file storage

  • Knowledge workers building a personal wiki or second brain

  • Teams looking for a self-hosted alternative to commercial apps

  • Anyone who values simplicity, speed, and ownership



โœจ Why NoteDiscovery?

vs. Commercial Apps (Notion, Evernote, Obsidian Sync)

Feature

NoteDiscovery

Commercial Apps

Cost

100% Free

$xxx/month/year

Privacy

Your server, your data

Their servers, their terms

Speed

Lightning fast

Depends on internet

Offline

Always works

Limited or requires sync

Customization

Full control

Limited options

No Lock-in

Plain markdown files

Proprietary formats

Key Benefits

  • ๐Ÿ”’ Total Privacy - Your notes never leave your server

  • ๐Ÿ“ด No CDN Required - The app and its shared links serve every browser library locally, so they work on air-gapped networks โ€” see documentation/THIRD_PARTY.md

  • ๐Ÿ” Optional Authentication - Simple password protection for self-hosted deployments

  • ๐Ÿ’ฐ Zero Cost - No subscriptions, no hidden fees

  • ๐Ÿš€ Fast & Lightweight - Instant search and navigation

  • ๐ŸŽจ Beautiful Themes - Multiple themes, easy to customize

  • ๐Ÿ”Œ Extensible - Plugin system for custom features

  • ๐Ÿ“ฑ Responsive - Works on desktop, tablet, and mobile

  • ๐Ÿ“‚ Simple Storage - Plain markdown files in folders

  • ๐Ÿงฎ Math Support - LaTeX/MathJax for beautiful equations

  • ๐Ÿ“„ HTML Export & Print - Export notes as standalone HTML or print

  • ๐Ÿ•ธ๏ธ Graph View - Interactive visualization of connected notes

  • โœ๏ธ Drawing editor - In-app sketches as drawing-*.png next to your notes โ€” see documentation/DRAWING.md

  • โญ Favorites - Star your most-used notes for instant access

  • ๐Ÿ“‘ Outline Panel - Navigate headings with click-to-jump TOC

  • ๐Ÿค– AI Assistant Ready - MCP integration for Claude, Cursor & more

๐Ÿค– AI-Powered Note Management

NoteDiscovery includes a built-in Model Context Protocol (MCP) server, letting AI assistants directly interact with your notes:

What AI Can Do

Example

๐Ÿ” Search & Discover

"Find all my notes about Docker deployment"

๐Ÿ“ Create & Edit

"Create a meeting notes template for tomorrow"

๐Ÿ“ Organize

"Move all project notes to the archive folder"

๐Ÿท๏ธ Tag & Categorize

"List all notes tagged with #urgent"

๐Ÿ“Š Explore Connections

"Show me the knowledge graph of my notes"

โœ๏ธ Append Ideas

"Add this thought to my daily journal"

One-line setup for Cursor, Claude Desktop, and other MCP-compatible tools:

{
  "mcpServers": {
    "notediscovery": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "-e", "NOTEDISCOVERY_URL=http://host.docker.internal:8000", "ghcr.io/gamosoft/notediscovery:latest", "python", "-m", "mcp_server"]
    }
  }
}

๐ŸŒ Prefer a URL? Set MCP_ENABLED=true and point your client at http://your-server:8000/mcp (Streamable HTTP).

๐Ÿ’ก See MCP.md for complete setup instructions and all available tools.

๐Ÿงช Want a fully local setup with a bundled LLM? OLLAMA-STACK.md spins up NoteDiscovery + Ollama + Open WebUI with one command.

๐Ÿ“บ Watch the tour

๐Ÿš€ Quick Start

Quick Setup

Linux/macOS:

mkdir -p notediscovery/data && cd notediscovery
docker run -d --name notediscovery -p 8000:8000 \
  -v $(pwd)/data:/app/data \
  ghcr.io/gamosoft/notediscovery:latest

Windows (PowerShell):

mkdir notediscovery\data; cd notediscovery
docker run -d --name notediscovery -p 8000:8000 `
  -v ${PWD}/data:/app/data `
  ghcr.io/gamosoft/notediscovery:latest

Open http://localhost:8000 โ€” done! ๐ŸŽ‰

๐Ÿ’ก Your notes are saved in ./data/. Themes, plugins, locales and default configuration values are included in the image.

Using Docker Compose

Two docker-compose files are provided:

File

Use Case

docker-compose.ghcr.yml

Recommended - Uses pre-built image from GitHub Container Registry

docker-compose.yml

For development - Builds from local source

docker-compose.ollama-stack.yml

Bundled local AI stack (NoteDiscovery + Ollama + Open WebUI) โ€” see OLLAMA-STACK.md

Option 1: Pre-built image (fastest)

Linux/macOS:

mkdir -p notediscovery/data && cd notediscovery
curl -O https://raw.githubusercontent.com/gamosoft/notediscovery/main/docker-compose.ghcr.yml
docker-compose -f docker-compose.ghcr.yml up -d

Windows (PowerShell):

mkdir notediscovery\data; cd notediscovery
Invoke-WebRequest -Uri https://raw.githubusercontent.com/gamosoft/notediscovery/main/docker-compose.ghcr.yml -OutFile docker-compose.ghcr.yml
docker-compose -f docker-compose.ghcr.yml up -d

Option 2: Build from source (for development)

git clone https://github.com/gamosoft/notediscovery.git
cd notediscovery
docker-compose up -d

See Advanced Docker Setup for volume details.

Running Locally (Without Docker)

For development or if you prefer running directly:

# Clone the repository
git clone https://github.com/gamosoft/notediscovery.git
cd notediscovery

# Install dependencies
pip install -r requirements.txt

# Run the application
python run.py

# Access at http://localhost:8000

Requirements:

  • Python 3.8 or higher

  • pip (Python package manager)

Modern Linux distributions enforce PEP 668, which prevents system-wide pip installs. Use a virtual environment instead:

# Clone the repository
git clone https://github.com/gamosoft/notediscovery.git
cd notediscovery

# Create a virtual environment
python -m venv venv

# Activate it (choose your shell):
source venv/bin/activate        # Bash/Zsh (most Linux distros)
source venv/bin/activate.fish   # Fish (CachyOS, etc.)
source venv/bin/activate.csh    # Csh/Tcsh
.\venv\Scripts\activate         # Windows PowerShell

# Install dependencies and run
pip install -r requirements.txt
python run.py

โš ๏ธ Warning

You'll need to activate the virtual environment (source venv/bin/activate) each time you open a new terminal before running the app

Advanced Docker Setup

The image includes bundled config, themes, plugins, and locales. To customize, you must:

  1. Map the volume in your docker-compose or docker run command

  2. Provide content - the file/folder must exist with valid content (empty = app might break!)

Volume

Purpose

Bundled?

data/

Your notes

โŒ You must create

config.yaml

App settings

โœ… Yes

themes/

Custom themes

โœ… Yes

plugins/

Custom plugins

โœ… Yes

locales/

Translations

โœ… Yes

Dashboard Integration

An official icon for NoteDiscovery is now available on Dashboard Icons!
Use it in your self-hosted dashboards like Homepage, Homarr, Dashy, Heimdall, etc...

๐Ÿ“š Documentation

Want to learn more?

  • ๐ŸŽจ THEMES.md - Theme customization and creating custom themes

  • โœจ FEATURES.md - Complete feature list and keyboard shortcuts

  • โœ๏ธ DRAWING.md - Built-in drawing editor (drawing-*.png), save behavior, and API notes

  • ๐Ÿท๏ธ TAGS.md - Organize notes with tags and combined filtering

  • ๐Ÿ“‹ TEMPLATES.md - Create notes from reusable templates with dynamic placeholders

  • ๐Ÿงฎ MATHJAX.md - LaTeX/Math notation examples and syntax reference

  • ๐Ÿ“Š MERMAID.md - Diagram creation with Mermaid (flowcharts, sequence diagrams, and more)

  • ๐Ÿ”Œ PLUGINS.md - Plugin system and available plugins

  • ๐Ÿงฉ plugins/contrib/ - Optional community plugins and how to install them

  • ๐ŸŒ API.md - REST API documentation and examples

  • ๐Ÿค– MCP.md - AI assistant integration (Claude, Cursor, and more)

  • ๐Ÿ” AUTHENTICATION.md - Enable password protection for your instance

  • ๐Ÿ”ง ENVIRONMENT_VARIABLES.md - Configure settings via environment variables

  • ๐Ÿ“ฆ THIRD_PARTY.md - Locally hosted browser libraries, licences, and how to update them

๐ŸŒ Multiple Languages

NoteDiscovery supports multiple interface languages via JSON locale files in locales/. Open Settings (gear icon) โ†’ Language to choose one; the list reflects whatever locales are installed (bundled files, mounts, or your own additions).

To add your own language: See the Contributing Guidelines for instructions on creating translation files.

Docker users: Mount your custom locales folder to add or override translations:

volumes:
  - ./locales:/app/locales  # Custom translations

๐Ÿ’ก Pro Tip: If you clone this repository, you can mount the documentation/ folder to view these docs inside the app:

# In your docker-compose.yml
volumes:
  - ./data:/app/data              # Your personal notes
  - ./documentation:/app/data/docs:ro  # Mount docs subfolder inside the data folder (read-only)

Then access them at http://localhost:8000 - the docs will appear as a docs/ folder in the file browser!

๐Ÿค Contributing

Before submitting a pull request, especially for major changes, please:

  • Read our Contributing Guidelines

  • Open an issue first to discuss major features or significant changes

  • Ensure your code follows the project's style and philosophy

๐Ÿ”’ Security Considerations

NoteDiscovery is designed for self-hosted, private use. Please keep these security considerations in mind:

Network Security

  • โš ๏ธ Do NOT expose directly to the internet without additional security measures

  • Run behind a reverse proxy (nginx, Caddy) with HTTPS for production use

  • Keep it on your local network or use a VPN for remote access

  • By default, the app listens on 0.0.0.0:8000 (all network interfaces)

Authentication

  • Password protection is DISABLED by default (default password: admin)

  • โš ๏ธ ENABLE AUTHENTICATION AND CHANGE THE DEFAULT PASSWORD if exposing to a network!

  • See AUTHENTICATION.md for complete setup instructions

  • To disable auth, set authentication.enabled: false in config.yaml

  • Perfect for single-user or small team deployments

  • For multi-user setups, consider a reverse proxy with OAuth/SSO

Data Privacy

  • Your notes are stored as plain text markdown files in the data/ folder

  • No data is sent to external services

  • Regular backups are recommended

Best Practices

  • Run on localhost or a private network only

  • Use Docker for isolation and easier security management

  • Keep your system and dependencies updated

  • Review and audit any plugins you install

  • Set appropriate file permissions on the data/ directory

TL;DR: Perfect for personal use on your local machine or home network. Enable built-in password protection if needed, or use a reverse proxy with authentication if exposing to wider networks.

๐Ÿ“„ License

MIT License - Free to use, modify, and distribute.


Made with โค๏ธ for the self-hosting community

Available Tools

22 tools
append_to_noteA

Append content to an existing note without overwriting. Perfect for journals, logs, meeting notes, or collecting ideas incrementally.

Inputs: path (required), content (required), add_timestamp.

create_folderB

Create a new folder for organizing notes.

Inputs: path (required).

create_noteA

Create a new note or update an existing one. The note will be saved as a markdown file. Use this to save new information or update existing notes.

Inputs: path (required), content (required).

create_note_from_templateA

Create a new note from a template. Built-in placeholders like {{title}}, {{date}}, {{datetime}}, {{folder}}, {{date:FMT}} are substituted automatically (FMT is a Python strftime string). Use update_note afterwards if you need to inject custom content.

Inputs: note_path (required), template_name (required).

delete_folderA

Delete an empty folder. Fails if the folder still has anything in it, or if it is the vault root.

Inputs: path (required).

delete_noteA

Delete a note permanently. Use with caution - this cannot be undone.

Inputs: path (required).

edit_noteA

Edit part of an existing note by replacing one exact piece of text, without resending the whole note. old_str must match the note content (as returned by get_note) exactly once, including whitespace and line breaks; otherwise nothing is written. To edit a section, include its heading in old_str. Prefer this over create_note for changes to existing notes.

Inputs: path (required), new_str (required), old_str (required).

get_configA

Get NoteDiscovery server configuration: app name, version, whether search is enabled, authentication mode, autosave delay. Useful for confirming what server you're connected to and what features are available before calling other tools.

Inputs: no named parameters.

get_graphA

Get the knowledge graph showing relationships between notes. Returns nodes (notes) and edges (links between them). Use this to understand how notes connect to each other.

Inputs: no named parameters.

get_noteA

Read the full content of a specific note by its path. Returns the complete markdown content along with metadata. Use this after finding a note via search or list to read its contents.

Inputs: path (required).

get_notes_by_tagA

Get all notes that have a specific tag, or several tags. Use this to find related notes on a topic.

Inputs: tag, tags, limit, match, +1 more.

get_recent_notesA

Get recently modified notes. Useful for finding what you were working on recently.

Inputs: days, limit.

get_templateA

Get the content of a specific template. Use this to see what a template contains before using it.

Inputs: name (required).

health_checkA

Check if NoteDiscovery server is running and healthy. Use this to verify connectivity.

Inputs: no named parameters.

list_foldersA

List folders in the knowledge base, including empty ones, with the number of notes and subfolders directly inside each one.

Inputs: parent, recursive.

list_notesA

List notes in the knowledge base with their metadata (title, path, last modified date, size). Use this to get an overview of available notes or find notes by browsing. Use folder to list only part of the vault.

Inputs: limit, folder, offset, recursive.

list_tagsA

List all tags used across notes with the count of notes for each tag. Use this to understand how notes are organized and find topics.

Inputs: no named parameters.

list_templatesB

List available note templates. Templates provide pre-formatted structures for common note types.

Inputs: no named parameters.

move_folderA

Move or rename a folder with all its notes and subfolders. Fails if a folder already exists at the new path. Other notes do not change: the result lists the notes whose links into it no longer work.

Inputs: new_path (required), old_path (required).

move_noteB

Move or rename a note to a different path. Use this to reorganize notes or rename them. Other notes do not change: the result lists the notes whose links to it no longer work.

Inputs: new_path (required), old_path (required).

search_notesA

Search through all notes using full-text search. Returns matching notes with snippets showing where the match was found. Use this to find notes by content, keywords, or phrases.

Inputs: query (required), limit, folder, offset, +1 more.

Tool Schema Changelog

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

Loading tool schema changelogโ€ฆ

    TDQS

    A3.7/5.0

    Scored across 22 tools

    Disambiguation4/5

    Most tools target a distinct resource+action (get_note vs list_notes vs search_notes vs get_recent_notes are clearly separable), and descriptions actively disambiguate the write paths. The main overlap is that create_note also updates existing notes, putting it in tension with edit_note and append_to_note, and the docs reference a non-existent update_note tool, which muddies selection slightly.

    Naming Consistency4/5

    Nearly everything follows a clean verb_noun snake_case pattern (get_note, list_tags, create_folder, move_note, delete_folder, search_notes). The only deviations are health_check (noun-based) and the inconsistent verb choices for note writing (create/edit/append), which are minor and still readable.

    Tool Count3/5

    At 22 tools this sits at the heavy end of the scale for a note vault server, spanning notes, folders, tags, graph, templates, and admin. Each tool is plausibly useful, but the surface could be trimmed (e.g. folding recent/config/health into generic listings) without losing capability.

    Completeness4/5

    Note lifecycle is well covered (read, create, edit, append, move, delete) along with folders, tags, graph/backlinks, search, and templates. Gaps remain: no tag add/remove or rename operations, no template create/update/delete, and no outgoing-link inspection beyond the full graph, plus a dangling reference to an update_note tool.

    Maintenance

    ActivityActive
    ResponsivenessUsually handled

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      B
      maintenance
      A local-first CLI and MCP server that helps you build and search a personal knowledge vault from Markdown notes, with semantic search and AI-powered features like stale note detection and session memory harvesting. Itโ€™s provider-agnostic, requires no GPU in its default mode, and exposes your vault as long-term memory to any MCP-compatible AI tool like Claude Code.
      47
      Apache 2.0
    • A
      license
      Not graded
      quality
      B
      maintenance
      Local-first markdown vault with a built-in MCP server (streamable HTTP). 16 tools and 2 resources for Claude Code / Desktop / Cursor: read/write/search plus context_for_query, find_orphans, weekly_digest, compare_notes, semantic_outline. Per-folder agent permissions, LanceDB vectors, local Xenova ONNX embedder swappable to Ollama. Single Bun binary. AGPL.
      36
      AGPL 3.0
    • A
      license
      Not graded
      quality
      B
      maintenance
      A free, open-source Markdown editor with a bundled MCP server (stdio, read-only): point Claude, Cursor, or any MCP client at your notes vault for local semantic search, read, and list. ~15MB, 5 platforms, MIT, local-first.
      1,603
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server for AI agents to read, write, and organize notes in a local-first, human-in-the-loop note-taking app.
      3 npm
      2
      MIT