VirtMCU is an MCP server. Connect the agent you already use — Claude Code, Cursor, any MCP client — and ask it to write, compile, run, and debug firmware on a deterministic virtual microcontroller. No board, no toolchain, no debugger.
You hand your agent the key and a goal. It does the rest — here, catching a CAN bit-timing bug on a virtual NXP S32K344, at the register level, in one pass:
Illustrative — the tools shown (list_nodes, upload_firmware, run_until, read_link, read_registers, read_fault, read_console) are the real MCP surface your agent drives.
Generate an API key on your dashboard and export it as VIRTMCU_API_KEY.
Create a session and connect your agent to it:
# 1. Create a session with your key (returns an mcp_url)
curl -s -X POST https://api.virtmcu.com/v1/sessions \
-H "Authorization: Bearer $VIRTMCU_API_KEY" \
-H "Content-Type: application/json" \
-d '{"world":"st_usart_pair"}'
# -> {"session_id":"…","mcp_url":"<MCP_URL>","expires_at":"…"}
# 2. Point Claude Code at that session
claude mcp add --transport http virtmcu "<MCP_URL>" \
--header "Authorization: Bearer $VIRTMCU_API_KEY"// .cursor/mcp.json — paste the mcp_url from step 1
{
"mcpServers": {
"virtmcu": {
"url": "<MCP_URL>",
"headers": { "Authorization": "Bearer YOUR_VIRTMCU_KEY" }
}
}
}The session's mcp_url is bearer-protected and scoped to keys you own — only your agent can drive it.