MedRecPro Drug Label Server
Search and export FDA drug labels by brand name, generic ingredient, or UNII code.
★ 4Apache-2.0search
Install
Config snippet generator goes here (5 client tabs)
README
# MedRecPro
MedRecPro is a pharmaceutical structured product label (SPL) management platform built with ASP.NET Core. It provides secure access to FDA drug label data through a RESTful API, an AI-powered chat interface, and a Model Context Protocol (MCP) server for integration with AI assistants like Claude.
## Specifications
- **HL7 Version**: HL7 Dec 2023 https://www.fda.gov/media/84201/download
- **Info**: https://www.fda.gov/industry/fda-data-standards-advisory-board/structured-product-labeling-resources
- **SPL Data Source**: https://dailymed.nlm.nih.gov/dailymed/spl-resources-all-drug-labels.cfm
- **Orange Book Data Source**: https://www.fda.gov/drugs/drug-approvals-and-databases/approved-drug-products-therapeutic-equivalence-evaluations-orange-book
## Technology Stack
- **Runtime**: ASP.NET Core (.NET 8.0 LTS)
- **Database**: Azure SQL Server (Serverless free tier) with Dapper + Entity Framework Core
- **Authentication**: Cookie-based auth with Google and Microsoft OAuth providers; JWT bearer tokens for API access; McpBearer JWT scheme for MCP server integration (claims normalized to standard JWT short names: `sub`, `name`, `email`)
- **AI Integration**: Claude API for natural language query interpretation and synthesis
- **MCP Protocol**: Model Context Protocol server with OAuth 2.1 (PKCE S256) for Claude.ai connector integration
- **Hosting**: Azure App Service (Windows, IIS) with Cloudflare CDN/WAF/DNS
- **Secrets**: Azure Key Vault
- **API Documentation**: Swagger/OpenAPI
- **SPL Rendering**: RazorLight templates for SPL XML-to-HTML generation
## Solution Architecture
The solution consists of five projects deployed to a single Azure App Service using IIS virtual applications:
```
Cloudflare (CDN/WAF/DNS)
|
v
Azure App Service: "MedRecPro" (Windows, IIS)
+--------------------------------------------------------+
| |
| / site\wwwroot MedRecProStatic |
| /api site\wwwroot\api MedRecPro API |
| /mcp site\wwwroot\mcp MedRecProMCP |
| |
+--------------------------------------------------------+
|
v
Azure Key Vault
(medrecprovault)
```
| Virtual Path | Project | Purpose |
|---|---|---|
| `/` | **MedRecProStatic** | Static site, marketing pages, AI chat UI, OAuth/MCP discovery metadata |
| `/api` | **MedRecPro** | REST API: SPL parsing, label CRUD, authentication, AI interpret/synthesize |
| `/mcp` | **MedRecProMCP** | MCP server: OAuth 2.1 gateway for Claude.ai integration |
| _(CLI)_ | **MedRecProConsole** | Standalone bulk import utility (SPL labels and FDA Orange Book) |
| _(library)_ | **MedRecProImportClass** | Shared class library: entity models, parsing services, and EF Core context for SPL and Orange Book import |
| _(test)_ | **MedRecProTest** | Unit and integration tests |
### How the Projects Relate
**MedRecProStatic** is the user-facing front end. Its AI chat interface (`/Home/Chat`) communicates with the API using a request-interpret-execute-synthesize pattern: user queries are sent to the API's AI endpoints, which use Claude to map natural language to API calls. The static site also serves OAuth/MCP discovery metadata (`/.well-known/*`) at the domain root on behalf of the MCP server, because the MCP SDK resolves discovery URLs relative to the domain root rather than the `/mcp` path.
**MedRecPro (API)** is the core backend. It handles SPL XML parsing and import, label data CRUD, user authentication, AI query interpretation via Claude, database views for navigation, and SPL document rendering via RazorLight templates.
**MedRecProMCP** is an OAuth 2.1 gateway that exposes MedRecPro API capabilities as MCP tools. When Claude.ai connects, it authenticates users through Google/Microsoft OAuth, resolves upstream identity provider identities to numeric database user IDs (auto-provisioning new users if needed), then forwards authenticated MCP JWTs to the MedRecPro API. It uses JWT tokens, PKCE (S256), Dynamic Client Registration (RFC 7591), and a shared PKSecret for encrypted user ID exchange with the API.
## Repository File Structure
```
MedRecPro/ # Root repository
README.md # This file
.gitignore
LICENSE.txt
MedRecPro/ # ASP.NET Core Web API
Program.cs # App startup, DI, middleware
MedRecPro.csproj # .NET 8.0 project file
appsettings.json # Base configuration
appsettings.Development.json # Local dev overrides
web.Release.config # IIS release config
Controllers/
ApiControllerBase.cs # Base controller (route prefix, #if DEBUG directives)