Windows 365云PC管理服务器

一个基于MCP协议的Windows 365云PC管理服务器,提供发现、配置和管理云PC的功能,适用于企业IT管理和自动化工作流。

  • by UnitOneAI
  • C#
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 UnitOneAI/MCPAgent

使用说明

Windows 365 MCP服务器

一个全面的MCP服务器,使人工智能助手能够通过Microsoft Graph API发现、调配和管理Windows 365云PC。使用C#构建。NET,完全符合MCP规范2025-06-18。提供了初始工具集,同时我们将继续构建和提供工具。初始版本使用STDIO,而未来的版本也将包括Streamable HTTP作为传输。

目录

✨ 包含内容

🛠️ MCP工具 (人工智能控制动作)

  • 13工具:Windows 365发现、监视、许可、用户管理和策略管理
  • 全面覆盖Windows 365操作,从只读发现到许可证分配

💬 MCP提示 (用户导向工作流)

  • 6提示:云PC故障排除、策略分析、许可证优化、部署规划、用户配置、安全评估
  • 针对常见Windows 365场景的预构建工作流

📊 MCP资源 (实时数据访问)

  • 7资源:云PC列表、单个PC详细信息、配置策略、许可证、用户许可证、组列表、租户摘要
  • 实时库存、健康监测和文档

🔧 MCP实用程序

  • 完成:Windows 365特定的工具和提示自动完成
  • 分页:大型数据集的基于光标的分页
  • 日志记录:符合MCP标准的结构化日志记录

🔐 企业安全

  • DefaultAzureCredential:使用多个凭据源进行安全身份验证
  • STDIO传输:符合MCP的通信协议
  • 结构化日志记录:所有日志都记录到stderr,以正确分离MCP协议

🚀 主要特点

  • ✅ 完全符合MCP -使用官方C#SDK完成MCP 2025-06-18规范的实现
  • ✅ 零配置发现 -通过Microsoft Graph API自动检测云PC和许可证
  • ✅ 生产认证 -支持环境变量的DefaultAzureCredential
  • ✅ 实时数据 -Live Cloud PC清单、策略和许可证信息
  • ✅ 企业安全 -使用结构化日志记录保护STDIO传输
  • ✅ 生产就绪 -使用真实的Windows 365租户和Graph API端点进行测试

📋 先决条件

  • .NET 9.0 SDK
  • 具有活动订阅的Windows 365租户
  • 使用Microsoft Graph权限注册Entra ID应用程序

⚡ 快速开始

跟随这些 精确步骤 要成功设置:

步骤1:克隆和构建项目

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

步骤2:配置Entra ID应用程序注册

  1. 首选 Azure门户 → 应用注册 → 新注册
  2. 名字: Windows 365 MCP Server
  3. 重定向URI:留空(STDIO传输不需要)
  4. 创建后,转到 API权限 并授予这些 应用 权限:
    • CloudPC.ReadWrite.All
    • User.Read.All
    • Group.Read.All
    • Directory.Read.All
    • LicenseAssignment.ReadWrite.All
    • DeviceManagementConfiguration.ReadWrite.All
  5. 点击 授予管理员同意 对于您的组织(这是必需的!)
  6. 首选 证书和秘密 → 新客户机密 → 复制机密值
  7. 复制 应用程序(客户端)ID 和 目录(租户)ID 从“概述”页面

步骤3:配置身份验证(.env文件)

重要:创建一个 .env 项目根目录中的文件:

# Copy the template
cp .env.template .env

# Edit .env with your actual values from Step 2
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

步骤4:测试服务器(可选)

使用MCP检查器测试服务器:


# Test the server directly 
dotnet run --project src/Windows365.Mcp.Server/Windows365.Mcp.Server.csproj

# Or run with MCP Inspector for interactive testing
npx @modelcontextprotocol/inspector dotnet run --project .

