export_book
Export BookStack books to HTML, PDF, plaintext, or markdown formats for offline use or content migration.
Instructions
Export a book in various formats
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Book ID | |
| format | Yes | Export format |
Implementation Reference
- src/tools/content-tools.ts:587-606 (handler)Handler logic in handleContentTool that parses input arguments and dispatches to the appropriate BookStackClient exportBook* method based on the specified format (html, pdf, plaintext, markdown). Handles PDF specially as it notes binary limitation.case "export_book": { const id = parseInteger(args.id); const format = args.format; switch (format) { case "html": const html = await client.exportBookHtml(id); return html; case "pdf": return "PDF export is binary data - use API directly for file download"; case "plaintext": const text = await client.exportBookPlainText(id); return text; case "markdown": const markdown = await client.exportBookMarkdown(id); return markdown; default: throw new Error(`Unsupported export format: ${format}`); } }
- src/tools/content-tools.ts:146-161 (schema)Tool declaration including name, description, and inputSchema defining required 'id' (number) and 'format' (enum: ["html", "pdf", "plaintext", "markdown"]).{ name: "export_book", description: "Export a book in various formats", inputSchema: { type: "object", properties: { id: { type: "number", description: "Book ID" }, format: { type: "string", enum: ["html", "pdf", "plaintext", "markdown"], description: "Export format", }, }, required: ["id", "format"], }, },
- src/lib/bookstack-client.ts:110-139 (helper)Supporting methods in BookStackClient class for exporting a book: exportBookHtml, exportBookPdf, exportBookPlainText, exportBookMarkdown. These perform API calls to BookStack endpoints and are invoked by the handler.async exportBookHtml(id: number): Promise<string> { const response: AxiosResponse<string> = await this.api.get( `/books/${id}/export/html` ); return response.data; } async exportBookPdf(id: number): Promise<Buffer> { const response: AxiosResponse<Buffer> = await this.api.get( `/books/${id}/export/pdf`, { responseType: "arraybuffer", } ); return response.data; } async exportBookPlainText(id: number): Promise<string> { const response: AxiosResponse<string> = await this.api.get( `/books/${id}/export/plaintext` ); return response.data; } async exportBookMarkdown(id: number): Promise<string> { const response: AxiosResponse<string> = await this.api.get( `/books/${id}/export/markdown` ); return response.data; }
- src/index.ts:124-126 (registration)Dispatch logic in MCP server's CallToolRequest handler that routes 'export_book' (via inclusion in contentToolNames) to handleContentTool for execution.if (contentToolNames.includes(name)) { result = await handleContentTool(name, args, bookStackClient); } else if (searchUserToolNames.includes(name)) {