Load Planner MCP
load-planner-mcp
Un solucionador determinista de planificación de carga, más un servidor MCP stdio que lo expone como dos herramientas. El solucionador decide el modo de transporte para un conjunto de pedidos — todo por aire, mar consolidado (LCL) o contenedor completo —, calcula el precio de cada opción y adjunta una lectura de riesgo (percentiles de ETA, probabilidad de incumplir el plazo, CVaR de la cola de retraso).
Qué contiene
Ruta | Contenido |
| Empaquetado 3D (py3dbp): ¿caben los palés en un 20GP/40GP/40HC y con qué tasa de llenado? |
| MILP de cargo fijo sobre OR-Tools CP-SAT: asignación factible más barata por patrón de modo enumerado |
| Convolución de distribución de retrasos: ETA p50/p90, probabilidad de incumplir el plazo, CVaR(alpha) |
| Enumera las tarjetas, las puntúa sobre un vector idéntico, las clasifica y elige una recomendación |
| Un límite JSON simple de stdin/stdout, para hosts que prefieren un proceso hijo a una importación |
| El servidor MCP stdio: JSON-RPC 2.0, dos herramientas y |
| Una cohorte sintética de 20 palés con una tarjeta de tarifas sintética, utilizada por las pruebas |
Los dos subproblemas están en capas en lugar de fusionados. Resolver la colocación 3D real dentro del MILP explota combinatoriamente, por lo que el empaquetador se ejecuta primero y entrega a CP-SAT una tasa de llenado y un indicador de viabilidad.
Related MCP server: freight-pulse
El contrato de dos herramientas
solve(problem) ejecuta el solucionador y devuelve su salida tal cual — sin
reformatear, sin redondear, sin resumir — junto con un result_id y un
content_hash SHA-256 del resultado. El resultado se guarda en un almacén dentro del proceso.
explain(result_id) devuelve una narración construida a partir de una plantilla fija cuyos espacios
se rellenan con ese resultado almacenado.
La división es el diseño. Un modelo de lenguaje que llama a este servidor elige qué resolver y pone la respuesta en palabras; no origina ninguna cifra. Tres propiedades hacen que esto sea estructural en lugar de aspiracional:
explaintoma un único id opaco y nada más. Su esquema de entrada tiene una única propiedad. No se le puede pasar una tarifa, un peso o un plazo, por lo que no puede repetir uno.El registro almacenado contiene solo el resultado del solucionador.
solvedescarta la carga del problema una vez que el solucionador ha terminado. No hay ningún campo en el registro almacenado que pueda contener un valor de entrada.No hay aritmética en la ruta de
explain. Los valores se buscan por clave y se representan como cadenas. Seleccionar la tarjeta recomendada lee un indicador que el solucionador ya estableció; no compara ni calcula.
verify_narration(narration, stored) convierte la afirmación en una comprobación. Escanea el
texto en busca de secuencias de dígitos y rechaza cualquier token que no esté en el resultado almacenado, por lo que una
narración que redondea 11480.0 a "11500", convierte 0.1246 a "12.46%" o suma
dos costes almacenados falla — cada uno de esos es un número que el solucionador nunca
produjo. Un host puede aplicarlo a cualquier narración antes de mostrarla, incluida una que el
modelo escribió con sus propias palabras en lugar de una que explain devolvió. explain lo ejecuta
sobre su propia salida antes de devolverla.
Lo que la protección permite deliberadamente, para que no se confunda con una afirmación más fuerte:
los dígitos dentro de cadenas almacenadas y claves de diccionario cuentan como presentes, porque una narración
puede citar esas cadenas textualmente. "ortools-cpsat+py3dbp" admite 3, y el
nombre de campo eta_p90_days admite 90. Es una comprobación léxica de tokens numéricos,
no una prueba de corrección semántica: una narración que asocia el número correcto
a la etiqueta incorrecta sigue pasando.
Instalación
Python 3.10 o superior.
python -m venv .venv
./.venv/bin/pip install ortools py3dbp pytestO instala el paquete en sí, que trae las dos dependencias de ejecución:
pip install -e .ortools es el motor CP-SAT; py3dbp es el empaquetador 3D, con licencia MIT. El servidor MCP
no añade nada más allá de la biblioteca estándar — la superficie del protocolo stdio es
lo suficientemente pequeña como para implementarla directamente, lo que mantiene la lista de dependencias auditable.
Ejecución
El servidor habla JSON-RPC 2.0 delimitado por nuevas líneas en stdin/stdout:
python -m solver_mcpEl solucionador también se puede usar sin MCP, como biblioteca o como proceso hijo:
from load_planner import generate_scenarios
result = generate_scenarios(problem)cat fixtures/cohort_urgent.json | python -m load_planner.cliConexión con un cliente MCP
Cualquier cliente que lance servidores stdio toma un comando y argumentos. Para un
cliente que use la forma de configuración común mcpServers:
{
"mcpServers": {
"load-planner": {
"command": "/absolute/path/to/.venv/bin/python",
"args": ["-m", "solver_mcp"],
"env": { "PYTHONPATH": "/absolute/path/to/load-planner-mcp" }
}
}
}PYTHONPATH solo es necesario cuando el paquete no se ha instalado en el
entorno del intérprete; después de pip install -e . el bloque env se puede eliminar.
El protocolo de inicio es el estándar: initialize, luego la
notificación notifications/initialized, y después tools/list. El servidor informa
la versión de protocolo 2025-06-18 y acepta 2025-03-26 y 2024-11-05,
devolviendo la que el cliente haya solicitado si es una de esas.
Pruebas
python -m pytest tests/ -qTres suites: las pruebas propias del solucionador contra el fixture; el protocolo de inicio de MCP y ambas herramientas, ejercitadas en proceso y sobre un subproceso stdio real; y la suite de manipulación, que verifica que una narración que contenga un valor ausente del resultado almacenado sea rechazada.
Limitaciones
Una sola máquina, un solo proceso. El almacén de resultados está en memoria y vive durante la vida del proceso del servidor. Un
result_idde un proceso se resuelve en otro solo porque los ids están direccionados por contenido y el solucionador es determinista — volver a resolver el mismo problema reproduce el id. No hay almacén compartido, ni desalojo, ni límite en el número de resultados retenidos.Tiempos de ejecución del solucionador. CP-SAT se llama una vez por patrón de modo enumerado, como máximo tres veces por
solve, en un modelo con una variable entera y dos restricciones; devuelve en milisegundos. El coste que escala es el empaquetador 3D, que coloca un artículo por palé — unos cientos de palés está bien, decenas de miles no.solvese ejecuta de forma síncrona y no tiene tiempo de espera interno, por lo que un host debería imponer el suyo propio.Solo asignación de pedido completo. Dividir un pedido entre dos modos (una política de base más suplemento) no está modelado; cada pedido se asigna por completo a un modo.
Entradas de riesgo con semilla. Las distribuciones de retraso en
risk.pyson semillas publicadas de fiabilidad de transportistas, no mediciones de tu propio historial de rutas. Tienen la forma correcta y la precisión incorrecta hasta que un llamador las reemplace.La protección es léxica. Véase la nota anterior:
verify_narrationcomprueba que cada número en una narración aparece en el resultado. No comprueba que el número se haya utilizado para significar lo correcto.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
AlicenseAqualityCmaintenanceLets AI agents pack shipping containers using the Kubova calculator, with tools for container loading and API key verification.420MIT- AlicenseAqualityCmaintenanceOcean and multimodal freight intelligence suite providing cross-validated rates, total landed cost, transit reliability, customs, risk, emissions, and unified ship decisions through 47 tools.4710MIT
- AlicenseNot gradedqualityCmaintenancePlan optimal container & truck loads: 3D layouts, right-size the container mix, and check utilization, centre of gravity, crush protection and securing across 200+ equipment types.17MIT
- AlicenseAqualityCmaintenanceEnables AI agents to pack trucks and shipping containers by generating validated 3D load plans with metrics like LDM, linear feet, and pallet positions through the Hansatic packing API.313MIT
Related MCP Connectors
Plain-English shipment input for freight & logistics: containers your cargo fits, 3D load plan.
Ocean & multimodal freight intelligence: rates, landed cost, transit, customs, risk, ship decisions
Neutral freight reference + validation layer for AI agents: ADR, HS, UN/LOCODE, freight math
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/bayraak/load-planner-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server