matteo-hertel/raindrop-mcp-local
If you are the rightful owner of raindrop-mcp-local and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
A Model Context Protocol (MCP) server for interacting with the Raindrop.io API, providing tools for managing bookmarks, collections, tags, highlights, and more.
Raindrop.io MCP Server
A Model Context Protocol (MCP) server for interacting with the Raindrop.io API. This server provides tools for managing bookmarks, collections, tags, highlights, and more through Raindrop.io's REST API.
Features
🔖 Collections Management
- List all collections
- Create new collections
- Update collection properties
- Delete collections
📰 Raindrops (Bookmarks) Management
- Get individual raindrops or search through collections
- Create new bookmarks
- Update existing bookmarks
- Delete bookmarks
- Bulk operations (create, update, delete multiple raindrops)
- Permanent copy/cache - Archive webpage content (Pro feature)
🏷️ Tags Management
- List tags for collections
- Rename tags
- Merge tags
- Delete tags
✨ Highlights Management
- Get highlights for raindrops
- Create new highlights
- Update existing highlights
- Delete highlights
🔍 Import & Utility Tools
- Parse URLs to extract metadata
- Check if URLs exist in Raindrop.io
- Parse import files
- Get user profile information
- List available filters
Prerequisites
- Node.js 20+ - This server requires Node.js version 20 or higher
- Raindrop.io Account - You need a Raindrop.io account to get an API token
- API Token - Get your API token from Raindrop.io App Settings
Installation
-
Clone the repository:
git clone <repository-url> cd raindrop-mcp-local -
Install dependencies:
pnpm install # or npm install # or yarn install -
Set up environment variables: Create a
.envfile in the root directory:RAINDROP_TOKEN=your_raindrop_api_token_hereAlternatively, export the environment variable:
export RAINDROP_TOKEN="your_raindrop_api_token_here" -
Build the project:
pnpm build
Getting Your Raindrop.io API Token
- Visit Raindrop.io App Settings
- Go to the "For Developers" section
- Click "Create new app"
- Fill in the required information
- Copy your API token
- Add it to your environment variables
Usage
Development Mode
Start the server in development mode with hot reloading:
pnpm dev
The server will start on http://localhost:3002 by default.
Production Mode
Build and start the server for production:
pnpm build
pnpm start
Debug Mode
Debug and test your MCP server using the MCP Inspector:
# First build the server
pnpm build
# Then launch the debugger
pnpm debug
This will:
- Build the MCP server
- Start the MCP Inspector in your browser
- Connect to your server via STDIO transport
- Allow you to test all 26 tools interactively
- View detailed request/response data
- Debug tool parameters and outputs
The MCP Inspector provides a web interface at http://localhost:5173 where you can:
- Browse all available tools
- Test tool functionality with different parameters
- View formatted responses
- Debug authentication and API connectivity
- Monitor real-time tool execution
Debug Tips:
- Set your
RAINDROP_TOKENenvironment variable before running debug - Test the
get_usertool first to verify authentication - Use
get_collectionsto see your available collections - Try
get_permanent_copyto test Pro features - Check the console for detailed error messages
Configuration
The server configuration is defined in xmcp.config.ts:
const config: XmcpConfig = {
name: 'raindrop-mcp',
description: 'Simple MCP server for Raindrop.io API',
http: {
port: 3002, // Change this if needed
},
tools: {
directory: './src/tools'
}
};
Available Tools
Collections
get_collections- List all collectionscreate_collection- Create a new collectionupdate_collection- Update an existing collectiondelete_collection- Delete a collection
Raindrops (Bookmarks)
get_raindrops- Search and list raindrops in a collectionget_raindrop- Get a specific raindrop by IDcreate_raindrop- Create a new bookmarkupdate_raindrop- Update an existing bookmarkdelete_raindrop- Delete a bookmarkbulk_create_raindrops- Create multiple bookmarks at oncebulk_update_raindrops- Update multiple bookmarks at oncebulk_delete_raindrops- Delete multiple bookmarks at onceget_permanent_copy- Create/get permanent archived copy of a webpage (Pro feature)
Tags
get_tags- List tags for a collectionrename_tag- Rename a tagmerge_tags- Merge multiple tags into onedelete_tags- Delete tags
Highlights
get_highlights- Get highlights for a raindropcreate_highlight- Create a new highlightupdate_highlight- Update an existing highlightdelete_highlight- Delete a highlight
Utilities
get_user- Get current user profileget_filters- Get available filters for a collectionparse_url- Parse a URL to extract metadatacheck_url_exists- Check if a URL exists in your Raindrop.io accountparse_import_file- Parse import files (various formats)
Usage Examples
Creating a New Bookmark
{
"tool": "create_raindrop",
"arguments": {
"link": "https://example.com",
"title": "Example Website",
"excerpt": "A great example website",
"collectionId": 0,
"tags": ["example", "website"]
}
}
Getting Permanent Copy (Pro Feature)
The permanent copy feature creates an archived version of a webpage that's stored on Raindrop.io servers. This is useful for preserving content even if the original webpage becomes unavailable.
{
"tool": "get_permanent_copy",
"arguments": {
"id": 123456
}
}
Note: This feature requires a Raindrop.io Pro subscription.
Searching Raindrops
{
"tool": "get_raindrops",
"arguments": {
"collectionId": 0,
"search": "javascript tutorials",
"page": 0,
"perpage": 25
}
}
Managing Collections
{
"tool": "create_collection",
"arguments": {
"title": "Web Development",
"description": "Resources for web development",
"public": false
}
}
Bulk Operations
{
"tool": "bulk_create_raindrops",
"arguments": {
"raindrops": [
{
"link": "https://example1.com",
"title": "Example 1",
"collectionId": 0
},
{
"link": "https://example2.com",
"title": "Example 2",
"collectionId": 0
}
]
}
}
Tag Management
{
"tool": "rename_tag",
"arguments": {
"replace": "old-tag-name",
"with": "new-tag-name"
}
}
Error Handling
The server handles various error scenarios:
- Invalid API Token: Returns clear error message asking to check RAINDROP_TOKEN
- Network Errors: Gracefully handles connection issues with Raindrop.io API
- Pro Feature Access: Specific error messages for Pro-only features like permanent copy
- Rate Limiting: Respects Raindrop.io API rate limits
- Invalid Parameters: Validates all input parameters and provides helpful error messages
Common Issues
Invalid Token Error
Error: Raindrop API token is required. Set RAINDROP_TOKEN environment variable or pass token to constructor.
Solution: Make sure you've set the RAINDROP_TOKEN environment variable with your API token.
Pro Feature Limitation
Error: Permanent copy feature requires a Pro subscription. Please upgrade your Raindrop.io account to access this feature.
Solution: The permanent copy feature requires a Raindrop.io Pro subscription.
Port Already in Use
Error: listen EADDRINUSE: address already in use 127.0.0.1:3002
Solution: Change the port in xmcp.config.ts or stop the existing process.
Development
Project Structure
src/
├── tools/ # All MCP tools
│ ├── collections/ # Collection management tools
│ ├── raindrops/ # Raindrop management tools
│ ├── tags/ # Tag management tools
│ ├── highlights/ # Highlight management tools
│ ├── user/ # User profile tools
│ ├── import/ # Import and utility tools
│ └── filters/ # Filter tools
├── utils/ # Utility functions
│ ├── api-client.ts # Raindrop.io API client
│ └── constants.ts # API constants
└── types.ts # TypeScript type definitions
Adding New Tools
- Create a new
.tsfile in the appropriatesrc/tools/subdirectory - Follow the existing pattern:
import { z } from "zod"; import { type ToolMetadata, type InferSchema } from "xmcp"; export const schema = { // Define parameters using Zod }; export const metadata: ToolMetadata = { name: "tool_name", description: "Tool description", annotations: { title: "Human Readable Title", readOnlyHint: true/false, destructiveHint: true/false, idempotentHint: true/false, }, }; export default async function toolFunction({ }: InferSchema<typeof schema>) { // Implementation }
API Client
The apiClient utility provides a robust interface to the Raindrop.io API with:
- Automatic authentication handling
- Error handling and retry logic
- Request/response type safety
- Connection testing capabilities
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
License
MIT License - see LICENSE file for details