\# 语义内核MCP客户端
一个先进的AI助手,它将模型上下文协议(MCP)工具与微软语义内核相连接,实现了动态工具发现和基于智能代理的交互。
🚀 功能特点
- 简洁而优秀的架构采用依赖注入、托管服务和结构化日志记录构建
- 动态工具加载自动发现并加载所有可用的MCP工具
- 语义核集成使用Microsoft Semantic Kernel进行智能对话处理
- 灵活的AI服务提供商支持与OpenAI和Azure OpenAI均兼容
- 交互式聊天界面基于控制台的聊天体验
- 强大的错误处理全程全面的错误处理和日志记录
- 配置管理基于环境变量的安全配置
📋 先决条件
- .NET 8.0 SDK 或更高版本
- 一个OpenAI API密钥或Azure OpenAI服务端点
- 访问MCP服务器
⚙️ 配置
1. 设置环境变量
对于OpenAI:
# Windows (PowerShell)
$env:OPENAI_API_KEY="your-openai-api-key-here"
# Windows (Command Prompt)
set OPENAI_API_KEY=your-openai-api-key-here
# Linux/macOS
export OPENAI_API_KEY="your-openai-api-key-here"对于Azure OpenAI:
# Windows (PowerShell)
$env:AZURE_OPENAI_API_KEY="your-azure-openai-key"
# Windows (Command Prompt)
set AZURE_OPENAI_API_KEY=your-azure-openai-key
# Linux/macOS
export AZURE_OPENAI_API_KEY="your-azure-openai-key"2. 配置MCP服务器和模型(可选)
编辑 appsettings.json 进行定制:
{
"SemanticKernel": {
"OpenAI": {
"ModelId": "gpt-5-mini"
},
"AzureOpenAI": {
"Endpoint": "https://your-resource.openai.azure.com/",
"DeploymentName": "gpt-5-mini"
}
},
"McpServer": {
"Endpoint": "http://your-mcp-server-url/mcp",
"Name": "LocalHttpClient",
"ConnectionTimeoutSeconds": 15
}
}🏃♂️ 运行应用程序
方法1:设置环境变量并运行
# Set the API key
export OPENAI_API_KEY="your-api-key"
# Build and run
dotnet build
dotnet run方法2:使用内联环境变量运行
# Linux/macOS
OPENAI_API_KEY="your-api-key" dotnet run
# Windows (PowerShell)
$env:OPENAI_API_KEY="your-api-key"; dotnet run方法3:使用.env文件(用于开发)
创建一个 .env 项目根目录下的文件:
OPENAI_API_KEY=your-api-key-here💬 使用方法
一旦运行起来,您就可以用自然语言与AI助手进行交互:
- 一般对话提问或请求帮助
- 工具发现询问“有哪些可用的工具?”或“列出工具”
- 工具使用该人工智能将根据您的请求自动使用合适的MCP工具
- 退出输入“exit”或“quit”以停止应用程序
示例交互
👤 You: What tools do you have available?
🤖 Assistant: I'll check what MCP tools are available for you...
👤 You: Can you help me analyze this data using your tools?
🤖 Assistant: I'll use the appropriate analysis tools to help you...
👤 You: Please create a report based on the current data
🤖 Assistant: I'll generate a report using the available MCP tools...🏗️ 建筑学
该应用程序遵循了一种简洁、良好的架构设计:
Simple.Mcp.Http.Client/
├── Configuration/ # Configuration models
├── Extensions/ # Dependency injection extensions
├── HostedServices/ # Background services
├── Plugins/ # Semantic Kernel plugins
├── Services/ # Application services
│ ├── IMcpService # MCP client abstraction
│ ├── ISemanticKernelService # SK abstraction
│ └── IApplicationService # Main app orchestration
├── Program.cs # Application entry point
└── appsettings.json # Configuration file关键组件
- McpService(可翻译为“MCP服务”)管理与MCP服务器的连接和工具调用
- McpTools插件将MCP工具桥接为语义内核函数
- 语义内核服务处理AI对话并自动调用工具
- 应用程序服务(ApplicationService)协调用户体验
🔧 定制化
添加自定义插件
您可以通过添加自定义的语义内核插件来扩展应用程序:
// In ServiceCollectionExtensions.cs
kernel.Plugins.AddFromType("CustomPlugin");修改工具行为
通过修改来定制MCP工具向内核呈现的方式 McpToolsPlugin.cs。
配置选项
- 环境变量:
OPENAI_API_KEY,AZURE_OPENAI_API_KEY - 设置文件自定义模型和MCP服务器
appsettings.json
📝 日志记录
该应用程序提供了不同级别的结构化日志记录功能:
- 信息一般应用流程及成功操作
- 警告非关键问题及回退行为
- 错误不会导致应用程序崩溃的错误
- 调试详细的调试信息(默认禁用)
🤝 错误处理
该应用程序包含全面的错误处理功能:
- 连接到MCP服务器失败的情况会被记录并报告
- 工具调用错误得到了优雅的处理
- 人工智能服务故障包括提供有用的错误信息
- 启动时检测到配置问题
📦 依赖项
- Microsoft.SemanticKernel(微软语义核心)核心AI协同调度
- 模型上下文协议MCP客户端实现
- Microsoft.Extensions.Hosting(微软扩展托管服务)应用程序托管
- Microsoft.Extensions.Logging(微软扩展日志记录)结构化日志记录
- Microsoft.Extensions.Configuration(微软扩展配置)配置管理
🔐 安全考量
- ✅ API密钥存储在环境变量中 (不在源代码中)
- ✅ 配置文件中无敏感数据
- ✅ 安全凭证管理
- 监控并记录工具使用情况以进行安全审计
- 为生产环境部署实施速率限制
- 在生产环境中验证MCP服务器证书
📚 接下来步骤
这个基础可以扩展为:
- 远程访问的Web API接口
- 对话历史的数据库集成
- 支持多个MCP服务器
- 自定义工具认证
- 指标与监控集成
- 用于部署的容器化
🚨 故障排除
“未找到AI服务配置”错误
- 确保
OPENAI_API_KEY或者AZURE_OPENAI_API_KEY环境变量已设置 - 验证API密钥是否有效且信用额度/配额充足
MCP连接问题
- 检查您的MCP服务器是否正在运行且可访问
- 验证终端URL在
appsettings.json是正确的 - 检查网络连接和防火墙设置
