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["Tools
(execute queries)"] B --> D["Resources
(graph schema)"] B --> E["Prompts
(query templates)"] C --> F["INDRA Knowledge Graph
(neo4j database)"] D --> F E --> F 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 style D fill:#e6f7f8,stroke:#4dafbc style E fill:#e6f7f8,stroke:#4dafbc
MCP defines three core primitives:
- Tools: Functions the AI can invoke (e.g., execute a Cypher query, validate syntax)
- Resources: Data the AI can read (e.g., schema information, documentation)
- Prompts: Templates to guide the AI's interactions (e.g., query patterns)
About this MCP Server
This server provides programmatic access to the INDRA CoGEx knowledge graph—a comprehensive biomedical knowledge base integrating multiple sources of biological and chemical information.
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 a AI agent help you formulate and execute sophisticated queries that would require multiple rounds of sequential planning and coding if done manually.
Server Capabilities
- Schema discovery: Explore graph structure and entity types available in CoGEx
- Query execution: Execute Cypher queries on the Neo4j knowledge graph
- Query validation: Validate query syntax before execution to catch errors early
- Result enrichment: Automatically add metadata and context to query results
- Graph navigation: Use specialized tools to traverse the knowledge graph efficiently
How to Connect
Configure your MCP-compatible AI client to connect to this server. The configuration varies slightly by client:
{
"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
Example Usage
Once connected, simply ask questions in plain English. The AI agent using this MCP server will handle the queries toward the knowledge graph:
Ask: "Find drugs that target genes associated with ALS—I'm looking for repurposing candidates with clinical evidence."
Below are the steps Claude Code runs in the background 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}
}
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}
}
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}
}
Ask: "Which genes are shared between Parkinson's and Alzheimer's disease? Find drugs targeting these shared genes."
Below are the steps Claude Code runs in the background 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}
}
{
"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}
}
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
],
"pagination": {"total": 7}
}
Ask: "Show me clinical trials and drugs for pancreatic cancer. What's the competitive landscape?"
Below are the steps Claude Code runs in the background 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}
}
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}
}
Ask: "For EGFR, show me all diseases where it's implicated and drugs that target it."
Below are the steps Claude Code runs in the background 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}
}
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}
}
Ask: "What conditions is metformin being studied for beyond diabetes? Show me the breadth of indications."
Below are the steps Claude Code runs in the background 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}
}
Ask: "What genes are associated with triple-negative breast cancer? Are any druggable?"
Below are the steps Claude Code runs in the background 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"}
],
"pagination": {"total": 4}
}
get_drugs_for_target to explore druggability.
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