P
polymatx/opsgate
The safety gate between AI agents and your servers. An MCP server for structured, policy-checked, audited infrastructure operations.
SECURITY.md ✓
View on GitHub ↗Link checked 2026-11-12 · HTTP 200 · opens the vendor's own site
Install & config
- Copy the command above
- Paste it as one entry under
mcpServersinclaude_desktop_config.json— local servers take command + args (example: clients) - Restart your client
Install command from the repository
go install github.com/polymatx/opsgate/cmd/opsgate@latest
Parsed from the README we fetched on 2026-10-26; we have not executed it.
This is the install method the repository states, not an MCP client config, so no JSON is generated.
Key names differ by client: Clients & CLI
- Star count
- 1 ★ · polymatx/opsgate · read from the GitHub search API · (checked 2026-11-13 20:00:50)
- Source
- collected from the punkpeye/awesome-mcp-servers list · type: MCP server
- Harvest history
- first seen 2026-10-23 · last seen 2026-11-14 · seen 26× · listed by 23 sources
- Score
- score 2,300 · 1 ★ · 23 sources · mcp
- Install
go install github.com/polymatx/opsgate/cmd/opsgate@latest
FAQ (answers come from our records)
How do I install it?
The repository provides this install command:
go install github.com/polymatx/opsgate/cmd/opsgate@latest. It comes from the repository itself; we cannot guarantee it runs as-is in your client.Who is it for?
We filed it under these tags: MCP 服务. The tags come from the entry itself, not a taxonomy we imposed.
Who maintains it?
repository
polymatx/opsgate;first catalogued 2026-10-23;last seen 2026-11-14。There is no official certification or quality rating here — we record sources and dates only.# opsgate
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
The safety gate between AI agents and your servers.
An MCP server that lets Claude, Cursor, or any AI agent operate real infrastructure —
without handing it a root shell.
What it looks like ·
30-second try ·
Break it yourself ·
Tools ·
Security model ·
Contributing
## What it looks like
You ask a question. The agent investigates with read-only tools and answers.
> You: Something's listening on port 8000 on my server and I don't remember what. Check it.
▸ listeningports(host: "hetzner")
Netid State Recv-Q Send-Q Local Address:Port Process
tcp LISTEN 0 511 0.0.0.0:443 users:(("nginx",pid=249619),…)
tcp LISTEN 0 511 0.0.0.0:80 users:(("nginx",pid=249619),…)
tcp LISTEN 0 4096 0.0.0.0:22 users:(("sshd",pid=237597),…)
tcp LISTEN 0 151 127.0.0.1:3306 users:(("mysqld",pid=237695),…)
tcp LISTEN 0 5 127.0.0.1:8000 users:(("python3",pid=237608),…)
▸ servicelist(host: "hetzner", state: "running")
docker.service loaded active running Docker Application Container Engine
mysql.service loaded active running MySQL Community Server
nginx.service loaded active running A high performance web server…
php8.3-fpm.service loaded active running The PHP 8.3 FastCGI Process Manager
pm2-root.service loaded active running PM2 process manager
> Claude: Port 8000 is a bare python3 process (pid 237608) bound to localhost only, so
> it isn't reachable from outside. It's not managed by systemd — no unit owns it — which
> means it won't survive a reboot. It's most likely something started by hand in a shell.
Now something that changes state. In operate mode the agent cannot just do it:
> You: OK, nginx config changed. Reload it.
▸ nginxtest(host: "hetzner")
nginx: configuration file /etc/nginx/nginx.conf test is successful
▸ nginxreload(host: "hetzner")
┌─ opsgate: approval required ─────────────────────────────────┐
│ allow nginxreload on host "hetzner"? │
│ │
│ The nginx configuration passed validation. │
│ This will reload nginx. │
│ │
│ Command: 'nginx' '-s' 'reload' │
│ [ Approve ] [ Deny ] │
└─────────────────────────────────────────────────────────────┘
You click Deny, and nothing happens — the agent is told the operator refused. Approve, and
it runs and lands in the audit log. Either way you saw the exact command first.
(Tool output above is real output from a live server; the prompt is rendered by your MCP
client, so it looks however that client draws it.)
## Try it in 30 seconds (no server needed)
opsgate runs with no config file at all — local machine, read-only:
bash
go install github.com/polymatx/opsgate/cmd/opsgate@latest
opsgate serve
opsgate v0.1.3 | mode=observe | defaulthost=local | audit=~/.opsgate/audit.jsonl
That's it. No config, no SSH, and it defaults to observe — so it can read your disk usage
and journal, and it will refuse to change anything:
▸ diskusage() → works
▸ servicerestart(...) → Refused by opsgate policy: host is in observe mode
Point your client at it and ask "what's using disk space on this machine?" When you're
ready for real hosts, opsgate init writes a starter config to ~/.opsgate/config.yaml.
### Which clients can reach it
opsgate runs on your machine (or on the server itself) and holds your SSH key, so the
transport you need depends on where your client actually executes:
An MCP server that lets Claude, Cursor, or any AI agent operate real infrastructure —
without handing it a root shell.
What it looks like ·
30-second try ·
Break it yourself ·
Tools ·
Security model ·
Contributing
## What it looks like
You ask a question. The agent investigates with read-only tools and answers.
> You: Something's listening on port 8000 on my server and I don't remember what. Check it.
▸ listeningports(host: "hetzner")
Netid State Recv-Q Send-Q Local Address:Port Process
tcp LISTEN 0 511 0.0.0.0:443 users:(("nginx",pid=249619),…)
tcp LISTEN 0 511 0.0.0.0:80 users:(("nginx",pid=249619),…)
tcp LISTEN 0 4096 0.0.0.0:22 users:(("sshd",pid=237597),…)
tcp LISTEN 0 151 127.0.0.1:3306 users:(("mysqld",pid=237695),…)
tcp LISTEN 0 5 127.0.0.1:8000 users:(("python3",pid=237608),…)
▸ servicelist(host: "hetzner", state: "running")
docker.service loaded active running Docker Application Container Engine
mysql.service loaded active running MySQL Community Server
nginx.service loaded active running A high performance web server…
php8.3-fpm.service loaded active running The PHP 8.3 FastCGI Process Manager
pm2-root.service loaded active running PM2 process manager
> Claude: Port 8000 is a bare python3 process (pid 237608) bound to localhost only, so
> it isn't reachable from outside. It's not managed by systemd — no unit owns it — which
> means it won't survive a reboot. It's most likely something started by hand in a shell.
Now something that changes state. In operate mode the agent cannot just do it:
> You: OK, nginx config changed. Reload it.
▸ nginxtest(host: "hetzner")
nginx: configuration file /etc/nginx/nginx.conf test is successful
▸ nginxreload(host: "hetzner")
┌─ opsgate: approval required ─────────────────────────────────┐
│ allow nginxreload on host "hetzner"? │
│ │
│ The nginx configuration passed validation. │
│ This will reload nginx. │
│ │
│ Command: 'nginx' '-s' 'reload' │
│ [ Approve ] [ Deny ] │
└─────────────────────────────────────────────────────────────┘
You click Deny, and nothing happens — the agent is told the operator refused. Approve, and
it runs and lands in the audit log. Either way you saw the exact command first.
(Tool output above is real output from a live server; the prompt is rendered by your MCP
client, so it looks however that client draws it.)
## Try it in 30 seconds (no server needed)
opsgate runs with no config file at all — local machine, read-only:
bash
go install github.com/polymatx/opsgate/cmd/opsgate@latest
opsgate serve
opsgate v0.1.3 | mode=observe | defaulthost=local | audit=~/.opsgate/audit.jsonl
That's it. No config, no SSH, and it defaults to observe — so it can read your disk usage
and journal, and it will refuse to change anything:
▸ diskusage() → works
▸ servicerestart(...) → Refused by opsgate policy: host is in observe mode
Point your client at it and ask "what's using disk space on this machine?" When you're
ready for real hosts, opsgate init writes a starter config to ~/.opsgate/config.yaml.
### Which clients can reach it
opsgate runs on your machine (or on the server itself) and holds your SSH key, so the
transport you need depends on where your client actually executes:
Listed badge (optional)
Copy this line into the README if you want the listing mark. Optional, and it does not affect being listed.
[](https://anclum.com/en/s/polymatx-opsgate/)
- Source
- awesome · https://github.com/polymatx/opsgate
- Browse by field
- MCP servers
- Traction
- 1 ★
- Listed by
- 23 independent sources
- added
- today
- Security policy
- the repository has
SECURITY.mdat its root (we checked that the file exists, not what it says)
More like this
Filed under
Every tag opens the full list for that filter. Counts are the live catalogue figures.