bearnotes-mcp
A local MCP server that lets MCP clients read and edit Bear notes on macOS using Bear's local database and x-callback-url scheme.
README
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.
<details> <summary>Alternatives: bleeding edge, or run from a clone</summary>
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.
</details>
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="", 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 touvx(which uvx). - No notes found — open Bear at least once so its database exists.
License
Apache-2.0. See LICENSE.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。