About the project (Project Story โ€” Markdown)

๐ŸŽผ What it is

ORChestra is a chat-native conductor for operations research. You describe a real-world problem in plain English; an AI orchestrator routes it to the right one of eight specialized OR optimizers โ€” each a genuine OR-Tools model exposed as an MCP tool โ€” solves it, and explains the answer. Six of the eight are exact models that report a 0% optimality gap โ€” provably optimal, not a heuristic guess.

๐Ÿ’ก Inspiration

Orion is judged by INFORMS โ€” operations-research people โ€” under the banner "Where Operations Research Meets Innovation." We bet the field would be flooded with RAG chatbots, so we went the other way: fuse agentic AI with real optimization. OR has always had a last-mile problem โ€” the models are powerful but locked behind experts and clean data. LLMs are the missing pieces: the layer that turns messy human language into optimizer input, and the interface that lets anyone interrogate a rigorous model. We didn't put a chatbot on top of OR. We gave OR a voice.

๐Ÿ› ๏ธ How we built it

  • 8 OR-Tools optimizers โ€” LifeChain (kidney paired-exchange, CP-SAT cycle/chain packing), FoodRescue (VRP + time windows), ReliefRoute (allocation + fairness floor), ShiftHeal (nurse rostering), ColdChain (cold-chain delivery), FairAid (concave-utility cash allocation), CarbonRoute (multi-objective sourcing), OR-Copilot (knapsack/assignment).
  • MCP layer (FastMCP) โ€” every optimizer is an optimize_* tool; runnable as one aggregated server or eight standalone servers.
  • Orchestrator, two ways โ€” a portable Conductor (Claude routing + keyword fallback + session memory for "what-ifs") and a Hybrid path where Accenture AI Refinery's Distiller drives an MCPClientAgent connected to our MCP server over SSE.
  • Interfaces โ€” a Slack-style web chat (FastAPI) plus a swappable Slack Bolt adapter.
  • Runs with zero credentials; Claude, AI Refinery, and Slack are graceful enhancements.

๐ŸŽฏ The demo beat (LifeChain "Living Optimization")

Optimize a 18-pair kidney pool โ†’ 13 transplants, +5 vs a naive matcher, optimality gap 0%. Then say "prioritize the children" โ†’ it re-solves live in ~1s: still 13 transplants, but pediatric recipients rise 3 โ†’ 5 โ€” a Pareto-improving fairness change, steered in plain English.

๐Ÿง— Challenges we ran into

  • AB blood type = universal recipient, which turned a "find an incompatible donor" loop into an infinite loop โ€” fixed with a bounded, realistic crossmatch model.
  • Reproducibility: Python's salted hash() and multi-worker CP-SAT tie-breaking made the "provably optimal" demo flap between runs. We made the crossmatch a stable integer mix and pinned CP-SAT to a single worker + fixed seed โ€” now byte-identical every run.
  • A mislabeled mcp PyPI package; pivoted to the reliable standalone FastMCP.

๐Ÿ“š What we learned

Constraining the LLM to fill typed parameters of pre-validated OR templates (never emit raw solver code) is what makes "talk to the optimizer" safe in front of experts โ€” the model can't hand a judge a wrong model. And honesty scores: we label the 6 exact solvers gap 0 and the 2 routing solvers as metaheuristic, rather than overclaiming.

๐Ÿ† Accomplishments

8 real OR models ยท MCP tool layer ยท portable and AI Refinery orchestration ยท web + Slack ยท 29/29 tests pass ยท all 8 solve in ~4s from one command.

๐Ÿš€ What's next

Real EHR/FHIR ingestion for LifeChain, live map/graph visualizations, and a national-pool scale demo.

Built With

  • agentic-ai
  • ai-refinery
  • anthropic-claude
  • constraint-programming
  • cp-sat
  • fastapi
  • fastmcp
  • fintech
  • google-or-tools
  • healthcare
  • llm
  • mcp
  • milp
  • networkx
  • operations-research
  • optimization
  • pydantic
  • python
  • slack
  • slack-bolt
  • sustainability
  • uvicorn
  • vehicle-routing
Share this project:

Updates