io.github.mreider/better-bear
NPM · BETTER-BEAR · SCANNED SEP 25
MCP server for Bear notes — read, search, create, edit, tag, and manage notes via CloudKit
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 31 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency19
- Repository check failed: the declared repository URL redirects; it must resolve directly. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 154 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability83
- AI-judged instruction clarity (excellent).Pass
- Tool/resource definitions use about 2908 tokens (~85/item across 34 items; 34 tools + 0 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management87
- Stability observed for 26 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 34 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the io.github.mreider/better-bear MCP server?
io.github.mreider/better-bear runs locally as an npm package, launched with npx -y better-bear. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · better-bear
claude mcp add mreider-better-bear -- npx -y better-bear
{
"mcpServers": {
"mreider-better-bear": {
"command": "npx",
"args": [
"-y",
"better-bear"
]
}
}
} {
"servers": {
"mreider-better-bear": {
"command": "npx",
"args": [
"-y",
"better-bear"
]
}
}
} codex mcp add mreider-better-bear -- npx -y better-bear
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mreider-better-bear": {
"type": "local",
"command": [
"npx",
"-y",
"better-bear"
],
"enabled": true
}
}
} openclaw mcp add mreider-better-bear --command npx --arg -y --arg better-bear
mcp_servers:
mreider-better-bear:
command: "npx"
args: ["-y", "better-bear"] {
"McpServers": {
"mreider-better-bear": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"better-bear"
]
}
}
} assistant mcp add mreider-better-bear -t stdio -c npx -a -y better-bear
{
"mcpServers": {
"mreider-better-bear": {
"command": "npx",
"args": [
"-y",
"better-bear"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 25 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 24 Sept 26 −2
- Security disclosure: unverified → fail ▼ functional
- Stability: pass → 0.83 functional
- 23 Sept 26 0
- Stability: 0.97 → pass security
- Security disclosure: fail → unverified ▼ functional
- 22 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Sept 26 −3
- Stability: pass → 0.80 functional
- 16 Sept 26 0
- Stability: 0.97 → pass security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 25 Sept 2026 · Analysed npm/better-bear@0.4.21
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Dependencies 95 packages
| Packages resolved | 95 |
|---|---|
| Stale | 31 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
bear_add_tag ~53
Add a tag to an existing Bear note. The tag is inserted into the note's markdown.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Note ID (uniqueIdentifier) |
| tag | string | yes | Tag to add (without #) |
No output schema declared.
No examples provided.
bear_archive_note ~61
Archive a Bear note. Archived notes are hidden from the main list but not deleted. Use 'undo' to unarchive.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Note ID (uniqueIdentifier) |
| undo | boolean | – | Unarchive the note instead of archiving |
No output schema declared.
No examples provided.
bear_attach_file ~175
Attach a file or image to an existing Bear note. The file is uploaded to iCloud and embedded in the note's markdown. Supports common image formats (jpg, png, gif, webp, heic) and other file types (pdf, zip, etc.). By default the attachment is appended to the end. Use 'after' or 'before' to place it relative to text in the note, or 'prepend' to put it right after the title.
| Name | Type | Req | Description |
|---|---|---|---|
| after | string | – | Insert after the line containing this text |
| before | string | – | Insert before the line containing this text |
| file_path | string | yes | Absolute path to the file to attach |
| id | string | yes | Note ID (uniqueIdentifier) |
| prepend | boolean | – | Insert after the title line instead of at the end |
No output schema declared.
No examples provided.
bear_context_add ~88
Add a Bear note to the context library by tagging it with #context. Optionally specify a subtag for grouping (e.g., subtag 'jira' → #context/jira). Triggers a sync after tagging.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Note ID (uniqueIdentifier) |
| subtag | string | – | Optional sub-tag for grouping (e.g., 'architecture', 'jira') |
No output schema declared.
No examples provided.
bear_context_fetch ~78
Load the full content of specific files from the context library. Pass relative paths like 'bear/arch-overview.md' or 'external/jira-ticket.md'. Use after reading the index to load only relevant files — never load everything.
| Name | Type | Req | Description |
|---|---|---|---|
| paths | array | yes | File paths relative to context directory (e.g., 'bear/my-note.md') |
No output schema declared.
No examples provided.
bear_context_import ~159
Import external content into the context library. Content is written to the external/ directory with YAML front matter (source, group, summary, date). Use this to add non-Bear content like Jira tickets, Slack threads, API docs, or any markdown. The content is passed via stdin and a filename must be provided.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | Markdown content to import |
| filename | string | yes | Target filename in external/ (e.g., 'jira-ticket-123.md') |
| group | string | – | Group label for organizing (e.g., 'jira', 'slack', 'docs') |
| source | string | – | Source description (e.g., URL, tool name) |
| summary | string | – | Short summary of the content |
No output schema declared.
No examples provided.
bear_context_index ~60
Get the context library index — a structured table of contents of all files (Bear notes, external files, inbox). Read this FIRST before answering questions from context. Use it to identify which files to fetch, rather than loading everything. Includes cache freshness metadata.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
bear_context_ingest ~61
Scan the inbox/ directory and list all untriaged files. Returns filename, size, content preview (first 500 chars), and any detected YAML front matter for each file. Does NOT modify anything — use bear_context_triage to act on files.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
bear_context_push_to_bear ~115
Push an external file to Bear as a new note. Creates a Bear note from the file content, tags it with #context (+ optional subtag), and removes the original external file. Use when external content has matured enough to become a permanent Bear note.
| Name | Type | Req | Description |
|---|---|---|---|
| filename | string | yes | Filename in external/ to push |
| subtag | string | – | Sub-tag (e.g., 'architecture' → #context/architecture) |
| title | string | – | Override note title (defaults to title extracted from content) |
No output schema declared.
No examples provided.
bear_context_remove ~46
Remove a Bear note from the context library by removing its #context tag. Triggers a sync to delete the local file.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Note ID (uniqueIdentifier) |
No output schema declared.
No examples provided.
bear_context_remove_external ~54
Remove a file from the external/ directory in the context library. Deletes the file and regenerates the index. Use when external content is no longer needed.
| Name | Type | Req | Description |
|---|---|---|---|
| filename | string | yes | Filename in external/ to remove |
No output schema declared.
No examples provided.
bear_context_search ~77
Full-text search across the entire context library (Bear notes + external files + inbox). Returns matching snippets with filenames and origin labels. Use when the index alone isn't enough to find the right file.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum results (default: 5) |
| query | string | yes | Search query (case-insensitive substring match) |
No output schema declared.
No examples provided.
bear_context_setup ~137
Initialize a context library — a curated, synced folder of Bear notes optimized for LLM consumption. Creates the directory structure and config. After setup, tag Bear notes with #context (or a custom prefix) and use bear_context_sync to pull them in. One-time operation.
| Name | Type | Req | Description |
|---|---|---|---|
| dir | string | – | Output directory for the context library (default: ~/.bear-context) |
| tag_prefix | string | – | Tag prefix for qualifying notes (default: context). Notes tagged #context or #context/subtag will be included. |
| use_frontmatter | boolean | – | Also include notes with context: true in YAML front matter (default: true) |
No output schema declared.
No examples provided.
bear_context_status ~57
Get context library health and stats: Bear note count, external file count, inbox count, total tokens, last sync time, group breakdown, and warnings (stale cache, expired externals, oversized files, untriaged inbox items).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
bear_context_sync ~96
Sync qualifying Bear notes to the local context library. Adds new notes, updates changed notes, and removes notes that no longer qualify (tag removed, trashed, etc.). Regenerates the index. Only touches the bear/ directory — external/ and inbox/ are untouched. Call this when the user asks to sync, refresh, or update their context.
| Name | Type | Req | Description |
|---|---|---|---|
| force | boolean | – | Force full re-sync (re-download all notes) |
No output schema declared.
No examples provided.
bear_context_triage ~185
Triage a file in the inbox. Three actions: 'keep' moves it to external/ with optional group/summary metadata. 'push_to_bear' creates a Bear note tagged #context (+ optional subtag) and deletes the inbox file. 'discard' deletes the file. All actions regenerate the index.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | Triage action: keep (move to external/), push_to_bear (create Bear note), or discard (delete) |
| filename | string | yes | Filename in inbox/ to triage |
| group | string | – | Group label (used with 'keep' action) |
| subtag | string | – | Sub-tag for Bear note (used with 'push_to_bear' action, e.g., 'jira' → #context/jira) |
| summary | string | – | Short summary (used with 'keep' action) |
No output schema declared.
No examples provided.
bear_create_note ~116
Create a new Bear note with a title, optional body text, tags, and YAML front matter. Front matter is stored as a collapsed metadata block at the top of the note. Returns the new note's ID.
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | – | Note body text (markdown) |
| frontmatter | object | – | YAML front matter fields as key-value pairs (e.g. {status: 'draft', project: 'alpha'}) |
| tags | array | – | Tags to assign to the note |
| title | string | yes | Note title |
No output schema declared.
No examples provided.
bear_delete_tag ~40
Delete a tag from all Bear notes. The tag text is removed but notes are preserved.
| Name | Type | Req | Description |
|---|---|---|---|
| tag | string | yes | Tag to delete (without #) |
No output schema declared.
No examples provided.
bear_edit_note ~207
Edit an existing Bear note. Provide 'append_text' to add text, 'body' to replace content, or 'set_frontmatter'/'remove_frontmatter' to edit YAML front matter fields. Front matter edits can be combined with each other but not with body/append.
| Name | Type | Req | Description |
|---|---|---|---|
| after | string | – | Insert appended text after the line containing this text (use with append_text) |
| append_text | string | – | Text to append to the end of the note |
| body | string | – | New content to replace the entire note body |
| id | string | yes | Note ID (uniqueIdentifier) |
| remove_frontmatter | array | – | Front matter field keys to remove |
| replace_section | string | – | Replace content under this heading (replaces until next heading of same or higher level) |
| section_content | string | – | New content for the section (use with replace_section) |
| set_frontmatter | object | – | Front matter fields to set or update (key-value pairs) |
No output schema declared.
No examples provided.
bear_find_duplicates ~40
Find notes with duplicate titles. Returns groups of notes sharing the same title with their IDs and modification dates. Useful for cleaning up after imports or sync conflicts.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
bear_find_untagged ~38
List Bear notes that have no tags assigned.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum number of notes to return (default 30) |
No output schema declared.
No examples provided.
bear_get_note ~94
Get a single Bear note's full content and metadata by ID. Returns the note title, tags, full markdown text, and dates. If the note is locked/private, 'locked: true' will be included in the response. Use the 'raw' option to get just the markdown without metadata.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Note ID (uniqueIdentifier) |
| raw | boolean | – | Return only the raw markdown content |
No output schema declared.
No examples provided.
bear_get_tags ~36
Get the full tag hierarchy from Bear. Returns all tags with their note counts and pin status. Useful for understanding how notes are organized.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
bear_get_todos ~56
Get all TODO items from a specific Bear note. Returns each item's text, completion status, and index number (use the index with bear_toggle_todo to toggle items).
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Note ID (uniqueIdentifier) |
No output schema declared.
No examples provided.
bear_health_check ~58
Run a health check on the Bear notes library. Reports duplicate titles, empty notes, notes stuck in trash, sync conflicts, orphaned tags, untagged notes, and oversized notes. Use this to identify cleanup opportunities or diagnose sync issues.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
bear_list_notes ~147
List Bear notes with optional tag filtering. Returns an array of notes with IDs, titles, tags, pin status, and modification dates. Notes with 'locked: true' are private/encrypted in Bear and their body content is not searchable — if a search returns no results, check whether the relevant note is locked. Use bear_get_note to read the full content of a specific note.
| Name | Type | Req | Description |
|---|---|---|---|
| include_archived | boolean | – | Include archived notes in results |
| include_trashed | boolean | – | Include trashed notes in results |
| limit | number | – | Maximum number of notes to return (default 30) |
| tag | string | – | Filter notes by tag (partial match) |
No output schema declared.
No examples provided.
bear_list_todos ~60
List Bear notes that have incomplete TODO items (markdown checkboxes like '- [ ]'). Returns each note's title, tags, and counts of complete/incomplete items.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Maximum number of notes to return (default 30) |
No output schema declared.
No examples provided.
bear_note_stats ~50
Get statistics about the Bear notes library: total notes, words, tags, pinned, archived, trashed, notes with TODOs, oldest/newest dates, and top 10 tags by note count.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
bear_remove_tag ~43
Remove a tag from a specific Bear note.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Note ID (uniqueIdentifier) |
| tag | string | yes | Tag to remove (without #) |
No output schema declared.
No examples provided.
bear_rename_tag ~56
Rename a tag across all Bear notes. Every note containing the old tag will be updated.
| Name | Type | Req | Description |
|---|---|---|---|
| new_name | string | yes | New tag name (without #) |
| old_name | string | yes | Current tag name (without #) |
No output schema declared.
No examples provided.
bear_search ~165
Full-text search across Bear note titles, tags, and body content. Returns matching notes ranked by relevance (title matches first, then tag, then body). Body matches include a text snippet with surrounding context. Locked/private notes will match by title but may not match body searches — results include 'locked: true' for these notes. If you can't find content you expect, try listing notes to check if the relevant note is locked.
| Name | Type | Req | Description |
|---|---|---|---|
| before | string | – | Only notes modified before this date (YYYY-MM-DD) |
| limit | number | – | Maximum number of results (default 20) |
| query | string | yes | Search query text |
| since | string | – | Only notes modified after this date (YYYY-MM-DD, or: today, yesterday, last-week, last-month) |
No output schema declared.
No examples provided.
bear_sync ~70
Trigger a sync of Bear notes from iCloud. Normally an incremental sync fetching only changes. Use 'full' to force a complete re-sync. Most read operations auto-sync when the cache is stale, so manual sync is rarely needed.
| Name | Type | Req | Description |
|---|---|---|---|
| full | boolean | – | Force a full re-sync instead of incremental |
No output schema declared.
No examples provided.
bear_toggle_todo ~76
Toggle a specific TODO item in a Bear note between complete and incomplete. The item_index is 1-based — use bear_get_todos first to see the list with index numbers.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Note ID (uniqueIdentifier) |
| item_index | number | yes | 1-based index of the TODO item to toggle |
No output schema declared.
No examples provided.
bear_trash_note ~54
Move a Bear note to the trash. This is a soft delete — the note can be recovered from Bear's trash. The note is identified by its ID.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Note ID (uniqueIdentifier) |
No output schema declared.
No examples provided.
What is the io.github.mreider/better-bear MCP server?
io.github.mreider/better-bear is an MCP server listed in the public MCP registry as io.github.mreider/better-bear. MCP server for Bear notes, read, search, create, edit, tag, and manage notes via CloudKit. This page covers its npm package (better-bear).
Is the io.github.mreider/better-bear MCP server safe to use?
io.github.mreider/better-bear scores 78 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 25 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.mreider/better-bear MCP server expose?
io.github.mreider/better-bear exposes 34 tools: bear_list_notes, bear_get_note, bear_search, bear_get_tags, bear_create_note, and 29 more. Their descriptions and schemas cost roughly 2,908 tokens of context every time the server is loaded.
Is the io.github.mreider/better-bear MCP server still maintained?
io.github.mreider/better-bear is still listed as active in the MCP registry. We last reached this channel on 25 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the io.github.mreider/better-bear MCP server under?
io.github.mreider/better-bear declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.