mcp_odoo_fresh
Enables AI agents to interact with Odoo ERP to perform sales tasks such as searching clients and products, and creating and confirming quotations via the MCP protocol.
README
Agente Inteligente QuindíColor: Odoo + MCP + OpenAI
Proyecto Hackathon 🚀
Este proyecto, desarrollado para una hackathon, demuestra la creación de un agente conversacional inteligente capaz de interactuar con un sistema ERP Odoo (específicamente una instancia alojada en Odoo.sh) para realizar tareas clave del flujo de ventas de la empresa ficticia "QuindíColor".
El agente utiliza el SDK de OpenAI Agents para su lógica y razonamiento, se comunica mediante voz o texto a través de interfaces web interactivas creadas con Gradio, y, de manera crucial, accede a las funcionalidades de Odoo de forma estandarizada y desacoplada gracias al Model Context Protocol (MCP).
Objetivo Principal: Simplificar y agilizar operaciones comunes de ventas en Odoo (buscar clientes/productos, crear y confirmar cotizaciones) mediante una interfaz conversacional avanzada (texto y voz), resaltando la flexibilidad que aporta MCP.
Tecnologías Utilizadas 🛠️
- Python: Lenguaje principal de programación (v3.10+ recomendado).
- Odoo (Odoo.sh): Sistema ERP de destino donde residen los datos y se ejecutan las acciones comerciales.
- Model Context Protocol (MCP): Protocolo estándar utilizado para la comunicación entre el agente inteligente y el servidor que expone las capacidades de Odoo. Se implementa un servidor MCP personalizado.
- Se usa el SDK
mcppara Python (pip install mcp).
- Se usa el SDK
- OpenAI Agents SDK: Framework para construir la lógica del agente, manejar el flujo conversacional y la integración con herramientas MCP (
pip install openai-agents). - OpenAI API:
- LLM (GPT-4o): Para el razonamiento del agente, comprensión del lenguaje natural y selección de herramientas.
- Whisper: Para la transcripción de Voz a Texto (STT).
- TTS API: Para la síntesis de Texto a Voz (TTS).
- Se requiere la librería
openai(pip install openai).
- Gradio: Framework para crear rápidamente las interfaces web interactivas de chat y voz (
pip install gradio). - Odoo API (XML-RPC): Método de comunicación específico utilizado por nuestro servidor MCP para interactuar con la API externa de Odoo.
- uv: Gestor de paquetes y entornos virtuales Python (
pip install uv). - python-dotenv: Para gestionar credenciales y configuraciones de entorno de forma segura.
Arquitectura del Sistema 🏛️
El sistema conecta al usuario con Odoo a través de varias capas, donde MCP juega un papel central como puente estandarizado.
<!-- Reemplaza esto con la imagen real cuando esté disponible -->
<!--
-->
Flujo Típico:
- El Usuario interactúa (voz/texto) con la Interfaz Gradio.
- La App Backend (Gradio + Python) recibe el input. Si es voz, llama a la API Whisper (STT) de OpenAI para transcribir.
- El texto (transcrito o escrito) se pasa a la Lógica del Agente (OpenAI Agents SDK) junto con el historial.
- El Agente llama al LLM (GPT-4o) de OpenAI con el prompt, historial y la lista de herramientas disponibles (descubiertas vía MCP).
- El LLM decide si responder directamente o usar una herramienta.
- Si decide usar una herramienta Odoo (ej.
buscar_cliente):- La Lógica del Agente instruye al Conector MCP (
MCPServerStdio). - El Conector MCP envía una petición
tools/callusando el Protocolo MCP a nuestro Servidor MCP Odoo (mcp_odoo_server.py), que corre como proceso hijo. - Nuestro Servidor MCP traduce la petición MCP a una llamada XML-RPC a la API de Odoo.sh.
- Odoo.sh procesa la solicitud y devuelve el resultado vía XML-RPC.
- Nuestro Servidor MCP recibe la respuesta de Odoo y la formatea como un Resultado MCP.
- El Conector MCP recibe el resultado y lo devuelve a la Lógica del Agente.
- El Agente envía el resultado de la herramienta de nuevo al LLM para generar la respuesta final al usuario.
- La Lógica del Agente instruye al Conector MCP (
- La Lógica del Agente recibe la respuesta final en texto del LLM.
- La App Backend llama a la API TTS de OpenAI para convertir el texto en audio (si es la interfaz de voz).
- La App Backend actualiza la Interfaz Gradio mostrando el texto en el chat y/o reproduciendo el audio.
- El Usuario ve/escucha la respuesta.
Importancia del Model Context Protocol (MCP):
MCP es la clave para la integración flexible y modular en este proyecto:
- Estandarización: Define un contrato claro (
list_tools,call_tool) entre el agente y las capacidades de Odoo. El agente no necesita saber cómo hablar XML-RPC con Odoo, solo cómo usar las herramientas MCP. - Desacoplamiento: La inteligencia del agente (OpenAI SDK) está separada de la implementación específica de Odoo (nuestro servidor MCP). Podemos cambiar el agente o el servidor Odoo (ej. a otra versión de Odoo o API) modificando solo una parte, siempre que se respete el contrato MCP.
- Reusabilidad: Nuestro
mcp_odoo_server.pypodría ser utilizado por cualquier otro sistema o agente que entienda MCP, no solo por el SDK de OpenAI Agents. - Modularidad: Permite exponer funcionalidades de sistemas complejos (como Odoo) de forma granular y controlada (herramienta por herramienta).
MCP actúa como una capa de abstracción esencial, permitiendo que sistemas inteligentes interactúen con herramientas y datos de forma estandarizada y segura.
Estructura del Proyecto 📂
mcp_odoo_fresh/
├── .venv/ # Entorno virtual Python (creado por uv)
├── agente_quindicolor_openai.py # Lógica del Agente OpenAI, configuración MCP
├── app_gradio_texto.py # Interfaz Gradio para chat de texto
├── app_gradio_voz.py # Interfaz Gradio para chat de voz (STT/TTS)
├── mcp_odoo_server.py # Servidor MCP -> Odoo (FastMCP, XML-RPC)
├── mcp_odoo_debug.log # Archivo de log del servidor MCP Odoo
├── .env # Archivo para credenciales (¡IGNORADO POR GIT!)
├── .env.example # Archivo de ejemplo para .env
├── pyproject.toml # Configuración del proyecto (usado por uv)
├── README.md # Este archivo
└── uv.lock # Dependencias bloqueadas por uv
Instrucciones de Configuración 🛠️
- Clonar/Descargar: Obtén los archivos del proyecto.
- Prerrequisitos:
- Python 3.10 o superior.
uvinstalado (ver guía oficial).- Acceso a una instancia de Odoo (preferiblemente Odoo.sh) con un usuario y Clave API.
- Una Clave API de OpenAI con crédito/cuota suficiente.
- Crear y Activar Entorno Virtual:
cd ruta/a/mcp_odoo_fresh uv venv source .venv/bin/activate # Linux/macOS # .venv\Scripts\activate # Windows - Instalar Dependencias:
(Puedes también crear unuv pip install openai-agents openai python-dotenv gradio mcprequirements.txtconuv pip freeze > requirements.txty luego usaruv pip install -r requirements.txt). - Configurar Credenciales:
- Renombra o copia
.env.examplea.env. - Edita el archivo
.envy rellena TODAS las variables con tus valores reales:# === Credenciales Odoo.sh === ODOO_URL=https://tu-instancia.odoo.com ODOO_DB=nombre_tu_base_de_datos ODOO_USER=tu_login_odoo ODOO_PASSWORD=TU_CLAVE_API_DE_ODOO_SH # ¡Generada en Odoo.sh! # === Credenciales OpenAI === OPENAI_API_KEY=sk-proj-xxxxxxxxxxxxxxxxxxxx
- Renombra o copia
Ejecución de la Demo ▶️
Puedes ejecutar la interfaz de texto o la de voz de forma independiente. Ambas iniciarán el servidor MCP Odoo necesario en segundo plano.
Opción 1: Interfaz de Texto
python app_gradio_texto.py
Abre la URL que indica la consola (normalmente http://127.0.0.1:7861).
Opción 2: Interfaz de Voz
python app_gradio_voz.py
Abre la URL que indica la consola (normalmente http://127.0.0.1:7860). Recuerda dar permiso al navegador para usar el micrófono.
Guiones de Prueba
Puedes usar los guiones proporcionados anteriormente (adaptados a tus productos/clientes) para probar el flujo completo en cualquiera de las interfaces.
Troubleshooting Básico 🐛
- Error Odoo: Revisa URL, DB, User, Password (API Key!) en .env. Mira mcp_odoo_debug.log.
- Error OpenAI: Verifica tu API Key y cuota en platform.openai.com.
- Error Gradio (Micrófono): Revisa permisos del navegador/OS. Usa URL local. Prueba otro navegador.
- Otros: Revisa los logs en la terminal donde ejecutas la app Gradio.
Ideas Futuras 💡
- Implementar la herramienta crear_factura_desde_pedido (requiere investigar método Odoo no privado).
- Añadir más herramientas (ej. consultar stock, estado pedido).
- Mejorar el manejo de errores y la robustez.
- Implementar streaming de texto en la interfaz de voz.
- Optimizar el arranque/conexión del servidor MCP.
- Usar un gr.Chatbot visible en la app de voz para mostrar historial
este proyecto nos hizo ganadores jeje
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
