Skip to main content
Glama

Quaestio MCP Server

Quaestio — это сервер Model Context Protocol (MCP) для анализа, решения и проверки вопросов. Он предоставляет инструменты MCP, позволяющие совместимому хосту отправлять вопросы, вложения и учебные материалы и получать структурированные, прослеживаемые и консервативные результаты.

Сервер не является пользовательским интерфейсом и не языковой моделью. Это слой MCP, который организует входной контракт, вызывает настроенные компоненты, проверяет ответы и возвращает клиенту структурированное решение.

Что такое MCP в этом проекте

MCP — это открытый протокол для подключения хост-приложений к серверам, предоставляющим инструменты и данные стандартизированным образом. В Quaestio:

host MCP / cliente MCP
          │
          │ transporte stdio + JSON-RPC
          ▼
Quaestio MCP Server
          │
          ├── ferramentas de resolução e verificação
          ├── parsing, OCR e PDF
          ├── materiais de estudo e busca semântica
          ├── análise e execução controlada de código
          └── políticas de confiabilidade e auditoria

MCP Server в настоящее время предоставляет примитив tools. Он не публикует resources, resource templates или prompts как отдельные примитивы MCP. Материалы, OCR, PDF-файлы и возможности сервера доступны через инструменты.

Используемые ссылки на протокол:

Возможности

  • решать вопросы с множественным выбором и открытые вопросы;

  • обрабатывать вопросы со встроенными изображениями;

  • выполнять консенсус между двумя настраиваемыми LLM-бэкендами;

  • подготавливать неанглийские вопросы для настроенных моделей;

  • сохранять альтернативы, индексы, формулы, код и вложения;

  • проверять предложение структурно и, если настроено, семантически;

  • применять детерминированную и опциональную символьную математическую проверку;

  • добавлять и искать локальные учебные материалы;

  • использовать семантические эмбеддинги с запасным вариантом TF-IDF;

  • извлекать текст из изображений с помощью Tesseract;

  • извлекать и интерпретировать текст из PDF-файлов;

  • анализировать код без его выполнения;

  • компилировать/проверять синтаксис без выполнения кода;

  • выполнять Python или JavaScript только в Docker-песочнице;

  • оценивать пакеты с ключом ответов и вычислять метрики;

  • возвращать trace выполненных шагов.

Принципы надёжности

Сервер спроектирован так, чтобы явно сообщать об ошибке, когда недостаточно доказательств.

  • отсутствие бэкенда или допустимого предложения приводит к needs_review;

  • разногласие между моделями не разрешается молча;

  • семантическая проверка не рассматривается как детерминированное доказательство;

  • verified зарезервирован для надёжных доказательств, таких как детерминированные математические проверки;

  • уверенность, заявленная моделью, ограничивается сервером;

  • входные данные, вложения, контекст и извлечённые материалы рассматриваются как ненадёжные данные, а не как системные инструкции;

  • сбои внешних провайдеров преобразуются в предупреждения и структурированные состояния;

  • сервер не должен использоваться для того, чтобы считать ответ LLM гарантией правильности.

Внутренняя архитектура

tools/call
   │
   ▼
MCP boundary
   │  valida argumentos e serializa resultado
   ▼
QuaestioService
   ├── classificação
   ├── recuperação de materiais
   ├── preparação linguística/OCR
   ├── solver determinístico ou LLM
   ├── consenso
   ├── verificação estrutural/semântica
   └── avaliação e trace

Основные внутренние компоненты:

  • models.py: канонические контракты и публичные состояния;

  • mcp_server.py: регистрация, диспетчеризация и MCP-транспорт;

  • service.py: оркестрация конвейера;

  • backends.py: детерминированные бэкенды, LLM, перевод и консенсус;

  • verification.py: структурные и математические проверки;

  • semantic_verifier.py: опциональная независимая семантическая проверка;

  • knowledge.py и embeddings.py: локальная база и семантический поиск;

  • ocr.py и pdf.py: локальное извлечение содержимого;

  • sandbox.py: контролируемое выполнение кода в Docker.

Транспорт и цикл MCP

Основной транспорт — stdio, подходящий для локальных серверов. Хост запускает процесс и общается с ним через stdin и stdout; каждое сообщение — это JSON-RPC. Журналы инициализации отправляются в stderr, чтобы не повредить канал MCP.

Сервер реализует современные потоки:

  1. server/discover — обнаружение версии, идентичности, возможностей и инструкций;

  2. tools/list — детерминированное обнаружение инструментов, схем и кэша;

  3. tools/call — выполнение инструмента со структурированным результатом.

Когда установлен официальный пакет mcp, сервер использует современный SDK с транспортом stdio. Без пакета используется минимальная реализация stdio, включённая в проект. Оба пути регистрируют один и тот же набор инструментов и следуют современному контракту. Каждый инструмент объявляет inputSchema и outputSchema; минимальный путь stdio также проверяет аргументы перед выполнением обработчика.

Сервер не открывает HTTP-порт. Streamable HTTP остаётся вне области действия этой версии.

