mgbam commited on
Commit
93e7f22
·
verified ·
1 Parent(s): c9d29cb

Create targets.py

Browse files
Files changed (1) hide show
  1. mcp/targets.py +32 -0
mcp/targets.py ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Open Targets GraphQL client – fetch gene ↔ disease ↔ drug associations.
2
+ Docs: https://platform.opentargets.org/
3
+ No API‑key required (public endpoint).
4
+ """
5
+
6
+ import httpx, textwrap, asyncio
7
+ from typing import List, Dict
8
+
9
+ _OT_URL = "https://api.platform.opentargets.org/api/v4/graphql"
10
+
11
+ _QUERY_TEMPLATE = textwrap.dedent(
12
+ """
13
+ query Assoc($gene: String!, $size: Int!) {
14
+ associations(geneSymbol: $gene, size: $size) {
15
+ rows {
16
+ score
17
+ datatypeId
18
+ datasourceId
19
+ disease { id name }
20
+ target { id symbol }
21
+ }
22
+ }
23
+ }
24
+ """
25
+ )
26
+
27
+ async def fetch_ot_associations(gene_symbol: str, *, size: int = 30) -> List[Dict]:
28
+ payload = {"query": _QUERY_TEMPLATE, "variables": {"gene": gene_symbol, "size": size}}
29
+ async with httpx.AsyncClient(timeout=15) as client:
30
+ resp = await client.post(_OT_URL, json=payload)
31
+ resp.raise_for_status()
32
+ return resp.json()["data"]["associations"]["rows"]