Skip to main content
Glama
netologist
by netologist

search_bear_notes

Search notes in Bear App by query, tag, or limit results to find specific information quickly.

Instructions

Search Bear App notes

Args: query: Text to search for (searches in title and content) tag: Tag to filter by (without # symbol) limit: Maximum number of results

Returns: List of matching notes with metadata

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryNo
tagNo
limitNo

Implementation Reference

  • main.py:154-170 (handler)
    The main handler function for the 'search_bear_notes' MCP tool. Registered via @mcp.tool() decorator. Provides the tool schema via type hints and docstring, and delegates to the search_notes helper with error handling.
    @mcp.tool() def search_bear_notes(query: str = "", tag: str = "", limit: int = 20) -> List[Dict[str, Any]]: """ Search Bear App notes Args: query: Text to search for (searches in title and content) tag: Tag to filter by (without # symbol) limit: Maximum number of results Returns: List of matching notes with metadata """ try: return search_notes(query, tag, limit) except Exception as e: return [{"error": f"Search error: {str(e)}"}]
  • main.py:28-79 (helper)
    Core helper function implementing the database query logic for searching Bear notes by query text and tags. Constructs dynamic SQL with parameters for safe querying.
    def search_notes(query: str = "", tag: str = "", limit: int = 20) -> List[Dict[str, Any]]: """Search Bear notes""" conn = get_bear_db_connection() try: # Base query sql = """ SELECT ZUNIQUEIDENTIFIER as id, ZTITLE as title, ZTEXT as content, ZCREATIONDATE as created_date, ZMODIFICATIONDATE as modified_date, ZTRASHED as is_trashed FROM ZSFNOTE WHERE ZTRASHED = 0 """ params = [] # Add search criteria if query: sql += " AND (ZTITLE LIKE ? OR ZTEXT LIKE ?)" params.extend([f"%{query}%", f"%{query}%"]) # Add tag filter if tag: sql += " AND ZTEXT LIKE ?" params.append(f"%#{tag}%") sql += " ORDER BY ZMODIFICATIONDATE DESC LIMIT ?" params.append(limit) cursor = conn.execute(sql, params) results = [] for row in cursor.fetchall(): content = row["content"] or "" results.append({ "id": row["id"], "title": row["title"] or "Untitled", "content": content, "created_date": row["created_date"], "modified_date": row["modified_date"], "preview": content[:200] + "..." if len(content) > 200 else content, "word_count": len(content.split()) if content else 0 }) return results finally: conn.close()
  • main.py:19-26 (helper)
    Helper function to establish a connection to Bear App's SQLite database with row factory for dict-like access.
    def get_bear_db_connection(): """Connect to Bear database""" if not os.path.exists(BEAR_DB_PATH): raise FileNotFoundError(f"Bear database not found: {BEAR_DB_PATH}") conn = sqlite3.connect(BEAR_DB_PATH) conn.row_factory = sqlite3.Row # Enable column name access return conn
  • main.py:154-154 (registration)
    The @mcp.tool() decorator registers the search_bear_notes function as an MCP tool.
    @mcp.tool()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/netologist/mcp-bear-notes'

If you have feedback or need assistance with the MCP directory API, please join our Discord server