Content
# Raindrop.io MCP Server
[](https://github.com/nnno/my-raindrop-io-mcp-server/actions/workflows/ci.yml)
A Model Context Protocol (MCP) server for interacting with Raindrop.io bookmarks, implemented in Go.
## Tool List
### Bookmarks
| Tool | Description | Annotation |
|--------|------|----------------|
| `search_bookmarks` | Search bookmarks | ReadOnly |
| `get_bookmark` | Get detailed information by ID | ReadOnly |
| `create_bookmark` | Create a new bookmark | — |
| `update_bookmark` | Update an existing bookmark | — |
| `delete_bookmark` | Delete a bookmark | Destructive |
### Collections
| Tool | Description | Annotation |
|--------|------|----------------|
| `list_collections` | Get a list of collections | ReadOnly |
| `create_collection` | Create a new collection | — |
| `update_collection` | Update an existing collection | — |
## Setup
### Prerequisites
- [Raindrop.io test token](https://developer.raindrop.io/v1/authentication/token)
### Installation
Installation script (placed in `~/.local/bin/`):
```sh
curl -fsSL https://raw.githubusercontent.com/nnno/my-raindrop-io-mcp-server/main/install.sh | sh
```
For Go users (Go 1.25+ required):
```sh
go install github.com/nnno/my-raindrop-io-mcp-server@latest
```
To build from source (Go 1.25+ required):
```sh
make install
```
### Configuration for MCP Client
For Claude Desktop (`claude_desktop_config.json`):
```json
{
"mcpServers": {
"raindrop": {
"command": "~/.local/bin/my-raindrop-io-mcp-server",
"env": {
"RAINDROP_TOKEN": "your-test-token"
}
}
}
}
```
For Claude Code:
```sh
claude mcp add raindrop ~/.local/bin/my-raindrop-io-mcp-server -e RAINDROP_TOKEN=your-test-token
```
## Architecture
The application adopts a DDD-based layered architecture.
```
main.go # Entry point (DI and stdio startup)
internal/
├── domain/
│ ├── entity/ # Bookmark, Collection, DomainError
│ └── repository/ # Interface definitions
│ └── mock/ # mockgen-generated mocks
├── application/
│ └── usecase/ # Validation and business logic
├── infra/
│ └── raindrop/ # Raindrop.io REST API client
└── handler/ # MCP tool registration and request conversion
```
Dependency direction: `handler → usecase → (domain/entity + domain/repository) ← infra/raindrop`
## Development
```sh
make build # Build (embed version information)
make test # Test
make test-race # Test (with race detection)
make lint # Lint
make mock # Regenerate mocks
```
## License
MIT