loading…
Search for a command to run...
loading…
Provides AI assistants with unified access to on-prem Active Directory via LDAP and Azure AD / Entra ID through the Microsoft Graph API. It enables comprehensiv
Provides AI assistants with unified access to on-prem Active Directory via LDAP and Azure AD / Entra ID through the Microsoft Graph API. It enables comprehensive management and search of users, groups, computers, and cloud devices using 18 specialized tools.
A Model Context Protocol (MCP) server for Microsoft Active Directory, providing AI assistants with access to on-prem AD (via LDAP) and Azure AD / Entra ID (via Microsoft Graph API).
Supports two modes simultaneously:
ldapts library18 tools across five categories:
| Tool | Description |
|---|---|
list_users |
List users with optional name, email, or department filter |
get_user |
Get full user details including decoded UAC flags (on-prem) or full profile (Azure AD) |
get_user_groups |
List all groups a user is a member of |
search_users |
Advanced search by name, email, department, title, phone, or UPN |
| Tool | Description |
|---|---|
list_groups |
List groups with optional name filter |
get_group |
Get group details including member count and decoded group type |
get_group_members |
List all group members; supports recursive nested group expansion (on-prem) |
search_groups |
Search groups by name or description |
| Tool | Description |
|---|---|
list_computers |
List computer accounts with OS, last logon (human-readable), and OU |
get_computer |
Get full computer account details |
search_computers |
Search by name, OS, OU path, DNS hostname, or description |
| Tool | Description |
|---|---|
list_ous |
List OUs with full path, sorted by depth |
get_ou |
Get OU details |
search_ous |
Search OUs by name, description, or parent path |
| Tool | Description |
|---|---|
list_devices |
List Entra ID registered/joined devices with OS and compliance status |
get_device |
Get full device details by object ID |
list_service_principals |
List app registrations and service principals |
get_user_sign_in_activity |
Get last sign-in information for a user |
git clone [email protected]:fredriksknese/mcp-activedirectory.git
cd mcp-activedirectory
npm install
npm run build
The server is configured via environment variables. At least one of AD_HOST or AZURE_TENANT_ID must be set.
| Variable | Required | Default | Description |
|---|---|---|---|
AD_HOST |
Yes | — | Domain controller hostname or IP address |
AD_PORT |
No | 389 |
LDAP port (636 for LDAPS) |
AD_USE_SSL |
No | false |
Use LDAPS (true/false) |
AD_BIND_DN |
Yes | — | Bind DN, e.g. CN=svc-mcp,OU=Service Accounts,DC=corp,DC=example,DC=com |
AD_BIND_PASSWORD |
Yes | — | Bind account password |
AD_BASE_DN |
Yes | — | Base DN for all searches, e.g. DC=corp,DC=example,DC=com |
AD_ALLOW_SELF_SIGNED |
No | true |
Accept self-signed TLS certificates |
| Variable | Required | Default | Description |
|---|---|---|---|
AZURE_TENANT_ID |
Yes | — | Azure AD tenant ID (GUID) |
AZURE_CLIENT_ID |
Yes | — | App registration (client) ID |
AZURE_CLIENT_SECRET |
Yes | — | App registration client secret |
The service account (AD_BIND_DN) needs read access to the directory. The minimum required permissions are:
Recommended: add the service account to the built-in Domain Users group and grant Read delegated permissions on the domain root, or use the built-in Read-only Domain Controllers access pattern.
Attributes read for users: cn, sAMAccountName, displayName, mail, userPrincipalName, department, title, telephoneNumber, mobile, manager, memberOf, userAccountControl, lastLogon, whenCreated, whenChanged, description, distinguishedName, objectGUID
Create an App Registration in Azure AD and grant the following Application permissions (not Delegated):
| Permission | Scope | Required for |
|---|---|---|
User.Read.All |
Microsoft Graph | Reading user profiles and group memberships |
Group.Read.All |
Microsoft Graph | Reading groups and group members |
Device.Read.All |
Microsoft Graph | Reading Entra ID registered/joined devices |
AuditLog.Read.All |
Microsoft Graph | Reading sign-in activity (signInActivity field) |
Grant Admin Consent for all permissions in the Azure portal.
Add to your claude_desktop_config.json:
{
"mcpServers": {
"activedirectory": {
"command": "node",
"args": ["/absolute/path/to/mcp-activedirectory/dist/index.js"],
"env": {
"AD_HOST": "dc01.corp.example.com",
"AD_BIND_DN": "CN=svc-mcp,OU=Service Accounts,DC=corp,DC=example,DC=com",
"AD_BIND_PASSWORD": "your-service-account-password",
"AD_BASE_DN": "DC=corp,DC=example,DC=com"
}
}
}
}
{
"mcpServers": {
"activedirectory": {
"command": "node",
"args": ["/absolute/path/to/mcp-activedirectory/dist/index.js"],
"env": {
"AZURE_TENANT_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"AZURE_CLIENT_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"AZURE_CLIENT_SECRET": "your-client-secret"
}
}
}
}
{
"mcpServers": {
"activedirectory": {
"command": "node",
"args": ["/absolute/path/to/mcp-activedirectory/dist/index.js"],
"env": {
"AD_HOST": "dc01.corp.example.com",
"AD_BIND_DN": "CN=svc-mcp,OU=Service Accounts,DC=corp,DC=example,DC=com",
"AD_BIND_PASSWORD": "your-service-account-password",
"AD_BASE_DN": "DC=corp,DC=example,DC=com",
"AZURE_TENANT_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"AZURE_CLIENT_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"AZURE_CLIENT_SECRET": "your-client-secret"
}
}
}
}
claude mcp add activedirectory -- node /absolute/path/to/mcp-activedirectory/dist/index.js
To use LDAPS (port 636):
"env": {
"AD_HOST": "dc01.corp.example.com",
"AD_PORT": "636",
"AD_USE_SSL": "true",
"AD_ALLOW_SELF_SIGNED": "true"
}
Set AD_ALLOW_SELF_SIGNED to "false" if your domain controller uses a certificate from a trusted CA.
Once connected, you can ask your AI assistant things like:
src/
├── index.ts # Entry point — creates MCP server + STDIO transport
├── ad-client.ts # LDAP client wrapping ldapts for on-prem AD
├── graph-client.ts # Microsoft Graph API client with OAuth2 token caching
└── tools/
├── users.ts # User tools (list, get, search, groups) — AD + Azure
├── groups.ts # Group tools (list, get, members, search) — AD + Azure
├── computers.ts # Computer account tools — on-prem AD only
├── ous.ts # Organizational unit tools — on-prem AD only
└── azure.ts # Azure-specific tools (devices, service principals, sign-in)
npm run dev # Run with tsx (no compilation needed)
npm run build # Compile TypeScript to dist/
npm start # Run compiled output
SEE LICENSE IN LICENSE
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"mcp-activedirectory": {
"command": "npx",
"args": []
}
}
}