Quiz App MCP server
Quiz App MCP server
Un servidor MCP (Model Context Protocol) de Python construido con FastMCP. Expone herramientas para:
Claude Desktop, localmente, a través de stdio
claude.ai, de forma remota, a través de HTTP (desplegado en Render)
Opcionalmente, respaldado por una base de datos MySQL mediante SQLAlchemy.
Estructura del proyecto
.
├── server.py # entry point — branches on RENDER env var (stdio vs HTTP)
├── config.py # loads .env, exposes shared SQLAlchemy engine
├── tools/
│ ├── __init__.py
│ └── quiz.py # tool definitions — register(mcp) adds them to a FastMCP instance
├── .env # secrets — never commit
├── .env.example
└── requirements.txtRelated MCP server: Quiz App MCP server
Configuración
git clone https://github.com/sathvik1607/Quiz_mcp_server.git
cd Quiz_mcp_server
python -m venv venv
.\venv\Scripts\pip install -r requirements.txt
copy .env.example .env
# fill in .env with real DB credentials (or remove the DB_* lines if unused)Verifica la conexión a la base de datos antes de integrarlo en Claude Desktop:
.\venv\Scripts\python.exe -c "from config import engine; from sqlalchemy import text; print(engine.connect().execute(text('SELECT 1')).scalar())"Esto debería imprimir 1. Si se cuelga o da error, arregla primero la conectividad de .env/DB — no intentes depurar eso a través de Claude Desktop.
Ejecutar localmente (stdio)
.\venv\Scripts\python.exe server.pyO usa el inspector MCP para llamar a las herramientas manualmente (interfaz de navegador, no se necesita Claude Desktop — útil para comprobar la petición/respuesta de cada herramienta de forma aislada). Requiere Node/npm, ya que se lanza mediante npx:
.\venv\Scripts\mcp.exe dev server.pyUsa el punto de entrada mcp.exe en venv\Scripts, no python -m mcp — el paquete mcp no tiene __main__ y esa forma falla.
Conectar con Claude Desktop
Añádelo a %APPDATA%\Claude\claude_desktop_config.json (combínalo con lo que ya haya — no sobrescribas el archivo):
{
"mcpServers": {
"quizapp": {
"command": "C:\\path\\to\\project\\venv\\Scripts\\python.exe",
"args": ["C:\\path\\to\\project\\server.py"]
}
}
}Usa rutas absolutas que coincidan con el lugar donde clonaste el repositorio.
Cierra y reinicia Claude Desktop por completo — ciérralo desde la bandeja del sistema, no solo la ventana. Solo recarga la configuración de MCP en un reinicio completo.
Luego verifica que se cargó: Settings → Connectors → quizapp debería aparecer en "Other tools" con 5 herramientas (Register user, Get question, Validate answer, Generate leaderboard, Review answers).
Jugar al quiz
Inicia un nuevo chat y sé explícito: un prompt vago como "empecemos el quiz" puede desviarse a un flujo integrado no relacionado de "generar un quiz" en lugar de llamar a las herramientas de este servidor. En su lugar, di algo como:
"Usa la herramienta register_user para registrarme como <name> con unique_id <id>, y luego empieza el quiz."
A partir de ahí, las propias instrucciones del servidor (en server.py) guían el resto del flujo: una pregunta cada vez, esperando tu respuesta antes de continuar.
Desplegar en Render (HTTP, para claude.ai)
Haz push a GitHub (
.envestá en gitignore — nunca lo incluyas en un commit).Crea un Web Service de Render conectado al repositorio.
Configura las variables de entorno en el panel de Render:
Variable
Valor
RENDERtrueDB_HOSTel host de tu base de datos
DB_USERel usuario de tu base de datos
DB_PASSWORDla contraseña de tu base de datos
DB_NAMEel nombre de tu base de datos
Comando de inicio:
python server.pyEn
server.py, actualizaBASE_URLen la ramaRENDERcon tu URL real de Render.En claude.ai → Settings → Connectors, añade:
https://your-app.onrender.com/mcp
Actualmente no hay autenticación configurada en el endpoint HTTP — cualquiera con la URL puede llamar a todas las herramientas, incluidas las que usan la base de datos. Esta fue una decisión explícita para mantener la configuración sencilla por ahora; revísala antes de exponer algo sensible (ver Seguridad más abajo).
Nota
Se eliminó OAuth del endpoint HTTP por ahora — todavía no estamos usando claude.ai para acceder a la base de datos/las herramientas de este servidor, por lo que no valía la pena la complejidad adicional. Vuelve a añadirlo más adelante si es necesario.
Keep-alive
El plan gratuito de Render se duerme después de 15 minutos de inactividad, lo que hace que la primera solicitud tras el reposo sea lenta (30–60s) o expire. Mitigaciones ya implementadas:
Un hilo en segundo plano en
server.pyhace ping a/healthcada 10 minutos.Añade un monitor externo (por ejemplo, UptimeRobot) en
https://your-app.onrender.com/healthcada 5 minutos — no en/mcp.
Añadir una nueva herramienta
Abre tools/quiz.py y añade una función dentro de register(mcp):
@mcp.tool()
def my_new_tool(param1: str, param2: int) -> dict:
"""
One-sentence description of what this tool does.
The agent reads this docstring to decide when to call the tool.
Args:
param1: What this string parameter means.
param2: What this integer parameter means.
"""
result = do_something(param1, param2)
return {"result": result}No hay ningún paso de registro aparte — se llama a register(mcp) tanto para las instancias de stdio como para las de HTTP.
Seguridad
.envestá en gitignore — nunca lo incluyas en un commit.Las herramientas nunca devuelven SQL crudo ni exponen el esquema de la base de datos.
Todas las consultas usan SQL parametrizado (
text("... WHERE id = :id"), no interpolación de cadenas).Cualquier nombre de tabla/columna proporcionado por el usuario debe comprobarse contra una lista blanca antes de usarse en SQL.
El endpoint HTTP de Render no tiene autenticación — trátalo como público. No añadas herramientas que expongan datos sensibles u operaciones destructivas sobre la base de datos hasta que se vuelva a añadir la autenticación.
Quien tenga las credenciales compartidas
DB_*tiene acceso a la misma base de datos real — no hay una instancia separada de desarrollo/staging.register_useryvalidate_answerescriben directamente en ella, por lo que probar localmente añade filas reales junto a los datos reales del quiz. Usa ununique_iddistintivo al probar y no reutilices estas credenciales más de lo necesario.
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for trivia: 1.4M+ questions (EN+PL), 24 categories, 12 tools + 4 prompts, OAuth 2.1.
Create, edit and publish scored quizzes and read results from any MCP client. Free plan included.
Create and manage quizzes, leads, and respondents on RooQuiz, a lead-capture assessment platform.
AI-powered corporate learning platform — manage courses, users, and insights via Claude.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceEnables users to run an interactive quiz through natural language, registering players, retrieving questions, validating answers, and generating leaderboards or answer reviews via MCP tools.-
- FlicenseNot gradedqualityBmaintenanceEnables users to run and manage quizzes through natural language, including registering users, fetching questions, validating answers, and generating leaderboards, over both local stdio and remote HTTP connections.-
- FlicenseNot gradedqualityBmaintenanceEnables quiz gameplay through natural language, including user registration, retrieving questions, validating answers, generating leaderboards, and reviewing answers. It runs locally via stdio for Claude Desktop or remotely over HTTP for claude.ai, with optional MySQL-backed persistence.-
- FlicenseNot gradedqualityCmaintenanceEnables interactive quiz sessions via natural language, supporting user registration, question retrieval, answer validation, leaderboard generation, and answer review, with optional MySQL persistence.-