#!/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';
