Skip to main content
Glama
h4sht

@h4sht/bookstack-mcp

by h4sht
README.md
# @h4sht/bookstack-mcp

<p align="center">
  <img src="https://raw.githubusercontent.com/BookStackApp/BookStack/development/public/icon.png" alt="BookStack" width="120" />
</p>

<p align="center">
  <strong>MCP server for BookStack</strong> โ€” connect Claude Code, Codex, OpenCode and any AI assistant to your BookStack wiki.<br>
  <em>One command, zero config files, instant setup.</em>
</p>

<p align="center">
  <a href="https://github.com/h4sht/bookstack-mcp"><img src="https://img.shields.io/badge/github-h4sht%2Fbookstack--mcp-blue?logo=github" alt="GitHub repo"></a>
  <a href="./LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="License MIT"></a>
  <img src="https://img.shields.io/badge/tests-32%2F32-brightgreen" alt="Tests 32/32">
  <img src="https://img.shields.io/badge/node-%3E%3D18-brightgreen?logo=node.js" alt="Node >=18">
</p>

---

## ๐Ÿš€ Claude Code

```bash
claude mcp add bookstack -- npx github:h4sht/bookstack-mcp
```

Claude 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:

```bash
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-mcp
```

Then use `/mcp` inside Claude Code to verify it's connected โœ”

---

## ๐Ÿ› ๏ธ What you get (25 tools)

| 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`.

---

## โœ๏ธ Markdown-powered

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.

---

## ๐Ÿ“ฆ Setup for other AI assistants

### OpenAI Codex

```bash
codex mcp add bookstack \
  --env BOOKSTACK_BASE_URL=https://wiki.example.com/api \
  --env BOOKSTACK_API_TOKEN=id:secret \
  -- npx github:h4sht/bookstack-mcp
```

Or add this to `~/.codex/config.toml`:

```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

```bash
opencode mcp add
# Select "local", then enter: npx github:h4sht/bookstack-mcp
```

Or add to `opencode.json`:

```jsonc
{
  "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"
      }
    }
  }
}
```

### Cline (VS Code)

Add to Cline MCP settings file:

```json
{
  "mcpServers": {
    "bookstack": {
      "command": "npx",
      "args": ["github:h4sht/bookstack-mcp"],
      "env": {
        "BOOKSTACK_BASE_URL": "https://wiki.example.com/api",
        "BOOKSTACK_API_TOKEN": "id:secret"
      }
    }
  }
}
```

### Any MCP-compatible assistant (stdio)

The server command is always the same:

```bash
npx github:h4sht/bookstack-mcp
```

Set `BOOKSTACK_BASE_URL` and `BOOKSTACK_API_TOKEN` as environment variables.

---

## ๐Ÿ”ง Config reference

| 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`) |

---

## ๐Ÿ”’ Security

- **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)

---

## ๐Ÿงช Tests

```bash
npm test   # 32 tests, all passing โœ…
```

---

## ๐Ÿ“ Structure

```
@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
```

---

## ๐Ÿ“ License

MIT ยฉ [h4sht](https://github.com/h4sht)