@uh-joan/offx-mcp-server
Version:
OFF-X (Target Safety) MCP server for drug safety, adverse event, and target risk analytics.
116 lines (115 loc) • 4.25 kB
TypeScript
#!/usr/bin/env node
/**
* OFFX MCP Server
*
* This server provides a bridge between the Model Context Protocol (MCP) and the OFFX (Target Safety) API.
* It supports both MCP server mode (with stdio or SSE transport) and HTTP server mode for flexible integration.
*
* Environment Variables:
* - OFFX_API_TOKEN: Required. API token for OFFX API authentication
* - USE_HTTP: Optional. Set to 'true' to run as HTTP server (default: false)
* - PORT: Optional. Port number for HTTP server (default: 3000)
* - LOG_LEVEL: Optional. Logging level (default: 'info')
* - TRANSPORT: Optional. MCP transport type ('stdio' or 'sse', default: 'stdio')
* - SSE_PATH: Optional. Path for SSE endpoint when using SSE transport (default: '/mcp')
*
* # OFFX MCP Server - README
*
* This server exposes the following OFFX tools via MCP:
*
* ## Tools
*
* - offx_search_drugs: Search for drugs by name in the OFFX database
* - Input: { drug: string }
*
* - offx_get_drug_alerts: Retrieve alerts for a drug by drug_id (with optional filters)
* - Input: {
* drug_id: string,
* page?: number,
* adverse_event_id?: string,
* ref_source_type?: string,
* alert_type?: string,
* alert_phase?: string,
* alert_level_evidence?: string,
* alert_severity?: string,
* alert_causality?: string,
* alert_species?: string,
* alert_date_from?: string,
* alert_date_to?: string,
* order_by_date?: string,
* order_by_adv?: string
* }
*
* - offx_get_drugs_by_action: Retrieve drugs by target and action ID
* - Input: { target_id: string, action_id: string }
*
* - offx_get_drugs_by_adve: Retrieve drugs by adverse event ID
* - Input: { adverse_event_id: string, page?: number }
*
* - offx_get_drug_score: Get drug score by drug id (and optionally adverse event id)
* - Input: { drug_id: string, adverse_event_id?: string }
*
* - offx_search_adverse_events: Search adverse events by name in the OFFX database
* - Input: { adverse_event: string }
*
* - offx_get_adverse_events: Get adverse events by drug id
* - Input: { drug_id: string }
*
* - offx_get_adverse_events_by_target: Get adverse events by target id
* - Input: { target_id: string }
*
* - offx_get_drug: Get drug masterview by drug id using the OFFX API. Supports optional filters.
* - Input: {
* drug_id: string,
* page: number,
* adverse_event_id?: string,
* ref_source_type?: string,
* alert_type?: string,
* alert_phase?: string,
* alert_level_evidence?: string,
* alert_severity?: string,
* alert_causality?: string,
* alert_species?: string,
* alert_date_from?: string,
* alert_date_to?: string
* }
*
* - offx_search_targets: Search targets by name in the OFFX database
* - Input: { target: string }
*
* - offx_get_target: Get target masterview by target_id and action_id using the OFFX API. Supports optional filters.
* - Input: {
* target_id: string,
* action_id: string,
* page: number,
* adverse_event_id?: string,
* ref_source_type?: string,
* alert_type?: string,
* alert_phase?: string,
* alert_level_evidence?: string,
* alert_onoff_target?: string,
* alert_severity?: string,
* alert_causality?: string,
* alert_species?: string,
* alert_date_from?: string,
* alert_date_to?: string
* }
*
* - offx_get_targets: Get primary or secondary targets for a drug by drug_id, or targets by adverse_event_id. You must provide exactly one of: drug_id or adverse_event_id (not both, not neither). If drug_id is provided and type is not specified, it defaults to "primary".
* - Input: { drug_id: string, type?: 'primary' | 'secondary', adverse_event_id?: string }
*
* ## Usage
*
* - MCP mode: Communicate via stdio (default) or SSE (experimental)
* - HTTP mode: POST to /offx_search_drugs and other endpoints
*
* ## Example
*
* {
* "tool": "offx_get_drug_alerts",
* "arguments": { "drug_id": "140448", "alert_type": "serious" }
* }
*
* See the tool schemas in the code for full details and examples.
*/
import 'dotenv/config';