MedifinderMCP Server
An MCP (Model Context Protocol) server for medicine inventory queries, designed to work with AI assistants like Claude.
Overview
The MedifinderMCP Server provides tools and resources for querying a medicine inventory database through the Model Context Protocol (MCP). It allows AI assistants and other clients to:
- Search for medicines by name or location
- Check medicine availability at different healthcare facilities
- Get stock information for specific medicines
- View statistics on medicine availability by region
- Analyze stock status across the healthcare system
Database Schema
The application uses a normalized database schema:
Region
- region_id (PK)
- name
- code
- created_at
- updated_at
MedicalCenter
- center_id (PK)
- code
- name
- region_id (FK -> Region)
- category
- reporter_name
- institution_type
- reporter_type
- address
- latitude
- longitude
- created_at
- updated_at
ProductType
- type_id (PK)
- code
- name
- description
- created_at
- updated_at
Product
- product_id (PK)
- code
- name
- type_id (FK -> ProductType)
- description
- dosage_form
- strength
- created_at
- updated_at
Inventory
- inventory_id (PK)
- center_id (FK -> MedicalCenter)
- product_id (FK -> Product)
- current_stock
- avg_monthly_consumption
- accumulated_consumption_4m
- measurement
- last_month_consumption
- last_month_stock
- status_indicator
- cpma_12_months_ago
- cpma_24_months_ago
- cpma_36_months_ago
- accumulated_consumption_12m
- report_date
- status
- created_at
- updated_at
User
- user_id (PK)
- phone_number
- name
- preferred_location
- created_at
- updated_at
SearchHistory
- search_id (PK)
- user_id (FK -> User)
- product_query
- location_query
- search_radius
- results_count
- created_at
Project Structure
medifinder-mcp/
├── app/
│ ├── __init__.py
│ ├── config.py # Configuration management
│ ├── db/
│ │ ├── __init__.py
│ │ ├── connection.py # Database connection handling
│ │ └── queries.py # SQL queries
│ ├── models/
│ │ ├── __init__.py
│ │ ├── base.py # Base model with timestamp fields
│ │ ├── region.py # Region model
│ │ ├── medical_center.py # Medical center model
│ │ ├── product_type.py # Product type model
│ │ ├── product.py # Product model
│ │ ├── inventory.py # Inventory model
│ │ ├── user.py # User model
│ │ └── search_history.py # Search history model
│ ├── mcp/
│ │ ├── __init__.py
│ │ ├── server.py # MCP server setup
│ │ ├── tools.py # Tool implementations
│ │ ├── resources.py # Resource implementations
│ │ └── prompts.py # Prompt templates
│ └── utils/
│ ├── __init__.py
│ └── helpers.py # Helper functions
├── main.py # Application entry point
├── requirements.txt # Dependencies
└── README.md # Documentation
MCP Features
Tools
search_medicines
: Search for medicines by name or location
get_medicine_locations
: Find locations where a medicine is available
get_medicine_stock
: Get stock information for a specific medicine
get_regional_statistics
: Get medicine statistics by region
get_medicine_status
: Get overall medicine statistics
diagnose_database
: Check database connectivity and content
troubleshoot_connection
: Detailed database connection diagnostics
create_database_schema
: Create database tables based on models
Resources
product://{id}
: Get product details by ID
stock://{name}
: Get stock information for a product by name
locations://{region}
: Get medical centers in a specific region
statistics://stock
: Get overall stock statistics
statistics://regions
: Get regional statistics
Prompts
medicine_search_prompt
: Template for searching medicines by name
medicine_availability_prompt
: Template for checking medicine availability
medicine_statistics_prompt
: Template for analyzing medicine statistics
regional_availability_prompt
: Template for analyzing regional medicine availability
Installation
Clone the repository:
git clone https://github.com/yourusername/medifinder-mcp.git
cd medifinder-mcp
Create a virtual environment and install dependencies:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
Set up environment variables by creating a .env
file:
DB_HOST=localhost
DB_PORT=5432
DB_NAME=medifinderbot
DB_USER=your_user
DB_PASSWORD=your_password
DEBUG=True
ENV=development
SERVER_NAME=MedifinderMCP
SERVER_VERSION=1.0.0
MCP_SERVER_NAME=MedifinderMCP
MCP_SERVER_DESCRIPTION=MCP server for medicine inventory queries
MAX_SEARCH_RESULTS=50
SEARCH_SIMILARITY_THRESHOLD=0.3
Create the database:
Connect to PostgreSQL
psql -U postgres
# Create database and user
CREATE DATABASE medifinderbot;
CREATE USER your_user WITH PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE medifinderbot TO your_user;
# Exit PostgreSQL
\q
- Initialize the database schema: After starting the server, use the
create_database_schema
tool to create the tables.
Usage
Running the Server Locally
You can run the MCP server directly:
python main.py
Using MCP Inspector
For development and testing, the MCP Inspector provides a convenient way to interact with the server:
Install MCP CLI:
pip install mcp[cli]
Run the server in development mode:
python -m mcp dev main.py
The MCP Inspector will open in your browser, allowing you to:
* Test tools and resources
* View the output of diagnostic tools
* Experiment with different queries
Integration with Claude Desktop
To use the server with Claude Desktop:
Create a batch file for reliable startup (run-mcp-server.bat):
@echo off
cd /d %~dp0
call venv\Scripts\activate.bat
python main.py
Install the server in Claude Desktop:
mcp install run-mcp-server.bat -f .env
Alternatively, edit Claude Desktop's config file manually:
{
"mcpServers": {
"MedifinderMCP": {
"command": "C:\path\to\project\venv\Scripts\python.exe",
"args": ["C:\path\to\project\main.py"],
"env": {
"DB_HOST": "localhost",
"DB_PORT": "5432",
"DB_NAME": "medifinderbot",
"DB_USER": "your_user",
"DB_PASSWORD": "your_password",
"DEBUG": "True",
"ENV": "development",
"SERVER_NAME": "MedifinderMCP",
"SERVER_VERSION": "1.0.0",
"MCP_SERVER_NAME": "MedifinderMCP",
"MCP_SERVER_DESCRIPTION": "MCP server for medicine inventory queries",
"MAX_SEARCH_RESULTS": "50",
"SEARCH_SIMILARITY_THRESHOLD": "0.3"
}
}
}
}
- In Claude Desktop, select the MedifinderMCP server from the servers dropdown to enable it for your conversation.
Troubleshooting
Common Issues
- Database Connection Issues :
* Use the `troubleshoot_connection` tool to diagnose connection problems
* Verify your database credentials in the .env file
* Ensure PostgreSQL is running on the specified port
- Missing Tables :
* Use the `create_database_schema` tool to create the database tables
* Check logs for any errors during schema creation
- Empty Results :
* If queries return no results, there might not be any data in your tables
* You need to import data into the tables using your data ingestion process
- Session Binding Errors :
* If you see "Instance is not bound to a Session" errors, ensure model instances are converted to dictionaries within active sessions
* See how this is handled in the queries.py file for examples
- Missing Dependencies :
* Run `pip install -r requirements.txt` to ensure all dependencies are installed
* Common missing dependencies are: mcp, python-dotenv, psycopg2-binary
Diagnostic Tools
When troubleshooting, use these built-in diagnostic tools:
diagnose_database
: Checks if:
* The database connection works
* Tables exist
* Tables contain data
troubleshoot_connection
: Provides detailed information about:
* Database connection settings
* Connection errors
* Table structure
* Recommended fixes
create_database_schema
: Creates the database tables and provides:
* List of created tables
* Any errors that occurred
* Test record creation results
License
MIT License
Contributors
- Lenin Carrasco - Initial work