Uploading an image by URL is where authoring usually breaks down, so the tool streams the remote file under a size and time limit and refuses to fetch anything on a private or loopback address. The rest of the surface is deliberately consolidated — one CRUD tool across four entity types rather than sixteen near-identical ones.
A FastMCP server for a BookStack wiki. It consolidates the API into a handful of tools covering books, shelves, chapters and pages, full-text search, batch edits, and the image gallery that authoring depends on.
- bookstack_content_crud — one interface for creating, reading, updating and deleting books, bookshelves, chapters and pages
- bookstack_list_content — list and filter content entities with pagination
- bookstack_search — full-text search across the instance
- bookstack_batch_operations — bulk create, update and delete
- bookstack_manage_images — create, read, update, delete and list gallery images; accepts base64, a data URL, or an HTTP(S) URL it fetches for you
- bookstack_search_images — find images by extension, date, size and usage
- URL uploads are fetched with a 30 second timeout and a 50 MB ceiling, restricted to HTTP and HTTPS, with loopback, private, link-local and redirect-based internal targets blocked
- MIME validation against the formats BookStack accepts: jpeg, png, gif, webp, bmp, tiff and svg+xml
A BookStack instance and an API token belonging to a user who can view and manage the image gallery: BS_URL, BS_TOKEN_ID and BS_TOKEN_SECRET. Python with the FastMCP server's requirements installed, launched as a module. Image uploads need a real page context — pass uploaded_to with a page id, since BookStack rejects uploads without one.
One command plus a key — pip install -r fastmcp_server/requirements.txt, then supply credentials
