使用说明
Tutor de Matemáticas — MCP (Model Context Protocol)
Trabajo Práctico Final — "Desarrollando una Solución de IA Aplicada"
Materia: S.A.C. Modelos y Aplicaciones de la Inteligencia Artificial
1. Tutor de Matemáticas (MCP) — Agente tutor basado en IA para alumnos de secundaria, especializado en álgebra y resolución de ecuaciones.
2. Descripción del problema
Los estudiantes de nivel secundario necesitan apoyo personalizado para comprender álgebra y resolver ecuaciones lineales y cuadráticas. Este proyecto entrega un tutor virtual que explica los pasos, resuelve problemas cuando el usuario lo solicita y propone ejercicios para practicar usando una pizarra visual.
Público objetivo: estudiantes de secundaria y docentes que quieran un asistente para prácticas y explicaciones de álgebra.
3. Demo (GIF)
4. Stack tecnológico
- Python 3.10+
- FastAPI — backend y endpoints REST
- Uvicorn — servidor ASGI
- Beanie + Motor — ODM/driver para MongoDB (async)
- Pydantic — validación de modelos
- React + Vite — frontend (client)
- Gemini SDK / Google Generative AI (
google.generativeai) — integración con el modelo generativo - PIL (Pillow) — manipulación y decodificación de imágenes
- passlib, jose, OAuth2 — autenticación y hashing de contraseñas
- Otros:
python-dotenv,uvicorn,motor,beanie,pydantic,pytest(opcional)
5. Requisitos previos
- Node.js (v16+) y npm
- Python 3.10 o superior
- MongoDB (local o URL Atlas)
- Variables de entorno en un archivo
.env:MONGO_URI— cadena de conexión a MongoDBSECRET_KEY— clave para JWTGEMINI_API_KEY— API key para Gemini SDK
6. Instalación (clonar e instalar)
# Clonar
git clone https://github.com/ArianneAlonso/tutor-math-mcp.git
cd <repo>
Frontend (client)
cd client
npm install
npm run dev
# El frontend correrá en http://localhost:5173 por defecto (Vite)
Backend (server)
cd server
# Crear entorno virtual
python -m venv env
# Windows (PowerShell)
.\env\Scripts\Activate.ps1
# Windows (cmd.exe)
.\env\Scripts\activate
# macOS / Linux
source env/bin/activate
# Instalar dependencias
pip install -r requirements.txt
# Correr server (desarrollo)
uvicorn main:app --reload --host 0.0.0.0 --port 3000
7. Uso / Ejecución
- Levantar MongoDB (local o configurar
MONGO_URI). - Levantar frontend y backend según instrucciones anteriores.
- Abrir la app en el navegador (frontend).
- Registrar un usuario (endpoint
/register) o usar la UI. - Iniciar sesión para obtener token (endpoint
/token). - Crear o seleccionar una conversación y usar:
- Chat:
/chat— envía mensajes al agente tutor. - Pizarra:
/calculate— enviar imagen base64 de la pizarra para análisis y cálculo. - MCP JSON-RPC:
/mcp— para listar herramientas, inicializar protocolo y llamarlas.
- Chat:
8. Endpoints importantes
POST /register— registrar usuarioPOST /token— login (OAuth2 Password)GET /users/me— info del usuario actualPOST /conversations/new— crear conversaciónDELETE /conversations/{conversation_id}— eliminar conversaciónGET /conversations— listar conversaciones del usuarioPOST /chat— enviar mensaje al tutor (requiere token)POST /calculate— analizar pizarra (imagen base64)POST /mcp— handler MCP (initialize, tools/list, tools/call)
9. Documentación de las herramientas (Tools)
Todas las herramientas están documentadas y expuestas para el protocolo MCP. Si se utiliza salida estructurada (objetos JSON), también están documentadas.
1) resolver_ecuacion_lineal(m: float, b: float)
- Descripción: Resuelve ecuaciones de la forma
m x + b = 0. - Argumentos:
m(number) — coeficiente dex(no puede ser 0).b(number) — término independiente.
- Salida (JSON):
SolucionLinealcon campos:tipo: "lineal"ecuacion_original: stringsolucion: floatpasos: lista de strings (paso a paso)verificacion: string
- Errores posibles:
ValueErrorsim == 0(devuelve error de validación con código -32602 en MCP).
2) resolver_ecuacion_cuadratica(a: float, b: float, c: float)
- Descripción: Resuelve
a x² + b x + c = 0. - Argumentos:
a(number) — coeficiente cuadrático (no puede ser 0)b(number)c(number)
- Salida (JSON):
SolucionCuadraticacon campos:tipo: "cuadratica"ecuacion_original,a,b,c,discriminante,soluciones,tipo_solucion,pasos
- Errores posibles:
ValueErrorsia == 0.
3) realizar_operacion(expresion: str)
- Descripción: Evalúa expresiones aritméticas/algebraicas simples, soportando
^como potencia y funcionessqrt,sin,cos, etc. - Argumentos:
expresion(string) — la expresión a evaluar.
- Salida (JSON):
ResultadoOperacioncon campos:expresion_original,resultado(float),pasos(explicación paso a paso).
- Seguridad y validación: la función filtra caracteres mediante regex y usa un
namespace_segurocon funciones permitidas. Si la expresión contiene caracteres no permitidos, lanzaValueError.
10. Manejo de errores
El servidor captura excepciones y las transforma en respuestas JSON-RPC o HTTP con códigos apropiados.
- En
/mcp:- Herramienta no encontrada → error JSON-RPC con
code: -32602. - Error de validación (ej:
a == 0) → devuelvecode: -32602y mensaje claro. - Error interno → devuelve
code: -32603con mensaje del servidor.
- Herramienta no encontrada → error JSON-RPC con
- En endpoints REST:
- Excepciones convertidas a
HTTPExceptionconstatus_codeydetaillegible.
- Excepciones convertidas a
En el flujo con Gemini, si la herramienta devuelve un error, el agente lo muestra al usuario y puede sugerir reintentar con otros argumentos.
11. Restricciones de dominio y reglas del agente
El agente sigue estrictamente las reglas solicitadas por el enunciado:
- Sólo matemáticas de nivel secundaria. Si el usuario pregunta por algo fuera de ese dominio, el agente responde con un mensaje que explica que no puede ayudar en ese tema y ofrece ejemplos de lo que sí puede hacer.
- Uso obligatorio de herramientas: cuando el usuario pide resolver una ecuación o realizar un cálculo, el agente debe invocar la herramienta adecuada.
- Botón de limpieza: la interfaz incluye un botón para limpiar el chat e iniciar una nueva conversación (implementado en el frontend). El endpoint
DELETE /conversations/{id}permite borrar una conversación en el backend.
12. Cumplimiento con MCP (Model Context Protocol)
POST /mcpimplementa los métodos mínimos requeridos:initialize— devuelveprotocolVersion,capabilitiesyserverInfo.tools/list— lista las herramientas disponibles (metadata).tools/call— permite ejecutar una herramienta conargumentsy devuelve la respuesta estructurada o un error JSON-RPC.
13. Generar requirements.txt
Esto es por si usas el repo y necesitas instalar otras dependencias, y actualizar tu txt:
Desde el entorno virtual activado:
pip freeze > requirements.txt
