mcpbeat

Cuopt Server API Python

nvidia/cuopt-server-api-python

cuOpt REST server — start server, endpoints, Python/curl client examples. Use when the user is deploying or calling the REST API.

9k tokens
context cost
the whole folder, loaded on every use
16
files
ships runnable scripts
0
copies elsewhere
how many repositories repackaged it
999
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/NVIDIA/skills --skill cuopt-server-api-python

What comes with it

31 749 bytes besides the instruction
BENCHMARK.md
assets/README.md
assets/lp_basic/README.md
assets/lp_basic/client.py
assets/milp_basic/README.md
assets/milp_basic/client.py
assets/pdp_basic/README.md
assets/pdp_basic/client.py
assets/vrp_basic/README.md
assets/vrp_basic/client.py
assets/vrp_simple/README.md
assets/vrp_simple/client.py
evals/evals.json
skill-card.md
skill.oms.sig

The instruction itself

11 sections, as written by the author

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).

Problem types supported

| Problem type | Supported |

|--------------|:---------:|

| Routing | ✓ |

| LP | ✓ |

| MILP | ✓ |

| QP | ✗ |

Required questions

Ask these if not already clear:

  • Problem type — Routing or LP/MILP? (QP not available via REST.)
  • Deployment — Local, Docker, Kubernetes, or cloud?
  • Client — Which language or tool will call the API (e.g. Python, curl, another service)?

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

  • POST to /cuopt/request → get reqId
  • Poll /cuopt/solution/{reqId} until solution ready
  • 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 API | REST |

|------------|------|

| order_locations | task_locations |

| set_order_time_windows() | task_time_windows |

| service_times | service_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_datatravel_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:

  • assets/vrp_simple/ — Basic VRP (no time windows)
  • assets/vrp_basic/ — VRP with time windows
  • assets/pdp_basic/ — Pickup and delivery
  • assets/lp_basic/ — LP via REST (CSR format)
  • assets/milp_basic/ — MILP via REST

See assets/README.md for overview.

Escalate

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

How to use it

Copy the folder

Take nvidia/cuopt-server-api-python from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.

Install what it needs

The instructions reference docker. Without those the skill loads but fails at the first command.