Execute GraphQL queries against the Open Targets Platform API.

WORKFLOW - Follow these steps in order:

Step 1: RESOLVE IDENTIFIERS
    If user provides common names (gene symbols, disease names, drug names),
    use `search_entity` tool FIRST to convert them to standardized IDs:

    - Targets/Genes: "BRCA2" -> ENSEMBL ID "ENSG00000139618"
    - Diseases: "breast cancer" -> EFO/MONDO ID "MONDO_0007254"
    - Drugs: "aspirin" -> ChEMBL ID "CHEMBL1201583"
    - Variants: Use "chr_pos_ref_alt" format or rsIDs

    Example: search_entity(query_string="BRCA2", entity_names=["target"])

Step 2: LEARN QUERY STRUCTURE
    Call `get_open_targets_graphql_schema` to retrieve the full API schema.
    Study the schema to understand available types, fields, and their
    relationships, then construct a GraphQL query that fetches the
    information the user needs.

Step 3: CONSTRUCT AND EXECUTE QUERY
    Build GraphQL query using:
    - Standardized IDs from Step 1 (REQUIRED)
    - Query structure from Step 2

    Call this tool with query_string and variables.

REQUIRED IDENTIFIER FORMATS:
- Targets/Genes: ENSEMBL IDs (e.g., "ENSG00000139618")
- Diseases: EFO IDs (e.g., "EFO_0000305") or MONDO IDs (e.g., "MONDO_0007254")
- Drugs: ChEMBL IDs (e.g., "CHEMBL1201583")
- Variants: "chr_pos_ref_alt" format (e.g., "19_44908822_C_T") or rsIDs (e.g., "rs7412")
- Studies: Study IDs (e.g., "GCST90002357")
- Credible Sets: Study Locus IDs (e.g., "7d68cc9c70351c9dbd2a2c0c145e555d")

Args:
    query_string: GraphQL query starting with 'query' keyword
    variables: Optional dict or JSON string with query variables

Returns:
    dict: GraphQL response with data field containing targets, diseases, drugs, variants,
          studies or error message.