Odel
Shiori MCP

Shiori MCP

Local
@rusty4444PythonMITUpdated 3mo ago

MCP server for Shiori bookmark management and tag workflows.

Shiori MCP

Buy Me A Coffee

A Model Context Protocol (MCP) server for Shiori, the self-hosted bookmark and read-it-later manager.

Capabilities

  • Verify Shiori connectivity and authentication
  • List bookmarks
  • Search bookmarks by title, URL, excerpt, and tag
  • Get one bookmark by id or exact URL from the bookmark list
  • Add bookmarks with Shiori's required tag-object format
  • Update bookmarks via either a full-bookmark payload or common field parameters
  • Delete bookmarks by id list
  • List tags and bookmark counts
  • Rename tags
  • List accounts visible to the authenticated session

Installation

pipx install git+https://github.com/rusty4444/shiori-mcp.git

Or from a checkout:

python -m venv .venv
source .venv/bin/activate
pip install -e .

Configuration

VariableRequiredDescription
SHIORI_BASE_URLYesBase URL of the Shiori instance, e.g. https://shiori.example.com
SHIORI_SESSION_IDOptionalExisting Shiori session id; skips login if provided
SHIORI_USERNAMERequired unless session id is setShiori username
SHIORI_PASSWORDRequired unless session id is setShiori password
SHIORI_TIMEOUTNoHTTP timeout in seconds, default 20

MCP client config

{
  "mcpServers": {
    "shiori": {
      "command": "shiori-mcp",
      "env": {
        "SHIORI_BASE_URL": "https://shiori.example.com",
        "SHIORI_USERNAME": "your-username",
        "SHIORI_PASSWORD": "your-password"
      }
    }
  }
}

Tools

ToolPurpose
shiori_health_checkVerify API connectivity/authentication
shiori_list_bookmarksList bookmarks with client-side limit/offset
shiori_search_bookmarksSearch bookmarks by text and/or tag
shiori_get_bookmarkGet one bookmark by id from the bookmark list
shiori_get_bookmark_by_urlGet one bookmark by exact URL
shiori_add_bookmarkAdd a bookmark with optional tags/archive/public flags
shiori_update_bookmarkUpdate a bookmark using full Shiori bookmark JSON
shiori_update_bookmark_fieldsUpdate common fields without manually constructing full JSON
shiori_delete_bookmarkDelete one bookmark id
shiori_delete_bookmarksDelete bookmark ids from a JSON array
shiori_list_tagsList tags and bookmark counts
shiori_rename_tagRename a tag
shiori_list_accountsList accounts visible to this session

Development and validation

python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
pip install -e '.[dev]'
ruff check .
pytest
python scripts/live_docs_test.py

live_docs_test.py validates Shiori public API documentation and repository pages without credentials. Authenticated read/write API behaviours are covered with mocked HTTP tests.

Optional LLM validation can be run with any configured OpenAI-compatible endpoint. For local Aeon validation, set AEON_BASE_URL and optionally AEON_MODEL / AEON_API_KEY before running python scripts/model_validate.py.

API note

This server targets Shiori's documented legacy API under /api/* because the new API v1 is still documented as in development and self-documented at /swagger/index.html on running instances.

Safety

The write-capable tools mutate a Shiori bookmark database. Keep credentials in environment variables or a secret manager, never in source control.

This project was developed with the assistance of AI tools.