Установка

Требования:

  • Python 3.11 или выше;

  • pip;

  • учётные данные конечной точки LLM, совместимой с API чата OpenAI, для ассистированного решения;

  • Tesseract только для локального OCR;

  • Docker и локальные образы только для run_code;

  • pypdf только для извлечения PDF-файлов.

Базовая установка:

python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -e ".[dev]"

Дополнительные опции:

pip install -e ".[sdk]"   # Python SDK oficial do MCP
pip install -e ".[math]"  # SymPy
pip install -e ".[pdf]"   # pypdf

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

Скопируйте .env.example в .env и заполните только тех провайдеров, которых хотите использовать. .env не должен храниться в системе контроля версий и не должен передаваться другим.

LLM-решение

QUAESTIO_LLM_BASE_URL=https://integrate.api.nvidia.com/v1
QUAESTIO_LLM_API_KEY=...
QUAESTIO_LLM_MODEL=...
QUAESTIO_LLM_TIMEOUT_SECONDS=45

Это основной бэкенд. Если второй бэкенд полностью настроен, Quaestio выполняет консенсус:

QUAESTIO_SECONDARY_LLM_BASE_URL=https://integrate.api.nvidia.com/v1
QUAESTIO_SECONDARY_LLM_API_KEY=...
QUAESTIO_SECONDARY_LLM_MODEL=...

Без бэкенда сервер остаётся доступным, но вопросы, которые не могут быть решены детерминированно, возвращают needs_review.

Языковая подготовка

QUAESTIO_TRANSLATION_MODE=auto
QUAESTIO_TRANSLATION_TARGET_LANGUAGE=en
QUAESTIO_TRANSLATOR_BASE_URL=https://integrate.api.nvidia.com/v1
QUAESTIO_TRANSLATOR_API_KEY=...
QUAESTIO_TRANSLATOR_MODEL=...
QUAESTIO_TRANSLATOR_TIMEOUT_SECONDS=30
QUAESTIO_TRANSLATION_OCR=auto
QUAESTIO_TRANSLATION_OCR_LANGUAGE=por+eng

Доступные режимы:

  • never: никогда не переводит;

  • auto: переводит, когда вопрос не на английском;

  • required: требует переводчик, когда перевод необходим.

Оригинальное изображение не изменяется. При наличии OCR распознанный текст может использоваться как вспомогательный контекст, но изображение по-прежнему отправляется как визуальное доказательство.

Семантический поиск

QUAESTIO_KNOWLEDGE_BASE_PATH=./data/knowledge.json
QUAESTIO_EMBEDDING_BASE_URL=https://integrate.api.nvidia.com/v1
QUAESTIO_EMBEDDING_API_KEY=...
QUAESTIO_EMBEDDING_MODEL=...
QUAESTIO_EMBEDDING_TIMEOUT_SECONDS=30

Эмбеддинги необязательны. Если они недоступны, локальная база использует TF-IDF. База хранит материалы и векторы локально; не добавляйте содержимое, которое не может быть сохранено в этом файле.

Независимая семантическая проверка

QUAESTIO_VERIFIER_LLM_BASE_URL=https://integrate.api.nvidia.com/v1
QUAESTIO_VERIFIER_LLM_API_KEY=...
QUAESTIO_VERIFIER_LLM_MODEL=...
QUAESTIO_VERIFIER_LLM_TIMEOUT_SECONDS=45

Этот бэкенд должен быть отделён от решателя, когда важна независимость проверки. Он возвращает supports, contradicts или uncertain; он не превращает ответ LLM в verified.

Дополнительные локальные ресурсы

QUAESTIO_TESSERACT_PATH=
QUAESTIO_DOCKER_PATH=
QUAESTIO_SANDBOX_PYTHON_IMAGE=python:3.12-slim

Docker-песочница не загружает образы автоматически. Образы должны существовать локально.

Как запустить сервер

После установки в режиме редактирования:

quaestio

Без установки в режиме редактирования:

$env:PYTHONPATH = "src"
python -m quaestio.mcp_server

Процесс кажется ожидающим ввода, потому что транспорт stdio управляется MCP-клиентом. Это ожидаемое поведение.

Настройка в MCP-клиенте

MCP-хосту необходимо запустить команду сервера как подпроцесс. Общий пример для Windows:

{
  "mcpServers": {
    "quaestio": {
      "command": "C:\\caminho\\para\\Quaestio\\.venv\\Scripts\\quaestio.exe"
    }
  }
}

Либо с помощью Python:

{
  "mcpServers": {
    "quaestio": {
      "command": "C:\\caminho\\para\\Quaestio\\.venv\\Scripts\\python.exe",
      "args": ["-m", "quaestio.mcp_server"],
      "env": {
        "PYTHONPATH": "C:\\caminho\\para\\Quaestio\\src"
      }
    }
  }
}

Переменные окружения могут быть предоставлены локальным .env или конфигурацией хоста. Предпочитайте механизм секретов хоста, если он доступен, и никогда не включайте реальные ключи в репозиторий.

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

