Quaestio MCP Server
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 auditoriaMCP 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.
Сервер реализует современные потоки:
server/discover— обнаружение версии, идентичности, возможностей и инструкций;tools/list— детерминированное обнаружение инструментов, схем и кэша;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-slimDocker-песочница не загружает образы автоматически. Образы должны существовать локально.
Как запустить сервер
После установки в режиме редактирования:
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
Решение и проверка
Инструмент | Назначение |
| Решает вопрос и возвращает ответ, статус, уверенность, источники, проверки и trace. |
| Решает до 500 вопросов, сохраняя их ID. |
| Проверяет структурную согласованность предложения с вопросом и его вариантами. |
| Запрашивает проверку у независимого LLM-верификатора, если он настроен. |
| Классифицирует тип, дисциплину и тему. |
| Решает вопросы с ключом ответов и возвращает метрики оценки. |
Материалы и поиск
Инструмент | Назначение |
| Добавляет авторизованный текст в локальную базу. |
| Ищет релевантные материалы с помощью TF-IDF или эмбеддингов. |
Разбор, OCR и документы
Инструмент | Назначение |
| Преобразует нумерованный текст в канонические вопросы. |
| Выполняет разбор и решение блока текста. |
| Извлекает вопросы из изображений с помощью настроенного визуального бэкенда. |
| Выполняет локальный OCR с помощью Tesseract, не сохраняя изображение. |
| Выполняет OCR и преобразует результат в вопросы. |
| Извлекает текст из встроенного PDF с помощью |
| Извлекает текст из PDF и создаёт канонические вопросы. |
Для визуальной обработки и OCR входные данные должны содержать встроенное изображение в base64. URI-ссылки принимаются в каноническом контракте, но текущий поток OCR и мультимодальной отправки использует встроенные байты.
Код
Инструмент | Назначение |
| Анализирует код статически, без выполнения. |
| Проверяет синтаксис/компиляцию без выполнения. |
| Выполняет только Python или JavaScript в Docker без сети и с ограничениями ресурсов. |
run_code не выполняет код на хосте. Если Docker, образ или язык недоступны, возвращается структурированное состояние недоступности.
Диагностика
Инструмент | Назначение |
| Раскрывает возможности и политику надёжности сервера. |
Входной контракт
Канонический вопрос можно отправить так:
{
"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 зависят от дополнительных локальных установок;
консенсус и семантическая проверка снижают риск, но не заменяют эталон, формальное доказательство или человеческую проверку.
This server cannot be installed
Maintenance
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
An MCP server for deep research or task groups
Conformance checker for MCP servers. Free, no key, verdicts recomputable and re-measured daily.
MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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