Build your own integration
Create a custom MCP server and connect it to VoiceOS in 3 steps.
Install dependencies
pip install mcp
git npm install @modelcontextprotocol/sdk zod
Create your server
An MCP server exposes tools that VoiceOS can call by voice. Pick an example to start from:
- Quick Start
- Home Control
- Spotify
- System Control
Example 1: Home Control
A minimal MCP server with one tool. The fastest way to understand the pattern.
Control HomeKit devices via Apple Shortcuts. Say "turn off the lights" or "set thermostat to 72".
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("my-tools")
@mcp.tool()
def greet(name: str) -> str:
"""Say hello to someone by name."""
return f"Hello, {name}!"
if __name__ == "__main__":
mcp.run(transport="stdio")
Example 2: Control Spotify
import subprocess
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("spotify")
def osascript(cmd: str) -> str:
result = subprocess.run(
["osascript", "-e", f'tell application "Spotify" to {cmd}"],
capture_output=True, text=True,
)
return result.stdout.strip() or "Done"
@mcp.tool()
def play() -> str:
"""Resume Spotify playback."""
return osascript("play")
if __name__ == "__main__":
mcp.run(transport="stdio")
Example 3: System Control
import subprocess
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("system-control")
def osascript(script: str) -> str:
result = subprocess.run(
["osascript", "-e", script],
capture_output=True, text=True,
)
return result.stdout.strip() or "Done"
@mcp.tool()
def set_volume(level: int) -> str:
"""Set the system volume (0-100)."""
return osascript(f"set volume output volume {level}")
if __name__ == "__main__":
mcp.run(transport="stdio")
Connect to VoiceOS
Open VoiceOS, go to Settings → Integrations → Custom Integrations, click Add, give it a name, and set the launch command to:
python3 /path/to/my_mcp_server.py
npx tsx /path/to/my-mcp-server.ts
python3 /path/to/home_control.py
npx tsx /path/to/home-control.ts
python3 /path/to/spotify_mcp.py
npx tsx /path/to/spotify-mcp.ts
python3 /path/to/system_control.py
npx tsx /path/to/system-control.ts
Replace /path/to/ with the actual path to your file.