EntraID MCP Server
Сервер EntraID MCP (Microsoft Graph FastMCP)
Этот проект предоставляет модульный, ресурсоориентированный сервер FastMCP для взаимодействия с Microsoft Graph API. Он разработан для расширяемости, удобства обслуживания и безопасности, поддерживая расширенные запросы для пользователей, журналы входа, статус MFA и привилегированных пользователей.
Функции
Модульная структура ресурсов:
Каждый ресурс (пользователи, журналы входа, MFA и т. д.) реализован в собственном модуле в
src/msgraph_mcp_server/resources/.Легко расширяется за счет новых ресурсов (например, групп, устройств).
Централизованный графический клиент:
Выполняет аутентификацию и инициализацию клиента.
Используется всеми модулями ресурсов.
Комплексные пользовательские операции:
Поиск пользователей по имени/адресу электронной почты.
Получить пользователя по идентификатору.
Вывести список всех привилегированных пользователей (членов роли каталога).
Полный жизненный цикл группы и управление членством:
Создание, чтение, обновление и удаление групп.
Добавлять/удалять участников и владельцев групп.
Поиск и составление списка групп и участников групп.
Управление принципами подачи заявок и обслуживания:
Перечисление, создание, обновление и удаление приложений (регистрация приложений).
Перечисление, создание, обновление и удаление принципалов служб.
Просматривайте назначения ролей приложений и делегированные разрешения как для приложений, так и для субъектов-служб.
Операции журнала входа:
Запросить журналы входа пользователя за последние X дней.
Операции МИД:
Получить статус MFA для пользователя.
Получите статус MFA для всех членов группы.
Управление паролями:
Сбрасывайте пароли пользователей напрямую, используя пользовательские или автоматически сгенерированные безопасные пароли.
Возможность запроса смены пароля при следующем входе в систему.
Помощник по разрешениям:
Предложите соответствующие разрешения Microsoft Graph для выполнения общих задач.
Поиск и изучение доступных разрешений Graph.
Помогает реализовать принцип наименьших привилегий, рекомендуя только необходимые разрешения.
Обработка ошибок и ведение журнала:
Последовательная обработка ошибок и отчетность о ходе выполнения через контекст FastMCP.
Подробное ведение журнала для устранения неполадок.
Безопасность:
Файлы
.envи secret исключены из контроля версий.Использует лучшие практики Microsoft для аутентификации.
Related MCP server: ms-365-admin-mcp-server
Структура проекта
src/msgraph_mcp_server/
├── auth/ # Authentication logic (GraphAuthManager)
├── resources/ # Resource modules (users, signin_logs, mfa, ...)
│ ├── users.py # User operations (search, get by ID, etc.)
│ ├── signin_logs.py # Sign-in log operations
│ ├── mfa.py # MFA status operations
│ ├── permissions_helper.py # Graph permissions utilities and suggestions
│ ├── applications.py # Application (app registration) operations
│ ├── service_principals.py # Service principal operations
│ └── ... # Other resource modules
├── utils/ # Core GraphClient and other ultilities tool, such as password generator..
├── server.py # FastMCP server entry point (registers tools/resources)
├── __init__.py # Package markerИспользование
1. Настройка
Клонируйте репозиторий.
Создайте файл
config/.envс вашими учетными данными Azure AD:TENANT_ID=your-tenant-id CLIENT_ID=your-client-id CLIENT_SECRET=your-client-secret(Необязательно) При необходимости настройте аутентификацию на основе сертификатов.
2. Тестирование и разработка
Вы можете тестировать и разрабатывать свой сервер MCP напрямую, используя FastMCP CLI:
fastmcp dev '/path/to/src/msgraph_mcp_server/server.py'Это запускает интерактивную среду разработки с MCP Inspector. Для получения дополнительной информации и расширенного использования см. документацию FastMCP .
3. Доступные инструменты
Пользовательские инструменты
search_users(query, ctx, limit=10)— Поиск пользователей по имени/адресу электронной почтыget_user_by_id(user_id, ctx)— Получить данные пользователя по IDget_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)— Получить определенную группу по ее идентификаторуsearch_groups_by_name(name, ctx, limit=50)— Поиск групп по отображаемому имениget_group_members(group_id, ctx, limit=100)— Получить участников группы по идентификатору группыcreate_group(ctx, group_data)— Создать новую группу (поля group_data см. ниже)update_group(group_id, ctx, group_data)— Обновить существующую группу (поля: displayName, mailNickname, description, visible)delete_group(group_id, ctx)— Удалить группу по ее идентификатору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)— Удалить владельца из группы
Пример создания/обновления группы:
group_dataдляcreate_groupиupdate_groupдолжен быть словарем с такими ключами, как:displayName(требуется для создания)mailNickname(требуется для создания)description(необязательно)groupTypes(необязательно, например,["Unified"])mailEnabled(необязательно)securityEnabled(необязательно)visibility(необязательно, «Частная» или «Публичная»)owners(необязательно, список идентификаторов пользователей)members(необязательно, список идентификаторов)membershipRule(обязательно для динамических групп)membershipRuleProcessingState(необязательно, «Вкл.» или «Приостановлено»)
Более подробную информацию о поддерживаемых полях и поведении см. в строках документации groups.py
Инструменты для входа в систему
get_user_sign_ins(user_id, ctx, days=7)— Получить журналы входа для пользователя
Инструменты МФА
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)— Получить одну политику условного доступа по ее идентификатору
Инструменты журнала аудита
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 Graphsearch_permissions(search_term, permission_type=None)— Поиск разрешений Microsoft Graph по ключевому слову
Инструменты для применения
list_applications(ctx, limit=100)— Список всех приложений (регистраций приложений) в клиенте с разбиением на страницыget_application_by_id(app_id, ctx)— Получить определенное приложение по его идентификатору объекта (включая назначения ролей приложения и делегированные разрешения)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)— Удалить приложение по его идентификатору объекта
Пример создания/обновления приложения:
app_dataдляcreate_applicationиupdate_applicationдолжен быть словарем с такими ключами, как:displayName(требуется для создания)signInAudience(необязательно)tags(необязательно)identifierUris(необязательно)web(необязательно)api(необязательно)requiredResourceAccess(необязательно)
Инструменты для руководства службой
list_service_principals(ctx, limit=100)— Список всех принципалов служб в клиенте с разбиением на страницыget_service_principal_by_id(sp_id, ctx)— Получить определенный принципал-службу по его идентификатору объекта (включая назначения ролей приложений и делегированные разрешения)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)— Удалить принципал-службу по его идентификатору объекта
Пример создания/обновления принципала службы:
sp_dataдляcreate_service_principalиupdate_service_principalдолжен быть словарем с такими ключами, как:appId(требуется для создания)accountEnabled(необязательно)tags(необязательно)appRoleAssignmentRequired(необязательно)displayName(необязательно)
Пример ресурса
greeting://{name}— Возвращает персонализированное приветствие
Расширение сервера
Добавьте новые модули ресурсов в
resources/(например,groups.py,devices.py).Зарегистрируйте новые инструменты в
server.pyс помощью декоратора FastMCP@mcp.tool().Используйте общий
GraphClientдля всех вызовов API.
Безопасность и передовой опыт
Никогда не передавайте секреты:
.envи другие конфиденциальные файлы игнорируются git.Используйте минимальные привилегии: предоставьте только необходимые разрешения Microsoft Graph для вашего приложения Azure AD.
Аудит и мониторинг: используйте выходные данные журнала для устранения неполадок и мониторинга.
Требуемые разрешения API Graph
API/Разрешение | Тип | Описание |
AuditLog.Read.All | Приложение | Прочитать все данные журнала аудита |
Контекст аутентификации.Читать.Все | Приложение | Прочитать всю информацию о контексте аутентификации |
УправлениеУстройствамиУправляемыеУстройства.Читать.Все | Приложение | Читайте устройства Microsoft Intune |
Каталог.Читать.Все | Приложение | Чтение данных каталога |
Группа.Читать.Все | Приложение | Читать все группы |
GroupMember.Read.All | Приложение | Прочитать все членства в группах |
Группа.ЧитатьЗапись.Все | Приложение | Создание, обновление, удаление групп; управление участниками и владельцами групп |
Политика.Читать.Все | Приложение | Ознакомьтесь с политикой вашей организации. |
РольУправление.Чтение.Каталога | Приложение | Прочитать все настройки RBAC каталога |
Пользователь.Читать.Все | Приложение | Прочитать полные профили всех пользователей |
User-PasswordProfile.ReadWrite.All | Приложение | Наименее привилегированное разрешение на обновление свойства passwordProfile |
Метод аутентификации пользователя.Читать.Все | Приложение | Прочитайте все методы аутентификации пользователей |
Приложение.ЧитатьЗапись.Все | Приложение | Создание, обновление и удаление приложений (регистрации приложений) и принципалов служб |
Примечание: Group.ReadWrite.All требуется для создания, обновления, удаления группы и для добавления/удаления членов группы или владельцев. Group.Read.All и GroupMember.Read.All достаточны для запросов на чтение и членство в группе.
Дополнительно: использование с Клодом или Курсором
Использование с Клодом (антропный)
Чтобы установить и запустить этот сервер как инструмент Claude MCP, используйте:
fastmcp install '/path/to/src/msgraph_mcp_server/server.py' \
--with msgraph-sdk --with azure-identity --with azure-core --with msgraph-core \
-f /path/to/.envЗамените
/path/to/на фактический путь к вашему проекту.Флаг
-fуказывает на ваш файл.env(никогда не передавайте секреты!).
Использование с курсором
Добавьте следующее в ваш .cursor/mcp.json ( не включайте фактические секреты в систему контроля версий):
{
"EntraID MCP Server": {
"command": "uv",
"args": [
"run",
"--with", "azure-core",
"--with", "azure-identity",
"--with", "fastmcp",
"--with", "msgraph-core",
"--with", "msgraph-sdk",
"fastmcp",
"run",
"/path/to/src/msgraph_mcp_server/server.py"
],
"env": {
"TENANT_ID": "<your-tenant-id>",
"CLIENT_ID": "<your-client-id>",
"CLIENT_SECRET": "<your-client-secret>"
}
}
}Замените
/path/to/и переменные среды на ваши фактические значения.Никогда не храните в своем хранилище настоящие секреты!
Лицензия
Массачусетский технологический институт
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA comprehensive server that enables AI applications to interact with Microsoft 365 and Azure AD services through standardized Model Context Protocol interfaces.3MIT
- AlicenseNot gradedqualityAmaintenanceA Model Context Protocol server for Microsoft 365 administration using Graph API application permissions, enabling security monitoring, identity audits, incident response, and service health management.17311MIT
- AlicenseBqualityCmaintenanceA FastMCP server for interacting with Microsoft Entra ID via the Microsoft Graph API, enabling management of users, groups, sign-in logs, MFA, applications, devices, conditional access, and more.48MIT
- FlicenseNot gradedqualityFmaintenanceA skill-based Microsoft 365 admin MCP server that exposes 4 base tools to execute Graph and Power Platform API calls, enabling administrative tasks via natural language.
Related MCP Connectors
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Markdown-first MCP server for Notion API with 8 composite tools and 39 actions.
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hieuttmmo/entraid-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server