Routes, shifts and budgets,solved to the best possible plan,and proven optimal.
JAOT turns your problem into a mathematical model, solves it, and proves that no better answer exists. You can build the model with the AI assistant, start from a community template, or call JAOT from your own agent over MCP.
An optimization platform for people and for AI agents.
Three ways to optimize
Build a model with the AI assistant, start from a community model in the marketplace, or connect your AI agent over MCP.
AI assistant
Describe the problem in plain words. The assistant writes the mathematical model, and JAOT solves it.
“Plan next week's deliveries: 4 vans, 60 stops, every van back by 18:00.”
Model marketplace
Browse models that other people have published. Use one as it is, fork it, or publish your own.
Fertilizer Mix Optimizer — agriculture
MCP for AI agents
Connect Claude, GPT or any MCP client. An agent can solve problems, fork marketplace models and write versioned models on its own.
solve_with_template(template_id="fertilizer_mixing")

Fourteen lines, whatever the size of the data
JModel describes the problem with sets and indexed families. JAOT renders the mathematics before any data is loaded. The same source below covers one plant for a quarter or four hundred products for a year, with no change to the model.
What you write
set PRODUCTS;set RESOURCES;set WEEKS; param margin{PRODUCTS};param usage{RESOURCES, PRODUCTS};param capacity{RESOURCES, WEEKS};param ceiling{PRODUCTS, WEEKS}; var build{PRODUCTS, WEEKS} integer >= 0; maximize contribution: sum{p in PRODUCTS, w in WEEKS} margin[p] * build[p, w]; subject to plant{r in RESOURCES, w in WEEKS}: sum{p in PRODUCTS} usage[r, p] * build[p, w] <= capacity[r, w]; subject to market{p in PRODUCTS, w in WEEKS}: build[p, w] <= ceiling[p, w];What it means
The same 14 lines both times. The data sets the number of variables and constraints. The model stays the same.
The three products with the highest margin are left out of the plan
One quarter of a power-electronics plant, solved and proven optimal. The plan builds none of the three product families with the highest margin per unit. The component everyone blames for the bottleneck ends the quarter with almost half of its stock unused. The exact analysis shows why.
Quarterly build plan
22,410 units · SCIP, proven optimal- 800 V traction inverter€2,450 / unit0 units
- Battery management unit€1,780 / unit0 units
- DC fast-charge module€1,320 / unit0 units
- Grid-tie solar inverter€960 / unit7,460 units
- Industrial motor drive€740 / unit6,290 units
- Fleet telemetry unit€410 / unit8,660 units
- Machine sensor hub€260 / unit0 units
What runs out
- SMT line hoursat capacity
- Burn-in chamber hoursat capacity
- Automotive-grade MCUs112,570 spare
- SiC power modulesat capacity
- Final-test hours7,930 spare
- Conformal-coating hours3,290 spare
- Fleet telemetry contract8,660 shipped, 3,500 required
800 V traction inverter: €2,450 a unit, and the plan builds none. It uses more of each of the 3 limits that ran out than any other product, while 112,570 automotive-grade microcontrollers stay unused, so buying more of those would change nothing. JAOT reads both facts from the integer solution itself, so they hold for the plan you will run.
What-if, measured by solving again
Ask what one more unit of a limit is worth. JAOT changes that limit, solves the model again and reports the real difference. Because it solves the integer model itself, the number is exact. A shadow price read from the linear relaxation can be wrong for an integer model.
Decisions grouped the way you wrote them
The solution comes back grouped by the sets and indices of your model. Each solve also states how it ended: at the root node, after branching, or at the time limit.
One-click explanation
The assistant turns the analysis into plain words. It only uses the numbers from your solve.
It names the two rules that clash and clears the other five
A customer orders a quarter's worth of traction inverters that the line cannot build. A solver answers "infeasible" and leaves you to check the whole model. JAOT removes each rule in turn and solves again until only the contradiction is left, so you know where to look.
How far each limit reaches
7 rules · 2 in the conflict- SMT line hours 7,700 invertersnot the problem
- Burn-in chamber hours 5,240 invertersin conflict
- Automotive-grade MCUs 7,900 invertersnot the problem
- SiC power modules 6,600 invertersnot the problem
- Final-test hours 6,900 invertersnot the problem
- Conformal-coating hours 6,600 invertersnot the problem
There are only enough burn-in chamber hours for 5,240 inverters, and the contract asks for 6,000. The other 5 limits are cleared by name. With 7,600 more, the model solves. That is the number to take to the customer.
The exact conflict set
JAOT isolates the smallest set of constraints and bounds that cannot all hold at once, and highlights them on the result page.
How to fix it, in plain words
One click asks the assistant to name the constraints in conflict and to suggest a fix: which bound to widen, or which limit to relax.
It says when it is estimating
When a model is too large for an exact conflict set, JAOT says so and marks the explanation as heuristic.
The fastest solver depends on the model
JAOT ships SCIP, HiGHS, CBC, GLPK and JAOS. The ranking changes from one model to the next, so JAOT runs your problem on all of them under the same terms and shows what each one did. Below, one quarter of burn-in chamber loading at the same plant.
Total time, logarithmic scale
1,342 variables, 3,558 constraints- SCIPProved 17 chambers10.86 s
201 nodes, 73,617 simplex iterations
- HiGHSProved 17 chambers1.44 s
1 node, 4,214 simplex iterations
- CBCProved 17 chambers1.70 s
776 nodes, 16,402 simplex iterations
- GLPKOut of time59.92 s
Proved that no plan needs fewer than 17 chambers, after 44,838 nodes, and never found a plan
- JAOSOut of time60.05 s
Proved that no plan needs fewer than 16.47 chambers, after 1,332 nodes, and never found a plan
The scale is logarithmic: each step is ten times the one before, so bar length is not proportional to the number beside it.
HiGHS finished first. SCIP reached the same answer 7.5 times slower. On another model the order changes, so the only way to choose is to measure.
GLPK and JAOS used the full 60 seconds and never found a plan. Each one still proved a bound, shown on its row: no plan needs fewer chambers than that. A bound is still useful: it tells you how far any plan can be from the best one.
Every solver got the same 60-second limit and the same 4 threads, one run after another on one 12-core server. The seconds are comparable within this run only.
The same terms
The same time limit, gap tolerance and thread count, on one machine, one run at a time. Two solvers running at once would compete for cores, and their times would no longer be comparable.
A whole matrix
Cross your model's datasets with the solvers: datasets down the side, solvers across the top. If your data changes every month, the fastest solver can change too, and the matrix shows that in one table.
The bound next to the answer
Each row shows the best bound the solver proved next to the answer it found. For a run stopped by the time limit, the gap between the two tells you how far the answer can be from the optimum.
Built for AI agents too
Any MCP client can use JAOT: Claude, GPT, or your own agent. It can build a model, solve it, read the analysis and publish the result, with the same tools a person uses.
Discover
The agent finds JAOT through MCP or /.well-known/llms.txt
Authenticate
The agent sends an API key
Solve
It creates the model, sets the parameters and runs the solver
Results
It reads the solution and the analysis as JSON
Problem solving
- solve_problem
- validate_problem
- solve_multi_objective
- list_available_solvers
Templates
- list_templates
- get_template
- solve_with_template
File I/O
- import_preview
- import_and_solve
- export_model
- export_execution
Marketplace
- list_catalog_models
- get_catalog_model
- get_catalog_model_schema
Model projects
- create_model_project
- create_model_project_from_marketplace
- update_model_project_draft
- commit_model_version
- list_project_versions
- get_model_stats
- solve_model_project
- get_model_project
- list_model_projects
Execution
- execute_model
- get_execution
- get_execution_insights
Analysis
- get_execution_exact_analysis
- analyze_infeasibility
- start_execution_scenario_analysis
- get_execution_scenario_analysis
Solver comparison
- compare_solvers
- get_solver_comparison
- compare_solvers_on_datasets
- get_solver_comparison_matrix
34 tools, all callable by an agent
Who uses JAOT
Teams and companies
- Plan routes, shifts, production or budgets with an exact solver
- REST API and MCP, so it fits the systems you already run
- Shared workspaces with roles and a common model library
- API keys, per-workspace permissions and rate limits
Contributors and consultants
- Publish your models in the marketplace
- Other people can fork them and build on your work
- Models are versioned, so a fork points at a known release
- See how many times each model was adopted and run
Students and researchers
- Build a model with the assistant and read the mathematics it produces
- Templates from a first LP to a full MIP, with worked examples
- Five open source solvers you can run side by side on the same model
- Free and open source, and you can install it on your own machine
What people model with it
Six common problems. Each one has a template in the marketplace, or the assistant can build it from your description.
102 templates across 34 sectors
Browse the marketplace- Finance & Investment5
- Logistics & Distribution5
- Human Resources & Workforce4
- Manufacturing & Production4
- Aerospace3
- Agriculture & Farming3
- Chemical Engineering3
- Construction3
- Cutting & Packing3
- Energy & Utilities3
- Facility Location3
- Food & Beverage3
- Forestry3
- General Purpose3
- Government3
- Healthcare & Nutrition3
- Maritime3
- Mining3
- Network & Graph Optimization3
- Pharmaceutical3
- Railway3
- Real Estate3
- Retail & Commerce3
- Supply Chain Management3
- Telecommunications3
- Transportation & Logistics3
- Warehouse3
- Water Management3
- Advertising & Media2
- Education & Academic2
- Environmental & Sustainability2
- Insurance2
- Sports & Recreation2
- Textile2
Vehicle routing
A carrier delivers to 50 addresses with 8 trucks. The model picks the order of stops for each truck so the total distance is as short as possible, within each truck's capacity and the delivery windows.
From the marketplace
Employee scheduling
A hospital assigns 120 nurses to three shifts. The model respects each nurse's availability, the rest rules between shifts and the minimum staff per shift.
Built with AI
Budget allocation
A marketing team splits €2M across 12 channels. The model puts the money where the expected return per euro is highest, with a minimum and a maximum per channel.
Built with AI
Production planning
A factory plans a week of production on 5 lines. The model decides what each line builds and when, within the material, labour and machine hours available.
From the marketplace
Supply chain network
A retailer chooses where to open warehouses to serve 200 shops. The model weighs the fixed cost of each site against the transport cost to every shop.
From the marketplace
Resource assignment
A consultancy assigns 80 consultants to 25 projects. The model matches skills to what each project needs and keeps every consultant within their available hours.
Built with AI
How it works
Pick a starting point
Choose one of 100+ templates, fork a marketplace model, import an MPS, LP or JSON file, or describe the problem to the assistant.
Build the model in the studio
Write it in JModel, or place variables and constraints on the visual canvas. Load your data in the Data tab. JAOT shows the resulting mathematics as you go.
Solve and read the analysis
Run one solver, or compare all five on the same model. Then read which constraints bind, what one more unit is worth, and export the solution.
