Raindrop.io recently released Stella, an AI assistant for searching, organising, and summarising bookmarks. I’ve been using it to work through nearly 18 years of saved links, and the experience of chatting with my bookmark archive has been surprisingly great. In some situations, it has even replaced mindless doomscrolling, especially in the little moments like waiting in a supermarket queue.
At first I was using Stella for simple library maintenance; cleaning up duplicate tags, fixing spelling mistakes, merging related tags, and dealing with the sheer inertia of a tag collection that has been accreting since del.icio.us. Lately, though, I’ve been getting more ambitious: processing my read-but-unsorted bookmarks and moving the good ones into my public feed at links.thejaymo.net.
After a lot of trial and error with batch processing, I realised the best approach was to call Raindrop’s MCP tool names directly using the public API documentation.
So below I’m sharing two versions of the prompt I ended up with. This prompt uses my own Raindrop setup, including collection names like thejaymo, my preferred bookmark note style, and the rules I use for deciding what goes into my public links feed. You’ll need to swap in your own collection names, tag, and review criteria before using it yourself.
Both process five oldest bookmarks at a time, stage the proposed changes for review, and let you confirm everything before updating your library. One is a heavier, more explicit prompt with plenty of guard rails; the other is a shorter, lighter version that is less prescriptive.
If you found this page looking for a Raindrop.io Stella prompt, an MCP example, or a better workflow for organising bookmarks, this should be a useful place to start.
Heavy Prompt
UPDATE – 26 April 26: Update to specify API feature names in addition to the MCP tool calling, to make the prompt more reliable and robust.
UPDATE – 7 May 26: Update to Phase 5+6 to make appearance of user facing Approve button in the app UI more reliable in certain circumstances.
UPDATE – 20 May 26: Removes Phase 6. Phase 5 updated to instruct Stella to process prepared bookmarks sequentially rather than update in a single payload. Improves updating bookmarks reliability. – V5
Stella Bookmark Workflow PromptUse the MCP bookmark tools to complete this workflow from discovery through preview. Do not apply changes until I explicitly confirm. ObjectiveFind the 5 oldest bookmarks in my Raindrop Unsorted collection. Treat those bookmarks as the fixed working set for this run. Analyse each bookmark individually, propose note, tag, and collection updates, then show one combined preview and wait for confirmation. ToolsUse only: find_bookmarks fetch_bookmark_content find_tags find_collections update_bookmarks Hard constraints Do not call update_bookmarks before explicit confirmation. Do not fetch content for more than one bookmark at a time. Do not fetch all bookmark contents up front. Do not add, replace, reorder, or mutate bookmarks in the working set unless I explicitly ask. Preserve discovery order through preview and update. Treat each bookmark as a sealed unit: do not compare bookmarks or mix passages, notes, tags, titles, URLs, or collection decisions across bookmarks. Never add quotation marks around extracted passages. Flagged changes require explicit confirmation by bookmark number and item. Internal stateMaintain: working_set: fixed bookmarks from Phase 1 tag_vocabulary: existing tags from find_tags target_collection: verified thejaymo collection and its _id proposals: one stored proposal per bookmark skipped: bookmark indexes excluded by user flagged: proposed changes requiring explicit confirmationDo not mutate working_set. Phase 1 — Establish working setCall find_bookmarks once using Raindrop API semantics: collectionId: -1 sort: created perpage: 5 page: 0This means: collectionId: -1 = system Unsorted collection sort: created = created date ascending / oldest first perpage: 5 = return 5 bookmarksDo not use collection: unsorted, limit, or sort: oldest first unless the tool explicitly maps those aliases to the Raindrop fields above.Store the returned bookmarks as immutable working_set, preserving returned order. If fewer than 5 are returned, use only those.Each item must retain: index number bookmark id title URL, if available existing note, if available current tags, if available current collection, if availableTitles in previews must come from working_set metadata, not fetched page content. Phase 2 — Preflight vocabularyBefore analysing content: Call find_tags once for the existing tag vocabulary. Call find_collections once to verify thejaymo exists and record its _id.If thejaymo does not exist, continue analysing but mark every collection action as:Collection action: ⚠️ Flagged for review — collection thejaymo was not foundDo not create collections unless I explicitly ask.During analysis, use existing tags wherever possible. If unsure whether a subject tag exists, call find_tags with a targeted query for that bookmark’s concrete subject. Phase 3 — Analyse bookmarks sequentiallyProcess bookmarks in working_set order.For each bookmark, finish all steps before fetching the next bookmark: Reset temporary passage, note, tag, collection, and flag variables. Call fetch_bookmark_content for this bookmark only. Read only this bookmark’s content. Extract one key passage. Prepare the note field preview. Propose 3 to 7 tags. Decide the collection action. Store the proposal keyed by bookmark index. Move to the next bookmark.Each proposal must include: index bookmark_id title url key_passage note_field_preview proposed_tags collection_action flagged_items Key passage rulesExtract exactly one key passage per bookmark.The passage must: be contiguous text from that bookmark only preserve exact wording be no more than 100 words preferably be a full paragraph contain no quotation marks added by you remove leading or trailing quote/block formatting only if it is source formattingPrefer the strongest buried passage over the obvious lede, in this order: counter-intuitive beat thesis sentence or paragraph sharp statistic or data anchor buried ironyIf no usable passage exists, set:Key passage: ⚠️ No usable passage found — [reason]Do not invent or substitute content. Note rulesPrepare the note update for the current bookmark only.If a key passage exists: put the passage at the top do not paraphrase it do not wrap it in quotation marks if the existing note is empty, the new note is just the passage if the existing note contains text, prepend the passage, then one blank line, then preserve the existing note exactlyIf no usable passage exists, use an article subtitle only if appropriate; otherwise leave the existing note unchanged and flag the note update.Do not write the note update until confirmation. Tag rulesAsk: what is this bookmark materially about?Propose 3 to 7 tags in this priority order: concrete subject close subject broader subject lens/contextUse existing tags wherever possible. Precise subject tags beat loose general tags, even if the precise tag has lower usage. High-count tags are tie-breakers, not replacements for the subject.Do not omit the concrete subject in favour of abstract tags.Only propose a new tag if no suitable existing tag exists. Mark it:#new-tag ⚠️ new tag for reviewUse lowercase, hyphenated style where appropriate. Collection rulesDefault:Collection action: Move to thejaymoWhen applying this move, use the verified thejaymo collection _id as:collection: { "$id": target_collection._id }Flag the collection action instead if the bookmark is: highly personal or private sensitive paywalled with no usable excerpt too time-sensitive to age well unsuitable for public curation for any clear reasonUse:Collection action: ⚠️ Flagged for review — [reason] Phase 4 — Combined previewAfter all proposals are stored, show one combined preview.Do not apply changes yet.Do not call update_bookmarks yet.Use this exact format for each bookmark: Bookmark nTitle: title copied exactly from working_setKey passage: exact passage, maximum 100 words, no quotation marksTags: #tag1 #tag2 #tag3Note field preview: exact text that will be written to the note fieldCollection action: Move to thejaymo OR flagged actionIf title is missing, use:Title: ⚠️ Missing bookmark title — [URL or bookmark id]After all preview blocks, output exactly:Confirm? Reply yes all to apply everything, no all to cancel, skip [n] to exclude a bookmark, or [n] edit [change] to amend a specific bookmark. Phase 5 — Confirmation and applyValid commands only: yes all, no all, skip [n], [n] edit [change],yes all + [n] [change]. Treat ambiguous replies (yes, looks good,go ahead, do it) as invalid; ask for an exact command.Applying = calling update_bookmarks. The client's native approval promptappears as a result of that call; it is not a separate step to request orwait for. So on any apply command, calling update_bookmarks is your firstaction, before any prose; do not stall or hand back beforehand. yes all: apply proposals strictly one at a time, in working_set order. For each: call update_bookmarks for that one bookmark, wait for the tool result, then proceed to the next. Never emit more than one update_bookmarks call before its result returns. After the last, report what changed. no all: change nothing, call nothing. skip [n]: drop bookmark n, reshow the combined preview. [n] edit [change]: revise bookmark n's proposal only, reshow the preview. yes all + [n] [change]: amend bookmark n's proposal, then proceed as yes all.yes all excludes flagged collection actions, flagged note updates, and newtags; each needs separate confirmation by bookmark number and item.
Shorter Prompt
Stella Bookmark Workflow PromptUse the MCP bookmark tools to complete this workflow from discovery through preview. Do not apply changes until I explicitly confirm. ObjectiveFind the 5 oldest bookmarks in my Raindrop Unsorted collection. Treat those bookmarks as the fixed working set for this run. Analyse each bookmark individually, propose note, tag, and collection updates, then show one combined preview and wait for confirmation. ToolsUse only: find_bookmarks fetch_bookmark_content find_tags find_collections update_bookmarks Hard constraints Do not call update_bookmarks before explicit confirmation. Do not fetch content for more than one bookmark at a time. Do not fetch all bookmark contents up front. Do not add, replace, reorder, or mutate bookmarks in the working set unless I explicitly ask. Preserve discovery order through preview and update. Treat each bookmark as a sealed unit: do not compare bookmarks or mix passages, notes, tags, titles, URLs, or collection decisions across bookmarks. Never add quotation marks around extracted passages. Flagged changes require explicit confirmation by bookmark number and item. Internal stateMaintain: working_set: fixed bookmarks from Phase 1 tag_vocabulary: existing tags from find_tags target_collection: verified thejaymo collection and its _id proposals: one stored proposal per bookmark skipped: bookmark indexes excluded by user flagged: proposed changes requiring explicit confirmationDo not mutate working_set. Phase 1 — Establish working setCall find_bookmarks once using Raindrop API semantics: collectionId: -1 sort: created perpage: 5 page: 0This means: collectionId: -1 = system Unsorted collection sort: created = created date ascending / oldest first perpage: 5 = return 5 bookmarksDo not use collection: unsorted, limit, or sort: oldest first unless the tool explicitly maps those aliases to the Raindrop fields above.Store the returned bookmarks as immutable working_set, preserving returned order. If fewer than 5 are returned, use only those.Each item must retain: index number bookmark id title URL, if available existing note, if available current tags, if available current collection, if availableTitles in previews must come from working_set metadata, not fetched page content. Phase 2 — Preflight vocabularyBefore analysing content: Call find_tags once for the existing tag vocabulary. Call find_collections once to verify thejaymo exists and record its _id.If thejaymo does not exist, continue analysing but mark every collection action as:Collection action: ⚠️ Flagged for review — collection thejaymo was not foundDo not create collections unless I explicitly ask.During analysis, use existing tags wherever possible. If unsure whether a subject tag exists, call find_tags with a targeted query for that bookmark’s concrete subject. Phase 3 — Analyse bookmarks sequentiallyProcess bookmarks in working_set order.For each bookmark, finish all steps before fetching the next bookmark: Reset temporary passage, note, tag, collection, and flag variables. Call fetch_bookmark_content for this bookmark only. Read only this bookmark’s content. Extract one key passage. Prepare the note field preview. Propose 3 to 7 tags. Decide the collection action. Store the proposal keyed by bookmark index. Move to the next bookmark.Each proposal must include: index bookmark_id title url key_passage note_field_preview proposed_tags collection_action flagged_items Key passage rulesExtract exactly one key passage per bookmark.The passage must: be contiguous text from that bookmark only preserve exact wording be no more than 100 words preferably be a full paragraph contain no quotation marks added by you remove leading or trailing quote/block formatting only if it is source formattingPrefer the strongest buried passage over the obvious lede, in this order: counter-intuitive beat thesis sentence or paragraph sharp statistic or data anchor buried ironyIf no usable passage exists, set:Key passage: ⚠️ No usable passage found — [reason]Do not invent or substitute content. Note rulesPrepare the note update for the current bookmark only.If a key passage exists: put the passage at the top do not paraphrase it do not wrap it in quotation marks if the existing note is empty, the new note is just the passage if the existing note contains text, prepend the passage, then one blank line, then preserve the existing note exactlyIf no usable passage exists, use an article subtitle only if appropriate; otherwise leave the existing note unchanged and flag the note update.Do not write the note update until confirmation. Tag rulesAsk: what is this bookmark materially about?Propose 3 to 7 tags in this priority order: concrete subject close subject broader subject lens/contextUse existing tags wherever possible. Precise subject tags beat loose general tags, even if the precise tag has lower usage. High-count tags are tie-breakers, not replacements for the subject.Do not omit the concrete subject in favour of abstract tags.Only propose a new tag if no suitable existing tag exists. Mark it:#new-tag ⚠️ new tag for reviewUse lowercase, hyphenated style where appropriate. Collection rulesDefault:Collection action: Move to thejaymoWhen applying this move, use the verified thejaymo collection _id as:collection: { "$id": target_collection._id }Flag the collection action instead if the bookmark is: highly personal or private sensitive paywalled with no usable excerpt too time-sensitive to age well unsuitable for public curation for any clear reasonUse:Collection action: ⚠️ Flagged for review — [reason] Phase 4 — Combined previewAfter all proposals are stored, show one combined preview.Do not apply changes yet.Do not call update_bookmarks yet.Use this exact format for each bookmark: Bookmark nTitle: title copied exactly from working_setKey passage: exact passage, maximum 100 words, no quotation marksTags: #tag1 #tag2 #tag3Note field preview: exact text that will be written to the note fieldCollection action: Move to thejaymo OR flagged actionIf title is missing, use:Title: ⚠️ Missing bookmark title — [URL or bookmark id]After all preview blocks, output exactly:Confirm? Reply [y] yes all to apply everything, no all to cancel, skip [n] to exclude a bookmark, or [n] edit [change] to amend a specific bookmark. Phase 5 — ConfirmationOnly these commands are valid: [y] yes all no all skip [n] [n] edit [change] yes all + [n] [change]Ambiguous replies such as yes, looks good, go ahead, update them, or do it must not trigger updates.Behaviour: [y] yes all: apply all approved, unskipped, unflagged proposals no all: cancel without changing anything skip [n]: exclude that bookmark, then show the updated combined preview [n] edit [change]: revise only that bookmark’s stored proposal, then show the combined preview again yes all + [n] [change]: apply all approved, unskipped, unflagged proposals, including the stated amendment to bookmark nyes all does not approve flagged collection actions, flagged note updates, or new tags. Flagged items require explicit confirmation by bookmark number and item. Phase 6 — Apply approved changesOnly after valid confirmation, call update_bookmarks.For each approved bookmark, apply only its approved changes: update the note field with that bookmark’s approved note text update tags with that bookmark’s approved tags move it to thejaymo only if approvedDo not update skipped bookmarks.Do not apply unconfirmed flagged changes.Do not modify anything outside the fixed working set.If notes or tag sets differ, update bookmarks separately or group only bookmarks whose approved payloads are exactly identical.After applying changes, return a concise summary of updated, skipped, and still-flagged bookmarks.

Leave a Reply