accueil / serveurs / Communication / com.moltlinestudio/optimize
com.moltlinestudio/optimize
serveur MCP (Model Context Protocol) · moltline-optimize 1.1.0
Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur.
Est-ce que com.moltlinestudio/optimize est sûr ?
Au dernier audit MCP Hub, le serveur MCP « com.moltlinestudio/optimize » est classé « Non encore testé ». Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur. Le verdict est réévalué en continu ; consultez la fiche pour l'état à jour.
Méthode : MCP Hub analyse la description de chaque outil (couche 1) et, pour le verdict fort, exécute le serveur dans une micro-VM isolée avec leurres et réseau bloqué (couche 2). On publie des noms et des compteurs, jamais le contenu brut renvoyé par un outil.
Les 11 outils
- cutting_stock_1d≈ 504 tokens
Least-waste cut plan for bars, pipes or boards from stock lengths, with saw kerf. FREE. Typical input {"stock": [{"length": 6000, "cost": 30}], "parts": [{"length": 2200, "qty": 3}, {"length": 1500, "qty": 4}], "kerf": 3} returns {"bars": [{"stock_length": 6000, "cuts": [2200, 2200, 1500], "waste": 94}], "bars_used": 3, "waste_pct": 4.2, "solver_status": "OPTIMAL"}. Minimises total stock cost (or count when no cost); CP-SAT proves optimality when it finishes inside the time limit and otherwise returns the best plan found as FEASIBLE. Use for a cut list of up to 200 pieces. Not for sheets: use cutting_stock_2d. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "stock and parts must be non-empty lists (<value> and <value>)"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Paramètres, retour & exemple (4)
Paramètreskerf· number · optionnel
material lost per cut (same unit as lengths).parts· array · requis
required pieces: {length, qty}.stock· array · requis
stock lengths available: {length, cost, qty} (qty = how many of that length may be used; default unlimited).time_limit_s· number · optionnel
solver time budget in seconds (default 3, max 15).
Exemple d'appel{"name": "cutting_stock_1d", "arguments": {"parts": [], "stock": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - cutting_stock_2d≈ 528 tokens
Guillotine cut layouts for rectangular parts from sheets, with kerf and grain. PREMIUM (license). Typical input {"sheets": [{"id": "ply", "l": 2440, "w": 1220, "qty": 5}], "parts": [{"id": "side", "l": 800, "w": 400, "qty": 6}], "kerf": 3} returns {"sheets_used": 1, "layouts": [{"sheet": "ply", "placements": [{"id": "side", "x": 0, "y": 0, "l": 800, "w": 400, "rotated": false}], "fill_pct": 64.5, "offcuts": [...]}], "unplaced": []}. Every cut is a guillotine cut (edge to edge): the sheet is ripped into strips and each strip cross-cut, which is what a panel saw does; grain true forbids rotating parts unless a part sets rotate true. Use for cabinet, sign and sheet-metal cut lists. Not proven optimal: a best-fit shelf heuristic, reported as such. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "sheets and parts must be non-empty lists (<value> and <value>)"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Paramètres, retour & exemple (4)
Paramètreskerf· number · optionnel
saw blade width lost per cut.grain· boolean · optionnel
true when parts must keep their orientation (l along the sheet's l).parts· array · requis
{id, l, w, qty, rotate}; rotate overrides the grain rule per part.sheets· array · requis
{id, l, w, qty}; used in the order given.
Exemple d'appel{"name": "cutting_stock_2d", "arguments": {"parts": [], "sheets": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - distance_matrix_haversine≈ 374 tokens
Straight-line (great-circle) distance matrix from coordinates. FREE. Typical input {"points": [{"id": "depot", "lat": 51.5, "lon": -0.12}, {"id": "A", "lat": 51.52, "lon": -0.1}]} returns {"matrix": [[0, 2.6], [2.6, 0]], "unit": "km", "kind": "straight-line (haversine), not road distance"}. Use when you have no road matrix and a straight-line approximation is acceptable, or to sanity-check one. Not road routing: real driving distances are longer and the difference is not uniform. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "points must be a list of at least two <value> objects"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Paramètres, retour & exemple (2)
Paramètresunit· string · optionnel
km (default) or mi.points· array · requis
list of {id, lat, lon} (up to 200).
Exemple d'appel{"name": "distance_matrix_haversine", "arguments": {"points": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - explain_solution≈ 378 tokens
Plain-language summary of a solution from this server and the constraints that bind. FREE. Typical input {"solution": <result of route_plan_fleet>} returns {"summary": "2 vehicles serve 14 stops over 96.4 km; 1 stop unserved", "binding_constraints": ["van2 is at 100% of capacity", "stop C arrives at the end of its window"], "status": "FEASIBLE"}. It recognises results from route_plan, route_plan_fleet, pack_bins, cutting_stock_1d, cutting_stock_2d, roster_shifts and knapsack_select by their fields. Use to turn solver output into a message for a dispatcher or a shop floor. Not a re-solve. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "solution must be the result object returned by a solve tool on this server"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Paramètres, retour & exemple (1)
Paramètressolution· object · requis
the result object returned by one of this server's solve tools.
Exemple d'appel{"name": "explain_solution", "arguments": {"solution": {}}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - knapsack_select≈ 464 tokens
Choose the items that maximise value under one or more capacity limits. FREE. Typical input {"items": [{"id": "a", "value": 60, "weight": 10, "cost": 120}, {"id": "b", "value": 100, "weight": 20, "cost": 300}], "limits": {"weight": 25, "cost": 400}} returns {"selected": ["a"], "value": 60, "used": {"weight": 10, "cost": 120}, "slack": {"weight": 15, "cost": 280}, "solver_status": "OPTIMAL"}. Any numeric item field named in limits is a constrained resource; qty lets an item be taken several times. Use for budgets, cargo, campaign or feature selection. Not for dependencies between items. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "items must be a non-empty list of <value>"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Paramètres, retour & exemple (3)
Paramètresitems· array · requis
{id, value, qty, <resource fields>}: value to maximise plus one number per limited resource.limits· object · requis
{resource_name: capacity} for each constrained field.time_limit_s· number · optionnel
solver time budget in seconds (default 3, max 15).
Exemple d'appel{"name": "knapsack_select", "arguments": {"items": [], "limits": {}}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - pack_bins≈ 508 tokens
Place up to 20 boxes into containers or pallets with rotation, weight and support rules. FREE. Typical input {"items": [{"id": "A", "l": 60, "w": 40, "h": 30, "weight": 12, "qty": 4}], "containers": [{"id": "pallet", "l": 120, "w": 80, "h": 150, "max_weight": 500, "qty": 2}]} returns {"containers_used": 1, "containers": [{"placements": [{"id": "A", "x": 0, "y": 0, "z": 0, "l": 60, "w": 40, "h": 30}, ...], "volume_fill_pct": 20.0}], "unplaced": []}. rotation per item: any, upright (rotate around the vertical axis only) or fixed; fragile items carry nothing; rules.min_support (default 0.6) is the share of a box's base that must rest on the floor or on boxes below. Use to decide pallet or carton count before booking freight. Not proven optimal: it is a first-fit-decreasing heuristic, reported as such. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Paramètres, retour & exemple (3)
Paramètresitems· array · requis
list of {id, l, w, h, weight, qty, rotation, fragile}, all in one length unit.rules· object · optionnel
optional {min_support: 0-1, default_rotation: any|upright|fixed}.containers· array · requis
list of {id, l, w, h, max_weight, qty}; used in the order given.
Exemple d'appel{"name": "pack_bins", "arguments": {"items": [], "containers": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - pack_bins_large≈ 422 tokens
Same packer as pack_bins for up to 300 item units and 200 containers. PREMIUM (license). Typical input {"items": [{"id": "SKU1", "l": 40, "w": 30, "h": 20, "weight": 5, "qty": 120}, ...], "containers": [{"id": "euro-pallet", "l": 120, "w": 80, "h": 180, "max_weight": 800, "qty": 10}]} returns the same shape as pack_bins: containers with placements, fill percentages, weights and any unplaced units. Use for order consolidation and load planning. Not proven optimal (first-fit decreasing on extreme points, reported as such). Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Paramètres, retour & exemple (3)
Paramètresitems· array · requis
list of {id, l, w, h, weight, qty, rotation, fragile}.rules· object · optionnel
optional {min_support: 0-1, default_rotation: any|upright|fixed}.containers· array · requis
list of {id, l, w, h, max_weight, qty}.
Exemple d'appel{"name": "pack_bins_large", "arguments": {"items": [], "containers": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - roster_shifts≈ 584 tokens
Assign staff to shifts under availability, skills, hour caps and rest gaps. PREMIUM (license). Typical input {"staff": [{"id": "ana", "skills": ["till"], "max_hours": 40, "unavailable": ["sat-am"]}, ...], "shifts": [{"id": "sat-am", "start": "2026-09-12T08:00", "end": "2026-09-12T14:00", "required": 2, "skill": "till"}, ...], "rules": {"min_rest_hours": 11, "max_consecutive_days": 6}} returns {"assignments": [{"shift": "sat-am", "staff": ["ana", "ben"]}], "unfilled": [{"shift": "sun-pm", "short": 1}], "hours": {"ana": 30.0}, "solver_status": "OPTIMAL"}. The objective fills as many required slots as possible, then spreads hours evenly, then honours preferences (staff.prefer / staff.avoid shift ids). Use for weekly rotas of up to 60 staff and 150 shifts. Not a determination of labour-law compliance: the rules are the ones you pass. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "staff and shifts must be non-empty lists"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Paramètres, retour & exemple (4)
Paramètresrules· object · optionnel
{min_rest_hours (default 0), max_consecutive_days (default 7), max_shifts_per_day (default 1)}.staff· array · requis
{id, skills[], max_hours, min_hours, unavailable[], prefer[], avoid[], max_shifts}.shifts· array · requis
{id, start, end (ISO 8601 local), required, skill, weight}.time_limit_s· number · optionnel
solver time budget in seconds (default 10, max 60).
Exemple d'appel{"name": "roster_shifts", "arguments": {"staff": [], "shifts": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - route_plan≈ 562 tokens
Order up to 12 stops into the shortest single-vehicle route on your distance matrix. FREE. Typical input {"stops": [{"id": "depot"}, {"id": "A"}, {"id": "B"}], "matrix": [[0, 5, 9], [5, 0, 4], [9, 4, 0]]} returns {"routes": [{"vehicle": 0, "stops": [...], "distance": 18.0}], "total_distance": 18.0, "solver_status": "FEASIBLE", "note": "..."}. The matrix is in your units (km, minutes, cost) and must be square with the depot at index 0 unless depot says otherwise; optional demand per stop with vehicle_capacity turns it into a capacity check. Use for one driver's day or a courier's loop. Not for several vehicles or time windows: use route_plan_fleet. Not a map service: bring your own distances or call distance_matrix_haversine for straight-line values. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "stops must be a list of stop objects, depot first"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Paramètres, retour & exemple (5)
Paramètresdepot· integer · optionnel
index of the depot in stops (default 0).stops· array · requis
list of stop objects, depot first: id, optional demand.matrix· array · requis
square distance (or time) matrix, row i column j = cost from stop i to stop j.time_limit_s· number · optionnel
solver time budget in seconds (default 3, max 15).vehicle_capacity· number · optionnel
optional capacity in the units of demand (0 = unlimited).
Exemple d'appel{"name": "route_plan", "arguments": {"stops": [], "matrix": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - route_plan_fleet≈ 685 tokens
Capacitated, time-windowed routing for a fleet over up to 200 stops. PREMIUM (license). Typical input {"stops": [{"id": "depot", "window": [480, 1080]}, {"id": "A", "demand": 3, "window": [540, 720], "service_min": 10}, ...], "matrix": [[...]], "vehicles": [{"id": "van1", "capacity": 10}, {"id": "van2", "capacity": 8, "max_distance": 120}]} returns {"routes": [{"vehicle": "van1", "stops": [{"id": "A", "arrive_min": 545, ...}], "distance": 42.5, "load": 9}], "unserved": [], "solver_status": "FEASIBLE"}. Windows and service times are minutes from the start of the day; travel time comes from time_matrix (minutes) or, if absent, the distance matrix read as minutes. Set drop_penalty to allow stops to be left unserved at that cost instead of returning INFEASIBLE. Use for daily dispatch. Not a map service; bring your own matrices. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "stops must be a list of stop objects, depot first"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Paramètres, retour & exemple (7)
Paramètresdepot· integer · optionnel
index of the depot in stops (default 0).stops· array · requis
depot first; each: id, demand, window [earliest_min, latest_min], service_min.matrix· array · requis
square distance matrix in your units.vehicles· array · requis
list of {id, capacity, max_distance}; capacity in the units of demand.time_matrix· array · optionnel
optional square travel-time matrix in minutes (defaults to matrix).drop_penalty· number · optionnel
cost of leaving a stop unserved (0 = every stop must be served).time_limit_s· number · optionnel
solver time budget in seconds (default 10, max 60).
Exemple d'appel{"name": "route_plan_fleet", "arguments": {"stops": [], "matrix": [], "vehicles": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}]} - validate_problem≈ 398 tokens
Check a problem's shape and obvious feasibility before spending solver time. FREE. Typical input {"type": "route", "problem": {"stops": [...], "matrix": [[...]], "vehicles": [...]}} returns {"ok": false, "issues": ["total demand 34 exceeds total capacity 30"], "size": {"stops": 14, "vehicles": 2}, "tier_hint": "route_plan_fleet (licence) - more than 12 stops"}. Types: route, pack, cut1d, cut2d, roster, knapsack; the problem object uses the same fields as the matching tool. Use first when an agent has assembled the problem from other data. Not a solve: it never calls the solver. Errors: on invalid, missing, or malformed input this tool never raises a protocol error — it returns {"error": "<what is wrong and how to fix it>"} (for example {"error": "type must be one of <value>"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
Paramètres, retour & exemple (2)
Paramètrestype· string · requis
route, pack, cut1d, cut2d, roster or knapsack.problem· object · requis
the same object you would pass to the tool (stops/matrix/vehicles, items/containers, ...).
Exemple d'appel{"name": "validate_problem", "arguments": {"type": "texte", "problem": {}}}Exemple de retour{"content": [{"type": "text", "text": "…"}]}
C'est votre serveur ?
Revendiquez-le sur l'espace créateur (preuve GitHub, domaine ou npm) pour afficher le badge « propriétaire vérifié » et lancer un pentest comportemental à la demande afin d'obtenir le badge « Vérifié ».