Table of contents
- Устранение неполадок
- Ошибки импорта и установки
- ImportError: cannot import name 'StreamableHTTPServer'
- TypeError: FastMCP.run() got an unexpected keyword argument 'host'
- Управление сессиями и протокол MCP
- Bad Request: Missing session ID
- Not Acceptable: Client must accept both application/json and text/event-stream
- Таймауты и производительность
- Ошибки доступа к URL и файлам
- Ошибки авторизации
- Ошибки взаимодействия с MinerU
- Дополнительные ресурсы
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Устранение неполадок
Эта страница содержит решения для наиболее распространенных проблем при работе с MinerU MCP Server. Если вы столкнулись с ошибкой, сначала проверьте соответствующий раздел ниже.
Ошибки импорта и установки
ImportError: cannot import name 'StreamableHTTPServer'
Если при запуске вы видите ошибку импорта компонентов MCP, убедитесь, что вы используете корректную версию MCP SDK.
Причина: Несоответствие версии библиотеки mcp требованиям проекта.
Решение:
- Проверьте установленную версию:
pip show mcp - Убедитесь, что версия находится в диапазоне
>=1.0.0,<2.0.0, как указано в requirements.txt. - Если версия другая, переустановите зависимости:
pip install -r requirements.txt
TypeError: FastMCP.run() got an unexpected keyword argument 'host'
Причина: Попытка использовать метод .run() из старых версий MCP SDK или неверный способ запуска сервера. В текущей архитектуре мы используем ASGI-приложение с Hypercorn.
Решение:
Не вызывайте FastMCP.run() напрямую с аргументами хоста. Вместо этого используйте точку входа, определенную в src/mineru_mcp/main.py, которая настраивает Hypercorn для обслуживания ASGI-приложения.
При локальном запуске используйте команду:
python -m mineru_mcp.main
Управление сессиями и протокол MCP
Bad Request: Missing session ID
Причина: Протокол MCP Streamable HTTP требует инициализации сессии перед вызовом инструментов. Сервер ожидает заголовок Mcp-Session-Id.
Решение:
- Сначала выполните вызов метода
initialize. - Скопируйте значение
Mcp-Session-Idиз заголовков ответа. - Передавайте этот ID в заголовке
Mcp-Session-Idдля всех последующих запросов (например,tools/call).
Пример инициализации:
curl -X POST http://localhost:8001/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-03-26",
"capabilities": {},
"clientInfo": {"name": "test", "version": "1.0"}
}
}'
Примечание: Если вы используете Интеграцию с LiteLLM, LiteLLM автоматически управляет сессиями, и вам не нужно делать этого вручную.
Not Acceptable: Client must accept both application/json and text/event-stream
Причина: Клиент отправил запрос с заголовком Accept, который не включает оба требуемых формата.
Решение:
Убедитесь, что в заголовке Accept указаны оба типа MIME:
Accept: application/json, text/event-stream
Это требование протокола MCP Streamable HTTP, так как сервер может возвращать либо мгновенный JSON-ответ, либо поток событий (SSE).
Таймауты и производительность
TimeoutError при парсинге больших документов
Причина: Процесс парсинга занял больше времени, чем разрешено переменной окружения MCP_TIMEOUT_SECONDS. По умолчанию это 600 секунд (10 минут).
Решение: Увеличьте таймаут в конфигурации.
- Откройте docker-compose.yml.
- Найдите переменную
MCP_TIMEOUT_SECONDSв секцииenvironmentсервисаmineru-mcp. - Увеличьте значение (например, до
1200для 20 минут):environment: - MCP_TIMEOUT_SECONDS=1200 - Перезапустите контейнер:
docker-compose up -d --force-recreate mineru-mcp
Подробнее о настройке таймаутов см. в разделе Конфигурация.
Высокое потребление памяти или зависание
Причина: Накопление временных файлов или утечка ресурсов в сессиях.
Решение:
- Проверьте логи сервера на наличие ошибок очистки:
docker-compose logs -f mineru-mcp - Убедитесь, что функция очистки в src/mineru_mcp/mcp_tools.py выполняется корректно (временные файлы должны удаляться в блоке
finally). - Если проблема сохраняется, попробуйте перезапустить контейнер, чтобы очистить
/tmp.
Ошибки доступа к URL и файлам
404 Not Found / Connection Error при source_type='url'
Причина:
- URL не является публичным и недоступен из сети, где запущен Docker-контейнер MCP-сервера.
- Файл был удален или перемещен.
- Проблемы с сетью между контейнером MCP и внешним интернетом.
Решение:
- Проверьте доступность URL: Убедитесь, что URL открывается в браузере.
- Используйте Base64: Если файл находится на вашем локальном компьютере или во внутренней сети, не используйте
source_type='url'. Вместо этого закодируйте файл в Base64 и используйтеsource_type='base64'.{ "source_type": "base64", "source": "JVBERi0xLjQKJeLjz9M...", "filename": "document.pdf" } - Локальная разработка: Если вы запускаете MCP локально (не в Docker) и пытаетесь скачать файл с
localhost, убедитесь, что порт открыт. В Docker-средеlocalhostвнутри контейнера относится к самому контейнеру, а не к хост-машине. Используйтеhost.docker.internalили публичный URL.
Ошибка декодирования Base64
Причина: Неверный формат строки Base64 (например, присутствуют переносы строк, пробелы или символы, не входящие в алфавит Base64).
Решение:
- Убедитесь, что строка Base64 чистая (без префиксов типа
data:application/pdf;base64,). - Проверьте целостность данных.
- Посмотрите логи функции
decode_base64_stringв src/mineru_mcp/file_handler.py.
Ошибки авторизации
401 Unauthorized
Причина: Неверный или отсутствующий API-ключ, если включена защита MCP_API_KEY.
Решение:
- Убедитесь, что переменная
MCP_API_KEYзадана в docker-compose.yml. - При запросе передавайте правильный токен в заголовке
Authorization: Bearer YOUR_KEY. - Если вы не планируете использовать авторизацию, убедитесь, что
MCP_API_KEYне задана (оставлена пустой или закомментирована), чтобы отключить проверку.
См. реализацию middleware в src/mineru_mcp/main.py.
Ошибки взаимодействия с MinerU
MinerU недоступен (Connection Refused)
Причина: Сервер MinerU не запущен или адрес MINERU_URL указан неверно.
Решение:
- Проверьте статус контейнера MinerU:
docker ps - Убедитесь, что переменная
MINERU_URLв docker-compose.yml указывает на правильный адрес. Если MinerU и MCP находятся в одной сети Docker, используйте имя сервиса (например,http://mineru:8000). - Проверьте логи MinerU на наличие ошибок запуска.
Ошибка формата результата MinerU
Причина: MinerU вернул ответ в неожиданном формате, который не удалось распарсить.
Решение:
- Проверьте логи MCP-сервера на наличие сообщений об ошибке парсинга JSON.
- Убедитесь, что вы используете совместимую версию MinerU (проект ориентирован на MinerU v3.x).
- Функция форматирования результатов находится в src/mineru_mcp/mineru_client.py. Если структура ответа MinerU изменилась, возможно, потребуется обновление кода.
Дополнительные ресурсы
- Быстрый старт — Проверка базовой настройки.
- Тестирование — Запуск тестов для диагностики проблем.
- Архитектура — Понимание потока данных для поиска узких мест.
- Конфигурация — Полный список переменных окружения.