enem-extractor
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@enem-extractorextraia as questões do ENEM 2023 D1"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ENEM Extractor
Extrai automaticamente cada questão de um PDF de prova do ENEM e salva como uma imagem PNG individual, organizada por ano e dia de aplicação.
Usa PyMuPDF para localizar o texto QUESTÃO NN
por coordenadas na página e Pillow para gerar as imagens.
Requisitos
Python 3.10+
Dependências em
requirements.txt(PyMuPDF,Pillow)
Related MCP server: examintel-mcp
Instalação
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
# ou, como pacote editável (habilita o comando `enem-extractor`):
pip install -e .Uso
Coloque os PDFs das provas na pasta
provas/.Nomeie cada arquivo seguindo o padrão do INEP, começando por ano e contendo o dia (
D1/D2):provas/2023_PV_impresso_D1_CD4.pdf provas/2023_PV_impresso_D2_CD4.pdfRode o extrator a partir da raiz do projeto:
python -m enem_extractor.main # ou, se instalado com `pip install -e .`: enem-extractor
As imagens são salvas em:
imagens/<ano>/<dia>/questao_NNN.pngNo dia 2 (
D2) a numeração das questões continua a partir de 91, seguindo a convenção do ENEM.
Uso como serviço / worker
O pacote expõe uma entrada única extract, ideal para ser chamada por um worker:
from enem_extractor import extract
# auto-detecção do tipo pelo nome do arquivo
result = extract("provas/2025_PV_impresso_D1_CD9_ampliada.pdf")
# forçando modo e pasta de saída
result = extract(pdf_path, output_dir="/tmp/out", mode="normal")
# result == {
# "pdf": "...",
# "mode": "ampliada", # 'normal' | 'ampliada'
# "output_dir": "imagens/2025/D1",
# "images": ["imagens/2025/D1/page_1_question_1.png", ...],
# }mode:"auto"(padrão) detecta pelo nome (ampliada/superampliada→ extractor ampliada; caso contrário normal). Use"normal"ou"ampliada"para forçar.output_dir: se omitido, derivaimagens/<ano>/<dia>do nome do arquivo.Erros:
FileNotFoundErrorse o PDF não existir;ValueErrorsemodefor inválido.
Uso via MCP (Model Context Protocol)
O projeto inclui um servidor MCP que expõe as provas e a extração para clientes como o Claude Code.
Instale o extra opcional:
uv sync --extra mcp
# ou, com pip:
pip install -e ".[mcp]"O servidor é iniciado pelo console script enem-extractor-mcp (via stdio). O
arquivo .mcp.json (versionado) já o registra para o Claude Code:
{
"mcpServers": {
"enem-extractor": {
"command": "uv",
"args": ["run", "--extra", "mcp", "enem-extractor-mcp"],
"env": { "PROVAS_DIR": "provas" }
}
}
}Ao abrir o projeto no Claude Code:
@lista as provas disponíveis como resources (prova://<arquivo>.pdf, além do agregadoprovas://list).Tools disponíveis para o agente:
list_provas()— varrePROVAS_DIRao vivo e devolve as provas com o modo detectado.extract_prova(name, mode="auto", output_dir=None)— extrai a prova (nameé o arquivo listado ou um caminho) e devolve{pdf, mode, output_dir, images}.
A pasta das provas é configurável pela variável PROVAS_DIR (default provas).
Notas:
extract_provaé síncrona — provas grandes (dezenas de páginas) bloqueiam até concluir.Provas novas na pasta aparecem no
@após reiniciar o servidor; o toollist_provassempre enxerga a pasta ao vivo.
Estrutura
.
├── src/enem_extractor/
│ ├── service.py # entrada única: extract() detecta o tipo e roteia
│ ├── catalog.py # catálogo de provas (list/resolve) para o MCP
│ ├── mcp_server.py # servidor MCP (resources + tools)
│ ├── main.py # CLI: varre provas/ e chama o service
│ ├── normal.py # extração da prova padrão (layout de duas colunas)
│ └── ampliada.py # extração da prova ampliada (coluna única)
├── tests/ # testes (unittest, sem PyMuPDF/Pillow)
├── provas/ # coloque os PDFs aqui (ignorados no Git)
├── .mcp.json # registro do servidor MCP (Claude Code)
├── requirements.txt
├── pyproject.toml
└── README.mdNotas
Prova padrão (
normal.py): detecta as duas colunas da prova, numeração contínua entre páginas, renderização com zoom 2x.Prova ampliada (
ampliada.py): layout de coluna única, para as versões de acessibilidade. Executável diretamente viapython -m enem_extractor.ampliada.A pasta
imagens/e os PDFs emprovas/não são versionados (veja.gitignore).
Licença
MIT — veja LICENSE.
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 Servers
- AlicenseAqualityCmaintenanceAn MCP server for reading, rendering, and searching PDF files, specifically optimized for LLMs to extract text, tables, and technical diagrams. It enables metadata retrieval, multi-format text extraction, and page-to-image rendering using PyMuPDF.Last updated552MIT
- Alicense-qualityCmaintenanceAn MCP server that indexes exam PDFs and HTML documents for semantic search, topic frequency analysis, and study plan generation, fully local and private.Last updatedMIT
- Alicense-qualityBmaintenanceMCP server for comprehensive PDF processing including text extraction with OCR, keyword search with regex, table extraction, and page preview as Base64 PNG images.Last updated1MIT
- Alicense-qualityDmaintenanceA read-only MCP server for PDF analysis that enables text extraction, image extraction, metadata retrieval, and text search via natural language.Last updatedMIT
Related MCP Connectors
MCP server for Brazilian Federal Senate open data (legislative, administrative, e-Cidadania).
An MCP server for deep research or task groups
Official Microsoft MCP Server to query Microsoft Entra data using natural language
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/FernandoAlmeidaPinto/enem-extractor'
If you have feedback or need assistance with the MCP directory API, please join our Discord server