// architecture

One bridge. Two protocols. Zero drivers.

┌────────────────────────────────────────────┐ │ LLM (Grok / Claude / GPT) │ │ "Set channel A to 30 for 5 seconds" │ └──────────┬─────────────────────────────────┘ │ HTTPS + JSON-RPC or OpenAI tool ▼ ┌────────────────────────────────────────────┐ │ mcp.physicalai.tools/{your-token} │ │ FastAPI bridge: │ │ - validates tool call │ │ - looks up your link + device │ │ - forwards to your browser tab │ │ - returns tool result to the LLM │ └──────────┬─────────────────────────────────┘ │ WebSocket (per session) ▼ ┌────────────────────────────────────────────┐ │ Your browser tab (Chrome/Edge/Bluefy) │ │ - Web Bluetooth: pair + control │ │ - Web Serial: serial-over-USB (soon) │ │ - Web USB: low-level USB (soon) │ │ - HTTP: smart-home / wifi devices │ └──────────┬─────────────────────────────────┘ │ BLE GATT / USB / HTTP ▼ ┌────────────────────────────────────────────┐ │ Device (Coyote V3, Lovense, Hue, …) │ └────────────────────────────────────────────┘

The flow in detail

1

Sign up & get a link

Email + password. We mint a high-entropy random token, give you a URL like https://mcp.physicalai.tools/x7k9q2m3.... The token is your auth — guard it like an API key.

2

Open the pairing page on a browser with the device

You visit /pair/{your-token} in Chrome, Edge, or Bluefy (iOS). The browser shows a "Connect" button. You click. Native browser dialog. You pair. The browser tab now holds the open WebSocket to our backend.

⚠ The browser tab must stay open while the AI is using the device. Service workers can't hold WebSockets reliably (yet), so we don't pretend otherwise — we just tell you.

3

Give the link to your chatbot

For Anthropic Claude: paste the URL into the MCP server field. For OpenAI tools / Grok / ChatGPT: there's a slight format dance — we provide a one-line JSON config you paste. For custom GPTs: same.

Now when you ask the AI to "do something with the device", it sees the device as a tool and calls it.

4

The AI calls a tool → browser executes → device moves

Round-trip time: ~150-400ms typically. The AI gets the result back in its context. If no browser is connected when the AI calls, we return a friendly error: "Open the pairing page first."

What it isn't

Not a cloud-connected smart-home hub. Your device never talks to our servers. The browser is the only thing that ever touches the device, and it only does so when you have the tab open.

Not a model host. We don't run the LLM. You bring your own Grok / Claude / GPT subscription. The model calls the URL, the URL calls your browser, the browser calls the device.

Not an account on every device. The LLM doesn't need a device-specific account. You give it the URL, it gets the tool schema, it calls. That's it.

Ready?

Twenty-second signup. One URL. That's the whole product.

Get your link →