Skip to main content
Glama
README.md
# gitbook-mcp

MCP Server for full GitBook API automation. Exposes **39 tools** that allow AI agents (Claude Code, Cursor, etc.) to manage documentation, change requests, reviews, and Git Sync programmatically.

## Quickstart

```bash
# 1. Clone
git clone <your-repo-url>
cd gitbook-mcp

# 2. Install and build
npm install
npm run build

# 3. Configure
cp .env.example .env
# Edit .env with your token (see "Configuration" below)

# 4. Run
npm start
```

## Configuration

### Environment variables

| Variable | Required | Description |
|---|---|---|
| `GITBOOK_API_TOKEN` | Yes | GitBook API token |
| `GITBOOK_DEFAULT_ORG_ID` | No | Default organization ID |
| `GITBOOK_DEFAULT_SPACE_ID` | No | Default space ID |
| `GITBOOK_API_BASE_URL` | No | API base URL (default: `https://api.gitbook.com/v1`) |

### Get your token

1. Go to [GitBook Developer Settings](https://app.gitbook.com/account/developer)
2. Create a new API Token
3. Copy the token to your `.env`

### `.env` example

```env
GITBOOK_API_TOKEN=gb_api_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
GITBOOK_DEFAULT_SPACE_ID=
GITBOOK_DEFAULT_ORG_ID=
```

## AI Agent Integration

### Claude Code

Add to `.mcp.json` in your project root:

```json
{
  "mcpServers": {
    "gitbook": {
      "command": "node",
      "args": ["/path/to/gitbook-mcp/dist/index.js"],
      "env": {
        "GITBOOK_API_TOKEN": "${GITBOOK_API_TOKEN}",
        "GITBOOK_DEFAULT_ORG_ID": ""
      }
    }
  }
}
```

Claude Code resolves `${GITBOOK_API_TOKEN}` from shell environment variables. Add to your `~/.bashrc` or `~/.zshrc`:

```bash
export GITBOOK_API_TOKEN="your-token-here"
```

### Cursor

Add to `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (project):

```json
{
  "mcpServers": {
    "gitbook": {
      "command": "node",
      "args": ["/path/to/gitbook-mcp/dist/index.js"],
      "env": {
        "GITBOOK_API_TOKEN": "your-token-here",
        "GITBOOK_DEFAULT_ORG_ID": ""
      }
    }
  }
}
```

> In Cursor, `${VAR}` interpolation is not supported. Place the token directly in the JSON.

### Other MCP clients

Any client compatible with MCP via **stdio transport** will work. The server reads stdin/stdout following the MCP protocol.

## Tools

### Spaces (6)

| Tool | Description |
|---|---|
| `get_space` | Get space details |
| `update_space` | Update title, visibility |
| `create_space` | Create new space in an org |
| `duplicate_space` | Duplicate an existing space |
| `list_spaces` | List spaces in an org |
| `search_space_content` | Search content within a space |

### Pages (8)

| Tool | Description |
|---|---|
| `get_space_revision` | Full page tree of a space |
| `list_pages` | List pages (with pagination) |
| `get_page_by_id` | Read page by ID |
| `get_page_by_path` | Read page by URL path (e.g., `getting-started/install`) |
| `get_page_links` | Outgoing links from a page |
| `get_page_backlinks` | Pages linking to a page (backlinks) |
| `list_files` | List files (images, attachments) |
| `get_file` | File details and download URL |

### Change Requests (6)

| Tool | Description |
|---|---|
| `create_change_request` | Create new CR (similar to PR/draft) |
| `list_change_requests` | List CRs of a space |
| `get_change_request` | CR details |
| `update_change_request` | Update CR title/status |
| `merge_change_request` | Merge CR into main content |
| `sync_change_request` | Sync CR with latest content |

### Reviews (5)

| Tool | Description |
|---|---|
| `list_reviews` | List reviews of a CR |
| `submit_review` | Approve, request changes, or comment |
| `list_requested_reviewers` | List requested reviewers |
| `request_reviewers` | Request review from specific users |
| `remove_reviewer` | Remove reviewer from a CR |

### Comments (6)

| Tool | Description |
|---|---|
| `list_comments` | List comments (space or CR) |
| `post_comment` | Post comment (supports markdown) |
| `update_comment` | Edit existing comment |
| `delete_comment` | Delete comment |
| `list_comment_replies` | List replies to a comment |
| `post_comment_reply` | Reply to a comment |

### Git Sync (3)

| Tool | Description |
|---|---|
| `git_import` | Import content from a Git repo to a space |
| `git_export` | Export content from a space to a Git repo |
| `get_git_info` | Git Sync status and configuration |

### Organizations (4)

| Tool | Description |
|---|---|
| `get_organization` | Organization details |
| `list_collections` | List collections in an org |
| `get_collection` | Collection details |
| `ask_ai` | Ask GitBook AI about the documentation |

### Content Import (1)

| Tool | Description |
|---|---|
| `import_content` | Import content from a URL into the org |

## Architecture

```
src/
├── index.ts                 # Entrypoint — stdio transport
├── server.ts                # McpServer creation
├── config.ts                # Environment variable loading
├── client/
│   ├── gitbook-client.ts    # HTTP client for GitBook API v1
│   └── types.ts             # API response types
├── tools/
│   ├── index.ts             # Registration of all 39 tools
│   ├── spaces.ts            # 6 tools
│   ├── pages.ts             # 8 tools
│   ├── change-requests.ts   # 6 tools
│   ├── reviews.ts           # 5 tools
│   ├── comments.ts          # 6 tools
│   ├── git-sync.ts          # 3 tools
│   ├── organizations.ts     # 4 tools
│   └── content-import.ts    # 1 tool
├── schemas/
│   └── index.ts             # Reusable Zod schemas
└── utils/
    ├── errors.ts            # API error handling
    └── pagination.ts        # Pagination helpers
```

## Scripts

| Command | Description |
|---|---|
| `npm run build` | Compile TypeScript to `dist/` |
| `npm start` | Start MCP server via stdio |
| `npm run dev` | Compile in watch mode (development) |
| `npm run inspect` | Open MCP Inspector for debugging |

## Requirements

- Node.js >= 18.0.0
- npm

## Dependencies

| Package | Version | Usage |
|---|---|---|
| `@modelcontextprotocol/sdk` | ^1.12.0 | Official MCP SDK |
| `zod` | ^3.24.0 | Schema validation |
| `typescript` | ^5.7.0 | (dev) Compilation |

## Debug

### MCP Inspector

```bash
npm run inspect
```

Opens a web interface to test tools interactively.

### Error logs

The server sends formatted errors back to the MCP client. GitBook API errors include:
- HTTP status code
- Failed endpoint
- GitBook error message

### Common issues

| Problem | Solution |
|---|---|
| `GITBOOK_API_TOKEN is required` | Set the environment variable or create the `.env` file |
| `GitBook API error 401` | Invalid or expired token — generate a new one |
| `GitBook API error 403` | Token lacks permission for the resource |
| `GitBook API error 404` | Incorrect space/page/org ID |
| `Cannot find module dist/index.js` | Run `npm run build` first |

## Update

```bash
cd ~/gitbook-mcp
git pull
npm install
npm run build
```

## License

MIT

TDQS

B3.2/5.0

Scored across 39 tools

Disambiguation4/5

Most tools target distinct resource-action pairs, but a few overlaps exist: get_page_by_id vs get_page_by_path both retrieve pages, and git_import vs import_content both perform destructive imports from different sources. These are minor confusions, as the descriptions clarify the differences.

Naming Consistency4/5

The naming convention is predominantly verb_noun in snake_case (e.g., get_space, create_change_request, list_comments), which is consistent. However, git_import and git_export break the pattern by placing the noun first, and ask_ai is slightly anomalous. Overall, the style is readable and predictable with only minor deviations.

Tool Count2/5

With 39 tools, this server is heavily over-scoped for an MCP server. The domain of GitBook is broad, but the tool count exceeds the typical range and feels unwieldy. Many tools are narrowly focused (e.g., list_requested_reviewers vs remove_reviewer), and consolidation could reduce the count while maintaining functionality.

Completeness2/5

Significant gaps exist in page management: there are no tools to create, update, or delete pages directly. While change requests are well-covered, the inability to manage pages is a critical omission. Also missing are delete operations for spaces and change requests, limiting lifecycle completeness.

Maintenance

ActivityInactive
ResponsivenessNo issues