readwise-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@readwise-mcpSave https://example.com/article to my reading list."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
readwise-mcp
An MCP server that exposes Readwise and Reader operations as tools for AI agents — Claude Code, Claude Desktop, or any MCP client.
Built on readwise-plus. This server is a thin, agent-friendly layer over
readwise-plus, a comprehensive async Python SDK for the Readwise (v2) and Reader (v3) APIs.readwise-plusdoes the real work — auth, pagination, typed models, retries — andreadwise-mcpmaps it to MCP tools. If you want to script Readwise directly in Python, usereadwise-plus; if you want an agent to do it for you, use this.
It gives an agent nine tools for saving, searching, reading, and organizing your Reader documents and Readwise highlights — so you can ask it to "find that article I archived last week" or "save this URL to my reading list" and have it actually do it.
Requirements
Python 3.12+
A Readwise access token — get one at https://readwise.io/access_token
uv(recommended) for the zero-installuvxlaunch path
Related MCP server: Reader MCP Server
Authentication
The server reads READWISE_API_KEY from the environment, falling back to a
READWISE_API_KEY= line in ~/.env. Provide it either way — via the MCP client
config (below), an exported shell variable, or ~/.env. See .env.example.
Install & register
Claude Code
claude mcp add readwise --env READWISE_API_KEY=your-token -- uvx readwise-mcp(Omit --env ... if you already keep READWISE_API_KEY in ~/.env.)
Any MCP client (Claude Desktop, etc.)
Add this to the client's MCP server config (e.g. claude_desktop_config.json or ~/.claude.json):
{
"mcpServers": {
"readwise": {
"command": "uvx",
"args": ["readwise-mcp"],
"env": { "READWISE_API_KEY": "your-token" }
}
}
}uvx readwise-mcp fetches and runs the latest published version on demand — no manual install step. Prefer a pinned install? Use uv tool install readwise-mcp and point command at readwise-mcp.
From source
git clone https://github.com/EvanOman/readwise-mcp
cd readwise-mcp
uv sync --devThen register the local checkout:
{
"mcpServers": {
"readwise": {
"command": "uv",
"args": ["run", "--project", "/absolute/path/to/readwise-mcp", "python", "-m", "readwise_mcp"],
"env": { "READWISE_API_KEY": "your-token" }
}
}
}Verify it connected: claude mcp list should show readwise: ... Connected.
How to use
Once the server is registered, you don't call the tools directly — you talk to your agent in plain language and it picks the right tool. Some things you can ask:
You say… | The agent uses… |
"Save https://example.com/post to my reading list and tag it |
|
"Find the article about vector databases I archived last week." |
|
"Summarize the top 3 unread articles in my inbox." |
|
"Export my highlights from Thinking, Fast and Slow." |
|
"Archive that document." / "Move it to my reading list." |
|
"Save this quote as a highlight under Deep Work." |
|
Walkthrough: "find and read that article"
You: Find the article I saved about the OpenAI harness engineering post and give me the key points.
Behind the scenes the agent:
Calls
search_documents(query="harness engineering")— a title substring search across your library — and gets back compact summaries (id, title, author, location), no body text.Picks the best match and calls
get_document(document_id=...)to pull the full HTML content.Reads the content and answers you.
Notes on behavior
Search is title-substring, client-side.
queryfilters on the document title, not full text. To narrow the set first, combine it withlocation(new/later/archive),category, ortags.get_documentis the only call that returns full content.search_documentsdeliberately returns summaries so the agent can scan cheaply, then fetch the one it wants.Uploads:
save_to_readercan save a plain URL, or upload your own HTML by passinghtml=alongside a syntheticurl(used as the unique id).Errors are data, not exceptions. Tools return
{"error": "..."}so the agent can read the problem and recover rather than crashing.Deletes are permanent.
delete_documentcannot be undone.Documents saved through this server are tagged
saved_using="readwise-mcp"in Reader.
Tools
Documents (Reader v3)
Tool | Description |
| Save a URL to Reader, or upload HTML content with a synthetic URL. Supports title, author, summary, tags, notes, category, and location overrides. |
| List/filter documents by location (inbox/later/archive), category, tags, updated_after. Client-side title substring search via |
| Fetch a single document by ID with full HTML content. |
| Update metadata, move between locations (inbox/later/archive), or replace tags. |
| Permanently delete a document. |
Highlights (Readwise v2)
Tool | Description |
| List highlights with filters (book_id, updated_after, text query). |
| Bulk export highlights grouped by book — more efficient for pulling all highlights from multiple books. |
| Push a new highlight to Readwise. Auto-creates the book/source if it does not exist. |
Books (Readwise v2)
Tool | Description |
| List books/sources with category, source, and title query filters. |
Design
Tools are shaped for agent ergonomics: a small set of well-composed tools rather than a thin wrapper per endpoint. Results are returned as compact JSON strings, and errors come back as {"error": ...} payloads instead of exceptions, so an agent can read and react to them. All Readwise access goes through the readwise-plus SDK's async client.
Development
just fc # format, lint-fix, lint, type-check, test (run before every commit)
just test # unit tests (mocked HTTP, no network)
just test-live # live tests against the real Readwise API (requires READWISE_API_KEY)
just ci # what CI runs: lint, format-check, type, testStack: uv · ruff · ty · pytest · just.
Releases are automated with release-please: merging the release PR tags a version and publishes to PyPI via trusted publishing.
License
MIT — see LICENSE. Built on readwise-plus, also MIT.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/EvanOman/readwise-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server