Production Scheduling MCP
A small real production scheduler for AI assistants.
AI assistants can guess production plans; this server gives them a real solver so the plan fits machines, down times and due dates. It is a small, local MCP tool from ArchiPlan.
Why use it
Language models can write plans that look right but break real limits: machines get double-booked, downtime is ignored, and due dates are missed. A model cannot prove the plan works. Constraint solvers do this math well, but usually need code. This server joins them: you talk, the solver plans. OR-Tools CP-SAT is the constraint solver used here, the same kind of solver used in industry.
It is for:
- Small plants planning a few machines and orders
- Job shops and print shops balancing deadlines
- Workshops coordinating shared equipment
- Planners who use Claude, ChatGPT, Cursor, or another MCP client
What it does
It assigns ordered job steps to eligible machines, avoids machine conflicts and downtime, and minimizes priority-weighted lateness before finish time. It returns a plan per machine, late-order reasons, utilization, and a Mermaid Gantt chart. It runs locally over stdio.
Example chat
You: Schedule the sample shop and protect the urgent pump's due date.
Assistant: The urgent pump finishes at 2026-01-05 11:30, before its 13:00 due time. Housing A is late by 1 hour. Reason: “Assembly-1 was busy with Urgent pump until 2026-01-05 11:30 before this step.”
gantt
dateFormat YYYY-MM-DD HH:mm
axisFormat %H:%M
section CNC-1
Flange A step 1 :CNC-1_0, 2026-01-05 08:00, 2026-01-05 10:00
Valve A step 1 :CNC-1_1, 2026-01-05 10:00, 2026-01-05 12:00
Housing B step 1 :CNC-1_2, 2026-01-05 12:00, 2026-01-05 14:30
Flange B step 1 :CNC-1_3, 2026-01-05 14:30, 2026-01-05 16:00
section CNC-2
Urgent pump step 1 :CNC-2_0, 2026-01-05 08:00, 2026-01-05 09:30
Valve B step 1 :CNC-2_1, 2026-01-05 09:30, 2026-01-05 11:00
Bracket B step 1 :CNC-2_2, 2026-01-05 14:00, 2026-01-05 16:00
section CNC-3
Housing A step 1 :CNC-3_0, 2026-01-05 08:00, 2026-01-05 11:00
Panel step 1 :CNC-3_1, 2026-01-05 11:00, 2026-01-05 13:00
Bracket A step 1 :CNC-3_2, 2026-01-05 13:00, 2026-01-05 15:30
section Assembly-1
Urgent pump step 2 :Assembly-1_0, 2026-01-05 09:30, 2026-01-05 11:30
Housing A step 2 :Assembly-1_1, 2026-01-05 11:30, 2026-01-05 13:00
Housing B step 2 :Assembly-1_2, 2026-01-05 14:30, 2026-01-05 15:30
section Assembly-2
Valve B step 2 :Assembly-2_0, 2026-01-05 11:00, 2026-01-05 12:00
Valve A step 2 :Assembly-2_1, 2026-01-05 12:00, 2026-01-05 13:00
Panel step 2 :Assembly-2_2, 2026-01-05 13:00, 2026-01-05 14:30
get_example returns this five-machine, ten-order shop, with CNC-2 down for three hours. It finishes in 8.0 hours.
Set up in one minute
Only uv is needed. uvx fetches the package and a compatible Python interpreter if needed.
Claude Desktop — add under mcpServers in claude_desktop_config.json:
{"mcpServers": {"production-scheduling": {"command": "uvx", "args": ["production-scheduling-mcp"]}}}
Claude Code — run:
claude mcp add --transport stdio production-scheduling -- uvx production-scheduling-mcp
Cursor — add to .cursor/mcp.json:
{"mcpServers": {"production-scheduling": {"command": "uvx", "args": ["production-scheduling-mcp"]}}}
Try asking
- “Schedule these orders to meet due dates. Prioritize the urgent pump.”
- “Which orders will be late, and what machine caused the delay?”
- “What if CNC-2 is down Wednesday morning?” The assistant changes downtime in the input and asks this solver again; there is no separate what-if tool.
Input format
Hours are decimals from plan start; values are rounded to whole minutes. start is an optional ISO datetime for labels (default 2026-01-05T08:00). Steps run in the order supplied and list duration plus eligible machines. Priority defaults to 1; higher values give an order more weight when reducing lateness.
{
"start": "2026-01-05T08:00",
"machines": [{"name": "CNC-1"}, {"name": "CNC-2", "down_times": [[3, 6]]}],
"orders": [{"name": "Urgent pump", "due_hour": 5, "priority": 10, "steps": [{"hours": 1.5, "machines": ["CNC-1", "CNC-2"]}, {"hours": 2, "machines": ["Assembly-1"]}]}]
}
Limits
For small and medium shops. Solve time is capped at about ten seconds. It does not model shifts, labor, inventory, setup times, or every production constraint. Check the result against your shop rules before using it.
Bigger shop? Use ArchiPlan
ArchiPlan adds support for larger plans, saved plans, and team use.
Metadata
Release files for production-scheduling-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| production_scheduling_mcp-0.1.0.tar.gz | 108.8 kB | With provenance | Details for production_scheduling_mcp-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| production_scheduling_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for production_scheduling_mcp-0.1.0-py3-none-any.whl |
Total release size: 117.8 kB
Release files / production_scheduling_mcp-0.1.0.tar.gz
| Download URL | production_scheduling_mcp-0.1.0.tar.gz |
|---|---|
| Size | 108.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1dd1c43258385cef05fc9d225b1210974454daf3c74a34a1788fd72dcaf8d240
|
|
BLAKE2b-256 checksum How to use checksums |
740cdef819f697cb5b289ffaa34f9c547419e8d4d7a6d9f76867be954079806e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logRelease files / production_scheduling_mcp-0.1.0-py3-none-any.whl
| Download URL | production_scheduling_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 9.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4d48d3e305bdd1f1073e4b39437d63678abc801c796dfcabe36ad30bf0a2d28c
|
|
BLAKE2b-256 checksum How to use checksums |
6583c31d9afdaf290d01ae9b2ab0c721a7925e13f2d576914a5de03d7b06e015
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logSecurity for production-scheduling-mcp 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for production_scheduling_mcp-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.