// documentation

Integrate physicalai.tools with your chatbot

20-second setup. Pick your chatbot below.

Quickstart (20 seconds)

Five steps. You only really need the first one.

  1. Sign up at /login — email only, no password. We send you a magic link.
  2. Open the dashboard, copy your primary link. It looks like https://mcp.physicalai.tools/mcp/x7k9q2m3…
  3. Paste the link into your chatbot's MCP / tools config (see the per-chatbot guides below).
  4. Open the pairing page in Chrome, Edge, or Bluefy (iOS) — click /pair/{token}, pair your device, leave the tab open.
  5. Chat with your AI — ask it to do things with the device. Round-trip ~200ms.

Claude (Anthropic MCP)

Claude has first-class MCP support. Drop the link in and Claude sees the device as a set of tools.

Steps

  1. Open claude.ai → Settings → ConnectorsAdd custom connector.
  2. Name: physicalai.tools
  3. URL: paste your primary link (e.g. https://mcp.physicalai.tools/mcp/your-token)
  4. Save. Open a new chat. Click the Search and tools icon → enable the new connector.
  5. Ask: "Set my Coyote channel A to 30 for 5 seconds."

Example

// Claude will see these tools automatically:
coyote-v3__set_intensity(channel, level)
coyote-v3__pulse(channel, level, duration_ms)
coyote-v3__wave(channel_a, channel_b, frequency_hz, depth, duration_ms)
coyote-v3__stop()
coyote-v3__device_status()

// And will respond to:
"Edge me on channel A for 30 seconds"
"What's the battery on my Coyote?"
"Stop everything immediately"

Grok (xAI tool calls)

Grok uses the OpenAI tool-calling format. physicalai.tools exposes both /mcp/{token} (Anthropic) and /openai/{token}/schema + /openai/{token}/call.

Quick check — list the tools

curl https://mcp.physicalai.tools/openai/YOUR-TOKEN/schema | jq

Call a tool

curl -X POST https://mcp.physicalai.tools/openai/YOUR-TOKEN/call \
  -H "Content-Type: application/json" \
  -d '{"name": "coyote-v3__set_intensity", "arguments": {"channel": "A", "level": 30}}'

You can wire this into Grok's custom tools by listing the schema URL and the call URL in your Grok config.

ChatGPT (custom GPTs)

ChatGPT custom GPTs support OpenAI function calling. Build a thin "Actions" wrapper:

  1. Create a new GPT → ConfigureActionsCreate new action.
  2. Paste an OpenAPI schema that points to https://api.physicalai.tools/openai/{token}/schema for tool definitions and /call for execution.
  3. Save. Test in the GPT playground.

(Forthcoming: a 1-click "Create GPT" button in the dashboard that auto-generates the action schema for you.)

Direct API (Anthropic MCP JSON-RPC 2.0)

For your own agents and bots, talk to the MCP endpoint directly. It's plain JSON-RPC 2.0:

Initialize

curl -X POST https://mcp.physicalai.tools/mcp/YOUR-TOKEN \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05"}}'

List tools

curl -X POST https://mcp.physicalai.tools/mcp/YOUR-TOKEN \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

Call a tool

curl -X POST https://mcp.physicalai.tools/mcp/YOUR-TOKEN \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"coyote-v3__set_intensity","arguments":{"channel":"A","level":30}}}'

Tool calls fail with a friendly error if no browser is paired. Open the pairing page first.

Pairing in the browser

Once the AI knows about your device, the actual control happens from a browser tab. This is how it works:

  1. Open the pairing page: https://physicalai.tools/pair/{your-token}
  2. The browser shows a Scan for devices button. Click it.
  3. The browser shows its native BLE picker. Pick your device. Pair.
  4. Leave the tab open. Now when your AI calls a tool, the browser writes the bytes to the device.

Browser support

  • Chrome / Edge / Brave / Opera on desktop and Android — full support.
  • iOS Safari — no Web Bluetooth. Use Bluefy (free App Store).
  • Firefox — no Web Bluetooth (yet). Use Chrome for now.

Keep the tab open

Service workers can't reliably hold WebSocket connections (yet). Until they can, the tab must stay open while the AI is using the device. We're working on it.

Troubleshooting

"Browser not connected" when the AI tries to call a tool

Open the pairing page in your browser. The tab needs to be open and on the right URL. You'll see the WebSocket connect in the pairing page's log.

"navigator.bluetooth is undefined" in the pairing page

You're on Firefox or iOS Safari. Switch to Chrome, Edge, or Bluefy (iOS).

Tool call times out

The browser is open but the device didn't respond in 30s. Check: device is on, in range, paired, and not already connected to something else.

"This link has already been used" / "Invalid or expired"

Magic link tokens are one-time. Request a new one from the login page.

More questions?

Ask the LLM: /ask. Or file an issue.