使用说明
Windows 365 MCP服务器
一个全面的MCP服务器,使人工智能助手能够通过Microsoft Graph API发现、调配和管理Windows 365云PC。使用C#构建。NET,完全符合MCP规范2025-06-18。提供了初始工具集,同时我们将继续构建和提供工具。初始版本使用STDIO,而未来的版本也将包括Streamable HTTP作为传输。
目录
- 包含内容
- 主要特点
- 先决条件
- 快速开始
- 你现在能做什么
- MCP工具(AI操作)
- MCP提示(引导式工作流)
- MCP资源(实时数据)
- 常见用例
- 故障排除
- 建筑
- 身份验证和传输
- 安全与合规
- MCP客户端示例
- 路线图
- 测试与验证
- Windows 365配置流程
- 贡献
- 许可证
- 关于UNITONE
- 支持与社区
✨ 包含内容
🛠️ 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应用程序注册
- 首选 Azure门户 → 应用注册 → 新注册
- 名字:
Windows 365 MCP Server - 重定向URI:留空(STDIO传输不需要)
- 创建后,转到 API权限 并授予这些 应用 权限:
CloudPC.ReadWrite.AllUser.Read.AllGroup.Read.AllDirectory.Read.AllLicenseAssignment.ReadWrite.AllDeviceManagementConfiguration.ReadWrite.All
- 点击 授予管理员同意 对于您的组织(这是必需的!)
- 首选 证书和秘密 → 新客户机密 → 复制机密值
- 复制 应用程序(客户端)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。最后的步骤
- 保存文件
- 完全重新启动克劳德桌面 (退出并重新打开)
- 开始新的对话 在克劳德桌面
- 验证它是否正常工作问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显示连接错误或工具不可用 解决方案:
- 检查文件路径:确保所有路径
claude_desktop_config.json是绝对路径 - 验证凭据:确认
AZURE_CLIENT_ID,AZURE_CLIENT_SECRET,以及AZURE_TENANT_ID是正确的 - 重新启动克劳德桌面:配置更改后始终重新启动
- 检查配置语法:确保JSON有效(没有尾随逗号,引号正确)
问题:Claude Desktop日志中的“意外令牌”或JSON解析错误 解决方案:
- 验证绝对路径:使用完整路径,而不是相对路径,如
./或~/ - 检查一下。NET安装:确保。NET 9.0 SDK已安装并位于PATH中
- 验证工作目录:确保
WINDOWS365_ENV_PATH指向一个真实的.env文件。
MCP检查员问题
问题:MCP检查器无法连接到服务器 解决方案:
- 检查服务器启动:确保服务器构建和运行没有错误
- 端口冲突:检查端口6274是否可用
- 身份验证错误:使用检查器输出中的正确会话令牌
身份验证问题
问题:“DefaultAzureCredential失败”错误 解决方案:
- 环境变量:验证
AZURE_CLIENT_ID,AZURE_CLIENT_SECRET,以及AZURE_TENANT_ID已设置 - 应用程序注册:确认Entra ID应用程序具有所需的Graph API权限
- 管理员同意:确保已授予应用程序管理员同意
- 租户访问权限:验证服务主体是否可以访问Windows 365资源
性能问题
问题:响应时间慢或超时 解决方案:
- 网络连接:检查与的连接
graph.microsoft.com - 大型数据集:使用分页参数(
top,过滤器)用于大型查询 - 令牌刷新:身份验证令牌会自动刷新
🏗️ 建筑
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]
- 许可证分配 (立即)
- 组成员 (立即)
- 策略应用程序 (立即)
- 自动配置 (30-60分钟)
- 用户访问 (额外5-10分钟)
以下MCP工具可用于Windows 365管理:
云PC发现和管理
DiscoverCloudPCs-列出组织中的所有云PCGetCloudPCDetails-获取特定云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许可证获得许可-请参阅 许可证 文件以获取详细信息。