
30 秒速读:本篇讲的是开源项目 ActiveDirectoryMCP:一个用 Python 开发的 MCP 服务器,把企业 Active Directory 的用户、组、计算机、组织单位查询,以及域安全审计和诊断能力,封装成 45 个工具,直接交给 Claude Desktop、Claude Code、Cursor 等 AI 客户端调用。结论先行:如果你想让 AI 助手”看懂并操作”公司域控,它是目前最直接的一座桥;但它默认只读、且官方尚未在真实 AD 域上完整验证,生产上线前必须自己做隔离测试。
ActiveDirectoryMCP 软件信息一览
| 项目 | 内容 |
|---|---|
| 项目名称 | ActiveDirectoryMCP |
| 开发语言 | Python(基于 FastMCP) |
| 版本状态 | 滚动更新,截至 2026-10 尚未打正式版 tag(仓库 161 次提交) |
| 运行平台 | Windows / macOS / Linux(Docker 亦可) |
| 许可证 | MIT |
| 核心能力 | 45 个 MCP 工具:用户、组、计算机、组织单位、域安全报告、服务器诊断 |
版本选择:源码运行、HTTP 服务还是 Docker 部署
结论先行:个人在工作站上接 Claude Desktop,选源码 + uv 本地运行(stdio 模式),这是官方 quickstart 路线,步骤最少;需要团队共享或远程调用时,再考虑 HTTP 服务或 Docker 部署。
| 部署方式 | 适合场景 | 结论 |
|---|---|---|
| 源码运行(uv + stdio) | 个人工作站接入 Claude Desktop / Claude Code / Cursor | 推荐:配置最少,AI 客户端直连本地进程 |
| HTTP 服务模式 | 团队共享一个 AD 代理、多客户端远程调用 | 需要配置 API 密钥,适合服务化 |
| Docker 部署 | 统一交付、隔离运行 | 容器以非 root 用户运行 HTTP 服务,监听 8813 端口 |
安装步骤(stdio 接入 Claude Desktop)
- 安装 Python 3.11 或更高版本,并安装
uv(项目的包管理与运行都依赖它)。 - 克隆仓库后进入目录,执行
uv sync --locked安装依赖;可选先跑uv run pytest -q做单元自检,这一步不需要连目录。 - 复制配置模板:
cp ad-config/config.example.json ad-config/ad-config.json,然后按自家域修改active_directory.server、domain、base_dn、bind_dn四处。注意模板示例用的是ldaps://地址,而security.require_secure_connection默认就是 true,LDAPS 是强建议项。 - 用环境变量提供绑定凭据,不要写进配置文件:
export AD_BIND_DN='CN=service-account,OU=Service Accounts,DC=example,DC=com',再用read -rs AD_PASSWORD输入密码(不回显)。生产环境建议改用 Azure Key Vault(uv sync时加--extra azure)。 - 启动:
AD_MCP_CONFIG=ad-config/ad-config.json uv run activedirectory-mcp。stdio 服务会在前台等待客户端连接。最后按项目 README 里的三套示例,把它配进 Claude Desktop(claude_desktop_config.json)、Claude Code(claude mcp add)或 Cursor(.cursor/mcp.json)即可。
装完必改的 4 处安全设置
以下都在 ad-config/ad-config.json 的 security 节或启动参数里,不改就等于把默认策略直接暴露出去:
security.allow_writes(默认 false):读工具开箱即用,但创建、修改、启用、禁用、重置密码、成员关系变更等写工具会被直接拒绝。体感差别:不开,AI 只能”看”域;开了,才有”受控变更”。建议先保持只读跑两周审计,确认无误再开。security.allow_destructive(默认 false):删除类工具的第二道锁,即使开了allow_writes也删不了东西。体感差别:这是防 AI 一句话删错 OU 的救命开关,生产环境建议长期关闭,除非有明确的自动化清理需求。security.max_list_results(默认 1000):列表和报告工具单次最多返回条数。体感差别:域里上万用户时,默认配置跑出来的安全报告是被截断的,先调大再做全量审计。- HTTP 模式的
--host参数:默认0.0.0.0全网监听。体感差别:在工作站上跑必须显式改成--host 127.0.0.1,否则内网任何人都能连你的 AD 代理;HTTP 传输还强制要求 API 密钥(只有GET /health免认证),密钥建议用 SHA-256 摘要形式提供。
注意事项与常见问题
- 它没在真实 AD 上测过。据项目说明,官方测试只覆盖了模拟 LDAP 环境和 OpenLDAP 实验环境,README 明确声明”真实域验证是运营方的责任”。生产使用前,必须在隔离环境对真实域完整验证一遍,不要拿 OpenLDAP 的测试结果直接套生产。
- 密码千万别写进文件。三档方案按安全度排序:环境变量(README 默认做法)→ 随仓库的
.env(启动脚本会自动加载)→ Azure Key Vault。注意 Docker 场景下明文环境变量能被docker inspect看到,生产建议走 Key Vault,也不要把密码提交进任何仓库。 - 连不上域控但服务照常启动是正常的。README 明确说明:初始目录连接失败只打日志、不阻止启动,工具列表照常可用,真正调用时才报错。排查顺序:先
curl /health(免密钥)确认服务活着,再检查 LDAP 地址、Base DN 和服务账户权限。 - Claude Desktop 里提示找不到 uv?把配置里
command的uv换成绝对路径(which uv查),README 有明确说明;也不要用start_server.sh当客户端命令,它会往 stdout 打进度日志,只适合手动启动。 - 服务账户用最小权限专用账户。不要拿域管理员账户做绑定,按实际需要的读/写范围授权,这是 README 单独列”Service account”章节强调的事项。
适合谁:选型判断与替代方案
适合已有 Python、LDAP 和容器运维能力的团队:想把”查 AD、审 AD、改 AD”变成 AI 客户端里的自然语言操作,或者想把域安全审计报告自动化。独立的目录管理员拿它做”AI 审计助手”也顺手。
不适合两种情况:一是只需要基础 LDAP 查询的场景,直接用 ldapsearch、ADUC 或 PowerShell AD 模块更轻,多套一层 MCP 只是徒增复杂度;二是没有 AD 域的纯云 IdP 环境,它走的是 LDAP 协议,不是 Entra 这类云目录的 Graph API,对不上口径。
深度补充(独家整理):本文把散落在 README 各章节的安全开关收拢成一张”四处必改”清单,并给出了”个人 stdio / 团队 HTTP / 交付 Docker”三条部署路线的选型结论,源稿没有这层取舍判断,可直接照着落地。
开源地址
前往 GitHub 查看 ActiveDirectoryMCP
GitHub 国内访问较慢,如打不开可多刷新几次
版本对比与推荐
推荐结论:个人在工作站上接客户端选源码加 uv 本地运行;需要团队共享或远程调用时再考虑 HTTP 服务或 Docker 部署。项目目前为滚动更新、尚未打正式版 tag,生产上线前必须在隔离环境对真实域完整验证一遍。
| 版本部署形态 | 适合场景 | 稳定性 | 推荐结论 |
|---|---|---|---|
| 源码运行加 uv,stdio 模式 | 个人工作站接入客户端 | 滚动更新版本,官方 quickstart 路线 | 推荐:个人首选,配置最少 |
| HTTP 服务模式 | 团队共享一个代理、多客户端远程调用 | 滚动更新版本,需配置 API 密钥 | 推荐:团队共享时选用 |
| Docker 部署 | 统一交付、隔离运行 | 滚动更新版本,容器以非 root 用户运行 | 推荐:统一交付时选用,监听端口以官网为准 |
补充设置与排错指南
补充设置:只读先行、双锁常闭、监听收紧
第一,先保持只读跑两周审计:写工具默认关闭,确认审计无误再开写权限,不要一上来就全开。第二,删除类工具的第二道锁长期关闭:即使开了写权限,删除类工具仍会被拒绝,这是防一句话删错组织单位的救命开关。第三,工作站上跑 HTTP 模式必须显式绑本地回环地址,不要用默认全网监听,同时确认 API 密钥已按要求配置。
常见问题补充
第一,官方测试只覆盖模拟环境与实验环境:真实域验证是运营方的责任,生产使用前必须在隔离环境对真实域完整验证,不要拿实验结果直接套生产。第二,连不上域控但服务照常启动是正常的:初始连接失败只打日志、不阻止启动,真正调用时才报错,排查先确认服务活着,再查地址、Base DN 与服务账户权限。第三,服务账户必须用最小权限专用账户:不要拿域管理员账户做绑定,按实际需要的读或写范围授权。
报错排错
第一,客户端里提示找不到 uv:把配置里命令的 uv 换成绝对路径,用 which 命令查询,不要用手动启动脚本当客户端命令,它会往标准输出打进度日志。第二,调用时才报连接错误:先按排查顺序走,先确认服务本身活着,再查 LDAP 地址与绑定账户。第三,密码相关问题:密码不要写进配置文件,优先用环境变量提供,生产环境建议走官方文档提到的密钥保管方案,也不要把密码提交进任何仓库。

关注「软件教程管家」
回复软件名即取即下:网盘下载链接 + 提取码,一步直达,不用再跳转。
本站资源仅供个人学习交流,请勿用于商业用途。软件与资料版权归原作者所有;如有侵权,请通过公众号「软件教程管家」联系我们,我们将在 24 小时内下架处理。查看免责声明 ›







