MonitorControlSDK is a .NET 8 toolkit for discovering and controlling compatible professional monitors that advertise SDAP and accept SDCP on the documented ports. It implements SDAP (UDP discovery) and SDCP (TCP control), with optional UDP SDCP paths for VMC-style broadcast where supported.
The repository ships:
MonitorControl.Sdk(NuGet) — class library: framing, transport, VMC / VMS / VMA-oriented clients.monitorctl— command-line tool for discovery, queries, and scripted control.MonitorControl.Web— optional HTTP JSON API, OpenAPI, and small browser UI for integration with other languages and frontends.- Samples and firmware-style examples — runnable .NET samples plus Arduino / ESP32 sketches that use the HTTP API or raw SDCP.
Repository: github.com/andrew867/MonitorControlSDK
License: MIT (Copyright 2026 Andrew Green)
Patch 0.4.1 improves SDCP TCP reliability (length-prefixed reads, V4 header buffer sizing), SDAP discoverability (recommendedControlIPv4 when packet IP is zero), and operator switches for TCP unit plus VMC item B000h / B001h across the SDK, monitorctl, samples, MonitorControl.Web (REST, SSE, WebSocket, static UI), OpenAPI, and docs. See docs/quickstart.md and docs/reference/sdcp-framing-and-items.md.
Minor release 0.4.0 follows Semantic Versioning. Documentation and diagrams now fully reflect ESP32 native TCP SDCP (examples/esp32-sdcp-vmc), the Python gateway SSE vs WebSocket split, corrected Sample.BroadcastControl (TCP REPL only, no UDP), fixed test plan class names, and expanded cross-links across guides and specs. No intentional wire-protocol or public API breaking changes from 0.3.0. Earlier: v0.3.0, v0.2.0, v0.1.2, v0.1.1.
| Resource | Description |
|---|---|
| docs/index.md | Documentation hub: tutorials, opcode references, firmware notes |
| docs/handbook.md | Engineering handbook: protocols, implementation map, surfaces, OpenAPI, safety |
| docs/quickstart.md | Short onboarding: build, discover, first commands |
| openapi/monitorcontrol.openapi.json | Committed OpenAPI 3 spec (regenerate with bash scripts/fetch-openapi.sh) |
| docs/reference/references-parity.md | Map between references/ snapshots and the shipped SDK |
| docs/ci-cd.md | GitHub Actions and GitLab CI/CD setup |
dotnet build MonitorControl.sln -c Release
dotnet test MonitorControl.sln -c Release
dotnet run --project src/MonitorControl.Cli -- discover
dotnet run --project src/MonitorControl.Cli -- vmc --host 192.168.0.10 MODEL
dotnet run --project src/MonitorControl.Cli -- vmc-broadcast --scope all -- STATset BRIGHTNESS 512dotnet run --project src/MonitorControl.Web --urls http://127.0.0.1:5080- UI:
http://127.0.0.1:5080/ - OpenAPI:
http://127.0.0.1:5080/swagger
Optional Python gateway: examples/python-service/README.md.
Full guide: docs/guide/web-api-and-python-gateway.md.
| Path | Contents |
|---|---|
| src/MonitorControlSDK/ | Library packaged as MonitorControl.Sdk on NuGet |
| src/MonitorControl.Web/ | HTTP JSON API, Swagger, browser UI |
| src/MonitorControl.Cli/ | monitorctl CLI |
| examples/python-service/ | Optional Python service in front of the HTTP API |
| examples/arduino-knobs-brightness-contrast/ | ESP32 / ESP8266: analog inputs → brightness / contrast via HTTP |
| examples/esp32-sdcp-vmc/ | ESP32: native TCP SDCP (V3 + item 0xB000), multi-mode knobs — no HTTP gateway; see examples/esp32-sdcp-vmc/README.md |
| scripts/ | OpenAPI fetch / C client generation helpers; openapi/ holds the committed spec |
| samples/ | Runnable .NET samples (including UDP VMC broadcast) |
| docs/ | Protocol and product documentation maintained with the code |
| references/ | Read-only reference snapshots; see parity doc above |
| tests/ | Unit tests |
| docs/plan/00-inventory.md | Source file → responsibility map |
- Changelog: CHANGELOG.md
- Versioning: Git tags of the form
vMAJOR.MINOR.PATCH; package version is set insrc/MonitorControlSDK/MonitorControlSDK.csproj. - NuGet: MonitorControl.Sdk (when published for a given tag).
- Automation: docs/ci-cd.md describes GitHub Actions (build matrix, releases, GitHub Packages, optional NuGet.org) and GitLab CI for self-hosted runners.
docs/READY-TO-PUSH.md — remotes, HTTPS, and pre-push checks.
Protocol documentation is provided for interoperability. Trademarks belong to their owners. Confirm behavior on your hardware and firmware before production or field deployment; obtain appropriate legal review where needed.