Content
# MedixHub Model Context Protocol (MCP) Server
A Model Context Protocol (MCP) server with integrated medical and healthcare API access through MedixHub.
## Features
- Pure JavaScript implementation
- Exposes functions with standardized MCP metadata
- Executes functions with parameter validation
- Seamlessly integrates with LLMs like Ollama
- Secure API endpoints with authentication
- Supports streaming responses
## Implemented Functions
The server includes JavaScript implementations of these functions:
1. **executeOpenTargetQuery** - Executes GraphQL queries against the OpenTarget API
2. **FDADrugLabelSearch** - Retrieves drug information from the FDA database
3. **get_drug_generic_name** - Maps between generic and brand drug names
4. **MonarchSearch** - Searches the Monarch database for genes, diseases, or phenotypes
5. **MonarchDiseasesForMultiplePhenotypes** - Finds diseases matching multiple phenotypes
### OpenTarget Functions
- Disease information lookup
- Drug details and associations
- Target (gene/protein) information
- Disease-target associations
- Drug-disease relationships
### FDA Drug Label Functions
- Drug information search
- Generic and brand name mapping
- Adverse reactions lookup
- Drug interactions search
### Monarch Database Functions
- Biomedical entity search
- Disease-phenotype associations
- Gene-phenotype relationships
- Multi-phenotype disease finder
## Getting Started
### Prerequisites
- Node.js 14 or later
- npm or yarn
### Installation
1. Clone the repository
```bash
git clone https://github.com/yourusername/medixhub-mcp-server.git
cd medixhub-mcp-server
```
2. Install dependencies
```bash
npm install
```
3. Configure environment variables
```bash
cp .env.example .env
# Edit .env with your settings
```
4. Start the server
```bash
npm start
```
For development with auto-reload:
```bash
npm run dev
```
## Usage
### Execute API
Use the `/execute` endpoint to run any registered MedixHub function:
```http
POST /execute
Content-Type: application/json
{
"name": "queryFDADrugLabel",
"parameters": {
"searchFields": {
"drug_name": ["openfda.brand_name", "openfda.generic_name"]
},
"returnFields": ["openfda.generic_name", "warnings"],
"arguments": {
"drug_name": "ibuprofen",
"limit": 1
}
}
}
```
### Direct MedixHub API
Use the `/medixhub` endpoints for direct API access:
- `/medixhub/opentargets`
- `/medixhub/opentargets-genetics`
- `/medixhub/drug-by-name`
- `/medixhub/fda-drug-label`
- `/medixhub/drug-generic-name`
- `/medixhub/monarch`
- `/medixhub/diseases-for-phenotypes`
### Function Metadata
Get information about available functions:
- `/functions` - All available functions
- `/functions/medixhub` - MedixHub-specific functions
- `/functions/category/:category` - Functions by category
## API Documentation
Full API documentation is available at `/functions/medixhub`
## Development
### Project Structure
```
medixhub-mcp-server/
├── server.js # Main server file
├── src/
│ ├── medixhub/ # MedixHub integration
│ ├── middleware/ # Middleware
│ ├── routes/ # Route handlers
│ └── services/ # Services
├── examples/ # Usage examples
└── tests/ # Test suite
```
### Adding New Functions
To add a new function to the registry:
```javascript
const { registerFunction } = require('./src/services/functionRegistry');
registerFunction('myNewFunction', {
name: 'myNewFunction',
description: 'Description of what this function does',
parameters: {
// Parameter schema
},
function: async (params) => {
// Implementation
return result;
}
});
```
### Running Tests
```bash
npm test
```
## Authentication
The server supports two authentication methods:
1. **API Keys**: Simple key-based authentication
2. **JWT Tokens**: More granular access control
In production mode, authentication is required for all endpoints except function discovery.
## Environment Variables
Configure the server through the following environment variables:
- `PORT`: Server port (default: 3000)
- `NODE_ENV`: Environment ('development' or 'production')
- `OLLAMA_API_URL`: URL for Ollama API
- `API_KEYS`: Comma-separated list of valid API keys
- `FDA_API_KEY`: API key for FDA drug database
See `.env.example` for all available options.
## Performance Considerations
- The server uses asynchronous processing for all API calls
- Rate limiting is enabled to prevent abuse
- Timeout handling prevents hanging requests
- Memory usage is optimized by processing streams efficiently
## License
This project is licensed under the MIT License - see the LICENSE file for details.
Connection Info
You Might Also Like
markitdown
MarkItDown-MCP is a lightweight server for converting URIs to Markdown.
markitdown
Python tool for converting files and office documents to Markdown.
firecrawl
Firecrawl MCP Server enables web scraping, crawling, and content extraction.
Filesystem
Node.js MCP Server for filesystem operations with dynamic access control.
TrendRadar
TrendRadar: Your hotspot assistant for real news in just 30 seconds.
mempalace
The highest-scoring AI memory system ever benchmarked. And it's free.