Raindrop bookmark curator
Curate Raindrop.io bookmarks by scanning recent or state-tracked items, extracting public content, renaming titles, updating bookmark notes/descriptions, adding tags, sorting into collections, optionally writing Markdown/Obsidian notes, and maintaining a safe state file.From its SKILL.md
npx -y skills add mike623/agent-skills --skill raindrop-bookmark-curatorAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
10.7 KB, ~2.5k tokens by cl100k_base, as published. Nobody here has run it
Raindrop Bookmark Curator
Use this skill when the user wants an agent to organize Raindrop.io bookmarks, especially saved social posts, research links, AI/tool discoveries, reading lists, or inbox-style collections.
The core job is to turn messy saved bookmarks into useful library entries:
- content-based title;
- concise bookmark note/description;
- useful tags;
- appropriate collection;
- optional Markdown/Obsidian note;
- durable state so future runs process only deltas.
Public-safe constraints
- Do not commit OAuth tokens, API keys, cookies, real Raindrop export/state files, generated private notes, personal collection IDs, or private filesystem paths.
- Use placeholders such as
<vault>,<state-file>,<collection-id>, and<bookmark-id>in reusable templates. - Never delete bookmarks or collections unless the user explicitly asks and confirms the exact IDs.
- Never bypass login walls, paywalls, CAPTCHAs, private posts, or account-only comments.
- For social posts, extract only publicly visible metadata/content. Mark inaccessible comments/media as
not publicly visible / not extracted. - Do not invent post text, comments, links, engagement counts, claims, or summaries.
- Verify every mutation by reading the bookmark back from Raindrop.
Prerequisites
Preferred interface: Raindrop's Streamable HTTP MCP endpoint via mcporter:
npx -y mcporter list \
--http-url https://api.raindrop.io/rest/v2/ai/mcp \
--name raindrop \
--schema --json
On first use, the tool may require OAuth in the user's browser. Do not ask the user for passwords or tokens.
Standard workflow
-
Establish scope
- Recent/delta scan: usually
find_bookmarkswithhas_tags,collection_ids, recency, or limit. - Historical reprocess: read bookmark IDs from the state file and fetch exactly those IDs.
- Single item: fetch the provided bookmark ID or URL.
- Recent/delta scan: usually
-
Load or create state
- Use
templates/raindrop-state.example.jsonas the shape. - If missing/invalid, initialize safely with empty arrays/objects.
- Preserve existing state keys; add new metadata rather than overwriting unrelated state.
- Use
-
Fetch Raindrop data
- Use
find_bookmarksfor lists and current title/tags/collection. - Use
fetch_bookmark_contentfor the full bookmark payload, including note/description when available.
- Use
-
Extract public content
- Use Raindrop metadata first.
- Use normal web extraction for accessible articles, docs, GitHub repos, product pages, PDFs, etc.
- For Threads/Instagram/X/TikTok-like pages, use browser extraction only when needed and only for public visible content.
- If the page is gated, summarize only metadata that is actually visible.
-
Generate curation metadata
title: concise, searchable, content-based. Avoid raw URLs and social shortcodes.note: 1–2 sentence bookmark description explaining what it is and why it matters.tags: add helpful tags; do not remove existing user tags unless explicitly asked.collection: choose the best match from the configured taxonomy. Create collections only when the user asked for sorting and the needed collection does not already exist.
-
Optional note output
- If requested, write one Markdown note per bookmark.
- Include source metadata, original visible text/excerpt, external links found, external link summaries, useful public comments if available, TL;DR, key ideas, why it matters, and follow-up actions.
- For idea-capture workflows, optionally generate atomic idea cards in a separate folder. Each card should be one transferable idea, source-grounded, and include:
## The idea,## Why it matters,## Try this,## Use when,## Source evidence, and## Related. - Track generated card paths in state as
idea_cards[bookmark_id] = [paths...], and add an## Idea cards generatedsection to the source note.
-
Mutate Raindrop
- Use
update_bookmarksfor title, note/description, collection, and tags. - Never perform delete/merge operations as part of normal curation.
- Use
-
Verify
- Read back with
find_bookmarksfor title, tags, and collection. - Read back with
fetch_bookmark_contentfor note/description. - Report any mismatch or API limitation honestly.
- Read back with
-
Update state
- Add successfully processed IDs only after all required outputs/mutations are verified.
- Store applied title, description, collection name/id, tags, timestamps, and note path if applicable.
- Do not mark failed or partially processed bookmarks as fully processed.
Useful mcporter calls
List tools/schema:
npx -y mcporter list \
--http-url https://api.raindrop.io/rest/v2/ai/mcp \
--name raindrop \
--schema --json
Find newest bookmarks with a tag:
npx -y mcporter call \
--http-url https://api.raindrop.io/rest/v2/ai/mcp \
--name raindrop find_bookmarks \
--args '{"has_tags":["ai"],"limit":50,"sort":"created_desc"}' \
--output json
Find specific historical bookmarks by ID:
npx -y mcporter call \
--http-url https://api.raindrop.io/rest/v2/ai/mcp \
--name raindrop find_bookmarks \
--args '{"bookmark_ids":[123,456],"limit":150}' \
--output json
Fetch full bookmark content/metadata:
npx -y mcporter call \
--http-url https://api.raindrop.io/rest/v2/ai/mcp \
--name raindrop fetch_bookmark_content \
--args '{"bookmark_id":123}' \
--output json
List collections:
npx -y mcporter call \
--http-url https://api.raindrop.io/rest/v2/ai/mcp \
--name raindrop find_collections \
--args '{}' \
--output json
Create missing collections, only when sorting was requested:
npx -y mcporter call \
--http-url https://api.raindrop.io/rest/v2/ai/mcp \
--name raindrop create_collections \
--args '{"create":[{"title":"AI Coding & Developer Tools","description":"AI tools and workflows for coding, repo analysis, prompting, and developer productivity.","parent_id":null}]}' \
--output json
Update a bookmark:
npx -y mcporter call \
--http-url https://api.raindrop.io/rest/v2/ai/mcp \
--name raindrop update_bookmarks \
--args '{"updates":[{"bookmark_ids":[123],"update":{"title":"Clean content-based title","note":"One or two useful sentences describing the bookmark.","collection_id":456,"add_tags":["ai-coding","prompt-engineering"]}}]}' \
--output json
Title rules
Good titles are:
- specific enough to find later;
- short enough to scan;
- based on the content, not the platform slug;
- honest about uncertainty.
Examples:
| Bad original | Better title |
|---|---|
https://www.instagram.com/reel/... | GitReverse — reverse-engineer GitHub repos into prompts |
DZsJpOtgrl | Tiny World Builder — browser voxel/isometric world editor |
Post by @user | ChatGPT RPG simulator GPT collection |
DYjSMxx a | Backend API system-design interview reel |
Description/note rules
Bookmark notes should be concise, useful, and grounded:
Open-source browser-based tiny-world builder with terrain painting, object placement, roads, traffic, save/share/remix/export, and shared-world features. Useful as a reference for game tooling and world-building workflows.
Avoid:
- hype-only copy;
- invented capabilities;
- private comments/media that were not visible;
- long pasted excerpts better stored in a separate Markdown note.
Collection taxonomy pattern
Use a user-provided taxonomy when available. Otherwise propose a small, stable taxonomy and create collections only after the user asks for sorting.
See templates/collection-taxonomy.example.json for a starter taxonomy. Adapt names to the user's domain.
Common AI/bookmark taxonomy:
| Collection | Use for |
|---|---|
| AI Game Development | game agents, simulators, world builders, RPG tools, game-dev workflows |
| AI Coding & Developer Tools | coding agents, repo analysis, prompt engineering, developer productivity |
| Software Engineering & System Design | backend, APIs, architecture, scalability, interviews |
| AI Creative Prompts & Assets | image/video/audio prompts, spritesheets, design assets, creative recipes |
| AI Research & Papers | papers, benchmarks, evals, research threads |
| Product & Startup Ideas | market ideas, product strategy, business references |
Optional Markdown/Obsidian note format
Suggested filename:
YYYY-MM-DD - raindrop-<bookmark_id> - <slug>.md
Suggested frontmatter:
---
source: raindrop
raindrop_bookmark_id: <bookmark_id>
platform: <domain-or-platform>
link: "<url>"
saved_date: "<raindrop-created-date>"
processed_at: "<local-iso-timestamp>"
tags:
- ai
---
Suggested sections:
# <Clean title>
## Source
- Platform/domain:
- Author/account if public:
- Raindrop bookmark ID:
- Link:
- Saved date:
- Tags:
## Original visible post text / bookmark excerpt
> Only quote text actually extracted or visible.
## External links found
- <url>
## External link summaries
### <site/repo/tool>
Grounded summary.
## Useful comments / replies
Not publicly visible / not extracted.
## TL;DR
## Key ideas
## Why it matters
## Follow-up actions
State tracking
Use the state file to avoid duplicate work and maintain an audit trail. Record applied metadata after verification, not before.
Minimum keys:
processed_bookmark_idslast_checked_atprocessed_notescollectionsbookmark_metadata
For each bookmark, store:
last_metadata_reprocessed_atapplied_titleapplied_descriptionapplied_collectionapplied_collection_idapplied_tagsprocessed_noteif a note was written
Batch and delta behavior
- For small batches, process in the current agent session.
- For large batches, split into chunks and use parallel subagents only for extraction/classification. Keep Raindrop mutations in the parent agent so writes are centralized and easier to verify.
- Treat failed extraction, failed mutation, or failed verification as a blocker for that item; leave it out of
processed_bookmark_idsor mark it aspartial.
Final report format
Keep final reports operational and concise:
Processed: <n>
Updated titles/descriptions: <n>
Moved collections: <n>
Collections created: <n>
Notes written: <n>
State file: <path>
Verification: read back <n>/<n> bookmarks successfully
Blockers: <none or list>
When reporting public/shared output, do not include private file paths unless the user is operating locally and needs them.
What ships with it: 5 files
6.1 KB alongside SKILL.md
references/
templates/
- README.md1009 B