{
  "openapi": "3.1.0",
  "info": {
    "title": "Lean Spanish Solutions: servidor MCP",
    "version": "0.1.0",
    "description": "Servidor MCP público de manufactura esbelta en español mexicano. Un solo endpoint JSON-RPC 2.0 expone seis herramientas de solo lectura: búsqueda de contenido, documentación, blog, servicios de consultoría y cálculo de OEE. No requiere autenticación.",
    "x-idioma": "es-MX",
    "contact": {
      "name": "LeanManufacturing",
      "url": "https://leanmanufacturing.mx/contacto"
    },
    "license": {
      "name": "Uso permitido con atribución a la URL de origen."
    }
  },
  "servers": [
    {
      "url": "https://leanmanufacturing.mx",
      "description": "Producción"
    }
  ],
  "externalDocs": {
    "description": "Documentación de las herramientas",
    "url": "https://leanmanufacturing.mx/herramientas/mcp"
  },
  "x-mcp": {
    "transporte": "MCP Streamable HTTP (JSON-RPC 2.0)",
    "endpoint": "https://leanmanufacturing.mx/mcp",
    "autenticacion": "ninguna",
    "configuracion_cliente": {
      "mcpServers": {
        "lean-spanish-solutions": {
          "url": "https://leanmanufacturing.mx/mcp"
        }
      }
    },
    "herramientas": [
      "buscar_contenido_lean",
      "listar_documentacion",
      "leer_documentacion",
      "leer_articulo_blog",
      "listar_servicios_consultoria",
      "calcular_oee"
    ]
  },
  "paths": {
    "/mcp": {
      "post": {
        "operationId": "llamarHerramientaMcp",
        "summary": "Listar o ejecutar una herramienta MCP",
        "description": "Endpoint JSON-RPC 2.0. Usa method 'tools/list' para descubrir las herramientas y 'tools/call' con params.name y params.arguments para ejecutar una. El encabezado Accept debe incluir application/json y text/event-stream.",
        "parameters": [
          {
            "name": "Accept",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "default": "application/json, text/event-stream"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "type": "object",
                    "title": "tools/list",
                    "properties": {
                      "jsonrpc": {
                        "type": "string",
                        "const": "2.0"
                      },
                      "id": {
                        "type": [
                          "integer",
                          "string"
                        ]
                      },
                      "method": {
                        "type": "string",
                        "const": "tools/list"
                      }
                    },
                    "required": [
                      "jsonrpc",
                      "id",
                      "method"
                    ]
                  },
                  {
                    "type": "object",
                    "title": "buscar_contenido_lean",
                    "properties": {
                      "jsonrpc": {
                        "type": "string",
                        "const": "2.0"
                      },
                      "id": {
                        "type": [
                          "integer",
                          "string"
                        ]
                      },
                      "method": {
                        "type": "string",
                        "const": "tools/call"
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "const": "buscar_contenido_lean"
                          },
                          "arguments": {
                            "$ref": "#/components/schemas/Entrada_buscar_contenido_lean"
                          }
                        },
                        "required": [
                          "name",
                          "arguments"
                        ]
                      }
                    },
                    "required": [
                      "jsonrpc",
                      "id",
                      "method",
                      "params"
                    ]
                  },
                  {
                    "type": "object",
                    "title": "listar_documentacion",
                    "properties": {
                      "jsonrpc": {
                        "type": "string",
                        "const": "2.0"
                      },
                      "id": {
                        "type": [
                          "integer",
                          "string"
                        ]
                      },
                      "method": {
                        "type": "string",
                        "const": "tools/call"
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "const": "listar_documentacion"
                          },
                          "arguments": {
                            "$ref": "#/components/schemas/Entrada_listar_documentacion"
                          }
                        },
                        "required": [
                          "name",
                          "arguments"
                        ]
                      }
                    },
                    "required": [
                      "jsonrpc",
                      "id",
                      "method",
                      "params"
                    ]
                  },
                  {
                    "type": "object",
                    "title": "leer_documentacion",
                    "properties": {
                      "jsonrpc": {
                        "type": "string",
                        "const": "2.0"
                      },
                      "id": {
                        "type": [
                          "integer",
                          "string"
                        ]
                      },
                      "method": {
                        "type": "string",
                        "const": "tools/call"
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "const": "leer_documentacion"
                          },
                          "arguments": {
                            "$ref": "#/components/schemas/Entrada_leer_documentacion"
                          }
                        },
                        "required": [
                          "name",
                          "arguments"
                        ]
                      }
                    },
                    "required": [
                      "jsonrpc",
                      "id",
                      "method",
                      "params"
                    ]
                  },
                  {
                    "type": "object",
                    "title": "leer_articulo_blog",
                    "properties": {
                      "jsonrpc": {
                        "type": "string",
                        "const": "2.0"
                      },
                      "id": {
                        "type": [
                          "integer",
                          "string"
                        ]
                      },
                      "method": {
                        "type": "string",
                        "const": "tools/call"
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "const": "leer_articulo_blog"
                          },
                          "arguments": {
                            "$ref": "#/components/schemas/Entrada_leer_articulo_blog"
                          }
                        },
                        "required": [
                          "name",
                          "arguments"
                        ]
                      }
                    },
                    "required": [
                      "jsonrpc",
                      "id",
                      "method",
                      "params"
                    ]
                  },
                  {
                    "type": "object",
                    "title": "listar_servicios_consultoria",
                    "properties": {
                      "jsonrpc": {
                        "type": "string",
                        "const": "2.0"
                      },
                      "id": {
                        "type": [
                          "integer",
                          "string"
                        ]
                      },
                      "method": {
                        "type": "string",
                        "const": "tools/call"
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "const": "listar_servicios_consultoria"
                          },
                          "arguments": {
                            "$ref": "#/components/schemas/Entrada_listar_servicios_consultoria"
                          }
                        },
                        "required": [
                          "name",
                          "arguments"
                        ]
                      }
                    },
                    "required": [
                      "jsonrpc",
                      "id",
                      "method",
                      "params"
                    ]
                  },
                  {
                    "type": "object",
                    "title": "calcular_oee",
                    "properties": {
                      "jsonrpc": {
                        "type": "string",
                        "const": "2.0"
                      },
                      "id": {
                        "type": [
                          "integer",
                          "string"
                        ]
                      },
                      "method": {
                        "type": "string",
                        "const": "tools/call"
                      },
                      "params": {
                        "type": "object",
                        "properties": {
                          "name": {
                            "type": "string",
                            "const": "calcular_oee"
                          },
                          "arguments": {
                            "$ref": "#/components/schemas/Entrada_calcular_oee"
                          }
                        },
                        "required": [
                          "name",
                          "arguments"
                        ]
                      }
                    },
                    "required": [
                      "jsonrpc",
                      "id",
                      "method",
                      "params"
                    ]
                  }
                ]
              },
              "examples": {
                "tools_list": {
                  "summary": "Descubrir herramientas",
                  "value": {
                    "jsonrpc": "2.0",
                    "id": 1,
                    "method": "tools/list"
                  }
                },
                "buscar_contenido_lean": {
                  "summary": "Buscar contenido Lean",
                  "value": {
                    "jsonrpc": "2.0",
                    "id": 1,
                    "method": "tools/call",
                    "params": {
                      "name": "buscar_contenido_lean",
                      "arguments": {
                        "consulta": "takt time",
                        "tipos": [
                          "documentacion",
                          "pregunta"
                        ],
                        "limite": 2,
                        "desplazamiento": 0
                      }
                    }
                  }
                },
                "listar_documentacion": {
                  "summary": "Listar documentación Lean",
                  "value": {
                    "jsonrpc": "2.0",
                    "id": 2,
                    "method": "tools/call",
                    "params": {
                      "name": "listar_documentacion",
                      "arguments": {
                        "categoria": "medicion"
                      }
                    }
                  }
                },
                "leer_documentacion": {
                  "summary": "Leer documentación Lean",
                  "value": {
                    "jsonrpc": "2.0",
                    "id": 3,
                    "method": "tools/call",
                    "params": {
                      "name": "leer_documentacion",
                      "arguments": {
                        "slug": "que-es-el-oee"
                      }
                    }
                  }
                },
                "leer_articulo_blog": {
                  "summary": "Leer artículo del blog",
                  "value": {
                    "jsonrpc": "2.0",
                    "id": 4,
                    "method": "tools/call",
                    "params": {
                      "name": "leer_articulo_blog",
                      "arguments": {
                        "slug": "los-8-desperdicios-muda"
                      }
                    }
                  }
                },
                "listar_servicios_consultoria": {
                  "summary": "Listar servicios de consultoría",
                  "value": {
                    "jsonrpc": "2.0",
                    "id": 5,
                    "method": "tools/call",
                    "params": {
                      "name": "listar_servicios_consultoria",
                      "arguments": {
                        "id": "diagnostico"
                      }
                    }
                  }
                },
                "calcular_oee": {
                  "summary": "Calcular OEE",
                  "value": {
                    "jsonrpc": "2.0",
                    "id": 6,
                    "method": "tools/call",
                    "params": {
                      "name": "calcular_oee",
                      "arguments": {
                        "tiempo_planeado_min": 480,
                        "paros_min": 60,
                        "piezas_producidas": 380,
                        "tiempo_ciclo_ideal_min": 1,
                        "piezas_defectuosas": 12
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Respuesta JSON-RPC. Puede llegar como application/json o como text/event-stream.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RespuestaHerramienta"
                },
                "examples": {
                  "buscar_contenido_lean": {
                    "summary": "Buscar contenido Lean",
                    "value": {
                      "jsonrpc": "2.0",
                      "id": 1,
                      "result": {
                        "content": [
                          {
                            "type": "text",
                            "text": "Resultados 1 a 2 de 6. Para la siguiente página usa desplazamiento: 2.\n\n[documentacion] Qué es el takt time\nslug: que-es-el-takt-time\nurl: /docs/flujo/que-es-el-takt-time\nEl ritmo al que debe producir la línea para cumplir la demanda del cliente.\n\n[pregunta] ¿Cómo se calcula el takt time?\nslug: como-se-calcula-el-takt-time\nurl: /preguntas/como-se-calcula-el-takt-time\nTiempo disponible entre demanda del periodo."
                          }
                        ]
                      }
                    }
                  },
                  "listar_documentacion": {
                    "summary": "Listar documentación Lean",
                    "value": {
                      "jsonrpc": "2.0",
                      "id": 1,
                      "result": {
                        "content": [
                          {
                            "type": "text",
                            "text": "## Medición (medicion)\nIndicadores que sí accionan decisiones en piso.\n- Qué es el OEE · slug: que-es-el-oee\n- Lead time y tiempo de ciclo · slug: lead-time-y-tiempo-de-ciclo"
                          }
                        ]
                      }
                    }
                  },
                  "leer_documentacion": {
                    "summary": "Leer documentación Lean",
                    "value": {
                      "jsonrpc": "2.0",
                      "id": 1,
                      "result": {
                        "content": [
                          {
                            "type": "text",
                            "text": "# Qué es el OEE\nCategoría: Medición · Lectura: 6 min\nURL: /docs/medicion/que-es-el-oee\n\nEl OEE combina disponibilidad, rendimiento y calidad...\n\n## Preguntas frecuentes\n**¿Qué OEE es bueno?**\n85% es la referencia clásica de clase mundial."
                          }
                        ]
                      }
                    }
                  },
                  "leer_articulo_blog": {
                    "summary": "Leer artículo del blog",
                    "value": {
                      "jsonrpc": "2.0",
                      "id": 1,
                      "result": {
                        "content": [
                          {
                            "type": "text",
                            "text": "# Los 8 desperdicios (muda)\n12 de marzo de 2026 · 9 min · Dr. Mohammad Reza Azarang\nURL: /blog/los-8-desperdicios-muda\n\nSobreproducción, espera, transporte, sobreprocesamiento..."
                          }
                        ]
                      }
                    }
                  },
                  "listar_servicios_consultoria": {
                    "summary": "Listar servicios de consultoría",
                    "value": {
                      "jsonrpc": "2.0",
                      "id": 1,
                      "result": {
                        "content": [
                          {
                            "type": "text",
                            "text": "## 01 Diagnóstico Lean (id: diagnostico)\nRadiografía de flujo, paros y desperdicio en piso.\n\nIncluye:\n- Recorrido de planta y mapeo del flujo actual\n- Medición de tiempos y paros\n\nDuración: 2 a 3 semanas\n\nContacto: {\"correo\":\"contacto@leanmanufacturing.mx\"}"
                          }
                        ]
                      }
                    }
                  },
                  "calcular_oee": {
                    "summary": "Calcular OEE",
                    "value": {
                      "jsonrpc": "2.0",
                      "id": 1,
                      "result": {
                        "content": [
                          {
                            "type": "text",
                            "text": "Disponibilidad: 87.5%\nRendimiento: 90.5%\nCalidad: 96.8%\nOEE: 76.7%\nAceptable, con margen claro de mejora (60% a 85%).\nCalculadora en línea: /herramientas/calculadora-oee"
                          }
                        ]
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Petición JSON-RPC mal formada."
          },
          "406": {
            "description": "Falta el encabezado Accept con application/json y text/event-stream."
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "RespuestaHerramienta": {
        "type": "object",
        "description": "Respuesta JSON-RPC de tools/call.",
        "properties": {
          "jsonrpc": {
            "type": "string",
            "const": "2.0"
          },
          "id": {
            "type": [
              "integer",
              "string"
            ]
          },
          "result": {
            "type": "object",
            "properties": {
              "content": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "const": "text"
                    },
                    "text": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "type",
                    "text"
                  ]
                }
              },
              "structuredContent": {
                "type": "object",
                "additionalProperties": true
              },
              "isError": {
                "type": "boolean",
                "description": "true cuando la herramienta devolvió un error de negocio."
              }
            },
            "required": [
              "content"
            ]
          }
        },
        "required": [
          "jsonrpc",
          "id"
        ]
      },
      "Entrada_buscar_contenido_lean": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "consulta": {
            "type": "string",
            "minLength": 2,
            "maxLength": 200,
            "description": "Términos de búsqueda en español, por ejemplo 'takt time' o 'SMED'."
          },
          "tipos": {
            "description": "Filtra por tipo de contenido: documentacion, articulo, pregunta o servicio. Por defecto busca en todos.",
            "maxItems": 4,
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "documentacion",
                "articulo",
                "pregunta",
                "servicio"
              ]
            }
          },
          "limite": {
            "description": "Resultados por página. Por defecto 8, máximo 20.",
            "type": "integer",
            "minimum": 1,
            "maximum": 20
          },
          "desplazamiento": {
            "description": "Número de resultados a saltar para paginar. Por defecto 0. Para la segunda página usa desplazamiento igual al limite.",
            "type": "integer",
            "minimum": 0,
            "maximum": 500
          }
        },
        "required": [
          "consulta"
        ],
        "title": "Buscar contenido Lean",
        "description": "Busca en la documentación Lean, los artículos del blog, las preguntas frecuentes y los servicios de consultoría. Permite filtrar por tipo de contenido y paginar los resultados. Devuelve slug y URL para luego leer cada pieza completa."
      },
      "Entrada_listar_documentacion": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "categoria": {
            "description": "Slug de categoría para filtrar: fundamentos, herramientas, flujo, medicion, problemas o digital.",
            "type": "string",
            "minLength": 1,
            "maxLength": 60,
            "pattern": "^[a-z0-9-]+$"
          }
        },
        "title": "Listar documentación Lean",
        "description": "Lista las categorías y entradas de la biblioteca de documentación Lean del sitio, con slug, título y resumen. Útil para explorar antes de leer una entrada."
      },
      "Entrada_leer_documentacion": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "pattern": "^[a-z0-9-]+$",
            "description": "Slug de la entrada, por ejemplo 'que-es-el-takt-time'."
          }
        },
        "required": [
          "slug"
        ],
        "title": "Leer documentación Lean",
        "description": "Devuelve el texto completo de una entrada de la biblioteca de documentación Lean a partir de su slug (obtenido con buscar_contenido_lean o listar_documentacion)."
      },
      "Entrada_leer_articulo_blog": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "slug": {
            "description": "Slug del artículo. Omítelo para listar todos los artículos.",
            "type": "string",
            "minLength": 1,
            "maxLength": 120,
            "pattern": "^[a-z0-9-]+$"
          }
        },
        "title": "Leer artículo del blog",
        "description": "Lista los artículos del blog o devuelve uno completo por slug. Sin slug, regresa el índice de artículos publicados."
      },
      "Entrada_listar_servicios_consultoria": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "id": {
            "description": "Id del servicio para ver solo uno, por ejemplo 'diagnostico'.",
            "type": "string"
          }
        },
        "title": "Listar servicios de consultoría",
        "description": "Devuelve los servicios de consultoría Lean que ofrece la firma (diagnóstico, 5S, VSM, kaizen y demás), con lo que incluye cada uno, entregables, duración y datos de contacto públicos."
      },
      "Entrada_calcular_oee": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "tiempo_planeado_min": {
            "type": "number",
            "exclusiveMinimum": 0,
            "maximum": 1000000,
            "description": "Tiempo de producción planeado en minutos (máximo 1,000,000)."
          },
          "paros_min": {
            "type": "number",
            "minimum": 0,
            "maximum": 1000000,
            "description": "Minutos totales de paro no planeado en ese periodo (máximo 1,000,000)."
          },
          "piezas_producidas": {
            "type": "number",
            "minimum": 0,
            "maximum": 100000000,
            "description": "Piezas totales producidas."
          },
          "tiempo_ciclo_ideal_min": {
            "type": "number",
            "exclusiveMinimum": 0,
            "maximum": 100000,
            "description": "Tiempo de ciclo ideal por pieza, en minutos."
          },
          "piezas_defectuosas": {
            "type": "number",
            "minimum": 0,
            "maximum": 100000000,
            "description": "Piezas rechazadas o retrabajadas."
          }
        },
        "required": [
          "tiempo_planeado_min",
          "paros_min",
          "piezas_producidas",
          "tiempo_ciclo_ideal_min",
          "piezas_defectuosas"
        ],
        "title": "Calcular OEE",
        "description": "Calcula la Eficiencia General de los Equipos (OEE) a partir del tiempo planeado, paros, piezas producidas, tiempo de ciclo ideal y piezas defectuosas. Devuelve disponibilidad, rendimiento, calidad, OEE y su interpretación según el estándar Nakajima."
      }
    }
  }
}