Governed managed-endpoint ops β login-storm & drift analysis, 9 MCP tools with audit/budget/undo.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Disclaimer: Community-maintained open-source project. Not affiliated with, endorsed by, or sponsored by any endpoint-management vendor. Product and trademark names belong to their owners. MIT licensed.
Governed AI-ops for managed-endpoint fleets β thin clients, VDI endpoints,
and other centrally-managed devices β with a built-in governance harness:
unified audit log, token/runaway budget guard, undo-token recording, and
descriptive risk tiers. Vendor-neutral: it talks to an
endpoint-management server's REST API (Bearer auth) through a configurable
dialect β see Dialects. Self-contained: no
dependencies beyond httpx and the MCP SDK. The test suite is mock-based; the
endpoint-management REST paths have not yet been exercised against a live
management server β see docs/VERIFICATION.md.
Two signature analyses, plus the guarded reads and writes around them:
endpoint-aiops ...): init, overview, endpoint list/get/assign-profile/reboot, session list/storm, drift report/patch, secret set/list/rm/migrate/rotate-password, doctor, mcp.endpoint-aiops mcp or endpoint-aiops-mcp): 13 tools (10 read, 3 write), every one wrapped with the bundled @governed_tool harness.~/.endpoint-aiops/secrets.enc (Fernet + scrypt) β never plaintext on disk. Unlock with a master password from ENDPOINT_AIOPS_MASTER_PASSWORD (MCP/CI) or an interactive prompt (CLI).endpoint_assign_profile (high risk) captures the prior profile and records an inverse "reassign the prior profile" undo descriptor. endpoint_reboot (medium risk) captures the prior online state for the audit record but declares no undo (a reboot has no safe inverse).endpoint assign-profile, endpoint reboot) require double confirmation and support --dry-run.| Category | Tools | Count | R/W |
|---|---|---|---|
| Overview | overview | 1 | read |
| Inventory | endpoint_list, endpoint_get, endpoint_health_score | 3 | read |
| Sessions | session_list, login_storm_analysis | 2 | read |
| Drift | drift_report, patch_status, patch_compliance | 3 | read |
| Remediation | endpoint_assign_profile | 1 | write (high) |
endpoint_reboot | 1 | write (medium) | |
| Undo | undo_list | 1 | read |
undo_apply | 1 | write (medium) |
The analysis tools (login_storm_analysis, drift_report, patch_status,
patch_compliance, endpoint_health_score) accept injected records for
pure/offline analysis; endpoint_health_score and patch_compliance are
injected-only, the others also pull live from a configured target.
It delivers managed-endpoint operations β reads and writes β accurately and efficiently, and records every one of them. It does not decide whether a write is allowed to happen. That is the agent's judgement, or the permission of the account you connect it with: give it a management-console account or API token scoped to a read-only role and the writes fail at the server β the place that actually owns the permission.
So there is no read-only switch, no policy file, no approval gate to configure.
The one thing the tool guarantees is that nothing is silent: every call, over
MCP and over the CLI alike, lands an audit row in ~/.endpoint-aiops/audit.db,
and reversible writes still capture their before-state and record an inverse
where one exists.
Each tool declares a
risk_level, kept in agreement with its[READ]/[WRITE]documentation tag by a test, and carried into the audit row as a descriptive tier β so a reviewer can see at a glance that a row was a high-risk write. It is a label, not a gate.
Running a smaller / local model? See agent-guardrails.md β it lists the guardrails this tool now enforces for you (so you don't spend prompt budget restating them) and gives a ready-made system prompt for what's left.
null, never as "" β the key is always present, so a missing patch
level cannot be mistaken for a blank one.limit can cut short is a
truncation envelope: {"items": [...], "returned": N, "limit": L, "truncated": bool}, with truncated measured rather than inferred. Companion totals
(driftedCount, behindCount, nonCompliantCount, stormCount, the health
summary) are always the full, uncapped figures.Run as an MCP server (stdio):
Every operation β MCP and CLI β passes through the bundled @governed_tool
harness. It records; it does not authorize (see above).
~/.endpoint-aiops/audit.db
(relocatable via ENDPOINT_AIOPS_HOME). The CLI writes the same row the MCP
path does β there is no unaudited entry point.ENDPOINT_RUNAWAY_MAX=0; optional hard
ceilings via ENDPOINT_MAX_TOOL_CALLS / ENDPOINT_MAX_TOOL_SECONDS.risk_level; it gates nothing.This is the IT-endpoint member of the AIops-tools family (governed AI-ops
with audit + budget + undo + risk tiers). For OT / industrial edge
(Modbus, OPC-UA, PROFINET, β¦) see the separate industrial-aiops line.
A dialect is the management server's API shape: resource paths, response
field names, the transport defaults (port + API base path), and how to
authenticate. Set it per target in config.yaml; endpoint-aiops init asks
for it and prints which one it configured.
| Dialect | Transport | Auth | Status |
|---|---|---|---|
generic (default) | /api/v2.0 on 443 | static Bearer API key | Neutral placeholder β not a real vendor API. Useful only once you describe your server's paths in a dialect: block. |
igel-ums | /umsapi/v3 on 8443 | HTTP Basic login β JSESSIONID cookie | Documented-but-unverified dialect for IGEL UMS (IMI). This is not a claim that IGEL is supported β see Status. |
The generic default is not an IGEL configuration and never was: IGEL
serves IMI at /umsapi/v3 on 8443, so a target left on the generic shape 404s
on its first probe. That mismatch is why the preset exists.
Where a server genuinely has no such resource, the dialect says so rather than
guessing a URL β IMI exposes no login/boot session resource, so session_list
and login_storm_analysis on an igel-ums target return a teaching error
naming the absent resource instead of calling an invented path.
A dialect selects the auth scheme too, not just paths β IMI rejects the
static Bearer token the generic dialect sends, so it logs in with HTTP Basic at
POST /umsapi/v3/login and carries the returned JSESSIONID cookie (once per
connection, then cached). Because the scheme comes from the dialect, a
credentials failure and a wrong-dialect failure are reported differently: a
401 names the scheme presented and, when the server sends a WWW-Authenticate
challenge, the scheme it actually wants β so a dialect mismatch does not send
you off rotating a perfectly good key.
β οΈ Note for IGEL specifically: a UMS account with too few permissions receives
empty lists rather than a 403. endpoint-aiops doctor authenticates as a
step separate from its reachability probe and warns when a successful login
returns no endpoints, because "no devices" and "not allowed to see the devices"
are otherwise indistinguishable.
The test suite is mock-based. No dialect in this package has been exercised against a real management server, so this package does not claim support for any specific product β including IGEL.
generic is a placeholder shape, not a vendor API.igel-ums is a documented-but-unverified dialect. Its paths and field
aliases are modelled from IGEL's published IMI documentation; its auth scheme
is documented in the IMI manual and matches what three independent real-world
IMI clients do. Neither has been run against an appliance by this project β
IGEL UMS has no free edition, so it cannot be verified on the maintainer's
hardware.Both are recorded as UNKNOWN-pending-live in
docs/VERIFICATION.md, which ranks what a live run is
most likely to find wrong and defines the checklist it must cover. If you have a
UMS and run that checklist, the results are very welcome as an issue. Missing a
capability or a server dialect? Open an issue or PR β contributions welcome.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/endpoint-aiops)<a href="https://allmcps.com/mcp/endpoint-aiops"><img src="https://allmcps.com/api/badge/endpoint-aiops?style=directory" alt="Endpoint AIops on AllMCPs" /></a>