{
  "markdown": "# wallabag MCP\n<p align=\"center\">\n  <a href=\"https://buymeacoffee.com/rusty4\" target=\"_blank\">\n    <img src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" height=\"50\">\n  </a>\n</p>\n\n\n\n<!-- mcp-name: io.github.rusty4444/wallabag-mcp -->\n\nA Model Context Protocol (MCP) server for [wallabag](https://wallabag.org/), the open-source read-it-later service.\n\nThis server gives AI assistants a structured interface for common wallabag workflows:\n\n- Verify connectivity and authentication with a tiny read-only health check\n- List, filter, and page through saved articles\n- Fetch entry metadata or full extracted content\n- Save new URLs\n- Archive/unarchive and star/unstar entries\n- Reload/refetch article extraction\n- Delete entries\n- List and add tags\n- List, create, and delete annotations\n\n## Why this exists\n\nwallabag 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.\n\n## Installation\n\n```bash\npipx install git+https://github.com/rusty4444/wallabag-mcp.git\n```\n\nOr from a checkout:\n\n```bash\npython -m venv .venv\nsource .venv/bin/activate\npip install -e .\n```\n\n## Configuration\n\nThe server reads configuration from environment variables:\n\n| Variable | Required | Description |\n|---|---:|---|\n| `WALLABAG_BASE_URL` | Yes | Base URL of your wallabag instance, e.g. `https://app.wallabag.it` |\n| `WALLABAG_ACCESS_TOKEN` | Optional | Existing OAuth access token; if set, password grant is skipped |\n| `WALLABAG_CLIENT_ID` | Required unless access token is set | OAuth client id from wallabag's developer client page |\n| `WALLABAG_CLIENT_SECRET` | Required unless access token is set | OAuth client secret |\n| `WALLABAG_USERNAME` | Required unless access token is set | wallabag username |\n| `WALLABAG_PASSWORD` | Required unless access token is set | wallabag password |\n| `WALLABAG_TIMEOUT` | No | HTTP timeout in seconds, default `20` |\n\nCreate a wallabag API client from your wallabag instance under **Developer / API clients**. wallabag's official docs show the password grant against `/oauth/v2/token`.\n\n## MCP client config\n\n```json\n{\n  \"mcpServers\": {\n    \"wallabag\": {\n      \"command\": \"wallabag-mcp\",\n      \"env\": {\n        \"WALLABAG_BASE_URL\": \"https://wallabag.example.com\",\n        \"WALLABAG_CLIENT_ID\": \"your-client-id\",\n        \"WALLABAG_CLIENT_SECRET\": \"your-client-secret\",\n        \"WALLABAG_USERNAME\": \"your-username\",\n        \"WALLABAG_PASSWORD\": \"your-password\"\n      }\n    }\n  }\n}\n```\n\n## Tools\n\n| Tool | Purpose |\n|---|---|\n| `wallabag_health_check` | Verify connectivity and authentication with a tiny read-only request |\n| `wallabag_list_entries` | List entries with pagination and filters |\n| `wallabag_get_entry` | Fetch one entry, optionally including extracted content |\n| `wallabag_add_entry` | Save a URL into wallabag |\n| `wallabag_update_entry` | Update title, URL, archive/starred state, or tags |\n| `wallabag_archive_entry` | Mark an entry archived/read |\n| `wallabag_unarchive_entry` | Mark an entry unarchived/unread |\n| `wallabag_star_entry` | Star/favourite an entry |\n| `wallabag_unstar_entry` | Remove starred/favourite state |\n| `wallabag_reload_entry` | Ask wallabag to refetch/reparse the original URL |\n| `wallabag_delete_entry` | Delete an entry |\n| `wallabag_list_tags` | List known tags |\n| `wallabag_add_tags_to_entry` | Add comma-separated tags to an entry |\n| `wallabag_delete_tag` | Delete a tag globally |\n| `wallabag_list_annotations` | List annotations for an entry |\n| `wallabag_create_annotation` | Create an annotation on quoted article text |\n| `wallabag_delete_annotation` | Delete an annotation |\n\n## Development and validation\n\n```bash\npython -m venv .venv\nsource .venv/bin/activate\npip install -e '.[dev]'\nruff check .\npytest\npython scripts/live_docs_test.py\n```\n\n`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.\n\n## Safety\n\nWrite-capable tools mutate your read-it-later library. Keep OAuth secrets in environment variables or a secret manager, never in source control.\n",
  "bytes": 4303,
  "sha": "8c908ffcdeec37e64e5cf44eb8fad5348f4d1fb40adeeaed37131dc45cc3386e",
  "repo_slug": "rusty4444/wallabag-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_rusty4444_wallabag_mcp_51d803ba/readme"
}