nta is a small Go MCP server that exposes one tool, desktop_notify, for
sending desktop notifications with notify-send.
go build ./...Local mode uses stdio, which is the common transport for a locally launched MCP server:
go run . -mode localExample MCP client config:
{
"mcpServers": {
"nta": {
"command": "go",
"args": ["run", "/home/nzlov/workspaces/go/nta", "-mode", "local"]
}
}
}Remote mode starts a Streamable HTTP MCP endpoint. By default it listens on
:8080 at /mcp.
NTA_AUTH_TOKEN=change-me go run . -mode remote -addr :8080 -path /mcpUse -dry-run to validate tool calls without invoking notify-send:
NTA_AUTH_TOKEN=change-me go run . -mode remote -addr :8080 -path /mcp -dry-runRemote mode requires bearer token authentication. Set NTA_AUTH_TOKEN or pass
-auth-token; clients must send Authorization: Bearer <token>.
The repository includes a user-level systemd unit at systemd/nta.service. It
runs remote MCP mode on 127.0.0.1:55853/mcp and reads the bearer token from
~/.config/nta/nta.env.
Install the binary:
mkdir -p ~/.local/bin
go build -o ~/.local/bin/nta .Create the token environment file:
mkdir -p ~/.config/nta
umask 077
printf 'NTA_AUTH_TOKEN=%s\n' 'change-me' > ~/.config/nta/nta.envInstall and start the user service:
mkdir -p ~/.config/systemd/user
cp systemd/nta.service ~/.config/systemd/user/nta.service
systemctl --user daemon-reload
systemctl --user enable --now nta.serviceCheck status and logs:
systemctl --user status nta.service
journalctl --user -u nta.service -fWith the default user service setup, the service starts with the user's systemd session. To run it before login, enable lingering for the user:
loginctl enable-linger "$USER"desktop_notify accepts:
titlerequired notification titlebodyoptional notification bodyapp_nameoptional application name, defaultntaurgencyone oflow,normal, orcriticaliconoptional icon name or pathtimeoutoptional timeout in millisecondsdry_runoptional per-call dry-run switch
The notification is shown on the machine running the MCP server, so remote mode notifies the server host, not the client host.