pdf-mcp
by talipovvs
README.md
# pdf-mcp
MCP-сервер для генерации PDF-отчётов по объектам недвижимости. Работает с
LibreChat, Claude Desktop и любым MCP-совместимым клиентом.
Сделан как часть дипломного проекта по автоматизации аналитической
отчётности в строительном бизнесе.
## Что умеет
- Отчёт по локации: транспорт, инфраструктура, конкуренты, оценки по блокам
- Отчёт по рынку: таблицы цен, конкуренты, динамика
- Итоговый отчёт по проекту: параметры объекта, локация, рынок,
входные данные для финансовой модели
- Поддержка кириллицы через TTF-шрифты Arial
- Преобразование Markdown в PDF без внешних SDK
## Структура
```
pdf-mcp/
├── mcp_server.py MCP-сервер, обрабатывает запросы от агента
├── pdf_generator.py собирает PDF из Markdown
├── requirements.txt зависимости
├── fonts/ шрифты Arial для кириллицы
└── README.md
```
## Установка
1. Клонируй репозиторий:
```bash
git clone https://github.com/talipovvs/pdf_mcp.git
cd pdf_mcp
```
2. Установи зависимости:
```bash
pip install -r requirements.txt
```
3. Шрифты Arial уже лежат в папке `fonts/`. Если хочешь заменить — клади
туда свои `Arial.ttf`, `ArialBold.ttf`, `ArialItalic.ttf` и
`ArialBoldItalic.ttf`.
## Подключение к LibreChat
В файле `librechat.yaml` добавь:
```yaml
mcpServers:
pdf-reports:
command: python3
args:
- "/путь/до/pdf_mcp/mcp_server.py"
env:
REPORTS_DIR: "/путь/до/папки/с/отчётами"
REPORTS_URL: "http://localhost:8090"
timeout: 60000
```
### Переменные окружения
| Переменная | Что делает | По умолчанию |
|---|---|---|
| REPORTS_DIR | Куда сохранять готовые PDF | /agent-data/reports |
| REPORTS_URL | Базовый URL для скачивания PDF | http://localhost:8090 |
## Инструменты
Сервер регистрирует четыре tools, которые видит агент:
### generate_location_report
PDF по анализу локации. В Markdown должно быть:
- таблица оценок по блокам (транспорт, инфраструктура, конкуренты, район)
- топ-3 преимуществ и рисков
- итоговый балл и вывод
### generate_market_report
PDF по исследованию рынка. В Markdown должно быть:
- таблицы цен (мин / медиана / макс / источник)
- основные конкуренты
- динамика цен и вывод
### generate_summary_report
Итоговый PDF по проекту. В Markdown должно быть:
- параметры объекта
- сжатые блоки по локации и рынку
- макропараметры и входные данные для финансовой модели
### get_current_date
Возвращает текущую дату с сервера в формате YYYY-MM-DD. Нужен, чтобы агент
не придумывал даты сам — модель не знает текущее время.
### Общие параметры (для трёх PDF-инструментов)
| Параметр | Тип | Что значит |
|---|---|---|
| object_name | string | Название объекта, например «Дом Сидорова» |
| object_address | string | Адрес или локация |
| content | string | Содержимое отчёта в формате Markdown |
| company_name | string | Название компании для шапки отчёта |
| object_type | string | «жилой» или «коммерческий», влияет на дисклеймер |
## Как это работает
```
Агент → mcp_server.py → pdf_generator.py → готовый PDF → URL для скачивания
```
1. LibreChat при старте поднимает mcp_server.py и держит его процесс живым
2. Агент вызывает один из инструментов и шлёт Markdown с содержимым отчёта
3. mcp_server.py запускает pdf_generator.py через subprocess и передаёт
параметры в JSON
4. pdf_generator.py рендерит Markdown в PDF через fpdf2
5. Готовый файл сохраняется в REPORTS_DIR, агент получает ссылку и
показывает её пользователю
## Что понимает в Markdown
| Что в Markdown | Как рендерится |
|---|---|
| `## Заголовок` | Синяя плашка с белым текстом |
| `### Подзаголовок` | Синий текст |
| `- пункт` | Маркированный список с буллетом |
| `1. пункт` | Нумерованный список |
| `\| таблица \|` | Таблица с чередующимися строками и шапкой |
| `**ключ:** значение` | Жирный ключ, обычное значение справа |
| `> цитата` | Серый курсив для внутренних пометок |
| `---` | Горизонтальная линия |
## Зависимости
| Пакет | Зачем |
|---|---|
| mcp | реализация MCP-протокола |
| fpdf2 | сборка PDF |
| markdown | парсинг Markdown |
| jinja2 | зарезервировано для шаблонов |
## Тест без LibreChat
Можно проверить генерацию PDF напрямую, без MCP:
```bash
echo '{"tool":"generate_summary_report","object_name":"Тест","object_address":"Москва","content":"## Заголовок\n- пункт 1","company_name":"Моя Компания"}' | python3 pdf_generator.py
```
В REPORTS_DIR появится PDF-файл, путь к нему выведется в stdout.
## Лицензия
MIT. Используй как хочешь.
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues