If you self-host wallabag as your read-it-later service, this server wraps its OAuth API into MCP tools for managing your article queue. You get the usual entry operations like save, archive, star, reload extraction, and delete, plus tag management and annotations on highlighted text. It handles the password grant flow so you can skip manual token juggling. Useful when you want Claude to triage your reading list, pull full content for summarization, or tag articles based on their extracted text. Configuration lives in environment variables and it ships with both mocked tests and a live doc validator against wallabag's public API.
A Model Context Protocol (MCP) server for wallabag, the open-source read-it-later service.
This server gives AI assistants a structured interface for common wallabag workflows:
wallabag is widely used in self-hosted setups, but its API is OAuth-based and awkward for general LLM tools. This MCP server wraps the important entry, tag, and annotation operations with an AI-friendly surface and documented parameters.
pipx install git+https://github.com/rusty4444/wallabag-mcp.git
Or from a checkout:
python -m venv .venv
source .venv/bin/activate
pip install -e .
The server reads configuration from environment variables:
| Variable | Required | Description |
|---|---|---|
WALLABAG_BASE_URL | Yes | Base URL of your wallabag instance, e.g. https://app.wallabag.it |
WALLABAG_ACCESS_TOKEN | Optional | Existing OAuth access token; if set, password grant is skipped |
WALLABAG_CLIENT_ID | Required unless access token is set | OAuth client id from wallabag's developer client page |
WALLABAG_CLIENT_SECRET | Required unless access token is set | OAuth client secret |
WALLABAG_USERNAME | Required unless access token is set | wallabag username |
WALLABAG_PASSWORD | Required unless access token is set | wallabag password |
WALLABAG_TIMEOUT | No | HTTP timeout in seconds, default 20 |
Create a wallabag API client from your wallabag instance under Developer / API clients. wallabag's official docs show the password grant against /oauth/v2/token.
{
"mcpServers": {
"wallabag": {
"command": "wallabag-mcp",
"env": {
"WALLABAG_BASE_URL": "https://wallabag.example.com",
"WALLABAG_CLIENT_ID": "your-client-id",
"WALLABAG_CLIENT_SECRET": "your-client-secret",
"WALLABAG_USERNAME": "your-username",
"WALLABAG_PASSWORD": "your-password"
}
}
}
}
| Tool | Purpose |
|---|---|
wallabag_health_check | Verify connectivity and authentication with a tiny read-only request |
wallabag_list_entries | List entries with pagination and filters |
wallabag_get_entry | Fetch one entry, optionally including extracted content |
wallabag_add_entry | Save a URL into wallabag |
wallabag_update_entry | Update title, URL, archive/starred state, or tags |
wallabag_archive_entry | Mark an entry archived/read |
wallabag_unarchive_entry | Mark an entry unarchived/unread |
wallabag_star_entry | Star/favourite an entry |
wallabag_unstar_entry | Remove starred/favourite state |
wallabag_reload_entry | Ask wallabag to refetch/reparse the original URL |
wallabag_delete_entry | Delete an entry |
wallabag_list_tags | List known tags |
wallabag_add_tags_to_entry | Add comma-separated tags to an entry |
wallabag_delete_tag | Delete a tag globally |
wallabag_list_annotations | List annotations for an entry |
wallabag_create_annotation | Create an annotation on quoted article text |
wallabag_delete_annotation | Delete an annotation |
python -m venv .venv
source .venv/bin/activate
pip install -e '.[dev]'
ruff check .
pytest
python scripts/live_docs_test.py
live_docs_test.py validates wallabag's public API documentation and the hosted API docs page without needing account credentials. Mutation and authenticated request behaviours are covered with mocked HTTP tests.
Write-capable tools mutate your read-it-later library. Keep OAuth secrets in environment variables or a secret manager, never in source control.
WALLABAG_BASE_URL*Base URL of the wallabag instance, e.g. https://wallabag.example.com
WALLABAG_ACCESS_TOKENsecretExisting OAuth access token; skips password grant if provided
WALLABAG_CLIENT_IDOAuth client id; required unless WALLABAG_ACCESS_TOKEN is set
WALLABAG_CLIENT_SECRETsecretOAuth client secret; required unless WALLABAG_ACCESS_TOKEN is set
WALLABAG_USERNAMEwallabag username; required unless WALLABAG_ACCESS_TOKEN is set
WALLABAG_PASSWORDsecretwallabag password; required unless WALLABAG_ACCESS_TOKEN is set