UNPKG

@longevity-genie/biostratum-mcp-plugin

Version:

ElizaOS MCP plugin for biostratum - a comprehensive MCP composer and adapter solution

295 lines 59.8 kB
{ "fetchedAt": "2025-06-07T16:03:53.519Z", "totalServers": 5, "totalTools": 51, "toolsByServer": { "biothings": [ "query_genes", "query_many_genes", "get_gene_metadata", "get_gene", "get_genes", "query_variants", "query_many_variants", "get_variant", "get_variants", "query_chems", "query_many_chemicals", "get_chem", "get_chems", "get_taxon", "get_taxons", "query_taxons", "query_many_taxons", "download_entrez_data", "perform_pairwise_alignment" ], "opengenes": [ "opengenes_get_schema_info", "opengenes_example_queries", "opengenes_db_query" ], "gget": [ "gget_search", "gget_info", "gget_seq", "gget_ref", "gget_blast", "gget_blat", "gget_muscle", "gget_diamond", "gget_archs4", "gget_enrichr", "gget_bgee", "gget_pdb", "gget_alphafold", "gget_elm", "gget_cosmic", "gget_mutate", "gget_opentargets", "gget_cellxgene", "gget_setup" ], "synergy-age": [ "synergyage_get_schema_info", "synergyage_example_queries", "synergyage_db_query" ], "pharmacology": [ "local_search_targets_to_file", "local_search_ligands_to_file", "local_get_target_interactions_to_file", "local_get_ligand_interactions_to_file", "list_targets", "list_ligands", "list_interactions" ] }, "toolDetails": { "biothings": { "query_genes": { "description": "Search for genes using a query string with various filtering options.\n \n **IMPORTANT:** This endpoint requires structured queries using specific field names. \n Simple natural language queries like \"CDK2 gene\" or \"human kinase\" will **NOT** work.\n You **MUST** specify the field you are querying, e.g., `symbol:CDK2`, `name:\"cyclin-dependent kinase 2\"`, `taxid:9606`.\n Use this endpoint when you need to *search* for genes based on criteria, not when you already know the specific gene ID.\n If you know the exact Entrez or Ensembl ID, use the `/gene/{gene_id}` endpoint instead for faster retrieval.\n If you only need general database information (like available fields or total gene count), use the `/gene/metadata` endpoint.\n It does not give exact sequences of the gene but gives ids of genomic, protein and rna sequences which you can download with other tools (like download_entrez_data). If you use those ids in downloads you must alway check whether user wants protein, dna or rna sequence (clarify if not clear)\n It does not give exact variants but you have tool for variants resolution based on this gene ids\n\n **Supported Query Features (based on Lucene syntax):**\n 1. Simple Term Queries:\n - `q=cdk2` (Searches across default fields like symbol, name, aliases)\n - `q=\"cyclin-dependent kinase\"` (Searches for the exact phrase)\n \n 2. Fielded Queries (specify the field to search):\n - `q=symbol:CDK2`\n - `q=name:\"cyclin-dependent kinase 2\"`\n - `q=refseq:NM_001798`\n - `q=ensembl.gene:ENSG00000123374`\n - `q=entrezgene:1017`\n - See [MyGene.info documentation](https://docs.mygene.info/en/latest/doc/query_service.html#available-fields) for more fields.\n \n 3. Range Queries (for numerical or date fields):\n - `q=taxid:[9606 TO 10090]` (Find genes in taxonomy range including 9606 and 10090)\n - `q=entrezgene:>1000` (Find genes with Entrez ID greater than 1000)\n \n 4. Boolean Queries:\n - `q=symbol:CDK2 AND taxid:9606` (Both conditions must be true)\n - `q=symbol:CDK* AND NOT taxid:9606` (Find CDK genes not in human)\n - `q=symbol:CDK2 OR symbol:BRCA1` (Either condition can be true)\n - `q=(symbol:CDK2 OR symbol:BRCA1) AND taxid:9606` (Grouping)\n \n 5. Wildcard Queries:\n - `q=symbol:CDK*` (Matches symbols starting with CDK)\n - `q=name:*kinase*` (Matches names containing kinase)\n - `q=symbol:CDK?` (Matches CDK followed by one character)\n\n **Note:** See the [MyGene.info Query Syntax Guide](https://docs.mygene.info/en/latest/doc/query_service.html#query-syntax) for full details.\n \n The response includes pagination information (`total`, `max_score`, `took`) and the list of matching `hits`.\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Responses:**\n\n- **200** (Success): Provides a list of `GeneResponse` objects (e.g., symbol, name, taxid) as 'hits', along with 'total' count, 'max_score', and 'took' time.\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"hits\": [\n \"unknown_type\"\n ],\n \"total\": \"unknown_type\",\n \"max_score\": \"unknown_type\"\n}\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "q" ] }, "query_many_genes": { "description": "Perform multiple gene searches in a single request using a comma-separated list of query terms.\n This endpoint essentially performs a batch query similar to the POST request described in the [MyGene.info documentation](https://docs.mygene.info/en/latest/doc/query_service.html#batch-queries-via-post).\n\n **IMPORTANT:** Unlike `/gene/query`, the `query_list` parameter here takes multiple **terms** (like gene IDs, symbols, names) rather than full query strings.\n The `scopes` parameter defines which fields these terms should be searched against.\n Use this endpoint for batch *searching* of genes based on specific identifiers or terms within defined scopes.\n If you know the exact Entrez or Ensembl IDs for multiple genes and want direct retrieval, use the `/genes` endpoint instead (which is generally faster for ID lookups).\n\n **Endpoint Usage:**\n - Query multiple symbols: `query_list=CDK2,BRCA1` with `scopes=symbol`\n - Query multiple Entrez IDs: `query_list=1017,672` with `scopes=entrezgene`\n - Query mixed IDs/symbols: `query_list=CDK2,672` with `scopes=symbol,entrezgene` (searches both scopes for each term)\n \n **Result Interpretation:**\n - The response is a list of matching gene objects.\n - It does not give exact sequences of the gene but gives ids of genomic, protein and rna sequences which you can download with other tools (like download_entrez_data). If you use those ids in downloads you must alway check whether user wants protein, dna or rna sequence (clarify if not clear)\n - It does not give exact variants but you have tool for variants resolution based on this gene ids\n - Each object includes a `query` field indicating which term from the `query_list` it matched.\n - A single term from `query_list` might match multiple genes (e.g., a symbol matching genes in different species if `species` is not set, or matching multiple retired IDs).\n - Terms with no matches are **omitted** from the response list (unlike the POST endpoint which returns a `notfound` entry).\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Responses:**\n\n- **200** (Success): Returns a list of `GeneResponse` objects, each including details like symbol, name, taxid, and the original query term.\n - Content-Type: `application/json`\n\n - **Example:**\n```json\n[\n \"unknown_type\"\n]\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "query_list" ] }, "get_gene_metadata": { "description": "Retrieve metadata about the underlying MyGene.info gene annotation database, **NOT** information about specific genes.\n \n **IMPORTANT:** Use this endpoint ONLY to understand the database itself (e.g., to discover available fields, check data versions, or get overall statistics). \n It **CANNOT** be used to find or retrieve data for any particular gene. Use `/gene/query` or `/gene/{gene_id}` for that.\n \n **Returned Information Includes:**\n - `stats`: Database statistics (e.g., total number of genes).\n - `fields`: Available gene annotation fields and their data types.\n - `index`: Information about the backend data index.\n - `version`: Data version information.\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Responses:**\n\n- **200** (Success): Returns `MetadataResponse` containing database `stats` (e.g., total genes), available `fields` with data types, `index` information, and data `version`.\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"stats\": {\n \"key\": \"value\"\n },\n \"fields\": \"unknown_type\",\n \"index\": \"unknown_type\"\n}\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": false, "requiredParams": [] }, "get_gene": { "description": "Retrieves detailed information for a **single, specific gene** using its exact known identifier.\n \n **IMPORTANT:** **This is the preferred endpoint over `/gene/query` for fetching a specific gene when you already know its standard ID (Entrez or Ensembl) and don't need complex search filters.** It's generally faster for direct lookups.\n If you need to *search* for genes based on other criteria (like symbol, name, genomic location, function) or use complex boolean/range queries, use `/gene/query`.\n \n **Supported Identifiers:**\n - Entrez Gene ID: e.g., `1017`\n - Ensembl Gene ID: e.g., `ENSG00000123374`\n \n The response includes comprehensive gene information (fields can be customized using the `fields` parameter).\n If the ID is not found, a 404 error is returned.\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Path Parameters:**\n\n- **gene_id** (Required): Gene identifier (Entrez Gene ID or Ensembl Gene ID)\n\n\n**Responses:**\n\n- **200** (Success): Returns a `GeneResponse` object containing detailed information for the specified gene, such as symbol, name, taxid, and entrezgene.\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **id**: Gene identifier\n\n - **score**: Search score\n\n - **name**: Gene name\n\n - **symbol**: Gene symbol\n\n - **refseq**: RefSeq information\n\n - **taxid**: Taxonomy ID\n\n - **entrezgene**: Entrez Gene ID\n\n - **ensembl**: Ensembl information\n\n - **uniprot**: UniProt information\n\n - **summary**: Gene summary\n\n - **genomic_pos**: Genomic position information\n\n - **Example:**\n```json\n{\n \"id\": \"string\",\n \"score\": \"unknown_type\",\n \"name\": \"unknown_type\"\n}\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "gene_id" ] }, "get_genes": { "description": "Retrieves detailed information for **multiple specific genes** in a single request using their exact known identifiers.\n \n **IMPORTANT:** **This is the preferred endpoint over `/gene/querymany` for fetching multiple specific genes when you already know their standard IDs (Entrez, Ensembl) and don't need complex search filters.** Provide IDs as a comma-separated string. It's generally faster for direct batch lookups.\n If you need to perform batch *searches* for genes based on other criteria (like symbols across multiple species) or use different scopes per term, use `/gene/querymany`.\n\n **Input Format:**\n Accepts a comma-separated list of gene IDs (Entrez or Ensembl).\n \n **Endpoint Usage Examples:**\n - Multiple Entrez IDs: `gene_ids=1017,1018`\n - Multiple Ensembl IDs: `gene_ids=ENSG00000123374,ENSG00000134057`\n - Mixed IDs: `gene_ids=1017,ENSG00000134057`\n \n The response is a list containing an object for each **found** gene ID. IDs that are not found are silently omitted from the response list.\n The order of results in the response list corresponds to the order of IDs in the input `gene_ids` string.\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Responses:**\n\n- **200** (Success): Returns a list of `GeneResponse` objects, each containing detailed information (e.g., symbol, name, taxid) for the corresponding requested gene ID.\n - Content-Type: `application/json`\n\n - **Example:**\n```json\n[\n \"unknown_type\"\n]\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "gene_ids" ] }, "query_variants": { "description": "Search for variants using a query string with various filtering options, leveraging the MyVariant.info API.\n See the [MyVariant.info Query Syntax Guide](https://docs.myvariant.info/en/latest/doc/variant_query_service.html#query-syntax) for full details.\n \n **IMPORTANT:** Use this endpoint for *searching* variants based on criteria. \n If you already know the exact variant ID (HGVS, rsID), use the `/variant/{variant_id}` endpoint for faster direct retrieval.\n\n **Supported Query Features (Lucene syntax):**\n \n 1. Simple Queries (searches default fields):\n - `q=rs58991260` (Find by rsID)\n \n 2. Fielded Queries (specify the field):\n - `q=dbsnp.vartype:snp`\n - `q=dbnsfp.polyphen2.hdiv.pred:(D P)` (Matches D or P - space implies OR within parens for the same field)\n - `q=_exists_:dbsnp` (Variant must have a `dbsnp` field)\n - `q=_missing_:exac` (Variant must NOT have an `exac` field)\n - See [available fields](https://docs.myvariant.info/en/latest/doc/data.html#available-fields).\n \n 3. Range Queries:\n - `q=dbnsfp.polyphen2.hdiv.score:>0.99`\n - `q=exac.af:[0 TO 0.00001]` (Inclusive range)\n - `q=exac.ac.ac_adj:{76640 TO 80000}` (Exclusive range)\n \n 4. Wildcard Queries:\n - `q=dbnsfp.genename:CDK?` (Single character wildcard)\n - `q=dbnsfp.genename:CDK*` (Multi-character wildcard)\n - *Note: Wildcard cannot be the first character.* \n \n 5. Boolean Queries:\n - `q=_exists_:dbsnp AND dbsnp.vartype:snp`\n - `q=dbsnp.vartype:snp OR dbsnp.vartype:indel`\n - `q=_exists_:dbsnp AND NOT dbsnp.vartype:indel`\n - `q=(pubchem.molecular_weight:>500 OR chebi.mass:>500) AND _exists_:drugbank` (Grouping)\n\n 6. Genomic Interval Queries (can be combined with AND, not within parentheses):\n - `q=chr1:69000-70000`\n - `q=chr1:69000-70000 AND dbnsfp.polyphen2.hdiv.score:>0.9`\n\n The response includes pagination information (`total`, `max_score`, `took`) and the list of matching `hits`.\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Responses:**\n\n- **200** (Success): Provides a list of `VariantResponse` objects (e.g., id, chrom, vcf details) as 'hits', along with 'total' count, 'max_score', and 'took' time.\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"hits\": [\n \"unknown_type\"\n ],\n \"total\": \"unknown_type\",\n \"max_score\": \"unknown_type\"\n}\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "q" ] }, "query_many_variants": { "description": "Perform multiple variant queries in a single request using a comma-separated list of variant identifiers.\n This endpoint is similar to the POST batch query functionality in the [MyVariant.info API](https://docs.myvariant.info/en/latest/doc/variant_query_service.html#batch-queries-via-post).\n \n **IMPORTANT:** This endpoint takes multiple **terms** (like rsIDs, HGVS IDs) in `query_list` and searches for them within the specified `scopes`.\n Use this for batch *searching* or retrieval based on specific identifiers within defined fields.\n If you know the exact IDs and want direct retrieval (which is generally faster), use the `/variants` endpoint.\n \n **Endpoint Usage:**\n - Query multiple rsIDs: `query_list=rs58991260,rs2500` with `scopes=dbsnp.rsid`\n - Query multiple HGVS IDs: `query_list=chr7:g.140453134T>C,chr1:g.69511A>G` (scopes likely not needed if IDs are unique, but `_id` or default scopes can be used)\n - Query mixed IDs: `query_list=rs58991260,chr1:g.69511A>G` with `scopes=dbsnp.rsid,_id`\n \n **Result Interpretation:**\n - The response is a list of matching variant objects.\n - Each object includes a `query` field indicating which term from the `query_list` it matched.\n - A single term might match multiple variants if the scope is broad (e.g., searching a gene name in `dbnsfp.genename`).\n - Terms with no matches are **omitted** from the response list (unlike the MyVariant POST endpoint which returns a `notfound` entry).\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Responses:**\n\n- **200** (Success): Returns a list of `VariantResponse` objects, each including details like id, chrom, vcf information, and the original query term.\n - Content-Type: `application/json`\n\n - **Example:**\n```json\n[\n \"unknown_type\"\n]\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "query_list" ] }, "get_variant": { "description": "Retrieves detailed annotation data for a **single, specific variant** using its identifier, powered by the MyVariant.info annotation service.\n See the [MyVariant.info Annotation Service Docs](https://docs.myvariant.info/en/latest/doc/variant_annotation_service.html).\n \n **IMPORTANT:** **This is the preferred endpoint over `/variant/query` for fetching a specific variant when you already know its standard ID (HGVS or rsID) and don't need complex search filters.** It provides direct, generally faster, access to the full annotation object.\n If you need to *search* for variants based on other criteria (like gene name, functional impact, genomic region) or use complex boolean/range queries, use `/variant/query`.\n \n **Supported Identifiers (passed in the URL path):**\n - HGVS ID (e.g., `chr7:g.140453134T>C`). *Note: MyVariant.info primarily uses hg19-based HGVS IDs.* \n - dbSNP rsID (e.g., `rs58991260`).\n \n The response includes comprehensive variant annotation information. By default (`fields=all` or omitted), the complete annotation object is returned.\n If the ID is not found or invalid, a 404 error is returned.\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Path Parameters:**\n\n- **variant_id** (Required): Variant identifier (HGVS ID or dbSNP rsID)\n\n\n**Responses:**\n\n- **200** (Success): Returns a `VariantResponse` object containing detailed annotation data for the specified variant, such as id, chromosome, VCF info.\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **id**: Variant identifier\n\n - **version**: Version number\n\n - **chrom**: Chromosome number\n\n - **hg19**: HG19 genomic location\n\n - **vcf**: VCF information\n\n - **cadd**: CADD scores and predictions\n\n - **clinvar**: ClinVar annotations\n\n - **cosmic**: COSMIC annotations\n\n - **dbnsfp**: dbNSFP functional predictions\n\n - **dbsnp**: dbSNP annotations\n\n - **docm**: DoCM annotations\n\n - **mutdb**: MutDB annotations\n\n - **snpeff**: SnpEff annotations\n\n - **Example:**\n```json\n{\n \"id\": \"string\",\n \"version\": 1,\n \"chrom\": \"string\",\n \"vcf\": \"unknown_type\"\n}\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "variant_id" ] }, "get_variants": { "description": "Retrieves annotation data for **multiple specific variants** in a single request using their identifiers, similar to the MyVariant.info batch annotation service.\n See the [MyVariant.info Annotation Service Docs](https://docs.myvariant.info/en/latest/doc/variant_annotation_service.html#batch-queries-via-post).\n \n **IMPORTANT:** **This is the preferred endpoint over `/variants/querymany` for fetching multiple specific variants when you already know their standard IDs (HGVS or rsID).** Provide IDs as a comma-separated string. It's generally faster for direct batch lookups.\n If you need to perform batch *searches* for variants based on other criteria or use different scopes per term, use `/variants/querymany`.\n\n **Input Format:**\n Accepts a comma-separated list of variant IDs (HGVS or dbSNP rsIDs) in the `variant_ids` query parameter (max 1000 IDs).\n \n **Endpoint Usage Examples:**\n - Multiple HGVS IDs: `variant_ids=chr7:g.140453134T>C,chr1:g.69511A>G`\n - Multiple rsIDs: `variant_ids=rs58991260,rs2500`\n - Mixed IDs: `variant_ids=chr7:g.140453134T>C,rs58991260`\n \n The response is a list containing the full annotation object for each **found** variant ID. IDs that are not found or are invalid are silently omitted from the response list.\n Each returned object includes a `query` field indicating the input ID it corresponds to.\n The order of results generally corresponds to the input order but may vary for mixed ID types or invalid IDs.\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Responses:**\n\n- **200** (Success): Returns a list of `VariantResponse` objects, each containing detailed annotation data (e.g., id, chrom, vcf info) for the corresponding requested variant ID.\n - Content-Type: `application/json`\n\n - **Example:**\n```json\n[\n \"unknown_type\"\n]\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "variant_ids" ] }, "query_chems": { "description": "Search for chemical compounds using a query string with various filtering options.\n \n This endpoint supports complex queries with the following features:\n \n 1. Simple Queries:\n - \"C6H12O6\" - Find compounds with molecular formula C6H12O6\n - \"glucose\" - Find compounds with name containing \"glucose\"\n \n 2. Fielded Queries:\n - \"pubchem.molecular_formula:C6H12O6\" - Find compounds with specific formula\n - \"pubchem.molecular_weight:[100 TO 200]\" - Find compounds in weight range\n - \"pubchem.xlogp:>2\" - Find compounds with logP > 2\n - \"pubchem.hydrogen_bond_donor_count:>2\" - Find compounds with >2 H-bond donors\n \n 3. Range Queries:\n - \"pubchem.molecular_weight:[100 TO 200]\" - Find compounds in weight range\n - \"pubchem.xlogp:>2\" - Find compounds with logP > 2\n - \"pubchem.topological_polar_surface_area:[50 TO 100]\" - Find compounds in TPSA range\n \n 4. Boolean Queries:\n - \"pubchem.hydrogen_bond_donor_count:>2 AND pubchem.hydrogen_bond_acceptor_count:>4\"\n - \"pubchem.molecular_weight:[100 TO 200] AND pubchem.xlogp:>2\"\n - \"pubchem.molecular_formula:C6H12O6 AND NOT pubchem.inchi_key:KTUFNOKKBVMGRW-UHFFFAOYSA-N\"\n \n The response includes pagination information and can be returned as a pandas DataFrame.\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Responses:**\n\n- **200** (Success): Provides a list of `ChemResponse` objects (e.g., id, PubChem formula, weight) as 'hits', along with 'total' count, 'max_score', and 'took' time.\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"hits\": [\n \"unknown_type\"\n ],\n \"total\": \"unknown_type\",\n \"max_score\": \"unknown_type\"\n}\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "q" ] }, "query_many_chemicals": { "description": "Perform multiple chemical queries in a single request.\n \n This endpoint is useful for batch processing of chemical queries. It supports:\n \n 1. Multiple Query Types:\n - Molecular formula queries: [\"C6H12O6\", \"C12H22O11\"]\n - Name queries: [\"glucose\", \"sucrose\"]\n - Mixed queries: [\"C6H12O6\", \"sucrose\"]\n \n 2. Field Scoping:\n - Search in specific fields: scopes=[\"pubchem.molecular_formula\", \"pubchem.iupac\"]\n - Search in all fields: scopes=None\n \n 3. Result Filtering:\n - Return specific fields: fields=[\"pubchem.molecular_weight\", \"pubchem.xlogp\"]\n - Return all fields: fields=None\n \n The response can be returned as a pandas DataFrame for easier data manipulation.\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Responses:**\n\n- **200** (Success): Returns a list of `ChemResponse` objects, each including details like id, PubChem information, and the original query term.\n - Content-Type: `application/json`\n\n - **Example:**\n```json\n[\n \"unknown_type\"\n]\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "query_list" ] }, "get_chem": { "description": "Retrieves detailed information about a specific chemical compound using its identifier.\n \n This endpoint supports various chemical ID formats:\n - InChIKey: \"KTUFNOKKBVMGRW-UHFFFAOYSA-N\" (Glucose)\n - PubChem CID: \"5793\" (Glucose)\n - SMILES: \"C([C@@H]1[C@H]([C@@H]([C@H]([C@H](O1)O)O)O)O\"\n \n The response includes comprehensive chemical information such as:\n - Basic information (ID, version)\n - PubChem information:\n - Structural properties (SMILES, InChI, molecular formula)\n - Physical properties (molecular weight, exact mass)\n - Chemical properties (hydrogen bond donors/acceptors, rotatable bonds)\n - Stereochemistry information (chiral centers, stereocenters)\n - Chemical identifiers (CID, InChIKey)\n - IUPAC names\n - Topological polar surface area\n - XLogP (octanol-water partition coefficient)\n \n You can filter the returned fields using the 'fields' parameter.\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Path Parameters:**\n\n- **chem_id** (Required): Chemical identifier\n\n\n**Responses:**\n\n- **200** (Success): Returns a `ChemResponse` object containing detailed information for the specified chemical, including PubChem data like formula, weight, and XLogP.\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **id**: Chemical identifier (typically InChIKey)\n\n - **version**: Version number of the data\n\n - **pubchem**: Detailed PubChem information\n\n - **Example:**\n```json\n{\n \"id\": \"string\",\n \"version\": 1,\n \"pubchem\": \"unknown_type\"\n}\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "chem_id" ] }, "get_chems": { "description": "Retrieves information for multiple chemical compounds in a single request.\n \n This endpoint accepts a comma-separated list of chemical IDs in various formats:\n - InChIKeys: \"KTUFNOKKBVMGRW-UHFFFAOYSA-N,XEFQLINVKFYRCS-UHFFFAOYSA-N\"\n - PubChem CIDs: \"5793,5281\"\n - Mixed formats: \"KTUFNOKKBVMGRW-UHFFFAOYSA-N,5281\"\n \n The response includes the same comprehensive chemical information as the single chemical endpoint,\n but for all requested compounds.\n \n You can filter the returned fields using the 'fields' parameter.\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Responses:**\n\n- **200** (Success): Returns a list of `ChemResponse` objects, each containing detailed information (e.g., id, PubChem data) for the corresponding requested chemical ID.\n - Content-Type: `application/json`\n\n - **Example:**\n```json\n[\n \"unknown_type\"\n]\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "chem_ids" ] }, "get_taxon": { "description": "Retrieves detailed information about a specific taxon using its identifier.\n \n This endpoint supports both NCBI Taxonomy IDs and scientific names.\n \n Examples:\n - NCBI ID: 9606 (Homo sapiens)\n - Scientific name: \"Homo sapiens\"\n \n The response includes comprehensive taxon information such as:\n - Basic information (ID, scientific name, common name)\n - Taxonomic classification (rank, parent taxon)\n - Lineage information\n - Alternative names and authorities\n - Gene data availability\n \n By default, all available fields are returned. You can filter the returned fields using the 'fields' parameter.\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Path Parameters:**\n\n- **taxon_id** (Required): Taxon identifier (NCBI ID or scientific name)\n\n\n**Responses:**\n\n- **200** (Success): Returns a `TaxonResponse` object containing detailed information for the specified taxon, such as scientific name, common name, rank, and lineage.\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **_id**: Taxon identifier\n\n - **_version**: Version number\n\n - **authority**: Taxonomic authority\n\n - **common_name**: Common name\n\n - **genbank_common_name**: GenBank common name\n\n - **has_gene**: Whether the taxon has gene data\n\n - **lineage**: Taxonomic lineage IDs\n\n - **other_names**: Other names\n\n - **parent_taxid**: Parent taxon ID\n\n - **rank**: Taxonomic rank\n\n - **scientific_name**: Scientific name\n\n - **taxid**: Taxon ID\n\n - **uniprot_name**: UniProt name\n\n - **Example:**\n```json\n{\n \"_id\": \"string\",\n \"_version\": 1,\n \"authority\": \"unknown_type\"\n}\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "taxon_id" ] }, "get_taxons": { "description": "Retrieves information for multiple taxa in a single request.\n \n This endpoint accepts a comma-separated list of taxon IDs (either NCBI IDs or scientific names).\n \n Examples:\n - Multiple NCBI IDs: \"9606,10090\" (Homo sapiens and Mus musculus)\n - Multiple scientific names: \"Homo sapiens,Mus musculus\"\n - Mixed IDs: \"9606,Mus musculus\" (Homo sapiens by NCBI ID and Mus musculus by name)\n \n The response includes the same comprehensive taxon information as the single taxon endpoint,\n but for all requested taxa.\n \n You can filter the returned fields using the 'fields' parameter.\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Responses:**\n\n- **200** (Success): Returns a list of `TaxonResponse` objects, each containing detailed information (e.g., scientific name, rank) for the corresponding requested taxon ID/name.\n - Content-Type: `application/json`\n\n - **Example:**\n```json\n[\n \"unknown_type\"\n]\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "taxon_ids" ] }, "query_taxons": { "description": "Search for taxa using a query string with various filtering options.\n \n This endpoint supports complex queries with the following features:\n \n 1. Simple Queries:\n - \"scientific_name:Homo sapiens\" - Find taxon by scientific name\n - \"common_name:human\" - Find taxon by common name\n \n 2. Fielded Queries:\n - \"rank:species\" - Find species-level taxa\n - \"parent_taxid:9606\" - Find child taxa of Homo sapiens\n - \"has_gene:true\" - Find taxa with gene data\n \n 3. Range Queries:\n - \"taxid:[9606 TO 10090]\" - Find taxa in ID range\n - \"lineage:>9606\" - Find taxa with Homo sapiens in lineage\n \n 4. Boolean Queries:\n - \"rank:species AND has_gene:true\" - Find species with gene data\n - \"scientific_name:Homo* AND NOT rank:genus\" - Find taxa starting with Homo but not at genus level\n \n 5. Wildcard Queries:\n - \"scientific_name:Homo*\" - Find taxa with scientific name starting with Homo\n - \"common_name:*mouse*\" - Find taxa with 'mouse' in common name\n \n The response includes pagination information and can be returned as a pandas DataFrame.\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Responses:**\n\n- **200** (Success): Provides a list of `TaxonResponse` objects (e.g., scientific name, rank) as 'hits', along with 'total' count, 'max_score', and 'took' time.\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"hits\": [\n \"unknown_type\"\n ],\n \"total\": \"unknown_type\",\n \"max_score\": \"unknown_type\"\n}\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "q" ] }, "query_many_taxons": { "description": "Perform multiple taxon queries in a single request.\n \n This endpoint is useful for batch processing of taxon queries. It supports:\n \n 1. Multiple Query Types:\n - Scientific name queries: [\"Homo sapiens\", \"Mus musculus\"]\n - Common name queries: [\"human\", \"mouse\"]\n - Mixed queries: [\"9606\", \"Mus musculus\"]\n \n 2. Field Scoping:\n - Search in specific fields: scopes=[\"scientific_name\", \"common_name\"]\n - Search in all fields: scopes=None\n \n 3. Result Filtering:\n - Return specific fields: fields=[\"scientific_name\", \"common_name\", \"rank\"]\n - Return all fields: fields=None\n \n The response can be returned as a pandas DataFrame for easier data manipulation.\n You are allowed to call this tool with the same arguments no more than 2 times consequently.\n\n\n**Responses:**\n\n- **200** (Success): Returns a list of `TaxonResponse` objects, each including details like scientific name, rank, and the original query term.\n - Content-Type: `application/json`\n\n - **Example:**\n```json\n[\n \"unknown_type\"\n]\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "query_list" ] }, "download_entrez_data": { "description": "Downloads data records from specified NCBI Entrez databases using Bio.Entrez.\n This endpoint is designed to be called by automated agents (like LLMs) or other services.\n\n **Critical Configuration:**\n The server hosting this API *must* have the `ENTREZ_EMAIL` environment variable set\n to a valid email address. NCBI requires this for Entrez queries to monitor usage\n and prevent abuse. Without it, NCBI may block requests.\n\n **Request Body Parameters:**\n - `ids` (List[str], required): A list of unique identifiers for the records to fetch\n from the specified Entrez database.\n Example: `[\"NM_000546.6\", \"AY123456.1\"]`\n - `db` (DB_LITERAL, required): The target NCBI Entrez database.\n Common choices for sequences: 'nucleotide', 'protein'.\n Other examples: 'gene', 'pubmed', 'taxonomy'.\n For a comprehensive list of supported databases, refer to the `DB_LITERAL`\n type definition in the API schema (includes options like 'pubmed', 'protein', 'nuccore', 'ipg', 'nucleotide', etc.).\n Ensure the `ids` provided are appropriate for the selected `db`.\n - `reftype` (Literal[\"fasta\", \"gb\"], required): The desired format for the\n downloaded data.\n - \"fasta\": Returns data in FASTA format.\n - \"gb\": Returns data in GenBank format.\n Ensure the chosen `reftype` is compatible with the selected `db`.\n\n **Response:**\n - On success: Returns the downloaded data as a single raw string with a\n `Content-Type` of `text/plain`. The content directly corresponds to the\n data fetched from Entrez in the specified `reftype`.\n - On failure:\n - If NCBI Entrez returns an error (e.g., invalid ID, unsupported `db`/`reftype`\n combination, rate limiting), an HTTPException with the corresponding\n status code (e.g., 400, 404, 503) and details from NCBI will be raised.\n - For other unexpected server-side errors during the process, an\n HTTPException with status code 500 will be raised.\n\n **Example LLM Usage:**\n An LLM agent intending to fetch the FASTA sequence for human TP53 mRNA (NM_000546.6)\n would construct a POST request to this endpoint with the following JSON body:\n ```json\n {{\n \"ids\": [\"NM_000546.6\"],\n \"db\": \"nucleotide\",\n \"reftype\": \"fasta\"\n }}\n ```\n The agent should then be prepared to handle a plain text response containing\n the FASTA sequence or an error object if the request fails.\n\n\n**Responses:**\n\n- **200** (Success): Successful Response\n - Content-Type: `application/json`\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "ids", "db", "reftype" ] }, "perform_pairwise_alignment": { "description": "Performs a pairwise sequence alignment (global or local) using Biopython's PairwiseAligner.\n You can specify sequences and alignment scoring parameters.\n\n\n**Responses:**\n\n- **200** (Success): Successful Response\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"score\": 1.5,\n \"aligned_sequence1\": \"string\",\n \"aligned_sequence2\": \"string\",\n \"full_alignment_str\": \"string\",\n \"parameters_used\": {\n \"key\": \"value\"\n }\n}\n```\n\n- **422**: Validation Error\n - Content-Type: `application/json`\n\n - **Response Properties:**\n\n - **Example:**\n```json\n{\n \"detail\": [\n \"unknown_type\"\n ]\n}\n```", "hasRequiredParams": true, "requiredParams": [ "sequence1", "sequence2" ] } }, "opengenes": { "opengenes_get_schema_info": { "description": "Get information about the database schema", "hasRequiredParams": false, "requiredParams": [] }, "opengenes_example_queries": { "description": "Get a list of example SQL queries", "hasRequiredParams": false, "requiredParams": [] }, "opengenes_db_query": { "description": "Query the Opengenes database that contains data about genes involved in longevity, lifespan extension experiments on model organisms, and changes in human and other organisms with aging. Before caling this tool the first time, always check tools that provide schema information and example queries.", "hasRequiredParams": true, "requiredParams": [ "sql" ] } }, "gget": { "gget_search": { "description": "Search for genes using gene symbols, names, or synonyms.\n \n Use this tool FIRST when you have gene names/symbols and need to find their Ensembl IDs.\n Returns Ensembl IDs which are required for get_gene_info and get_sequences tools.\n \n Args:\n search_terms: List of gene symbols (e.g., ['TP53', 'BRCA1']) or names\n species: Target species (e.g., 'homo_sapiens', 'mus_musculus')\n limit: Maximum number of results per search term\n \n Example:\n Input: search_terms=['BRCA1'], species='homo_sapiens'\n Output: {'BRCA1': {'ensembl_id': 'ENSG00000012048', 'description': 'BRCA1 DNA repair...'}}\n \n Downstream tools that need the Ensembl IDs from this search:\n - get_gene_info: Get detailed gene information \n - get_sequences: Get DNA/protein sequences\n ", "hasRequiredParams": true, "requiredParams": [ "search_terms" ] }, "gget_info": { "description": "Get detailed information for genes using their Ensembl IDs.\n \n PREREQUISITE: Use search_genes first to get Ensembl IDs from gene names/symbols.\n \n Args:\n ensembl_ids: List of Ensembl gene IDs (e.g., ['ENSG00000141510'])\n verbose: Include additional annotation details\n \n Example workflow:\n 1. search_genes(['TP53'], 'homo_sapiens') → get Ensembl ID 'ENSG00000141510'\n 2. get_gene_info(['ENSG00000141510']) \n \n Example output:\n {'ENSG00000141510': {'symbol': 'TP53', 'biotype': 'protein_coding', \n 'start': 7661779, 'end': 7687550, 'chromosome': '17'...}}\n ", "hasRequiredParams": true, "requiredParams": [ "ensembl_ids" ] }, "gget_seq": { "description": "Fetch nucleotide or amino acid sequences for genes.\n \n PREREQUISITE: Use search_genes first to get Ensembl IDs from gene names/symbols.\n \n Args:\n ensembl_ids: List of Ensembl gene IDs (e.g., ['ENSG00000141510'])\n translate: If True, returns protein sequences; if False, returns DNA sequences\n isoforms: Include alternative splice isoforms\n \n Example workflow for protein sequence:\n 1. search_genes(['TP53'], 'homo_sapiens') → 'ENSG00000141510'\n 2. get_sequences(['ENSG00000141510'], translate=True)\n \n Example output (protein):\n {'ENSG00000141510': 'MEEPQSDPSVEPPLSQETFSDLWKLLPENNVLSPLPSQAMDDLMLSP...'}\n \n Example output (DNA):\n {'ENSG00000141510': 'ATGGAGGAGCCGCAGTCAGATCCTAGCGTCGAGCCCCCTCTGAGTC...'}\n \n Downstream tools that use protein sequences:\n - alphafold_predict: Predict 3D structure from protein sequence\n - blast_sequence: Search for similar sequences\n ", "hasRequiredParams": true, "requiredParams": [ "ensembl_ids" ] }, "gget_ref": { "description": "Get reference genome information from Ensembl.", "hasRequiredParams": false, "requiredParams": [] }, "gget_blast": { "description": "BLAST a nucleotide or amino acid sequence.", "hasRequiredParams": true, "requiredParams": [ "sequence" ] }, "gget_blat": { "description": "Find genomic location of a sequence using BLAT.", "hasRequiredParams": true, "requiredParams": [ "sequence" ] }, "gget_muscle": { "description": "Align multiple sequences using MUSCLE.", "hasRequiredParams": true, "requiredParams": [ "sequences" ] }, "gget_diamond": { "description": "Align amino acid sequences to a reference using DIAMOND.", "hasRequiredParams": true, "requiredParams": [ "sequences", "reference" ] }, "gget_archs4": { "description": "Get tissue expression data from ARCHS4.", "hasRequiredParams": true, "requiredParams": [ "gene" ] }, "gget_enrichr": { "description": "Perform functional enrichment analysis using Enrichr.", "hasRequiredParams": true, "requiredParams": [ "genes" ] }, "gget_bgee": { "description": "Find orthologs of a gene using Bgee database.\n \n PREREQUISITE: Use search_genes to get Ensembl ID first.\n \n Args:\n gene_id: Ensembl gene ID (e.g., 'ENSG00000012048' for BRCA1)\n type: Type of data ('orthologs' or 'expr