sysmcp
Live Linux host signal (CPU, memory, processes, network, optional eBPF) for MCP clients.
Open source Open in the app JSON README (API)
About
Live Linux host signal (CPU, memory, processes, network, optional eBPF) for MCP clients.
Details
- Kind
- MCP servers
- Topic
- AI, RAG & memory
- Publisher
- arunmm8335
- Origin
- official
- Category
- ferramentas
- Transport
- local
- Version
- 0.5.0
- Last push
- 2026-07-15T13:11:42Z
- Repository state
- ativo
- Language
- Go
- License
- MIT
- Added
- 2026-08-29 03:02:26
- Updated
- 2026-08-29 03:02:26
- Origin id
io.github.arunmm8335/sysmcp
README
# sysmcp
MCP server that exposes live host signal — CPU, memory, processes, network —
to Cursor / Claude. Default path is `/proc` (no root). Optional eBPF tools
activate when `CAP_BPF` / `CAP_PERFMON` is available.
**Repo:** https://github.com/arunmm8335/sysmcp · **Version:** 0.5.0
## Tools
| Tool | What it returns |
|------|-----------------|
| `host_dashboard` | Full snapshot (CPU, mem, top procs, listeners, eBPF) |
| `poll_host_stats` | Lightweight CPU/mem/process snapshot for auto-refresh |
| `system_stats` | CPU %, memory %, load averages, NIC rx/tx B/s |
| `top_processes` | Top PIDs by **CPU % over a sample window**, plus `skipped_count` |
| `network_connections` | IPv4+IPv6 TCP/UDP; filters + `resolve_pid`; row limit (default 200) |
| `cgroup_cpu` | Top cgroups by CPU % (cgroup v2 `cpu.stat`) |
| `iface_rates` | Per-interface byte/packet rates (`/proc/net/dev`) |
| `ebpf_status` | Whether eBPF works; includes `how_to_enable` when not |
| `ebpf_activity` | Fork + `sched_switch` rates via eBPF, or `available: false` |
| `ebpf_traffic` | Kernel RX/TX packet rates (`netif_receive_skb` / `net_dev_xmit`) |
True per-connection byte counters need sock-level eBPF; `iface_rates` +
`ebpf_traffic` are the practical deeper network signal today.
## Browser dashboard (HTTP)
```bash
go build -o sysmcp ./cmd/sysmcp
./sysmcp serve
# open http://127.0.0.1:8787/
```
Optional: `./sysmcp serve -addr 127.0.0.1:9000`
APIs: `/api/dashboard`, `/api/poll` (JSON).
## Interactive views in Cursor
Ask *“Open the host dashboard”* / *“Refresh the host dashboard”*. The agent
calls `host_dashboard` and opens a **Cursor Canvas** beside the chat.
MCP Apps resource `ui://sysmcp/dashboard` remains for hosts that render Apps
iframes. Cursor often uses Canvas + JSON instead.
### `network_connections` filters
| Arg | Effect |
|-----|--------|
| `listen_only` | TCP `LISTEN` + unbound UDP |
| `protocol` | `tcp` / `udp` |
| `family` | `ipv4` / `ipv6` |
| `state` | e.g. `ESTABLISHED`, `LISTEN` |
| `local_port` | filter by local port |
| `pid` | owning PID (implies `resolve_pid`) |
| `limit` | max rows (default 200, max 1000); `truncated` in result |
## Install
**Release binaries** (linux amd64 / arm64) ship on each `v*` tag:
https://github.com/arunmm8335/sysmcp/releases
```bash
# example amd64
curl -fsSL -o sysmcp.tgz \
https://github.com/arunmm8335/sysmcp/releases/download/v0.5.0/sysmcp_0.5.0_linux_amd64.tar.gz
tar -xzf sysmcp.tgz
```
Or from source:
```bash
go install github.com/arunmm8335/sysmcp/cmd/sysmcp@latest
# or
git clone https://github.com/arunmm8335/sysmcp.git
cd sysmcp
go build -o sysmcp ./cmd/sysmcp
```
### MCP Registry (one-click)
Namespace: `io.github.arunmm8335/sysmcp`. Tag releases build `.mcpb` assets and
attempt an OIDC publish via `mcp-publisher`. To publish manually after a
release (recommended if OIDC is not set up):
```bash
# fill fileSha256 in server.json from the release *.mcpb.sha256 files, then:
curl -fsSL -o mcp-publisher.tgz \
https://github.com/modelcontextprotocol/registry/releases/download/v1.8.0/mcp-publisher_linux_amd64.tar.gz
tar -xzf mcp-publisher.tgz mcp-publisher
./mcp-publisher login github
./mcp-publisher publish ./server.json
```
See https://modelcontextprotocol.io/registry/quickstart
## Cursor / Claude MCP config
```json
{
"mcpServers": {
"sysmcp": {
"command": "/absolute/path/to/sysmcp"
}
}
}
```
## Enable eBPF (optional)
```bash
go build -o sysmcp ./cmd/sysmcp
./scripts/grant-caps.sh ./sysmcp
# sets: cap_bpf,cap_perfmon+ep
```
Restart the MCP server after granting caps. Without caps, eBPF tools return
`available: false` — `/proc` tools still work.
## Demo
```bash
go test ./... -count=1
go build -o sysmcp ./cmd/sysmcp
go run ./scripts/smoke.go ./sysmcp
./sysmcp serve # then open http://127.0.0.1:8787/
```
## License
MIT