A modern, dual-mode server for supermarket inventory and sales management. Supports both Web API (REST) and console/MCP operation for integration with AI tools like Claude Desktop.
See the McpServer in action with Claude Desktop integration and Web API functionality:
SQ_V2.mp4
The demo showcases dual-mode operation, MCP tool integration with Claude Desktop, and REST API endpoints.
Recent Additions:
- API Versioning - All endpoints now use versioned paths (
/api/v1/...) for future compatibility - Unified Tool Proxy - Native .NET tool execution service replacing external middleware
- Articles with Ingredients - New endpoint for retrieving articles with ingredient information from MongoDB
- Custom Plugin Support - Define custom logic to access your database or API through configurable plugins
- Advanced JSON Viewer - Interactive data visualizer with expand/collapse functionality and intelligent formatting
- Enhanced AI Response Tracking - Each AI response now includes detailed metadata:
- Number of tokens used (prompt + completion)
- Estimated cost breakdown
- Tools utilized during processing
- AI model information
- Dual Mode: Run as a Web API (REST endpoints) or as a console MCP tool provider
- API Versioning: URI-based versioning (
/api/v1/...) for all endpoints - Plugin Architecture: Extensible system supporting multiple data sources and operations
- Supermarket Analytics: Inventory, sales, revenue, category, and stock tools (SQL Server)
- ThirdApi Integration: MongoDB-based operations for prices analysis, content statistics, and article ingredients
- Unified Tool Proxy: Execute any MCP tool via a single endpoint with automatic routing
- Resource-like Endpoints: Real-time inventory, daily summaries, detailed product info
- Advanced Analytics: Complex MongoDB aggregation pipelines for data analysis
- Comprehensive Logging: Serilog-based, file and console
- .NET 9.0+
- SQL Server 2014+ (for Supermarket plugin)
- MongoDB 4.0+ (for ThirdApi plugin, optional)
- Database:
- Run
Database/SetupDatabase.sqlto create tables and sample data
- Run
- Configure:
- Edit
appsettings.jsonwith your SQL Server connection string
- Edit
- Build:
dotnet build
- Run:
- Web API mode:
dotnet run --webapi # or use your published executable with --webapi - Console/MCP mode:
dotnet run # or use with Claude Desktop/Inspector as shown below
- Web API mode:
- Start the server with
--webapi - Base URL:
http://localhost:5000 - API Version:
v1
POST /api/v1/tool- Execute any MCP tool by namePOST /api/v1/search- Search for tools via Azure Cognitive SearchGET /api/v1/tools/schema- Get all available tool schemasGET /api/v1/proxy/health- Tool proxy health check
GET /api/v1/supermarket/products- All productsGET /api/v1/supermarket/products/low-stock?threshold=10- Low stock productsGET /api/v1/supermarket/sales?startDate=2025-01-01&endDate=2025-12-31- Sales dataGET /api/v1/supermarket/revenue?startDate=2025-01-01&endDate=2025-12-31- Total revenueGET /api/v1/supermarket/inventory/status- Inventory statusGET /api/v1/supermarket/inventory/detailed- Detailed inventoryGET /api/v1/supermarket/health- SQL Server health check
GET /api/v1/thirdapi/prices-without-base-item- Prices analysisGET /api/v1/thirdapi/latest-statistics- Processing statisticsGET /api/v1/thirdapi/content-types- Content types summaryGET /api/v1/thirdapi/articles/search?name=MASTI- Find articles by nameGET /api/v1/thirdapi/articles/{contentKey}- Find article by content keyGET /api/v1/thirdapi/articles/ingredients- Articles with ingredientsGET /api/v1/thirdapi/plu-data- PLU data from SAP FioriGET /api/v1/thirdapi/health- MongoDB health check
POST /api/v1/chat/message- Process chat message with AIGET /api/v1/chat/functions- Get available AI functions
GET /health- General system health checkGET /swagger- Swagger UI API documentation
- Start the server without
--webapi - Integrate with Claude Desktop or MCP Inspector
- Example Claude config (
claude_desktop_config.json):{ "mcpServers": { "supermarket": { "command": "dotnet", "args": ["run", "--project", "/path/to/your/McpServer", "--no-build"] } } } - Config file location:
C:\Users\<YourUsername>\AppData\Roaming\Claude
- SQL Server (Supermarket Plugin): Edit
appsettings.json:{ "ConnectionStrings": { "DefaultConnection": "Server=your-server;Database=your-db;Integrated Security=true;TrustServerCertificate=true;" } } - MongoDB (ThirdApi Plugin): Default connection to
mongodb://localhost:27017/ThirdApi- Connects to
ThirdApidatabase - Uses
Pumpcollection for article and price data - Uses
Summarycollection for statistics
- Connects to
- Claude Desktop: See above for config example and file location
The server supports a plugin-based architecture allowing multiple data sources:
- Supermarket Plugin: SQL Server-based inventory and sales management
- ThirdApi Plugin: MongoDB-based price analysis, content statistics, and article ingredients
- Extensible Design: Easy to add new plugins for additional data sources
Each plugin provides:
- MCP tools for AI integration
- REST API endpoints for web clients
- Health monitoring and logging
- Independent data service layer
All API endpoints use URI-based versioning:
/api/v1/supermarket/products
/api/v1/thirdapi/articles/ingredients
/api/v1/tool
- Default Version: v1.0
- Version Header: API responses include
api-supported-versionsheader - Future Versions: New versions (v2, v3) can be added without breaking existing clients
- Logs:
Logs/mcpserver.log(file), console output - Common issues: Check connection string, database setup, and logs for errors
- For MCP/Claude issues: Ensure config file is correct and restart the app after changes
Import the Postman collection and environment from the postman/ folder:
McpServer-Collection.json- All API endpointsMcpServer-Environment.json- Environment variables (protocol, host, port, api_version)
MIT License - see LICENSE file for details.
This project was developed independently on personal equipment and in personal time. It is not affiliated with, endorsed by, or derived from the intellectual property of EPAM Systems or any of its clients. All examples, configurations, and data are generic and intended solely for demonstration and educational purposes.
For more details, see the code and comments. Contributions welcome!