这将在以下时间启动MCP检查器 http://localhost:6274/ 使用会话令牌身份验证。

配置MCP检查器(使用您的路径):

  • 运输: STDIO
  • 命令: dotnet
  • 论据: run --project /YOUR-FULL-PATH-HERE/src/Windows365.Mcp.Server
  • 环境变量:
AZURE_TENANT_ID=YOUR-TENANT-ID
AZURE_CLIENT_ID=YOUR-CLIENT-ID
AZURE_CLIENT_SECRET=YOUR-CLIENT-SECRET

步骤5:连接到克劳德桌面

5a。查找您的Claude桌面配置文件

找到配置文件:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 视窗: %APPDATA%\Claude\claude_desktop_config.json

5b。获取项目的绝对路径

# Run this command in your project directory to get the full path
pwd
# Copy the output (example: /Users/yourname/windows-365-mcp-server)

5c。编辑Claude桌面配置

打开配置文件 并添加以下确切配置:

{
  "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"
      }
    }
  }
}

服务器将加载您的 .env 从中设置的路径 WINDOWS365_ENV_PATH。或者,您可以设置 AZURE_TENANT_ID, AZURE_CLIENT_ID,以及 AZURE_CLIENT_SECRET 直接在 env 块而不是使用 .env 文件。

5d。最后的步骤

  1. 保存文件
  2. 完全重新启动克劳德桌面 (退出并重新打开)
  3. 开始新的对话 在克劳德桌面
  4. 验证它是否正常工作问Claude:“你有什么可用的Windows 365工具?”

✅ 成功:你应该看到克劳德回复了一份Windows 365管理工具列表!


🎯 你现在能做什么

设置完成后,您可以向Claude(或其他MCP客户端)询问以下问题:

  • “显示租户中的所有云PC”
  • “检查我们组织中的Windows 365许可证”
  • “帮助我解决云PC问题”
  • “指导我配置新用户”

该服务器提供13个工具、6个提示和7个资源,用于全面的Windows 365管理。


🛠️ MCP工具(AI操作)

总计:13个工具 跨4个类别,实现全面的Windows 365管理:

云PC发现和管理(4个工具)

工具 用途 类型
DiscoverCloudPCs 列出并过滤Windows 365租户中具有搜索功能的云PC 只读
GetCloudPCDetails 获取特定云PC的详细信息 只读
EndGracePeriod 立即结束特定云PC的宽限期 修改
RebootCloudPC 重新启动特定的云PC 修改

用户和组管理(3个工具)

工具 用途 类型
SearchUsers 使用高级过滤功能在Entra ID租户中搜索和列出用户 只读
GetUserDetails 获取特定用户的详细信息,包括许可证分配和成员资格 只读
SearchGroups 在Entra ID租户中搜索并列出具有配置策略关联的组 只读

许可证管理(4个工具)

工具 用途 类型
CheckUserLicenses 检查特定用户的Windows 365许可证分配 只读
GetWindows365Licenses 获取Windows 365许可证,包括已消耗和可用许可证的可用性信息 只读
AssignLicense 为用户分配Windows 365许可证 修改
UnassignLicense 从用户处取消分配Windows 365许可证 修改

资源调配策略管理(2个工具)

工具 用途 类型
GetProvisioningPolicies 获取Windows 365中的所有配置策略 只读
GetProvisioningPolicyDetails 获取有关具有分配的特定配置策略的详细信息 只读

示例:发现所有云PC

{
  "name": "DiscoverCloudPCs",
  "arguments": {
    "top": 50
  }
}

结果:所有具有状态和用户分配的云PC列表

示例:获取特定的云PC详细信息

{
  "name": "GetCloudPCDetails",
  "arguments": {
    "cloudPcId": "12345678-1234-1234-1234-123456789012"
  }
}

结果:完整的云PC信息,包括服务计划、配置策略和设备详细信息

示例:获取所有Windows 365许可证

