Skip to main content
Glama

šŸ“š BookStack MCP Server

TypeScript Node.js Docker License

A professional-grade Model Context Protocol (MCP) server that seamlessly bridges AI assistants with BookStack knowledge management systems. Transform your documentation workflows with intelligent automation.

Created by Derron Knox | Showcasing enterprise-level software architecture and best practices


šŸš€ Overview

This TypeScript-based MCP server provides a robust, production-ready interface for AI assistants to interact with BookStack instances. Designed with enterprise scalability, security, and maintainability in mind, it demonstrates advanced software engineering principles and modern development practices.

✨ Key Features

  • šŸ›”ļø Enterprise Security: Token-based authentication with secure credential management

  • šŸ—ļø Modular Architecture: Clean separation of concerns with TypeScript interfaces

  • šŸ”„ Comprehensive CRUD Operations: Full lifecycle management of BookStack content

  • 🐳 Container-Ready: Production-optimized Docker setup with multi-stage builds

  • ⚔ High Performance: Optimized API calls with proper error handling and timeouts

  • šŸ“‹ Type Safety: Full TypeScript implementation with strict type checking

  • šŸ” Smart Search: Advanced content discovery and filtering capabilities

  • šŸ“– Intelligent Resolution: Name-to-ID resolution for user-friendly operations


Related MCP server: BookStack MCP Server

šŸ› ļø Available Tools

Page Management

  • create_page - Create new pages with HTML/Markdown content

  • get_page_content - Retrieve page content by ID or name

  • update_page - Modify existing pages (content, location, metadata)

  • delete_page - Remove pages from BookStack

Content Discovery

  • search_items - Search across shelves, books, chapters, and pages

  • list_books - Enumerate books with filtering and pagination

  • list_shelves - Browse shelf collections with advanced options

Book Management

  • read_book - Get details of a specific book by ID or name

  • create_book - Create a new book

  • update_book - Modify existing books (content, metadata)

  • delete_book - Remove books from BookStack

Advanced Features

  • Flexible Targeting: Use either IDs or names for all operations

  • Context-Aware Resolution: Automatic name-to-ID conversion

  • Hierarchical Navigation: Support for book/chapter/page relationships

  • Metadata Management: Tags, priorities, and organizational features


šŸƒā€ā™‚ļø Quick Start

Prerequisites

  • Node.js 20+

  • Docker & Docker Compose (for containerized deployment)

  • BookStack instance with API access

  • BookStack API tokens (Token ID & Secret)

1. Environment Setup

# Clone and configure
git clone <repository-url>
cd bookstack/
cp .env.example .env

# Configure your BookStack credentials
cat > .env << EOF
BOOKSTACK_URL="https://your-bookstack-instance.com"
BOOKSTACK_API_TOKEN_ID="your_token_id_here"
BOOKSTACK_API_TOKEN_SECRET="your_token_secret_here"
EOF

2. Installation Options

# Production-ready containerized deployment
docker-compose up --build -d

# Monitor logs
docker-compose logs -f bookstack-mcp-server

Option B: Local Development

# Install dependencies
npm install

# Development with hot reload
npm run watch

# Production build
npm run build
npm start

3. Integration with Claude Desktop

Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "bookstack-mcp-server": {
      "command": "node",
      "args": ["/path/to/bookstack/build/index.js"],
      "env": {
        "BOOKSTACK_URL": "https://your-bookstack-instance.com",
        "BOOKSTACK_API_TOKEN_ID": "your_token_id",
        "BOOKSTACK_API_TOKEN_SECRET": "your_token_secret"
      }
    }
  }
}

šŸ—ļø Architecture & Best Practices

Project Structure

bookstack/
ā”œā”€ā”€ src/
│   ā”œā”€ā”€ types.ts              # TypeScript interface definitions
│   ā”œā”€ā”€ utils/
│   │   ā”œā”€ā”€ validation.ts     # Input validation & sanitization
│   │   └── api.ts           # API utilities & helper functions
│   ā”œā”€ā”€ tools/
│   │   ā”œā”€ā”€ definitions.ts    # Tool schema definitions
│   │   └── handlers.ts      # Business logic implementations
│   └── index.ts             # Main server & orchestration
ā”œā”€ā”€ build/                   # Compiled JavaScript output
ā”œā”€ā”€ Dockerfile              # Multi-stage container build
ā”œā”€ā”€ docker-compose.yml      # Production deployment config
└── package.json            # Dependencies & scripts

