A generic MCP (Model Context Protocol) server for mdbook projects. This server allows Claude Code and other MCP clients to access and read mdbook documentation programmatically.
- 📖 Read mdbook structure: Get the table of contents from
SUMMARY.mdand metadata frombook.toml - 📄 Read content: Access individual markdown files within the mdbook project
- 🔒 Secure: Path traversal protection ensures files can only be accessed within the mdbook root
- 🚀 Generic: Works with any mdbook project, not just specific ones
- ⚡ Simple: Minimal configuration required - just set an environment variable
- 📦 Easy to install: Available via npm, no complex setup needed
You can use npx to run the server without installing it globally:
npx mdbook-mcp-serverAdd the following configuration to your Claude Code config file (~/.config/claude/config.json):
{
"mcpServers": {
"my-mdbook": {
"command": "npx",
"args": ["mdbook-mcp-server"],
"env": {
"MDBOOK_ROOT_PATH": "/absolute/path/to/your/mdbook/project",
"MDBOOK_SERVER_NAME": "my_mdbook"
}
}
}
}Environment Variables:
MDBOOK_ROOT_PATH(required): Absolute path to your mdbook project root (wherebook.tomlis located)MDBOOK_SERVER_NAME(optional): A friendly name for the server (defaults to "mdbook-mcp-server")
You can run multiple instances of the server for different mdbook projects:
{
"mcpServers": {
"mdbook-project-a": {
"command": "npx",
"args": ["mdbook-mcp-server"],
"env": {
"MDBOOK_ROOT_PATH": "/path/to/project-a",
"MDBOOK_SERVER_NAME": "project_a"
}
},
"mdbook-project-b": {
"command": "npx",
"args": ["mdbook-mcp-server"],
"env": {
"MDBOOK_ROOT_PATH": "/path/to/project-b",
"MDBOOK_SERVER_NAME": "project_b"
}
}
}
}This server provides two tools:
Get the complete structure of the mdbook project, including metadata and table of contents.
Parameters: None
Returns:
{
"title": "My Book",
"authors": ["Author Name"],
"language": "en",
"src": "src",
"chapters": [
{
"title": "Introduction",
"path": "intro.md",
"level": 0
},
{
"title": "Chapter 1",
"path": "chapter1.md",
"level": 0,
"children": [
{
"title": "Section 1.1",
"path": "chapter1/section1.md",
"level": 1
}
]
}
]
}Read the content of a specific markdown file.
Parameters:
path(string, required): Relative path to the markdown file from thesrc/directory
Example:
{
"path": "intro.md"
}Returns:
{
"path": "intro.md",
"content": "# Introduction\n\nWelcome to...",
"metadata": {
"size": 1234,
"lastModified": "2025-11-10T12:34:56.789Z"
}
}- Node.js >= 22.0.0
- A valid mdbook project with
book.tomlandsrc/SUMMARY.md
MIT
Contributions are welcome! Please feel free to submit issues or pull requests.