Skip to main content
Glama
ypolosov

pageindex-mcp

by ypolosov
README.md
# pageindex-mcp

Self-hosted MCP server для Claude Code, реализующий [PageIndex](https://github.com/VectifyAI/PageIndex) vectorless RAG полностью локально.

## Архитектура

```
Claude Code (Max plan — handles all reasoning)
    │  stdio
    ▼
pageindex-mcp (TypeScript)
    ├── index_document    ──→ run_pageindex.py (Python, local)
    │                           └── OpenAI API (tree generation, one-time)
    ├── get_document_tree ──→ local JSON
    ├── get_page_content  ──→ pdftotext (local)
    ├── list_documents    ──→ local filesystem
    └── delete_document   ──→ local filesystem
```

**Никаких LLM-вызовов внутри сервера** — Claude Code сам навигирует дерево и анализирует контент. Не нужен ANTHROPIC_API_KEY.

## Предварительные требования

```bash
# 1. Node.js ≥ 18
node --version

# 2. Python PageIndex repo
git clone https://github.com/VectifyAI/PageIndex /opt/pageindex
cd /opt/pageindex && pip install -r requirements.txt

# 3. poppler-utils для извлечения текста из PDF
# Ubuntu/Debian:
sudo apt install poppler-utils
# macOS:
brew install poppler
```

## Установка и сборка

```bash
npm install
npm run build
```

## Переменные окружения

| Переменная            | Обязательна | Описание |
|-----------------------|-------------|----------|
| `OPENAI_API_KEY`      | да (для индексации) | PageIndex генерирует дерево через OpenAI |
| `PAGEINDEX_REPO_PATH` | да | Путь к клонированному репозиторию PageIndex |
| `INDEX_STORE_PATH`    | нет | Где хранить JSON индексы (default: `~/.pageindex-store`) |
| `PAGEINDEX_MODEL`     | нет | OpenAI модель (default: `gpt-4o-2024-11-20`) |

Для OpenRouter вместо прямого OpenAI:
```bash
OPENAI_BASE_URL=https://openrouter.ai/api/v1
OPENAI_API_KEY=sk-or-v1-...
PAGEINDEX_MODEL=openai/gpt-4o
```

## Подключение к Claude Code

### Вариант A: локальный stdio (рекомендуется)

Добавить в `~/.claude.json` или `.mcp.json` в проекте:

```json
{
  "mcpServers": {
    "pageindex-local": {
      "command": "node",
      "args": ["/absolute/path/to/pageindex-mcp/build/index.js"],
      "env": {
        "OPENAI_API_KEY": "sk-...",
        "PAGEINDEX_REPO_PATH": "/opt/pageindex"
      }
    }
  }
}
```

### Вариант B: dev-режим (tsx, без сборки)

```json
{
  "mcpServers": {
    "pageindex-local": {
      "command": "npx",
      "args": ["tsx", "/absolute/path/to/pageindex-mcp/src/index.ts"],
      "env": {
        "OPENAI_API_KEY": "sk-...",
        "PAGEINDEX_REPO_PATH": "/opt/pageindex"
      }
    }
  }
}
```

## Использование в Claude Code

```
# 1. Индексировать документ (один раз)
"Проиндексируй PDF /path/to/spec.pdf с id pam-spec"

# 2. Посмотреть структуру документа
"Покажи структуру документа pam-spec"

# 3. Извлечь контент конкретной секции
"Покажи содержимое ноды 0005 в документе pam-spec"

# 4. Список всех документов
"Какие документы проиндексированы?"

# 5. Удалить индекс
"Удали индекс pam-spec"
```

Claude Code сам навигирует дерево, выбирает нужные секции и отвечает — не нужны отдельные API-вызовы.

## Инструменты MCP

| Инструмент          | Описание |
|---------------------|----------|
| `index_document`    | Генерирует PageIndex tree из PDF (один раз, затем переиспользуется) |
| `get_document_tree` | Иерархическая структура документа для навигации |
| `get_page_content`  | Извлечение текста по node_id или диапазону страниц |
| `list_documents`    | Список проиндексированных документов с метаданными |
| `delete_document`   | Удалить документ из индекса |

## Стоимость

- **Индексация** (разово): ~$0.10–0.50 за документ (OpenAI gpt-4o)
- **Поиск**: бесплатно на Claude Code Max plan
- **Хранение**: локальные JSON файлы

## Ограничения

- Генерация дерева требует OpenAI API (hardcoded в Python PageIndex)
- Для больших PDF (500+ стр.) индексация может занять несколько минут
- Без `poppler-utils` текст страниц не извлекается (только метаданные дерева)

TDQS

A4.2/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct action: indexing, reading content, listing documents, retrieving structure, and deleting. No overlap or confusion between tools.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern: index_document, get_page_content, list_documents, get_document_tree, delete_document.

Tool Count5/5

With 5 tools, the set is well-scoped for the domain of document indexing and retrieval. Every tool serves a clear, necessary function without redundancy.

Completeness5/5

The tools cover the full lifecycle of a document in the index: create (index), read (list, tree, content), and delete. No critical operations are missing given the stated purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues