企业级MCP服务器C#客户端

一个C#控制台应用程序,连接Microsoft的企业级MCP服务器,通过Microsoft Graph API对Entra租户数据进行AI驱动的查询。

  • by ravindrabhartiya
  • C#
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 ravindrabhartiya/MCPGraphClient

使用说明

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资源:

  1. 首选 Azure 门户
  2. 创建/选择Azure OpenAI资源
  3. 部署 gpt-4o 模型
  4. 从“密钥和终结点”获取API密钥

2.Azure AD应用程序注册

为MCP身份验证创建应用程序注册:

  1. 首选 Azure Active Directory → 应用程序注册 → 新注册
  2. 姓名: MCP Enterprise Client
  3. 支持的帐户类型: 仅此组织目录中的帐户
  4. 点击 注册

配置API权限

⚠️ 关键的:该应用程序需要Microsoft Graph权限才能查询租户数据:

  1. 转到您的应用程序→ API权限

  2. 点击 添加权限 → 微软图形 → 应用程序权限

  3. 添加这些权限:

    • User.Read.All -阅读所有用户的完整个人资料
    • Directory.Read.All -读取目录数据
    • Group.Read.All -读取所有组(可选,用于组查询)
    • AuditLog.Read.All -读取审核日志(可选,用于登录活动)
  4. 点击“授予[您的租户]管理员同意” ← 此步骤是必需的!

创建客户端密码

  1. 首选 证书和秘密 → 新客户机密
  2. 说明: MCP Client Secret
  3. 过期时间:选择持续时间(建议24个月)
  4. 点击 添加
  5. 立即复制机密值 (你再也看不见了)

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配置)

如果没有配置凭据,应用程序将使用公共客户端流。这需要:

  1. 转到Azure门户→ Azure Active Directory→ 应用程序注册→ 您的应用程序
  2. 首选 认证 刀片
  3. 在“高级设置”下,设置 允许公共客户端流 到 是
  4. 点击保存

⚠️ 这不如使用客户端凭据安全。

运行应用程序

cd "c:\Users\ravibh\MCP Client"
dotnet run --project McpEnterpriseClient.csproj

查询示例

跑步后,你可以问以下问题:

  • “我的租户中有多少用户?”
  • “列出所有来宾用户”
  • “显示上个月未登录的用户”
  • “是否为所有管理员启用了MFA?”
  • “[用户]属于哪些组?”

AI将:

  1. 呼叫 microsoft_graph_suggest_queries 查找正确的API端点
  2. 呼叫 microsoft_graph_get 执行查询
  3. 用自然语言呈现结果

故障排除

“在用户令牌中找不到作用域”错误

原因:应用程序注册没有Microsoft Graph API权限或未授予管理员同意。

解决方案:

  1. 转到Azure门户→ Azure Active Directory→ 应用程序注册
  2. 选择您的应用程序(客户端ID:a68ffc23-3384-4304-b6ed-355940bd0f2a)
  3. 首选 API权限
  4. 确保 User.Read.All 和 Directory.Read.All 已添加
  5. 点击“授予[租户]管理员同意” -这很关键!
  6. 等待5-10分钟以传播权限
  7. 请尝试再次运行该应用程序

“调用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依赖项的项目文件

依赖项

  • ModelContextProtocol v0.3.0-评测.4-MCP SDK
  • Azure.AI.OpenAI v2.0.0-Azure OpenAI客户端
  • Azure.Identity v1.13.1-Azure AD身份验证
  • Microsoft.Extensions.Configuration -配置管理

了解更多

状态

当前版本:1.0-工具调用功能完整,需要Graph API权限才能访问数据