Skip to main content

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 (or brew 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 is servers (not mcpServers).
  • 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-url scheme (create, add-text in append / replace_all mode).

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="", tag="", limit=20) Search non-trashed notes, optional tag filter (incl. subtags); returns id, title, tags, pinned, modified
read_note(id) Full note + tags, pinned, and open/done checkbox counts
list_tags() Every tag with its live-note count
get_backlinks(id) Notes linking to this one, and notes it links to (Bear [[wiki-link]] graph)
create_note(title, text="", tags=[]) Create a new note
append_note(id, text) Append to a note
prepend_note(id, text) Prepend to a note (after the title line)
replace_note(id, text) Overwrite a note's entire text; backs up first
toggle_task(id, match, done=None) Check/uncheck one checkbox line by substring (done None=flip); errors if ambiguous
open_note(id) Open and focus a note in the Bear app

Resources (read-only, @-mentionable): bear://notes (index of recent notes) and bear://note/{id} (a note's full text).

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/. Tools carry MCP annotations (reads marked read-only, replace_note marked destructive) so clients can surface the right warnings.

Troubleshooting

  • First connect times out — retry (cache is warm now), or MCP_TIMEOUT=60000 claude.
  • Desktop fails instantly — "command" must be the full path to uvx (which uvx).
  • No notes found — open Bear at least once so its database exists.

License

Apache-2.0. See LICENSE.

Metadata

Release files for bearnotes-mcp 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bearnotes-mcp 0.3.0
File Size Uploaded Provenance Actions
bearnotes_mcp-0.3.0.tar.gz 12.4 kB Without provenance Details for bearnotes_mcp-0.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for bearnotes-mcp 0.3.0
File Interpreter ABI Platform Actions
bearnotes_mcp-0.3.0-py3-none-any.whl Python 3 none any Details for bearnotes_mcp-0.3.0-py3-none-any.whl

Total release size: 25.5 kB

Release files / bearnotes_mcp-0.3.0.tar.gz

Download URL bearnotes_mcp-0.3.0.tar.gz
Size 12.4 kB
Tags Source
SHA-256 checksum
How to use checksums
baf0e1fb18bfd1f75e6bacd476eff6fa4b3344b8f634c3576f3b2b18f1936c6a
BLAKE2b-256 checksum
How to use checksums
68c95bffe23705233ec9e431c353a9a773938692ed5c57e6ad88e578a6e642a9
Upload date
Uploaded using Trusted Publishing?
What is 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}

Release files / bearnotes_mcp-0.3.0-py3-none-any.whl

Download URL bearnotes_mcp-0.3.0-py3-none-any.whl
Size 13.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6c720003c9ca11685cb7b137d3ba06d00eefd333ad84c03ca1b2599e2e230a8a
BLAKE2b-256 checksum
How to use checksums
eb7390cbff356ca5da01853af59cc9709b01aea6ea757ab12783cdf28d8f546d
Upload date
Uploaded using Trusted Publishing?
What is 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}

Security for bearnotes-mcp 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page