EntraID MCP 服务器(Microsoft Graph FastMCP)
该项目提供了一个模块化、面向资源的 FastMCP 服务器,用于与 Microsoft Graph API 交互。它注重可扩展性、可维护性和安全性,支持针对用户、登录日志、MFA 状态和特权用户的高级查询。
特征
- 模块化资源结构:
- 每个资源(用户、登录日志、MFA 等)都在
src/msgraph_mcp_server/resources/
下的自己的模块中实现。 - 易于扩展新资源(例如,群组、设备)。
- 每个资源(用户、登录日志、MFA 等)都在
- 集中式图形客户端:
- 处理身份验证和客户端初始化。
- 所有资源模块共享。
- 全面的用户操作:
- 按姓名/电子邮件搜索用户。
- 通过 ID 获取用户。
- 列出所有特权用户(目录角色成员)。
- 完整的群组生命周期和会员管理:
- 创建、读取、更新和删除组。
- 添加/删除组成员和所有者。
- 搜索并列出群组和群组成员。
- 应用程序和服务主体管理:
- 列出、创建、更新和删除应用程序(应用程序注册)。
- 列出、创建、更新和删除服务主体。
- 查看应用程序和服务主体的应用角色分配和委派权限。
- 登录日志操作:
- 查询用户最近X天的登录日志。
- MFA 操作:
- 获取用户的 MFA 状态。
- 获取群组所有成员的 MFA 状态。
- 密码管理:
- 使用自定义或自动生成的安全密码直接重置用户密码。
- 下次登录时要求更改密码的选项。
- 权限助手:
- 针对常见任务建议适当的 Microsoft Graph 权限。
- 搜索并探索可用的 Graph 权限。
- 通过仅推荐必要的权限来帮助实现最小特权原则。
- 错误处理和日志记录:
- 通过 FastMCP 上下文进行一致的错误处理和进度报告。
- 用于故障排除的详细日志记录。
- 安全:
.env
和 secret 文件被排除在版本控制之外。- 使用 Microsoft 最佳实践进行身份验证。
项目结构
用法
1. 设置
- 克隆 repo。
- 使用您的 Azure AD 凭据创建一个
config/.env
文件: - (可选)如果需要,设置基于证书的身份验证。
2.测试与开发
您可以使用 FastMCP CLI 直接测试和开发您的 MCP 服务器:
这将启动一个带有 MCP 检查器的交互式开发环境。有关更多信息和高级用法,请参阅FastMCP 文档。
3.可用工具
用户工具
search_users(query, ctx, limit=10)
— 按姓名/电子邮件搜索用户get_user_by_id(user_id, ctx)
— 通过 ID 获取用户详细信息get_privileged_users(ctx)
— 列出具有特权目录角色的所有用户get_user_roles(user_id, ctx)
— 获取分配给用户的所有目录角色get_user_groups(user_id, ctx)
— 获取用户的所有组(包括传递成员资格)
群组工具
get_all_groups(ctx, limit=100)
— 获取所有组(带分页)get_group_by_id(group_id, ctx)
— 通过 ID 获取特定组search_groups_by_name(name, ctx, limit=50)
— 按显示名称搜索群组get_group_members(group_id, ctx, limit=100)
— 通过组 ID 获取组成员create_group(ctx, group_data)
— 创建一个新组(请参阅下面的 group_data 字段)update_group(group_id, ctx, group_data)
— 更新现有组(字段:displayName、mailNickname、description、visibility)delete_group(group_id, ctx)
— 根据 ID 删除组add_group_member(group_id, member_id, ctx)
— 将成员(用户、组、设备等)添加到组remove_group_member(group_id, member_id, ctx)
— 从组中删除成员add_group_owner(group_id, owner_id, ctx)
— 向群组添加所有者remove_group_owner(group_id, owner_id, ctx)
— 从群组中删除所有者
组创建/更新示例:
create_group
和update_group
的group_data
应该是一个带有如下键的字典:displayName
(创建时必需)mailNickname
(创建时必需)description
(可选)groupTypes
(可选,例如["Unified"]
)mailEnabled
(可选)securityEnabled
(可选)visibility
(可选,“私人”或“公开”)owners
(可选,用户 ID 列表)members
(可选,ID 列表)membershipRule
(动态组必需)membershipRuleProcessingState
(可选,“开启”或“暂停”)
有关支持的字段和行为的更多详细信息,请参阅groups.py
文档字符串。
登录日志工具
get_user_sign_ins(user_id, ctx, days=7)
— 获取用户的登录日志
MFA 工具
get_user_mfa_status(user_id, ctx)
— 获取用户的 MFA 状态get_group_mfa_status(group_id, ctx)
— 获取所有组成员的 MFA 状态
设备工具
get_all_managed_devices(filter_os=None)
— 获取所有托管设备(可选择按操作系统过滤)get_managed_devices_by_user(user_id)
— 获取特定用户的所有托管设备
条件访问策略工具
get_conditional_access_policies(ctx)
— 获取所有条件访问策略get_conditional_access_policy_by_id(policy_id, ctx)
— 根据 ID 获取单个条件访问策略
审计日志工具
get_user_audit_logs(user_id, days=30)
— 根据 user_id 获取过去 N 天内用户的所有相关目录审计日志
密码管理工具
reset_user_password_direct(user_id, password=None, require_change_on_next_sign_in=True, generate_password=False, password_length=12)
— 使用特定密码值重置用户密码或生成安全的随机密码
权限帮助工具
suggest_permissions_for_task(task_category, task_name)
— 根据常见映射为特定任务建议 Microsoft Graph 权限list_permission_categories_and_tasks()
— 列出所有可用的权限建议类别和任务get_all_graph_permissions()
— 直接从 Microsoft Graph API 获取所有 Microsoft Graph 权限search_permissions(search_term, permission_type=None)
— 通过关键字搜索 Microsoft Graph 权限
应用工具
list_applications(ctx, limit=100)
— 列出租户中的所有应用程序(应用程序注册),并进行分页get_application_by_id(app_id, ctx)
— 通过对象 ID 获取特定应用程序(包括应用程序角色分配和委托权限)create_application(ctx, app_data)
— 创建一个新应用程序(请参阅下面的 app_data 字段)update_application(app_id, ctx, app_data)
— 更新现有应用程序(字段:displayName、signInAudience、tags、identifierUris、web、api、requiredResourceAccess)delete_application(app_id, ctx)
— 根据对象 ID 删除应用程序
应用程序创建/更新示例:
create_application
和update_application
的app_data
应该是一个包含如下键的字典:displayName
(创建时必需)signInAudience
(可选)tags
(可选)identifierUris
(可选)web
(可选)api
(可选)requiredResourceAccess
(可选)
服务主体工具
list_service_principals(ctx, limit=100)
— 列出租户中的所有服务主体,并分页get_service_principal_by_id(sp_id, ctx)
— 通过对象 ID 获取特定服务主体(包括应用程序角色分配和委派权限)create_service_principal(ctx, sp_data)
— 创建一个新的服务主体(请参阅下面的 sp_data 字段)update_service_principal(sp_id, ctx, sp_data)
— 更新现有服务主体(字段:displayName、accountEnabled、tags、appRoleAssignmentRequired)delete_service_principal(sp_id, ctx)
— 根据对象 ID 删除服务主体
服务主体创建/更新示例:
create_service_principal
和update_service_principal
的sp_data
应该是一个带有如下键的字典:appId
(创建时必需)accountEnabled
(可选)tags
(可选)appRoleAssignmentRequired
(可选)displayName
(可选)
示例资源
greeting://{name}
— 返回个性化问候语
扩展服务器
- 在
resources/
下添加新的资源模块(例如,groups.py
、devices.py
)。 - 使用 FastMCP
@mcp.tool()
装饰器在server.py
中注册新工具。 - 对所有 API 调用使用共享的
GraphClient
。
安全与最佳实践
- 永远不要提交秘密:
.env
和其他敏感文件会被 gitignored。 - **使用最小权限:**仅向 Azure AD 应用授予必要的 Microsoft Graph 权限。
- **审计和监控:**使用日志输出进行故障排除和监控。
所需的 Graph API 权限
API / 权限 | 类型 | 描述 |
---|---|---|
AuditLog.Read.All | 应用 | 读取所有审计日志数据 |
AuthenticationContext.Read.All | 应用 | 读取所有身份验证上下文信息 |
设备管理ManagedDevices.Read.All | 应用 | 读取 Microsoft Intune 设备 |
目录.读取.全部 | 应用 | 读取目录数据 |
群组.读取.全部 | 应用 | 读取所有组 |
组成员.读取.全部 | 应用 | 读取所有群组成员信息 |
组.读写.全部 | 应用 | 创建、更新、删除群组;管理群组成员和所有者 |
策略.读取.全部 | 应用 | 阅读您所在组织的政策 |
角色管理.读取.目录 | 应用 | 读取所有目录 RBAC 设置 |
用户.读取.全部 | 应用 | 阅读所有用户的完整个人资料 |
用户密码配置文件.读写.全部 | 应用 | 更新 passwordProfile 属性的最小权限 |
用户身份验证方法.读取.全部 | 应用 | 读取所有用户的身份验证方法 |
应用程序.读写.全部 | 应用 | 创建、更新和删除应用程序(应用注册)和服务主体 |
**注意:**创建、更新、删除群组以及添加/移除群组成员或所有者都需要Group.ReadWrite.All
权限。对于只读群组和成员资格查询, Group.Read.All
和GroupMember.Read.All
权限已足够。
高级:与 Claude 或 Cursor 一起使用
与 Claude (Anthropic) 一起使用
要安装并运行此服务器作为 Claude MCP 工具,请使用:
- 将
/path/to/
替换为您的实际项目路径。 -f
标志指向您的.env
文件(永不提交秘密!)。
与游标一起使用
将以下内容添加到您的.cursor/mcp.json
(不要在版本控制中包含实际机密):
- 将
/path/to/
和环境变量替换为您的实际值。 - 永远不要将真正的秘密提交到您的存储库!
执照
麻省理工学院
This server cannot be installed
remote-capable server
The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.
用于与 Microsoft Graph API 交互的模块化服务器,可通过自然语言命令管理用户、组、应用程序、登录日志、MFA 状态和其他 Azure AD 资源。
Related MCP Servers
- AsecurityAlicenseAqualityEnables natural language interaction with Azure services through Claude Desktop, supporting resource management, subscription handling, and tenant selection with secure authentication.Last updated -3013TypeScriptMIT License
- AsecurityAlicenseAqualityThis server provides a convenient API for interacting with Azure DevOps services, enabling AI assistants and other tools to manage work items, code repositories, boards, sprints, and more. Built with the Model Context Protocol, it provides a standardized interface for communicating with Azure DevOpsLast updated -9636TypeScriptMIT License
- -securityAlicense-qualityEnables management of Azure Cloud PCs using the Microsoft Graph API, allowing users to list available Cloud PCs in their tenant through Claude Desktop.Last updated -PythonMIT License
- AsecurityAlicenseAqualityA Model Context Protocol server for querying and analyzing Azure resources at scale using Azure Resource Graph, enabling AI assistants to explore and monitor Azure infrastructure.Last updated -15TypeScriptMIT License