MCP server by rroblf01
Prueba de Concepto: Generación de Página Estática con MCP y LangChain
Este proyecto es una prueba de concepto que utiliza MCP (Model Context Protocol) y LangChain para generar una página web estática personalizada basada en información proporcionada sobre un negocio. La aplicación combina herramientas de procesamiento de lenguaje natural y generación de contenido dinámico para crear una experiencia automatizada.
Descripción
La aplicación toma como entrada información detallada sobre un negocio, como su nombre, descripción, servicios, productos, ubicación, estilo y colores preferidos. A partir de esta información, genera automáticamente:
- Un archivo HTML (
index.html) que incluye un header, un body y un footer. - Un archivo CSS (
styles.css) con estilos personalizados para la página.
El proyecto utiliza LangChain para la integración con modelos de lenguaje y MCP para la gestión de herramientas y generación de contenido dinámico.
Estructura del Proyecto
main.py: Archivo principal que orquesta la generación de la página web.server.py: Servidor MCP que define herramientas para generar y guardar contenido HTML y CSS.pyproject.toml: Archivo de configuración del proyecto.README.md: Este archivo.
Requisitos
- Tener LM Studio en modo servidor
- Tener el modelo openai/gpt-oss-20b
- Dependencias especificadas en
pyproject.toml
Instalación
-
Clona este repositorio:
git clone <URL_DEL_REPOSITORIO> cd <NOMBRE_DEL_REPOSITORIO> -
Instala las dependencias:
uv venv && source .venv/bin/activate && uv lock
Uso
-
Ejecuta el script principal:
python main.py -
Los archivos generados (
index.htmlystyles.css) se guardarán en la carpetadist.
Herramientas MCP
El servidor MCP (server.py) define las siguientes herramientas:
generate_index: Genera un archivo HTML completo combinando header, body y footer.generate_header: Genera un header HTML con un título y enlaces de navegación.generate_body: Genera un body HTML con secciones para servicios, productos y descripción del negocio.generate_footer: Genera un footer HTML con información de contacto.save_file: Guarda contenido en un archivo dentro de la carpetadist.
Ejemplo de Entrada
business_info = BusinessInfo(
name="Carnicería Cuencana",
description="Carnicería tradicional en Cuenca especializada en carnes frescas y embutidos artesanales.",
email="info@carniceriacuencana.es",
services=[
"Entrega a domicilio",
"Cortes personalizados",
"Asesoramiento en recetas",
],
products=[
"Carne de ternera",
"Carne de cerdo",
"Embutidos caseros",
"Pollo de corral",
],
city="Cuenca",
job="carnicería",
job_description="ofrecer carnes frescas, de calidad y embutidos artesanales a sus clientes",
style="tradicional, limpio y acogedor",
colors="rojo, blanco y tonos madera",
)
Ejemplo de Salida
index.html: Archivo HTML con el contenido generado.styles.css: Archivo CSS con los estilos personalizados.