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.
Scanned 9/7/2026
Install to Claude Code
npx -y skills add Demerzels-lab/elsamultiskillagent --skill readwise-mcp --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Readwise Mcp?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/demerzels-lab-readwise-mcp)More formats (shields.io, HTML) on the badges page.
---
name: readwise-mcp
description: 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.
---
# Readwise MCP (mcporter)
This skill is intentionally kept **short**.
High-level workflows live in: `skills/readwise-mcp/RECIPES.md`.
## Preflight
```bash
command -v mcporter && mcporter --version
```
Ensure you’re in the Clawdbot workspace root where `config/mcporter.json` lives.
## Quick setup (first time)
```bash
# 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
```bash
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:
```bash
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:
```bash
cat ~/.mcporter/credentials.json
```
Look for `redirect_uris` and ensure the browser redirect matches exactly.
## Using the server
General pattern:
```bash
mcporter call readwise.<tool_name> --args '{...}' --output json
```
Notes:
- `--args` must 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 Reader
- `reader_list_documents` — list newest documents (and paginate)
- `reader_get_document_details` — fetch a document’s full Markdown content
- `reader_get_document_highlights` — fetch highlights for a document
- `reader_list_tags` — list tag names
- `reader_add_tags_to_document` / `reader_remove_tags_from_document`
- `reader_add_tags_to_highlight` / `reader_remove_tags_from_highlight`
- `reader_set_document_notes` / `reader_set_highlight_notes`
- `reader_move_document` — move between inbox/later/shortlist/archive
- `reader_edit_document_metadata` — edit metadata (including `seen`)
- `reader_export_documents` — export Reader docs as a ZIP
## Quick examples (most-used)
### 1) Search highlights (idea-first / semantic)
```bash
mcporter call readwise.readwise_search_highlights \
--args '{"vector_search_term":"incentives", "limit": 10}' \
--output json
```
### 2) Search Reader documents (hybrid)
```bash
mcporter call readwise.reader_search_documents \
--args '{"query":"MCP", "limit": 10}' \
--output json
```
### 3) List newest docs in inbox (thin fields)
```bash
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)
```bash
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 `shortlist` tag AND move the doc to `later`.
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
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!