产品目录MCP服务器
概述
这 产品目录MCP服务器 是a。NET 8 web应用程序,实现了用于管理零售产品库存的模型上下文协议(MCP)服务器。它为AI助手和其他应用程序提供了一个标准化的接口,通过一组定义良好的工具和API与产品数据进行交互。
该场景提供了一个MCP服务器产品目录后端,可以集成到Copilot Studio(请参阅演示指南说明)或Azure AI Foundry演示中。
此场景是更广泛的Azure演示目录的一部分,可在 培训师演示部署.
什么是MCP(模型上下文协议)?
模型上下文协议是一种标准,使人工智能助手能够安全地与外部数据源和工具连接。该服务器充当人工智能模型和产品库存数据之间的桥梁,允许与产品管理操作进行自然语言交互。
建筑
技术栈
- 框架:ASP。NET核心8.0
- 协议:模型上下文协议(MCP)
- 数据存储:基于JSON文件的存储
- 语言:启用了可空引用类型的C#
核心组件
- 程序cs -应用程序入口点和服务配置
- 产品目录工具s.cs -产品操作的MCP工具定义
- 产品服务cs -产品管理的业务逻辑
- Models.cs -数据模型和DTO
- 配置 -服务器配置设置
数据模型
产品由 Product 类具有以下属性:
public class Product
{
public string Name { get; set; } // Product name
public string Description { get; set; } // Product description
public string EAN { get; set; } // European Article Number (barcode)
public decimal Cost { get; set; } // Product price/cost
public int UnitsInStock { get; set; } // Current inventory count
public string Brand { get; set; } // Product manufacturer/brand
public List Categories { get; set; } // Product categories/tags
}特性和功能
核心产品管理
- ✅ 添加产品的 -在库存中创建新产品
- ✅ 更新产品 -修改现有产品信息
- ✅ 删除产品 -从库存中删除产品
- ✅ 产品列表 -检索目录中的所有产品
- ✅ 搜索产品 -按名称、描述、EAN、品牌或类别查找产品
库存管理
- ✅ 库存跟踪 -监控每种产品的库存单位
- ✅ 股票更新 -修改库存水平
- ✅ 低库存检测 -识别库存水平低的产品
数据持久层
- 产品以JSON格式存储在
Data/products.json - 基于文件初始化的内存操作
- 使用锁定机制的线程安全操作
可用的MCP工具
服务器通过MCP协议公开以下工具:
| 工具名称 | 描述 | 参数 |
|---|---|---|
ListProducts | 退回库存中的所有产品 | 无 |
AddProduct | 添加新产品 | 名称、描述、ean、成本、单位库存、品牌?,类别? |
UpdateProduct | 按EAN | EAN+可选字段更新现有产品 |
UpdateStock | 更新库存数量 | ean,newStock |
RemoveProduct | 按EAN | EAN删除产品 |
SearchProducts | 按术语搜索产品 | searchTerm |
GetLowStockProducts | 获取低于阈值 | 阈值的产品 |
工具详细信息
产品列表
返回库存中所有产品的完整列表。
添加产品
将新产品添加到库存中。要求:
- name(string):产品名称
- description(string):产品描述
- Ean(string):Ean条形码
- 成本(小数):产品成本
- unitsInStock(int):库存数量
- brand(字符串,可选):产品品牌
- 类别(字符串,可选):逗号分隔的类别
更新产品
通过EAN更新现有产品。可选参数:
- 名称、描述、成本、品牌、类别
更新库存
按EAN更新特定产品的库存数量。
移除产品
通过EAN从库存中删除产品。
搜索产品
使用与名称、描述、EAN、品牌或类别匹配的搜索词搜索产品。
GetLowstock产品
返回库存水平低于指定阈值(默认值:10个单位)的产品。
项目示意图
项目结构
graph TD
Root[📁 demo-mcp-productcatalog] --> Program[📄 Program.cs]
Root --> Project[📄 product-catalog-mcp-server.csproj]
Root --> Build[📄 build.ps1]
Root --> ReadMe[📄 README.md]
Root --> AppSettings[📄 appsettings.Development.json]
Root --> Config[📁 Configuration]
Config --> ConfigFile[📄 ProductCatalogMCPServerConfiguration.cs]
Root --> Data[📁 Data]
Data --> Products[📄 products.json]
Root --> Services[📁 Services]
Services --> IService[📄 IProductService.cs]
Services --> Service[📄 ProductService.cs]
Root --> Tools[📁 Tools]
Tools --> Models[📄 Models.cs]
Tools --> MCPTools[📄 ProductCatalogTools.cs]
Root --> Props[📁 Properties]
Props --> Launch[📄 launchSettings.json]
Root --> Infra[📁 infra]
Infra --> DeployPS[📄 deploy.ps1]
Infra --> DeploySH[📄 deploy.sh]
Infra --> Bicep[📄 main.bicep]
Infra --> BicepParam[📄 main.bicepparam]
Infra --> InfraReadMe[📄 README.md]
Root --> Bin[📁 bin]
Bin --> Debug1[📁 Debug]
Debug1 --> Net80[📁 net8.0]
Net80 --> Artifacts[📄 Built artifacts...]
Root --> Obj[📁 obj]
Obj --> Debug2[📁 Debug]
Debug2 --> Net80Obj[📁 net8.0]
Net80Obj --> BuildFiles[📄 Build files...]
style Root fill:#e1f5fe
style Program fill:#fff3e0
style Project fill:#fff3e0
style Config fill:#f3e5f5
style Data fill:#e8f5e8
style Services fill:#fff8e1
style Tools fill:#fce4ec
style Props fill:#f1f8e9
style Infra fill:#e0f2f1
style Bin fill:#f5f5f5
style Obj fill:#f5f5f5应用架构
graph LR
subgraph "MCP Server Application"
Entry[Program.cs
Entry Point] --> MCPTools[ProductCatalogTools
MCP Tools]
Entry --> BusinessLogic[ProductService
Business Logic]
MCPTools --> BusinessLogic
DataModels[Models.cs
Data Models] --> MCPTools
DataModels --> BusinessLogic
AppConfig[Configuration
Settings] --> Entry
DataStore[products.json
Data Store] --> BusinessLogic
end
subgraph "Infrastructure"
IaC[bicep templates
IaC] --> Deployment[Azure Deployment]
Scripts[PowerShell Scripts
Automation] --> Deployment
end
subgraph "MCP Protocol"
Assistant[AI Assistant] --> Transport[HTTP Transport]
Transport --> MCPTools
MCPTools --> Operations[Product Operations]
Operations --> Inventory[Inventory Management]
end
style Entry fill:#ffeb3b
style MCPTools fill:#4caf50
style BusinessLogic fill:#2196f3
style DataModels fill:#ff9800
style DataStore fill:#9c27b0
style IaC fill:#607d8b
style Assistant fill:#f44336______________________________________________________________________
选项1:使用DevTunnel从开发环境本地运行应用程序
要快速简单地进行设置,请使用以下五个基本命令:
1.运行.NET应用程序
在您最喜欢的终端/控制台的应用程序文件夹中,执行
dotnet run该应用程序在以下时间启动
2.运行DevTunnel,将本地运行的应用程序暴露给公共URL/端点:
1.登录DevTunnel
devtunnel user login它的作用: 使用您的Microsoft帐户通过DevTunnel服务对您进行身份验证。在创建或管理隧道之前,这是必需的。
2.创建隧道
devtunnel create product-catalog-mcp -a --host-header unchanged它的作用:
- 创建一个名为的新隧道
product-catalog-mcp -a标志使隧道可供任何人访问(匿名访问)--host-header unchanged保留原始主机标头,这对于依赖于特定主机值的应用程序很重要
3.创建端口映射
devtunnel port create product-catalog-mcp -p 47002它的作用: 为创建端口映射 product-catalog-mcp 隧道,将流量转发到本地端口 47002 产品目录MCP服务器正在运行。
4.启动隧道
devtunnel host product-catalog-mcp它的作用: 开始托管 product-catalog-mcp 隧道,使您的本地应用程序可以通过公共URL访问。此命令将显示您可以从任何地方访问产品目录MCP服务器的公共URL。
注: 保持终端窗口 devtunnel host product-catalog-mcp 当你需要激活隧道时打开。在启动隧道之前,请确保您的产品目录MCP服务器正在端口47002上运行。选项2:将应用程序部署到Azure应用程序服务
⬇️ 安装
- Azure开发人员命令行界面-AZD
- 安装AZD时,如果尚未安装,上述以下工具也将安装在您的机器上:
- 二头肌CLI
- 您需要拥有Azure订阅的所有者或参与者访问权限才能部署该场景。
🚀 分4个步骤部署场景:
- 在您的计算机上创建一个新文件夹。
mkdir -p petender/demo-mcp-productcatalog- 接下来,导航到新文件夹。
cd petender/demo-mcp-productcatalog- 接下来,运行
azd init以初始化部署。
azd init -t petender/demo-mcp-productcatalog- 最后,跑
azd up以触发实际部署。
azd up⏩ 注意:您可以通过删除资源组或运行以下命令从Azure门户中删除已部署的场景 azd down 从启动的文件夹中。
关闭
该MCP服务器为人工智能驱动的产品管理应用程序提供了坚实的基础,同时保持了其核心操作的简单性和可靠性。
