内容
# .NET MCP Anycall 移动示例
此解决方案包含一个可流式传输的 HTTP MCP 服务器和一个 Blazor Server 聊天/表格应用,用于 Anycall 手机价格列表。
## 项目
### DotNetMcpSseServer
- 在 `/mcp` 处托管 MCP 工具,并使用 bearer-token 保护。
- 在 `/api/phones` 处托管 REST API。
- 在 SQLite 中存储已过期的 Anycall 价格快照。
- 从 `Features/Api/anycall-mobile-data.json` 初始化第一个 SQLite 快照。
- 原子导入粘贴或上传的 Anycall 纯文本:如果解析有致命行错误,则不更改选定的日期。
- 将选定的快照导出到 Excel。
### DotNetMcpBlazorSample
- 以聊天为主的 UI,位于 `/`。
- 日期感知的电话表格,位于 `/phones`。
- 纯文本快照导入页面,位于 `/imports`。
- 使用 REST 进行表格/导入/导出工作流。
- 使用 MCP 工具获取可靠的聊天事实,可选地通过 `HF_TOKEN` 使用 Hugging Face 措辞。
## 关键端点
- `GET /api/phones?date=yyyy-MM-dd`
- `GET /api/phones/search?brand=Apple&maxPrice=5000000&date=yyyy-MM-dd`
- `GET /api/phones/brands?date=yyyy-MM-dd`
- `GET /api/phones/snapshots`
- `POST /api/phones/snapshots/import-text`
- `POST /api/phones/import/text`
- `GET /api/phones/price-diff?fromDate=yyyy-MM-dd&toDate=yyyy-MM-dd`
- `GET /api/phones/export/excel?date=yyyy-MM-dd`
## MCP 工具
- `search_mobile_phones`
- `get_phone_by_brand`
- `get_phones_by_price_range`
- `list_brands`
- `get_cheapest_phones`
- `list_price_dates`
- `compare_mobile_phone_prices`
大多数电话工具接受可选的 `date` 参数。价格比较接受可选的 `fromDate` 和 `toDate`;如果省略,则比较最新的两个可用快照。
## 配置
服务器 SQLite 数据库:
```json
{
"ConnectionStrings": {
"MobilePhones": "Data Source=Data/anycall-mobile.db"
}
}
```
Blazor MCP 和 Hugging Face 设置:
```json
{
"McpServer": {
"Url": "http://localhost:5194/mcp",
"AuthToken": "my-super-secret-password-123"
},
"HuggingFace": {
"BaseUrl": "https://router.huggingface.co/v1/chat/completions",
"Model": "meta-llama/Llama-3.1-8B-Instruct"
}
}
```
设置 `HF_TOKEN` 或用户机密以使用 Hugging Face。不要提交 `HuggingFace:ApiToken`。
## 运行
```powershell
dotnet run --project DotNetMcpSseServer --launch-profile http
dotnet run --project DotNetMcpBlazorSample --launch-profile http
```
- API 和 Scalar 文档:`http://localhost:5194`
- Blazor 应用:`http://localhost:5095`
## 测试
```powershell
dotnet build DotNetMcpSample.sln
dotnet test DotNetMcpSample.Tests\DotNetMcpSample.Tests.csproj --no-build
```