一个全面的MCP服务器,使AI助手能够通过Microsoft Graph API发现、配置和管理Windows 365云PC。使用C#/.NET构建,并完全符合MCP规范2025-06-18。提供了初始工具集,我们将继续构建和提供工具。初始版本使用STDIO,而未来版本还将包括可流式传输的HTTP作为传输方式。
按照这些确切步骤进行成功设置:
git clone https://github.com/unitone-ai/windows-365-mcp-server.git
cd windows-365-mcp-server
dotnet restore src/Windows365.Mcp.Server/Windows365.Mcp.Server.csproj
dotnet build src/Windows365.Mcp.Server/Windows365.Mcp.Server.csproj
Windows 365 MCP ServerCloudPC.ReadWrite.AllUser.Read.AllGroup.Read.AllDirectory.Read.AllLicenseAssignment.ReadWrite.AllDeviceManagementConfiguration.ReadWrite.All重要:在项目根目录创建一个.env文件:
# 复制模板
cp .env.template .env
# 使用步骤2中的实际值编辑.env
AZURE_TENANT_ID=your-tenant-id-from-overview-page
AZURE_CLIENT_ID=your-client-id-from-overview-page
AZURE_CLIENT_SECRET=your-client-secret-from-step-6
示例.env文件:
AZURE_TENANT_ID=12345678-1234-1234-1234-123456789012
AZURE_CLIENT_ID=87654321-4321-4321-4321-210987654321
AZURE_CLIENT_SECRET=abcdef123456789~something.very.long.and.secret
使用MCP Inspector测试服务器:
# 直接测试服务器
dotnet run --project src/Windows365.Mcp.Server/Windows365.Mcp.Server.csproj
# 或使用MCP Inspector进行交互式测试
npx @modelcontextprotocol/inspector dotnet run --project .
这将在http://localhost:6274/启动MCP Inspector,并使用会话令牌进行身份验证。
配置MCP Inspector(使用你的路径):
STDIOdotnetrun --project /YOUR-FULL-PATH-HERE/src/Windows365.Mcp.ServerAZURE_TENANT_ID=YOUR-TENANT-ID
AZURE_CLIENT_ID=YOUR-CLIENT-ID
AZURE_CLIENT_SECRET=YOUR-CLIENT-SECRET
定位配置文件:
~/Library/Application Support/Claude/claude_desktop_config.json# 在项目目录中运行此命令以获取完整路径
pwd
# 复制输出(例如:/Users/yourname/windows-365-mcp-server)
打开配置文件并添加以下确切配置:
{
"mcpServers": {
"windows365": {
"command": "dotnet",
"args": ["run", "--project", "/YOUR-FULL-PATH-HERE/windows-365-mcp-server/src/Windows365.Mcp.Server"],
"env": {
"WINDOWS365_ENV_PATH": "/YOUR-FULL-PATH-HERE/windows-365-mcp-server/.env"
}
}
}
}
服务器将从WINDOWS365_ENV_PATH设置的路径加载.env。或者,你可以在env块中直接设置AZURE_TENANT_ID、AZURE_CLIENT_ID和AZURE_CLIENT_SECRET而不是使用.env文件。
✅ 成功:你应该看到Claude响应列出Windows 365管理工具!
完成设置后,你可以向Claude(或其他MCP客户端)询问如下内容:
服务器提供了13个工具、6个提示和7个资源,用于全面的Windows 365管理。
总计:13个工具,分为4类,用于全面的Windows 365管理:
| 工具 | 目的 | 类型 |
|---|---|---|
DiscoverCloudPCs | 列出并筛选Windows 365租户中的云PC,具有搜索功能 | 只读 |
GetCloudPCDetails | 获取特定云PC的详细信息 | 只读 |
EndGracePeriod | 立即结束特定云PC的宽限期 | 修改 |
RebootCloudPC | 重启特定云PC | 修改 |
| 工具 | 目的 | 类型 |
|---|---|---|
SearchUsers | 搜索并列出Entra ID租户中的用户,具有高级过滤功能 | 只读 |
GetUserDetails | 获取特定用户的详细信息,包括许可分配和成员资格 | 只读 |
SearchGroups | 搜索并列出Entra ID租户中的组,具有配置策略关联 | 只读 |
| 工具 | 目的 | 类型 |
|---|---|---|
CheckUserLicenses | 检查特定用户的Windows 365许可分配 | 只读 |
GetWindows365Licenses | 获取Windows 365许可,包括已消耗和可用许可的信息 | 只读 |
AssignLicense | 将Windows 365许可分配给用户 | 修改 |
UnassignLicense | 从用户处取消分配Windows 365许可 | 修改 |
| 工具 | 目的 | 类型 |
|---|---|---|
GetProvisioningPolicies | 获取Windows 365中的所有配置策略 | 只读 |
GetProvisioningPolicyDetails | 获取特定配置策略的详细信息及其分配 | 只读 |
{
"name": "DiscoverCloudPCs",
"arguments": {
"top": 50
}
}
结果:列出所有云PC的状态和用户分配
{
"name": "GetCloudPCDetails",
"arguments": {
"cloudPcId": "12345678-1234-1234-1234-123456789012"
}
}
结果:完整的云PC信息,包括服务计划、配置策略和设备详情
{
"name": "GetWindows365Licenses",
"arguments": {}
}
结果:所有Windows 365许可的完整列表,包括已消耗和可用单位,以及可用性计算
| 提示 | 场景 | 它的作用 |
|---|---|---|
cloud_pc_troubleshoot | IT支持 | 引导通过云PC诊断工作流程 |
provisioning_policy_analysis | IT管理员 | 分析和优化配置策略 |
license_optimization | 财务/IT | 分析和优化许可分配 |
deployment_planning | IT规划 | 为Windows 365推出创建部署计划 |
user_provisioning | IT管理员 | 引导新用户的云PC配置工作流程 |
security_assessment | 安全 | 评估Windows 365安全配置 |
使用“cloud_pc_troubleshoot”提示解决用户遇到的慢性能问题
Claude将引导通过诊断步骤,包括检查云PC状态、服务计划充足性和常见性能问题。
| 资源 | 数据类型 | 内容 |
|---|---|---|
windows365://cloudpcs | JSON | 完整的云PC库存,带有实时状态 |
windows365://cloudpc/{id} | JSON | 特定云PC的详细信息 |
windows365://provisioning-policies | JSON | 所有配置策略及其配置 |
windows365://licenses | JSON | 许可可用性和使用信息 |
windows365://user-licenses/{userId} | JSON | 特定用户的许可详情 |
windows365://groups | JSON | 租户中的Entra ID组列表 |
windows365://tenant-summary | JSON | 租户概述和汇总统计 |
Claude可以访问windows365://cloudpcs以获取实时云PC数据,包括:
“显示我们租户中的所有云PC”
→ 使用DiscoverCloudPCs工具
→ 提供完整的库存,包括状态和用户分配
“云PC xyz的详细信息是什么?”
→ 使用GetCloudPCDetails工具
→ 提供完整的云PC信息,包括服务计划和设备详情
“搜索名字中有‘john’的用户”
→ 使用SearchUsers工具
→ 提供匹配搜索条件的用户过滤列表
“列出所有安全组”
→ 使用SearchGroups工具
→ 显示Entra ID租户中的所有组
“显示所有Windows 365许可及其可用性信息”
→ 使用GetWindows365Licenses工具
→ 提供完整的许可库存,包括已消耗和可用单位
“检查用户xyz拥有的许可”
→ 使用CheckUserLicenses工具
→ 显示特定用户的Windows 365许可分配
“将Windows 365许可分配给用户xyz”
→ 使用AssignLicense工具(修改)
→ 将可用的Windows 365许可分配给指定用户
“列出所有配置策略”
→ 使用GetProvisioningPolicies工具
→ 显示所有策略及其配置
“显示策略xyz的详细信息及其分配”
→ 使用GetProvisioningPolicyDetails工具
→ 提供完整的策略信息和组分配
“结束云PC xyz的宽限期”
→ 使用EndGracePeriod工具(修改)
→ 立即结束失败云PC的宽限期
“将许可分配给用户xyz”
→ 使用AssignLicense工具(修改)
→ 将Windows 365许可分配给指定用户
“从用户xyz移除Windows 365许可”
→ 使用UnassignLicense工具(修改)
→ 从指定用户移除Windows 365许可
问题:Claude桌面显示连接错误或工具不可用 解决方案:
claude_desktop_config.json中的所有路径都是绝对路径AZURE_CLIENT_ID、AZURE_CLIENT_SECRET和AZURE_TENANT_ID正确