使用说明
MagicCardVault
全栈魔法:用构建的收集卡管理平台。NET 8,具有JWT安全的REST API、双持久性策略、与本地LLM的MCP协议集成以及多平台客户端应用程序。
目录
概述
MagicCardVault是一个后端优先应用程序,它公开了一个RESTful API,用于管理从Kaggle数据集加载的Magic:TheGathering卡数据。它实现了一个干净的分层架构,具有可插拔的持久性(MySQL或内存中)、基于JWT的身份验证,以及由模型上下文协议(MCP)和本地托管的LLM支持的AI层 LM 工作室.
开箱即用提供了三个客户端前端:Console应用程序、WPF桌面应用程序和跨平台应用程序。NET MAUI移动/桌面应用程序。
建筑
┌──────────────────────────────────────────────────┐
│ Client Layer │
│ ConsoleApp │ WPFApp │ MAUIApp │
└───────────────────────┬──────────────────────────┘
│ HTTP / JWT
┌───────────────────────▼──────────────────────────┐
│ REST API (.NET 8) │
│ AuthController │ DataController │ MCPController │
├──────────────────────────────────────────────────┤
│ Business / Service Layer │
│ JwtService │ McpClientService │ KaggleDataLoader │
├──────────────────────────────────────────────────┤
│ MCP Layer (JSON-RPC) │
│ MagicCardMcpServer ◄──► McpClientService │
│ (LM Studio / Local LLM) │
├──────────────────────────────────────────────────┤
│ Persistence Layer │
│ PersistenceManager (Open/Close Pattern) │
│ MemoryRepository │ MySQLRepository │
└──────────────────────────────────────────────────┘
持久层遵循 开闭原则:在MySQL和内存存储之间切换只需要更改配置,不需要修改代码。
特征
- JWT身份验证 --基于无状态令牌的身份验证,具有可配置的颁发者、受众和过期时间。
- 双重坚持 --通过配置在运行时在MySQL和内存存储之间切换。
- Kaggle数据集集成 --启动时自动从本地CSV加载MTG卡数据。
- MCP协议(JSON-RPC) --标准模型上下文协议架构,具有专用的MCP服务器公开工具和编排LLM交互的MCP客户端。
- 本地LLM支持 -与LM Studio集成,用于完全离线的AI供电卡查询,不需要外部API密钥。
- Swagger/OpenAPI -开发模式下提供交互式API文档。
- 多平台客户端 --控制台、WPF和。NET MAUI客户端共享相同的后端合约。
- CORS支持 --在开发过程中配置了广泛的兼容性。
技术栈
| 层 | 技术 |
|---|---|
| 运行时 | 。净值8 |
| API框架 | ASP。NET核心 |
| 身份验证 | JWT承载(Microsoft.AspNetCore.Authentication.JwtBearer) |
| ORM/DB | MySQL(MySQL连接器) |
| 人工智能协议 | 模型上下文协议(MCP)——JSON-RPC |
| 本地LLM | LM Studio(OpenAI兼容端点) |
| API文档 | 摇摆器/摇摆带扣 |
| 桌面用户界面 | WPF(.NET 8) |
| 移动/桌面 | 。毛伊网 |
| 数据来源 | Kaggle MTG卡数据集(CSV) |
项目结构
MagicCardVault/
├── config/ # Environment and deployment config files
├── src/
│ ├── Backend/
│ │ ├── API/
│ │ │ ├── Auth/ # JwtService
│ │ │ ├── Controllers/ # AuthController, DataController, MCPController
│ │ │ ├── Properties/
│ │ │ ├── Services/ # KaggleDataLoader, ConfigurationService
│ │ │ ├── Program.cs
│ │ │ └── appsettings.json
│ │ ├── MCP/
│ │ │ ├── Client/ # McpClientService (LLM orchestrator)
│ │ │ └── Server/ # MagicCardMcpServer (tool definitions)
│ │ └── Persistence/
│ │ ├── Interfaces/ # IRepository<T>
│ │ ├── Memory/ # MemoryRepository
│ │ ├── Models/ # Card model
│ │ ├── MySQL/ # MySQLRepository
│ │ └── PersistenceManager.cs
│ └── Frontend/
│ ├── ConsoleApp/ # CLI client
│ ├── WPFApp/ # Windows desktop client
│ └── MAUIApp/ # Cross-platform mobile/desktop client
└── ProyectoFinal.sln
入门指南
先决条件
- .NET 8 SDK
- MySQL 8+ (可选,如果使用MySQL持久模式)
- LM 工作室 加载模型(可选,MCP/AI功能所需)
配置
编辑 src/Backend/API/appsettings.json (或使用环境变量/用户机密):
{
"Jwt": {
"Secret": "YOUR_SECRET_KEY_MIN_32_CHARACTERS",
"Issuer": "MagicCardVault",
"Audience": "MagicCardVaultUsers",
"ExpirationMinutes": "60"
},
"Persistence": {
"Mode": "Memory"
},
"ConnectionStrings": {
"MySQL": "Server=localhost;Database=magic_card_vault;User=root;Password=yourpassword;"
},
"Kaggle": {
"DatasetPath": "Data/cards.csv"
}
}
持久模式:
Memory--不需要数据库。数据在进程中存储,并在重新启动时重置。MySQL--需要一个正在运行的MySQL实例,其连接字符串已在上面配置。
LM工作室设置:
- 下载并安装 LM 工作室.
- 加载任何与OpenAI兼容的模型。
- 启动本地服务器(默认:
http://localhost:1234). - MCP客户端将自动连接到它。
运行API
cd src/Backend/API
dotnet run
Swagger用户界面将在 http://localhost:53620 在开发模式中。
运行客户端
慰问:
cd src/Frontend/ConsoleApp
dotnet run
WPF:
cd src/Frontend/WPFApp
dotnet run
毛伊:
cd src/Frontend/MAUIApp
dotnet run
对于MAUI,请确保安装了适当的工作负载:
dotnet workload install maui
API 参考
所有受保护的端点都需要 Bearer 令牌在 Authorization 头球
认证
| 方法 | 端点 | 描述 | 身份验证 |
|---|---|---|---|
| 职位 | /api/auth/login |
获取JWT令牌 | 否 |
| 职位 | /api/auth/register |
注册新用户 | 否 |
数据(卡片)
| 方法 | 端点 | 描述 | 身份验证 |
|---|---|---|---|
| 得到 | /api/data/cards |
列出所有卡片 | 是 |
| 得到 | /api/data/cards/{id} |
凭身份证取卡 | 是 |
| 职位 | /api/data/cards |
创建新卡 | 是 |
| PUT | /api/data/cards/{id} |
更新卡片 | 是 |
| 删除 | /api/data/cards/{id} |
删除卡片 | 是 |
MCP/AI
| 方法 | 端点 | 描述 | 身份验证 |
|---|---|---|---|
| 职位 | /api/mcp/query |
向LLM发送自然语言查询 | 是 |
在开发模式下运行时,可通过Swagger在API根目录下获得完整的交互式文档。
MCP和LLM集成
MagicCardVault实现了 模型上下文协议(MCP) 使用JSON-RPC架构:
- MCP服务器(
MagicCardMcpServer) --公开由真实持久层支持的工具(例如,搜索卡片、获取卡片详细信息)。 - MCP客户端(
McpClientService) --充当主持人/协调人。它向本地LLM发送用户提示(通过LM Studio),从模型接收工具调用请求,在MCP服务器上执行这些请求,并返回最终响应。
这种设计使LLM完全离线,并且不需要外部API密钥。任何与OpenAI聊天完成API格式兼容的模型都可以使用。
持久模式
持久层使用 开闭原则 通过a PersistenceManager 它包含对这两个实现的引用,并公开当前活动的 IRepository<Card>:
PersistenceManager
├── MemoryRepository (IRepository<Card>)
└── MySQLRepository (IRepository<Card>)
活动存储库在启动时根据 Persistence:Mode 配置值。切换模式只需要更改配置——这两个实现总是在DI容器中注册的。
贡献
- 分叉存储库
- 创建要素分支:
git checkout -b feature/my-feature - 提交您的更改:
git commit -m 'feat: add my feature' - 推到分支:
git push origin feature/my-feature - 打开拉取请求
请跟随 约定式提交 用于提交消息。
许可证
该项目根据MIT许可证获得许可。请参阅 许可证 文件以获取详细信息。
