
Research
Two Malicious Rust Crates Impersonate Popular Logger to Steal Wallet Keys
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
@uh-joan/cortellis-mcp-server
Advanced tools
Comprehensive MCP server providing pharmaceutical intelligence through Cortellis APIs - drug discovery, clinical trials, literature search, regulatory documents, company profiles, deals analysis, and Named Entity Recognition with 19+ specialized tools
A modern, production-ready MCP (Model Context Protocol) server providing access to the Cortellis pharmaceutical database. This server has been completely transformed with a modular architecture, comprehensive error handling, testing, and deployment capabilities.
# Using npm
npm install @uh-joan/cortellis-mcp-server
# Using Docker
docker pull uh-joan/cortellis-mcp-server
Create a .env
file with your Cortellis credentials:
CORTELLIS_USERNAME=your_username
CORTELLIS_PASSWORD=your_password
# Optional configuration
LOG_LEVEL=info # error, warn, info, debug
# MCP Mode (stdio transport)
npx cortellis-mcp-server
# Development mode with auto-rebuild
npm run dev
# MCP Mode
docker run -e CORTELLIS_USERNAME=user -e CORTELLIS_PASSWORD=pass cortellis-mcp-server
ci_search_drugs
query
(string) - Raw search querycompany
(string) - Company ID for the developing company (e.g., "18614")indication
(string) - Indication ID (numeric ID only, e.g., "238" for Obesity). Use ci_explore_ontology to find the correct ID.action
(string) - Target specific action (e.g., glucagon)phase
(string) - Development status:
phase
parameter; do not use OR/AND. If you need to search for multiple phases, run separate queries for each phase.phase_terminated
(string) - Last phase before NDR/DX
phase_terminated: "C2"
phase_terminated: "C2 OR C3"
technology
(string) - Drug technology (e.g., small molecule)drug_name
(string) - Name of the drugcountry
(string) - Country ID (e.g., "US")offset
(number) - For paginationhits
(number) - Number of results per page (default: 100)company_size
(string) - The size of a company based on market capitalization in billions USD
developmentStatusDate
(string) - Date of change in status (only possible within LINKED queries). Use RANGE(>=YYYY-MM-DD;<=YYYY-MM-DD) for ranges. Example: RANGE(>=2023-01-01;<=2023-12-31)
historic
(boolean) - Set to true to search using the historic development status fields. This is required for questions about the status of a drug at a specific point in the past (e.g., 'What drugs were in phase 3 in 2019?'). If you want to know the status as it was at a particular date or within a date range, always set historic: true and use the developmentStatusDate parameter.ci_explore_ontology
term
(string) - Generic search termcategory
(string) - Category to search withinaction
(string) - Target specific actionindication
(string) - Disease/conditioncompany
(string) - Company namedrug_name
(string) - Drug nametarget
(string) - Drug targettechnology
(string) - Drug technologyci_get_drug
id
(string) - Numeric Drug Identifier (e.g. "101964" for tirzepatide, not the drug name)ci_get_company
id
(string) - Numeric Company Identifier (not the company name)ci_search_companies
query
(string) - Raw search querycompany_name
(string) - Company name to search forhq_country
(string) - Company headquarters countrydeals_count
(string) - Count for all distinct deals where company is principal/partner
indications
(string) - Top 10 indication termsactions
(string) - Top 10 target-based action termstechnologies
(string) - Top 10 technologies termscompany_size
(string) - The size of a company based on market capitalization in billions USD
status
(string) - Highest status of linked drugsoffset
(number) - For paginationhits
(number) - Number of results per page (default: 100)ci_search_deals
query
(string) - Raw search query (if you want to use the full Cortellis query syntax directly)dealDrugNamesAll
(string) - Main name of drug including synonyms associated with the dealindications
(string) - Indications associated with the dealdealDrugCompanyPartnerIndications
(string) - The indication and the partner company linked to a drug associated with the dealdealPhaseHighestStart
(string) - Highest dev. status of the drug at the deal startdealPhaseHighestNow
(string) - Current highest dev. status of the drugdealStatus
(string) - Status of the dealdealSummary
(string) - Summary of the dealdealTitleSummary
(string) - Title or summary of the dealtechnologies
(string) - Technology linked to the drugdealTitle
(string) - Title of the dealdealType
(string) - Type of dealactionsPrimary
(string) - Primary mechanism of action associated with the dealsortBy
(string) - Sort order for results. Use '+field' for ascending or '-field' for descending. Supported fields: dealDateStart, dealDateEnd, dealDateEventMostRecent, dealTotalPaidSortBy, dealTotalProjectedCurrentSortBy, dealValuePaidToPrincipalMaxSortBy, dealValueProjectedToPrincipalMaxSortBy. Example: '+dealDateStart' for oldest first, '-dealDateStart' for newest first. Useful for queries like 'last 10 deals for a company'.offset
(number) - For paginationci_search_trials
query
(string) - Raw search query for direct searchingsortBy
(string) - Sort field (trialPhase, trialRecruitmentStatus, trialPatientCountEnrollment, trialDateStart, trialDateEnd, trialDateChangeLast)trialTitleOfficial
(string) - Official trial titletrialIdentifiers
(string) - Trial identifiers (e.g., NCT00003140, CTI_umbrella)indications
(string) - Medical condition being treatedtrialPhase
(string) - Phase of clinical trial (e.g., 'C12' for Phase 1/2 or 'Phase 1/Phase 2 Clinical')trialRecruitmentStatus
(string) - Trial recruitment statustrialCompaniesSponsor
(string) - Sponsoring organization (name or ID)trialFunderType
(string) - Organization type conducting the trial. Categories: academic, non profit, company, governmenttrialPatientCountEnrollment
(string) - Number of patients (exact or RANGE format)trialDateStart
(string) - Trial start date (YYYY-MM-DD)trialDateEnd
(string) - Trial end date (YYYY-MM-DD)hits
(number) - Number of results per page (default: 20, max: 300)offset
(number) - For paginationci_get_trial
id
(string) - Trial identifier (e.g., "9997", "77227")category
(string) - Type of information to retrieve:
hits
(number) - Number of results per page (for sites category only, default: 20)offset
(number) - Number of records to skip (for sites category only, default: 0)The server features a modern, modular architecture:
See ARCHITECTURE.md for detailed technical documentation.
# Clone the repository
git clone <repository-url>
cd cortellis-mcp-server
# Install dependencies
npm install
# Set up environment
cp .env.example .env
# Edit .env with your credentials
# Build the project
npm run build
# Run tests
npm test
npm run test:coverage
npm run build # Build TypeScript to dist/
npm run dev # Development MCP mode with auto-rebuild
npm run dev:http # Development HTTP mode with auto-rebuild
npm start # Production MCP mode
npm run start:http # Production HTTP mode
npm test # Run tests
npm run test:watch # Run tests in watch mode
npm run test:coverage # Generate coverage report
npm run lint # Run ESLint
npm run lint:fix # Fix ESLint errors
npm run clean # Clean build artifacts
# Build the image
docker build -t cortellis-mcp-server .
# Run MCP mode
docker run -e CORTELLIS_USERNAME=user -e CORTELLIS_PASSWORD=pass cortellis-mcp-server
# Run HTTP mode
docker run -e CORTELLIS_USERNAME=user -e CORTELLIS_PASSWORD=pass -e USE_HTTP=true -p 3000:3000 cortellis-mcp-server
The server implements the Model Context Protocol (MCP) specification and can be used with any MCP-compatible client:
Add to your Claude Desktop configuration:
{
"mcpServers": {
"cortellis": {
"command": "npx",
"args": ["@uh-joan/cortellis-mcp-server"],
"env": {
"CORTELLIS_USERNAME": "your_username",
"CORTELLIS_PASSWORD": "your_password"
}
}
}
}
Once connected, you can use tools like:
ci_search_drugs
- Search for drugs with various filtersci_explore_ontology
- Explore taxonomy termsci_get_drug
- Get detailed drug informationVariable | Description | Default | Required |
---|---|---|---|
CORTELLIS_USERNAME | API username | - | โ |
CORTELLIS_PASSWORD | API password | - | โ |
LOG_LEVEL | Logging level | info | - |
NODE_ENV | Environment mode | production | - |
error
: Only error messageswarn
: Warnings and errorsinfo
: General information (default)debug
: Detailed debugging informationThe project includes comprehensive testing:
# Run all tests
npm test
# Run with coverage
npm run test:coverage
# Run in watch mode
npm run test:watch
# Run specific test file
npm test auth.test.ts
git checkout -b feature/amazing-feature
)npm test
)npm run lint
)git commit -m 'Add amazing feature'
)git push origin feature/amazing-feature
)The v0.8.0 release represents a complete architectural transformation. While all existing functionality is preserved, the internal structure has changed significantly:
All tool interfaces and responses remain compatible with existing clients.
This project is licensed under the MIT License - see the LICENSE file for details.
FAQs
Comprehensive MCP server providing pharmaceutical intelligence through Cortellis APIs - drug discovery, clinical trials, literature search, regulatory documents, company profiles, deals analysis, and Named Entity Recognition with 19+ specialized tools
The npm package @uh-joan/cortellis-mcp-server receives a total of 551 weekly downloads. As such, @uh-joan/cortellis-mcp-server popularity was classified as not popular.
We found that @uh-joan/cortellis-mcp-server demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.ย It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
Research
A malicious package uses a QR code as steganography in an innovative technique.
Research
/Security News
Socket identified 80 fake candidates targeting engineering roles, including suspected North Korean operators, exposing the new reality of hiring as a security function.