Community-driven voice tools for CAAL - the voice assistant that actually does things. Part of the CAAL Tool API.
This registry contains voice-first n8n workflows that extend CAAL's capabilities. Unlike generic n8n templates, these are optimized for:
- Voice triggers (how you'd actually say it)
- Low latency (< 5 second responses)
- Conversational responses (not raw JSON)
- One-click installation
Have CAAL installed? Browse and install tools directly in your CAAL web interface.
Exploring before installing CAAL? Browse by category below:
| Category | Tools |
|---|---|
| Smart Home | Home Assistant, lights, climate, security |
| Media | Plex, Jellyfin, Jellyseerr, Sonarr, Radarr |
| Homelab | TrueNAS, Docker, Proxmox, Unraid, PiHole |
| Productivity | Calendar, tasks, email, notes |
| Developer | GitHub, GitLab, CI/CD, code tools |
| Utilities | Weather, timers, reminders |
| Sports | ESPN, fantasy sports, scores, standings |
| Social | Discord, Slack, Reddit, Telegram |
| Other | Everything else |
- Open your CAAL web interface
- Browse the Tool Registry
- Click Install on any tool
- Follow the setup prompts (credentials, service URLs)
- CAAL auto-refreshes — start using your new tool immediately
- Download the
workflow.jsonfrom the tool's folder - Import into n8n (Settings > Import from File)
- Create required credentials (listed in the tool's README)
- Update any service URLs
- Activate the workflow
- Tell CAAL to refresh:
curl -X POST http://localhost:8889/reload-tools
Single-purpose tools that do one thing well.
- Named:
service_action_object(e.g.,truenas_get_status) - One workflow, one action
Multi-action tools that group related functionality.
- Named:
service(e.g.,google_tasks,truenas) - One workflow, multiple actions via Switch node
- Actions like: get, add, complete, delete, control
Example: google_tasks suite handles:
- "What's on my task list?" →
action: get - "Add task buy groceries" →
action: add - "Mark done the groceries task" →
action: complete
Each tool has a manifest.json:
{
"id": "unique-registry-id",
"name": "google_tasks",
"friendlyName": "Google Tasks",
"version": "1.0.0",
"description": "Manage Google Tasks - get, add, complete, and delete tasks.",
"category": "productivity",
"toolSuite": true,
"actions": ["get", "add", "complete", "delete"],
"icon": "google_tasks.svg",
"voice_triggers": [
"What's on my task list?",
"Add task buy groceries"
],
"required_services": ["google tasks"],
"required_credentials": [...],
"required_variables": [...],
"author": { "github": "username" },
"tier": "community",
"tags": ["productivity", "google"]
}Suite-specific fields:
toolSuite:truefor suites,falsefor individual toolsactions: Array of available actions (suites only)friendlyName: Human-readable display nameicon: Optional icon filename (see/icons/)
We need tools! See CONTRIBUTING.md for how to submit your own.
Want a tool that doesn't exist? Request it!
| Tier | Badge | Meaning |
|---|---|---|
| Verified | Gold | Reviewed + tested + proven |
| Community | Silver | Passed automated review |
| Experimental | Warning | New submission |
CAAL can query this registry directly:
import httpx
REGISTRY_INDEX = "https://registry.caal.io/index.json"
async def search_registry(query: str) -> list[dict]:
async with httpx.AsyncClient() as client:
resp = await client.get(REGISTRY_INDEX)
tools = resp.json()
query_lower = query.lower()
return [t for t in tools if query_lower in t['name'] or query_lower in t['description'].lower()]CAAL Tool Registry License v1.0 — Free for personal use. Contributors retain ownership of their tools. See LICENSE for full terms.