MCP Report Generator

Генератор HTML-отчётов и инструкций администратора через Model Context Protocol (MCP). FastAPI + Python, Jinja2-шаблоны, SSE-транспорт.

Обзор

MCP Report Generator — это сервер, который предоставляет Claude Code (и другим MCP-клиентам) инструменты для генерации красивых HTML-отчётов. Два типа документов:

Отчёты генерируются как самодостаточные HTML-файлы (весь CSS встроен) и сохраняются на сервере. В ответ вы получаете прямую ссылку на готовый документ.

SSE https://tpl.developing-site.ru/mcp/sse
Стек: Python 3.12, FastAPI, FastMCP (mcp SDK), Jinja2, uvicorn. Сервер работает через systemd, nginx проксирует SSE-соединения.

Быстрый старт

  1. 1 Добавьте MCP-сервер в конфигурацию Claude Code. Создайте или отредактируйте файл .mcp.json в корне проекта (или ~/.claude/mcp.json для глобального доступа).
  2. 2 Перезапустите Claude Code — MCP-инструменты появятся автоматически: generate_report, generate_guide, list_reports.
  3. 3 Попросите Claude сгенерировать отчёт: «Сгенерируй отчёт по проекту с результатами проверки» — Claude сам вызовет нужный инструмент и вернёт ссылку.

Конфигурация

Проектный конфиг

Файл .mcp.json в корне проекта — MCP-сервер доступен только в этом проекте:

.mcp.json
{
  "mcpServers": {
    "reports": {
      "type": "sse",
      "url": "https://tpl.developing-site.ru/mcp/sse"
    }
  }
}

Глобальный конфиг

Файл ~/.claude/mcp.json — MCP-сервер доступен из любого проекта:

~/.claude/mcp.json
{
  "mcpServers": {
    "reports": {
      "type": "sse",
      "url": "https://tpl.developing-site.ru/mcp/sse"
    }
  }
}

Совместно с другими MCP-серверами

Если у вас уже есть другие серверы, просто добавьте "reports" в существующий mcpServers:

.mcp.json
{
  "mcpServers": {
    "claude-code": {
      "command": "claude",
      "args": ["mcp", "serve"]
    },
    "reports": {
      "type": "sse",
      "url": "https://tpl.developing-site.ru/mcp/sse"
    }
  }
}
Важно: После изменения .mcp.json необходимо перезапустить Claude Code, чтобы новый MCP-сервер подключился.

generate_report

generate_report TOOL

Генерирует HTML-отчёт (чеклист) по выполненным задачам проекта. Создаёт самодостаточный HTML с боковой навигацией, статусами, шагами проверки и результатами E2E-тестов.

Параметры

ПараметрТипОбязательныйОписание
project_namestringДаНазвание проекта (например: "Fast Rail")
project_urlstringДаURL сайта проекта
datestringДаДата отчёта (например: "24 февраля 2026")
groupsItemGroup[]ДаГруппы задач с пунктами, статусами и шагами проверки
test_summaryTestFile[]НетСводка по тестовым файлам
filenamestringНетИмя файла (без .html). По умолчанию: slug + "-report"
darkbooleanНетТёмная тема по умолчанию (false)

Возвращает

Строку с URL сгенерированного отчёта, путём к файлу, размером и статистикой.

Компо��енты отчёта

generate_guide

generate_guide TOOL

Генерирует HTML-инструкцию администратора с таблицами полей, хлебными крошками и пошаговыми инструкциями. Боковая панель с SVG-иконками и блоком данных доступа.

Параметры

ПараметрТипОбязательныйОписание
project_namestringДаНазвание проекта
admin_urlstringДаURL админ-панели
datestringДаДата создания инструкции
credentialsCredentialsДаДанные доступа (url, login, password)
sectionsGuideSection[]ДаРазделы инструкции
filenamestringНетИмя файла (без .html). По умолчанию: slug + "-guide"
darkbooleanНетТёмная тема по умолчанию (false)

Возвращает

Строку с URL сгенерированной инструкции, путём к файлу, размером и числом разделов.

Компоненты инструкции

list_reports

list_reports TOOL

Показывает список ранее сгенерированных отчётов на сервере. Без параметров — возвращает все файлы с размерами, датами и ссылками.

Параметры: нет. Возвращает текстовый список файлов.

Модели данных

Все параметры инструментов используют типизированные модели. Ниже — полная схема каждой.

Step

