Microsoft MCP服务器企业版-C#客户端
一个C#控制台应用程序,连接到Microsoft的企业版MCP(模型上下文协议)服务器,使用Microsoft Graph API对您的Microsoft Entra租户数据进行人工智能查询。
✅ 什么在起作用
- ✅ 连接到Microsoft MCP服务器
https://mcp.svc.cloud.microsoft/enterprise - ✅ 使用客户端凭据通过Azure AD应用程序注册进行身份验证
- ✅ 发现并使用3个MCP工具:
- microsoft_graph_suggest_queries -发现正确的Graph API端点 - microsoft_graph_get -执行Graph API调用 - microsoft_graph_list_properties -探索图形实体模式
- ✅ 自动调用MCP工具的交互式AI聊天
- ✅ 工具调用工作流程:AI根据您的问题确定调用哪些工具
建筑
User Question → Azure OpenAI (gpt-4o) → MCP Tools → Microsoft Graph API → Your Entra Tenant Data该应用程序使用:
- Azure OpenAI:
gpt-4o自然语言理解与工具编排模型 - MCP协议:通过SSE(服务器发送事件)传输连接到Microsoft的企业MCP服务器
- Azure AD身份验证:具有客户端机密凭据的服务主体(应用程序注册)
- 工具调用:AI会自动调用MCP工具来回答您的问题
先决条件
- .NET 8.0 SDK或更高版本
- Azure订阅
- Azure OpenAI资源
gpt-4o模型已部署 - Azure AD应用程序注册(服务主体)
- Microsoft Entra租户(用于查询数据)
安装说明
1.Azure OpenAI资源
创建或使用现有的Azure OpenAI资源:
- 首选 Azure 门户
- 创建/选择Azure OpenAI资源
- 部署
gpt-4o模型 - 从“密钥和终结点”获取API密钥
2.Azure AD应用程序注册
为MCP身份验证创建应用程序注册:
- 首选 Azure Active Directory → 应用程序注册 → 新注册
- 姓名:
MCP Enterprise Client - 支持的帐户类型: 仅此组织目录中的帐户
- 点击 注册
配置API权限
⚠️ 关键的:该应用程序需要Microsoft Graph权限才能查询租户数据:
- 转到您的应用程序→ API权限
- 点击 添加权限 → 微软图形 → 应用程序权限
- 添加这些权限:
- User.Read.All -阅读所有用户的完整个人资料 - Directory.Read.All -读取目录数据 - Group.Read.All -读取所有组(可选,用于组查询) - AuditLog.Read.All -读取审核日志(可选,用于登录活动)
- 点击“授予\[您的租户\]管理员同意” ← 此步骤是必需的!
创建客户端密码
- 首选 证书和秘密 → 新客户机密
- 说明:
MCP Client Secret - 过期时间:选择持续时间(建议24个月)
- 点击 添加
- 立即复制机密值 (你再也看不见了)
3.配置应用程序
该应用程序支持多种身份验证方法(按优先级顺序):
| 方法 | 最适合 | 配置 |
|---|---|---|
| 托管身份 | Azure部署 | UseManagedIdentity=true |
| 证书(商店) | 本地/Windows | CertificateThumbprint |
| 证书(文件) | 容器/Linux | CertificatePath |
| 客户机密 | 开发 | ClientSecret 或环境变量 |
| 公共客户端 | 开发 | 无凭据(如果在Azure AD中启用) |
选项A:环境变量(建议用于本地开发)
通过使用环境变量将秘密隐藏在配置文件之外:
# PowerShell - set for current session
$env:AZURE_CLIENT_SECRET = "your-secret-value"
dotnet run --project McpEnterpriseClient.csproj# Bash/Linux/WSL
export AZURE_CLIENT_SECRET="your-secret-value"
dotnet run --project McpEnterpriseClient.csproj选项B:配置文件
编辑 appsettings.json:
{
"AzureAD": {
"TenantId": "YOUR-TENANT-ID",
"ClientId": "YOUR-CLIENT-ID",
"ClientSecret": "YOUR-CLIENT-SECRET" // Or use CertificateThumbprint
},
"AzureOpenAI": {
"Endpoint": "https://YOUR-RESOURCE.openai.azure.com",
"DeploymentName": "gpt-4o",
"ApiKey": "YOUR-OPENAI-API-KEY"
},
"McpServer": {
"Endpoint": "https://mcp.svc.cloud.microsoft/enterprise"
}
}选项C:公共客户端流(需要Azure AD配置)
如果没有配置凭据,应用程序将使用公共客户端流。这需要:
- 转到Azure门户→ Azure Active Directory→ 应用程序注册→ 您的应用程序
- 首选 认证 刀片
- 在“高级设置”下,设置 允许公共客户端流 到 是
- 点击保存
⚠️ 这不如使用客户端凭据安全。
运行应用程序
cd "c:\Users\ravibh\MCP Client"
dotnet run --project McpEnterpriseClient.csproj查询示例
跑步后,你可以问以下问题:
- “我的租户中有多少用户?”
- “列出所有来宾用户”
- “显示上个月未登录的用户”
- “是否为所有管理员启用了MFA?”
- “\[用户\]属于哪些组?”
AI将:
- 呼叫
microsoft_graph_suggest_queries查找正确的API端点 - 呼叫
microsoft_graph_get执行查询 - 用自然语言呈现结果
故障排除
“在用户令牌中找不到作用域”错误
原因:应用程序注册没有Microsoft Graph API权限或未授予管理员同意。
解决方案:
- 转到Azure门户→ Azure Active Directory→ 应用程序注册
- 选择您的应用程序(客户端ID:a68ffc23-3384-4304-b6ed-355940bd0f2a)
- 首选 API权限
- 确保
User.Read.All和Directory.Read.All已添加 - 点击“授予\[租户\]管理员同意” -这很关键!
- 等待5-10分钟以传播权限
- 请尝试再次运行该应用程序
“调用microsoft_graph_msuggest_queries时出错”错误
原因:参数架构可能与MCP服务器的预期不匹配。
当前状态:应用程序现在正确通过 intentDescription, relativeUrl,以及 entityName 基于所调用工具的参数。
连接问题
- 确保您的应用程序注册具有有效凭据
- 检查客户端密码是否未过期
- 验证租户ID是否正确
- 确保您有互联网连接
mcp.svc.cloud.microsoft
身份验证流程
1. App Registration → Client Credentials Flow
2. Acquire Token (scope: https://mcp.svc.cloud.microsoft/.default)
3. Create SSE Transport with Bearer Token
4. Connect to MCP Server
5. Discover Available Tools
6. User asks question → AI calls MCP tools → MCP Server calls Graph API with delegated permissions关键文件
Program.cs-主应用程序逻辑、MCP客户端创建、聊天循环appsettings.json-配置(凭据、端点)McpEnterpriseClient.csproj-具有NuGet依赖项的项目文件
依赖项
ModelContextProtocolv0.3.0-评测.4-MCP SDKAzure.AI.OpenAIv2.0.0-Azure OpenAI客户端Azure.Identityv1.13.1-Azure AD身份验证Microsoft.Extensions.Configuration-配置管理
了解更多
状态
当前版本:1.0-工具调用功能完整,需要Graph API权限才能访问数据
