Readwise MCP HTTP Server
Enables searching and accessing Readwise highlights and documents through HTTP endpoints using the Model Context Protocol. Provides vector and full-text search capabilities with streaming responses for retrieving reading highlights and notes.
README
Readwise MCP HTTP Server
A Node.js HTTP server that provides proper MCP (Model Context Protocol) over HTTP access to Readwise highlights and documents, using the official @readwise/readwise-mcp module.
Features
- 🔍 Search Highlights: Vector and full-text search through your Readwise highlights (using official Readwise MCP module)
- 📡 Streaming Responses: Real-time streaming of search results
- 🏥 Health Checks: Server health monitoring
- 🔄 Automatic Retries: Built-in retry logic for API failures
- 🛡️ CORS Support: Cross-origin request support
- 🔍 Comprehensive Debugging: Detailed logging for development and troubleshooting
- 🌐 Network Access: Accessible from all network interfaces
- ✅ Official Module: Uses the same tool implementation as the official Readwise MCP module
Installation
- Install dependencies:
npm install
- Create environment file:
cp .env.example .env
- Add your Readwise access token to
.env:
ACCESS_TOKEN=your_readwise_access_token_here
PORT=3000
Usage
Development
npm run dev
Production
npm run build
npm start
Watch Mode
npm run watch
Debug Mode
Enable detailed debugging by setting the DEBUG environment variable:
# Enable debug mode
DEBUG=true npm run dev
# Or set in .env file
DEBUG=true
Debug mode provides detailed logging for:
- Connection attempts
- Request/response details
- Tool execution steps
- API calls to Readwise
- Error details
API Endpoints
MCP Protocol Endpoint
POST /mcp
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_readwise_highlights",
"arguments": {
"vector_search_term": "machine learning"
}
}
}
MCP Streaming Endpoint
POST /mcp/stream
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_readwise_highlights",
"arguments": {
"vector_search_term": "machine learning"
}
}
}
Server Info
GET /mcp/info
Health Check
GET /health
Available Tools
The server provides the same tools as the official Readwise MCP module:
search_readwise_highlights
Search through your Readwise highlights using vector search and full-text queries.
Parameters:
vector_search_term(required): Semantic search term for vector searchfull_text_queries(required): Array of field-specific searches
Note: Both parameters are required. Empty arguments will result in a validation error.
Search Field Types:
document_author- Author of the source documentdocument_title- Title of the source documenthighlight_note- Notes you've added to highlightshighlight_plaintext- The actual highlighted texthighlight_tags- Tags you've applied to highlights
Example Usage
Initialize MCP Connection
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize"
}'
List Available Tools
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/list"
}'
Search Highlights (MCP Protocol)
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "search_readwise_highlights",
"arguments": {
"vector_search_term": "machine learning"
}
}
}'
Stream Search Results (MCP Protocol)
curl -X POST http://localhost:3000/mcp/stream \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "search_readwise_highlights",
"arguments": {
"vector_search_term": "machine learning",
"full_text_queries": [
{
"field_name": "highlight_plaintext",
"search_term": "artificial intelligence"
}
]
}
}
}'
Invalid Arguments Example
# This will return an error because both parameters are required
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 5,
"method": "tools/call",
"params": {
"name": "search_readwise_highlights",
"arguments": {}
}
}'
Response:
{
"jsonrpc": "2.0",
"id": 5,
"error": {
"code": -32602,
"message": "Invalid arguments: Required, Required"
}
}
Environment Variables
ACCESS_TOKEN(required): Your Readwise access tokenPORT(optional): Server port (default: 3000)BASE_URL(optional): Readwise API base URL (default: https://readwise.io)DEBUG(optional): Enable debug logging (set totruefor detailed logs)NODE_ENV(optional): Set todevelopmentto enable debug mode automatically
Network Connectivity
The servers are configured to bind to all network interfaces (0.0.0.0), making them accessible from:
- Localhost:
http://localhost:3000 - Local Network:
http://YOUR_IP_ADDRESS:3000 - Docker:
http://host.docker.internal:3000
To find your server's IP address:
# macOS/Linux
ifconfig | grep "inet " | grep -v 127.0.0.1
# Windows
ipconfig | findstr "IPv4"
Error Handling
The server includes comprehensive error handling:
- Input validation using Zod schemas
- Automatic retry logic for failed API calls
- Proper HTTP status codes
- Detailed error messages
- Comprehensive logging for debugging
Debugging
The server provides extensive debugging capabilities:
Debug Logs
When debug mode is enabled, you'll see detailed logs for:
- Connection tracking: Every incoming request with IP and user agent
- Request processing: Step-by-step MCP request handling
- Tool execution: Detailed tool call processing
- API interactions: Readwise API calls and responses
- Streaming: Real-time streaming progress
- Error details: Full error stack traces and context
Debug Output Example
[2024-01-15T10:30:00.000Z] ℹ️ INFO: Initializing Readwise MCP HTTP Server
[2024-01-15T10:30:00.000Z] 🔍 DEBUG: Port: 3000, Debug: true, NodeEnv: development
[2024-01-15T10:30:00.000Z] 🔗 CONNECTION: POST /mcp from 127.0.0.1
[2024-01-15T10:30:00.000Z] 🔍 DEBUG: Request body: {"jsonrpc":"2.0","id":1,"method":"tools/call"...}
[2024-01-15T10:30:00.000Z] 🔍 DEBUG: Processing MCP method: tools/call
[2024-01-15T10:30:00.000Z] 🔍 DEBUG: Tool call requested: search_readwise_highlights
[2024-01-15T10:30:00.000Z] 🔍 DEBUG: Calling Readwise API: {"vector_search_term":"machine learning"}
[2024-01-15T10:30:00.000Z] 🔍 DEBUG: Readwise API response received: 5 results
Development
Project Structure
src/
index.ts # Main server file
dist/ # Compiled JavaScript (generated)
node_modules/ # Dependencies
Scripts
npm run build- Compile TypeScript to JavaScriptnpm run dev- Run in development mode with hot reloadnpm run watch- Watch for changes and restartnpm start- Run compiled JavaScript
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.