Engineering Principles Demonstrated

šŸŽÆ Clean Architecture

  • Separation of Concerns: Distinct layers for validation, business logic, and API interaction

  • Dependency Injection: Modular design with clear interfaces

  • Single Responsibility: Each module has one well-defined purpose

šŸ”’ Security First

  • Environment Variable Management: Secure credential handling

  • Input Validation: Comprehensive argument sanitization

  • Error Boundaries: Proper exception handling without information leakage

šŸš€ Production Readiness

  • Container Optimization: Multi-stage Docker builds for minimal image size

  • Health Checks: Built-in container health monitoring

  • Graceful Shutdown: Proper signal handling for clean termination

  • Comprehensive Logging: Structured error reporting and debugging

šŸ“Š Code Quality

  • TypeScript Strict Mode: Full type safety with comprehensive interfaces

  • Modular Design: Reusable components with clear APIs

  • Error Handling: Robust exception management with user-friendly messages


šŸ”§ Configuration Options

Environment Variables

Variable

Description

Required

Example

BOOKSTACK_URL

BookStack instance URL

āœ…

https://wiki.company.com

BOOKSTACK_API_TOKEN_ID

API Token ID from BookStack

āœ…

abc123def456

BOOKSTACK_API_TOKEN_SECRET

API Token Secret from BookStack

āœ…

xyz789uvw012

Docker Configuration

  • Health Checks: 30-second intervals with 3 retry attempts

  • Log Rotation: 10MB max file size, 5 file retention

  • Security: Non-root user execution

  • Resource Optimization: Multi-stage builds for production efficiency


šŸ” Usage Examples

Creating Content

// Create a page in a specific book
await createPage({
  name: "API Documentation",
  markdown: "# API Guide\n\nComprehensive API documentation...",
  book_name: "Development Guides",
  tags: [
    { name: "category", value: "api" },
    { name: "priority", value: "high" }
  ]
});

Content Discovery

// Search across all content types
await searchItems({
  query: "kubernetes deployment",
  count: 20
});

// Find pages by context
await getPageContent({
  page_name: "Deployment Guide",
  book_name: "Infrastructure Documentation"
});

Content Management

// Update page with new content
await updatePage({
  page_name: "Getting Started",
  book_name: "User Manual",
  markdown: "# Updated Getting Started Guide\n...",
  tags: [{ name: "status", value: "updated" }]
});

šŸš€ Deployment Options

Production Deployment

Docker Swarm

# Scale across multiple nodes
docker stack deploy -c docker-compose.yml bookstack-mcp

Kubernetes

apiVersion: apps/v1
kind: Deployment
metadata:
  name: bookstack-mcp-server
spec:
  replicas: 3
  selector:
    matchLabels:
      app: bookstack-mcp-server
  template:
    metadata:
      labels:
        app: bookstack-mcp-server
    spec:
      containers:
      - name: bookstack-mcp-server
        image: bookstack-mcp-server:latest
        env:
        - name: BOOKSTACK_URL
          valueFrom:
            secretKeyRef:
              name: bookstack-credentials
              key: url

Development Workflow

# Development with auto-reload
npm run watch

# Type checking
npx tsc --noEmit

# Debug with MCP Inspector
npm run inspector

šŸ› Debugging & Troubleshooting

MCP Inspector

# Launch debugging interface
npm run inspector
# Access via browser at provided URL

Common Issues

Connection Problems

# Verify BookStack accessibility
curl -H "Authorization: Token $BOOKSTACK_API_TOKEN_ID:$BOOKSTACK_API_TOKEN_SECRET" \
     "$BOOKSTACK_URL/api/books"

Container Issues

# Check container health
docker-compose ps
docker-compose logs bookstack-mcp-server

# Restart with fresh build
docker-compose down && docker-compose up --build

šŸ“‹ Dependencies

Production Dependencies

  • @modelcontextprotocol/sdk: ^0.6.0 - MCP protocol implementation

  • axios: ^1.9.0 - HTTP client for BookStack API

Development Dependencies

  • typescript: ^5.3.3 - Type-safe JavaScript development

  • @types/node: ^20.11.24 - Node.js type definitions

System Requirements

  • Node.js: 20+ (LTS recommended)

  • Memory: 256MB minimum, 512MB recommended

  • Storage: 100MB for application, additional for logs


šŸŽÆ Professional Showcase

This project demonstrates expertise in:

