Raindrop.io Stella Prompts for Batch Processing Bookmarks

Using Raindrop.io’s Stella assistant and MCP tools to tame 18 years of bookmarks.

11–17 minutes
Featured image for Raindrop.io Stella Prompts for Batch Processing Bookmarks - Bold white text overlaid on a dark background of monospaced code-like instructions.

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-heavy-thejaymo-v5
# Stella Bookmark Workflow Prompt
Use the MCP bookmark tools to complete this workflow from discovery through preview. Do not apply changes until I explicitly confirm.
## Objective
Find 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.
## Tools
Use 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 state
Maintain:
- `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 confirmation
Do not mutate `working_set`.
## Phase 1 — Establish working set
Call `find_bookmarks` once using Raindrop API semantics:
- `collectionId: -1`
- `sort: created`
- `perpage: 5`
- `page: 0`
This means:
- `collectionId: -1` = system Unsorted collection
- `sort: created` = created date ascending / oldest first
- `perpage: 5` = return 5 bookmarks
Do 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 available
Titles in previews must come from `working_set` metadata, not fetched page content.
## Phase 2 — Preflight vocabulary
Before analysing content:
1. Call `find_tags` once for the existing tag vocabulary.
2. 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 found`
Do 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 sequentially
Process bookmarks in `working_set` order.
For each bookmark, finish all steps before fetching the next bookmark:
1. Reset temporary passage, note, tag, collection, and flag variables.
2. Call `fetch_bookmark_content` for this bookmark only.
3. Read only this bookmark’s content.
4. Extract one key passage.
5. Prepare the note field preview.
6. Propose 3 to 7 tags.
7. Decide the collection action.
8. Store the proposal keyed by bookmark index.
9. 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 rules
Extract 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 formatting
Prefer the strongest buried passage over the obvious lede, in this order:
1. counter-intuitive beat
2. thesis sentence or paragraph
3. sharp statistic or data anchor
4. buried irony
If no usable passage exists, set:
`Key passage: ⚠️ No usable passage found — [reason]`
Do not invent or substitute content.
## Note rules
Prepare 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 exactly
If 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 rules
Ask: what is this bookmark materially about?
Propose 3 to 7 tags in this priority order:
1. concrete subject
2. close subject
3. broader subject
4. lens/context
Use 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 review`
Use lowercase, hyphenated style where appropriate.
## Collection rules
Default:
`Collection action: Move to thejaymo`
When 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 reason
Use:
`Collection action: ⚠️ Flagged for review — [reason]`
## Phase 4 — Combined preview
After 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 [n]
Title: [title copied exactly from working_set]
Key passage: [exact passage, maximum 100 words, no quotation marks]
Tags: #tag1 #tag2 #tag3
Note field preview: [exact text that will be written to the note field]
Collection action: [Move to thejaymo OR flagged action]
If 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 apply
Valid 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 prompt
appears as a result of that call; it is not a separate step to request or
wait for. So on any apply command, calling `update_bookmarks` is your first
action, 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 new
tags; each needs separate confirmation by bookmark number and item.

Shorter Prompt

stella-thejaymo-quickstart
# Stella Bookmark Workflow Prompt
Use the MCP bookmark tools to complete this workflow from discovery through preview. Do not apply changes until I explicitly confirm.
## Objective
Find 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.
## Tools
Use 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 state
Maintain:
- `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 confirmation
Do not mutate `working_set`.
## Phase 1 — Establish working set
Call `find_bookmarks` once using Raindrop API semantics:
- `collectionId: -1`
- `sort: created`
- `perpage: 5`
- `page: 0`
This means:
- `collectionId: -1` = system Unsorted collection
- `sort: created` = created date ascending / oldest first
- `perpage: 5` = return 5 bookmarks
Do 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 available
Titles in previews must come from `working_set` metadata, not fetched page content.
## Phase 2 — Preflight vocabulary
Before analysing content:
1. Call `find_tags` once for the existing tag vocabulary.
2. 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 found`
Do 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 sequentially
Process bookmarks in `working_set` order.
For each bookmark, finish all steps before fetching the next bookmark:
1. Reset temporary passage, note, tag, collection, and flag variables.
2. Call `fetch_bookmark_content` for this bookmark only.
3. Read only this bookmark’s content.
4. Extract one key passage.
5. Prepare the note field preview.
6. Propose 3 to 7 tags.
7. Decide the collection action.
8. Store the proposal keyed by bookmark index.
9. 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 rules
Extract 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 formatting
Prefer the strongest buried passage over the obvious lede, in this order:
1. counter-intuitive beat
2. thesis sentence or paragraph
3. sharp statistic or data anchor
4. buried irony
If no usable passage exists, set:
`Key passage: ⚠️ No usable passage found — [reason]`
Do not invent or substitute content.
## Note rules
Prepare 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 exactly
If 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 rules
Ask: what is this bookmark materially about?
Propose 3 to 7 tags in this priority order:
1. concrete subject
2. close subject
3. broader subject
4. lens/context
Use 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 review`
Use lowercase, hyphenated style where appropriate.
## Collection rules
Default:
`Collection action: Move to thejaymo`
When 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 reason
Use:
`Collection action: ⚠️ Flagged for review — [reason]`
## Phase 4 — Combined preview
After 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 [n]
Title: [title copied exactly from working_set]
Key passage: [exact passage, maximum 100 words, no quotation marks]
Tags: #tag1 #tag2 #tag3
Note field preview: [exact text that will be written to the note field]
Collection action: [Move to thejaymo OR flagged action]
If 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 — Confirmation
Only 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 `n`
`yes 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 changes
Only 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 approved
Do 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 Comment 💬

Click to Expand

Leave a Reply

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)

Never Miss a Post 📨

Subscribe to receive new posts straight to your inbox!

Join 1,484 other subscribers.

Continue reading

Discover more from thejaymo.net

Subscribe now to keep reading and get access to the full archive.

Continue reading