内容
# MCP 服务器示例
该项目演示了 Model Context Protocol(MCP)服务器和客户端在 .NET 中的实现,用于管理员工休假天数。它为跟踪、查询和更新员工休假余额提供了一个后端服务,并通过 MCP 工具公开了这些功能。
## 组件
- **SSE** 文件夹包括使用 HTTP 流 / SEE 传输层实现 Model Context Protocol(MCP)的客户端-服务器实现。该解决方案基于 .NET Aspire,包括一个服务器(基于 ASP.NET Core)和一个客户端(一个使用 Blazor 和 Semantic Kernel 构建的 Web 应用程序)。
- **Stdio** 文件夹包括使用标准输入/输出传输层实现 Model Context Protocol(MCP)的客户端-服务器实现。服务器在控制台应用程序中实现。
## 文档
该示例通过一系列博客文章进行文档记录:
- [在代理中使用 Model Context Protocol - 介绍](https://www.developerscantina.com/p/mcp-intro/)
- [在代理中使用 Model Context Protocol - Copilot Studio](https://www.developerscantina.com/p/mcp-copilot-studio/)
- [在代理中使用 Model Context Protocol - 使用 Semantic Kernel 的 Pro-code 代理](https://www.developerscantina.com/p/mcp-semantic-kernel/)
## 入门指南
存储库包含两个版本的相同示例:一个使用 C# 和 .NET 构建,另一个使用 TypeScript 构建。
要运行 .NET 示例,您需要安装以下先决条件:
- [.NET SDK 9.0](https://dotnet.microsoft.com/download)
要运行 TypeScript 示例,您需要安装以下先决条件:
- [Node.js](https://nodejs.org/en/download/)
对于这两种语言,您需要安装以下先决条件:
- [Visual Studio Code](https://code.visualstudio.com/)
- [适用于 Visual Studio Code 的 Azurite 扩展](https://marketplace.visualstudio.com/items?itemName=Azurite.azurite)
## 运行_stdio 示例
### 运行 .NET 示例
1) 通过单击应用程序栏中的按钮,或打开命令调色板(**Ctrl+Shift+P**)并选择 **Azurite: Start Table Service**,启动 Azurite 表服务模拟器。
2) 您可以使用以下配置连接任何客户端应用程序(Visual Studio Code、AI Toolkit、自定义应用程序):
- 命令:`dotnet`
- 参数:`run --project src/csharp/Stdio/MCP.Stdio.Server/MCP.Stdio.Server.csproj`
### 运行 TypeScript 示例
1) 通过单击应用程序栏中的按钮,或打开命令调色板(**Ctrl+Shift+P**)并选择 **Azurite: Start Table Service**,启动 Azurite 表服务模拟器。
2) 您可以使用以下配置连接任何客户端应用程序(Visual Studio Code、AI Toolkit、自定义应用程序):
- 命令:`node`
- 参数:`/src/ts/stdio/server/dist/app.js`
使用前,请确保通过运行以下命令编译 TypeScript 代码:
```bash
cd src/ts/stdio/server
npm run build
```
## 运行 SSE 示例
要运行 SSE 示例,请按照以下步骤操作:
- 将存储库克隆到本地机器。
- 打开 `MCP.SSE.AppHost` 项目中的 `appsettings.json` 文件,并使用以下格式更新 `openAiConnectionName` 属性:
```json
"openAiConnectionName": "Endpoint=https://<your-endpoint>.openai.azure.com/;Key=<your-key>"
```
- 通过单击应用程序栏中的按钮,或打开命令调色板(**Ctrl+Shift+P**)并选择 **Azurite: Start Table Service**,启动 Azurite 表服务模拟器。
- 使用以下命令运行 `MCP.SSE.AppHost` 项目:
```bash
dotnet run --project MCP.SSE.AppHost/MCP.SSE.AppHost.csproj
```
- 项目启动后,将自动打开一个新的浏览器窗口,指向 Aspire 仪表盘。
- 打开一个新的浏览器标签页,并导航到以下 URL:
```plaintext
http://localhost:5291/
```
- 现在,您可以使用 Blazor 应用程序向 LLM 发送提示。您可以使用以下提示之一来触发其中一个 MCP 工具的使用:
```plaintext
"给我一个员工和他们剩余休假天数的列表"
"扣除 Alice Johnson 5 天休假"
```
## 运行 Teams AI 库示例
Teams AI 库示例已作为 Aspire 解决方案的一部分注册。但是,在使用它之前,您必须遵循以下步骤:
- 在 **SSE** 文件夹中打开 **ttk2-agent** 项目
- 将 `.env.example` 文件重命名为 `.env`
- 打开文件并更新变量为您的 Azure OpenAI 服务的正确值:
- `AZURE_OPENAI_API_KEY` 为您的 Azure OpenAI 服务的密钥
- `AZURE_OPENAI_ENDPOINT` 为您的 Azure OpenAI 服务的端点
- `AZURE_OPENAI_API_VERSION` 为 API 版本(请注意,这与模型版本不同,您可以在 Azure OpenAI 门户中找到它)
- `AZURE_OPENAI_MODEL_DEPLOYMENT_NAME` 为您的 Azure OpenAI 模型部署的名称
当 Aspire 仪表盘启动并运行时,您将看到 **ttk2-agent** 项目有两个端点:

您可以通过使用具有较高端口号的端点并在其中添加 `/devtools` 路径来访问代理的测试工具。
例如,在前面的图像中,URL 将是:
```plaintext
http://localhost:54251/devtools/
```