Skip to main content
Glama

MCP Server for Odoo

POSTMAN.md8.95 kB
# 🧪 Testing MCP Server con Postman ## ⚠️ IMPORTANTE: Protocolo Streamable-HTTP con Sesiones El MCP server usa **sesiones** cuando corre con `streamable-http`. Debes seguir este flujo: 1. **Iniciar sesión** → Obtienes un `session_id` 2. **Usar ese `session_id`** en todas las peticiones siguientes 3. **Cerrar sesión** cuando termines (opcional) --- ## 1. � PASO 1: Iniciar Sesión **Método:** `POST` **URL:** `https://mcp.aahightech.com/sse` **Headers:** ``` Content-Type: application/json ``` **Body (JSON):** ```json { "jsonrpc": "2.0", "id": "init-session", "method": "initialize", "params": { "protocolVersion": "2024-11-05", "capabilities": { "roots": { "listChanged": false } }, "clientInfo": { "name": "postman-test", "version": "1.0.0" } } } ``` **Respuesta:** ```json { "jsonrpc": "2.0", "id": "init-session", "result": { "protocolVersion": "2024-11-05", "capabilities": {...}, "serverInfo": { "name": "odoo-mcp-server", "version": "..." }, "_meta": { "sessionId": "dd282ead881e49e09fcede6ad09732b1" // ← GUARDA ESTE ID } } } ``` **🔑 Copia el `sessionId` de la respuesta!** --- ## 2. 📋 PASO 2: Usar la Sesión en las Peticiones Ahora usa el `session_id` en el endpoint `/message`: ### A) Listar Herramientas **Método:** `POST` **URL:** `https://mcp.aahightech.com/message?sessionId=dd282ead881e49e09fcede6ad09732b1` **Headers:** ``` Content-Type: application/json ``` **Body (JSON):** ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {} } ``` ### B) Buscar Contactos **Método:** `POST` **URL:** `https://mcp.aahightech.com/message?sessionId=dd282ead881e49e09fcede6ad09732b1` **Headers:** ``` Content-Type: application/json ``` **Body (JSON):** ```json { "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "odoo_search", "arguments": { "model": "res.partner", "domain": [["is_company", "=", true]], "limit": 5 } } } ``` ### C) Leer un Registro **Método:** `POST` **URL:** `https://mcp.aahightech.com/message?sessionId=dd282ead881e49e09fcede6ad09732b1` **Headers:** ``` Content-Type: application/json ``` **Body (JSON):** ```json { "jsonrpc": "2.0", "id": 3, "method": "tools/call", "params": { "name": "odoo_read", "arguments": { "model": "res.partner", "ids": [1], "fields": ["name", "email", "phone", "city"] } } } ``` --- ## 3. � Endpoints Disponibles | Endpoint | Método | Descripción | |----------|--------|-------------| | `/sse` | POST | Iniciar sesión y obtener `sessionId` | | `/message?sessionId=XXX` | POST | Enviar comandos MCP (requiere sesión) | --- ## 4. 📦 Colección de Postman Completa Crea estas peticiones en Postman: ### Paso 1: Initialize Session ``` POST https://mcp.aahightech.com/sse { "jsonrpc": "2.0", "id": "init", "method": "initialize", "params": { "protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": { "name": "postman", "version": "1.0" } } } ``` ### Paso 2: List Tools (usar sessionId de paso 1) ``` POST https://mcp.aahightech.com/message?sessionId={{sessionId}} { "jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {} } ``` ### Paso 3: Search Partners ``` POST https://mcp.aahightech.com/message?sessionId={{sessionId}} { "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "odoo_search", "arguments": { "model": "res.partner", "domain": [], "limit": 10 } } } ``` --- ## 5. 💡 Tips para Postman ### Usar Variables de Entorno 1. Crea una variable de entorno llamada `sessionId` 2. En la respuesta de `/sse`, usa un **Test** para guardarla automáticamente: ```javascript // En la pestaña "Tests" de la petición /sse var response = pm.response.json(); if (response.result && response.result._meta && response.result._meta.sessionId) { pm.environment.set("sessionId", response.result._meta.sessionId); console.log("Session ID guardado: " + response.result._meta.sessionId); } ``` 3. Luego usa `{{sessionId}}` en las URLs de las demás peticiones: ``` https://mcp.aahightech.com/message?sessionId={{sessionId}} ``` --- ## 6. 🐛 Troubleshooting ### Error: "Missing session ID" - ✅ Asegúrate de llamar primero a `/sse` para obtener el `sessionId` - ✅ Incluye `?sessionId=XXX` en la URL de `/message` ### Error: "Session not found" - ✅ La sesión expiró, vuelve a llamar `/sse` - ✅ Verifica que el `sessionId` sea correcto ### Error: "Bad Request" - ✅ Verifica que el JSON esté bien formado - ✅ Verifica que el `method` sea correcto (tools/list, tools/call, etc.) --- ## 7. 📚 Métodos MCP Disponibles | Método | Descripción | |--------|-------------| | `initialize` | Iniciar sesión (solo en `/sse`) | | `tools/list` | Listar herramientas disponibles | | `tools/call` | Ejecutar una herramienta | | `resources/list` | Listar recursos disponibles | | `resources/read` | Leer un recurso | --- ## 8. 🎯 Ejemplo Completo con curl Si prefieres probar con curl: ```bash # 1. Iniciar sesión SESSION_RESPONSE=$(curl -X POST https://mcp.aahightech.com/sse \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": "init", "method": "initialize", "params": { "protocolVersion": "2024-11-05", "capabilities": {}, "clientInfo": {"name": "curl", "version": "1.0"} } }') # Extraer sessionId (requiere jq) SESSION_ID=$(echo $SESSION_RESPONSE | jq -r '.result._meta.sessionId') # 2. Listar tools curl -X POST "https://mcp.aahightech.com/message?sessionId=$SESSION_ID" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {} }' ``` ## 5. Modelos Comunes de Odoo Aquí están los modelos más usados que puedes probar: | Modelo | Descripción | |--------|-------------| | `res.partner` | Contactos/Clientes | | `sale.order` | Órdenes de Venta | | `product.product` | Productos | | `account.move` | Facturas | | `stock.picking` | Entregas | | `crm.lead` | Oportunidades CRM | | `res.users` | Usuarios | | `hr.employee` | Empleados | ## 6. Colección de Postman Puedes importar esta colección en Postman: ```json { "info": { "name": "MCP Odoo Server", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, "item": [ { "name": "List Tools", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"jsonrpc\": \"2.0\",\n \"id\": 1,\n \"method\": \"tools/list\",\n \"params\": {}\n}" }, "url": { "raw": "https://mcp.aahightech.com/mcp/v1/tools/list", "protocol": "https", "host": ["mcp", "aahightech", "com"], "path": ["mcp", "v1", "tools", "list"] } } }, { "name": "Search Partners", "request": { "method": "POST", "header": [ { "key": "Content-Type", "value": "application/json" } ], "body": { "mode": "raw", "raw": "{\n \"jsonrpc\": \"2.0\",\n \"id\": 2,\n \"method\": \"tools/call\",\n \"params\": {\n \"name\": \"odoo_search\",\n \"arguments\": {\n \"model\": \"res.partner\",\n \"domain\": [[\"is_company\", \"=\", true]],\n \"limit\": 10\n }\n }\n}" }, "url": { "raw": "https://mcp.aahightech.com/mcp/v1/tools/call", "protocol": "https", "host": ["mcp", "aahightech", "com"], "path": ["mcp", "v1", "tools", "call"] } } } ] } ``` ## 7. Troubleshooting ### Error 404 - Verifica que el contenedor esté corriendo - Verifica la URL y el endpoint - Revisa los logs: `docker-compose logs -f mcp` ### Error 401/403 - Verifica el `ODOO_API_KEY` - Verifica el `ODOO_USER` ### Error de conexión - Asegúrate de que `ODOO_YOLO=read` (no `YOLO_MODE`) - Verifica que el servicio `web` esté corriendo - Verifica la variable `ODOO_URL=http://web:8069` ## 8. Nota sobre el Protocolo MCP El Model Context Protocol usa JSON-RPC 2.0, por eso todas las peticiones tienen este formato: ```json { "jsonrpc": "2.0", // Versión del protocolo "id": 1, // ID único de la petición "method": "...", // Método a llamar "params": {...} // Parámetros del método } ``` Y las respuestas: ```json { "jsonrpc": "2.0", "id": 1, "result": {...} // Resultado exitoso } ``` O en caso de error: ```json { "jsonrpc": "2.0", "id": 1, "error": { "code": -32600, "message": "Error description" } } ```

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/AlejandroLaraPolanco/mcp-odoo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server