ПолеТипОписание
textstringТекст шага
expectstringОжидаемый результат (необязательно)

Note

ПолеТипОписание
typestringТип: info / warn / error / success
textstringТекст заметки (HTML допускается)

TestResult

ПолеТипОписание
namestringНазвание теста
statusstringСтатус: pass / fail / skip

CheckItem report

ПолеТипОписание
numstringНомер пункта, например "1.1"
titlestringЗаголовок пункта
statusstringСтатус: done / partial / error (по умолчанию done)
descriptionstringОписание (необязательно)
stepsStep[]Шаги ручной проверки
testsTestResult[]E2E тесты
noteNote?Заметка

ItemGroup report

ПолеТипОписание
namestringНазвание группы, например "Блок 1 — Главная"
itemsCheckItem[]Пункты в группе

TestFile report

ПолеТипОписание
filestringИмя тестового файла
statusstringСтатус: pass / fail
passedintПройдено тестов
totalintВсего тестов

Credentials guide

ПолеТипОписание
urlstringURL панели администратора
loginstringЛогин
passwordstringПароль

FieldDesc guide

ПолеТипОписание
namestringНазвание поля
descriptionstringОписание поля

GuideSubsection guide

ПолеТипОписание
numstringНомер подраздела (необязательно)
titlestringЗаголовок подраздела
descriptionstringОписание
pathstring[]Хлебные крошки, например ["WP Admin", "Страницы", "Главная"]
fieldsFieldDesc[]Таблица полей
stepsStep[]Пошаговая инструкция
noteNote?Заметка

GuideSection guide

ПолеТипОписание
idstringHTML id для якоря, например "hero"
titlestringЗаголовок секции
iconstringИмя иконки (см. список), по умолчанию "fileText"
countint?Число для бейджа в сайдбаре (необязательно)
descriptionstringОбщее описание секции
subsectionsGuideSubsection[]Подразделы
fieldsFieldDesc[]Поля (если нет подразделов)
pathstring[]Хлебные крошки (если нет подразделов)
stepsStep[]Шаги (если нет подразделов)
noteNote?Заметка (если нет подразделов)

Дизайн-система

Цвета

Четыре семантических цвета, каждый в трёх вариантах (основной, фон, рамка). Автоматически переключаются между светлой и тёмной темой.

Синий
акцент, ссылки
Зелёный
выполнено
Оранжевый
частично, внимание
Красный
ошибка

Светлая и тёмная тема

Оба шаблона (отчёт и инструкция) поддерживают светлую и тёмную тему. Пользователь может переключить тему кнопкой в боковой панели (солнце/луна), выбор сохраняется в localStorage.

Генерация с тёмной темой по умолчанию

Чтобы отчёт или инструкция открывались сразу в тёмной теме, передайте параметр dark: true:

generate_report с тёмной темой
{
  "project_name": "Мой Сайт",
  "project_url": "https://example.com",
  "date": "24 февраля 2026",
  "dark": true,
  "groups": [...]
}
generate_guide с тёмной темой
{
  "project_name": "Мой Сайт",
  "admin_url": "https://example.com/wp-admin/",
  "date": "24 февраля 2026",
  "dark": true,
  "credentials": {...},
  "sections": [...]
}
Как это работает: Параметр dark: true добавляет атрибут data-theme="dark" к тегу <html>. Все CSS-переменные автоматически переключаются на тёмные значения. Пользователь всё ещё может переключить тему вручную кнопкой.

Или попросите Claude на естественном языке:

Промпт
Сгенерируй отчёт по проекту в тёмной теме.

Адаптивность

На экранах менее 900px боковая панель скрывается, контент занимает всю ширину.

Общие компоненты

Иконки

В инструкции администратора каждая секция может иметь SVG-иконку в боковой панели. Доступны 17 иконок из набора Lucide (16x16, контурные):

lock
fileText
monitor
package
calculator
settings
barChart
shield
msgSquare
list
image
mapPin
fileMinus
user
smartphone
calendar
mail

Примеры использования

Пример: простой отчёт

Попросите Claude сгенерировать отчёт, описав задачи и их статус. Claude автоматически вызовет generate_report:

