MCP server and daily AI order routines
A read-only MCP server in C#/.NET exposes order and case data to AI agents. Daily routines read ~50 customer emails, look up the order through MCP and pre-draft a reply for Operations to approve. Human in the loop, far fewer manual lookups.
The problem
Order data lived in Azure SQL behind a legacy Microsoft Access front end. Answering a support question — which orders are delayed, what happened to a given order — meant navigating the database by hand. The goal was to let AI assistants answer those questions without building a custom API and without any path to write to production.
What I built
- Microsoft Data API builder as an MCP server, containerised and deployed onto an Azure App Service plan the business already paid for. One JSON config file, one Dockerfile.
- Three read-only tools — describe entities, read records, aggregate records — over four database views that form a reporting schema.
- Claude and ChatGPT connect over HTTPS, with IP allowlists per vendor.
- Daily routines that read the morning’s customer emails, look up each order through MCP and pre-draft a reply that Operations approves before it is sent.
Decisions that mattered
- Read-only is enforced in configuration, with every write operation disabled — not left to code review.
- Schema validation before deploy keeps the views and the config in step.
- Descriptions are prompts. Tool and entity descriptions such as “Never guess: if no rows are returned, say so” noticeably improved answer quality.
What broke, and the fix
Eight small issues ate the deployment time: where the config file had to live, the container port, role-based health checks failing, and very different IP requirements between vendors — a single range for Anthropic, 138 CIDR blocks for OpenAI, handled with a script.
Outcome
Support answers order questions in seconds without opening Access. App Service memory went from about 55% to 63%; the added monthly cost is $0. Build time: two hours, plus one evening of troubleshooting.