Firmata Client Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Firmata Client Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
An MCP (Model Context Protocol) server that lets an LLM control an Arduino's GPIO over the Firmata protocol.
Built on FastMCP and the firmata-client library. It exposes digital/analog I/O, PWM, and basic servo control as MCP tools so an agent can read sensors and drive actuators on a connected board.
⚠️ This server lets an AI agent drive physical hardware. Please read the Safety section before connecting a board.
firmata-client dependency)(File → Examples → Firmata → StandardFirmata in the Arduino IDE)
mcp[cli]firmata-clientpyserial (installed with firmata-client)pydantic (installed with mcp)Using uv (recommended):
uv pip install firmata-client-mcpOr via pip:
pip install firmata-client-mcpOr from source:
git clone https://github.com/NaoNaoMe/firmata-client-mcp.git
cd firmata-client-mcp
uv syncAdd the server to your claude_desktop_config.json:
{
"mcpServers": {
"firmata-client-mcp": {
"command": "uvx",
"args": [
"firmata-client-mcp"
]
}
}
}A typical first interaction:
arduino_list_ports - find your board's serial portarduino_connect - connect using that portarduino_get_board_info - inspect supported modes per pinarduino_set_pin_mode - configure a pin (e.g. pin 13 -> OUTPUT)arduino_digital_write - turn it on| Tool | Description | Read-only |
|---|---|---|
arduino_list_ports | List available serial ports | ✅ |
arduino_connect | Connect to a board on a given port | |
arduino_disconnect | Disconnect from the current board | |
arduino_get_board_info | Firmware info and per-pin capabilities | ✅ |
arduino_set_pin_mode | Set a pin to INPUT/OUTPUT/ANALOG/PWM/SERVO | |
arduino_digital_write | Set a digital pin HIGH/LOW | |
arduino_digital_read | Read a digital pin (majority of 5 samples) | ✅ |
arduino_analog_write | Write a PWM value (0-255) | |
arduino_analog_read | Read an analog channel (averaged) | ✅ |
arduino_set_servo_origin | Register the current angle as a reference | |
arduino_servo_move | Move a servo to an angle offset from origin |
arduino_analog_read takes an analog channel number (0 = A0, 1 = A1, …), but arduino_set_pin_mode expects the digital pin number. Use the analog_mapping returned by arduino_get_board_info to translate between them.
arduino_servo_move moves the servo to origin + value degrees (clamped to 0-180), where origin is whatever you registered with arduino_set_servo_origin (default 0). The move is relative to the origin, not cumulative - calling it twice with the same value results in the same physical position.
This server gives an autonomous agent direct control of electrical outputs and moving parts. Before use:
verify current limits, and mechanical end-stops yourself.
mode change is undefined and hardware-dependent.
Use at your own risk.
intended for local stdio use).
the actual valid range depends on your board.
This project is licensed under the MIT License - see the LICENSE file for details.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.