Tech Exam
БесплатноНе проверенMCP server for creating and taking ENEM exams with official questions, including progress tracking, scoring, and interactive UI in MCP-compatible clients.
Описание
MCP server for creating and taking ENEM exams with official questions, including progress tracking, scoring, and interactive UI in MCP-compatible clients.
README
Aplicação MCP independente para criar e realizar provas do ENEM dentro de clientes com suporte a Apps, como ChatGPT e Claude. A interface React oferece uma experiência visual, mas a fonte de verdade é o servidor: questões, ordem, respostas, pontuação e status são persistidos no MongoDB.
Stack e arquitetura
- Skybridge 1.3, TypeScript strict, React 19 e CSS Modules.
- Zod valida todas as entradas MCP.
- MongoDB (driver oficial
mongodb, sem ORM) — banco único, dev e produção. - Vitest cobre domínio, concorrência, segurança e fluxo completo, contra um MongoDB real (
mongodb-memory-server, replica set de 1 nó). src/serverconcentra tools, serviços, repositórios, schemas e erros.src/sharedcontém DTOs públicos e constantes compartilhadas.src/views/exam-app.tsxé a view Skybridge;src/componentsdivide a UI por responsabilidade.
O examId é a chave da tentativa. useViewState ajuda a view a reencontrá-lo, mas todo carregamento consulta novamente get_exam_progress e get_current_question. submit_answer usa uma transação Mongo (sessão de client, requer replica set), trava por prova no processo e a restrição única (examId, questionId) para impedir avanço ou pontuação duplicados.
Requisitos
- Node.js 24.18 ou superior
- npm 11 ou superior
- Um MongoDB (Atlas ou self-hosted, precisa ser replica set — Atlas já é por padrão, inclusive no tier grátis)
- Docker opcional
Instalação e dados
cp .env.example .env # preencha MONGODB_URI (e MONGODB_DB, se quiser outro nome)
npm install
npm run seed:mongo # popula enem_questions/enem_disciplines/enem_exams a partir de data/enem/
npm run dev
seed:mongo só precisa rodar uma vez por banco (ou de novo se data/enem/ mudar — é idempotente, usa upsert). As imagens das questões apontam pro Cloudinary por padrão; para reenviá-las a uma conta própria, rode CLOUDINARY_URL=cloudinary://... npm run upload:cloudinary e ajuste CLOUDINARY_IMAGE_BASE_URL antes do seed.
npm run dev escolhe uma porta livre a partir da 3000, inicia Skybridge e ngrok em conjunto e imprime a URL HTTPS pública já terminada em /mcp. Isso permite executar o Tech Exam mesmo quando outro MCP já está usando a porta 3000. O DevTools usa a porta local exibida e o inspetor do ngrok fica em http://localhost:4040. Pressione Ctrl+C para encerrar os dois processos. Para solicitar outra porta inicial, use DEV_PORT=3100 npm run dev.
O comando exige o ngrok instalado e autenticado (ngrok config add-authtoken ...). Para desenvolver sem endereço público, use:
npm run dev:local
npm run dev:alpic mantém o túnel nativo do Skybridge como alternativa.
Comandos de qualidade e produção:
npm run lint
npm run typecheck
npm test
npm run build
npm start
Tools MCP
| Tool | Efeito |
|---|---|
create_exam |
Sorteia numberOfQuestions questões oficiais do ENEM da disciplina informada (ou de todas, com "todas"), entre todos os anos disponíveis, persiste a tentativa e abre a view. |
get_current_question |
Retorna a questão ainda não respondida sem avançar. |
submit_answer |
Valida e persiste uma resposta de forma transacional e idempotente, revela o feedback e avança uma vez. |
pause_exam |
Pausa sem remover progresso. |
resume_exam |
Retoma e devolve a questão atual. |
get_exam_progress |
Retorna status, posição, total, respondidas, acertos e percentual. |
finish_exam |
Finaliza de forma idempotente e calcula erros, explicações, desempenho e estudos recomendados. |
Todas retornam uma estrutura consistente com exam, progress, question? e result?. Antes de uma resposta, PublicQuestion não contém gabarito, explicação ou metadado equivalente. O gabarito aparece somente no result da questão já respondida ou no relatório final.
Provas do ENEM
create_exam aceita disciplina (Linguagens, Ciências Humanas, Ciências da Natureza, Matemática, ou "todas" para misturar todas) e numberOfQuestions. O servidor sorteia questões dessa disciplina entre todos os anos já semeados no MongoDB (enem_questions/enem_exams — ver "Instalação e dados", amostragem aleatória via $sample, sem repetir questão na mesma prova), grava uma cópia normalizada em questions (_id no formato enem-{year}-{index}) e monta a tentativa com essa seleção — sem replicar a ordem de nenhuma prova específica. As alternativas usam as letras originais (A–E) e podem ser texto ou imagem (algumas questões, sobretudo química/física de provas antigas, têm alternativas só com figura, hospedada no Cloudinary). Como a fonte não traz explicação pedagógica, o campo explanation só informa o gabarito oficial. Formato inesperado no Mongo retorna ENEM_API_ERROR; pedir mais questões do que o pool da disciplina tem disponível retorna INSUFFICIENT_QUESTIONS.
ChatGPT
- Rode
npm run deve copie a URL exibida emMCP público. - No ChatGPT, habilite o modo de desenvolvedor para Apps/Connectors.
- Crie um conector MCP apontando para
<URL-DO-TUNNEL>/mcp. - Peça, por exemplo: “Crie uma prova do ENEM 2022 com 5 questões”.
Em uma implantação pública, use a URL HTTPS do serviço no lugar do túnel.
Claude
Clientes Claude com transporte HTTP podem usar o mesmo endpoint MCP. No Claude Code:
claude mcp add --transport http tech-exam http://localhost:3000/mcp
Para um cliente remoto, substitua o endereço local pela URL HTTPS. A disponibilidade de views MCP depende da versão/capacidade do host; quando a view não for suportada, as tools ainda devolvem conteúdo estruturado e textual.
Docker
docker build -t tech-exam-mcp .
docker run --rm -p 3000:3000 -e MONGODB_URI="mongodb+srv://..." -e MONGODB_DB="questions" tech-exam-mcp
Sem volume — o estado vive inteiramente no MongoDB apontado por MONGODB_URI, externo ao container.
Persistência, usuários e limitações
ExamAttempt.userIdé opcional; nunca usa e-mail como chave. Sem identificador, o servidor criasessionIdaleatório.- MongoDB é a única base suportada; precisa ser um replica set (Atlas já é, mesmo no tier grátis) porque
submit_answerusa transação de sessão. - A view se adapta ao tema, telas estreitas e fullscreen solicitado pelo usuário. Hosts MCP controlam altura, composer, modais e podem recusar mudanças de modo.
- O botão “Iniciar outra prova” envia uma mensagem ao assistente, que coleta os novos parâmetros de modo conversacional.
- A primeira versão não inclui autenticação OAuth.
create_examlê deenem_questions/enem_exams, já semeados no Mongo — nenhuma chamada de rede pra terceiros na hora de criar a prova.
Estrutura principal
data/enem/ cópia própria dos JSONs de prova/questão do ENEM, fonte do seed:mongo
scripts/
seed-mongo.ts popula enem_questions/enem_disciplines/enem_exams a partir de data/enem/
upload-cloudinary.ts envia as imagens de public/ pro Cloudinary (pasta enem-files)
src/
components/
AlternativeList/
AnswerFeedback/
ExamApp/
ExamHeader/
ExamProgress/
ExamResult/
QuestionCard/
server/
db.ts MongoClient/Db singleton
errors/
repositories/
schemas/
services/
tools/
shared/
constants/
types/
views/exam-app.tsx
server.ts
tests/exam.service.test.ts
As decisões de produto e API completas estão em SPEC.md.
Установка Tech Exam
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/alexmmatos/enem-mcpFAQ
Tech Exam MCP бесплатный?
Да, Tech Exam MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Tech Exam?
Нет, Tech Exam работает без API-ключей и переменных окружения.
Tech Exam — hosted или self-hosted?
Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.
Как установить Tech Exam в Claude Desktop, Claude Code или Cursor?
Открой Tech Exam на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
LibreOffice Tools
Enables AI agents to read, write, and edit Office documents via LibreOffice with token-efficient design. Supports multiple formats including DOCX, XLSX, PPTX, a
автор: passerbyflutterdannote/figma-use
Full Figma control: create shapes, text, components, set styles, auto-layout, variables, export. 80+ tools.
автор: dannoteLogo.dev
Search and retrieve company logos by brand or domain. Customize size, format, and theme to match your design needs. Accelerate design, prototyping, and content
автор: NOVA-3951Design Inspiration Server
Searches top design platforms like Dribbble and Behance to provide UI inspiration, color palettes, and layout patterns via the Serper API. It allows users to re
автор: YonasValentinCompare Tech Exam with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории design
