M
Project M
Download Alpha
Alpha v0.1.5 — open download

Your notes, readable by your AI agents.

Project M stores everything locally in SQLite and starts a Model Context Protocol server on localhost — giving Claude Desktop, Cursor, and Windsurf authenticated query access to your vault.

Also available for Windows. Free and open source (MIT).

The agent connection

Toggle tasks or trigger queries below — watch the MCP server respond in real time.

localhost:7465
Search notes...⌘K
Library
Getting Started with Project M
MCP Setup Reference
Tauri SQLite Migrations
MCP: 127.0.0.1:7465

This is a quiet writing surface. Prose is the hero; controls stay out of the way.

The MCP server running on localhost lets your AI coding assistant read and write this note directly.

Tasks in note
Configure Cursor to use localhost MCP
Draft the project-m release announcement
Initialize local SQLite database
Image attachment alt-text
mcp-server-architecture.png
Alt: "Schema showing SQLite FTS5 table synchronizing with local assets via DB triggers"
AI Agent Console
rmcp v0.16
Project M MCP Server connected successfully (127.0.0.1:7465).
Ready to assist. Ask me to query, summarize, or edit your notes.
Suggested queries

Why developers are switching

The market is full of maximalist workspaces. Project M bets on simplicity, local ownership, and direct AI integration.

Local-First & SQLite

Notes, tasks, and image metadata store in a SQLite database on your device. No sync service, no account, no cloud dependency. The database is a plain .db file you can inspect, back up, or migrate with any standard SQLite tool.

SQLite + FTS5Offline by defaultZero cloud deps

Native MCP Server

The app starts a streamable HTTP server on localhost:7465 when it runs. Claude Desktop, Cursor, and Windsurf connect via a bearer token you generate inside the app. Four tools: search notes, create notes, list tasks, fetch image alt-text.

4 MCP toolslocalhost:7465Bearer token auth

Quiet Writing Surface

A single-pane editor with no competing panels crowding the view. Tasks render inline in your notes. Images store with auto-generated alt-text, making them searchable through both FTS5 full-text search and the MCP query path.

Inline tasksImage alt-textKeyboard-first

Your AI agent's native interface to your vault.

Project M starts a streamable HTTP server on localhost:7465 whenever the app runs. It follows the Model Context Protocol spec — so Claude Desktop, Cursor, and any MCP-capable assistant can call into your vault directly, authenticated by a local bearer token.

MCP tool definition (rmcp crate)Rust
#[mcp_tool(
    name = "search_notes",
    description = "FTS5 query over titles, plaintext notes, and asset alt texts"
)]
async fn handle_search_notes(
    State(pool): State<DbPool>,
    Json(payload): Json<SearchPayload>
) -> Result<SearchResponse, AppError> {
    // 1. Sanitize & parse FTS query
    // 2. Query objects table joined with fts table
    // 3. Return excerpt snippet() and matches
    let results = tokio::task::spawn_blocking(move || {
        let conn = pool.get()?;
        repo::search_objects(&conn, payload)
    }).await??;

    Ok(results)
}

Four available tools

search_notes(query)

FTS5 full-text search over titles, bodies, and image alt-texts.

create_note(title, body)

Let agents document their research natively in your vault.

list_tasks(status_filter)

Feed agent context with project to-dos filtered by status.

get_note_assets(note_id)

Expose image alt-texts so vision models can read your attachments.

Connect in 60 seconds.

When Project M runs, it manages a local bearer token to protect your notes from unauthorized local processes. Copying the config block embeds your active token directly into the setup JSON.

1

Generate a token

Click the MCP status indicator inside Project M to reveal your local bearer token.

2

Select your assistant and copy

Pick your AI tool in the panel, then copy the pre-filled config block.

3

Paste and restart

Paste the block into your IDE or Claude Desktop settings file, then restart the assistant.

{
  "mcpServers": {
    "project-m": {
      "command": "project-m-mcp",
      "args": ["--token", "m_local_token_a8f2b3"],
      "env": {
        "PROJECT_M_TOKEN": "m_local_token_a8f2b3"
      }
    }
  }
}
Paste this block inside ~/Library/Application Support/Claude/claude_desktop_config.json

Under the hood

No cloud dependency graphs, no background indexing containers. Native Rust, local SQLite, system webview.

SQLite + FTS5
Structured Schema v1
Five tables: objects, edges, assets, block_assets, and a virtual fts table for full-text search. Triggers keep FTS in sync whenever note bodies or image alt-texts change. The alt_text column on assets makes images searchable via both FTS5 and the MCP search_notes tool.
Rust + r2d2
r2d2 Connection Pool
The MCP HTTP server runs on Tokio. SQLite writes go through r2d2 connection pools via spawn_blocking — bridging async Tokio calls to the synchronous rusqlite model with no deadlocks and no data races.
Tauri 2.0
Native Windows & macOS
Compiles to a signed 12MB native package. Uses the system webview, not Electron's bundled Chromium. App memory footprint stays under 50MB at idle. Distributed as a signed .dmg (macOS) and .msi (Windows).
Vault import
Zero Lock-In Parser
Non-destructive import resolves [[wiki-links]] to edges in the edges table and copies local images into the app's asset directory. Your original files are unchanged. Scan runs incrementally on subsequent imports.
M

Download Project M Alpha

A note app that lives on your machine and talks to your AI agents. Grab the signed installer for your OS and connect it to your assistant in under 60 seconds.

Requires macOS 13+ or Windows 10+ (64-bit). No account needed.