{
  "name": "GetWindows365Licenses",
  "arguments": {}
}

结果:所有Windows 365许可证的完整列表,包括已消耗和可用的单位,以及可用性计算


💬 MCP提示(引导式工作流)

提示 场景 它的作用
cloud_pc_troubleshoot IT支持 指导Cloud PC诊断工作流程
provisioning_policy_analysis IT管理员 分析和优化资源调配策略
license_optimization 财务/IT 分析和优化许可证分配
deployment_planning IT规划 为Windows 365推出创建部署计划
user_provisioning IT管理员 为新用户指导云PC配置工作流程
security_assessment 安全 评估Windows 365安全配置

Claude中的示例用法

Use the "cloud_pc_troubleshoot" prompt for a user experiencing slow performance

Claude将指导您完成诊断步骤,包括检查云PC状态、服务计划充分性和常见性能问题。


📊 MCP资源(实时数据)

资源 数据类型 内容
windows365://cloudpcs JSON 实时状态的完整云PC清单
windows365://cloudpc/{id} JSON 有关特定Cloud PC的详细信息
windows365://provisioning-policies JSON 所有配置策略及其配置
windows365://licenses JSON 许可证可用性和使用信息
windows365://user-licenses/{userId} JSON 特定用户的许可证详细信息
windows365://groups JSON 租户中的Entra ID组列表
windows365://tenant-summary JSON 租户概述和汇总统计数据

示例:访问实时库存

克劳德可以访问 windows365://cloudpcs 获取实时云PC数据,包括:

  • 所有云PC的当前状态
  • 用户分配和服务计划
  • 配置策略关联
  • 上次修改的时间戳和设备信息

🎯 常见用例

🔍 云PC发现和库存

"Show me all Cloud PCs in our tenant"
→ Uses DiscoverCloudPCs tool
→ Provides complete inventory with status and user assignments

🔧 云PC详细信息和管理

"What are the details of Cloud PC xyz?"
→ Uses GetCloudPCDetails tool
→ Provides comprehensive Cloud PC information including service plan and device details

👥 用户和组管理

"Search for users with 'john' in their name"
→ Uses SearchUsers tool
→ Provides filtered list of users matching search criteria

"List all security groups"
→ Uses SearchGroups tool
→ Shows all groups in the Entra ID tenant

📈 许可证分析与管理

"Show me all Windows 365 licenses with availability information"
→ Uses GetWindows365Licenses tool
→ Provides complete license inventory with consumed and available units

"Check what licenses user xyz has"
→ Uses CheckUserLicenses tool
→ Shows specific user's Windows 365 license assignments

"Assign a Windows 365 license to user xyz"
→ Uses AssignLicense tool (Modifying)
→ Assigns available Windows 365 license to specified user

🏗️ 配置策略管理

"List all provisioning policies"
→ Uses GetProvisioningPolicies tool
→ Shows all policies and their configurations

"Show me details for policy xyz including its assignments"
→ Uses GetProvisioningPolicyDetails tool
→ Provides complete policy information and group assignments

⚠️ 修改操作

"End grace period for Cloud PC xyz"
→ Uses EndGracePeriod tool (Modifying)
→ Immediately ends grace period for failed Cloud PC

"Assign license to user xyz"
→ Uses AssignLicense tool (Modifying)
→ Assigns Windows 365 license to specified user

"Remove Windows 365 license from user xyz"
→ Uses UnassignLicense tool (Modifying)
→ Removes Windows 365 license from specified user

🔧 故障排除

Claude桌面连接问题

问题:Claude Desktop显示连接错误或工具不可用 解决方案:

  1. 检查文件路径:确保所有路径 claude_desktop_config.json 是绝对路径
  2. 验证凭据:确认 AZURE_CLIENT_ID, AZURE_CLIENT_SECRET,以及 AZURE_TENANT_ID 是正确的
  3. 重新启动克劳德桌面:配置更改后始终重新启动
  4. 检查配置语法:确保JSON有效(没有尾随逗号,引号正确)

