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.
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.
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.
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.
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.
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(
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.
Generate a token
Click the MCP status indicator inside Project M to reveal your local bearer token.
Select your assistant and copy
Pick your AI tool in the panel, then copy the pre-filled config block.
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"
}
}
}
}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.
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.