{"name":"io.github.Lukasz-Juranek/usb-servo-controller","slug":"lukasz-juranek-usb-servo-controller","title":"USB Servo Controller","description":"Drive 12 hobby servos on an open-hardware USB-C controller: moves, poses, sequences, rail current","url":"https://mcp.market/server/lukasz-juranek-usb-servo-controller","rating":null,"grade":"A","score":89,"certified":false,"status":"active","category":"productivity","tags":["productivity"],"presence":{"score":29,"stars":0,"forks":0,"downloads_week":185,"last_push_at":"2026-10-23T11:23:27.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/ucandevices/UsbServoController","website":"https://ucandevices.github.io/servo.html","version":"0.4.1","remotes":[],"packages":[{"registryType":"pypi","identifier":"ucan-servo-mcp","version":"0.4.1","runtimeHint":"uvx","transport":{"type":"stdio"},"packageArguments":[{"description":"Serial port of the board, e.g. COM5 or /dev/ttyACM0. Auto-detected when omitted.","format":"string","type":"named","name":"--port"},{"description":"Path to servogui.json from the GUI: channel names, travel limits, poses and sequences.","format":"filepath","type":"named","name":"--config"}]}],"tools":[{"name":"board_status","description":"Rail current/voltage, faults, protection limits, and every channel's name, mode, travel limits, speed and current position (0 = off).","write_action":false,"price_micros":0,"input_schema":null},{"name":"clear_faults","description":"Clear a latched overcurrent/undervoltage fault so channels can move again.","write_action":false,"price_micros":0,"input_schema":null},{"name":"disable_servos","description":"Stop driving the given channels (numbers or names); the servos go limp.","write_action":false,"price_micros":0,"input_schema":null},{"name":"go_to_pose","description":"Move to a saved pose (see list_poses) and wait until it arrives.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_poses","description":"Poses and the sequence saved from the GUI (servogui.json).","write_action":false,"price_micros":0,"input_schema":null},{"name":"measure_current","description":"Sample the servo-rail current continuously; returns peak, mean and min mA.","write_action":false,"price_micros":0,"input_schema":null},{"name":"move_servos","description":"Move one or more servos and wait until they arrive.","write_action":false,"price_micros":0,"input_schema":null},{"name":"play_sequence","description":"Play the GUI's saved sequence of poses (move and hold times as saved), repeated `loops` times. Stops early on a fault; capped at 120 s.","write_action":false,"price_micros":0,"input_schema":null},{"name":"read_analog","description":"Read channel 0-7 as an analog input (0-4095 counts, 0-3.3 V).","write_action":false,"price_micros":0,"input_schema":null},{"name":"release_port","description":"Close the serial port now (servos keep holding) so the GUI or flash.py can use the board. It reopens automatically on the next tool call.","write_action":false,"price_micros":0,"input_schema":null},{"name":"run_script","description":"Start the stored script from the top.","write_action":true,"price_micros":0,"input_schema":null},{"name":"script_status","description":"What script is stored on the board, and whether it is running.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_protection","description":"Set the rail trip limits (0 disables either). Overcurrent is capped at 7500 mA: the board's continuous budget is ~5 A. Resets at power-up.","write_action":false,"price_micros":0,"input_schema":null},{"name":"stop_all","description":"Panic stop: every channel off immediately.","write_action":false,"price_micros":0,"input_schema":null},{"name":"stop_script","description":"Stop the stored script; servos keep their positions (stop_all to let go).","write_action":false,"price_micros":0,"input_schema":null},{"name":"upload_script","description":"Compile a servo script and store it in the board's flash, where the firmware runs it without a PC (autorun: also start at every power-up).","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":89,"grade":"A","scanned_at":"2026-10-24T16:17:27.058Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-24T16:17:27.013Z","components":{"code":{"score":25,"max":25,"notes":["5 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":6,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"ucan-servo-mcp","version":"0.4.1","found":true,"weeklyDownloads":185,"license":"MIT","dependencyCount":2,"publishedAt":"2026-10-23T11:20:06.335021Z","repositoryUrl":"https://github.com/ucandevices/UsbServoController"}],"repo":{"found":true,"owner":"ucandevices","repo":"UsbServoController","archived":false,"pushedAt":"2026-10-23T11:23:27Z","stars":0,"forks":0,"openIssues":0,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/30460058?v=4","ownerCreatedAt":"2017-07-26T06:49:36Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/30460058?v=4&s=128","source":"github"},"presence":{"stars":0,"forks":0,"downloadsWeek":185,"license":"MIT","lastPushAt":"2026-10-23T11:23:27.000Z","score":29}}}},"grade_history":[],"reviews":[]}