Readwise
Set up, OAuth-authenticate, and use the Readwise MCP server (mcp2.readwise.io/mcp) via the mcporter CLI. Use when a user asks to connect/auth Readwise MCP, reset or troubleshoot OAuth login (stale redirect ports, invalid state), verify the connection, or run Readwise tools through mcporter.
Like a lobster shell, security has layers — review code before you run it.
License
SKILL.md
Readwise MCP (mcporter)
This skill is intentionally kept short.
High-level workflows live in: skills/readwise-mcp/RECIPES.md.
Preflight
command -v mcporter && mcporter --version
Ensure you’re in the Clawdbot workspace root where config/mcporter.json lives.
Quick setup (first time)
# Add the server to the *project* config
mcporter config add readwise https://mcp2.readwise.io/mcp \
--auth oauth \
--description "Readwise MCP"
# Start OAuth login (will open a browser)
mcporter auth readwise --reset
Verify it works
mcporter list readwise --output json
mcporter call readwise.reader_list_tags --args '{}' --output json
Troubleshooting OAuth (common failure modes)
“Invalid OAuth state”
Cause: you approved in a stale browser tab (old auth attempt / old port).
Fix:
- Close old Readwise OAuth tabs.
- Re-run:
mcporter auth readwise --reset
Redirecting to an old port even after reset
Cause: browser session reuse.
Fix:
- Use Incognito/Private window.
- Or copy the new authorize URL into a fresh profile.
“Waiting for browser approval…” but you already approved
You must land on:
http://127.0.0.1:<PORT>/callback?code=...&state=...
If the redirect hits a different port, mcporter will keep waiting.
To find the expected port:
cat ~/.mcporter/credentials.json
Look for redirect_uris and ensure the browser redirect matches exactly.
Using the server
General pattern:
mcporter call readwise.<tool_name> --args '{...}' --output json
Notes:
--argsmust be valid JSON (prefer single quotes in shell).- For Reader locations:
new= inbox,later,shortlist,archive,feed(RSS only).
Tool index (what’s available)
readwise_search_highlights— search highlights (vector + optional field filters)reader_search_documents— search Reader documents (hybrid search)reader_create_document— save a URL or HTML into Readerreader_list_documents— list newest documents (and paginate)reader_get_document_details— fetch a document’s full Markdown contentreader_get_document_highlights— fetch highlights for a documentreader_list_tags— list tag namesreader_add_tags_to_document/reader_remove_tags_from_documentreader_add_tags_to_highlight/reader_remove_tags_from_highlightreader_set_document_notes/reader_set_highlight_notesreader_move_document— move between inbox/later/shortlist/archivereader_edit_document_metadata— edit metadata (includingseen)reader_export_documents— export Reader docs as a ZIP
Quick examples (most-used)
1) Search highlights (idea-first / semantic)
mcporter call readwise.readwise_search_highlights \
--args '{"vector_search_term":"incentives", "limit": 10}' \
--output json
2) Search Reader documents (hybrid)
mcporter call readwise.reader_search_documents \
--args '{"query":"MCP", "limit": 10}' \
--output json
3) List newest docs in inbox (thin fields)
mcporter call readwise.reader_list_documents \
--args '{
"limit": 10,
"location": "new",
"response_fields":["title","author","url","category","location","created_at","tags"]
}' \
--output json
4) Get a document’s full content (markdown)
mcporter call readwise.reader_get_document_details \
--args '{"document_id":"<id>"}' \
--output json
Recipes
See: skills/readwise-mcp/RECIPES.md
Recipe names:
- Triage inbox (or Later fallback)
- Feed digest (last day/week) + mark as seen
- Quiz the user on a recently read archived document
- Recommendations (build a reading profile → pick next best doc)
- Library organizer (tagging + inbox-zero)
Shortlist semantics (important)
Readwise supports a shortlist location, but many people use it differently.
Default assumption (most users): inbox / later / archive
- “Shortlisting” means: add a
shortlisttag AND move the doc tolater.
Alternative setup: later / shortlist / archive
- “Shortlisting” means: move the doc to location=
shortlist.
So: before applying any shortlisting action, confirm which setup the user uses. If unknown, assume the default (tag + move to later).
Safety / defaults
When a workflow proposes writes (tagging, moving, setting notes/seen), default to:
- show a read-only plan first (counts + which docs)
- ask for approval before applying changes
Files
2 totalComments
Loading comments…
