FMCPServer is an MCP (Model Context Protocol) server that allows AI assistants (e.g. Claude) to control FUG-connected devices via the FUG API.
Run the following command, replacing <URL> with the server URL for your environment:
claude mcp add --transport http fmcp <URL>
To scope it to a specific project only:
claude mcp add --transport http --scope project fmcp <URL>
Reference: Claude Code MCP documentation
FMCPServer uses the streamable-http transport, which is supported by most modern MCP clients. Below are popular options beyond Claude:
| Client | Type | MCP Setup Guide |
|---|---|---|
| Cursor | AI code editor | docs.cursor.com/context/model-context-protocol |
| Windsurf | Agentic IDE | docs.windsurf.com |
| VS Code (GitHub Copilot) | Code editor | code.visualstudio.com/docs/copilot/customization/mcp-servers |
| Cline | VS Code agent | docs.cline.bot/mcp/configuring-mcp-servers |
| Continue | Open-source code assistant | docs.continue.dev/customize/deep-dives/mcp |
| Gemini CLI | Google’s terminal agent | geminicli.com/docs/tools/mcp-server |
| Zed | High-performance code editor | zed.dev/docs/ai/mcp |
| ChatGPT | OpenAI assistant | help.openai.com |
| Replit | Cloud IDE agent | docs.replit.com/replitai/mcp/overview |
For a full list of MCP-compatible clients, see the official MCP clients page.
The general pattern for adding a remote HTTP MCP server is the same across most clients — provide the server URL and select streamable-http (or http) as the transport.
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"fmcp": {
"type": "streamable-http",
"url": "<URL>"
}
}
}
Reference: MCP quickstart for users
The server is available in three environments:
| Environment | MCP Server |
|---|---|
| Staging | https://fmcp-server-stg.feelme.com/mcp |
| Production | https://fmcp-server-prd.feelme.com/mcp |
All tools require a Device Connection Key (DCK) passed as the dck parameter. The DCK authenticates requests to the FUG API.
helloSay hello to someone. Useful for verifying the server is reachable.
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Name to greet |
Example:
hello(name="Alice")
→ "Hello, Alice!"
get_device_statusGet the status of all devices in the group.
| Parameter | Type | Required | Description |
|---|---|---|---|
dck |
string | Yes | Device Connection Key |
Example:
get_device_status(dck="YOUR_DCK")
send_command_to_devicesSend a movement or control command to FUG-connected devices.
| Parameter | Type | Required | Description |
|---|---|---|---|
dck |
string | Yes | Device Connection Key |
command_type |
enum | Yes | One of: MOVEMENT, MOVEMENT_BETWEEN, PAUSE, RAW |
arguments |
object | Yes | Command parameters (see below) |
command_duration_ms |
integer | No | Duration in milliseconds; omit to use device defaults |
arguments fields by command_typecommand_type |
Field | Type | Description |
|---|---|---|---|
MOVEMENT |
position |
integer | Target position |
MOVEMENT |
speed |
integer | Movement speed |
MOVEMENT_BETWEEN |
min_position |
integer | Minimum position |
MOVEMENT_BETWEEN |
max_position |
integer | Maximum position |
MOVEMENT_BETWEEN |
speed |
integer | Movement speed |
PAUSE |
(none) | — | No arguments needed |
RAW |
raw_data |
string | Raw byte payload e.g. 0x01 0x02 0xFF |
Examples:
send_command_to_devices(dck="YOUR_DCK", command_type="PAUSE", arguments={})
send_command_to_devices(dck="YOUR_DCK", command_type="MOVEMENT", arguments={"position": 80, "speed": 10})
send_command_to_devices(dck="YOUR_DCK", command_type="MOVEMENT_BETWEEN", arguments={"min_position": 20, "max_position": 80, "speed": 5})
send_setup_to_deviceApply configuration parameters to a FUG-connected device.
| Parameter | Type | Required | Description |
|---|---|---|---|
dck |
string | Yes | Device Connection Key |
setup_type |
enum | Yes | One of: speed_intensity_adjustment, range_intensity_adjustment, status_update_interval |
arguments |
object | Yes | Configuration parameters (see below) |
arguments fields by setup_typesetup_type |
Field | Type | Description |
|---|---|---|---|
speed_intensity_adjustment |
intensity |
integer | Intensity percentage (0–100) |
range_intensity_adjustment |
intensity |
integer | Intensity percentage (0–100) |
status_update_interval |
interval |
integer | Interval in milliseconds |
Examples:
send_setup_to_device(dck="YOUR_DCK", setup_type="speed_intensity_adjustment", arguments={"intensity": 75})
send_setup_to_device(dck="YOUR_DCK", setup_type="status_update_interval", arguments={"interval": 1000})
send_reprovision_command_to_deviceSend a reprovisioning command to a FUG-connected device. Used for device lifecycle operations.
| Parameter | Type | Required | Description |
|---|---|---|---|
dck |
string | Yes | Device Connection Key |
reprovision_type |
enum | Yes | One of: bt_mode, reset_credentials |
arguments |
object | Yes | Pass empty {} |
reprovision_type values| Value | Description |
|---|---|
bt_mode |
Puts the device into Bluetooth pairing/advertising mode |
reset_credentials |
Wipes device credentials and returns to factory state |
Examples:
send_reprovision_command_to_device(dck="YOUR_DCK", reprovision_type="bt_mode", arguments={})
send_reprovision_command_to_device(dck="YOUR_DCK", reprovision_type="reset_credentials", arguments={})
Once FMCPServer is connected, you can use natural language to control devices. Below are example prompts:
Check device status:
“Using DCK
YOUR_DCK, get the status of all connected devices.”
Pause all devices:
“Send a pause command to all devices using DCK
YOUR_DCK.”
Move a device to a position:
“Move the device to position 80 at speed 10 using DCK
YOUR_DCK.”
Oscillate a device between positions:
“Make the device oscillate between position 20 and 80 at speed 5 using DCK
YOUR_DCK. Run it for 5 seconds.”
Adjust intensity:
“Set the speed intensity to 60% for device with DCK
YOUR_DCK.”
Put device into Bluetooth pairing mode:
“Put the device with DCK
YOUR_DCKinto Bluetooth pairing mode.”
Factory reset a device:
“Reset the credentials for the device with DCK
YOUR_DCK.”