Bloodtest MCP Server
A comprehensive health coaching system that combines blood test analysis with evidence-based nutritional therapy recommendations, powered by Retrieval-Augmented Generation (RAG).
README
Bloodtest MCP Server
A comprehensive health coaching system that combines blood test analysis with evidence-based nutritional therapy recommendations, powered by Retrieval-Augmented Generation (RAG) technology.
๐ Live Endpoints:
- Primary: https://supplement-therapy.up.railway.app (Active)
- New Domain: https://bloodtest-mcp.up.railway.app (Being configured)
Table of Contents
Overview
Key Features
- Blood Test Analysis: Get optimal ranges for 8+ key health markers based on functional medicine
- Personalized Recommendations: Evidence-based supplement and lifestyle advice from German medical literature
- RAG-Powered Knowledge Base: Search through indexed medical texts using FAISS vector database
- MCP Protocol Support: Integrate with Claude Desktop and other MCP-compatible clients
- Multi-format Support: Process blood test results in PDF, image, and text formats
- RESTful API: Access blood test reference values programmatically
- Health Coaching Workflows: Comprehensive assessment and recommendation generation
Technical Stack
- Framework: FastMCP with FastAPI integration
- AI/ML: LangChain, sentence-transformers, FAISS
- File Processing: PyPDF, python-multipart
- Configuration: YAML-based workflow definitions
- Deployment: Docker with Railway cloud deployment
- Language: Python 3.12+
User Manual
Getting Started
-
Access the Production System
Current Active Endpoint:
- Web Interface: https://supplement-therapy.up.railway.app
- API Base URL:
https://supplement-therapy.up.railway.app - MCP SSE Endpoint:
https://supplement-therapy.up.railway.app/sse - Health Check:
https://supplement-therapy.up.railway.app/health
New Endpoint (being configured):
https://bloodtest-mcp.up.railway.app- Will be available once Railway configuration is complete
-
Authentication
- Currently, no authentication is required for public endpoints
- For production use, implement Bearer token authentication
Claude Desktop Integration
To use this MCP server with Claude Desktop:
-
Open Claude Desktop Configuration
- Click on Claude menu (macOS) or File menu (Windows)
- Select Settings โ Developer โ Edit Config
-
Add Server Configuration Add the following to your
claude_desktop_config.json:{ "mcpServers": { "bloodtest-health-coach": { "command": "npx", "args": [ "-y", "@modelcontextprotocol/server-sse", "https://supplement-therapy.up.railway.app/sse" ], "env": {} } } }Note: Once
bloodtest-mcp.up.railway.appis active, update the URL tohttps://bloodtest-mcp.up.railway.app/sse -
Save and Restart Claude Desktop
- Save the configuration file
- Completely quit and restart Claude Desktop
- The health coach tools should now appear in Claude
Configuration File Locations:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Using the Health Coach
-
Upload Blood Test Results
- Supported formats: PDF, JPG, PNG
- German lab reports are automatically parsed
- Optimal ranges are compared against your results
-
Complete Health Assessment
- Provide demographic information
- Describe current symptoms and health concerns
- Set your health goals and priorities
-
Receive Personalized Recommendations
- Supplement protocols with specific dosages and timing
- Dietary modifications based on your deficiencies
- Lifestyle interventions for optimal health
- All recommendations include citations from medical literature
Available MCP Tools
-
get_book_info- Returns metadata about loaded medical books and RAG status
- Shows available workflows and system capabilities
-
list_workflows- Lists all available health coaching workflows
- Each workflow has a specific focus area
-
supplement_therapy- Main health coaching workflow
- Provides comprehensive supplement recommendations
- Requires patient assessment data
-
search_book_knowledge- Search through indexed medical knowledge base
- Returns relevant passages with page references
- Example: "optimal ferritin levels for women"
-
sequential_thinking- Multi-step reasoning for complex health analysis
- Useful for differential diagnosis and complex cases
Developer Manual
Prerequisites
- Python 3.12 or higher
- Docker (optional, for containerized deployment)
- Git
Installation
-
Clone the Repository
git clone https://github.com/longevitycoach/bloodtest-mcp-server.git cd bloodtest-mcp-server -
Create Virtual Environment
python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate -
Install Dependencies
pip install -r requirements.txt
Development Setup
-
Initialize the RAG Knowledge Base
# Place PDF files in resources/books directory INDEX_NAME="supplement-therapy" PDF_DIRECTORY="resources/books" python scripts/init_rag.py -
Configure the Application
- Edit
resources/structure.yamlto customize workflows - Ensure
rag.config.index_namematches your INDEX_NAME
- Edit
-
Run the Development Server
# Run MCP server with SSE transport python server.py --host 0.0.0.0 --port 8000 # Or run integrated server (MCP + API) python integrated_server.py --host 0.0.0.0 --port 8000 # Or run just the FastAPI server python main.py
API Documentation
Base Endpoints
GET /- API information and available endpointsGET /health- Health check endpointGET /parameters- List all blood test parametersGET /reference/{parameter}- Get reference range for a parameterGET /sse- MCP Server-Sent Events endpoint
Example API Usage
import requests
# Get all available parameters
response = requests.get("https://supplement-therapy.up.railway.app/parameters")
print("Available parameters:", response.json()["parameters"])
# Get reference range for ferritin
response = requests.get(
"https://supplement-therapy.up.railway.app/reference/ferritin",
params={"sex": "female"}
)
print("Ferritin reference:", response.json())
Blood Test Parameters Supported
| Parameter | Unit | Description |
|---|---|---|
| ferritin | ng/ml | Iron storage protein |
| tsh | mIU/l | Thyroid-stimulating hormone |
| vitamin_d | ng/ml | 25-OH Vitamin D |
| vitamin_b12 | pmol/l | Vitamin B12 (Holo-TC) |
| folate_rbc | ng/ml | Red Blood Cell Folate |
| zinc | mg/l | Essential mineral |
| magnesium | mmol/l | Whole blood magnesium |
| selenium | ยตg/l | Antioxidant mineral |
Testing
# Run all tests with coverage
pytest tests/ -v --cov=bloodtest_tools --cov-report=term-missing
# Run specific test file
pytest tests/test_api_endpoints.py -v
# Run with Makefile
make test
# Run MCP Integration Tests
python tests/test_mcp_client.py
Test Organization
tests/test_api_endpoints.py- API endpoint teststests/test_bloodtest_tools.py- Core functionality teststests/test_edge_cases.py- Edge case handlingtests/test_integration.py- Integration teststests/test_mcp_client.py- MCP SSE protocol teststests/test_mcp_integration.py- Comprehensive MCP integration teststestdata/- Comprehensive test scenarios and data
MCP Integration Testing
The MCP integration tests validate the server's SSE (Server-Sent Events) protocol implementation and knowledge base functionality:
Positive Test Cases (10 tests):
- Health Check - Verifies server health endpoint
- SSE Connection - Tests SSE endpoint connectivity
- Ferritin Knowledge Query - Validates optimal range information
- Vitamin D Query - Tests deficiency symptom searches
- Magnesium Supplementation - Verifies dosage guidance
- TSH Interpretation - Tests thyroid value interpretation
- B12 Holotranscobalamin - Validates B12 information retrieval
- Selenium Immune System - Tests mineral-immune connections
- Zinc-Copper Ratio - Validates supplementation balance info
- Folate Requirements - Tests folate reference information
Negative Test Cases (10 tests):
- Invalid Endpoint - 404 response for non-existent paths
- Wrong HTTP Method - Rejects POST on SSE endpoint
- Invalid Health Method - Rejects POST on health endpoint
- Invalid API Path - Handles /api/invalid correctly
- Test Path - Rejects /test endpoint
- Admin Path - Rejects /admin access
- Path Traversal - Blocks /../etc/passwd attempts
- Health Path Traversal - Blocks /health/../../
- SSE Subpath - Rejects /sse/invalid
- Null Path - Handles /null endpoint
Running Integration Tests Locally:
# Build and run Docker container
docker build -t bloodtest-mcp-server:local -f Dockerfile.optimized .
docker run -d --name bloodtest-local -p 8001:8000 bloodtest-mcp-server:local
# Run integration tests
python tests/test_mcp_client.py
# Check health endpoint
curl http://localhost:8001/health
# Clean up
docker stop bloodtest-local && docker rm bloodtest-local
Test Report
The MCP integration test suite validates the server's functionality, security, and performance. Here's the comprehensive test report from the latest execution:
๐ Overall Results
- Total Tests: 37 (20 MCP + 17 Reference Values)
- Passed: 37/37 (100%)
- Failed: 0
- Execution Time: < 45 seconds
๐ฅ Health Check Tests (4/4 Passed)
| Test | Description | Result | Response Time |
|---|---|---|---|
| Health Endpoint | Validates /health returns correct status |
โ Passed | 1.36ms |
| SSE Endpoint | Verifies /sse accessibility |
โ Passed | < 5ms |
| Invalid Endpoint | Ensures 404 for non-existent paths | โ Passed | < 2ms |
| Performance | Checks response time under threshold | โ Passed | 1.36ms |
๐ Positive Knowledge Base Tests (10/10 Passed)
| Test # | Query Type | Description | Result |
|---|---|---|---|
| 1 | Health Check | Server health verification | โ Passed |
| 2 | SSE Connection | Protocol connectivity test | โ Passed |
| 3 | Ferritin | Optimal range information | โ Passed |
| 4 | Vitamin D | Deficiency symptom search | โ Passed |
| 5 | Magnesium | Supplementation guidance | โ Passed |
| 6 | TSH | Thyroid value interpretation | โ Passed |
| 7 | B12 | Holotranscobalamin levels | โ Passed |
| 8 | Selenium | Immune system connection | โ Passed |
| 9 | Zinc-Copper | Ratio balance information | โ Passed |
| 10 | Folate | Requirements validation | โ Passed |
๐ก๏ธ Security & Error Handling Tests (10/10 Passed)
| Test # | Attack Vector | Expected Response | Result |
|---|---|---|---|
| 11 | Invalid endpoint | 404 Not Found | โ Passed |
| 12 | POST on SSE | 405 Method Not Allowed | โ Passed |
| 13 | POST on health | 405 Method Not Allowed | โ Passed |
| 14 | /api/invalid |
404 Not Found | โ Passed |
| 15 | /test |
404 Not Found | โ Passed |
| 16 | /admin |
404 Not Found | โ Passed |
| 17 | /../etc/passwd |
404 (Path Traversal Blocked) | โ Passed |
| 18 | /health/../../ |
404 (Path Traversal Blocked) | โ Passed |
| 19 | /sse/invalid |
404 Not Found | โ Passed |
| 20 | /null |
404 Not Found | โ Passed |
๐ Performance Metrics
- Docker Build Time: ~5 seconds
- Server Startup Time: ~10 seconds
- Health Check Response: 1.36ms average
- SSE Connection Time: < 5ms
- Error Response Time: < 2ms
๐ง Test Environment
- Docker Image:
bloodtest-mcp-server:local - Container Port: 8001 (mapped to internal 8000)
- Test Framework: Python requests + custom MCP client
- Execution Date: Latest CI/CD run
๐ Reference Values Tests (17/17 Passed)
| Test # | Parameter | Optimal Range | Supplement Advice | Result |
|---|---|---|---|---|
| 1 | Ferritin | 70-200 ng/ml | Iron bisglycinate 25-50mg with Vitamin C | โ Passed |
| 2 | Vitamin D | 50-70 ng/ml | 4000-6000 IU daily | โ Passed |
| 3 | Vitamin B12 | >100 pmol/l | 1000 mcg daily sublingual | โ Passed |
| 4 | Zinc | 6-7 mg/l | 15-30 mg daily | โ Passed |
| 5 | Magnesium | 0.85-1.0 mmol/l | 300-600 mg daily | โ Passed |
| 6 | Omega-3 Index | >8% | 2-4g EPA/DHA daily | โ Passed |
| 7 | Testosterone | Men: 8-30 pg/ml | Vitamin D, zinc, magnesium | โ Passed |
| 8 | Estradiol | Men: 20-25 pg/ml | DIM, calcium-d-glucarate | โ Passed |
| 9 | hs-CRP | <1.0 mg/L | Omega-3, curcumin, resveratrol | โ Passed |
| 10 | Zonulin | <30 ng/ml | L-glutamine, zinc carnosine | โ Passed |
| 11 | Vitamin C | 10-20 mg/l | 500-1000mg daily | โ Passed |
| 12 | Vitamin E | 16-25 mg/l | 200-400 IU mixed tocopherols | โ Passed |
| 13 | HbA1c | <5.6% | Chromium, alpha-lipoic acid | โ Passed |
| 14 | Triglycerides | <120 mg/dl | Omega-3, niacin, fiber | โ Passed |
| 15 | TSH | 0.5-2.0 mIU/l | Iodine, selenium, tyrosine | โ Passed |
| 16 | Folate | >20 ng/ml RBC | 5-MTHF (methylfolate) | โ Passed |
| 17 | Selenium | 120-150 ยตg/l | 200 mcg daily | โ Passed |
โ Summary
All 37 integration tests passed successfully, demonstrating:
- Robust health monitoring
- Proper SSE protocol implementation
- Comprehensive error handling
- Strong security measures against common attacks
- Excellent performance with sub-2ms response times
- RAG system readiness for medical knowledge queries
- Complete coverage of all blood test reference values
- Evidence-based supplement recommendations
The server is production-ready with all security measures in place, optimal performance characteristics, and comprehensive knowledge of blood test parameters and supplementation guidance.
Deployment
Railway (Production)
The application is deployed on Railway:
-
Connect Repository
- Connect GitHub repository to Railway
- Auto-deploys on push to main branch
-
Environment Variables
PORT=8000 ENV=production PDF_DIRECTORY=/app/resources/books INDEX_DIRECTORY=/app/faiss_index INDEX_NAME=supplement-therapy -
Monitoring
- Health check: https://supplement-therapy.up.railway.app/health
- View logs in Railway dashboard
- Current endpoint: https://supplement-therapy.up.railway.app
- New endpoint (pending): https://bloodtest-mcp.up.railway.app
Docker
# Build and run with Docker
docker build -t bloodtest-mcp-server -f Dockerfile.optimized .
docker run -p 8000:8000 bloodtest-mcp-server
# Or use Docker Compose
docker-compose up --build
Project Structure
bloodtest-mcp-server/
โโโ bloodtest_tools/ # Core blood test functionality
โ โโโ api.py # FastAPI endpoints
โ โโโ reference_values.py # Medical reference ranges
โ โโโ mcp_tool.py # MCP tool wrappers
โโโ utils/ # Utility modules
โ โโโ rag_system.py # FAISS RAG implementation
โ โโโ sequential_thinking.py # Reasoning tool
โโโ resources/ # Configuration and books
โ โโโ structure.yaml # Workflow definitions
โ โโโ books/ # PDF medical texts
โโโ scripts/ # Utility scripts
โ โโโ init_rag.py # RAG initialization
โโโ tests/ # Test suite
โโโ server.py # Main MCP server
โโโ integrated_server.py # Combined MCP + API server
โโโ main.py # FastAPI entry point
Advanced Topics
RAG System Architecture
-
Document Processing
- PDFs are split into chunks (1000 chars with 200 overlap)
- Text embedded using sentence-transformers
- Vectors stored in FAISS index
-
Query Flow
- User query is embedded
- Top-k similar documents retrieved
- Context passed to LLM for response generation
-
Configuration
rag: enabled: true config: index_name: "supplement-therapy" index_directory: "./faiss_index" chunk_size: 1000 chunk_overlap: 200
Workflow Configuration
Workflows are defined in resources/structure.yaml:
workflows:
- name: "Supplement Therapy"
description: "Personalized supplement recommendations"
prompt: |
Based on the blood test results and health assessment,
provide evidence-based supplement recommendations...
Troubleshooting
Common Issues
-
FAISS Index Not Found
- Ensure INDEX_NAME in environment matches structure.yaml
- Run
python scripts/init_rag.pyto create index
-
Connection Issues with Claude Desktop
- Verify server is running: check /health endpoint
- Ensure configuration JSON is valid
- Restart Claude Desktop completely
-
Docker Build Failures
- Check Python version compatibility
- Ensure all files are included in build context
- Verify FAISS index exists in Docker image
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License. See LICENSE file for details.
Acknowledgments
- Medical reference values based on work by Dr. Ulrich Strunz and Dr. Helena Orfanos-Boeckel
- Built with FastMCP, FastAPI, and LangChain
- Deployed on Railway cloud platform
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.