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 文本;
在不执行的情况下分析代码;
在不执行代码的情况下编译/检查语法;
仅在 Docker 沙箱中执行 Python 或 JavaScript;
使用答案键评估批次并计算指标;
返回已执行步骤的
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 包时,服务器使用带 stdio 传输的现代 SDK。如果没有该包,则使用项目内置的最小 stdio 实现。两条路径注册相同的工具集,并遵循现代契约。
每个工具都声明 inputSchema 和 outputSchema;最小 stdio 路径也会在处理程序执行前验证参数。
服务器不会启动 HTTP 端口。Streamable HTTP 不在本版本范围内。
安装
要求:
Python 3.11 或更高版本;
pip;用于辅助解答的、与 OpenAI chat API 兼容的 LLM 端点凭据;
仅用于本地 OCR 的 Tesseract;
仅用于
run_code的 Docker 和本地镜像;仅用于 PDF 提取的
pypdf。
基本安装:
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嵌入(embeddings)是可选的。当不可用时,本地知识库使用 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当审查的独立性很重要时,该后端应与 solver 分开。它返回 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 或 embeddings 搜索相关材料。 |
解析、OCR 与文档
工具 | 用途 |
| 将编号文本转换为规范问题。 |
| 解析并解答一段文本。 |
| 通过配置的视觉后端从图像中提取问题。 |
| 使用 Tesseract 执行本地 OCR,不持久化图像。 |
| 执行 OCR 并将结果转换为问题。 |
| 使用 |
| 提取 PDF 文本并创建规范问题。 |
对于视觉处理和 OCR,输入必须包含一张内联 base64 图片。URI 引用在规范契约中是允许的,但当前的 OCR 和多模态发送流程使用内联字节。
代码
工具 | 用途 |
| 在不执行的情况下静态分析代码。 |
| 在不执行的情况下检查语法/编译。 |
| 仅在 Docker 中执行 Python 或 JavaScript,无网络且有资源限制。 |
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:仅用于带答案键的评估,不作为 solver 的指引。
输出契约
响应包含(除其他字段外):
{
"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:流水线出现故障。
仅当客户端通过 expected_answer 或 expected_option_index 提供答案键时,correct 字段才会被填充。
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 的冒烟测试必须是显式的,使用本地凭据和已授权的问题。
相关技术文档:
多语言准备规范与计划 / 计划;
NIM 冒烟测试规范 / 计划;
Embedding 规范 / 计划;
当前限制
公开 HTTP 传输尚未实现;
服务器不暴露 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