# Query Opentarget

> Query OpenTargets for drug targets, disease associations, and therapeutic evidence. Use when user asks about drug targets, disease mechanisms, target validation, or drug-disease associations. Triggers on "opentarget", "drug target", "target validation", "disease association", "therapeutic target", "drug for disease".

- Skill: `runchuan-bu/query-opentarget` (Agent Skill)
- Install (CLI): `npx skillmds@latest add runchuan-bu/query-opentarget`
- Raw SKILL.md: https://api.skillmd.com/api/skills/runchuan-bu/query-opentarget/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Runchuan-BU (https://skillmd.com/u/runchuan-bu)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/runchuan-bu/query-opentarget

---


# OpenTargets Platform Query

Query the OpenTargets Platform GraphQL API for drug-target-disease associations.

## When to Use

- User asks about drug targets for a disease
- User wants disease-gene associations
- User asks about drugs targeting a specific gene
- User wants evidence for target validation

## How to Execute

```python
import requests
import json

OPENTARGETS_URL = "https://api.platform.opentargets.org/api/v4/graphql"

def query_opentargets(graphql_query, variables=None):
    payload = {"query": graphql_query, "variables": variables or {}}
    r = requests.post(OPENTARGETS_URL, json=payload, headers={"Content-Type": "application/json"})
    r.raise_for_status()
    return r.json()

# 1. Search for a target (gene)
def search_target(gene_name):
    query = '''
    query searchTarget($name: String!) {
      search(queryString: $name, entityNames: ["target"], page: {index: 0, size: 5}) {
        hits { id name description entity }
      }
    }'''
    return query_opentargets(query, {"name": gene_name})

# 2. Get diseases associated with a target
def target_diseases(ensembl_id, size=10):
    query = '''
    query targetDiseases($ensemblId: String!, $size: Int!) {
      target(ensemblId: $ensemblId) {
        id approvedSymbol approvedName
        associatedDiseases(page: {index: 0, size: $size}) {
          count
          rows { disease { id name } score
            datasourceScores { componentId score } }
        }
      }
    }'''
    return query_opentargets(query, {"ensemblId": ensembl_id, "size": size})

# 3. Get targets for a disease
def disease_targets(disease_id, size=10):
    query = '''
    query diseaseTargets($diseaseId: String!, $size: Int!) {
      disease(efoId: $diseaseId) {
        id name
        associatedTargets(page: {index: 0, size: $size}) {
          count
          rows { target { id approvedSymbol approvedName } score }
        }
      }
    }'''
    return query_opentargets(query, {"diseaseId": disease_id, "size": size})

# 4. Get drugs for a target
def target_drugs(ensembl_id):
    query = '''
    query targetDrugs($ensemblId: String!) {
      target(ensemblId: $ensemblId) {
        id approvedSymbol
        knownDrugs(size: 10) {
          count
          rows { drug { id name } mechanismOfAction phase status
            disease { id name } }
        }
      }
    }'''
    return query_opentargets(query, {"ensemblId": ensembl_id})

# 5. Search diseases
def search_disease(disease_name):
    query = '''
    query searchDisease($name: String!) {
      search(queryString: $name, entityNames: ["disease"], page: {index: 0, size: 5}) {
        hits { id name description entity }
      }
    }'''
    return query_opentargets(query, {"name": disease_name})

# Example: Find top drug targets for Alzheimer's
result = search_disease("Alzheimer")
hits = result.get("data", {}).get("search", {}).get("hits", [])
if hits:
    disease_id = hits[0]["id"]
    targets = disease_targets(disease_id, size=5)
    disease = targets.get("data", {}).get("disease", {})
    print(f"Disease: {disease.get('name')} ({disease.get('id')})")
    for row in disease.get("associatedTargets", {}).get("rows", []):
        t = row["target"]
        print(f"  {t['approvedSymbol']} ({t['approvedName']}) — score: {row['score']:.3f}")
```

## Common Disease IDs (EFO)

- Alzheimer's: `EFO_0000249`
- Breast cancer: `EFO_0000305`
- Type 2 diabetes: `EFO_0001360`
- Parkinson's: `EFO_0002508`

## Follow-up Suggestions

- "Want me to check what drugs are in clinical trials for this target?"
- "Should I look at the evidence breakdown by data source?"
- "Want me to find the top genetic associations?"

