Skip to content

MCP/U

Transform any Arduino-compatible MCU into an AI-ready device via the Model Context Protocol.
⚡ by 2edge.co · LGPL-3.0

Self-Describing Firmware

Devices auto-declare their tools via JSON Schema. The client registers tools dynamically — zero hardcoded names.

Universal Transport

Serial, WiFi (TCP), and Bluetooth — one library, one API, any Arduino Stream.

Minimalist Integration

Just add_pin(), add_tool(), begin(). No protocol complexity in your sketch.

Multi-Device Ready

Connect any number of MCUs to a single MCP client. Tools auto-namespaced per device.


┌─────────────────┐ ┌──────────────────────┐ ┌───────────────┐
│ Claude / LLM │◄─MCP──►│ mcpu-client (npm) │◄─────►│ MCU Firmware │
│ │ stdio │ Dynamic tool regist. │ Serial │ McpIot lib │
└─────────────────┘ └──────────────────────┘ /TCP └───────────────┘
  1. Client connects to MCU over Serial or TCP
  2. Calls list_tools — MCU responds with full tool + pin registry (JSON Schema)
  3. Client dynamically registers one MCP tool per MCU tool
  4. Claude can now call any MCU tool by name

#include <McpIot.h>
McpDevice mcp("my-device", "1.0.0");
void setup() {
mcp.add_pin(2, "led", MCP_DIGITAL_OUTPUT, "Onboard LED");
mcp.add_pin(34, "sensor", MCP_ADC_INPUT, "Analog Sensor");
mcp.begin(Serial, 115200);
}
void loop() { mcp.loop(); }

Every device running MCP/U exposes these tools automatically:

ToolDescription
list_toolsDiscovery: tools + pin registry
get_infoDevice name, version, platform
gpio_writeSet digital output HIGH / LOW
gpio_readRead digital level
pwm_writePWM output (duty 0–255)
adc_readRead ADC value (0–4095)

Firmware Guide →

Install the McpIot library and learn the full API. Get started

Client Guide →

Set up the TypeScript MCP client and connect to Claude. Get started