Решение и проверка

Инструмент

Назначение

solve_question

Решает вопрос и возвращает ответ, статус, уверенность, источники, проверки и trace.

solve_questions_batch

Решает до 500 вопросов, сохраняя их ID.

verify_answer

Проверяет структурную согласованность предложения с вопросом и его вариантами.

verify_answer_semantically

Запрашивает проверку у независимого LLM-верификатора, если он настроен.

classify_question

Классифицирует тип, дисциплину и тему.

evaluate_questions

Решает вопросы с ключом ответов и возвращает метрики оценки.

Материалы и поиск

Инструмент

Назначение

add_study_material

Добавляет авторизованный текст в локальную базу.

search_study_material

Ищет релевантные материалы с помощью TF-IDF или эмбеддингов.

Разбор, OCR и документы

Инструмент

Назначение

parse_questions

Преобразует нумерованный текст в канонические вопросы.

solve_text

Выполняет разбор и решение блока текста.

extract_questions_from_image

Извлекает вопросы из изображений с помощью настроенного визуального бэкенда.

ocr_image

Выполняет локальный OCR с помощью Tesseract, не сохраняя изображение.

ocr_parse_image

Выполняет OCR и преобразует результат в вопросы.

extract_pdf_text

Извлекает текст из встроенного PDF с помощью pypdf.

extract_questions_from_pdf

Извлекает текст из PDF и создаёт канонические вопросы.

Для визуальной обработки и OCR входные данные должны содержать встроенное изображение в base64. URI-ссылки принимаются в каноническом контракте, но текущий поток OCR и мультимодальной отправки использует встроенные байты.

Код

Инструмент

Назначение

analyze_code

Анализирует код статически, без выполнения.

compile_code

Проверяет синтаксис/компиляцию без выполнения.

run_code

Выполняет только Python или JavaScript в Docker без сети и с ограничениями ресурсов.

run_code не выполняет код на хосте. Если Docker, образ или язык недоступны, возвращается структурированное состояние недоступности.

Диагностика

Инструмент

Назначение

server_capabilities

Раскрывает возможности и политику надёжности сервера.

Входной контракт

Канонический вопрос можно отправить так:

{
  "question": "Qual é a capital do Brasil?",
  "options": ["Rio de Janeiro", "Brasília", "São Paulo"],
  "question_id": "q-001",
  "context": "Questão de geografia.",
  "attachments": []
}

Основные поля:

  • question: обязательный текст;

  • options: необязательный список минимум с двумя уникальными альтернативами;

  • question_id: идентификатор, сохраняемый в пакетах;

  • context: дополнительный контекст или извлечённый материал;

  • attachments: изображения или документы, обычно с mime_type и data_base64;

  • expected_answer и expected_option_index: только для оценки с ключом ответов, не для направления решателя.

Выходной контракт

Ответ содержит, среди прочих полей:

{
  "question_type": "multiple_choice",
  "answer": "Brasília",
  "option_index": 1,
  "confidence": 0.75,
  "status": "answered",
  "method": "consensus",
  "verification": {
    "status": "answered",
    "verified": false,
    "semantic": {
      "status": "supports",
      "confidence": 0.91
    }
  },
  "sources": [],
  "warnings": [],
  "trace": []
}

Статус ответа

  • verified: достаточно детерминированных доказательств;

  • answered: предложение создано, но детерминированного доказательства нет;

  • needs_review: не хватило консенсуса, доказательств или проверки;

  • error: сбой в конвейере.

Поле correct заполняется только тогда, когда клиент предоставляет ключ ответов через expected_answer или expected_option_index.

Пример вызова MCP

После server/discover клиент может вызвать:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientInfo": {"name": "example-client", "version": "1.0.0"},
      "io.modelcontextprotocol/clientCapabilities": {}
    },
    "name": "solve_question",
    "arguments": {
      "question": "Qual é a capital do Brasil?",
      "options": ["Rio de Janeiro", "Brasília", "São Paulo"]
    }
  }
}

Результат MCP включает сериализованное текстовое содержимое и structuredContent для клиентов, поддерживающих структурированные результаты.

Разработка и проверка

Запустите автоматизированный набор тестов с помощью:

pytest -q

Модульные тесты должны выполняться без зависимости от реальных вызовов к провайдерам. Смоук-тесты против внешних API должны быть явными, с использованием локальных учётных данных и авторизованных запросов.

Связанная техническая документация:

Текущие ограничения

  • публичный HTTP-транспорт ещё не реализован;

  • сервер не предоставляет resources или prompts MCP;

  • семантический верификатор принимает встроенные изображения; внешние URI, PDF-файлы и видео на этом этапе ещё не отправляются;

  • индекс эмбеддингов требует переиндексации при смене настроенной модели;

  • OCR и извлечение PDF зависят от дополнительных локальных установок;

  • консенсус и семантическая проверка снижают риск, но не заменяют эталон, формальное доказательство или человеческую проверку.

-
license - not tested
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DevLucasLourenco/quaestio-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server