Manage Raindrop.io bookmarks: collections, raindrops, highlights, tags and the saved-link search behind them.
Raindrop.io ships in the w6w first-party pack. It declares 39 actions, 2 health checks, and the host runs its code in a sandbox that never sees the credential.
io.w6w.raindropRaindrop.io keeps a bookmark library organized from inside a workflow — filing links into the right collection, tagging and highlighting them, and checking whether something has already been saved, across collections, raindrops (bookmarks), highlights and tags.
Bookmarks can be created singly or in bulk, updated, searched, moved to Trash and restored, or checked against a URL before saving to avoid a duplicate. Collections nest, share with collaborators, merge, and reorder, with sharing invitations and role changes handled as their own actions. Highlights are added, edited and removed on a bookmark, and tags are listed, renamed or merged in one step, since Raindrop treats a tag’s name as its whole identity.
It fits research, reading-list and content-curation workflows that file links from other tools into the right collection, keep a shared collection’s membership and tags tidy, or check whether something has already been saved before adding it again — for a personal account with a permanent test token, or for someone else’s account via OAuth.
Three routes to the same 39 actions. The Workflow tab is generated from Raindrop.io's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.
backup-create Queue a new backup of the whole account. Raindrop emails the export file when it is ready; the backup then appears in List Backups. Returns a status sentence, not a file.
backup-list List the account's backups, newest first. Each carries the ID used by Raindrop's backup download URL.
collaborator-role-update Promote a collaborator to member (write) or demote them to viewer (read-only).
collection-children-list List every nested collection at any depth (those with a parent). Pair with List Collections to reconstruct the full tree.
collection-clean-empty Delete every collection in the account that contains no bookmarks. Returns how many were removed, but not which.
collection-delete Remove a collection and all its sub-collections. Bookmarks inside move to Trash rather than being destroyed.
collection-delete-many Remove several collections at once. Unlike deleting one collection, sub-collections are NOT removed unless their IDs are listed too.
collection-list List the account's root collections (those with no parent). Sub-collections come from List Sub-Collections; system collections are never listed.
collection-merge Merge several collections into one. The merged-from collections do not survive.
collection-reorder Re-sort every collection in the account alphabetically or by bookmark count.
collection-share Invite people to a collection by email. Each address receives an invitation email; nothing is shared until they accept. Maximum 10 addresses per call.
collection-sharing-list List the collaborators on a shared collection with their access level. Records include collaborators' email addresses (blank if you only have read-only access).
collection-unshare If the connected account owns the collection, this removes ALL collaborators. If it is a member or viewer, it removes only itself. The request is identical either way.
collection-update Change a collection's title, parent, view, visibility or order. Partial update.
cover-search Search Raindrop's collection icon library, or list the featured covers when no term is given. Returns provider groups, each with PNG (and sometimes SVG) URLs.
filter-list Counts for a collection in one call: broken links, duplicates, favorites, untagged, plus tag and type histograms. Use collection 0 for the whole account.
highlight-add Add a highlight to a bookmark. Existing highlights are kept; the response returns the full list, including the new one's ID.
highlight-list List highlights across the whole account or within one collection. Each carries `raindropRef`, the ID of the bookmark it came from.
highlight-remove Delete one highlight from a bookmark. Raindrop has no DELETE for highlights — this is a PUT carrying the highlight's ID and an empty text field.
highlight-update Change an existing highlight's colour or note. The highlighted text itself is not editable here — an empty `text` is Raindrop's delete signal.
raindrop-create Save one bookmark. Only the URL is required; turn on Parse metadata to let Raindrop fill in the title, description and cover in the background.
raindrop-create-many Save up to 100 bookmarks in one call. Each item takes the same fields as Create Raindrop and must have a `link`.
raindrop-delete Move one bookmark to Trash. If it is ALREADY in Trash, the same call destroys it permanently.
raindrop-delete-many Move many bookmarks to Trash. With no IDs and no search this empties the WHOLE collection; with collection -99 it destroys them permanently.
raindrop-get Fetch one bookmark by ID, including its highlights, tags, cached-copy status and cover.
raindrop-search List or search the bookmarks in a collection. Use collection 0 for everything except Trash, -1 for Unsorted, -99 for Trash.
raindrop-suggest Ask Raindrop which collections and tags suit a bookmark — either a URL you have not saved yet, or one you already have. Give exactly one of the two.
raindrop-update Change one bookmark's fields. Partial: omitted fields are untouched. Sending tags REPLACES the bookmark's tags (the batch endpoint appends instead).
raindrop-update-many Update many bookmarks in a collection at once. Tags are APPENDED here (unlike the single update, which replaces). With no IDs and no search, this updates EVERY bookmark in the collection.
tag-list List tags with the number of bookmarks using each. Optionally scoped to one collection. A tag's name is its `_id` — tags have no numeric identity.
tag-remove Strip one or more tags from the bookmarks carrying them. The bookmarks are kept. Optionally limited to one collection.
tag-rename Rename one tag, or merge several into a single name — the same endpoint either way. Optionally limited to one collection.
url-exists Check whether URLs are already bookmarked, returning the IDs of the ones that are. Use before Create Raindrop — Raindrop does not deduplicate on its own.
url-parse Extract title, description, cover image and type from any URL using Raindrop's parser, without saving it. A page that cannot be read still returns a best-effort item plus a `parseError`.
user-get Fetch the connected Raindrop.io account: name, email, plan, preferences, file-upload usage and the `groups` array that holds root-collection order. Documented fields only.
user-stats-get Bookmark counts per collection — including the system collections nothing else lists — plus account-wide duplicate and broken-link counts.
A workflow step names the app and the action, and the editor fills in the
connection when you pick one. This is the Step shape from the
workflow spec, carrying Raindrop.io's real ids.
{
"manifestVersion": "2",
"name": "raindrop-example",
"steps": [
{
"id": "collaborator-role-update",
"uses": {
"app": "io.w6w.raindrop",
"action": "collaborator-role-update",
"connection": "conn_YOUR_CONNECTION_ID"
},
"with": {
"id": "<id>",
"userId": "<userId>",
"role": "<role>"
}
}
]
}collaborator-role-update backup-create backup-list collection-children-list collection-clean-empty +34 more actions available
Every app-specific value here is a blank you have to fill in. An
app action is reached through the connection that authenticates it, so the
address is a connection id, not the app id — and connections belong to your account,
so a public page cannot know yours. Create one for Raindrop.io, then fill in
the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the
parameters that action declares. The call itself is real — the shape is transcribed
from the studio's own snippet builder, which prints the same kind of blanks — but
nothing in it is specific to Raindrop.io. The Workflow tab is where this app's
real ids are.
npm install @w6w/sdkyarn add @w6w/sdkpnpm add @w6w/sdkdeno add npm:@w6w/sdkimport { W6wClient, isActionRun } from "@w6w/sdk";
// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();
const envelope = await client.run({
urn: "conn_YOUR_CONNECTION_ID",
action: "raindrop-create",
payload: {
link: "<value>",
// title: "<value>",
// excerpt: "<value>",
// note: "<value>",
// tags: "<value>",
// collectionId: "<value>",
// important: "<value>",
// pleaseParse: "<value>",
// type: "<value>",
// cover: "<value>",
// order: "<value>",
},
});
if (isActionRun(envelope)) console.log(envelope.value); npm install -g @w6w/cli w6w run conn_YOUR_CONNECTION_ID --action raindrop-create --payload '{"link":"<value>"}' Give an AI agent Raindrop.io — without giving it Raindrop.io's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.
One tool call{
"name": "w6w_invoke",
"arguments": {
"ref": "app:io.w6w.raindrop#collaborator-role-update",
"input": {
"id": "<id>",
"userId": "<userId>",
"role": "<role>"
}
}
}
Every tool names its target with a single ref. The
app: form above doesn't name a connection at all — the
host resolves which of the caller's Raindrop.io connections to sign
with, and refuses rather than guesses when the answer is ambiguous.
The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.
Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.
Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.
Raindrop.io's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.
The MCP surface is part of the hosted platform. Raindrop.io itself is MIT, and the runtime that executes it is source-available (FSL).
Raindrop.io declares its own checks, so its health is a property of the app rather than something the host guesses at.
Better Stack status page for status.raindrop.io: the aggregate state plus a state per component (Website, API, Web app, Search, Thumbnails). Unauthenticated and unsigned.
Request-rate headroom from the X-RateLimit-* response headers (120 requests/minute per user) and the monthly file-upload allowance from files.used / files.size, both read from one GET /rest/v1/user.