What is Model Context Protocol (MCP)?
Model Context Protocol (MCP) is an open standard that enables AI assistants to securely connect to external data sources and tools. Think of it as a universal adapter that lets AI models like Claude access databases, APIs, and specialized services in a safe, standardized way.
How this MCP server works
Claude, Cursor, etc.] -->|MCP Protocol| B["MCP server
(indra-cogex)"] B --> C["9 Tools
(query, navigate, ground)"] C --> F["INDRA Knowledge Graph
(Neo4j — 20M+ nodes)"] style A fill:#4dafbc,stroke:#3a8a95,color:#fff style B fill:#3a8a95,stroke:#2d6f78,color:#fff style F fill:#10b981,stroke:#059669,color:#fff style C fill:#e6f7f8,stroke:#4dafbc
This server exposes 9 tools that AI agents use to navigate the knowledge graph:
- Ground entities: Convert natural language ("ALS", "EGFR", "metformin") to precise identifiers (CURIEs like
MESH:D000690) - Navigate the graph: Discover what entity types connect and which functions traverse those edges
- Query endpoints: Execute any of 100+ pre-built functions with auto-grounding and caching
- Run Cypher: Execute arbitrary read-only queries for complex graph traversals
- Batch queries: Query multiple entities in a single call for efficient exploration
About this MCP Server
This server provides AI agent access to the INDRA CoGEx (Context Graph Extension) knowledge graph — a comprehensive biomedical knowledge base assembled by INDRA (Integrated Network and Dynamical Reasoning Assembler) from scientific literature and curated databases.
What You Can Do
- Explore biological prior knowledge: Query relationships between genes, proteins, diseases, drugs, and more from causal knowledge assembled by INDRA from literature and databases.
- Discover connections: Navigate links between literature and data sources such as clinical trials, tissue gene expression profiles, cancer cell lines, etc.
- Validate knowledge: Cross-reference information from multiple sources through connected knowledge in the graph
- Research assistance: Let an AI agent help you formulate and execute sophisticated queries that would require multiple rounds of sequential planning and coding if done manually.
Example Usage
Once connected, simply ask questions in plain English. The AI agent will use this MCP server to query the knowledge graph on your behalf:
Ask: "Find drugs that target genes associated with ALS—I'm looking for repurposing candidates with clinical evidence."
Behind the scenes, the AI agent runs the following steps using this MCP server:Step 1: Ground "ALS" to a canonical identifier
{
"query": "ALS",
"top_match": {
"curie": "mesh:D000690",
"name": "Amyotrophic Lateral Sclerosis",
"score": 0.556
}
}
Step 2: Find genes associated with ALS
{
"results": [
{"name": "SOD1", "db_ns": "HGNC", "db_id": "11179"},
{"name": "TARDBP", "db_ns": "HGNC", "db_id": "11571"},
{"name": "SQSTM1", "db_ns": "HGNC", "db_id": "11280"},
{"name": "ATXN2", "db_ns": "HGNC", "db_id": "10555"},
{"name": "PTGS2", "db_ns": "HGNC", "db_id": "9605"},
// ... 24 more genes
],
"pagination": {"total": 29, "has_more": true, "next_offset": 5}
}
Step 3: Find drugs targeting PTGS2 (COX-2)
{
"results": [
{"name": "ebselen", "db_ns": "CHEBI", "db_id": "CHEBI:77543"},
{"name": "rofecoxib", "db_ns": "CHEBI", "db_id": "CHEBI:8887"},
{"name": "pterostilbene", "db_ns": "CHEBI", "db_id": "CHEBI:8630"},
{"name": "parthenolide", "db_ns": "CHEBI", "db_id": "CHEBI:7939"},
// ... 63 more drugs
],
"pagination": {"total": 67, "has_more": true, "next_offset": 5}
}
Step 4: Check clinical trials for ebselen
{
"results": [
{"phase": 3, "status": "not_yet_recruiting", "db_id": "NCT06859788", "start_year": 2025},
{"phase": 3, "status": "completed", "db_id": "NCT04677972", "completion_year": 2024},
{"phase": 2, "status": "completed", "db_id": "NCT03325790", "completion_year": 2019},
// ... 12 more trials
],
"pagination": {"total": 15, "has_more": true, "next_offset": 5}
}
Ask: "Which genes are shared between Parkinson's and Alzheimer's disease? Find drugs targeting these shared genes."
Behind the scenes, the AI agent runs the following steps using this MCP server:Step 1: Ground both diseases
{
"parkinson": {"curie": "doid:14330", "name": "Parkinson Disease", "score": 0.772},
"alzheimer": {"curie": "doid:10652", "name": "Alzheimer Disease", "score": 0.778}
}
Step 2: Get genes for each disease
{
"results": [
{"name": "SNCA", "db_ns": "HGNC", "db_id": "11138"},
{"name": "PINK1", "db_ns": "HGNC", "db_id": "14581"},
{"name": "PRKN", "db_ns": "HGNC", "db_id": "8607"},
{"name": "TNF", "db_ns": "HGNC", "db_id": "11892"},
{"name": "SOD2", "db_ns": "HGNC", "db_id": "11180"},
{"name": "BDNF", "db_ns": "HGNC", "db_id": "1033"},
{"name": "MAPT", "db_ns": "HGNC", "db_id": "6893"},
// ... 77 more genes
],
"pagination": {"total": 84, "has_more": true, "next_offset": 8}
}
{
"results": [
{"name": "PSEN1", "db_ns": "HGNC", "db_id": "9508"},
{"name": "APP", "db_ns": "HGNC", "db_id": "620"},
{"name": "TNF", "db_ns": "HGNC", "db_id": "11892"},
{"name": "SOD2", "db_ns": "HGNC", "db_id": "11180"},
{"name": "BDNF", "db_ns": "HGNC", "db_id": "1033"},
{"name": "NECTIN2", "db_ns": "HGNC", "db_id": "9707"},
// ... 95 more genes
],
"pagination": {"total": 101, "has_more": true, "next_offset": 7}
}
Step 3: Find drugs targeting shared gene TNF
{
"results": [
{"name": "luteolin 7-O-beta-D-glucoside", "db_ns": "CHEBI"},
{"name": "apigenin 7-O-beta-D-glucoside", "db_ns": "CHEBI"},
{"name": "Ganoderic acid A", "db_ns": "CHEBI"},
{"name": "Ganoderic acid C1", "db_ns": "CHEBI"},
// ... 3 more drugs
],
"total": 7
}
Ask: "Show me clinical trials and drugs for pancreatic cancer. What's the competitive landscape?"
Behind the scenes, the AI agent runs the following steps using this MCP server:Step 1: Ground the indication
{
"top_match": {
"curie": "mesh:D010190",
"name": "Pancreatic Neoplasms",
"score": 0.778
}
}
Step 2: Get clinical trials
{
"results": [
{"phase": 3, "status": "recruiting", "db_id": "NCT07098598", "start_year": 2024},
{"phase": 2, "status": "not_yet_recruiting", "db_id": "NCT07121478", "completion_year": 2029},
{"phase": 2, "status": "not_yet_recruiting", "db_id": "NCT07114315", "completion_year": 2028},
{"phase": 1, "status": "recruiting", "db_id": "NCT07118176", "completion_year": 2027},
// ... 3,475 more trials
],
"pagination": {"total": 3479, "has_more": true, "next_offset": 5}
}
Step 3: Get drugs indicated for this cancer
{
"results": [
{"name": "NAPABUCASIN", "db_ns": "CHEMBL"},
{"name": "LOSARTAN POTASSIUM", "db_ns": "CHEMBL"},
{"name": "TALABOSTAT", "db_ns": "CHEMBL"},
{"name": "ARSENIC TRIOXIDE", "db_ns": "CHEMBL"},
{"name": "BI 2536", "db_ns": "MESH"},
// ... 455 more drugs
],
"pagination": {"total": 460, "has_more": true, "next_offset": 6}
}
Ask: "For EGFR, show me all diseases where it's implicated and drugs that target it."
Behind the scenes, the AI agent runs the following steps using this MCP server:Step 1: Ground the gene
{
"top_match": {
"curie": "hgnc:3236",
"name": "EGFR",
"score": 1.0
}
}
Step 2: Get diseases for this gene
{
"results": [
{"name": "Colorectal Neoplasms", "db_ns": "MESH"},
{"name": "Cholangiocarcinoma", "db_ns": "MESH"},
{"name": "head and neck carcinoma", "db_ns": "MONDO"},
{"name": "Stomach Neoplasms", "db_ns": "MESH"},
{"name": "Endometrial adenocarcinoma", "db_ns": "UMLS"},
// ... 93 more diseases
],
"pagination": {"total": 98, "has_more": true, "next_offset": 6}
}
Step 3: Get drugs targeting EGFR
{
"results": [
{"name": "BI 2536", "db_ns": "MESH"},
{"name": "PD158780", "db_ns": "CHEBI"},
{"name": "5,6-bis(4-fluoroanilino)isoindole-1,3-dione", "db_ns": "CHEBI"},
// ... 75 more drugs
],
"pagination": {"total": 78, "has_more": true, "next_offset": 4}
}
Ask: "What conditions is metformin being studied for beyond diabetes? Show me the breadth of indications."
Behind the scenes, the AI agent runs the following steps using this MCP server:Step 1: Ground the drug
{
"top_match": {
"curie": "chebi:6801",
"name": "metformin",
"score": 1.0
}
}
Step 2: Get all indications
{
"results": [
{"name": "Non-alcoholic Fatty Liver Disease", "db_ns": "MESH"},
{"name": "Triple Negative Breast Neoplasms", "db_ns": "MESH"},
{"name": "Prostatic Neoplasms, Castration-Resistant", "db_ns": "MESH"},
{"name": "Cognitive Dysfunction", "db_ns": "MESH"},
{"name": "Frontotemporal Dementia", "db_ns": "MESH"},
{"name": "Heart Failure, Systolic", "db_ns": "MESH"},
{"name": "Small Cell Lung Carcinoma", "db_ns": "MESH"},
{"name": "Acute Coronary Syndrome", "db_ns": "MESH"},
// ... 186 more indications
],
"pagination": {"total": 194, "has_more": true, "next_offset": 9}
}
Ask: "What genes are associated with triple-negative breast cancer? Are any druggable?"
Behind the scenes, the AI agent runs the following steps using this MCP server:Step 1: Ground the disease
{
"top_match": {
"curie": "mesh:D064726",
"name": "Triple Negative Breast Neoplasms",
"score": 0.778
}
}
Step 2: Get associated genes
{
"results": [
{"name": "LRP6", "type": "human_gene_protein", "db_ns": "HGNC"},
{"name": "KRAS", "type": "human_gene_protein", "db_ns": "HGNC"},
{"name": "MIR873", "type": "human_rna", "db_ns": "HGNC"},
{"name": "YAP1", "type": "human_gene_protein", "db_ns": "HGNC"}
],
"total": 4
}
get_drugs_for_target to explore druggability.
How to Connect
Configure your MCP-compatible AI client to connect to this server:
{
"mcpServers": {
"indra-cogex": {
"url": "https://discovery.indra.bio/mcp"
}
}
}
Location: ~/Library/Application Support/Claude/claude_desktop_config.json
(macOS)
{
"mcp": {
"servers": {
"indra-cogex": {
"url": "https://discovery.indra.bio/mcp"
}
}
}
}
{
"endpoint": "https://discovery.indra.bio/mcp",
"transport": "streamable-http",
"method": "POST"
}
Connection Details
Endpoint: POST https://discovery.indra.bio/mcp
Transport: Streamable HTTP (supports both stateless and stateful modes)
Authentication: None required for public queries
Learn More
Resources
- INDRA Discovery portal: https://discovery.indra.bio
- INDRA Discovery code: https://github.com/gyorilab/indra_cogex
- INDRA Agent code (this server): https://github.com/gyorilab/indra_agent
- General MCP specification: https://spec.modelcontextprotocol.io