问题:Claude Desktop日志中的“意外令牌”或JSON解析错误 解决方案:

  1. 验证绝对路径:使用完整路径,而不是相对路径,如 ./ 或 ~/
  2. 检查一下。NET安装:确保。NET 9.0 SDK已安装并位于PATH中
  3. 验证工作目录:确保 WINDOWS365_ENV_PATH 指向一个真实的 .env 文件。

MCP检查员问题

问题:MCP检查器无法连接到服务器 解决方案:

  1. 检查服务器启动:确保服务器构建和运行没有错误
  2. 端口冲突:检查端口6274是否可用
  3. 身份验证错误:使用检查器输出中的正确会话令牌

身份验证问题

问题:“DefaultAzureCredential失败”错误 解决方案:

  1. 环境变量:验证 AZURE_CLIENT_ID, AZURE_CLIENT_SECRET,以及 AZURE_TENANT_ID 已设置
  2. 应用程序注册:确认Entra ID应用程序具有所需的Graph API权限
  3. 管理员同意:确保已授予应用程序管理员同意
  4. 租户访问权限:验证服务主体是否可以访问Windows 365资源

性能问题

问题:响应时间慢或超时 解决方案:

  1. 网络连接:检查与的连接 graph.microsoft.com
  2. 大型数据集:使用分页参数(top,过滤器)用于大型查询
  3. 令牌刷新:身份验证令牌会自动刷新

🏗️ 建筑

Windows365.Mcp.Server/
├── src/Windows365.Mcp.Server/
│   ├── Tools/                  # MCP Tools with [McpServerTool] attributes
│   ├── Prompts/                # MCP Prompts with [McpServerPrompt] attributes
│   ├── Resources/              # MCP Resources with [McpServerResource] attributes
│   ├── Services/               # Microsoft Graph API integration
│   ├── Authentication/         # DefaultAzureCredential provider
│   ├── Utilities/              # MCP utilities (pagination, etc.)
│   └── Program.cs              # MCP Server with STDIO transport
├── .env.template               # Environment variable template
└── README.md                   # This documentation

🔐 身份验证和传输

当前实施:STDIO传输

重要:此服务器当前使用 STDIO传输 使用Azure身份验证,即 建议用于本地托管和受信任的环境 其中可以从环境中安全地检索凭证。

根据 MCP授权规范,使用STDIO传输的实现 不应该 遵循OAuth 2.1授权规范。相反,凭据是通过以下方式从环境中检索的:

  • Azure CLI身份验证 (az login)-建议开发
  • 环境变量 -适用于自动化/服务场景
  • 管理身份 -在Azure中运行时
  • DefaultAzureCredential链 -通过多种身份验证方法自动回退

这种方法适用于:

  • ✅ 当地发展环境
  • ✅ 受信任的服务器部署
  • ✅ 服务到服务身份验证
  • ✅ 具有托管身份的Azure托管应用程序

🔐 安全与合规

DefaultAzureCredential身份验证

  • 多凭据源支持(环境变量、托管身份等)
  • 具有自动刷新功能的安全令牌管理
  • 源代码中没有硬编码凭据

MCP安全最佳实践

  • 用于安全通信的STDIO传输
  • 结构化日志记录到stderr(符合MCP)
  • 输入验证和净化
  • 正确的错误处理和记录

企业控制

  • Microsoft Graph API权限(应用程序级别)
  • Entra ID租户范围访问
  • 通过Entra ID日志完成审计跟踪
  • 通过Microsoft Graph限制速率

📱 MCP客户端示例

查看Windows 365 MCP服务器在不同MCP客户端上的运行情况:

MCP检查员

非常适合测试MCP功能和探索可用工具

克劳德桌面版

具有Windows 365管理功能的生产AI助手

VS Code

