Local MCP server to read and edit macOS Bear notes from Claude
Project description
bearnotes-mcp
A tiny local MCP server that lets any local MCP client on macOS — Claude Code, Claude Desktop, Cursor, VS Code — read and edit your Bear notes: search, read, create, append, and overwrite (e.g. tick a checkbox).
No Bear API token is needed. Reads use Bear's local database (opened
read-only); writes use Bear's bear://x-callback-url scheme. Neither requires a
token, and nothing here ever touches the network.
Requirements
- macOS with Bear installed and opened at least once (the database only exists after Bear has run).
- uv — install with
curl -LsSf https://astral.sh/uv/install.sh | sh(orbrew install uv).
No Python setup, no token.
Install — Claude Code
1. Warm the cache (first run downloads ~30 packages — may take a minute; ends with selfcheck ok):
uvx bearnotes-mcp --selfcheck
2. Register — one command, at user scope so it's available in every project:
claude mcp add bear -s user -- uvx bearnotes-mcp
3. Verify:
claude mcp list # → bear: ✔ Connected
If the very first connect times out, just retry (the cache is warm after one attempt), or start Claude once with
MCP_TIMEOUT=60000 claude.
Install — Claude Desktop, Cursor, VS Code
Add an mcpServers entry. Use the full path to uvx — GUI apps don't see
your shell PATH (which uvx, e.g. /opt/homebrew/bin/uvx):
{
"mcpServers": {
"bear": {
"command": "/opt/homebrew/bin/uvx",
"args": ["bearnotes-mcp"]
}
}
}
- Claude Desktop — Settings → Developer → Edit Config (creates
~/Library/Application Support/Claude/claude_desktop_config.json); paste, then fully quit and restart. Logs:~/Library/Logs/Claude/mcp-server-bear.log. - Cursor — same block in
~/.cursor/mcp.json. - VS Code (Copilot) —
.vscode/mcp.json, but the top-level key isservers(notmcpServers). - Windsurf / Cline / Zed / LM Studio — same stdio pattern; check their docs for the exact file.
Cannot work: claude.ai in the browser, mobile apps, remote/hosted connectors, and non-Mac machines — they can't spawn a local process, and Bear lives only on your Mac.
Alternatives: bleeding edge, or run from a clone
Latest main without waiting for a release (builds from GitHub each install):
claude mcp add bear -s user -- uvx --from git+https://github.com/samcrudge/bearnotes-mcp bearnotes-mcp
Clone it to read/hack the code first:
git clone https://github.com/samcrudge/bearnotes-mcp
claude mcp add bear -s user -- uv --directory /absolute/path/to/bearnotes-mcp run bearnotes-mcp
To point at a non-default Bear database, add -e BEAR_DB=/path/to/database.sqlite
to the claude mcp add command.
How it works
- Reads — Bear's local SQLite DB, opened read-only (
mode=ro). - Writes — Bear's
x-callback-urlscheme (create,add-textinappend/replace_allmode).
The DB is never written directly (that corrupts Bear's sync). Before any
full-body overwrite, the note's current text is snapshotted to
~/.bear-mcp-backups/ as a timestamped .md file.
Tools
| Tool | What it does |
|---|---|
search_notes(query="", limit=20) |
Search non-trashed notes; empty query = most recent |
read_note(id) |
Return {id, title, text} |
create_note(title, text="", tags=[]) |
Create a new note |
append_note(id, text) |
Append to a note |
replace_note(id, text) |
Overwrite a note's entire text; backs up first |
What this can access
Once connected, the client can read every non-trashed note (encrypted notes
are refused) and create, append to, or overwrite notes. Everything runs
locally with no network calls; the database is opened strictly read-only;
and before any full-body overwrite the current text is backed up to
~/.bear-mcp-backups/.
Troubleshooting
- First connect times out — retry (cache is warm now), or
MCP_TIMEOUT=60000 claude. - Desktop fails instantly —
"command"must be the full path touvx(which uvx). - No notes found — open Bear at least once so its database exists.
License
Apache-2.0. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bearnotes_mcp-0.1.0.tar.gz.
File metadata
- Download URL: bearnotes_mcp-0.1.0.tar.gz
- Upload date:
- Size: 10.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.30 {"installer":{"name":"uv","version":"0.11.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb3fa37cf99d3feee3275281bc69bc1aa0eb60e8ca93d5b9c0f8a0c21fc1f61f
|
|
| MD5 |
6404a9414d3c0f37ae7d6079955a4bc9
|
|
| BLAKE2b-256 |
2d7c3aac579f5961e4f6eeac13cdda9370d0f18eeaca2731b27d6d2b66912400
|
File details
Details for the file bearnotes_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: bearnotes_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.30 {"installer":{"name":"uv","version":"0.11.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4fa0be20ae3017b5e2cf37044571222936de2c21119cd539b44badeecaf601bb
|
|
| MD5 |
a9b60f0fd78a5bacf3acb3339d787593
|
|
| BLAKE2b-256 |
25735777295cb5821543692b3b7b98b56754318f99e74e818a08a25beefaeff1
|