Skip to main content
Glama
SRVivek1

geekmonks-mcp-bookmarks

by SRVivek1

geekmonks-mcp-bookmarks

Companion lab for the GeekMonks MCP series: a local bookmarks MCP server over stdio (TypeScript).

  • Series hub: MCP Without the Hype

  • Checkpoint tags: part-3 (tools only), part-4 (tools + resource bookmarks://list + prompt summarize-bookmarks)

Host note: tools show up most reliably in Cursor. Verify resources and prompts with MCP Inspector even when the host UI is limited.

Requirements

  • Node.js 20+

Related MCP server: raindrop-mcp

Setup

git clone https://github.com/SRVivek1/geekmonks-mcp-bookmarks.git
cd geekmonks-mcp-bookmarks
git checkout part-3   # or part-4
npm install
npm run build

Optional: set BOOKMARKS_PATH to a JSON file path. Default store: ./data/bookmarks.json (created on first use; gitignored).

MCP Inspector (prove tools without Cursor)

From the repo root after npm run build:

npx @modelcontextprotocol/inspector node dist/index.js

Connect, open Tools, try list_bookmarks / add_bookmark / search_bookmarks.

On tag part-4, also check Resources (bookmarks://list) and Prompts (summarize-bookmarks).

Cursor (mcp.json)

Project config example (adjust the absolute path):

{
  "mcpServers": {
    "bookmarks": {
      "type": "stdio",
      "command": "node",
      "args": ["/ABS/PATH/TO/geekmonks-mcp-bookmarks/dist/index.js"]
    }
  }
}

Reload MCP / start a new Agent chat. Approve tool calls when prompted.

Logging rule

Never write protocol noise to stdout. This server logs only with console.error (stderr).

License

MIT

Available Tools

3 tools
add_bookmarkAdd bookmarkA

Add a bookmark with a title and URL to the local JSON store.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesFull URL to save
titleYesShort title for the bookmark

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Add' to a 'local JSON store', which is a mutation but does not mention potential side effects, such as whether duplicates are allowed, whether the operation fails on invalid URLs, or if any return value is produced. This is minimal for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no redundancy. It efficiently communicates the core action and target. Every word earns its place, and it is neither verbose nor under-specified in terms of conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with only two parameters and no output schema, so the description does not need to explain return values. However, because it lacks behavioral transparency (e.g., idempotency, error handling), it is not fully complete. Given the low complexity, it is adequate but has gaps in side-effect disclosure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description restates that the tool takes a 'title' and 'URL', which adds nothing beyond the schema's definitions. It does not clarify URL format constraints or title length beyond what the schema already specifies, so it adds minimal extra meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Add' with specific resources ('bookmark', 'title', 'URL') and the destination ('local JSON store'). It is unambiguous and distinct from sibling tools like list_bookmarks and search_bookmarks, which have different verbs and purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the primary use case: when you need to save a bookmark. However, it does not explicitly distinguish when to use this tool over siblings, nor does it mention any exclusions or conditions. Since the tool name itself is highly indicative, the guidance is adequate but not explicit about alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_bookmarksList bookmarksA

List all saved bookmarks from the local JSON store.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral transparency burden. 'List' is a clear read operation and the phrase 'local JSON store' specifies the data source and implies no network or destructive side effects. It still doesn't explicitly state that bookmarks are never modified, but the wording is strong enough for a simple list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, information-dense sentence that front-loads the main action and scope. Every word contributes meaningful context, leaving no excessive or irrelevant prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool, this description is largely sufficient. It lacks explicit mention of empty-store behavior or the exact return shape, but the description's scope and the tool's naming make it reasonably complete for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters and 100% schema description coverage, so the description does not need to explain parameter details. The phrase 'List all saved bookmarks' clarifies the point of the result without adding unnecessary parameter-level noise.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb (List) and resource (all saved bookmarks) and identifies the data source (local JSON store). This matches the title while also giving enough semantic scope to distinguish it from add_bookmark and search_bookmarks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not state when to use this tool versus its siblings. It implies enumeration of the full set of bookmarks, but it never mentions that search_bookmarks should be used for filtered or specific lookups, or that add_bookmark is for creation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_bookmarksSearch bookmarksA

Search bookmarks by substring match on title or URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesText to find in title or URL

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the core matching behavior ('substring match') and that both title and URL are scanned, which is valuable. But it does not address case sensitivity, empty results, pagination, or that this is a read-only operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with zero filler: the primary verb, target, and matching mode are front-loaded. Every word contributes meaningful guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter search tool with no output schema, this is nearly complete: the invocation contract is fully described. Minor gaps like absence of result-format or no-match behavior are small given the simplicity, so it earns slightly above the minimum viable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the query parameter is already described as 'Text to find in title or URL'. The description adds little beyond the schema, only reinforcing the substring matching mode. Baseline 3 applies because the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb 'Search' with resource 'bookmarks' and mechanism 'substring match on title or URL' states exactly what the tool does. It is immediately distinguishable from siblings list_bookmarks (full collection) and add_bookmark (write operation).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The matching semantics imply the use case: locate a bookmark by text in title or URL. However, it never explicitly states when not to use it, nor does it name list_bookmarks as the alternative for viewing all bookmarks, leaving routing between siblings to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.4.0
    • First observedadd_bookmark
    • First observedlist_bookmarks
    • First observedsearch_bookmarks

TDQS

A3.8/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a distinct purpose: listing, adding, and searching bookmarks. There is no overlap or ambiguity between them.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: list_bookmarks, add_bookmark, search_bookmarks. The pattern is clear and predictable.

Tool Count3/5

With only 3 tools, the server is minimal but covers the basic operations for a bookmark store. It feels slightly thin but is reasonable for a simple local JSON store.

Completeness3/5

The server provides list, add, and search, but lacks update and delete operations, which are common for bookmark management. This is a notable gap but agents can work around it by not needing those operations.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    A bookmark management MCP server that enables saving, searching, and managing bookmarks with tags and read/unread status, providing tools, resources, and prompts for integration.
    4
    -
  • A
    license
    B
    quality
    C
    maintenance
    Enables management of Raindrop.io bookmarks, collections, tags, and highlights via MCP tools, with support for search, bulk editing, and library auditing.
    17
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A generic X/bookmark intelligence MCP core for ingesting, enriching, and retrieving bookmarks with semantic search, brief generation, and academic paper scanning, exposed as MCP tools.
    Apache 2.0
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to search, browse, add, and delete Chrome and Edge bookmarks through the MCP protocol, using a local FastMCP server that directly reads and modifies browser bookmark files.
    5
    -