集成Windows 365工具的开发环境

🛣️ 路线图

v2.0-HTTP传输和OAuth 2.1支持

我们计划添加 HTTP传输 支持遵循MCP规范的OAuth 2.1授权框架,用于更广泛的部署场景:

OAuth 2.1授权实现

  • OAuth 2.1授权服务器 -完全授权服务器实施
  • 访问令牌验证 -适当的范围管理和令牌验证
  • 动态客户端注册 -支持客户注册工作流
  • 使用PKCE的授权码流 -公共客户端的安全授权

HTTP传输特性

  • HTTP传输层 -用于本地托管之外的远程服务器部署
  • 可流式传输的HTTP -实时更新和流媒体功能
  • RESTful端点 -基于HTTP的MCP协议实现
  • 会话管理 -基于web的客户端的安全会话处理

其他资源调配策略工具

完整的配置策略生命周期管理:

  • 🏗️ 创建资源调配策略 -具有配置选项的完整策略创建
  • 📝 更新配置策略 -修改现有策略设置和分配
  • 🗑️ 删除配置策略 -删除未使用或过时的策略
  • 👥 策略组分配 -分配和管理组到策略的映射

这些工具将通过AI助手提供完整的Windows 365配置策略管理功能。


🧪 测试与验证

此服务器已 使用真实的Windows 365租户进行测试 包括:

✅ 认证 -带Microsoft Graph的DefaultAzureCredentials
✅ API终点 -所有Microsoft Graph调用均已验证
✅ MCP协议 -使用官方C#SDK完全符合规范2025-06-18 ✅ 工具功能 -所有13个MCP工具均已测试并正常工作 ✅ 资源访问 -所有7个MCP资源返回实时数据 ✅ 提示集成 -所有6个MCP提示结构正确

测试结果

  • 1台云PC 发现并检索到详细信息
  • 2个Windows 365许可证SKU 通过灵活的模式匹配检测到(处理不可见的Unicode字符)
  • 配置策略 已成功枚举
  • 所有13个MCP工具 经过测试,工作正常
  • 所有MCP协议方法 (初始化、工具/列表、提示/列表、资源/列表等)工作正常
  • 增强的许可证检测 为企业版、商业版和共享使用版提供全面的SKU模式支持
  • 许可证转让 功能测试和工作

🚀 Windows 365配置流程

了解Windows 365配置工作流程:

graph LR
    A[User] --> B[License Assignment]
    B --> C[Group Membership]  
    C --> D[Provisioning Policy]
    D --> E[Auto-Provisioning]
    E --> F[Cloud PC Ready]
  1. 许可证分配 (立即)
  2. 组成员 (立即)
  3. 策略应用程序 (立即)
  4. 自动配置 (30-60分钟)
  5. 用户访问 (额外5-10分钟)

以下MCP工具可用于Windows 365管理:

云PC发现和管理

  • DiscoverCloudPCs -列出组织中的所有云PC
  • GetCloudPCDetails -获取特定云PC的详细信息
  • EndGracePeriod -结束云PC配置失败的宽限期
  • RebootCloudPC -重新启动特定的云PC

用户和组管理

  • SearchUsers -搜索组织中的用户
  • GetUserDetails -获取特定用户的详细信息
  • SearchGroups -搜索Azure AD组

许可证管理

  • CheckUserLicenses -检查用户的Windows 365许可证分配
  • GetWindows365Licenses -列出租户中可用的Windows 365许可证
  • AssignLicense -为用户分配Windows 365许可证
  • UnassignLicense -从用户中删除Windows 365许可证

配置策略管理

  • GetProvisioningPolicies -列出所有配置策略
  • GetProvisioningPolicyDetails -获取有关特定配置策略的详细信息

这些工具协同工作,以自动化完整的Windows 365配置工作流。


🤝 贡献

我们欢迎捐款!请查看我们的 贡献指南.


📝 许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。