MCP server for BookStack — connect Claude Code, Codex, OpenCode and any AI assistant to your BookStack wiki.
One command, zero config files, instant setup.
claude mcp add bookstack -- npx github:h4sht/bookstack-mcpClaude Code will prompt you for:
BOOKSTACK_BASE_URL— your BookStack API URL (e.g.https://wiki.example.com/api)BOOKSTACK_API_TOKEN— your API token (token_id:token_secret)
Or pass them directly:
claude mcp add bookstack \
--env BOOKSTACK_BASE_URL=https://wiki.example.com/api \
--env BOOKSTACK_API_TOKEN=token_id:token_secret \
-- npx github:h4sht/bookstack-mcpThen use /mcp inside Claude Code to verify it's connected ✔
| Category | Tools |
|---|---|
| 📚 Books (6) | list, get, create, update, delete, export |
| 📑 Chapters (6) | list, get, create, update, delete, export |
| 📄 Pages (6) | list, get, create, update, delete, export |
| 📚 Shelves (5) | list, get, create, update, delete |
| 🔍 Search (1) | search across all content |
| ⚙️ System (1) | instance info |
All export_* tools support markdown, html, pdf, plaintext.
BookStack stores pages as HTML but accepts Markdown input through its API. This means Claude can create and edit wiki pages in its native format:
"Create a page about async Python in book 3"
→ bookstack_create_page({
book_id: 3,
name: "Async Python Guide",
markdown: "# Async Python\n\n`asyncio` is Python's standard library..."
})
Pages are also exported as Markdown, so Claude can read, analyze, and improve existing content.
codex mcp add bookstack \
--env BOOKSTACK_BASE_URL=https://wiki.example.com/api \
--env BOOKSTACK_API_TOKEN=id:secret \
-- npx github:h4sht/bookstack-mcpOr add this to ~/.codex/config.toml:
[mcp_servers.bookstack]
command = "npx"
args = ["github:h4sht/bookstack-mcp"]
[mcp_servers.bookstack.env]
BOOKSTACK_BASE_URL = "https://wiki.example.com/api"
BOOKSTACK_API_TOKEN = "id:secret"Verify with: codex mcp list
opencode mcp add
# Select "local", then enter: npx github:h4sht/bookstack-mcpOr add to opencode.json:
Add to Cline MCP settings file:
{
"mcpServers": {
"bookstack": {
"command": "npx",
"args": ["github:h4sht/bookstack-mcp"],
"env": {
"BOOKSTACK_BASE_URL": "https://wiki.example.com/api",
"BOOKSTACK_API_TOKEN": "id:secret"
}
}
}
}The server command is always the same:
npx github:h4sht/bookstack-mcpSet BOOKSTACK_BASE_URL and BOOKSTACK_API_TOKEN as environment variables.
| Variable | Required | Description |
|---|---|---|
BOOKSTACK_BASE_URL |
Yes | Full URL including /api |
BOOKSTACK_API_TOKEN |
Yes | Format: token_id:token_secret |
BOOKSTACK_TIMEOUT |
No | Request timeout ms (default: 30000) |
- 4 auditable files — read the whole source in 10 minutes
- One dependency — only
@modelcontextprotocol/sdk(official Anthropic) - Native fetch() — no HTTP libraries, no hidden requests
- Stdio only — no open ports, no network surface
- Zero telemetry — no analytics, no tracking, no calls home
- Stderr logging — never writes to stdout (MCP protocol integrity)
npm test # 32 tests, all passing ✅@h4sht/bookstack-mcp/
├── src/
│ ├── index.ts # MCP server, stdio transport, config
│ ├── client.ts # BookStack REST client (native fetch)
│ ├── tools.ts # 25 MCP tool definitions + handlers
│ └── types.ts # TypeScript types
├── dist/ # Compiled JS (ready to run)
├── tests/ # 32 unit + integration tests
├── package.json
└── README.md
MIT © h4sht
{ "mcp": { "bookstack": { "type": "local", "command": ["npx", "github:h4sht/bookstack-mcp"], "enabled": true, "environment": { "BOOKSTACK_BASE_URL": "https://wiki.example.com/api", "BOOKSTACK_API_TOKEN": "id:secret" } } } }