Промпт для Claude
Сгенерируй отчёт по проекту "Мой Сайт" (https://example.com).
Дата: 24 февраля 2026.

Блок 1 — Главная:
- 1.1 Hero-секция — выполнено
- 1.2 Навигация — выполнено
- 1.3 Футер — частично (не хватает ссылок на соцсети)

Блок 2 — Контакты:
- 2.1 Форма обратной связи — выполнено
- 2.2 Карта — ошибка (API ключ не работает)

Сделай в тёмной теме.

Пример: JSON вызова generate_report

Если нужно вызвать инструмент напрямую с конкретными данными:

JSON
{
  "project_name": "Мой Сайт",
  "project_url": "https://example.com",
  "date": "24 февраля 2026",
  "dark": true,
  "groups": [
    {
      "name": "Блок 1 — Главная",
      "items": [
        {
          "num": "1.1",
          "title": "Hero-секция",
          "status": "done",
          "description": "Слайдер с 3 слайдами, автопрокрутка",
          "steps": [
            {"text": "Открыть главную страницу", "expect": "Слайдер загружается"},
            {"text": "Подождать 5 секунд", "expect": "Слайд автоматически переключается"}
          ]
        },
        {
          "num": "1.2",
          "title": "Форма обратной связи",
          "status": "done",
          "tests": [
            {"name": "form.spec.ts > отправка формы", "status": "pass"},
            {"name": "form.spec.ts > валидация email", "status": "pass"}
          ]
        },
        {
          "num": "1.3",
          "title": "Карта",
          "status": "error",
          "note": {"type": "error", "text": "API ключ Яндекс.Карт истёк"}
        }
      ]
    }
  ],
  "test_summary": [
    {"file": "form.spec.ts", "status": "pass", "passed": 2, "total": 2}
  ]
}

Пример: простая инструкция

Попросите Claude сгенерировать инструкцию администратора, описав разделы и поля. Claude автоматически вызовет generate_guide:

Промпт для Claude
Сгенерируй инструкцию администратора для проекта "Мой Сайт".
URL админки: https://example.com/wp-admin/
Логин: admin, пароль: mypassword123
Дата: 24 февраля 2026.

Разделы:

1. Управление страницами (иконка fileText)
   - 1.1 Главная страница
     Путь: WP Admin → Страницы → Главная
     Поля: Заголовок (основной текст hero), Подзаголовок (текст под заголовком)
     Шаги: Перейти в WP Admin → Страницы → Главная,
            Найти мета-бокс «Hero-секция»,
            Изменить текст и нажать «Обновить» → Изменения видны на сайте

2. Медиафайлы (иконка image, счётчик: 47)
   Шаги: Перейти в Медиафайлы → Добавить новый → Загрузить файл
   Совет: Рекомендуемый размер 1920x1080, формат WebP

3. Настройки калькулятора (иконка calculator)
   Путь: WP Admin → Настройки → Калькулятор
   Поля: API ключ (ключ для расчё��а), Валюта (RUB/USD/EUR)
   Важно: После изменения API ключа очистите кэш сайта

Пример: JSON вызова generate_guide

JSON
{
  "project_name": "Мой Сайт",
  "admin_url": "https://example.com/wp-admin/",
  "date": "24 февраля 2026",
  "dark": true,
  "credentials": {
    "url": "https://example.com/wp-admin/",
    "login": "admin",
    "password": "mypassword123"
  },
  "sections": [
    {
      "id": "pages",
      "title": "Управление страницами",
      "icon": "fileText",
      "description": "Редактирование контента страниц через мета-боксы.",
      "subsections": [
        {
          "num": "1.1",
          "title": "Главная страница",
          "path": ["WP Admin", "Страницы", "Главная"],
          "fields": [
            {"name": "Заголовок", "description": "Основной заголовок hero-секции"},
            {"name": "Подзаголовок", "description": "Текст под заголовком"}
          ],
          "steps": [
            {"text": "Перейдите в WP Admin → Страницы → Главная"},
            {"text": "Найдите мета-бокс «Hero-секция»"},
            {"text": "Измените текст и нажмите «Обновить»", "expect": "Изменения видны на сайте"}
          ]
        }
      ]
    },
    {
      "id": "media",
      "title": "Медиафайлы",
      "icon": "image",
      "count": 47,
      "steps": [
        {"text": "Перейдите в WP Admin → Медиафайлы"},
        {"text": "Загрузите изображение через «Добавить новый»", "expect": "Файл появляется в библиотеке"}
      ],
      "note": {"type": "info", "text": "Рекомендуемый размер изображений: 1920x1080px, формат WebP."}
    }
  ]
}
Результат: После вызова инструмента вы получите прямую ссылку на сгенерированный HTML-документ, готовый к отправке клиенту.