Skip to main content
Glama
BilhosDev

bh-pdfdoc-reader

by BilhosDev
README.md
<p align="center">
  <h1 align="center">đź“„ bh-pdfdoc-reader</h1>
  <p align="center">
    <strong>Lightweight document reader for AI-powered IDEs</strong>
  </p>
  <p align="center">
    Read PDF & DOCX files directly in Cursor, Windsurf, VS Code, Antigravity, and Claude Desktop via MCP
  </p>
  <p align="center">
    <a href="#installation">Installation</a> •
    <a href="#mcp-integration">MCP Integration</a> •
    <a href="#cli-usage">CLI Usage</a> •
    <a href="#supported-formats">Formats</a>
  </p>
</p>

---

## Why?

AI coding assistants in IDEs like **Cursor**, **Windsurf**, **Antigravity**, and **VS Code Copilot** can't natively read PDF or Word documents. When you need to reference API docs, specifications, or reports while coding, you're stuck copy-pasting.

**bh-pdfdoc-reader** solves this by:

- 🔌 **MCP Server** — Plugs directly into your IDE's AI assistant
- 📑 **Structured output** — Markdown, JSON, or plain text
- 📊 **Table extraction** — Preserves tables from both PDF and DOCX
- ⚡ **Lightweight** — Minimal dependencies, fast startup
- 🖥️ **CLI tool** — Also works standalone from the terminal

## Installation

### Quick install (from GitHub)

```bash
# With MCP server support (recommended for IDE integration)
pip install "bh-pdfdoc-reader[mcp] @ git+https://github.com/BilhosDev/bh-pdfdoc-reader.git"

# Core only (CLI, no MCP)
pip install "bh-pdfdoc-reader @ git+https://github.com/BilhosDev/bh-pdfdoc-reader.git"
```

### From source (for development)

```bash
git clone https://github.com/BilhosDev/bh-pdfdoc-reader.git
cd bh-pdfdoc-reader
pip install -e ".[all]"
```

## MCP Integration

### What is MCP?

[Model Context Protocol (MCP)](https://modelcontextprotocol.io/) is an open standard that lets AI assistants use external tools. By running bh-pdfdoc-reader as an MCP server, your IDE's AI can read documents on demand.

### Cursor

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

```json
{
  "mcpServers": {
    "bh-pdfdoc-reader": {
      "command": "bh-pdfdoc-reader-mcp",
      "args": []
    }
  }
}
```

### Windsurf

Add to your MCP configuration:

```json
{
  "mcpServers": {
    "bh-pdfdoc-reader": {
      "command": "bh-pdfdoc-reader-mcp",
      "args": []
    }
  }
}
```

### VS Code + GitHub Copilot

Add to your `.vscode/mcp.json`:

```json
{
  "servers": {
    "bh-pdfdoc-reader": {
      "type": "stdio",
      "command": "bh-pdfdoc-reader-mcp",
      "args": []
    }
  }
}
```

### Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "bh-pdfdoc-reader": {
      "command": "bh-pdfdoc-reader-mcp",
      "args": []
    }
  }
}
```

### Antigravity (Google DeepMind)

Antigravity supports MCP servers natively. Add to your MCP settings:

```json
{
  "mcpServers": {
    "bh-pdfdoc-reader": {
      "command": "bh-pdfdoc-reader-mcp",
      "args": []
    }
  }
}
```

> **Note:** If the command isn't found, use the full path:
> `"command": "python"` and `"args": ["-m", "bh_pdfdoc_reader.mcp_server"]`

### Available MCP Tools

Once connected, your AI assistant can use these tools:

| Tool | Description |
|------|-------------|
| `read_document` | Read a PDF/DOCX file and return content (markdown or json) |
| `read_page` | Read a specific page from a PDF (1-indexed) |
| `get_document_info` | Get document metadata without reading full content |

**Example prompts you can use in your IDE:**

```
"Read the API documentation from docs/api-spec.pdf"
"What does page 5 of the contract say?"
"Summarize the report in reports/quarterly.docx"
"Extract the tables from data/pricing.pdf"
```

## CLI Usage

```bash
# Read a PDF (plain text output)
bh-pdfdoc-reader document.pdf

# Read a specific page
bh-pdfdoc-reader document.pdf --page 3

# Output as Markdown (great for piping to AI tools)
bh-pdfdoc-reader document.pdf --format markdown

# Output as JSON (for programmatic use)
bh-pdfdoc-reader report.docx --format json

