Python · Rust · many-core CPUs · MCP

Optimization tools
for AI agents.

Turn a model or simulation into a measured search. Choose a solver, give it a CPU and evaluation budget, and check the result.

Five open-source repositories connect parallel black-box search, linear and mixed-integer programming, smooth nonlinear optimization, and durable jobs. Use a library, a shell, or the Model Context Protocol.

MIT-licensed projects. Select by model structure and required evidence; compare candidates on your workload.

01 / Match the problem

Start with the output you need.

One good solution

Keep linear structure for LP/MIP. Use SQP for a small smooth NLP with derivatives. Use fcmaes for a black-box simulation, multimodality or nonsmoothness.

A Pareto front

Use MODE for black boxes. Structured linear or smooth models can use a sequence of scalarized solves; independently filter and check the candidates.

Diverse good solutions

Use MAP-Elites or the Diversifier in fcmaes. Define behavior descriptors that capture the diversity your application actually needs.

Need a large sparse NLP, conic solver, dedicated routing/CP solver or certified global MINLP? The shared guide explains when to use tools outside this ecosystem.

02 / Choose an interface

The five repositories.

Libraries solve in your program. The three Rust workers share one job contract and one runner. Python fcmaes remains a library.

fast-cma-es / fcmaes

Parallel gradient-free optimization for Python: black-box, multi-objective and quality-diversity search.

Use for. Python objectives and simulations; parallel retries or population evaluation; CMA-ES, DE, BiteOpt, MODE and MAP-Elites.

Check first. Heuristic search, with constraints handled by the selected method. No stock job worker or MCP server in this package.

Install. PyPI: fcmaes (2.1.0 and later include the MODE fixes and fcmaes.pareto). Build from source for changes after the latest release.

fcmaes-rust

Native Rust parallel black-box optimization, Python bindings, and a worker for durable optimization jobs.

Use for. Rust objectives, parallel global search, Pareto search and quality diversity. Application workers run registered Rust models as jobs.

Check first. Python callbacks do not gain native Rust parallelism. The experimental surrogate targets small deterministic continuous-box problems; consult its limits before use.

Install. crates.io: fcmaes-core; PyPI: fcmaes-rust (0.2.0 and later include the MODE fixes and ParetoArchive2D). Job worker and experimental surrogate: source only.

LP-IP-craft

Native Rust linear and mixed-integer linear programming with Python bindings and a shell/MCP job worker.

Use for. Models with linear objectives and constraints. Libraries take structured models; the job worker accepts a hashed model artifact, with an MPS converter in the repository.

Check first. MIP variables need finite bounds, supplied or inferred. No QP/MIQP. Statuses and gaps are numerical findings under tolerances; benchmark hard industrial MIPs against mature solvers.

Install. PyPI: lp-ip-craft; crates.io: lp-ip-craft and lp-ip-craft-native (since 0.29.0). Job worker: source only.

SQP-craft

Rust sequential quadratic programming for smooth constrained optimization, with Python bindings and a shell/MCP job worker.

Use for. Smooth continuous models with gradients and Jacobians, local refinement and multistart. User nonlinear jobs require a registered model in an application worker.

Check first. Dense BFGS with at most 256 variables. Local first-order results, not global certificates. For larger sparse NLPs, consider an IPOPT-family solver.

Install. PyPI: sqp-craft; crates.io: sqp-craft, sqp-craft-solver and the QP backends sqp-craft-clarabel and sqp-craft-activeset (since 0.17.0). Job worker: source only.

optimization-jobs

Durable optimization jobs for AI agents: local Rust runner, worker SDK and MCP server with a shared CPU budget.

Use for. An agent needs to discover workers, validate, submit, follow or cancel jobs and read results and artifacts through MCP or a shell.

Check first. Linux, one local node, cooperative CPU accounting. Install and register workers first. No distributed scheduler or exact optimizer-state resume.

Install. crates.io: optimization-job-api and optimization-runner (since 0.3.0); cargo install optimization-runner --locked installs optimization-run and optimization-mcp. No solver is bundled: workers build in their repositories.

Availability checked 2026-10-22. Package releases can lag source changes; read each changelog before using a new feature.

03 / Run and inspect

A shared job layer for a shell or MCP.

On Linux with Rust 1.88 or newer, start from one worker repository. Its locked build includes a compatible runner and MCP server. The runnable tutorial initializes a node and exercises example jobs:

git clone https://github.com/dietmarwo/fcmaes-rust
cd fcmaes-rust
cargo build --release --locked -p optimization-runner -p fcmaes-job-worker
cargo build --release --locked -p fcmaes-job-worker --example custom_worker
python3 tutorials/job-api/run.py --root /tmp/fcmaes-job-tutorial

Use a fresh tutorial directory. Read the fcmaes job tutorial for prerequisites, resource settings and output inspection. Equivalent tutorials: LP/MIP and SQP.

Connect an agent

Configure its MCP client to launch optimization-mcp --root /absolute/path/to/node over stdio, using the absolute executable path. The owner must initialize the node and register workers first.

Then call get_guide, describe_node and describe_worker. Use the returned schemas and examples to validate and submit a job.

Budget the CPU explicitly

Discover the host and worker limits before choosing outer workers and inner threads. The runner accounts for outer_workers × inner_threads ≤ cpu_slots; this is cooperative admission, not physical CPU isolation.

A many-core host often benefits from concurrent trials or starts. Eight inner threads are not automatically the best choice for one solve.

LP/MIP jobs accept model data. A new nonlinear application needs a model registered in a Rust worker; jobs do not carry arbitrary Python callbacks or shell commands. See the shared guide for setup, model registration, limitations and result checks.

04 / Check the evidence

Integration is evidence. Ranking needs a benchmark.

OptunaHub's FastCmaesSampler, by Jacob Pfeil, integrates fcmaes CMA-ES into Optuna. It is an attributable third-party integration of fast-cma-es; it does not validate the other four projects or establish a performance ranking.

The repositories provide their own tests, benchmark harnesses and reproduction instructions. Compare solver versions on the same models, tolerances, CPU allocations and budgets, include failures and repeat seeds. Report wall time and total CPU effort separately.

Reference index and evidence policy · Share a reproducible evaluation