Skip to main content
Glama
felipebarcelospro

Monet MCP Server

README.md
# Monet

**One brain for you and your agents.**

A quiet, local-first Markdown vault: a rich desktop app for you, and a CLI
and MCP server for your agents. Your notes stay as plain `.md` files in a
folder you own.

[![CI](https://github.com/felipebarcelospro/monet/actions/workflows/ci.yml/badge.svg)](https://github.com/felipebarcelospro/monet/actions/workflows/ci.yml)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[![Node](https://img.shields.io/badge/node-%E2%89%A522-3c873a)](https://nodejs.org)
[![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)

Monet stores notes as plain `.md` files in a folder you own. Links are
`[[wikilinks]]`, backlinks are indexed automatically, attachments resolve
relative to the vault, and the same folder serves the desktop app, the
command line and AI agents — with no proprietary database in between. One
vault, one engine, two ways in:

| For you | For your agents |
|---|---|
| A quiet desktop app: rich Markdown editor, interactive graph, backlinks, search, command palette. | A CLI and an MCP server driving the same engine: search, read, create and link notes on your behalf. |

### Why Monet

| You may know… | What it gives you | What Monet does instead |
|---|---|---|
| A notes app with an agent pack bolted on | An app for people; agents get prompts. | Agents drive the same engine, with schemas and MCP tools — one brain, not two tools sharing a folder. |
| A cloud AI notebook | Your brain lives on someone else's servers. | Monet is local-first: the folder is yours, offline included. |
| Prompt and skill packs | Instructions without an engine. | Monet ships the engine: indexing, search, backlinks and safe writes underneath. |

## Install the CLI

**macOS and Linux:**

```sh
curl -fsSL https://github.com/felipebarcelospro/monet/releases/latest/download/install.sh | sh
```

**Windows (PowerShell):**

```powershell
irm https://github.com/felipebarcelospro/monet/releases/latest/download/install.ps1 | iex
```

The installer picks the right build for your system, verifies the SHA-256
checksum and installs to `~/.local/bin` — no Node.js needed. Set
`MONET_INSTALL_DIR` to install somewhere else.

**Homebrew:**

```sh
brew install felipebarcelospro/tap/monet
```

**npm** (any platform, needs Node ≥ 22):

```sh
npm install -g @monet-ai/cli
```

Then point it at your notes:

```sh
monet vault use ~/Documents/Vault
monet vault current
monet note list
```

![The Monet editor](docs/screenshots/editor.png)

---

## Contents

- [Why Monet](#why-monet)
- [Features](#features)
- [Screenshots](#screenshots)
- [Requirements](#requirements)
- [Install](#install-the-cli)
- [Build from source](#build-from-source)
- [Monorepo structure](#monorepo-structure)
- [For you: the desktop app](#for-you-the-desktop-app)
- [For your agents: CLI and MCP](#for-your-agents-cli-and-mcp)
- [The vault format](#the-vault-format)
- [Markdown support](#markdown-support)
- [Architecture](#architecture)
- [Testing](#testing)
- [Contributing](#contributing)
- [Security](#security)
- [License](#license)

---

## Features

| | |
|---|---|
| **Local-first vault** | Plain Markdown files in any folder. YAML frontmatter, `[[wikilinks]]`, `![[embeds]]`, `#tags` and aliases. Link resolution follows Obsidian rules: case-insensitive, optional `.md`, aliases, and closest-folder tie breaking. |
| **Rich Markdown** | Tables, task lists, footnotes, images, video, audio, file attachments, Mermaid diagrams, KaTeX math, syntax-highlighted code, callouts and raw HTML. `⌘E` toggles a full reading view. |
| **Live editor** | CodeMirror 6 with tables, media, diagrams, display math and note embeds rendered in place; clicking a block returns to its Markdown. Task boxes are clickable. |
| **Interactive graph** | Deterministic force-directed graph with tag filtering, degree-based node sizing, hover inspection, pan and zoom. |
| **Command line interface** | Notes, search, backlinks, links, tags, the graph and vault switching. Local snapshots with `monet backup`. Human-readable output or `--format json` for scripts. |
| **MCP server for agents** | Exposes the vault to Claude Code, Cursor, Windsurf, Codex and any MCP client. Agents can search, read, create and link notes. |
| **Three languages** | English, Brazilian Portuguese and Spanish across the app and the CLI. |
| **Cross-platform** | Electron on macOS, Linux and Windows, with a native-feeling frameless window. |

---

## Screenshots

| Editor | Reading view |
|---|---|
| ![Editor with live callouts](docs/screenshots/editor.png) | ![Reading view](docs/screenshots/reading.png) |

| Graph | Command palette |
|---|---|
| ![Graph view](docs/screenshots/graph.png) | ![Command palette](docs/screenshots/command-palette.png) |

| Settings | Welcome |
|---|---|
| ![Settings](docs/screenshots/settings.png) | ![Welcome screen](docs/screenshots/welcome.png) |

---

## Requirements

- **Node.js** 22 or later
- **pnpm** 11 or later
- **macOS**, **Linux** or **Windows**
- **Bun** (optional) — only to build the standalone CLI binaries

The app is developed and tested on macOS first; the other platforms use the
same Electron, Vite and Node code paths.

---

## Build from source

```sh
# 1. Install the workspace.
pnpm install

# 2. Create a deterministic demo vault in ExampleVault/.
pnpm seed

# 3. Run the desktop app with hot reload.
pnpm dev -- --vault ExampleVault
```

The app opens on the note you last edited. To use your own folder, press
`⌘O` (or `Ctrl+O`) and choose it, or run `monet vault use <path>` from the CLI.

### Build a desktop bundle

```sh
pnpm package
# macOS:  build/Monet.app
# Linux:  build/app
# Windows: build/app
```

The bundle is unsigned. On macOS, Gatekeeper asks for confirmation the first
time you open it.

### Run from source

```sh
pnpm --filter @monet/cli build
cd packages/cli && pnpm link --global

monet vault current
monet note list
```

---

## Monorepo structure

| Package | What it is |
|---|---|
| **`@monet/core`** (`packages/core`) | Pure TypeScript engine: vault scanning, frontmatter, wikilinks, index, backlinks, search, graph, safe writes. Node and browser entry points. |
| **`@monet/cli`** (`packages/cli`) | The `monet` CLI and MCP server — your agents' way into the vault. Built with [Incur](https://github.com/wevm/incur) so commands, schemas, completions, MCP tools and agent skills all come from one declaration. |
| **`@monet/app`** (`packages/app`) | Desktop application: Electron main process, preload bridge and React 19 renderer with CodeMirror 6. |

### Common scripts

```sh
pnpm dev            # Desktop app with hot reload
pnpm dev:cli        # CLI from source
pnpm build          # Build core, CLI and app
pnpm package        # Package the desktop app
pnpm test           # Vitest across all packages
pnpm typecheck      # TypeScript across all packages
pnpm lint           # Biome lint
pnpm format:check   # Biome formatting check
pnpm seed           # Seed ExampleVault/
pnpm screenshots    # Refresh docs/screenshots/
```

---

## The vault format

A vault is an ordinary folder. Monet never rewrites a file it did not have to
touch, and everything it writes is plain Markdown.

```markdown
---
title: Release Plan
tags: [project, release]
aliases: [Plan]
---

# Release Plan

The release ships on Friday. See [[Design Notes]] and ![[Checklist]].

Tagged #project and #area/product.
```

- **Wikilinks** — `[[Note]]`, `[[Note|display text]]`, `[[Note#Heading]]`, `[[#Heading]]`.
- **Embeds** — `![[Note]]`, `![[image.png]]`, `![[report.pdf]]`.
- **Tags** — `#tag`, `#nested/tag`, or a `tags` list in the frontmatter.
- **Aliases** — `alias` or `aliases` in the frontmatter.

Notes are indexed on open and on change; the index is derived state, never a
second source of truth.

---

## Markdown support

| Syntax | Renders as |
|---|---|
| A pipe table (GFM) | A bordered table with aligned columns and horizontal scroll. |
| `- [ ]` / `- [x]` | A task list; boxes are clickable in the editor. |
| `**bold**`, `*italic*`, `~~struck~~`, `` `code` `` | Inline formatting. |
| `[[Note]]`, `[[Note\|label]]` | An internal link that opens the note. |
| `![[Note]]` | The note itself, embedded one level deep. |
| `![[image.png]]`, `![](image.png)` | The image, resolved relative to the note or anywhere in the vault. |
| `![](clip.mp4)` | A video player; mp3, wav, m4a and flac play inline too. |
| `![[report.pdf]]` | A file card that opens the attachment in its own app. |
| A `mermaid` fence | Flowchart, sequence, class, state, ER or gantt diagram. |
| `$…$`, `$$…$$` | KaTeX math, inline and display. |
| A `ts` fence | Syntax-highlighted code with a language label. |
| `[^1]` | GFM footnotes with a backlink. |
| `> [!note]` | A callout: note, tip, warning, caution, important, quote and friends. |
| `<details>`, `<kbd>`, raw HTML | Passed through, for what Markdown cannot express. |

Tables, media, diagrams, display math, callouts and embeds are rendered in
place while the cursor is elsewhere; clicking the block puts the cursor back
in the Markdown. `⌘E` opens the reading view, where the whole note is rendered
at once.

Raw HTML is rendered as written. A vault is trusted input: only open notes and
vaults you trust. See [SECURITY.md](SECURITY.md).

---

## For you: the desktop app

A quiet place to think. Three columns, a rich editor, and the whole vault as
a graph — no cloud, no account, just a folder.

### Download

Prebuilt installers are attached to each
[release](https://github.com/felipebarcelospro/monet/releases/latest):

| Platform | File |
|---|---|
| macOS (Apple silicon) | `Monet-<version>-arm64-mac.dmg` |
| macOS (Intel) | `Monet-<version>-x64-mac.dmg` |
| Windows | `Monet-<version>-x64-win.exe` |
| Linux | `Monet-<version>-<arch>-linux.AppImage` |

The desktop app is also on Homebrew:

```sh
brew install --cask felipebarcelospro/tap/monet
```

The builds are **not signed**. On macOS, right-click the app and choose
**Open** the first time (or use *System Settings → Privacy & Security → Open
Anyway*). On Windows, SmartScreen offers *More info → Run anyway*. Nothing is
hidden about it — the installers are produced from this repository by the
Desktop Release workflow, and building from source is always an option.

### Features

- **Three columns** — sidebar (folders, tags, favourites), note list, editor,
  with an inspector for properties, backlinks, outgoing links and the outline.
- **Editor** — CodeMirror 6, wikilink autocomplete, live blocks, dirty-state
  aware saving, per-note history, favourites and reading time.
- **Reading view** — `⌘E`, or the book button, renders the note with editorial
  typography, tables, media, diagrams, math and embeds.
- **Graph** — the whole vault as a deterministic force-directed canvas. Filter
  by tag, click a node to open the note.
- **Command palette** — `⌘K`, plus `⌘P` for the quick switcher.
- **Inspector** — metadata, aliases, tags, word count, reading time, backlinks,
  outgoing links and the document outline.
- **Preferences** — theme, locale, sort order, editor width and body font.
- **Welcome** — create a vault or open an existing folder; recent vaults are
  remembered.

Keyboard shortcuts follow macOS conventions with `Ctrl` on Linux and Windows.

---

## For your agents: CLI and MCP

The CLI and the MCP server are how agents reach the same brain. Both are
clients of the engine the app uses — an agent sees exactly what you see,
because it is the same folder, the same index, the same rules.

### The command line

```sh
# Notes
monet note new "Release Plan" --folder Projects --tag project
monet note list --tag project
monet note show "Release Plan" --links
monet note edit "Release Plan" --append "Ship on Friday."
monet note move "Release Plan" --to "Archive/Release Plan"
monet note delete "Release Plan" --yes

# Search, links and the graph
monet search "release" --limit 20
monet backlinks "Design Notes"
monet link create "Checklist" --target "Design Notes"
monet graph --format json
monet tags

# Vaults and safety
monet vault use ~/Documents/Vault
monet vault current
monet vault list
monet backup                       # snapshot outside the vault
monet open
```

Every command accepts `--format toon|json|yaml|md|jsonl`. The default is TOON,
compact for agents; use `--format json` for programs.

### Search

Search is local and dependency-free. It folds accents (`reuniao` finds
`Reunião`), matches every word of a multi-word query in any order, falls back
to a fuzzy title match, and returns an excerpt around the first body hit.
Exact and prefix titles rank above aliases, tags and body text.

Embeddings are not part of this release: there is no model download, no vector
database and no network call. Semantic and related-note search are on the
roadmap, behind the same `search` surface.

### Backups

A vault is a plain folder, and `monet backup` writes a local snapshot without
touching the original:

```sh
monet backup                       # ~/.local/share/monet/backups
monet backup --keep 30             # keep the last 30 snapshots
monet backup --output ~/Backups    # choose the destination
```

Git, Time Machine or any folder synchroniser work too; the vault has no
proprietary database. `.git`, `node_modules`, `dist`, `build` and the app lock
are skipped in a snapshot.

### Choosing the vault

Monet is designed around one vault. Point the CLI at it once:

```sh
monet vault use ~/Documents/Vault
```

That writes the shared configuration (`~/.config/monet/config.json`) — the same
file the app reads — and remembers the folder. From then on every command
works without `--vault`:

```sh
monet note list
monet search "release"
monet graph --format json
```

`monet vault current` shows the path in use, where it came from and how many
notes it holds. `monet vault list` shows the current vault and the ones opened
recently, including folders that no longer exist.

The resolution order is: `--vault`, `MONET_VAULT`, the configured vault, then
the current directory. An MCP server can be pinned with `MONET_VAULT`, while an
interactive terminal can switch with `monet vault use`. The app follows the
same configuration, so `monet open` and the next launch of the window use the
same folder.

---

### The MCP server

Monet speaks the Model Context Protocol over stdio:

```sh
monet --mcp          # Start the MCP server
monet mcp add        # Register it with the MCP clients it finds
monet skills add     # Install generated skills for supported agents
monet mcp doctor     # Validate startup and tool listing
```

Tools exposed to agents include `search`, `note_show`, `note_new`, `note_list`,
`backlinks`, `graph`, `link_create`, `vault_list`, `vault_current` and
`vault_use`. The server uses the configured vault, so an agent sees the same
folder as the app.

To pin a server to a vault without changing the global configuration:

```sh
MONET_VAULT=~/Documents/Vault monet --mcp
```

There is no hand-written skill to keep in sync. `monet skills add` generates
what agents need from the same command declarations that power the CLI, so
the guidance always matches the tool. The one habit it teaches: run
`monet vault current` before reading or writing, and never guess a path.

---

## Architecture

Monet is three packages around one engine. The app and the CLI are both
clients of `@monet/core`; the renderer never touches the disk directly.

```
Electron main ── IPC ── preload ── React renderer
      │                               │
      └──────── @monet/core ──────────┘
                     │
               Markdown files
```

Read [ARCHITECTURE.md](ARCHITECTURE.md) for the IPC contract, the `monet://`
asset protocol, the Markdown pipeline, the index and the save model.

---

## Testing

```sh
pnpm test
```

Vitest runs across `@monet/core`, `@monet/cli` and `@monet/app`. The parser
contract is verified against the fixtures in `Fixtures/`, and the app tests
cover the vault service, target resolution and link handling.

```sh
pnpm typecheck
pnpm lint
pnpm format:check
```

CI runs all of them on every push and pull request.

---

## Contributing

Contributions are welcome — code, docs, translations, bug reports and
screenshots. Read [CONTRIBUTING.md](CONTRIBUTING.md) for setup, workflow and
the review checklist, and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) for the
community rules.

Good first issues are labelled `good first issue`. If you are unsure where a
change belongs, open a discussion or an issue before writing code.

---

## Security

Please do not open a public issue for a vulnerability. Use GitHub's private
vulnerability reporting (Security → Advisories) and read
[SECURITY.md](SECURITY.md) for the scope and the trust model.

---

## License

MIT © Monet contributors. See [LICENSE](LICENSE).

Maintenance

ActivityMaintained
ResponsivenessNo issues