Network health-check tools for the command line.
go install github.com/mismatched/tower@latestAll commands output JSON. Each result includes OK, Duration, Data, Warning, and Error fields.
tower [command] [args...] [flags...]
sudo tower ping example.com
sudo tower ping example.com --count 3tower dns example.com
tower dns example.com --from 8.8.8.8
tower dns example.com --timeout 3stower tcp example.com:443
tower tcp example.com:22 --timeout 10stower tls example.com:443
tower tls example.com:443 --cert client.crt --key client.keytower http https://example.com
tower http https://example.com --method HEAD
tower http https://example.com --timeout 30stower trace https://example.com
tower trace https://example.com --method POSTtower https example.com
tower https example.com --port 8443
tower https example.com --warn 720h
tower https example.com --insecuretower ws wss://example.com/ws
tower ws ws://example.com:8080/ws --timeout 10stower check config.ymltower servechecks:
- type: tcp
ip: "example.com"
port: 443
timeout: 5s
- type: https
host: "example.com"
warn_if_expiring: 720h
insecure_skip_verify: false
- type: dns
addr: "example.com"
- type: ping
host: "example.com"
count: 3
- type: http
url: "https://example.com"
method: GET
- type: ws
url: "wss://example.com/ws"Every command prints a single JSON object (or array for check):
{
"OK": true,
"Duration": 124304875,
"Data": null,
"Warning": null,
"Error": null
}Tower includes a built-in MCP server over stdio. 9 tools, zero SDK dependencies.
tower serveConfigure in .mcp.json:
{
"mcpServers": {
"tower": {
"command": "tower",
"args": ["serve"]
}
}
}Or install from the tower skills marketplace.
go build -o bin/tower .# Non-root (all tests except ping)
go test -v ./...
# Root (includes ping tests)
sudo go test -v -race ./...Tower can be used as a GitHub Action to run health checks in your CI pipeline. See tower-template for starter workflows.
# .github/workflows/health-check.yml
name: health-check
on:
schedule:
- cron: '0 */6 * * *'
workflow_dispatch:
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: mismatched/tower@master
with:
tcp: 'example.com:443'
http: 'https://example.com'
timeout: '10s'Cert expiry warnings require a config file (the composite action doesn't expose warn_if_expiring as an input). Create a config and use the config input:
# .github/tower/checks.yml
checks:
- type: https
host: "example.com"
warn_if_expiring: 720h# .github/workflows/health-check.yml
steps:
- uses: actions/checkout@v4
- uses: mismatched/tower@master
with:
config: '.github/tower/checks.yml'| Input | Description |
|---|---|
config |
Path to tower config YAML file (requires actions/checkout first) |
tcp |
TCP host:port to check |
http |
HTTP/HTTPS URL for status check |
https |
Hostname for TLS cert check |
dns |
Address to resolve |
ws |
WebSocket URL to check |
timeout |
Default timeout (default: 10s) |
version |
Tower version to install (default: latest) |
The action fails if any check has "OK": false.
Tower ships with Claude Code skills for the CLI, MCP server, Go library, and GitHub Actions templates.
# Add the tower marketplace
claude plugin marketplace add github.com/mismatched/tower
# Install skills
claude plugin install tower # CLI + libtower + tower-template skills
claude plugin install tower-mcp # MCP server setup| Plugin | Skills | Description |
|---|---|---|
tower |
tower-cli, libtower, tower-template |
CLI usage, Go library reference, GitHub Actions templates |
tower-mcp |
tower-cli (MCP section) |
MCP server config + 9 tools reference |
MIT