Identity AIops
Governed Keycloak + authentik identity ops: users, events, clients, MFA, RCA.
Connector by AIops-tools · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/aiops-tools-identity-aiops
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.
- Tools
- 20 read · 7 write · 2 delete
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Tools by what they do 29
Read from the source code; the running server may list different tools.
Read 20 · Look things up without changing anything.
admin_eventsclient_detailclient_misconfig_auditclient_session_statsclient_sessionsgroup_membersidentity_overviewlist_clientslist_groupslist_identity_providerslist_usersmfa_coverage_analysis
Show 8 more tools
realm_infostale_access_auditundo_listuser_countuser_credentialsuser_detailuser_lockout_statususer_sessions
Write 7 · Create, change, send or run things.
disable_userenable_userlogin_eventslogin_failure_rcarotate_client_secretundo_applyupdate_client_redirect_uris
Delete 2 · Delete, drop, revoke or wipe things.
require_password_resetrevoke_user_sessions
Network hosts it talks to 4
::1· found in codeanthropic.com· found in codegithub.com· found in codeglama.ai· found in code
Files it touches
~/.identity-aiops~/.identity-aiops/audit.db~/.identity-aiops/secrets.enc~/.identity-aiops/undo.db
Tools (29)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
admin_events[READ] Recent admin/config-change events (who changed what, from where). Args: max_results: Page bound (default 200, max 500). target: IdP target name from config; omit for the default. Returns {"events": [...], "returned": N, "limit": L, "truncated": bool}, with truncated measured rather than guessed. On authentik the single event feed is post-filtered to admin actions, so truncated also reports feed rows that were never examined.
client_detail[READ] One client's normalized detail by internal id. Args: client_id: Internal id (Keycloak UUID / authentik provider pk), from list_clients. target: IdP target name from config; omit for the default.
client_misconfig_audit[READ] Ranked OAuth/OIDC client risk: wildcard/http redirect URIs, public clients with secrets, implicit flow, missing PKCE, password grant — per-client riskScore with evidence and actions. Args: max_clients: Clients to pull (default 200). target: IdP target name from config; omit for the default. Returns "inputsTruncated": true when the client list hit max_clients — a clean result over a clipped list is not evidence of a clean estate.
client_session_stats[READ] Active-session counts per client, busiest first (Keycloak). KEYCLOAK ONLY. authentik has no per-client session rollup, so on an authentik target this returns {"error": "Resource 'client_session_stats' is not mapped for platform 'authentik'..."}. A platform-capability answer, not a fault — do not retry. Args: target: IdP target name from config; omit for the default. Returns {"clients": [...], "returned": N, "truncated": false} — the rollup is unbounded, so this listing is always complete.
client_sessions[READ] Active user sessions on one client (Keycloak). KEYCLOAK ONLY. authentik has no per-provider session listing, so on an authentik target this returns {"error": "Resource 'client_sessions' is not mapped for platform 'authentik'..."}. That is a platform-capability answer, not a fault: switch approach (user_sessions per user) rather than retrying or reporting the tool as broken. Args: client_id: Internal id, from list_clients. max_results: Page bound (default 200). target: IdP target name from config; omit for the default. Returns {"sessions": [...], "returned": N, "limit": L,…
disable_user[WRITE][risk=medium] Disable a user (blocks sign-in); reversible. The containment move for a compromised/stale account. Reads the user first so the harness records an undo that restores the prior enabled state. Live sessions survive — pair with revoke_user_sessions. Pass dry_run=True to preview. Refuses to disable the account this tool authenticates as — including under dry_run, which must report a refusal rather than preview a call that will be refused. Args: user_id: User id (Keycloak UUID / authentik pk), from list_users. dry_run: If True, preview without changing. target: Id…
enable_user[WRITE][risk=high] Re-enable a user (restores sign-in); reversible. Re-granting access reverses a containment action, so it is tagged risk=high on the audit row (a descriptive label, not a gate). Whether it should run is the agent's judgement or the connecting account's permissions, not the tool's. Pass dry_run=True to preview. Args: user_id: User id, from list_users. dry_run: If True, preview without changing. target: IdP target name from config; omit for the default.
group_members[READ] Members of one group, normalized user rows. Args: group_id: Group id, from list_groups. max_results: Page bound (default 200). target: IdP target name from config; omit for the default. Returns {"members": [...], "returned": N, "limit": L, "truncated": bool}, with truncated measured rather than guessed.
identity_overview[READ] One-shot summary: platform/realm, user/client/IdP counts, and the size of the recent failed-login feed. Lead with this. Args: target: IdP target name from config; omit for the default.
list_clients[READ] OAuth/OIDC clients in the realm, normalized (redirect URIs, public/confidential, grant flags, PKCE method). Args: max_results: Page bound (default 200). target: IdP target name from config; omit for the default. Returns {"clients": [...], "returned": N, "limit": L, "truncated": bool}, with truncated measured rather than guessed. Fields the IdP did not return are null — a null pkceMethod means no PKCE method is pinned.
list_groups[READ] Groups in the realm. Args: max_results: Page bound (default 200). target: IdP target name from config; omit for the default. Returns {"groups": [...], "returned": N, "limit": L, "truncated": bool}, with truncated measured rather than guessed.
list_identity_providers[READ] Federated identity providers / sources configured on the IdP. Args: target: IdP target name from config; omit for the default. Returns {"identityProviders": [...], "returned": N, "truncated": false} — the IdP returns the complete set, so this listing is never clipped.
list_users[READ] Users in the realm, normalized across Keycloak/authentik. Args: search: Optional username/email search string. max_results: Page bound (default 200). target: IdP target name from config; omit for the default. Returns {"users": [...], "returned": N, "limit": L, "truncated": bool}. truncated is measured (one extra user is fetched); when true, more users exist — re-run with a higher max_results before drawing a realm-wide conclusion. Fields the IdP did not return are null, never "".
login_events[READ] Recent authentication events, normalized (time/type/user/ip/client/error). Args: event_type: Platform vocabulary — Keycloak LOGIN / LOGIN_ERROR, authentik login / login_failed (case-insensitive). user: Optional username / user-id filter. max_results: Page bound (default 200, max 500). target: IdP target name from config; omit for the default. Returns {"events": [...], "returned": N, "limit": L, "truncated": bool}. truncated is measured (one extra event is fetched), not guessed — when it is true, more events exist; re-run with a higher max_results rather than tr…
login_failure_rca[READ] RCA over the failed-auth feed: separates brute-force (spray or targeted) from a misconfigured client from an expired-credential storm and a lockout storm — each finding carries its numbers, cause, and action. Args: window_minutes: Trailing analysis window (default 60). max_events: Failed-login events to pull (default 500). target: IdP target name from config; omit for the default. Returns "feedTruncated": true when the event feed hit max_events — every count is then a lower bound; re-run with a higher max_events before concluding a threshold was not reached.
Show 14 more tools
mfa_coverage_analysis[READ] Second-factor coverage: overall %, the users without MFA, and the factor types counted. Pulls one credential list per user (bounded). Args: max_users: Users to sample (default 200 — one API call each). target: IdP target name from config; omit for the default. Returns "inputsTruncated": true when the realm is larger than max_users — coveragePct then describes the sample, not the realm.
realm_info[READ] Realm / instance settings relevant to identity hygiene (brute-force protection, password policy, OTP policy, registration). Args: target: IdP target name from config; omit for the default.
require_password_reset[WRITE][risk=medium] Require a password reset at next sign-in (Keycloak required actions); reversible — the undo clears the flag only if this call set it. Pass clear=True to remove a pending requirement instead. Args: user_id: User id, from list_users. clear: If True, REMOVE the pending reset requirement (the undo path). dry_run: If True, preview without changing. target: IdP target name from config; omit for the default.
revoke_user_sessions[WRITE][risk=medium] Revoke ALL of a user's sessions. IRREVERSIBLE — no undo; the prior session count is recorded (audit shows the blast radius). Args: user_id: User id whose sessions to revoke, from list_users. dry_run: If True, preview without revoking. target: IdP target name from config; omit for the default.
rotate_client_secret[WRITE][risk=high] Rotate a client's secret. IRREVERSIBLE — the old secret is invalidated; only masked fingerprints are recorded/returned, never the value. Refuses to rotate the client this tool authenticates as: that would revoke its own credential with no undo to fall back on — including under dry_run, which must report a refusal rather than preview a call that will be refused. Rotate that one from the admin console and re-store it with 'identity-aiops secret set'. Every deployment using this client must be updated with the new secret (fetch it from the admin console over a trusted channel…
stale_access_audit[READ] Dormant-access audit: enabled users idle > N days, accounts that never signed in, service accounts with interactive logins, and sessions orphaned by disabled/unknown users. Args: stale_days: Idle threshold in days (default 90). max_users: Users to pull (default 500). target: IdP target name from config; omit for the default. Returns "inputsTruncated" per input feed and "truncated" when a finding list was capped at maxRows; the *Count fields are always the full totals.
undo_apply[WRITE][risk=medium] Apply a recorded undo by dispatching its inverse tool. The inverse runs through its own governed tool, so it is audited and carries its own risk tier there. Pass dry_run=True to preview the inverse call without executing it. A token can only be applied once. Args: undo_id: The undoId from undo_list (or an ``_undo_id`` in a write result). dry_run: If True, preview the inverse tool + params without running it. target: Passed through to the inverse tool when it accepts a target.
undo_list[READ] List recorded, not-yet-applied undo tokens (most recent first). Each entry names the original tool, the inverse tool that ``undo_apply`` would run, and a human note. Use the ``undoId`` with ``undo_apply``. Returns {"undos": [...], "returned": N, "limit": L, "truncated": bool}. ``truncated`` is *measured* (one extra row is fetched), not guessed from a length coincidence: when it is true there are MORE tokens than shown, so re-run with a higher ``limit`` rather than reporting the list as complete. Each entry carries ``effectVerified``. False means the original write lost its response, …
update_client_redirect_uris[WRITE][risk=high] REPLACE a client's redirect-URI list; reversible — the prior list is captured and the undo replays it. Redirect URIs are the OAuth flow's security boundary, so this is tagged risk=high on the audit row (a descriptive label, not a gate). Pass the FULL desired list (this replaces, not appends) and dry_run=True to preview. Args: client_id: Client internal id, from list_clients. redirect_uris: The complete new redirect-URI list. dry_run: If True, preview without changing. target: IdP target name from config; omit for the default.
user_count[READ] Total user count in the realm (the cheap health probe). Args: target: IdP target name from config; omit for the default.
user_credentials[READ] A user's configured credentials/authenticators — the MFA surface. Args: user_id: User id, from list_users. target: IdP target name from config; omit for the default. Returns {"credentials": [...], "returned": N, "truncated": false, "secondFactors": N} — always the user's complete credential set.
user_detail[READ] One user's full detail (enabled state, required actions, attributes). Args: user_id: User id (Keycloak UUID / authentik pk), from list_users. target: IdP target name from config; omit for the default.
user_lockout_status[READ] Brute-force lockout status for one user (Keycloak attack-detection). KEYCLOAK ONLY. authentik keeps no per-user lockout register, so on an authentik target this returns {"error": "Resource 'user_lockout' is not mapped for platform 'authentik'..."}. That is a definitive answer about the platform, not a fault: do not retry it and do not report the tool as broken — use login_failure_rca on the failed-auth feed instead. Args: user_id: User id, from list_users. target: IdP target name from config; omit for the default.
user_sessions[READ] A user's active sessions (id, IP, start/last access, clients). Args: user_id: User id, from list_users. target: IdP target name from config; omit for the default. Returns {"sessions": [...], "returned": N, "truncated": false} — the IdP returns the user's whole session set, so this listing is always complete.
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Weekly downloads
- 242
- Last commit
- Oct 15, 2026 (13 days ago)
- Last release
- Oct 15, 2026 (13 days ago)
- Last package publish
- Oct 15, 2026 (13 days ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.AIops-tools/identity-aiops- Version
- 0.11.0
- Auth
- No auth
- Packages
- pypi identity-aiops
- License
- MIT
- Repository
- github.com/AIops-tools/Identity-AIops
- First seen
- Oct 24, 2026
- Last checked
- Oct 25, 2026
More from AIops-tools
- 0.569score
OT AIops
AIops-tools
Governed OT tap (57 tools): OPC-UA/Modbus/S7/MC/MTConnect/MQTT/EtherNet-IP/EtherCAT.
ConnectorAFreshness: ALocal★ 7↓ 81/wkClaude Code +5 - 0.567score
Proxmox AIops
AIops-tools
Governed Proxmox VE VM/container ops — 43 MCP tools with audit, budget, undo & risk-tier guards.
ConnectorAFreshness: ALocal★ 3↓ 221/wkClaude Code +5 - 0.558score
Firewall AIops
AIops-tools
Governed OPNsense + pfSense firewall ops: rules, NAT, VPN, DHCP, RCA.
ConnectorAFreshness: ALocal★ 1↓ 231/wkClaude Code +5 - 0.550score
Veeam AIops
AIops-tools
Governed Veeam Backup & Replication ops — 27 MCP tools with audit, budget, undo guards.
ConnectorAFreshness: ALocal↓ 267/wkClaude Code +5 - 0.550score
Proxy AIops
AIops-tools
Governed Traefik + Caddy + HAProxy ops: routes, upstreams, certs, 5xx RCA.
ConnectorAFreshness: ALocal↓ 250/wkClaude Code +5 - 0.550score
TrueNAS AIops
AIops-tools
Governed TrueNAS SCALE storage ops — 25 MCP tools with audit, budget, undo guards.
ConnectorAFreshness: ALocal↓ 240/wkClaude Code +5
Cite this page
Identity AIops MCP server. Agent Mart. https://agentmart.dev/connectors/aiops-tools-identity-aiops (last updated 2026-10-25)