# Raw text only (no formatting)
bh-pdfdoc-reader document.pdf --text-only
```

### Output Formats

| Format | Flag | Best For |
|--------|------|----------|
| Plain Text | `--format text` (default) | Terminal reading |
| Markdown | `--format markdown` | AI assistants, documentation |
| JSON | `--format json` | Programmatic processing |

## Supported Formats

| Format | Extension | Features |
|--------|-----------|----------|
| PDF | `.pdf` | Text extraction, table extraction, page selection, metadata |
| Word | `.docx` | Paragraphs, headings, tables, document properties |

## Python API

You can also use bh-pdfdoc-reader as a library:

```python
from bh_pdfdoc_reader.readers import get_reader
from bh_pdfdoc_reader.formatters import get_formatter

# Read a document
reader = get_reader("report.pdf")
result = reader.read("report.pdf", page=1)

# Format output
formatter = get_formatter("markdown")
print(formatter.format(result))

# Or get raw text
print(result.get_full_text())
```

## Project Structure

```
bh-pdfdoc-reader/
├── src/bh_pdfdoc_reader/
│   ├── __init__.py          # Package metadata
│   ├── __main__.py          # python -m support
│   ├── cli.py               # CLI entry point
│   ├── mcp_server.py        # MCP server for IDE integration
│   ├── readers/
│   │   ├── base.py          # Base reader class & factory
│   │   ├── pdf_reader.py    # PDF reader (pdfplumber)
│   │   └── docx_reader.py   # DOCX reader (python-docx)
│   └── formatters/
│       ├── markdown_fmt.py  # Markdown output
│       ├── json_fmt.py      # JSON output
│       └── text_fmt.py      # Plain text output
├── tests/                   # Unit tests
├── pyproject.toml           # Package configuration
└── README.md
```

## Development

```bash
# Clone and install in dev mode
git clone https://github.com/BilhosDev/bh-pdfdoc-reader.git
cd bh-pdfdoc-reader
pip install -e ".[all]"

# Run tests
pytest

# Run tests with coverage
pytest --cov=bh_pdfdoc_reader
```

## Comparison with Alternatives

| Feature | bh-pdfdoc-reader | markitdown | docling |
|---------|-----------------|------------|---------|
| MCP Server | ✅ Built-in | ❌ Separate package | ❌ No |
| Lightweight | ✅ ~200 lines | ❌ Heavy | ❌ Very heavy |
| PDF Support | âś… | âś… | âś… |
| DOCX Support | âś… | âś… | âś… |
| Table Extraction | ✅ | ⚠️ Basic | ✅ |
| Multiple Formats | âś… MD/JSON/Text | Markdown only | JSON only |
| Install Size | ~5 MB | ~50 MB | ~500 MB+ |
| Page Selection | ✅ | ❌ | ❌ |

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

## License

This project is licensed under the MIT License — see the [LICENSE](LICENSE) file for details.

---

## 🇹🇷 Türkçe

**bh-pdfdoc-reader**, Cursor, Windsurf, Antigravity ve VS Code gibi AI destekli IDE'lerde PDF ve DOCX dosyalarını doğrudan okuyabilmenizi sağlayan hafif bir araçtır.

### Ne İşe Yarar?

Yazılım geliştirirken API dökümanlarına, teknik şartnamelere veya raporlara başvurmanız gerektiğinde, PDF/Word dosyalarını kopyala-yapıştır yapmak zorunda kalırsınız. Bu araç, IDE'nizdeki AI asistanının dokümanları doğrudan okumasını sağlar.

### Nasıl Çalışır?

1. **MCP Server** olarak çalışır — IDE'nizdeki AI asistanı bu aracı otomatik olarak kullanır
2. **CLI aracı** olarak da kullanılabilir — terminalden doğrudan dosya okuyabilirsiniz
3. **Python kĂĽtĂĽphanesi** olarak da import edilebilir

### Hızlı Kurulum

```bash
# Kurulum (tek komut)
pip install "bh-pdfdoc-reader[mcp] @ git+https://github.com/BilhosDev/bh-pdfdoc-reader.git"

# CLI kullanımı
bh-pdfdoc-reader belge.pdf
bh-pdfdoc-reader belge.pdf --page 3
bh-pdfdoc-reader rapor.docx --format markdown
```

### IDE Entegrasyonu

IDE'nizin MCP ayarlarına aşağıdaki yapılandırmayı ekleyin:

```json
{
  "mcpServers": {
    "bh-pdfdoc-reader": {
      "command": "bh-pdfdoc-reader-mcp",
      "args": []
    }
  }
}
```

Kurulumdan sonra IDE'nizde Ĺźu tĂĽr komutlar verebilirsiniz:
- *"docs/api.pdf dosyasını oku"*
- *"Sözleşmenin 5. sayfasında ne yazıyor?"*
- *"rapor.docx dosyasındaki tabloları çıkar"*

---

## Roadmap

- [ ] `.doc` (legacy Word) support
- [ ] `.pptx` (PowerPoint) support
- [ ] `.xlsx` / `.csv` support
- [ ] OCR for scanned PDFs (via Tesseract)
- [ ] Streaming/chunked output for large documents
- [ ] PyPI package publishing