使用说明
BookStack MCP服务器
一 MCP(模型上下文协议) 允许Claude.ai直接访问您的 书堆 知识库。
特性
- 58工具 涵盖页面、章节、书籍、书架、搜索、附件、评论、权限、回收站、角色、用户、系统信息和审核日志
- OAuth 2.0 与Claude.ai的MCP集成兼容的身份验证
- 单用户 设计-您的BookStack API令牌是通过环境变量配置的,从不存储在MCP令牌中
- 无状态HTTP 运输与
StreamableHTTPServerTransport
可用工具
| 组 | 工具 |
|---|---|
| 页面 | list-pages, create-page, get-page, update-page, delete-page, export-page-markdown, export-page-plaintext |
| 章节 | list-chapters, create-chapter, get-chapter, update-chapter, delete-chapter, export-chapter-markdown, export-chapter-plaintext |
| 书籍 | list-books, create-book, get-book, update-book, delete-book, export-book-markdown, export-book-plaintext |
| 货架 | list-shelves, create-shelf, get-shelf, update-shelf, delete-shelf |
| 搜索 | search |
| 附件 | list-attachments, create-attachment-link, get-attachment, update-attachment, delete-attachment |
| 评论 | list-comments, create-comment, get-comment, update-comment, delete-comment |
| 权限 | get-content-permissions, update-content-permissions |
| 回收站 | list-recycle-bin, restore-from-recycle-bin, permanently-delete |
| 角色 | list-roles, create-role, get-role, update-role, delete-role |
| 用户 | list-users, create-user, get-user, update-user, delete-user |
| 系统 | get-system-info |
| 审核日志 | list-audit-log |
示例提示
连接后,您可以问Claude以下问题:
阅读与搜索
- “在开发人员指南书中查找标记有“API”的所有页面”
- “在所有书籍中搜索有关身份验证的任何信息”
- “给我看看‘入职’书的内容”
- “将“架构概述”页面导出为markdown”
写作与编辑
- “在基础架构书中创建一个名为‘Redis设置’的新页面,并附上设置说明”
- “更新“API引用”页面以添加新的终结点节”
- 将“传统授权”页面移至“已存档”章节
组织
- “‘工程’书架上有什么书?”
- “在DevOps书中创建一个名为“部署”的新章节”
- “让我看看回收站里的所有东西”
- “还原我意外删除的页面”
管理员
- “列出所有用户及其角色”
- “显示页面删除的最新审核日志条目”
- “编辑者角色有哪些权限?”
Docker快速入门
docker run -d \
-p 3000:3000 \
-v bookstack-mcp-data:/app/data \
-e BOOKSTACK_URL=https://your-bookstack.example.com \
-e BOOKSTACK_TOKEN_ID=your-token-id \
-e BOOKSTACK_TOKEN_SECRET=your-token-secret \
-e MCP_AUTH_PASSWORD=choose-a-strong-password \
-e JWT_SECRET=$(openssl rand -hex 32) \
-e BASE_URL=https://your-mcp-domain.com \
ghcr.io/jacob-tate/bookstack-mcp:latest
或者使用Docker Compose——请参阅 docker-compose.yml.
连接到Claude.ai
- 在Claude.ai中,请访问 设置→ 集成→ 添加MCP服务器
- 请输入您的服务器URL:
https://your-mcp-domain.com/mcp - 浏览器弹出窗口将打开——输入您的
MCP_AUTH_PASSWORD - 完成——Claude现在可以访问您的BookStack实例了
环境变量
| 变量 | 必填 | 描述 |
|---|---|---|
BOOKSTACK_URL |
✅ | BookStack实例的URL |
BOOKSTACK_TOKEN_ID |
✅ | API令牌ID |
BOOKSTACK_TOKEN_SECRET |
✅ | API令牌机密 |
MCP_AUTH_PASSWORD |
✅ | OAuth浏览器弹出窗口中显示的密码 |
JWT_SECRET |
✅ | 签名令牌的随机字符串≥32个字符 |
BASE_URL |
✅ | 此MCP服务器的公共HTTPS URL |
PORT |
-- | HTTP端口(默认值: 3000) |
AUTH_DB_PATH |
-- | OAuth令牌的SQLite数据库(默认值: ./data/auth.db) |
生成BookStack API令牌
在BookStack中: 简介→ API令牌→ 创建令牌
给它一个描述性的名称(例如“Claude MCP”)。令牌ID和secret在创建时显示一次——同时保存。
不使用Docker运行
需要 Node.js 24 (使用内置 node:sqlite --不需要本机编译)。
npm install
cp .env.example .env
# edit .env with your values
npm run build
npm start
开发(热重新加载):
npm run dev
备注:不要跑
npm run typecheck--MCP SDK的类型定义超过了Node的堆限制。 使用npm run build(esbuild,~1s)来验证代码是否编译。
令牌撤销
要立即使令牌无效(例如怀疑泄漏):
# Revoke an access token (JWT)
curl -X POST https://your-mcp-domain.com/revoke \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "token=<access_token>"
# Revoke a refresh token (UUID)
curl -X POST https://your-mcp-domain.com/revoke \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "token=<refresh_token>"
总是回来 200 OK 每 RFC 7009.
要一次使所有令牌无效,请执行以下操作: 旋转
JWT_SECRET在.env并重新启动。所有签发的JWT立即无法通过签名验证。
部署说明
- 使用HTTPS暴露反向代理(nginx、Caddy)后面的端口3000
BASE_URL必须是公共HTTPS URL——Claude.ai要求OAuth使用HTTPS- OAuth令牌在SQLite中持久化(
./data/auth.db)--重新启动后仍能存活 - 访问令牌在24小时后过期;刷新令牌持续90天,并自动轮换
项目结构
src/
├── config.ts # Env var validation
├── index.ts # Express app + startup
├── auth/
│ ├── db.ts # node:sqlite singleton + schema init
│ ├── store.ts # SQLite-backed OAuth state (tokens, clients)
│ ├── oauth.ts # OAuthServerProvider + login form
│ └── middleware.ts # Bearer token validation
├── bookstack/
│ └── client.ts # BookStack API client (fetch-based)
└── mcp/
├── server.ts
└── tools/
├── pages.ts
├── chapters.ts
├── books.ts
├── shelves.ts
├── search.ts
├── attachments.ts
├── comments.ts
├── permissions.ts
├── recycle-bin.ts
├── roles.ts
├── users.ts
├── system.ts
└── audit-log.ts