mcpField
C
cuopt-server-api-python

cuopt-server-api-python

github.com/promptingcompanyCloud & DevOps039 installsUpdated 17w ago
Repository

About cuopt-server-api-python

A skill for deploying cuOpt Server and calling its REST API from Python or curl. It includes routing examples, runnable assets for routing, LP, and MILP, plus guidance on request polling and payload validation.

Key features

  1. 01Server startup and health checks
  2. 02Python and curl REST examples
  3. 03Routing request and solution polling
  4. 04VRP, pickup-delivery, LP, and MILP assets
  5. 05Payload validation and debugging

Use cases

  1. 01Starting cuOpt Server locally or in Docker
  2. 02Submitting routing problems from Python or curl
  3. 03Running sample VRP, pickup-delivery, LP, or MILP requests

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/promptingcompany/nv-skills --skill cuopt-server-api-python

After installing, type/cuopt-server-api-pythonin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

BENCHMARK.md
skill-card.md
skill.oms.sig
assets/
README.md
assets/lp_basic/
client.py
README.md
assets/milp_basic/
client.py
README.md
assets/pdp_basic/
client.py
README.md
assets/vrp_basic/
client.py
README.md
assets/vrp_simple/
client.py
README.md
evals/
evals.json

Details

From the project README

cuOpt Server — Deploy and client (Python/curl)

This skill covers starting the server and client examples (curl, Python). Server has no separate C API (clients can be any language).

Start server

# Development
python -m cuopt_server.cuopt_service --ip 0.0.0.0 --port 8000

# Docker
docker run --gpus all -d -p 8000:8000 -e CUOPT_SERVER_PORT=8000 \
  nvidia/cuopt:latest-cuda12.9-py3.13

Verify

curl http://localhost:8000/cuopt/health

Workflow

  1. POST to /cuopt/request → get reqId
  2. Poll /cuopt/solution/{reqId} until solution ready
  3. Parse response

Python client (routing)

import requests, time
SERVER = "http://localhost:8000"
HEADERS = {"Content-Type": "application/json", "CLIENT-VERSION": "custom"}
payload = {
    "cost_matrix_data": {"data": {"0": [[0,10,15],[10,0,12],[15,12,0]]}},
    "travel_time_matrix_data": {"data": {"0": [[0,10,15],[10,0,12],[15,12,0]]}},
    "task_data": {"task_locations": [1, 2], "demand": [[10, 20]], "task_time_windows": [[0,100],[0,100]], "service_times": [5, 5]},
    "fleet_data": {"vehicle_locations": [[0, 0]], "capacities": [[50]], "vehicle_time_windows": [[0, 200]]},
    "solver_config": {"time_limit": 5}
}
r = requests.post(f"{SERVER}/cuopt/request", json=payload, headers=HEADERS)
req_id = r.json()["reqId"]
# Poll: GET /cuopt/solution/{req_id}

Terminology: REST vs Python API

Python APIREST
order_locationstask_locations
set_order_time_windows()task_time_windows
service_timesservice_times

Use travel_time_matrix_data (not transit_time_matrix_data). Capacities: [[50, 50]] not [[50], [50]].

Debugging (422 / payload)

Validation errors: Check field names against OpenAPI (/cuopt.yaml). Common mistakes: transit_time_matrix_data → travel_time_matrix_data; capacities per dimension [[50, 50]] not per vehicle [[50], [50]]. Capture reqId and response body for failed requests.

Runnable assets

Run from each asset directory (server must be running; scripts exit 0 if server unreachable). All use Python requests:

See assets/README.md for overview.

Escalate

For contribution or build-from-source, see the developer skill.

Comments

Markdown supported