Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Drive 12 hobby servos on an open-hardware USB-C controller: moves, poses, sequences, rail current
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"usb-servo-controller": {
"command": "uvx",
"args": [
"ucan-servo-mcp"
]
}
}
}在终端中运行这条命令
claude mcp add usb-servo-controller -- uvx ucan-servo-mcp粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"usb-servo-controller": {
"command": "uvx",
"args": [
"ucan-servo-mcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"usb-servo-controller": {
"type": "stdio",
"command": "uvx",
"args": [
"ucan-servo-mcp"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日
发布者(Lukasz-Juranek)不是仓库所有者(ucandevices);可能是其他人代为上架的
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 0 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.4.1)于15天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。
同一分类中有:Spec Driven Development, Remote Desktop Commander, NexusWindows
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Windows computer use in the background: desktop apps driven without your mouse or keyboard.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
12-channel USB-C servo controller, Pololu Maestro compatible, with an MCP server so AI agents (Claude, etc.) can drive servos. $18 on [Tindie](https://www.tindie.com/products/lll7/usb-servo-controller-12-channels-usb-c/) · [product page](https://ucandevices.github.io/servo.html).
▶ 2-minute video: wiring, current monitoring, GUI and the controller driving a real MG995
Open-source alternative to the Pololu Mini Maestro 12 that speaks the Maestro serial protocols, so Maestro libraries work unchanged — plus USB-C, servo-rail current and voltage sensing, on-board scripts. Built for JLCPCB turnkey assembly, ≈ $4.43 per board at 100 units against $29.95 for the Maestro.
| MCU | WCH CH32V203C8T6, RISC-V 96 MHz, LQFP-48 |
| Channels | 12 hardware PWM, 50 Hz, 0.5 µs; travel limits per channel (64–4080 µs, 500–2500 default); analog input on 0–7 |
| Host interface | USB-C, CDC serial (no driver); ASCII protocol and the Pololu Maestro Compact / Pololu / Mini SSC protocols |
| Servo power | separate rail on a 5.08 mm screw terminal, 5–13.2 V full function, ~5 A total |
| Sensing | rail current (5 mΩ + INA180A2) and voltage (÷4), overcurrent / LiPo undervoltage cut-off |
| PCB | 66 × 38 mm, 2 layers, all parts top side, 4 × M3 |
| Status | first board verified on hardware 2026-09-28 — selftest.py --rail --move 58/58; channels 1–11 not yet driven with a real servo |
| Document | For |
|---|---|
USER.md | using the board: wiring, power, tools, command reference, flashing |
tools/README.md | host tools: library, CLI, GUI, scripts, MCP server, release builds |
| this file | design: why each choice, BOM and cost, limitations, what is left before fab |
tools/servo_mcp.py is an MCP server that lets an AI agent move servos, run poses and sequences, and read rail current/voltage, with guardrails: per-channel limits, ramped moves, overcurrent stop. pip install -r tools/requirements.txt, then:
Claude Code
claude mcp add servo -- python /path/to/UsbServoController/tools/servo_mcp.py
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": { "servo": { "command": "python", "args": ["/path/to/UsbServoController/tools/servo_mcp.py"] } } }
Add "--port", "COM5" to pick a port, or "--mock" to try it without hardware. Close the GUI first: only one program can hold the serial port.
The server is also on PyPI, so any MCP client can run it without cloning the repo: command uvx, args ["ucan-servo-mcp"] (plus --config path/to/servogui.json to use the limits, poses and sequences saved by the GUI).
pip install -r tools/requirements.txt
python tools/servogui.py # GUI (or --mock with no hardware) python tools/servoctl.py set 0 1500 # CLI cd embedded-ch32 && make flash # build + flash over USB, ~3 s, no jumper
Downloads: firmware images and the prebuilt GUI for Windows and Linux are on the Releases page. To build the GUI yourself: python tools/build_release.py → tools/dist/.
The hard requirement was a USB bootloader in ROM, so a blank chip can be flashed over USB-C with no programmer. That rules out the STM32F103 the design started on (USART-only bootloader). Of LQFP-48 parts that have one and are stocked at JLCPCB:
| Candidate | USB boot on blank chip | Stock | $@100 |
|---|---|---|---|
| CH32V203C8T6 (chosen) | ✅ | 8,643 | 0.877 |
| CH32X035C8T6 / CH32F203C8T6 | ✅ | ~500 | 0.72 / 1.02 |
| AT32F415CBT7 | ✅ | 10,518 | 1.319 |
| STM32F072C8T6 | ✅ | 2,945 | 2.495 |
Cheapest part with real inventory, a third the price of the STM32F072, and pin-compatible with the STM32F103 layout (32 of 33 connected pins identical).
Costs of the choice:
U4 INA180A2 (Kelvin across R18) ─► PA5 I_SENSE
J2 Servo V+ ── R18 5mΩ ──┬────────► servo header V+ rail (unfused) (VSRV_RAW) ├─ R19..R22 ÷4 ─► PA4 V_SENSE └─ JP1 ──D2──┐ ├─► HT7533-1 ─► 3V3 ─► CH32V203, LED USB-C VBUS 5V ─────────────D1──────────┘ GND: one continuous plane, common to both supplies
VSRV=VIN block.| Ch | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Pin | PA0 | PA1 | PA2 | PA3 | PA6 | PA7 | PB0 | PB1 | PA8 | PA9 | PA10 | PB8 |
| Timer | T2C1 | T2C2 | T2C3 | T2C4 | T3C1 | T3C2 | T3C3 | T3C4 | T1C1 | T1C2 | T1C3 | T4C3 |
| Analog | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — | — | — | — |
Reserved: PA4/PA5 rail sensing · PA11/PA12 USB · PA13/PA14 SDI · PD0/PD1 crystal · PC13 LED · PB2 BOOT1. LQFP-48 has only 10 ADC pins, and PA4/PA5 went to sensing, so analog is 8 of 12 — the Maestro 12 has all twelve.
| Current (R18 + U4) | Voltage (R19–R22) | |
|---|---|---|
| Parts | 5 mΩ 1 W shunt, INA180A2 gain 50, high side | 4 × 5.1 kΩ, ÷4, 100 nF |
| Full scale | 13.2 A | 13.2 V |
| Resolution | ≈ 3.2 mA | ≈ 3.2 mV |
High side keeps the ground plane unbroken. It measures total rail current, not per channel. The ADC reference is VDDA = the LDO output (no VREF+ on LQFP-48), so readings are good for thresholds, not calibrated metering. The firmware trips all channels off after 5 bad readings (~50 ms): 5 A default overcurrent, and undervoltage chosen automatically (2S → 6.4 V, 3S → 9.6 V, anything else off). Details in USER.md §4.4.
| Limit | Set by | Value |
|---|---|---|
| Absolute max on J2 | C15/C16, 16 V electrolytics | 16 V |
| Full function (voltage sense) | ÷4 divider | 13.2 V |
| Continuous current | 2.4 mm pour between header rows | ~5 A (6.1 A at 20 °C rise) |
The 24 A terminal is not the limit; the copper behind it is.
2 × 1 oz, 1.6 mm, 0.2 mm min trace/space, 0.3/0.6 mm vias. GND is a solid pour on both layers; SERVO_V+ is carried by three priority-ordered top-layer zones. Headers along the bottom edge, USB-C right, screw terminal left, MCU centre.
⚠️ F8 (Update PCB from Schematic) deletes H1–H4 — they have no schematic
symbol. Untick *Delete footprints with no symbols*, or re-add them at
(16, 4), (61.5, 4), (16, 33), (61.5, 33).
⚠️ HT7533-1 is not pin-compatible with the AMS1117 it replaced (SOT-89:
GND / VIN+tab / VOUT). The tab is VIN.
Class: B Basic · P Preferred (both fee-free) · E Extended ($3.07 feeder fee if SMT).
| Ref | Part | LCSC | Class | Qty | $/board |
|---|---|---|---|---|---|
| U1 | CH32V203C8T6, LQFP-48 | C3001172 | E | 1 | 0.8770 |
| U2 | HT7533-1, SOT-89-3 | C14289 | B | 1 | 0.1430 |
| U3 | SRV05-4 ESD, SOT-23-6 | C558418 | E | 1 | 0.0270 |
| U4 | INA180A2, SOT-23-5 | C192764 | E | 1 | 0.1920 |
| J1 | USB-C 16P TYPE-C-31-M-12 | C165948 | E | 1 | 0.1860 |
| J2 | Screw terminal 5.08 mm 2P | C474952 | E (THT) | 1 | 0.1920 |
| J3–J8 | Pin header 1×6 2.54 mm | C37208 | E (THT) | 6 | 0.2520 |
| JP1, JP2 | Pin header 1×2 2.54 mm | C358684 | E (THT) | 2 | 0.0180 |
| Y1 | Crystal 8 MHz SMD5032 | C115962 | B | 1 | 0.2450 |
| D1–D2 | B5819W, SOD-123 | C7420330 | P | 2 | 0.0340 |
| D3 | LED red 0603 | C2286 | B | 1 | 0.0070 |
| R1–R13 | 220 Ω 0603 (servo series + LED) | C22962 | B | 13 | 0.0650 |
| R14–R17, R19–R22 | 5.1 kΩ 0603 | C23186 | B | 8 | 0.0160 |
| R18 | 5 mΩ 1 W shunt, 1206 | C7419996 | E | 1 | 0.0370 |
| C1–C8, C17–C18 | 100 nF 0603 X7R | C14663 | B | 10 | 0.1200 |
| C9–C11 | 10 µF 0603 X5R | C19702 | B | 3 | 0.0960 |
| C12 | 1 µF 0603 | C15849 | B | 1 | 0.0170 |
| C13–C14 | 30 pF 0603 C0G | C1658 | B | 2 | 0.0160 |
| C15–C16 | 470 µF 16 V electrolytic | C46550400 | E | 2 | 0.2140 |
| 58 | $2.7540 |
J9 (SDI) is not fitted. Shunt caps (C100114, two per board) cannot be fitted by JLCPCB — order them loose, ≈ $1.80 per 100.
| 100 units | Total | Per board |
|---|---|---|
| Components | $275.40 | $2.754 |
| Assembly: setup $8.18, stencil $1.53, SMT 167 joints $26.72, THT 42 joints $68.88 + $3.58, 6 feeder fees $18.42 | $127.31 | $1.273 |
| PCB fabrication (est.) | ~$40 | ~$0.40 |
| Total | ≈ $443 | ≈ $4.43 |
Excludes shipping and duties. Prices are LCSC qty-100; stock checked 2026-09-19/20 (CH32V203 the thinnest at 8,643) — re-verify before ordering.
What drives cost:
embedded-ch32/)RISC-V, WCH ch32v20x HAL and USB device library, xPack riscv-none-elf-gcc 15.2 (make GCC_PATH=... to override). Version USBServoController 0.4.
| Flash region | Address | Size | Contents |
|---|---|---|---|
| Bootloader | 0x0000 | 12 KB | own USB CDC bootloader (bootloader/) |
| Application | 0x3000 | 48 KB | servo firmware |
| Script | 0xF000 | 2 KB | stored board script |
| Settings | 0xF800 | 256 B used | travel limits, Maestro speed/accel (User/settings.c, W) |
Layout lives in User/flash_layout.h and both Link.ld files.
make # build/USBServoController-ch32.{elf,hex,bin}
make flash # BOOT command -> bootloader -> write, CRC-32 check, restart (~3 s) make hosttest # on the PC: sense.c protection (21 supply scenarios), maestro.c protocol, ramps and limits (11) python tools/verify_pinmap_ch32.py # schematic <-> pin table <-> firmware
Blank chip or recovery: make full, fit JP2, plug in USB, wchisp flash build/USBServoController-ch32-full.bin, remove JP2, replug. Jumping to the ROM bootloader from firmware does not work on this chip (tested), which is why the board has its own.
Timing: 96 MHz timers, PSC 47 → 0.5 µs ticks, ARR 39999 → 20 ms frame. 0.25 µs would need a 4 MHz tick, which only fits 16 bits at ≥ 100 Hz.
Protocol: one ASCII c
只显示了开头部分;其余内容请在仓库中阅读