Skip to main content
Glama
kalevikas

Medical Diagnosis AI MCP

by kalevikas
README.md
# Medical Diagnosis & Literature Analysis AI (MCP & FastAPI)

An AI-powered patient symptom analysis and medical literature research assistant. This repository provides a dual interface: a **Model Context Protocol (MCP)** server for seamless integration with AI agents (like Claude Desktop or Cursor) and a **FastAPI REST API** endpoint. 

It automatically extracts symptoms from natural language text, uses OpenAI's GPT-4 to suggest potential diagnoses/cures, retrieves relevant medical literature directly from PubMed (via NCBI Entrez APIs), and summarizes the scientific abstracts.

---

## Features

- **Symptom Extraction:** Uses regex-based text processing to extract symptoms (headache, fever, nausea, fatigue, pain) from patient descriptions.
- **AI-Driven Diagnosis:** Leverages OpenAI GPT-4 to analyze symptoms, suggest potential diagnoses, and recommend management strategies/cures.
- **PubMed Integration:** Queries NCBI Entrez APIs to fetch titles, authors, dates, URLs, and abstracts of the latest matching scientific literature.
- **Scientific Abstract Summarization:** Utilizes GPT-4 to compile a structured summary of the retrieved PubMed publications.
- **Model Context Protocol (MCP) Support:** Built with `FastMCP` for quick integration with modern LLM clients.
- **FastAPI Endpoint:** Exposes a POST endpoint `/diagnosis` for standard HTTP client integration.

---

## Project Structure

```text
medical_diagnosis_ai_mcp/
├── tools/
│   ├── diagnosis_tools.py     # OpenAI GPT-4 interface for suggesting diagnoses/cures
│   ├── symptom_extractor.py   # Regex-based symptom extractor
│   ├── pubmed_fetcher.py      # NCBI Entrez utility for searching and fetching articles
│   └── summarizer.py          # OpenAI GPT-4 interface for summarizing abstracts
├── mcp_tools.py               # FastMCP server definition & entrypoint
├── fastapi_app.py             # FastAPI server & route handlers
├── pyproject.toml             # Project configuration and basic package dependencies
├── uv.lock                    # Locked dependencies
└── .env                       # Environment variables (OpenAI keys, base URLs)
```

---

## Prerequisites

- **Python:** `3.12` or higher
- **OpenAI API Key** (or OpenRouter/compatible LLM provider API Key)

---

## Installation & Setup

1. **Clone the repository:**
   ```bash
   git clone <your-repo-url>
   cd medical_diagnosis_ai_mcp
   ```

2. **Set up environment variables:**
   Create a `.env` file in the root directory (or edit the existing one) with your credentials:
   ```ini
   OPENAI_API_KEY="your-api-key-here"
   OPENAI_BASE_URL="https://api.openai.com/v1" # Or OpenRouter/alternative endpoint
   ```

3. **Install dependencies:**
   We recommend using [uv](https://github.com/astral-sh/uv) or standard `pip`:
   ```bash
   # Using uv
   uv sync

   # Or using pip
   pip install mcp[cli] fastapi uvicorn openai requests beautifulsoup4 lxml python-dotenv
   ```

---

## How to Run

### 1. Model Context Protocol (MCP) Server
To run the server in development/dev mode or standard mode:

- **Run directly:**
  ```bash
  python mcp_tools.py
  ```
- **Run with MCP CLI (Dev Mode):**
  ```bash
  mcp dev mcp_tools.py
  ```

### 2. FastAPI REST Server
To start the REST API server with live reloading:
```bash
uvicorn fastapi_app:app --reload
```
Once running, the interactive Swagger documentation will be available at `http://127.0.0.1:8000/docs`.

---

## Usage Examples

### FastAPI API Call
Send a POST request to `/diagnosis` to run the complete diagnostic analysis:

**Request:**
```bash
curl -X POST "http://127.0.0.1:8000/diagnosis" \
     -H "Content-Type: application/json" \
     -d '{"description": "The patient complains of severe headache, recurring fever, and extreme fatigue."}'
```

**Response Schema:**
```json
{
  "symptom": [
    "headache",
    "fever",
    "fatigue"
  ],
  "diabnosis": "Based on the symptoms of severe headache, recurring fever, and extreme fatigue, possible diagnoses include...\n\nSuggested cures/treatment...",
  "pubmed_summary": "Unified summary of PubMed studies concerning headache, fever, and fatigue..."
}
```

---

## Integrating with Claude Desktop

To expose the tool in Claude Desktop, add the following configuration to your `claude_desktop_config.json`:

**On Windows:**
File path: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "medical-diagnosis-ai-mcp": {
      "command": "uv",
      "args": [
        "run",
        "--path",
        "C:\\path\\to\\your\\medical_diagnosis_ai_mcp",
        "mcp_tools.py"
      ],
      "env": {
        "OPENAI_API_KEY": "your-api-key-here",
        "OPENAI_BASE_URL": "https://api.openai.com/v1"
      }
    }
  }
}
```
*(Replace `C:\\path\\to\\your\\medical_diagnosis_ai_mcp` with the absolute path to your project folder.)*