Backend Development

  • RESTful API integration and design

  • Microservices architecture patterns

  • Error handling and resilience patterns

DevOps & Infrastructure

  • Containerization with Docker

  • Production deployment strategies

  • Configuration management

  • Health monitoring and observability

Software Engineering

  • Clean code principles

  • Design patterns (Strategy, Factory, Dependency Injection)

  • Test-driven development mindset

  • Documentation and maintainability

Modern JavaScript/TypeScript

  • Advanced TypeScript features

  • Async/await patterns

  • ES2022+ modern syntax

  • Node.js best practices


šŸ¤ Contributing

This project welcomes contributions! Areas for enhancement:

  • Unit test coverage expansion

  • Additional BookStack API endpoints

  • Performance optimizations

  • Enhanced error recovery


šŸ“ž Contact

Derron Knox - Software Engineer & Solutions Architect


This project exemplifies enterprise-grade software development practices, demonstrating proficiency in modern web technologies, cloud-native development, and scalable system architecture.

Available Tools

24 tools
create_bookB

Create a new book in BookStack.

Inputs: name (required), description, description_html, tags, +2 more.

create_chapterC

Create a new chapter in BookStack.

Inputs: name (required), book_id, book_name, description, +4 more.

create_pageC

Create a new page in BookStack.

Inputs: name (required), html, markdown, book_id, +5 more.

create_shelfC

Create a new shelf in BookStack.

Inputs: name (required), description, description_html, books, +2 more.

delete_bookB

Delete a book from BookStack.

Inputs: book_id, name.

delete_chapterC

Delete a chapter from BookStack.

Inputs: chapter_id, name, book_id_context, book_name_context.

delete_pageC

Delete a page.

Inputs: page_id, page_name, book_id_context, book_name_context.

delete_shelfB

Delete a shelf from BookStack.

Inputs: shelf_id, name.

export_chapter_htmlB

Export a chapter as a contained HTML file.

Inputs: chapter_id, name, book_id_context, book_name_context.

export_chapter_markdownB

Export a chapter as a markdown file.

Inputs: chapter_id, name, book_id_context, book_name_context.

export_chapter_pdfC

Export a chapter as a PDF file.

Inputs: chapter_id, name, book_id_context, book_name_context.

export_chapter_plaintextB

Export a chapter as a plain text file.

Inputs: chapter_id, name, book_id_context, book_name_context.

get_page_contentC

Get the content of a specific page.

Inputs: page_id, page_name, book_id, book_name.

list_booksC

List all books.

Inputs: count, offset, sort, filter.

list_chaptersC

List all chapters.

Inputs: count, offset, sort, filter.

list_shelvesB

List all shelves.

Inputs: count, offset, sort, filter.

read_bookB

Get details of a specific book by ID or name.

Inputs: book_id, name.

read_chapterB

Get details of a specific chapter by ID or name.

Inputs: chapter_id, name, book_id_context, book_name_context.

read_shelfA

Get details of a specific shelf by ID or name.

Inputs: shelf_id, name.

search_itemsA

Search for items (shelves, books, chapters, pages) in BookStack.

Inputs: query (required), page, count.

update_bookB

Update an existing book in BookStack.

Inputs: book_id, name, description, description_html, +3 more.

update_chapterC

Update an existing chapter in BookStack.

Inputs: chapter_id, name, book_id_context, book_name_context, +6 more.

update_pageC

Update an existing page.

Inputs: page_id, page_name, book_id_context, book_name_context, +7 more.

update_shelfC

Update an existing shelf in BookStack.

Inputs: shelf_id, name, description, description_html, +3 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 24 tools

    Disambiguation5/5

    Each tool has a clear, distinct purpose targeting a specific resource (book, chapter, page, shelf) and action (create, delete, read, update, export, etc.). No two tools appear to perform the same function, making selection unambiguous for an agent.

    Naming Consistency5/5

    All tool names follow a consistent verb_noun pattern (e.g., create_book, list_books, export_chapter_pdf) using lowercase and underscores. The pattern is predictable across the entire set, aiding agent comprehension.

    Tool Count3/5

    With 24 tools, the count is on the high side for a documentation server. While it covers multiple resource types and operations, the absence of a list_pages tool suggests some redundancy or incompleteness that could be streamlined.

    Completeness3/5

    The server provides CRUD for shelves, books, and chapters, but pages lack a list_pages tool (only get_page_content exists) and export options are limited to chapters only. These gaps may require agents to work around missing operations.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers