Tools that write into Bear's database directly are the ones that produce sync conflicts and corrupted notes; routing writes through the x-callback-url API means Bear's own sync logic stays in charge, and reads still get the speed of direct SQLite. Two things to expect: tags are silently normalised (lowercased, spaces and hyphens stripped) with a warning in the response, and the author's disclaimer stands — this is not affiliated with Bear, so keep your usual backups.
An MCP server for Bear on macOS with a deliberately split architecture: read operations query Bear's SQLite database directly for speed, while every write goes through Bear's official x-callback-url API so that iCloud sync coordinates the change instead of fighting it. That split is why writes are safe to run while Bear is open.
- Basic access to the library: database statistics, note listing with filters, lookup by ID or exact title, and every tag with its usage count — `get_database_stats`, `get_notes`, `get_note_by_id`, `get_note_by_title`, `get_tags`, `get_notes_by_tag`
- Search beyond title matching: full-text with relevance scoring, similarity matching, related notes by tag and content, multi-criteria filtering and autocomplete — `search_notes_fulltext`, `find_similar_notes`, `get_related_notes`, `get_notes_advanced`, `get_notes_with_criteria`, `get_search_suggestions`, `get_recent_notes`, `get_note_counts_by_status`, `search_notes_regex`
- Analytics over your own writing: note statistics, content-pattern analysis, attachment inventory, tag hierarchy, tag usage patterns and trends over time — `get_note_analytics`, `analyze_note_metadata`, `get_notes_with_metadata`, `get_file_attachments`, `get_tag_hierarchy`, `get_tag_analytics`, `analyze_tag_relationships`, `get_tag_usage_trends`
- Writes that survive sync: create, update, duplicate and archive notes, plus forcing hashtag reprocessing singly or in bulk — `create_note`, `update_note`, `duplicate_note`, `archive_note`, `trigger_hashtag_parsing`, `batch_trigger_hashtag_parsing`
- Tag sanitisation with a warning attached: `Project` becomes `project`, `tag name` becomes `tagname`, `project-alpha` becomes `projectalpha`, while forward slashes survive so `project/alpha` stays nested — and the response tells you what was changed
- Conflict detection that prevents overwriting a concurrent change
Bear installed on macOS and opened at least once, Node.js 18+, and a clone built with `npm install` and `npm run build`; register `dist/index.js` with `node`. No account and no key — the database is found automatically under `~/Library/Group Containers/9K33E3U3T4.net.shinyfrog.bear/Application Data/`, and `BEAR_DB_PATH` overrides that for reads. `NODE_ENV=development` turns on debug logging. The package is `bear-mcp-server` 1.0.0. Read operations are instant; writes take 1-2 seconds because Bear's URL scheme processes them. Bear can stay running throughout.
One command — npx -y bear-mcp-server
