I have been running ASL3 on a Raspberry Pi 4B for my node, 637050, KJ5IRQ. I wanted a cleaner way to monitor and control the node from automation tools without having to write raw AMI clients or scrape command-line output.
I ended up building two open source projects for that use case.
ASL3-API
https://github.com/KJ5IRQ/asl3-api
ASL3-API is a FastAPI REST interface that runs on the ASL3 node itself as a systemd service. It wraps Asterisk Manager Interface actions behind normal HTTP/JSON endpoints.
Current features include:
-
API key authentication
-
Rate limiting on control endpoints
-
Startup configuration validation
-
Local in-memory AllStar node cache for callsign and location lookup
-
Cache refresh every 15 minutes
-
Interactive API docs at
/docs -
Audit log for recent control actions
-
Live RX/TX keyed state through Server-Sent Events
It currently exposes 18 endpoints covering:
-
Node status
-
Connected nodes
-
Connected node enrichment with callsign and location
-
Live variables
-
RX/TX keyed state
-
Connect
-
Disconnect
-
Disconnect all
-
DTMF
-
Macros
-
COP commands
-
Node lookup
-
Audit log
-
Health and version checks
The installer has guided and automatic modes. It handles the Python venv, systemd service, config file, and AMI user setup.
Tested on my Pi 4B running ASL3, Asterisk 22.8.2, and Debian 13.
Public demo endpoints, no auth required:
https://api.kj5irq.radio/version
ASL3-MCP
https://github.com/KJ5IRQ/asl3-mcp
ASL3-MCP sits on top of ASL3-API and exposes the node as MCP tools for AI assistants and agent frameworks.
MCP, Model Context Protocol, is a standard way for AI clients to use external tools. In this case, the MCP server does not talk to AMI directly. It only talks to ASL3-API.
With ASL3-MCP running, a compatible AI assistant can:
-
Check node health
-
Read node status
-
See connected nodes with callsigns and locations
-
Read live RX/TX keyed state
-
Look up any AllStar node in the local cache
-
Connect to a node
-
Disconnect from a node
-
Send DTMF
-
Run defined macros
-
Read recent audit log entries
The important part is that the safety checks are enforced in code, not just by prompting the AI to behave.
Current safety controls:
-
Connect and disconnect are blocked during active RX/TX unless explicitly overridden
-
Control actions require a
confirmed=Trueflag -
Dry-run mode can preview actions without executing them
-
Destructive actions, such as disconnect-all, are separated as higher-risk tools
-
The MCP server has no AMI credentials
-
All node control still goes through ASL3-API
Install:
uvx allstar-mcp
PyPI:
https://pypi.org/project/allstar-mcp/
Both projects are MIT licensed and currently running on my node 637050.
Current versions:
-
ASL3-API v1.4.0
-
ASL3-MCP v0.1.2
Bug reports, testing feedback, and PRs are welcome.
73,
Josh
KJ5IRQ