
Raindrop.io
STDIOMCP server for Raindrop.io bookmarking service with complete bookmark management capabilities.
MCP server for Raindrop.io bookmarking service with complete bookmark management capabilities.
This project provides a Model Context Protocol (MCP) server for interacting with the Raindrop.io bookmarking service. It allows Language Models (LLMs) and other AI agents to access and manage your Raindrop.io data through the MCP standard.
resource_link
patterns for efficient data access.@modelcontextprotocol/sdk
.You can run the server directly using npx without installing it:
# Set your API token as an environment variable export RAINDROP_ACCESS_TOKEN=YOUR_RAINDROP_ACCESS_TOKEN # Run the server npx @adeze/raindrop-mcp
Clone the repository:
git clone https://github.com/adeze/raindrop-mcp.git cd raindrop-mcp
Install dependencies:
bun install
Configure Environment Variables:
Create a .env
file in the root directory by copying the example:
cp .env.example .env
Edit the .env
file and add your Raindrop.io API Access Token:
RAINDROP_ACCESS_TOKEN=YOUR_RAINDROP_ACCESS_TOKEN
Build and Run:
bun run build bun start
This project is designed for seamless debugging and protocol inspection using the MCP Inspector CLI. For full instructions and best practices, see ./github/prompts/inspector.prompt.md
.
npx -y @modelcontextprotocol/inspector --cli node build/index.js --method tools/list
npx -y @modelcontextprotocol/inspector --cli node build/index.js --method ping
npx -y @modelcontextprotocol/inspector node build/index.js
npx -y @modelcontextprotocol/inspector node build/server.js
You can automate these flows in VS Code using launch configurations and tasks. See the prompt file for more advanced scenarios and flags.
The server uses standard input/output (stdio) for communication by default, listening for requests on stdin and sending responses to stdout.
Connect your MCP client (like an LLM agent) to the running server process via stdio. The server exposes the following resource patterns:
mcp://user/profile
- User account informationdiagnostics://server
- Server diagnostics and environment infomcp://collection/{id}
- Access any Raindrop collection by ID (e.g., mcp://collection/123456
)mcp://raindrop/{id}
- Access any Raindrop bookmark by ID (e.g., mcp://raindrop/987654
)resource_link
to individual collections)resource_link
to individual bookmarks)Tool Name: bulk_edit_raindrops
Bulk update multiple bookmarks in a collection. Supports updating tags, favorite status, media, cover, and moving bookmarks to another collection.
Input Schema:
{ "collectionId": 123456, // Collection to update raindrops in "ids": [987654, 876543], // (Optional) Array of raindrop IDs to update "important": true, // (Optional) Mark as favorite "tags": ["work", "urgent"], // (Optional) Tags to set (empty array removes all tags) "media": ["https://img.com/a.png"], // (Optional) Media URLs (empty array removes all media) "cover": "<screenshot>", // (Optional) Cover URL "collection": { "$id": 654321 }, // (Optional) Move to another collection "nested": false // (Optional) Include nested collections }
Example Usage:
{ "collectionId": 123456, "ids": [987654, 876543], "tags": ["project", "review"], "important": true }
{ "collectionId": 123456, "tags": [] }
{ "collectionId": 123456, "ids": [987654, 876543], "collection": { "$id": 654321 } }
Response: Returns a text message indicating success and the number of modified bookmarks.
{ "content": [ { "type": "text", "text": "Bulk edit successful. Modified: 2" } ] }
The modern tools use the efficient resource_link
pattern - they return lightweight links to resources instead of full data, allowing clients to fetch complete data only when needed via the dynamic resource URIs.
To use the Raindrop MCP server with your AI assistant or MCP-compatible client, you can add the following configuration to your .mcp.json
file:
"raindrop": { "command": "npx", "args": [ "@adeze/raindrop-mcp@latest" ], "env": { "RAINDROP_ACCESS_TOKEN": "YOUR_RAINDROP_API_TOKEN" } }
For Claude Code or other MCP-compatible clients, this will register the Raindrop server under the name "raindrop" and make all of its resources and tools available to your AI assistant.
bun test
bun run type-check
bun run build
bun run dev
bun run debug
or bun run inspector
bun run start:http
Contributions are welcome! Please open an issue or submit a pull request.
This project is licensed under the MIT License - see the LICENSE file for details.
src/
index.ts
, server.ts
: Entrypoints for STDIO and HTTP MCP servers.connectors/
: External service connectors (e.g., OpenAI).services/
: Business logic for Raindrop.io and MCP protocol (raindrop.service.ts
, raindropmcp.service.ts
).types/
: TypeScript types and schemas (MCP, Raindrop, OAuth, Zod).utils/
: Logging and shared utilities.build/
tests/
collections://all
, tags://all
, highlights://raindrop/{id}
).resource_link
pattern following MCP SDK v1.17.2 best practicesmcp://raindrop/{id}
)registerTool()
API with proper descriptionsresource_link
objectsmcp://collection/{id}
and mcp://raindrop/{id}
patternsThis project uses Bun scripts and GitHub CLI to automate version tagging and DXT manifest release.
Tags the current commit with the version from package.json
and pushes it to GitHub:
# Bump version locally bun run bump:patch # 2.0.10 → 2.0.11 # Then either: # Option A: Let workflow handle publishing bun run tag:version # Creates tag, triggers workflow # Option B: Publish manually bun run build bun run bun:publish:npm bun run bun:publish:github
Creates a GitHub release for the current version and attaches the raindrop-mcp.dxt
manifest:
bun run release:dxt
Requirements:
gh
) must be installed and authenticated.jq
must be installed (brew install jq
on macOS).raindrop-mcp.dxt
file must exist in the project root.Scripts (in package.json
):
"tag:version": "git tag v$(jq -r .version package.json) && git push origin v$(jq -r .version package.json)", "release:dxt": "gh release create v$(jq -r .version package.json) raindrop-mcp.dxt --title \"Release v$(jq -r .version package.json)\" --notes \"DXT manifest for MCP\""
See Model Context Protocol documentation and Raindrop.io API docs for more details.