Unofficial MCP Server for the Raindrop.io API
Project description
Raindrop.io MCP Server
FastMCP-based Model Context Protocol server that exposes the Raindrop.io API to AI assistants. The server focuses on rich bookmark, collection, tag, highlights, filters, batch operations, and account operations while following the latest Raindrop REST documentation.
Key Capabilities
- Modern Raindrop API coverage – typed models for collections, bookmarks, tags, highlights/annotations, account profile, and cross-collection search.
- Batch operations – tools for moving, deleting, updating, tagging, and untagging multiple bookmarks at once.
- Advanced filtering – tools for applying complex filters to search and organize bookmarks.
- Import/Export – functionality to import bookmarks from external sources and export them in various formats.
- FastMCP tooling – tools registered with rich metadata so assistants can browse, filter, create, update, and delete Raindrop entities in natural flows.
- Typed configuration –
RaindropSettingsvalidates environment variables and exposes toggles for stdio or streamable HTTP transports. - Reusable HTTP client – retry-aware, rate-limit friendly
RaindropClientwith explicit error mapping and pagination helpers. - Tested implementation – pytest suite covering the client, tools, and entrypoints with coverage guardrails (≥80%).
Architecture Overview
Getting Started
Prerequisites
- Python 3.13 (managed by uv)
- A Raindrop.io personal access token
Installation
# clone and install dependencies
git clone https://github.com/lesleslie/raindropio-mcp.git
cd raindropio-mcp
uv sync
Configuration
Set the RAINDROP_TOKEN environment variable before launching the server. You
can export the value or place it inside a .env file next to the project root.
export RAINDROP_TOKEN="your-raindrop-token"
Optional environment variables (all prefixed with RAINDROP_):
| Variable | Default | Description |
|---|---|---|
RAINDROP_USER_AGENT |
raindropio-mcp/0.1.0 |
HTTP user agent header |
RAINDROP_REQUEST_TIMEOUT |
30.0 |
Seconds before an HTTP request times out |
RAINDROP_MAX_CONNECTIONS |
10 |
Maximum concurrent HTTP connections |
RAINDROP_ENABLE_HTTP_TRANSPORT |
false |
Enable streamable HTTP transport |
RAINDROP_HTTP_HOST |
127.0.0.1 |
HTTP bind host when enabled |
RAINDROP_HTTP_PORT |
3034 |
HTTP port when enabled |
RAINDROP_HTTP_PATH |
/mcp |
HTTP path for the MCP endpoint |
Running the Server
# stdio (default)
uv run python -m raindropio_mcp
# or via the console script
uv run raindropio-mcp
# HTTP mode
uv run python -m raindropio_mcp --http --http-port 3034
example.mcp.json and example.mcp.dev.json demonstrate how to wire the server
into MCP-enabled clients such as Claude Desktop or PowerShell integrations.
Quick Start Flowchart
Available Tools
All tools are declared in raindropio_mcp/tools and registered automatically by
register_all_tools.
| Category | Tool | Description |
|---|---|---|
| Collections | list_collections |
Fetch every collection visible to the token |
get_collection |
Load metadata for a specific collection | |
create_collection |
Create a new collection/folder | |
update_collection |
Update title, description, or appearance | |
delete_collection |
Remove a collection (items move to Inbox) | |
| Bookmarks | list_bookmarks |
List bookmarks inside a collection with paging/search |
search_bookmarks |
Full-text search across all collections | |
get_bookmark |
Retrieve a bookmark by id | |
create_bookmark |
Add a bookmark to a collection | |
update_bookmark |
Edit bookmark metadata or move between collections | |
delete_bookmark |
Delete a bookmark | |
| Highlights | list_highlights |
List all highlights for a specific bookmark |
get_highlight |
Fetch a single highlight by its ID | |
create_highlight |
Create a new highlight for a bookmark | |
update_highlight |
Update an existing highlight | |
delete_highlight |
Delete a highlight by its ID | |
| Batch | batch_move_bookmarks |
Move multiple bookmarks to a different collection |
batch_delete_bookmarks |
Delete multiple bookmarks | |
batch_update_bookmarks |
Update multiple bookmarks with the same changes | |
batch_tag_bookmarks |
Add tags to multiple bookmarks | |
batch_untag_bookmarks |
Remove tags from multiple bookmarks | |
| Filters | apply_filters |
Apply various filters to search and organize bookmarks across all collections |
get_filtered_bookmarks_by_collection |
Apply filters to bookmarks within a specific collection | |
| Import/Export | import_bookmarks |
Import bookmarks from an external source into Raindrop.io |
export_bookmarks |
Export bookmarks from Raindrop.io in a specified format | |
| Tags | list_tags |
Fetch tag usage counts |
rename_tag |
Rename a tag globally | |
delete_tag |
Remove a tag across all bookmarks | |
| Account | get_account_profile |
Return the authenticated account profile |
| System | ping |
Lightweight heartbeat including timestamp |
Each tool returns JSON-serialisable payloads closely matching the official API shapes so downstream agents can consume data without additional parsing.
Tool Categories Overview
Observability & Shutdown
Logging defaults to structured JSON. Set RAINDROP_OBSERVABILITY_STRUCTURED_LOGGING=false
(or override via .env) to switch to classic text formatting.
The FastMCP app registers a shutdown hook that gracefully closes the shared
RaindropClient, ensuring HTTP connection pools are released when the server
terminates.
Development Workflow
# lint + type-check + tests + security
uv run crackerjack
# individual tasks
uv run ruff check --fix
uv run mypy .
uv run pytest --cov=. --cov-report=term-missing
Test fixtures live in tests/ and automatically inject RAINDROP_TOKEN so unit
execution never reaches the live API.
Roadmap
- Add optional caching middleware for high-volume assistant workflows
- Implement sharing functionality when Raindrop exposes those endpoints
- Enhance filter capabilities with additional options
Contributions and feature suggestions are welcome via issues or pull requests.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file raindropio_mcp-0.2.4.tar.gz.
File metadata
- Download URL: raindropio_mcp-0.2.4.tar.gz
- Upload date:
- Size: 306.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2253fa41ae6da2f98a08797f9d91b137ad6c72b21718f49de777c279dd7f4b16
|
|
| MD5 |
7ce8d99b4105580a43a0fff74029f7da
|
|
| BLAKE2b-256 |
4262ce17b6badcc1f93e26e60213e679b7cb89da91d8e67420ede43bc62ee22f
|
File details
Details for the file raindropio_mcp-0.2.4-py3-none-any.whl.
File metadata
- Download URL: raindropio_mcp-0.2.4-py3-none-any.whl
- Upload date:
- Size: 41.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0cd346e1de14e20b16b54e120a60df206e67a96222d5f8da013d29aea09db5cf
|
|
| MD5 |
813540dd6d0e7efbeb6d7f90cf8330b6
|
|
| BLAKE2b-256 |
44ff81d1f514f2b12426abebcdf2df8b4c88137178f9950dc99cc53f2fb92ab3
|