TogoMCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NCBI_API_KEY | Yes | Your NCBI API key (obtain from https://www.ncbi.nlm.nih.gov/datasets/docs/v2/api/api-keys/). Required for NCBI tools. | |
| TOGOMCP_QUERY_LOG | No | Optional file path to enable query logging. Example: /var/log/togomcp/togomcp.jsonl |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| TogoMCP_Usage_GuideA | ⚠️ CALL THIS TOOL FIRST every turn, before any other TogoMCP tool. Returns the v6 Usage Guide, which enforces the empirically-validated workflow: Why this matters (measured): questions with ≥3 consecutive run_sparql calls score ~1.1 points lower than compliant ones; jumping to text search before reading the MIE schema accounts for ~95% of silent SPARQL failures. The guide's DATABASE CATALOG lists all databases with what each is for (scan it to pick 1–3), plus the EXPLORATION habits (Seed Definition, concierge check, prioritized Next Steps) for open-ended deep dives. Most RDF Portal endpoints host MANY databases (primary: 16, ebi: 5, ncbi: 5, sib: 4) and every endpoint hosts many GRAPHS. An unpinned query silently reads all of them, so a co-hosted graph can supply a predicate you believe is native and return a plausible, correctly-shaped, WRONG number — with no error. The guide's CO-TENANCY section is the one to read before writing SPARQL. Re-run GATE 0 every turn — prior workflow does not carry forward. Returns: str: The content of the TogoMCP usage guide. |
| get_sparql_endpointsA | Get the available SPARQL endpoints for RDF Portal. RETURNS a dict with two keys: Returns: Dict with two keys: - databases: Dict mapping database -> {url, endpoint_name, keyword_search} - endpoints: Dict mapping endpoint_name -> {url, databases} |
| run_sparqlA | Run a SPARQL query on an RDF database. ALWAYS pass database (required; valid values: uniprot, rhea, pubchem, pdb, chembl, chebi, reactome, ensembl, amrportal, mesh, go, taxonomy, mondo, nando, bacdive, mediadive, clinvar, pubmed, pubtator, ncbigene, medgen, ddbj, glycosmos, supercon, bgee, oma, brenda, hgnc, jpostdb, massbank, nbrc, mogplus, hco, mco, togovar, ontology) for single-database queries. For cross-database queries on a shared endpoint, still pass a member database AND add endpoint_name (valid values: sib, pubchem, pdb, ebi, primary, ncbi, ddbj, glycosmos, nims, togovar) or endpoint_url, which take priority over database. Invalid database/endpoint_name values fail immediately with a deterministic error — do not retry. RETURNS the query results as a CSV-formatted string (first row is the header of SELECT variable names). |
| get_graph_listA | Get a list of named graphs on a SPARQL endpoint. ALWAYS pass database (required). Virtuoso/OpenLink internal graphs are filtered out. Graph URIs containing the database substring (case-insensitive) are ranked first — useful when the endpoint hosts multiple databases (e.g. SIB hosts UniProt + Rhea + Bgee + OMA). For a database not yet in the registry, pass |
| get_MIE_fileA | At the start of any task, identify ALL databases needed and call this tool for EACH of them before writing any SPARQL queries. Do not query a database until its MIE file has been read. Get the MIE (Metadata Interoperability Exchange) file containing the ShEx schema, RDF and SPARQL examples of a specific RDF database. RETURNS the MIE file as a YAML-formatted string; an unknown database returns a string beginning with 'Error:' that lists the valid database names. |
| search_uniprot_entityA | Search for a UniProt entity ID by query. ⚠️ Only the search string and The search string can be passed as any of: RETURNS a TSV string with columns: accession, protein_name, organism_name. On upstream/HTTP failure this tool does NOT raise — it returns a plain string beginning with "Error:" (not TSV). CHECK FOR the "Error:" prefix BEFORE parsing rows. |
| get_pubchem_compound_idA | Get a PubChem compound ID (CID) for a compound name. RETURNS the PubChem Compound ID(s) as a JSON-formatted string. On upstream/HTTP failure this tool does NOT raise — it returns a plain string beginning with "Error:" (not JSON). CHECK FOR the "Error:" prefix BEFORE parsing. |
| get_compound_attributes_from_pubchemA | Get compound attributes from PubChem RDF. RETURNS the compound attributes as a JSON-formatted string. On upstream/HTTP failure this tool does NOT raise — it returns a plain string beginning with "Error:" (not JSON). CHECK FOR the "Error:" prefix BEFORE parsing. |
| search_pdb_entityB | Search PDBj for structures, chemical components, or BIRD molecules. Returns rich, named fields per hit (not just the title) — for RETURNS a JSON string |
| search_mesh_descriptorA | Search for MeSH ID by query. RETURNS a JSON-formatted string of the search results. On upstream/HTTP failure this tool does NOT raise — it returns a plain string beginning with "Error:" (not JSON). CHECK FOR the "Error:" prefix BEFORE parsing. |
| search_reactome_entityA | Search the Reactome pathway knowledgebase by keyword (name / fuzzy match). Resolves a term (pathway / reaction / protein / complex / small-molecule name) to Reactome stable IDs. Matching is keyword/fuzzy — UNLIKE the exact-match ChEMBL search tools, so expect ranked, approximate hits. RETURNS a dict {'total_count', 'has_more', 'results'} — NOT a bare list.
|
| search_rhea_entityA | Search the Rhea reaction database by keyword and return matching reactions. Matching is KEYWORD/FUZZY over reaction participants, equations, EC numbers,
and cross-references — NOT exact-ID lookup. A term like "glucose" matches any
reaction mentioning glucose. Field-scoped terms and wildcards are supported
(e.g. RETURNS a dict {'total_count', 'has_more', 'results'} — NOT a bare list.
'total_count' is the number of reactions RETURNED (capped by Valid |
| search_chembl_id_lookupA | Resolve a name to ChEMBL IDs across several entity kinds in one call. Cross-entity convenience wrapper over the ChEMBL RDF graph. Two matching regimes, because the entity kinds carry different searchable text: • EXACT (case-insensitive) NAME match — COMPOUND (skos:altLabel: brands,
generics, synonyms), TARGET (component skos:altLabel: gene symbols, protein
names), CELL_LINE and TISSUE (rdfs:label, e.g. "Liver", "CCRF S-180"). Not
fuzzy/substring — fix typos before calling. Prefer the entity-specific tools
( • KEYWORD-IN-DESCRIPTION — ASSAY. Assays have no name; their searchable text is a free-text dcterms:description, so ASSAY does a keyword (token) match on that description, NOT an exact match, e.g. entity_type="ASSAY", query="acetylcholinesterase" → every assay whose description mentions it. ASSAY results are relevance-ranked (best description match first). Default (no The search string can be passed as any of: RETURNS a dict {'total_count', 'has_more', 'results'}. |
| search_chembl_targetA | Resolve a biological TARGET (protein/receptor/enzyme) to a ChEMBL ID. ⚠️ DO NOT use this tool to look up drugs, compounds, or molecules by name.
For drug/compound/molecule names (e.g., "sorafenib", "imatinib", "aspirin"),
use Resolution is deterministic SPARQL against the ChEMBL RDF graph, not a lexical
search — there is no ranking to second-guess:
• UNIPROT ACCESSION (e.g. "P00533") → the structured skos:exactMatch link.
Returns every target containing that protein (the single protein plus any
complex/family/chimera it participates in) — filter Every result carries Target-type values (for The search string can be passed as any of: RETURNS a dict {'total_count', 'has_more', 'results'}. |
| search_chembl_moleculeA | Resolve a DRUG / COMPOUND / MOLECULE (by name or structure) to a ChEMBL ID. ✅ Use this tool for drug, compound, or molecule names
(e.g., "sorafenib", "imatinib", "aspirin", "Gleevec").
⚠️ For biological targets (proteins, receptors, enzymes, genes such as
EGFR, BRCA1, TP53), use Resolution path is auto-selected from the query shape: • NAME / BRAND / SYNONYM → deterministic SPARQL, EXACT (case-insensitive) match on the molecule's skos:altLabel synonyms (which include brand and trade names — "Gleevec" → CHEMBL941 IMATINIB). Not fuzzy/substring: fix typos before calling. No relevance ranking to second-guess. • InChIKey / InChI → deterministic SPARQL, EXACT (case-SENSITIVE) match on the RDF-stored identifier. These are canonical (toolkit-independent), so exact match is correct, e.g. "BSYNRYMUTXBXSQ-UHFFFAOYSA-N" → CHEMBL25. • SMILES → the ChEMBL REST chemistry engine (flexmatch), NOT exact match: a SMILES is written differently by each toolkit, so flexmatch normalizes the structure first, e.g. "CC(=O)Oc1ccccc1C(=O)O" → CHEMBL25. Structure detection is conservative (multi-word input, or input without the "InChI=" prefix / InChIKey pattern / structural punctuation, is treated as a name), so a bare-chain SMILES like "CCO" is treated as a name. The search string can be passed as any of: RETURNS a dict {'total_count', 'has_more', 'results'}. |
| togoid_getAllRelationA | Discover all available ID conversion routes between databases. ⚡ PLANNING TOOL — Call this EARLY when a question involves 2+ databases that are on DIFFERENT SPARQL endpoints and you need to map IDs between them. Returns a map of all source→target database pairs that TogoID can convert. Use this to plan your cross-database strategy BEFORE attempting SPARQL joins or manual ID lookups. Common conversion routes include: - ncbigene ↔ uniprot (Gene IDs to/from protein accessions) - uniprot ↔ pdb (Protein accessions to/from 3D structure IDs) - ncbigene ↔ ensembl_gene (NCBI Gene to/from Ensembl gene IDs) - chembl_target ↔ uniprot (Drug targets to/from protein accessions) - ncbigene ↔ hgnc (Gene IDs to/from HGNC symbols) - pubchem_compound ↔ chembl_compound (Compound IDs across databases) When to use: - Question references 2+ databases on different SPARQL endpoints - You need to bridge identifiers (e.g., "find UniProt proteins for these NCBI Gene IDs") - Before writing complex multi-step SPARQL to join databases manually When NOT to use: - Both databases share a SPARQL endpoint (use a single SPARQL query) - You only need data from one database - NCBI esearch can already cross-reference what you need Returns: Dictionary mapping database pairs to their relationship metadata. Each entry shows source, target, and the nature of the link. |
| togoid_getRelationA | Check if a specific ID conversion route exists and get its details. Use this to verify that a particular source→target conversion is available before calling convertId. Also reveals the nature of the relationship (e.g., "encoded by", "has structure", "is target of"). This is a single-hop, pairwise check: pass RETURNS a JSON string of a bare array of relationship objects, each with
|
| togoid_getAllDatasetA | List all databases registered in TogoID with their ID formats. Returns configuration for every dataset TogoID knows about, including:
Useful for: - Discovering which databases are available for ID conversion - Checking the expected ID format (e.g., UniProt accession vs entry name) - Finding example IDs to test with countId before bulk conversion Returns: Dictionary mapping dataset keys (e.g., 'uniprot', 'ncbigene', 'pdb') to their configuration objects. |
| togoid_getDatasetA | Get configuration for a specific database in TogoID. Retrieves detailed metadata about a single dataset, including its ID format, URI prefix, example IDs, and available annotations. RETURNS a dict with |
| togoid_getDescriptionA | Get human-readable descriptions for all databases in TogoID. Returns names, descriptions (in English and Japanese), and organization info for each registered database. Useful for understanding what each database contains when planning cross-database queries. Returns: Dictionary keyed by dataset name with description metadata. |
| togoid_convertIdA | Convert identifiers from one database to another. Maps IDs between biological databases — e.g., NCBI Gene IDs to UniProt accessions, or UniProt accessions to PDB structure IDs. RETURNS a JSON string of a bare array of [source_id, target_id] pairs, e.g. '[["672", "P38398"], ["675", "O15129"]]'. An empty array means none of the input IDs converted along the route. |
| togoid_countIdA | Check how many of your IDs can be converted before doing bulk conversion. A lightweight pre-check: tells you how many source IDs have mappings in the target database WITHOUT actually returning the mapped IDs. Use this to: - Verify your IDs are in the correct format - Estimate result size before a large convertId call - Check if a conversion route works for your specific IDs This is a single-hop, pairwise check: pass |
| ncbi_esearchA | Search NCBI databases using E-utilities esearch API. ⚠️ CRITICAL FOR COMPREHENSIVE RESULTS ⚠️ ALWAYS use NCBI field tags for Gene, ClinVar, and similar databases! Without field tags, you may miss 70-80% of relevant results. MANDATORY FIELD TAGS FOR GENE DATABASE: • [Organism] - Taxonomic filtering (e.g., "Homo sapiens[Organism]", "Archaea[Organism]") • [Gene Name] - Gene symbols (e.g., "TP53[Gene Name]", "nifH[Gene Name]") • [All Fields] - Broad keyword search (e.g., "nitrogenase[All Fields]") IMPACT OF FIELD TAGS (Gene Database): • Without field tags: ~300 results (20-30% recall) ❌ • With field tags: ~1,300 results (100% recall) ✅ • Performance loss: Missing field tags = 70-80% data loss! EXAMPLE (Gene): ✅ query="Archaea[Organism] AND (nifH[Gene Name] OR nitrogenase[All Fields])" ❌ query="archaea AND nifH" (missing [Organism]/[Gene Name] tags → ~23% recall) RETURNS formatted text results carrying the database-specific IDs. On a
missing/invalid |
| ncbi_list_databasesA | List all supported NCBI databases with descriptions and example queries. Returns: Formatted list of available databases |
| ncbi_esummaryA | Fetch summary information for given IDs using esummary. Useful for getting detailed info after esearch. RETURNS a text item holding the parsed JSON summary data. On a
missing/invalid |
| ncbi_efetchC | Fetch full records using efetch. Returns actual data (sequences, records, etc.) |
| togovar_search_geneA | Resolve a human gene symbol/alias to its HGNC ID for variant search. This is the FIRST step of the two-step variant workflow: the The TogoVar endpoint does loose token matching with no relevance order (it
returns the same set for "ALDH2" and the non-existent "ALDH2A1"), so this
tool RE-RANKS client-side: exact symbol match first, then prefix, then other
matches. Each result carries |
| togovar_search_diseaseA | Resolve a disease term to MONDO / MedGen IDs for variant search. The returned The TogoVar endpoint does loose token matching with no relevance order (a
query like "cystic fibrosis" also returns unrelated "Hepatic fibrosis…"
rows), so this tool RE-RANKS client-side: exact label match first, then
prefix, then whole-word, then loose token matches last. Each result carries
COVERAGE LIMIT: TogoVar only indexes diseases that have ClinVar/MGeND
variant associations, so some canonical/parent MONDO terms are simply absent
here (e.g. MONDO_0007254 "breast cancer" does NOT appear in these results).
But a broad/parent MONDO ID still WORKS as a |
| togovar_search_variantA | Search TogoVar for human genome variants with population frequencies. TogoVar integrates allele frequencies from gnomAD, ToMMo (Japanese), NCBN, GEM-J, JGA, and BioBank Japan, plus ClinVar + MGeND clinical significance and SIFT/PolyPhen/AlphaMissense predictions — data with no SPARQL counterpart elsewhere in TogoMCP. All filters are optional and combined with AND. Supply zero filters to browse; but scope tightly — the database holds ~1 billion variants. COUNTS: PAGING CAP: the API allows STATISTICS SCOPE (stat=True): all facets are scoped to the filtered set, but
they count at different granularities. ROUND-TRIP TO SPARQL: gate on TWO-STEP WORKFLOW for gene/disease filters:
1. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/dbcls/togomcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server