Moltline Optimize
Server Details
Vehicle routing, 3-D packing, cutting stock, rostering and knapsack with OR-Tools. 7 of 11 free.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
11 toolscutting_stock_1dCutting Stock 1DARead-onlyIdempotentInspect
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": ""} (for example {"error": "stock and parts must be non-empty lists ( and )"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Name | Required | Description | Default |
|---|---|---|---|
| kerf | No | material lost per cut (same unit as lengths). | |
| parts | Yes | required pieces: {length, qty}. | |
| stock | Yes | stock lengths available: {length, cost, qty} (qty = how many of that length may be used; default unlimited). | |
| time_limit_s | No | solver time budget in seconds (default 3, max 15). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses optimization objective (minimises cost/count), solver behavior (proves optimality or returns FEASIBLE plan), and error behavior (never raises protocol error, returns error object). This goes well beyond the readOnly and idempotent annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense paragraph with no filler: example input/output, solver behavior, size limit, alternative tool, error handling, and safety. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no nested objects and an output schema, the description covers input format, return shape, optimization semantics, error behavior, and retry safety. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with useful descriptions, so the baseline is high. The description adds a concrete input example clarifying stock/parts/kerf structure and explains cost/count semantics, though time_limit_s is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with 'Least-waste cut plan for bars, pipes or boards from stock lengths', clearly stating what the tool produces. It also distinguishes itself from cutting_stock_2d, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit guidance: 'Use for a cut list of up to 200 pieces' and 'Not for sheets: use cutting_stock_2d.' This provides both an inclusion criterion and a named alternative, so an agent can route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cutting_stock_2dCutting Stock 2DARead-onlyIdempotentInspect
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": ""} (for example {"error": "sheets and parts must be non-empty lists ( and )"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Name | Required | Description | Default |
|---|---|---|---|
| kerf | No | saw blade width lost per cut. | |
| grain | No | true when parts must keep their orientation (l along the sheet's l). | |
| parts | Yes | {id, l, w, qty, rotate}; rotate overrides the grain rule per part. | |
| sheets | Yes | {id, l, w, qty}; used in the order given. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint; the description reinforces these and adds a detailed error contract: invalid input never raises a protocol error but returns an error object with guidance. It also discloses the heuristic nature, the guillotine-cut constraint, and the grain/rotate override behavior. This goes well beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core function, then uses a compact example to convey input/output shape, followed by constraints, use cases, limitations, and error handling. Every sentence contributes distinct information, and the length is justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a rich output schema, so return-value details do not need to be repeated. The description covers the key operational facts: read-only and idempotent behavior, error handling, optimality caveat, guillotine constraint, and grain semantics. Nothing essential for an agent to select and invoke the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter. The description adds concrete meaning through the typical input example, including kerf as a numeric value, parts with quantities, and the resulting layout structure. It also explains the grain rule and per-part rotate override, which adds behavioral context to the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states the operation and resource: building guillotine cut layouts for rectangular parts from sheets, with kerf and grain. The 'guillotine' and '2D' qualifiers distinguish it from siblings like cutting_stock_1d and pack_bins. Example input/output further clarifies the exact scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names target use cases: cabinet, sign, and sheet-metal cut lists. It also flags the tool as a best-fit shelf heuristic and 'not proven optimal,' signaling when it may not be suitable. It does not explicitly name sibling alternatives or exclusions, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
distance_matrix_haversineDistance Matrix HaversineARead-onlyIdempotentInspect
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": ""} (for example {"error": "points must be a list of at least two objects"}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | km (default) or mi. | km |
| points | Yes | list of {id, lat, lon} (up to 200). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint/idempotentHint annotations by detailing the exact error behavior: 'it returns {"error": "<what is wrong and how to fix it>"}' and never raises a protocol error. It also explicitly states that every call is read-only, idempotent, and safe to retry, which adds actionable behavioral context not present in the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place. The description uses a clear opening statement, a concrete example, usage guidance, exclusion from road routing, and error behavior. It is dense but well-organized and does not waste words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with an output schema, the description still covers all necessary invocation details: input shape, example, units, limit, error responses, and retry safety. An agent has everything needed to select and call this tool correctly without additional inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all parameters are documented structurally. The description adds meaning by providing a complete typical input/output example, clarifying the points format ({id, lat, lon}), the unit options, the 200-point limit, and the shape of the returned matrix. This is far beyond the schema's minimal descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise statement: 'Straight-line (great-circle) distance matrix from coordinates,' which clearly identifies the computation and resource. It further distinguishes itself from road routing by stating 'Not road routing: real driving distances are longer.' This makes it unmistakable relative to sibling tools like route_plan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use when you have no road matrix and a straight-line approximation is acceptable, or to sanity-check one.' It also states what the tool is not for: 'Not road routing.' This gives an agent clear selection criteria among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_solutionExplain SolutionARead-onlyIdempotentInspect
Plain-language summary of a solution from this server and the constraints that bind. FREE.
Typical input {"solution": } 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": ""} (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.
| Name | Required | Description | Default |
|---|---|---|---|
| solution | Yes | the result object returned by one of this server's solve tools. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive hints; the description adds value by explaining error behavior: it 'never raises a protocol error' and instead returns a structured error object. It also clarifies that input is recognized by fields across multiple solver tools, and that retrying after correction is safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence earns its place: purpose, cost, example, accepted input sources, use case, exclusions, error behavior, and retry guidance. Key information is front-loaded, with the core purpose stated first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only one parameter and rich annotations, this description is fully complete. It covers what the tool accepts, what it returns with a representative example, how errors manifest, and why retrying is safe. There is no missing information an agent would need to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only says the `solution` parameter is a result object from a solve tool. The description substantially expands this by naming the exact solver tools whose outputs are accepted, providing a concrete example input and output, and explaining that the object is recognized by its fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Plain-language summary of a solution from this server and the constraints that bind.' It clearly differentiates itself from solve tools by stating 'Not a re-solve' and by listing the exact solver result types it recognizes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it: 'Use to turn solver output into a message for a dispatcher or a shop floor.' It also gives a clear exclusion, 'Not a re-solve,' and tells the agent that invalid input yields a fixable error so retry is safe.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
knapsack_selectKnapsack SelectARead-onlyIdempotentInspect
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": ""} (for example {"error": "items must be a non-empty list of "}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | {id, value, qty, <resource fields>}: value to maximise plus one number per limited resource. | |
| limits | Yes | {resource_name: capacity} for each constrained field. | |
| time_limit_s | No | solver time budget in seconds (default 3, max 15). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds valuable behavior beyond that: it never raises a protocol error and instead returns an error object, and it explicitly says retrying is safe after correcting input. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and includes a compact example, dynamic resource explanation, use cases, exclusions, and error behavior. Each section earns its place, though 'FREE.' is a minor digression and the overall text is slightly longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's flexible additionalProperties schema, the description covers the key invocation details: constrained resources, multiplicity via qty, error behavior, retry safety, and appropriate use cases. The output schema exists, so the return structure in the example and solver_status is sufficient for an agent to understand what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful semantic detail beyond the schema by explaining that any numeric item field named in limits becomes a constrained resource and that qty allows an item to be taken multiple times. The worked example further clarifies how items and limits map to the selected output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: 'Choose the items that maximise value under one or more capacity limits.' It clearly identifies the knapsack problem and distinguishes it from sibling tools by saying it is for budgets, cargo, campaign, or feature selection and not for dependencies between items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use cases ('Use for budgets, cargo, campaign or feature selection') and an explicit exclusion ('Not for dependencies between items'), but it does not name an alternative sibling tool. This is clear context without fully specifying what to use instead when dependencies exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pack_binsPack BinsARead-onlyIdempotentInspect
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": ""}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | list of {id, l, w, h, weight, qty, rotation, fragile}, all in one length unit. | |
| rules | No | optional {min_support: 0-1, default_rotation: any|upright|fixed}. | |
| containers | Yes | list of {id, l, w, h, max_weight, qty}; used in the order given. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (read-only, idempotent), the description discloses crucial behavioral details: it never raises protocol errors and instead returns an error object, it is a heuristic rather than optimal, fragile items carry nothing, and min_support defaults to 0.6. It also explicitly confirms read-only and idempotent behavior, making retries safe. This is exceptional transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but information-dense, and the useful details (example, rotation rules, error behavior, heuristic status) each earn their place. The example JSON is heavy but instrumental for correct invocation. Slight deduction for the trailing 'FREE.' being low-value and the overall length being near the upper bound.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a packing tool with nested objects and non-obvious constraints, the description is nearly complete: it covers input semantics, output shape via example, error format, retry safety, heuristic limitations, and special rules. The presence of an output schema reduces the need to explain return values, and the description still supplies a concrete example. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already covers 100% of parameters, the description adds substantial meaning: a full example input/output, the meaning of 'rotation per item' (any/upright/fixed), the 'rules.min_support' default, the interpretation of 'fragile', and that containers are 'used in the order given'. This goes well beyond the schema's brief property descriptors.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: 'Place up to 20 boxes into containers or pallets with rotation, weight and support rules.' It also scopes the tool by the size cap and adds a concrete decision purpose ('decide pallet or carton count before booking freight'). This clearly distinguishes it from siblings like pack_bins_large even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use case: 'Use to decide pallet or carton count before booking freight.' It also warns that the algorithm is a 'first-fit-decreasing heuristic' and not proven optimal, which helps set expectations. However, it does not explicitly state when not to use this tool or mention pack_bins_large as the alternative for larger problems, so it falls just short of full alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pack_bins_largePack Bins LargeARead-onlyIdempotentInspect
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": ""}. Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | list of {id, l, w, h, weight, qty, rotation, fragile}. | |
| rules | No | optional {min_support: 0-1, default_rotation: any|upright|fixed}. | |
| containers | Yes | list of {id, l, w, h, max_weight, qty}. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, it adds important behavior: invalid input returns an error object instead of raising a protocol error, results are not proven optimal, and retrying after correction is safe. This gives an agent actionable expectations beyond what annotations alone provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is denser but each section earns its place: capacity, example, output shape, use cases, algorithm caveat, error behavior, and retry safety. The read-only/idempotent sentence slightly repeats annotations, but it also adds practical retry guidance, so the cost is minor.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers capacity limits, typical input, returned shape, intended use, algorithmic limitations, error handling, and idempotency. Given the schema and annotations, an agent has what it needs to select this tool and invoke it correctly without obvious gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers all three parameters, so the baseline is 3. The description adds a concrete JSON example showing how to structure items and containers, which helps construct a valid call. It does not discuss the rules parameter in detail, but the schema already documents it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies this as a bin-packing tool via 'Same packer as pack_bins' and clarifies the larger scale with 'up to 300 item units and 200 containers.' Its typical input and output shape make the resource and result clear, but the core action is expressed through comparison to pack_bins rather than an explicit 'packs items into containers' statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear selection context: use this for order consolidation and load planning, and the capacity bound differentiates it from pack_bins. It does not explicitly state when not to use it or name a smaller-input alternative, though the capacity phrasing implies the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
roster_shiftsRoster ShiftsARead-onlyIdempotentInspect
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": ""} (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.
| Name | Required | Description | Default |
|---|---|---|---|
| rules | No | {min_rest_hours (default 0), max_consecutive_days (default 7), max_shifts_per_day (default 1)}. | |
| staff | Yes | {id, skills[], max_hours, min_hours, unavailable[], prefer[], avoid[], max_shifts}. | |
| shifts | Yes | {id, start, end (ISO 8601 local), required, skill, weight}. | |
| time_limit_s | No | solver time budget in seconds (default 10, max 60). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool read-only and idempotent, and the description reinforces this with 'Every call is read-only and idempotent.' It also adds significant behavioral detail not in annotations: error handling never raises a protocol error, returns an error object, and the objective prioritization rules. This transparency is valuable for an optimization tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but densely packed: purpose, example, objective, scale, limitations, error behavior, and safety all earn their place. It is front-loaded with the core purpose. The example is somewhat verbose but justified for a complex nested-input tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description covers scope, constraints, objective prioritization, failure behavior, and retry safety. The output example plus the presence of an output schema make the return contract clear. Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage, so baseline is 3. The description adds value beyond the schema with a complete typical input example, a returned output example, and clarification of preferences via 'staff.prefer / staff.avoid shift ids.' This helps the agent construct correct nested inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Assign staff to shifts under availability, skills, hour caps and rest gaps.' It clearly identifies the tool's domain and distinguishes it from sibling optimization tools by focusing on shift rostering rather than routing, packing, or cutting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage context: 'Use for weekly rotas of up to 60 staff and 150 shifts' and explicitly warns it is not legal compliance advice. It does not name sibling alternatives, but the scope and example are strong enough for an agent to select this tool appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
route_planRoute PlanARead-onlyIdempotentInspect
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": ""} (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.
| Name | Required | Description | Default |
|---|---|---|---|
| depot | No | index of the depot in stops (default 0). | |
| stops | Yes | list of stop objects, depot first: id, optional demand. | |
| matrix | Yes | square distance (or time) matrix, row i column j = cost from stop i to stop j. | |
| time_limit_s | No | solver time budget in seconds (default 3, max 15). | |
| vehicle_capacity | No | optional capacity in the units of demand (0 = unlimited). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyhInt, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavior beyond that: the tool never raises a protocol error but returns a structured error object with corrective guidance, and it documents capacity-check behavior when demand and vehicle_capacity are used. No annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and a concrete example, then covers limits, use cases, exclusions, error behavior, and idempotency. Each section earns its place, and the length is justified for an optimization tool with non-obvious input expectations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values are already structured, yet the description still provides a illustrative response. It covers the stop limit, matrix constraints, depot handling, capacity checks, route_plan_fleet distinction, distance matrix sourcing, error behavior, and retry safety. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description genuinely adds meaning by explaining that the matrix must be square, the depot should be at index 0 unless the depot parameter says otherwise, units are user-defined, and optional demand plus vehicle_capacity triggers a capacity check. This goes beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Order up to 12 stops into the shortest single-vehicle route on your distance matrix.' It distinguishes itself from route_plan_fleet by explicitly calling out single-vehicle routing, making the tool's scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use guidance ('Use for one driver's day or a courier's loop') and explicit when-not-to-use guidance ('Not for several vehicles or time windows: use route_plan_fleet'), including a named alternative for distance input (distance_matrix_haver sin). This is strong routing to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
route_plan_fleetRoute Plan FleetARead-onlyIdempotentInspect
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": ""} (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.
| Name | Required | Description | Default |
|---|---|---|---|
| depot | No | index of the depot in stops (default 0). | |
| stops | Yes | depot first; each: id, demand, window [earliest_min, latest_min], service_min. | |
| matrix | Yes | square distance matrix in your units. | |
| vehicles | Yes | list of {id, capacity, max_distance}; capacity in the units of demand. | |
| time_matrix | No | optional square travel-time matrix in minutes (defaults to matrix). | |
| drop_penalty | No | cost of leaving a stop unserved (0 = every stop must be served). | |
| time_limit_s | No | solver time budget in seconds (default 10, max 60). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses that invalid input never raises a protocol error but returns an error object, that unsterved stops are listed, that zero-demand stops are always dropped, that units are minutes and demand units, and that calls are safe to retry. These behavior details go well beyond readOnlyHint/idempotentHint and add real value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded, with purpose, example, units, usage guidance, and edge cases in logical order. It is slightly longer than necessary because it restates read-only/idempotent behavior already present in annotations and contains a self-correcting zero-demand edge case, but it is not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter solver with an output schema, the description covers purpose, I/O shape, units, defaults, error protocol, edge cases, and sibling routing. An agent has everything needed to decide whether to call it, construct input, interpret output, and recover from failures.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description adds substantive meaning: windows and service times are minutes from the start of the day, travel time comes from the matrix, returned loads are in demand units, max_distance absent means unlimited, and window [0, 1440] means anytime. The worked input/output example maps parameter names to concrete values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific operation: 'Capacitated, time-windowed routing for a fleet over up to 200 stobs.' It later clarifies scope ('This tool only otimizes the routes for a fixed fleet') and explicitly distinguishable from route_plan and pack_bins, so an agent can tell it apart from siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: use pack_bins or pack_bins_large to build a fleet, use route_plan for a single uncapacitated route, use validate_problem for solver errors, and use explain_solution to explain output. This is model guidance on alternatives and conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_problemValidate ProblemARead-onlyIdempotentInspect
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": ""} (for example {"error": "type must be one of "}). Every call is read-only and idempotent, so after correcting the input it is always safe to retry.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | route, pack, cut1d, cut2d, roster or knapsack. | |
| problem | Yes | the same object you would pass to the tool (stops/matrix/vehicles, items/containers, ...). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint, it discloses cost ('FREE'), the important invalid-input behavior (never raises a protocol error; returns an error object), and the guarantee that it does not invoke the solver. This is exactly the behavioral context an agent needs and goes well beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but well-organized: purpose, cost, typical request/response, type list, usage timing, non-solve guarantee, error contract, retry safety. Each sentence carries distinct information and key points are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover safety, the description still supplies the missing operational context: how to interpret errors, that it is read-only/idempotent for retries, and how the problem object maps to sibling tools. Nothing an agent needs to call it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage the baseline is 3, and the description adds genuinely useful meaning: 'problem' uses the same fields as the matching solver tool, and the typical-input example shows the nested shape for route. This exceeds baseline but does not need to enumerate every subtype.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('check a problem's shape and obvious feasibility') on a clear resource, enumerates the accepted problem types, and explicitly differentiates itself from solver siblings with 'Not a solve: it never calls the solver.' An agent can immediately distinguish it from route_plan, pack_bins, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Directs agents to use it first when they have assembled a problem from other data and frames it as a pre-solve gate ('before spending solver time'). It says what it is not (not a solve) but does not name specific alternatives for when validation is unnecessary, though the sibling list makes the contrast clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
11 tool updates
- First observed
cutting_stock_1d - First observed
cutting_stock_2d - First observed
distance_matrix_haversine - First observed
explain_solution - First observed
knapsack_select - First observed
pack_bins - First observed
pack_bins_large - First observed
roster_shifts - First observed
route_plan - First observed
route_plan_fleet - First observed
validate_problem
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Optimize crew and workforce schedules, resource allocation, and routing with linear and mixed-inte…
FinOps for Google Cloud: size 1- and 3-year CUD commitments to known demand. Also solves LP/MIP.
Pack cargo into containers & onto pallets; a verifiable 3D loading plan. Free tier + REST API.
- mcpOAuthcom.crisphive
Field operations on a deterministic solver — run jobs, crews & fleet from Claude or ChatGPT.
13
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to solve linear, integer, mixed-integer, and knapsack optimization problems using Google OR-Tools via a simple JSON interface.-
- AlicenseAqualityDmaintenanceProvides constraint satisfaction and optimization capabilities to LLMs and AI agents for scheduling, resource allocation, routing, budget optimization, and configuration problems using Google OR-Tools CP-SAT solver.55Apache 2.0
- AlicenseNot gradedqualityDmaintenanceMCP-ORTools integrates Google's OR-Tools constraint programming solver with Large Language Models through the MCP, enabling AI models to: Submit and validate constraint models Set model parameters Solve constraint satisfaction and optimization problems Retrieve and analyze solution21MIT
- AlicenseAqualityCmaintenanceEnables solving complex combinatorial optimization problems with logical and numerical constraints through multiple solvers (Z3, CVXPY, HiGHS, OR-Tools). Specializes in portfolio optimization, scheduling, resource allocation, and constraint satisfaction problems.55Apache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
Each solver targets a distinct optimization domain (cutting, packing, routing, knapsack, rostering), and scale variants like pack_bins/pack_bins_large and route_plan/route_plan_fleet are explicitly differentiated by size/scope. Helper and meta tools (distance_matrix_haversine, validate_problem, explain_solution) are clearly separate from solve tools.
Names are uniformly lowercase snake_case and organized into recognizable families such as cutting_stock_1d/2d, pack_bins/pack_bins_large, and route_plan/route_plan_fleet. The pattern is not strictly verb_object throughout—knapsack_select and distance_matrix_haversine are noun-first or descriptive—so there is minor inconsistency.
With 11 tools, the server is well-scoped for an optimization toolkit: one core solver per problem type, a large-scale packer variant, a distance-matrix helper, and validation/explanation tools. Each tool has a clear role, and the count supports broad coverage without becoming bloated.
The server covers a complete solve-validate-explain workflow across major OR problem types—cutting, packing, routing, knapsack, and rostering. Minor gaps exist, such as pack_bins_large not being listed as recognized by explain_solution, and some features are explicitly documented exclusions rather than missing functionality.