Skip to main content
Glama
README.md
# mcp-freeipa

MCP server for [FreeIPA](https://www.freeipa.org/) / [Red Hat IdM](https://www.redhat.com/en/technologies/management/identity-manager) — user, group, host, DNS, HBAC, and sudo management via the Model Context Protocol.

## Features

- **Users** — list, get, create, enable, disable, delete, and reset passwords
- **Groups** — list, get, and manage group memberships
- **Hosts** — list and inspect enrolled hosts
- **DNS** — list zones, list and get records (A, AAAA, CNAME, MX, PTR, TXT, SRV, …)
- **Sudo rules** — list and inspect sudo policy rules
- **HBAC rules** — list and inspect host-based access control rules

## Requirements

- FreeIPA 4.6+ or Red Hat IdM 7.6+ (any modern version with the JSON-RPC API)
- Node.js 18+
- An admin account or a dedicated service account with read access to the relevant objects

### FreeIPA permissions

The minimum required privileges depend on which tools you use:

| Area | Required privilege |
|---|---|
| Users | `User Administrators` role or `System: Read Users` permission |
| Groups | `Group Administrators` role or `System: Read Groups` permission |
| Hosts | `Host Administrators` role or `System: Read Hosts` permission |
| DNS | `DNS Administrators` role or `System: Read DNS Entries` permission |
| Sudo | `Sudo Administrator` role or `System: Read Sudo Rules` permission |
| HBAC | `HBAC Administrator` role or `System: Read HBAC Rules` permission |

For read-only usage, you can create a dedicated service account and grant it only the `System: Read *` permissions via an RBAC role.

## Environment variables

| Variable | Required | Default | Description |
|---|---|---|---|
| `FREEIPA_HOST` | Yes | — | FreeIPA server hostname (e.g. `ipa.example.com`) |
| `FREEIPA_PASSWORD` | Yes | — | Password for the FreeIPA account |
| `FREEIPA_USERNAME` | No | `admin` | FreeIPA account username |
| `FREEIPA_ALLOW_SELF_SIGNED` | No | `true` | Allow self-signed TLS certificates (`true`/`false`) |

## Installation

```bash
npm install
npm run build
```

## Claude Desktop configuration

Add to `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "freeipa": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-freeipa/dist/index.js"],
      "env": {
        "FREEIPA_HOST": "ipa.example.com",
        "FREEIPA_USERNAME": "admin",
        "FREEIPA_PASSWORD": "your-password-here",
        "FREEIPA_ALLOW_SELF_SIGNED": "true"
      }
    }
  }
}
```

If you have installed the package globally via `npm install -g mcp-freeipa`:

```json
{
  "mcpServers": {
    "freeipa": {
      "command": "mcp-freeipa",
      "env": {
        "FREEIPA_HOST": "ipa.example.com",
        "FREEIPA_USERNAME": "admin",
        "FREEIPA_PASSWORD": "your-password-here"
      }
    }
  }
}
```

## Available tools

### Users

| Tool | Description |
|---|---|
| `list_users` | List users, with optional uid / cn / mail filters |
| `get_user` | Get full details for a user by UID |
| `enable_user` | Enable a disabled user account |
| `disable_user` | Disable (lock) a user account |
| `add_user` | Create a new user account |
| `delete_user` | Permanently delete a user account |
| `reset_password` | Reset a user's password |

### Groups

| Tool | Description |
|---|---|
| `list_groups` | List groups with optional name filter |
| `get_group` | Get full details for a group by name |
| `add_user_to_group` | Add one or more users to a group |
| `remove_user_from_group` | Remove one or more users from a group |

### Hosts

| Tool | Description |
|---|---|
| `list_hosts` | List enrolled hosts with optional FQDN filter |
| `get_host` | Get full details for a host by FQDN |

### DNS

| Tool | Description |
|---|---|
| `list_dns_zones` | List all DNS zones |
| `list_dns_records` | List all records in a DNS zone |
| `get_dns_record` | Get all record types for a specific name in a zone |

### Sudo

| Tool | Description |
|---|---|
| `list_sudo_rules` | List all sudo rules |
| `get_sudo_rule` | Get full details of a sudo rule |

### HBAC

| Tool | Description |
|---|---|
| `list_hbac_rules` | List all host-based access control rules |
| `get_hbac_rule` | Get full details of an HBAC rule |

## FreeIPA API notes

The server uses the FreeIPA JSON-RPC API (`/ipa/session/json`). It authenticates with a username and password via form-encoded login (`/ipa/session/login_password`) and stores the resulting `ipa_session` cookie for all subsequent requests. The session cookie is refreshed automatically on expiry (HTTP 401).

FreeIPA returns all attribute values as arrays even for scalar fields (e.g., `{"uid": ["john"]}`). The server normalises these automatically, extracting the first element for scalar fields and preserving full arrays for list fields such as `memberof_group`.

## Development

```bash
npm run dev      # run with tsx (no build step)
npm run build    # compile TypeScript to dist/
npm start        # run compiled output
```

## License

See [LICENSE](LICENSE).

TDQS

A3.7/5.0

Scored across 20 tools

Disambiguation5/5

Each tool targets a distinct resource-action pair, such as user lifecycle, group membership, sudo rules, HBAC rules, hosts, and DNS records. List-versus-get and add-versus-remove patterns are clearly differentiated, so an agent is unlikely to confuse tool purposes.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern, with verbs like list, get, add, delete, enable, disable, reset, and remove used predictably. Even multi-word resources like sudo_rule and dns_record maintain a uniform style.

Tool Count4/5

Twenty tools is slightly above the typical well-scoped range, but FreeIPA is a broad domain covering users, groups, sudo, HBAC, hosts, and DNS. Each tool has a clear purpose, and the count feels reasonable rather than bloated.

Completeness3/5

User management is well covered with CRUD, password reset, and enable/disable, plus group membership operations. However, groups lack create/delete tools, and sudo rules, HBAC rules, hosts, and DNS are all read-only, leaving notable management gaps that could dead-end workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues