MCP server for searching and analyzing Chrome bookmarks
Server has 6 tools with complete descriptions and mostly good parameter schemas. Naming follows verb_noun convention (health_check, check_bookmarks_file_status, get_all_bookmarks, search_bookmarks_by_query, analyze_bookmarks_overview, analyze_bookmarks_domains). Descriptions are detailed (100-400 chars) and explain WHAT, WHEN, and WHAT IS RETURNED. However, several critical gaps: (1) No error handling guidance, tools return data but don't document failure modes or recovery paths; (2) No output schemas documented, callers don't know the exact structure of returned objects (BookmarksStatus, GetBookmarksResult, etc. are type hints but not visible in schema); (3) Parameter enums missing, 'root' accepts 'all'|'bookmark_bar'|'other'|'synced' but not declared as enum; 'search_in' accepts 'title'|'url'|'folder' but not constrained; (4) No pagination support, get_all_bookmarks and search_bookmarks_by_query could return large result sets but lack limit/offset or cursor patterns; (5) No tool annotations (readOnlyHint, idempotentHint) despite all tools being read-only.
Analyze which domains you bookmark most frequently. Find out which websites you save most often in your bookmarks. Args: limit: Maximum number of top domains to return (default: 20) Returns: Dictionary with: - top_domains: List of domain statistics with: - domain: Domain name - count: Number of bookmarks from this domain - percentage: Percentage of total bookmarks - examples: Sample URLs from this domain - unique_domains: Total number of unique domains bookmarked - bookmarked_domains_count: Number of domains with multiple bookmarks Use this to: - Discover your most bookmarked websites - See which sites you reference most often - Identify bookmark patterns
Step 4: Get comprehensive overview statistics about your bookmarks. Analyze your Chrome bookmarks collection to understand its structure and composition. Returns: Dictionary with: - total_bookmarks: Total number of URL bookmarks - total_folders: Total number of folders - max_depth: Maximum depth of folder hierarchy - date_range: Oldest and newest bookmark dates (ISO 8601) - roots_summary: Breakdown by root (bookmark_bar, other, synced) - average_bookmarks_per_folder: Average bookmarks per folder Use this to: - Understand the size and organization of your bookmark collection - Identify which root folders have the most bookmarks - See the date range of your bookmarks
Step 1: Check if Chrome bookmarks file is accessible and get basic information. This is the first step in the workflow - run this to verify the bookmarks file can be read. Returns a dictionary with: - status: "ready", "file_not_found", "permission_denied", or "error" - bookmarks_path: Path to Chrome bookmarks file - file_size: Size of bookmarks file in bytes - last_modified: ISO 8601 timestamp of last modification - total_bookmarks: Total number of URL bookmarks - total_folders: Total number of folders - roots: List of available root folders (bookmark_bar, other, synced) - error_message: Clear error message if there's an issue IMPORTANT: If status is not "ready", check the error_message for details.
Output schemas not documented. Type hints (BookmarksStatus, GetBookmarksResult, SearchBookmarksResult, AnalysisOverview, AnalysisDomains) exist in code but are not visible in tool definitions. LLMs cannot infer the structure of returned objects and cannot plan downstream tool calls or extract fields reliably.
Parameter enums not declared. 'root' parameter accepts 'all'|'bookmark_bar'|'other'|'synced' but is defined as free-form string. 'search_in' accepts 'title'|'url'|'folder' but lacks enum constraint. LLMs may hallucinate invalid values.
No error handling guidance. Tools document happy-path returns but do not explain failure modes (file not found, permission denied, parse errors) or recovery steps. Error responses will not guide LLM recovery.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Step 2: Get all bookmarks with optional filtering. Retrieve all Chrome bookmarks with various filtering options. Args: root: Which root to get bookmarks from: - "all": All bookmarks (default) - "bookmark_bar": Bookmarks bar only - "other": Other bookmarks only - "synced": Synced bookmarks only include_folders: Whether to include folder entries in results (default: True) max_depth: Maximum folder depth to traverse (default: unlimited) Returns: Dictionary with: - bookmarks: List of bookmark entries - summary: Statistics about the retrieved bookmarks Each bookmark entry contains: - id: Unique identifier - name: Bookmark title - url: Bookmark URL (for URL type) - type: "url" or "folder" - folder_path: List of folder names representing hierarchy - date_added: ISO 8601 timestamp when bookmark was added - indent_level: Depth in folder hierarchy (for display)
Simple health check that returns immediately to test if the MCP server is working.
Step 3: Search bookmarks by keywords in title, URL, or folder path. Search through your Chrome bookmarks to find specific items. Args: query: Search term to look for search_in: Where to search (default: ["title", "url"]): - "title": Search in bookmark names - "url": Search in URLs - "folder": Search in folder paths case_sensitive: Whether search should be case sensitive (default: False) root: Which root to search in (default: "all") max_results: Maximum number of results to return (default: 100) Returns: Dictionary with: - results: List of matching bookmarks - query: The search query that was used - total_found: Number of results found - search_time_ms: Time taken to search in milliseconds Examples: - Search for GitHub: search_bookmarks_by_query("github") - Search in URLs only: search_bookmarks_by_query("docs.python.org", search_in=["url"]) - Search for Python bookmarks in Dev folder: search_bookmarks_by_query("python", search_in=["title", "folder"])
No pagination support. get_all_bookmarks and search_bookmarks_by_query lack limit/offset or cursor parameters. Large result sets will blow context window. search_bookmarks_by_query has max_results=100 default but no way to fetch next page.
Tool annotations missing. All 6 tools are read-only but lack readOnlyHint annotation. Agents cannot distinguish safe tools from destructive ones without explicit hints.