Skip to content
Agentmart
Submit a tool

Identity AIops

Governed Keycloak + authentik identity ops: users, events, clients, MFA, RCA.

Connector by AIops-tools · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)
Write a review

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.

We use your email only for this newsletter. Privacy

About

Governed Keycloak + authentik identity ops: users, events, clients, MFA, RCA. 29 tools.

No 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_events
  • client_detail
  • client_misconfig_audit
  • client_session_stats
  • client_sessions
  • group_members
  • identity_overview
  • list_clients
  • list_groups
  • list_identity_providers
  • list_users
  • mfa_coverage_analysis
Show 8 more tools
  • realm_info
  • stale_access_audit
  • undo_list
  • user_count
  • user_credentials
  • user_detail
  • user_lockout_status
  • user_sessions

Write 7 · Create, change, send or run things.

  • disable_user
  • enable_user
  • login_events
  • login_failure_rca
  • rotate_client_secret
  • undo_apply
  • update_client_redirect_uris

Delete 2 · Delete, drop, revoke or wipe things.

  • require_password_reset
  • revoke_user_sessions

Network hosts it talks to 4

  • ::1 · found in code
  • anthropic.com · found in code
  • github.com · found in code
  • glama.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
First seen
Oct 24, 2026
Last checked
Oct 25, 2026

More from AIops-tools

Cite this page

Identity AIops MCP server. Agent Mart. https://agentmart.dev/connectors/aiops-tools-identity-aiops (last updated 2026-10-25)