geekmonks-mcp-bookmarks
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@geekmonks-mcp-bookmarkssearch my bookmarks for TypeScript"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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 + resourcebookmarks://list+ promptsummarize-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 buildOptional: 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.jsConnect, 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 toolsadd_bookmarkAdd bookmarkA
Add a bookmark with a title and URL to the local JSON store.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full URL to save | |
| title | Yes | Short title for the bookmark |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Text to find in title or URL |
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
v0.4.0- First observed
add_bookmark - First observed
list_bookmarks - First observed
search_bookmarks
TDQS
Scored across 3 tools
Each tool has a distinct purpose: listing, adding, and searching bookmarks. There is no overlap or ambiguity between them.
All tool names follow a consistent verb_noun pattern: list_bookmarks, add_bookmark, search_bookmarks. The pattern is clear and predictable.
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.
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
Related MCP Connectors
Search, label, and manage your X (Twitter) bookmarks from any MCP client via Tweetsmash
Self-hosted AI prompt library: prompts, collections, tags, teams, chains. 29 MCP tools for agents.
Your org's AI agents, tasks, runs, search, and brain files as MCP tools and resources.
Search and save to your Purl read-it-later knowledge base from any MCP client.
Related MCP Servers
- FlicenseAqualityDmaintenanceA 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-
- AlicenseBqualityCmaintenanceEnables management of Raindrop.io bookmarks, collections, tags, and highlights via MCP tools, with support for search, bulk editing, and library auditing.17MIT
- AlicenseNot gradedqualityCmaintenanceA 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
- FlicenseAqualityCmaintenanceEnables 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-