Skip to main content
Glama
Augmented-Nature

OpenTargets MCP Server

get_target_disease_associations

Retrieve evidence-based associations between genes and diseases with scoring to identify potential therapeutic targets for research.

Instructions

Get target-disease associations with evidence scores

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
targetIdNoTarget Ensembl gene ID
diseaseIdNoDisease EFO ID
minScoreNoMinimum association score (0-1)
sizeNoNumber of results to return (1-500, default: 25)

Implementation Reference

  • The main execution logic for the 'get_target_disease_associations' tool. Validates arguments, constructs and executes GraphQL queries to fetch target-disease associations from Open Targets API based on targetId or diseaseId, handles specific pair lookup (not implemented), and returns JSON results or errors.
    private async handleGetTargetDiseaseAssociations(args: any) { if (!isValidAssociationArgs(args)) { throw new McpError(ErrorCode.InvalidParams, 'Invalid association arguments'); } try { // If only targetId provided, get associations for that target if (args.targetId && !args.diseaseId) { const query = `query GetTargetAssociations($ensemblId: String!) { target(ensemblId: $ensemblId) { id approvedSymbol associatedDiseases { rows { disease { id name } score } } } }`; const response = await this.graphqlClient.post('', { query, variables: { ensemblId: args.targetId, size: args.size || 25 } }); return { content: [ { type: 'text', text: JSON.stringify(response.data, null, 2), }, ], }; } // If only diseaseId provided, get associations for that disease else if (args.diseaseId && !args.targetId) { const query = `query GetDiseaseAssociations($efoId: String!) { disease(efoId: $efoId) { id name associatedTargets { rows { target { id approvedSymbol approvedName } score } } } }`; const response = await this.graphqlClient.post('', { query, variables: { efoId: args.diseaseId, size: args.size || 25 } }); return { content: [ { type: 'text', text: JSON.stringify(response.data, null, 2), }, ], }; } // If both provided, return the association between them else { return { content: [ { type: 'text', text: JSON.stringify({ message: "Specific target-disease pair association lookup not yet implemented", suggestion: "Use targetId OR diseaseId to get associations for that entity" }, null, 2), }, ], }; } } catch (error) { return { content: [ { type: 'text', text: `Error getting associations: ${error instanceof Error ? error.message : 'Unknown error'}`, }, ], isError: true, }; } }
  • JSON Schema defining the input parameters for the tool: targetId, diseaseId, minScore, size. No required fields, allowing queries by target or disease.
    inputSchema: { type: 'object', properties: { targetId: { type: 'string', description: 'Target Ensembl gene ID' }, diseaseId: { type: 'string', description: 'Disease EFO ID' }, minScore: { type: 'number', description: 'Minimum association score (0-1)', minimum: 0, maximum: 1 }, size: { type: 'number', description: 'Number of results to return (1-500, default: 25)', minimum: 1, maximum: 500 }, }, required: [], },
  • src/index.ts:236-249 (registration)
    Registration of the tool in the ListTools handler response array, including name, description, and input schema.
    { name: 'get_target_disease_associations', description: 'Get target-disease associations with evidence scores', inputSchema: { type: 'object', properties: { targetId: { type: 'string', description: 'Target Ensembl gene ID' }, diseaseId: { type: 'string', description: 'Disease EFO ID' }, minScore: { type: 'number', description: 'Minimum association score (0-1)', minimum: 0, maximum: 1 }, size: { type: 'number', description: 'Number of results to return (1-500, default: 25)', minimum: 1, maximum: 500 }, }, required: [], }, },
  • Type guard and validation function for association tool arguments, ensuring valid types and at least one ID provided.
    const isValidAssociationArgs = (args: any): args is { targetId?: string; diseaseId?: string; minScore?: number; size?: number } => { return ( typeof args === 'object' && args !== null && (args.targetId === undefined || typeof args.targetId === 'string') && (args.diseaseId === undefined || typeof args.diseaseId === 'string') && (args.minScore === undefined || (typeof args.minScore === 'number' && args.minScore >= 0 && args.minScore <= 1)) && (args.size === undefined || (typeof args.size === 'number' && args.size > 0 && args.size <= 500)) && (args.targetId !== undefined || args.diseaseId !== undefined) ); };
  • src/index.ts:296-297 (registration)
    Dispatch case in the CallToolRequestSchema handler that routes the tool call to the specific handler method.
    case 'get_target_disease_associations': return this.handleGetTargetDiseaseAssociations(args);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Augmented-Nature/OpenTargets-MCP-Server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server