kegg-mcp-server
An unofficial MCP server that gives any MCP client (Claude Desktop, Claude Code, Cursor, etc.) structured, token-aware access to the KEGG bioinformatics database — no API key required.
Search every major KEGG database — pathways, genes, compounds, reactions, enzymes, diseases, drugs, modules, KO orthology entries, glycans, and BRITE hierarchies — with capped, token-aware result sets.
Fetch detailed entry info for genes, compounds, reactions, enzymes, pathways, diseases, drugs, modules, KOs, glycans, and BRITE hierarchies, defaulting to compact
EntrySummaryoutput ordetail_level="full"for complete parses (genes can optionally include sequences).Explore pathway relationships — list a pathway's genes, compounds, and reactions, or look up a gene's cross-species orthologs.
Run cross-database queries — batch-fetch up to 50 entries at once, convert IDs between KEGG and UniProt/NCBI/ChEBI/PubChem, and find related entries in other KEGG databases.
Screen drug–drug interactions for one or more drugs at a time.
Browse databases and organisms — get release stats and filter the ~12k KEGG organisms by code or name.
Visualize pathways — render LLM-friendly ASCII art (chain or grid layout) or draw a PNG pathway map with gene boxes coloured by KO/EC highlight groups.
Access data via MCP resource templates (
kegg://pathway/{id},kegg://gene/{id}, etc.) and guided prompts for enrichment analysis, drug-target investigation, pathway comparison, and visualization workflows.Rely on built-in robustness — TTL caching, retries with exponential backoff, a 3 req/s rate limit, structured JSON errors, and truncated-result reporting.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@kegg-mcp-serversearch pathways for glycolysis in human"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
kegg-mcp-server-python
An unofficial Python Model Context Protocol (MCP) server for the KEGG bioinformatics database. It exposes 35 tools, 9 resource templates, and 4 guided prompts to any MCP-compatible client (Claude Desktop, Claude Code, Cursor, etc.). Developed by Elytron Biotech.
Built on the official MCP Python SDK v2 (MCPServer), returns structured Pydantic JSON (not raw text), and includes per-operation TTL caching, request retry with exponential backoff, a three-request-per-second rate limit, structured JSON stderr logging, and batch helpers out of the box. No API key is required.
Responses are token-aware by default: get_*_info tools return a compact EntrySummary (entry id, name, class, description, counts of linked entities) unless you pass detail_level="full". List- and mapping-shaped outputs are capped at 100 items and report the full count plus truncated. Failures are MCP tool errors (isError: true) whose text is a typed ErrorResult JSON (code, retryable, hint) the model can reason about.
0.5.0 changes output shapes: failures (including not-found) are now
isError: trueinstead of a normal result;convert_identifiersmaps each source ID to a list of targets; link/ortholog/pathway-gene/DDI outputs are capped withtruncated;batch_entry_lookupreturns summaries unlessdetail_level="full"; logging is configured with--log-level/--log-tracebacksinstead of environment variables.
0.6.0 adds
draw_pathway_map: a PNG pathway map with gene boxes coloured by KO/EC groups, redrawn from KGML (new dependency: Pillow). See Pathway map images.
Usage notice: This is a community project and is not affiliated with or endorsed by KEGG or Kanehisa Laboratories. KEGG states that its REST API is for academic use by academic users; non-academic users must follow KEGG's linked non-academic-use guidance. Users are responsible for ensuring that their use complies with those terms.
Quick start
With uvx (no install)
uvx kegg-mcp-serverWith pip
pip install kegg-mcp-server
kegg-mcp-serverRequires the MCP Python SDK v2 (
mcp>=2,<3, protocol revision2026-07-28). Versions up to 0.3.1 ran on the 1.x SDK; because mcp 2.0 removedmcp.server.fastmcp, that is a breaking dependency change, which is why this is 0.4.0 rather than a patch. Nothing changes for clients — an mcp 2.x server answers every earlier protocol revision from the same app, so a host still on the 1.x SDK connects unchanged and negotiates2025-11-25.
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"kegg": {
"command": "uvx",
"args": ["kegg-mcp-server"]
}
}
}OS | Path |
macOS |
|
Windows |
|
Linux |
|
Claude Code
claude mcp add kegg-mcp-server -- uvx kegg-mcp-serverOr install as a plugin (includes slash commands, agent, and skill):
claude plugin marketplace add Lucas-Servi/kegg-mcp-server-python
claude plugin install kegg-mcp-server@kegg-mcp-serverOr, in one step (Claude Code v2.1.292+), pointing install at the marketplace directly:
claude plugin install kegg-mcp-server --marketplace Lucas-Servi/kegg-mcp-server-pythonThe plugin starts a local (stdio) MCP server, so it works in Claude Code, Cowork, and Claude Desktop, but not in the claude.ai web app.
The plugin bundles:
Type | Name | Description |
Command |
| Quick search across all KEGG databases |
Command |
| Pathway deep-dive with ASCII visualization |
Command |
| Drug targets, pathways, and interactions |
Agent |
| Auto-invoked for biological pathway/gene/drug questions |
Skill |
| Multi-step workflow guide (enrichment, comparison, investigation) |
MCPB bundle (Linux x86-64 only, no Python install required)
The release bundle is built specifically for Linux x86-64 and CPython 3.12 because it vendors native dependencies. Download the linux-x86_64-py312.mcpb artifact from the releases page and drag it onto Claude Desktop. On macOS or Windows, use the cross-platform uvx, pip, or Claude Code plugin installation above.
Related MCP server: Oh My KEGG MCP
What's included
35 Tools
Category | Tools | Examples |
Database |
| Get KEGG release stats, search the ~12k organisms by code or name |
Pathways |
| Search by keyword, get full pathway details |
Genes |
| Find genes in any organism, cross-species orthologs |
Compounds |
| Search by name/formula/mass, find reactions |
Reactions |
| Equation, enzymes, pathways for any reaction |
Enzymes |
| EC number lookup, substrates, genes |
Diseases |
| Disease genes, drugs, pathways |
Drugs |
| Drug targets, DDI screening |
Modules |
| Functional module definitions |
Orthology |
| KEGG Orthology entries |
Glycans |
| Glycan composition, reactions |
BRITE |
| Functional hierarchies (level counts by default; |
Cross-database |
| Bulk fetch (up to 50), ID mapping within one kind — genes ↔ UniProt/NCBI, chemistry ↔ ChEBI/PubChem |
Visualization |
| ASCII art rendering of pathway topology (chain or grid mode); a PNG map with gene boxes coloured by KO/EC groups (e.g. one per genome) |
9 Resource Templates
Direct URI-based access to KEGG entities:
kegg://pathway/{pathway_id} e.g. kegg://pathway/hsa00010
kegg://gene/{gene_id} e.g. kegg://gene/hsa:1956
kegg://compound/{compound_id} e.g. kegg://compound/C00002
kegg://reaction/{reaction_id} e.g. kegg://reaction/R00756
kegg://disease/{disease_id} e.g. kegg://disease/H00004
kegg://drug/{drug_id} e.g. kegg://drug/D00001
kegg://organism/{org_code} e.g. kegg://organism/hsa
kegg://pathway/{pathway_id}/ascii e.g. kegg://pathway/hsa00010/ascii
kegg://search/{database}/{query} e.g. kegg://search/compound/glucose4 Guided Prompts
Prompt | Arguments | What it does |
|
| Maps a gene list to KEGG IDs, aggregates pathway associations, identifies enriched pathways |
|
| Drug lookup, target identification, pathway mapping, DDI screening |
|
| Compares gene/compound content of a pathway across species |
|
| Renders pathway as ASCII art (chain + grid), annotates key steps |
Pathway map images
draw_pathway_map draws a KEGG map as a PNG and colours its gene boxes by up to 8
highlight groups, for example one per genome:
{"pathway_id": "map00010",
"highlight": {"Strain A": ["K00844", "K01810", "EC:4.1.2.13"],
"Strain B": ["K01810", "2.7.1.11"]}}Every box is split into one stripe per group: coloured when the group has one of the box's KOs, grey when it doesn't. A KO without a direct match is coloured through EC numbers when one item carries every EC KEGG links to that KO (listed as
matched_by_ec, a less specific match than a KO). An item may hold one gene's ids separated by spaces, e.g. a GenBankdb_xrefstring as is, so a bifunctional KO isn't lit by two unrelated single-function genes.The image is redrawn from KGML (boxes, compounds, reaction lines, links to other maps) with Pillow; KEGG's own map bitmap is not fetched or redistributed. The footer credits KEGG.
The result is a text block with the summary JSON (also
structuredContent) and an image block (image/png). The summary lists, per group, the map KOs found and boxes coloured, and per box its KOs and the groups that have it, so an agent can check the figure without vision.map,ko, organism (eco00020, drawn as the KO reference map) and bare (00010) ids are accepted. Global/overview maps (011xx, 012xx) are refused withcode: "global_map".The drawing code is importable without MCP:
kegg_mcp_server.pathway_map.build_pathway_map( kegg_client, pathway_id, groups)returns the PNG bytes and the same summary.
ASCII Pathway Renderer
The render_pathway_ascii tool converts KEGG pathway topology (from KGML XML) into LLM-friendly ASCII text. Two styles are available:
Chain mode (default) — linear reaction flow:
Glycolysis / Gluconeogenesis (hsa)
====================================
[alpha-D-Gl~] ──R01786──▶ [beta-D-Gl~] ──R01600──▶ [beta-D-F~]Grid mode — 2D spatial layout using KGML coordinates:
Glycolysis / Gluconeogenesis (hsa)
====================================
[Glc]────────▶[G6P]────────▶[F6P]
│
▼
[6PG]
Legend:
[Glc] = alpha-D-Glucose (cpd:C00267)
[G6P] = D-Glucose 6-phosphate (cpd:C00092)Transport options
# stdio (default -- for Claude Desktop, Claude Code, uvx)
kegg-mcp-server
# Streamable HTTP (for web/API deployment)
kegg-mcp-server --transport streamable-http --host 0.0.0.0 --port 8080
# python -m also works
python -m kegg_mcp_server
# Logging (stderr, JSON): verbosity and full tracebacks
kegg-mcp-server --log-level DEBUG --log-tracebacksData handling
The only network destination is the public KEGG REST API at
https://rest.kegg.jp(all tools, resources, and the ASCII renderer's KGML fetch go there). Queries you make (IDs, search terms) are sent to KEGG; nothing is sent anywhere else, and there is no telemetry.Responses are cached in memory only (per-operation TTL) and discarded when the server exits; nothing is written to disk.
Logs are structured JSON on stderr only, on your machine.
No API key or account, and the server reads no environment variables of its own (logging is set by CLI flags). The HTTP client (httpx) honours the standard proxy and CA-bundle variables (
HTTPS_PROXY,NO_PROXY,SSL_CERT_FILE, …) so it works behind corporate proxies.The
uvxlauncher downloads the pinnedkegg-mcp-serverpackage and its dependencies from PyPI on first run.
Development
git clone https://github.com/Lucas-Servi/kegg-mcp-server-python
cd kegg-mcp-server-python
pip install -e ".[dev]"
# Run tests
pytest tests/ -v
# Lint
ruff check src/ tests/
# Debug with MCP Inspector
mcp dev kegg-mcp-serverProject structure
src/kegg_mcp_server/
server.py MCPServer instance, lifespan (httpx client + TTL cache), CLI
client.py KEGGClient: async KEGG REST with retry/backoff + KEGG-politeness semaphore
cache.py Per-op TTL cache, 64 MiB budget (info 24h, list 1h, entry ops 6h)
parsers.py KEGG flat-file and tab-delimited response parsers + summarize_flat_entry
errors.py KEGGAPIError exception type
logging.py JSON stderr logger (stdout is reserved for MCP stdio framing)
resources.py 9 MCP resource templates
prompts.py 4 bioinformatics workflow prompts
models/ Pydantic models for all KEGG entity types + EntrySummary + ErrorResult
tools/ 13 tool modules, each with a register(mcp) function; _common.py has the
@kegg_tool error-boundary decorator and shared READ_ONLY annotationsAuthor
Developed by Lucas Servi (lucasservi@gmail.com) at Elytron Biotech using Claude Code.
Acknowledgments
Based on Augmented-Nature/KEGG-MCP-Server -- the original TypeScript implementation that served as the foundation for this Python rewrite
KEGG -- Kyoto Encyclopedia of Genes and Genomes (Kanehisa Laboratories)
Model Context Protocol -- Anthropic's open protocol for LLM tool use
License
MIT -- see LICENSE.
Available Tools
35 toolsbatch_entry_lookupARead-onlyIdempotent
Fetch multiple KEGG entries in bulk (max 50 IDs).
Automatically chunks requests into groups of 10 to respect KEGG's API limit.
Args: entry_ids: List of KEGG entry IDs (e.g. ['C00002', 'C00031', 'C00033']). Can mix databases. Max 50 entries. detail_level: 'summary' (default, compact per-entry projection) or 'full' (complete flat-file parse — sequences and GENES lists make this large for 50 entries at once).
| Name | Required | Description | Default |
|---|---|---|---|
| entry_ids | Yes | ||
| detail_level | No | summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | Yes | |
| entries | Yes | |
| requested | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and open-world status, so the description is not carrying the safety burden. It adds genuinely non-obvious behavior: the max-50 ceiling, automatic chunking into groups of 10 to respect KEGG's API limit, and a warning that 'full' output is large at batch scale. Partial-failure handling is still undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and limit before any detail, and the Args block is scannable. There is minor redundancy, since the 50-ID max is stated in the intro and again in the entry_ids arg, but nothing is bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape needn't be explained, and the description covers scale limits, chunking, and detail tradeoffs. A bulk tool would ideally state what happens when some IDs are invalid, which is the one missing operational detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it largely does: entry_ids is explained with a concrete example, an allowance to mix databases, and the 50-entry cap; detail_level explains both enum values as 'compact per-entry projection' vs 'complete flat-file parse' with the size tradeoff. The remaining gap is format/validation expectations per ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (fetch multiple KEGG entries) plus the bulk scope and the 50-ID cap, so it is clearly distinguished from the single-entry siblings like get_compound_info. It never names those siblings explicitly, so the differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The detail_level explanation implies when to pick 'summary' vs 'full' (large GENES/sequence payloads at 50 entries), and the bulk framing implies use over single-entry lookups. But there is no explicit 'use X instead when...' routing, and no guidance on what to do with IDs that fail or span databases beyond 'can mix databases'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_identifiersARead-onlyIdempotent
Convert KEGG IDs to/from external database identifiers.
Converts within one kind only, KEGG side <-> outside side: genes (organism code 'hsa' or T-number 'T01001') <-> ncbi-geneid / ncbi-proteinid / uniprot; chemistry (compound / drug / glycan) <-> pubchem / chebi. Cross-kind pairs such as compound<->uniprot are rejected by KEGG, and 'kegg' is not a database conv accepts.
Args: source_db: Source database — 'hsa', 'T01001', 'ncbi-geneid', 'ncbi-proteinid', 'uniprot', 'compound', 'drug', 'glycan', 'pubchem' or 'chebi'. target_db: Target database, from the same list and the opposite side of the pair (e.g. source_db='hsa' + target_db='uniprot', or source_db='chebi' + target_db='compound'). entry_ids: Optional list of specific IDs to convert. Bare ids are prefixed with source_db automatically ('1956' -> 'hsa:1956'). KEGG accepts at most 10 per request; longer lists are chunked and fetched concurrently rather than silently dropped. If None, converts the full source database (large: hsa <-> ncbi-geneid is ~700 KB).
| Name | Required | Description | Default |
|---|---|---|---|
| entry_ids | No | ||
| source_db | Yes | ||
| target_db | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| mappings | Yes | |
| source_db | Yes | |
| target_db | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/idempotent annotations by disclosing request limits (KEGG caps at 10 IDs), that longer lists are chunked and fetched concurrently rather than dropped, that bare IDs are auto-prefixed, and that full-database conversion is very large (~700 KB). Those are exactly the operational traits an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-sentence purpose, then constraints, then per-argument detail; every section is useful given the empty schema. Slight redundancy in restating 'from the same list and the opposite side of the pair' after already showing examples keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and everything an agent must know before invoking — valid values, pairing rules, chunking, payload size — is present. Nothing material is missing for a 3-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden — and it does: it enumerates all valid source_db/target_db values, explains the opposite-side pairing requirement, documents entry_ids as optional with a default, and shows the auto-prefix transformation ('1956' -> 'hsa:1956'). No ambiguity remains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Convert KEGG IDs to/from external database identifiers') and immediately scopes it to one kind only, distinguishing it from every lookup/search sibling. The gene vs chemistry split is explicit, so an agent knows exactly what class of job this tool handles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use routing (source_db='hsa' + target_db='uniprot', chebi<->compound) plus explicit exclusions: cross-kind pairs like compound<->uniprot are rejected, and 'kegg' is not an accepted database. Also tells the agent when to omit entry_ids versus supply them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draw_pathway_mapARead-onlyIdempotent
Draw a KEGG pathway map as a PNG image, with gene boxes coloured by group.
The map is redrawn from KEGG's KGML layout (gene boxes, compounds, reactions and links to other maps), not copied from KEGG's image. Each gene box is split into one stripe per highlight group: coloured when the group has one of the box's KOs, grey when it doesn't. Returns the PNG plus an exact summary of what the image shows (per group: map KOs found and boxes coloured; per box: KOs and the groups that have them), so check the summary rather than describing the picture from memory.
Args: pathway_id: KEGG map number: 'map00010', 'ko00010', an organism map such as 'eco00010' (drawn as the KO reference map), or '00010'. Global and overview maps (011xx, 012xx) are refused. highlight: Optional {label: ids}, at most 8 groups (e.g. one per genome). Ids are KO ids ('K00844', 'ko:K00844', 'KEGG:K00844') or complete EC numbers ('2.7.1.1', 'EC:2.7.1.1'). One item may hold one gene's ids separated by spaces ('K00845 EC:2.7.1.2', or a GenBank db_xref string). A KO with no KO match is coloured through EC numbers only when one item carries every EC KEGG links to it; those KOs are listed under matched_by_ec.
| Name | Required | Description | Default |
|---|---|---|---|
| highlight | No | ||
| pathway_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| boxes | No | |
| notes | No | |
| steps | No | |
| title | Yes | |
| groups | No | |
| box_count | Yes | |
| pathway_id | Yes | |
| step_count | No | |
| image_width | Yes | |
| image_height | Yes | |
| map_ko_count | Yes | |
| boxes_truncated | No | |
| steps_truncated | No | |
| unrecognized_ids | No | |
| boxes_with_any_group | No | |
| steps_with_any_group | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds real behavioural context beyond them: how stripes are assigned per group, that non-matching boxes are grey, that the return includes a PNG plus a structured summary, and that the summary is authoritative over visual inspection. The refusal of 011xx/012xx maps is a concrete constraint an agent could not infer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the outcome (PNG) and the key differentiator (redrawn from KGML), then structured Args covering each parameter. Dense but nearly every sentence carries decision-relevant information; the EC-matching sentence is the most convoluted and could be tightened without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still explains that the return is a PNG plus a per-group/per-box summary and tells the agent how to use it. Combined with full parameter documentation and the map-type restriction, an agent has everything needed to call this correctly on the first attempt.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does so thoroughly: pathway_id accepts 'map00010', 'ko00010', organism maps like 'eco00010', or bare '00010'; highlight is a {label: ids} map of at most 8 groups whose ids may be KO ids in three prefixes or EC numbers in two forms, with space-separated multi-id items and a documented EC fallback via matched_by_ec. This far exceeds what the bare schema conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Draw a KEGG pathway map as a PNG image') and adds the distinguishing implementation detail that the map is redrawn from KGML layout rather than copied from KEGG's image. This clearly separates it from the sibling render_pathway_ascii and the various get_pathway_* retrieval tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete inclusion/exclusion rules: global and overview maps (011xx, 012xx) are refused, and the highlight groups are capped at 8 (e.g. one per genome). It also instructs the agent to check the returned summary rather than describing the picture from memory. It stops short of explicitly naming render_pathway_ascii as the text alternative, so routing between the two renderers is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brite_infoARead-onlyIdempotent
Get the structure of a KEGG BRITE functional hierarchy.
BRITE entries are large A/B/C/D trees, not flat-file entries, so the result is a bounded summary: the level line counts, the leaf column names, and the labels of the top two levels.
Args: brite_id: KEGG BRITE hierarchy ID. Any form KEGG hands out works — 'br:ko00001' (canonical), 'ko00001' / 'br08303' (as listed by list_databases), or the bare '00001' / '08303' returned by search_brite. detail_level: 'summary' (default) or 'full' (adds raw_content, the raw hierarchy text — TRUNCATED, since the largest hierarchies are several megabytes).
| Name | Required | Description | Default |
|---|---|---|---|
| brite_id | Yes | ||
| detail_level | No | summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| entry | Yes | |
| labels | No | |
| columns | No | |
| raw_content | No | |
| total_lines | No | |
| detail_level | No | |
| last_updated | No | |
| level_counts | No | |
| deepest_level | No | |
| raw_truncated | No | |
| labels_truncated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds genuinely new behavior: output is deliberately bounded (level line counts, leaf column names, top two levels), and `full` includes raw_content that is TRUNCATED because hierarchies reach several megabytes. It does not describe error behavior for invalid IDs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then the rationale for the bounded summary, then a tight per-parameter block. Every sentence adds information an agent would otherwise have to discover by trial; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return shape need not be spelled out, and the description still pre-warns about summarization and truncation. Parameter handling is complete for a two-param tool. The only gaps are failure modes on bad IDs and any explicit routing between this and sibling info tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load, and it does: brite_id documents three accepted forms with concrete examples ('br:ko00001', 'ko00001'/'br08303', bare '00001'), and detail_level enumerates both values plus the consequence of 'full' and its truncation. Nothing about either parameter is left ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get the structure of a KEGG BRITE functional hierarchy") and immediately scopes the return value to a bounded summary rather than the full tree. The reference to IDs "returned by search_brite" implicitly separates this lookup tool from the sibling search tool, though the contrast is never stated outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditions for use: BRITE entries are A/B/C/D trees, not flat-file entries, so this tool returns a bounded summary and only `detail_level: full` expands it. It also explains which ID forms are acceptable, removing a common failure mode. No explicit when-not-to-use case (e.g. versus get_pathway_info) is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_compound_infoBRead-onlyIdempotent
Get detailed information for a KEGG compound entry.
Args: compound_id: KEGG compound ID (e.g. 'C00002' for ATP, 'C00031' for D-Glucose). detail_level: 'summary' (default, compact) or 'full' (complete flat-file parse).
| Name | Required | Description | Default |
|---|---|---|---|
| compound_id | Yes | ||
| detail_level | No | summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool as read-only, idempotent, non-destructive, and open-world. The description adds useful behavioral context by explaining that detail_level controls whether the response is a compact summary or a complete flat-file parse, but it does not describe error behavior or response size implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by a compact Args block. Every line contributes useful information, though the formatting could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and rich annotations, the description does not need to explain return values in depth. It is complete enough for correct invocation: the agent knows the required identifier format and how detail_level changes output. Minor gaps remain around invalid-ID behavior and sibling routing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does. It documents both parameters, gives concrete examples for compound_id ('C00002' for ATP, 'C00031' for D-Glucose), and explains the meaning and default of detail_level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get detailed information for a KEGG compound entry.' This clearly distinguishes it from search tools like search_compounds, but it does not explicitly name or differentiate it from sibling tools such as get_compound_reactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the phrase 'detailed information,' but it gives no explicit when-to-use guidance, no exclusions, and no alternatives. An agent must infer on its own when this tool is preferable to search_compounds or get_compound_reactions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_compound_reactionsARead-onlyIdempotent
Get all reactions involving a KEGG compound.
Args: compound_id: KEGG compound ID (e.g. 'C00002'). max_results: Maximum number of reactions to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| compound_id | Yes | ||
| max_results | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds one real behavioral detail — results are capped at 100 — but says nothing about ordering, what a reaction record contains, or what happens when the cap truncates results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence of purpose followed by a compact Args block; no filler. The Args block is somewhat redundant with the schema's parameter list but earns its place because the schema has zero description coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It is adequate for a simple two-parameter read tool with no output schema: the agent knows the input domain, the cap, and the safety profile from annotations. The remaining gap — the shape and ordering of returned reactions — is minor for a lookup of this kind.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden and does reasonably well: it explains that compound_id is a KEGG compound ID with a concrete example ('C00002') and that max_results is capped at 100 (the schema only shows a default of 100, not the cap). It does not state the default behavior when max_results is omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Get all reactions involving a KEGG compound.' This is clear and distinguishable from get_pathway_reactions (which is pathway-scoped) by implication, though the sibling is never named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the resource framing — reach for this when you have a compound ID and want its reactions — but no explicit when-to-use or when-not guidance is given, and no alternative (search_reactions, get_pathway_reactions, get_reaction_info) is mentioned for overlapping needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_database_infoARead-onlyIdempotent
Get release information and statistics for a KEGG database.
Args: database: Database name (e.g. 'kegg', 'pathway', 'compound', 'drug', 'genome').
| Name | Required | Description | Default |
|---|---|---|---|
| database | No | kegg |
Output Schema
| Name | Required | Description |
|---|---|---|
| entries | No | |
| release | No | |
| database | Yes | |
| raw_info | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, and non-destructive behavior. The description adds useful context that the return is release information and statistics, but it does not discuss permissions, rate limits, or other behavioral constraints beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded, and structured with an Args section. The examples are useful rather than wasteful, though the formatting could be tightened further.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool with rich annotations and an output schema, the description is largely complete: it explains the purpose and gives database examples. The main remaining gap is explicit usage guidance versus sibling info tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It does so by explaining that 'database' is a database name and giving representative examples such as 'kegg', 'pathway', 'compound', 'drug', and 'genome', though it does not enumerate all allowed values or mention the default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: getting release information and statistics for a KEGG database. It distinguishes the tool from entry-level siblings by focusing on database-level release/statistics, but it does not explicitly name an alternative or contrast with get_pathway_info/get_compound_info despite overlapping database names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the purpose—use this when you need release/statistics for a database rather than detailed entry data. However, there is no explicit when-to-use, when-not-to-use, or alternate-tool guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_disease_infoARead-onlyIdempotent
Get detailed information for a KEGG disease entry.
Args: disease_id: KEGG disease ID (e.g. 'H00004' for colorectal cancer). detail_level: 'summary' (default, compact) or 'full' (complete flat-file parse).
| Name | Required | Description | Default |
|---|---|---|---|
| disease_id | Yes | ||
| detail_level | No | summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds real value by explaining that 'summary' is compact and 'full' is a complete flat-file parse, but says nothing about failure modes for invalid IDs, entry not found, or the size cost of 'full'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short, front-loaded, and the Args block cleanly separates per-parameter facts. The example value is the only mildly redundant element, but it earns its place given the 0% schema coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and both parameters are documented. The only remaining gap is the absent relationship to search_diseases, which would help an agent place this tool in a workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden, and it does: it names the disease_id format with a concrete example ('H00004' for colorectal cancer) and explains what each detail_level value actually means, going beyond the bare enum labels.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get detailed information') and resource ('KEGG disease entry'), so the agent knows exactly what is returned. It does not distinguish itself from the sibling search_diseases or say this is the fetch-after-search step, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied – the presence of search_diseases as a sibling and the required disease_id suggest a search-then-fetch flow, but the description never says when to use this versus searching, nor what happens if the ID is unknown. The detail_level tradeoff is described, which is the only explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_drug_infoARead-onlyIdempotent
Get detailed information for a KEGG drug entry.
Args: drug_id: KEGG drug ID (e.g. 'D00001' for aspirin, 'D00564' for ibuprofen). detail_level: 'summary' (default, compact) or 'full' (complete flat-file parse).
| Name | Required | Description | Default |
|---|---|---|---|
| drug_id | Yes | ||
| detail_level | No | summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so safety behavior is covered. The description adds the meaningful 'summary (compact) vs full (complete flat-file parse)' distinction and the cost implication of 'complete flat-file parse', but says nothing about behavior on an invalid ID or the shape of the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose sentence is front-loaded and the Args block is compact with no wasted sentences. The nested indentation of the Args section is slightly awkward but does not cost clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is rightly omitted, and both parameters are explained. What is missing is the routing context — when to reach for this versus search_drugs or get_drug_interactions — which matters given roughly 30 sibling tools in this namespace.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden, and it does: concrete example IDs ('D00001' aspirin, 'D00564' ibuprofen) and the semantic difference between 'summary' and 'full', the latter described as a complete flat-file parse. Only the invalid-ID/error behavior is left unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get detailed information for a KEGG drug entry'), which is distinct from the sibling get_drug_interactions and search_drugs by name. It does not explicitly contrast itself with those siblings, so it stops short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied — the reader must infer that this is the detail-fetch step after search_drugs returns a KEGG drug ID. There is no explicit when-to-use/when-not guidance nor mention of the sibling alternatives like get_drug_interactions or search_drugs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_drug_interactionsARead-onlyIdempotent
Get drug-drug interactions for one or more KEGG drugs.
Args: drug_ids: Single drug ID (e.g. 'D00001') or multiple IDs joined with '+' (e.g. 'D00001+D00564'). Max 10 entries. max_results: Maximum number of interactions to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| drug_ids | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| drug_ids | Yes | |
| truncated | No | |
| interactions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, non-destructive behavior, so the description does not need to restate safety. It usefully adds operational constraints—at most 10 drug entries and a 100-result cap—which are behavioral details beyond the annotations. It does not discuss error behavior for oversized inputs, but that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short, front-loaded sentences plus a compact args block. Every sentence contributes directly to correct invocation, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists and annotations cover safety semantics, the description supplies the remaining critical input details: ID syntax, multi-ID joining, and result limits. It is nearly complete, with only minor omissions around invalid-input behavior or ordering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description carries the full burden and does so effectively: it gives a concrete single-ID example, the '+' joining syntax for multiple IDs, the 10-entry maximum, and the max_results cap of 100. It could go slightly further by restating the default for max_results or clarifying ordering semantics, but the essential meaning is covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get drug-drug interactions') scoped to KEGG drugs, which is clearly distinct from sibling tools like get_drug_info or search_drugs. It stops short of explicitly naming an alternative or contrasting with those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the purpose (fetch interactions for known drug IDs), but there is no explicit when-to-use guidance, no mention of when to prefer get_drug_info or search_drugs, and no prerequisites or exclusions. This is adequate but leaves the agent to infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_enzyme_infoARead-onlyIdempotent
Get detailed information for a KEGG enzyme (EC number).
Args: enzyme_id: EC number (e.g. '1.1.1.1') or prefixed ID (e.g. 'ec:1.1.1.1'). detail_level: 'summary' (default, compact) or 'full' (complete flat-file parse).
| Name | Required | Description | Default |
|---|---|---|---|
| enzyme_id | Yes | ||
| detail_level | No | summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description adds genuinely useful behavioral context beyond them: detail_level controls output verbosity ('summary' compact vs 'full' complete flat-file parse), which lets an agent reason about response size and cost. It omits error/not-found behavior and rate limits, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded, and the Args block is terse and scannable. Slight redundancy with the schema (restating the default for detail_level), but nothing wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be described, and the tool's complexity is low (2 params, 1 required). The description covers ID formats and verbosity control, which is everything needed to invoke it correctly; only failure modes are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and largely does: enzyme_id gets concrete format examples for both accepted forms ('1.1.1.1' and 'ec:1.1.1.1'), and detail_level is explained semantically with its default. It doesn't say whether prefixed/unprefixed forms are normalized or how partial EC numbers are treated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get detailed information for a KEGG enzyme (EC number)'), which is clearly a lookup-by-ID tool as opposed to the sibling search_enzymes. It doesn't name the sibling explicitly, so it stops short of a 5, but an agent can distinguish retrieval-by-identifier from search without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the Args block: the tool expects an EC number or prefixed ID, which tells the agent when it is applicable and implicitly routes discovery to search_enzymes. There is no explicit statement of when to prefer this over siblings or what happens with an invalid/unknown ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gene_infoARead-onlyIdempotent
Get detailed information for a KEGG gene entry.
Args: gene_id: KEGG gene ID in format 'organism:gene' (e.g. 'hsa:1956' for EGFR). detail_level: 'summary' (default, compact) or 'full' (complete parse with linked orthologs, pathways, xrefs, and references). include_sequence: If True and detail_level='full', fetches amino acid and nucleotide sequences.
| Name | Required | Description | Default |
|---|---|---|---|
| gene_id | Yes | ||
| detail_level | No | summary | |
| include_sequence | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: what 'full' parses (orthologs, pathways, xrefs, references) and that include_sequence is only honored when detail_level='full' — a dependency an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and each parameter note earns its place with no filler. The Args block style is structured and scan-friendly, though marginally more verbose than a single tight paragraph would be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, annotations cover the safety profile, and all three parameters are explained including their interaction. An agent has everything needed to call this correctly on the first attempt.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and mostly succeeds: it gives the gene_id format with a worked example, defines both 'summary' and 'full' semantically rather than just repeating the enum, and states the conditional gate on include_sequence. Only the amino-acid/nucleotide sequence distinction is left slightly thin.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get detailed information for a KEGG gene entry'), which is clearly distinct from lookup-adjacent siblings like search_genes or get_gene_orthologs. It does not explicitly name those siblings or say when to prefer them, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the required ID format ('organism:gene', with a concrete example 'hsa:1956') and through the detail_level tradeoff, which tells an agent to start with 'summary'. However, there is no explicit 'use this instead of X' routing against search_genes or get_gene_orthologs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gene_orthologsBRead-onlyIdempotent
Get KO (KEGG Orthology) entries and cross-organism orthologs for a gene.
Args: gene_id: KEGG gene ID (e.g. 'hsa:1956').
| Name | Required | Description | Default |
|---|---|---|---|
| gene_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and non-destructive, covering most of the behavioral profile. The description adds nothing beyond that: no indication of result shape, whether orthologs come from all organisms, or whether lookups hit a remote service with latency limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence of purpose plus a single argument line, front-loaded and free of filler. The Args block is a bit ceremonial for one parameter but the example earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should say more about what comes back — the split between KO assignments and ortholog records, and whether orthologs are grouped by organism. A single-param read tool is simple, so this is adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema only says 'Gene Id' with no type guidance, so the description's concrete format example ('hsa:1956') is genuinely load-bearing. It doesn't state the accepted ID namespaces beyond the one example, which keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and two specific resources (KO entries and cross-organism orthologs) scoped to a gene, which clearly separates it from get_gene_info and search_ko_entries. It doesn't explicitly name the sibling it replaces, so it stops short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of when to prefer get_gene_info or get_ko_info instead, and no prerequisites or organism-scope caveats. Only the argument is documented, leaving the agent to infer selection from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_glycan_infoARead-onlyIdempotent
Get detailed information for a KEGG glycan entry.
Args: glycan_id: KEGG glycan ID (e.g. 'G00001'). detail_level: 'summary' (default, compact) or 'full' (complete flat-file parse).
| Name | Required | Description | Default |
|---|---|---|---|
| glycan_id | Yes | ||
| detail_level | No | summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety bar is low. The description still adds real value by explaining what detail_level actually changes ('summary' compact vs 'full' complete flat-file parse), which is a payload-size tradeoff the annotations cannot convey. It does not cover invalid-ID behavior, but that is a minor gap here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-line purpose is front-loaded and the Args block is scannable with zero filler. Slight redundancy between 'detailed information' and 'full (complete flat-file parse)', but nothing that wastes real space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and annotations cover the safety profile. Combined with parameter documentation, an agent has everything needed to call it correctly; only the sequencing relative to search_glycans is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden and does so: it gives the expected glycan_id format with a concrete example ('G00001') and spells out both enum values plus the default. The only omission is validation or error expectations for a malformed ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('Get detailed information') and resource ('a KEGG glycan entry'), which clearly separates it from the sibling search_glycans. It stops short of naming that sibling explicitly, but the get-vs-search distinction is inferable from the wording.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is only implied: an agent can guess this is the detail-fetch step that follows search_glycans, but the description never states that or names any alternatives. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ko_infoBRead-onlyIdempotent
Get detailed information for a KEGG Orthology (KO) entry.
Args: ko_id: KEGG KO identifier (e.g. 'K00844' for hexokinase). detail_level: 'summary' (default, compact) or 'full' (complete flat-file parse).
| Name | Required | Description | Default |
|---|---|---|---|
| ko_id | Yes | ||
| detail_level | No | summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered structurally. The description adds one genuinely useful behavioral fact – that 'full' performs a complete flat-file parse (i.e., a much larger, heavier response than the compact default). It says nothing about KEGG rate limits, failure modes for unknown KO IDs, or response size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One-sentence purpose followed by a compact Args block; front-loaded and free of filler. The Args block partially restates the schema, but it earns its place because the schema itself has zero descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and annotations cover safety; what remains is well served by the parameter explanations. The one meaningful gap is routing: an agent cannot tell from this description whether to search first or call directly, and sibling search_ko_entries is the obvious candidate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and largely does: it defines ko_id with a concrete example ('K00844' for hexokinase) and explains both enum values of detail_level, including which is the default. It stops short of quantifying what 'compact' vs 'complete' actually returns.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get detailed information for a KEGG Orthology (KO) entry,' naming the KO identifier format with an example. It is clearly distinct from lookup-ish siblings by the word 'detailed', though it never names search_ko_entries as the discovery path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus search_ko_entries or batch_entry_lookup, and no prerequisite such as 'KO IDs must be obtained from search_ko_entries first.' The only usage-adjacent content is the detail_level tradeoff, which is parameter guidance rather than tool selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_module_infoBRead-onlyIdempotent
Get detailed information for a KEGG module.
Args: module_id: KEGG module ID (e.g. 'M00001' for glycolysis core module). detail_level: 'summary' (default, compact) or 'full' (complete flat-file parse).
| Name | Required | Description | Default |
|---|---|---|---|
| module_id | Yes | ||
| detail_level | No | summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile: read-only, idempotent, non-destructive, and open-world. The description adds useful behavioral context by explaining that `detail_level` controls a compact summary versus a complete flat-file parse, but it does not add much beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the core purpose, followed by compact argument notes. The Args block is efficient, though slightly redundant in style for an MCP definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with an output schema and rich annotations, the description provides enough to call it correctly. The main missing element is explicit routing to `search_modules` as an alternative for discovering module IDs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it does: `module_id` is explained with an example, and `detail_level` is described with its default and the meaning of `summary` versus `full`.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: retrieving detailed information for a KEGG module. However, it does not explicitly distinguish this from the sibling `search_modules`, which could also involve modules, so sibling differentiation is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description supplies argument semantics but gives no explicit guidance on when to use this tool versus alternatives such as `search_modules` to find a module ID first. Usage is only inferable from the required `module_id` parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pathway_compoundsARead-onlyIdempotent
Get all compounds (metabolites) associated with a KEGG pathway.
Args: pathway_id: KEGG pathway ID (e.g. 'map00010'). max_results: Maximum number of pairs to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| pathway_id | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| pairs | Yes | |
| linked_db | Yes | |
| truncated | No | |
| pathway_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, and non-destructive behavior. The description adds useful behavioral context by stating that results are capped at 100 via max_results, though it does not elaborate on truncation or ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then briefly documents the two arguments. There is no wasted text, and the example pathway ID is directly useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with an output schema and comprehensive annotations, the description is nearly complete. The main remaining gap is that it does not explain how results behave when the pathway has more than 100 compounds.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden and does document both parameters: pathway_id with a KEGG example and max_results with its 100-item cap. It adds meaningful semantics beyond the bare schema, though it could clarify the meaning of 'pairs' and valid max_results bounds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get all compounds (metabolites) associated with a KEGG pathway.' This clearly distinguishes it from pathway siblings such as get_pathway_genes, get_pathway_reactions, and get_pathway_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The pathway association implies when to use it, but the description does not explicitly state when to choose this over alternatives like search_compounds or get_compound_info. There is clear contextual scoping, but no explicit usage guidance or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pathway_genesARead-onlyIdempotent
Get all genes associated with a KEGG pathway.
Args: pathway_id: KEGG pathway ID (e.g. 'hsa00010'). Use organism-specific IDs (e.g. 'pae00350' for P. aeruginosa) — reference pathways ('map*') are not supported by the KEGG gene link API. max_results: Maximum number of pairs to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| pathway_id | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| pairs | Yes | |
| linked_db | Yes | |
| truncated | No | |
| pathway_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, idempotent=true, openWorld=true, and non-destructive. The description adds useful behavioral context beyond annotations: the KEGG gene link API does not support reference pathways, and max_results is capped at 100. It does not describe pagination or return shape, but an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the purpose, then structured into an Args block. Every line is relevant, though the phrase is slightly formal rather than conversational.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple two-parameter schema, existing output schema, and rich annotations, the description supplies the key context an agent needs: correct ID format and unsupported reference pathways. It stops short of explaining what happens when max_results truncates results, but that is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It does well: pathway_id is explained with examples ('hsa00010', 'pae00350') and a critical restriction about reference pathways, while max_results is explained as a cap of 100. Minor gaps remain around default behavior and whether max_results truncates silently.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get all genes associated with a KEGG pathway.' It is clearly distinguishable from siblings like get_pathway_info, get_pathway_compounds, and get_pathway_reactions, which return different entity types for a pathway.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete usage constraint: organism-specific IDs are required and reference 'map*' pathways are not supported. It does not explicitly compare against search_genes or get_gene_info, but the tool's niche is clear from the purpose statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pathway_infoARead-onlyIdempotent
Get detailed information for a KEGG pathway.
Args: pathway_id: KEGG pathway ID (e.g. 'hsa00010', 'map00010'). detail_level: 'summary' (default, compact) or 'full' (complete flat-file parse with all linked genes, compounds, reactions, references, and xrefs).
| Name | Required | Description | Default |
|---|---|---|---|
| pathway_id | Yes | ||
| detail_level | No | summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld). The description adds genuinely useful behavior beyond that: it explains that 'full' performs a complete flat-file parse and returns all linked genes, compounds, reactions, references and xrefs, which signals response size and payload breadth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and the Args block is tight with no filler. The docstring-style formatting is slightly verbose for two parameters but every line carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and all parameters explained, an agent has enough to invoke this correctly. The remaining gap is routing guidance relative to the pathway-specific siblings and what 'summary' actually contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden — and it does, giving pathway_id examples ('hsa00010', 'map00010') and defining both detail_level values plus the 'summary' default. It stops short of explaining the hsa vs map prefix semantics, which matters for organism-specific vs reference pathways.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("Get detailed information for a KEGG pathway") with a named identifier format. It does not, however, distinguish itself from the many pathway-scoped siblings (get_pathway_genes, get_pathway_compounds, get_pathway_reactions), which return subsets of what 'full' detail returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The detail_level explanation implies usage ('summary' for compact, 'full' for everything), but there is no explicit when-to-use guidance and no mention of the alternative tools that return pathway genes/compounds/reactions individually or of search_pathways for discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pathway_reactionsARead-onlyIdempotent
Get all reactions in a KEGG pathway.
Args: pathway_id: KEGG pathway ID (e.g. 'hsa00010'). max_results: Maximum number of pairs to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| pathway_id | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| pairs | Yes | |
| linked_db | Yes | |
| truncated | No | |
| pathway_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds the useful cap of 100 results, but does not explain truncation behavior beyond that cap or whether results are complete or sampled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the core action in the first sentence and parameter details in a compact Args block. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description need not explain return values. It covers both parameters and the result cap, leaving only alternative-tool routing as a minor gap for this simple retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It documents both parameters: pathway_id with a concrete KEGG ID example and max_results with the 100 cap. The term 'pairs' is slightly ambiguous, but overall it meaningfully supplements the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get all reactions in a KEGG pathway.' This clearly distinguishes it from pathway siblings like get_pathway_genes and get_pathway_compounds by resource type, though it does not explicitly differentiate it from search_reactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and resource scope, but there is no explicit guidance on when to use this versus search_reactions or get_reaction_info. No alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reaction_infoARead-onlyIdempotent
Get detailed information for a KEGG reaction.
Args: reaction_id: KEGG reaction ID (e.g. 'R00756' for glucose phosphorylation). detail_level: 'summary' (default, compact) or 'full' (complete flat-file parse).
| Name | Required | Description | Default |
|---|---|---|---|
| reaction_id | Yes | ||
| detail_level | No | summary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety and idempotency, but the description adds useful behavioral context by explaining that detail_level controls output depth: 'summary' is compact and 'full' is a complete flat-file parse. It does not discuss rate limits or error behavior, but those are not critical for this simple read-only lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded, and structured as a clear purpose statement followed by parameter documentation. Every sentence and example earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only lookup with annotations and an output schema, the description is largely complete. The main gap is the lack of explicit routing guidance versus search or pathway-based sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: reaction_id is explained with an example format, and detail_level is documented with its default and the meaning of each enum value. It could add stricter ID-format guidance, but the key semantics are covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get detailed information for a KEGG reaction.' It clearly identifies the tool as a detail-fetch operation by reaction ID, though it does not explicitly distinguish itself from sibling tools like search_reactions or get_pathway_reactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied through the required reaction_id parameter and detail_level choices. The description does not state when to use this tool instead of search_reactions or get_pathway_reactions, nor does it mention prerequisites such as needing an existing KEGG reaction ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_organismsARead-onlyIdempotent
List organisms available in KEGG with their 3-4 letter codes and names.
KEGG has ~12,000 organisms, so the full list is large. Pass query to
filter by organism code or name (e.g. 'Bacillus', 'hsa') instead of
paging through everything.
Args:
query: Case-insensitive substring filter on the organism code or name.
Empty (the default) returns the first max_results organisms.
max_results: Maximum number of organisms to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| total | Yes | |
| database | Yes | |
| truncated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so safety is covered. The description adds genuinely new behavioral context: the corpus is ~12,000 organisms, an empty query silently returns only the first `max_results`, and `max_results` is capped at 100.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then the filtering rationale, then per-argument detail — the reader gets the key decision information in the first two sentences. Minor redundancy between the prose hint and the Args block, but nothing wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and annotations are rich, so the description needn't explain return shapes. The only gap is that "the first `max_results` organisms" leaves the sort/ordering of that slice unspecified, which matters when the result is truncated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (only bare titles), so the description carries the full burden and does: `query` is a case-insensitive substring filter on code or name with examples ('Bacillus', 'hsa') and an explicit empty-string default; `max_results` is documented with its default and an undocumented-in-schema cap of 100.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List organisms available in KEGG") and specifies the returned content (3-4 letter codes and names). No sibling tool in the list enumerates organisms, so the resource is unambiguous within the toolset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage rule: because KEGG has ~12,000 organisms, pass `query` to filter rather than paging through everything. It does not name explicit alternatives or when-not-to-use cases, but the intended workflow is clear without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_pathway_asciiARead-onlyIdempotent
Render a KEGG pathway as ASCII text optimized for LLM consumption.
Two styles available:
'chain': Linear reaction flow text showing substrate->enzyme->product chains. Robust and compact. Best for understanding reaction sequences.
'grid': 2D spatial layout using KGML coordinates. Shows the pathway topology with box-and-arrow rendering. Best for seeing spatial relationships.
Args: pathway_id: KEGG pathway ID (e.g. 'hsa00010' for human glycolysis). Must be organism-specific; reference pathways (map*) have limited KGML. style: 'chain' (default, linear text) or 'grid' (2D spatial layout). max_width: Maximum line width in characters (40-200, default 100). max_height: Grid mode only: maximum height in lines (20-80, default 40).
| Name | Required | Description | Default |
|---|---|---|---|
| style | No | chain | |
| max_width | No | ||
| max_height | No | ||
| pathway_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ascii | Yes | |
| style | Yes | |
| title | Yes | |
| legend | No | |
| organism | No | |
| truncated | No | |
| node_count | Yes | |
| pathway_id | Yes | |
| reaction_count | Yes | |
| relation_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered structurally. The description adds real value beyond that: the map* KGML limitation and the grid-only scope of max_height. It does not disclose failure behavior for invalid or unsupported pathway IDs, or any cost/limits on rendering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then a two-bullet mode comparison, then a compact Args block. Every line adds information, though the Args block partially overlaps the schema's defaults and could be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return-value description is not required. With 4 params, 0% schema coverage and a rich enum/mode dimension, the description covers what an agent needs to call it correctly; minor gaps are error handling and whether the rendered output is paged or truncated by max_width/max_height beyond the stated bounds.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does: it explains pathway_id format with a concrete example ('hsa00010'), the biological distinction between organism-specific and map* IDs, the enum meaning of style, and numeric ranges for max_width (40-200) and max_height (20-80) that the schema itself lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Render a KEGG pathway as ASCII text') plus the intended consumer ('optimized for LLM consumption'). Among the siblings, which are all data-lookup tools (get_pathway_info, get_pathway_genes, search_pathways), this is clearly the only visualization/rendering tool, so differentiation is implicit but unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit selection criteria between the two modes ('chain' best for reaction sequences, 'grid' best for spatial relationships) and warns that pathway_id must be organism-specific because reference map* pathways have limited KGML. It does not explicitly contrast this tool with get_pathway_info/get_pathway_reactions, which would be the natural 'when not to use' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_briteARead-onlyIdempotent
Search KEGG BRITE functional hierarchy databases.
Args: query: Hierarchy name (e.g. 'KEGG pathway', 'transporter', 'ribosome'). max_results: Maximum number of results to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| results | Yes | |
| database | Yes | |
| truncated | No | |
| total_found | Yes | |
| returned_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds the useful cap of 100 results but does not describe pagination, result ordering, or other behavioral details beyond that cap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the core action, and uses an Args block efficiently. Every sentence contributes either the purpose or parameter clarification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations cover safety and idempotency. The description covers both parameters adequately, though it could better distinguish search_brite from get_brite_info for complete task context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does define both parameters. The query examples and the max_results cap of 100 add meaningful semantics beyond the bare schema, though the default value of 25 is left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: search KEGG BRITE functional hierarchy databases. This clearly distinguishes it from siblings such as get_brite_info, but it does not explicitly name that sibling or clarify search-vs-detail boundaries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the query examples such as 'KEGG pathway', 'transporter', and 'ribosome', which show what to search for. However, there is no explicit guidance on when to use this tool instead of get_brite_info or other search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_compoundsARead-onlyIdempotent
Search KEGG compounds by name or chemical property.
Args: query: Search term (compound name, formula, or mass). search_type: 'name' (default), 'formula', 'exact_mass', 'mol_weight', or 'nop'. max_results: Maximum number of results to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No | ||
| search_type | No | name |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| results | Yes | |
| database | Yes | |
| truncated | No | |
| total_found | Yes | |
| returned_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds only the useful 100-result cap and defaults; it says nothing about pagination, result ordering, or remote/network behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One lead sentence plus a compact Args block; the core action is front-loaded and nothing is padded. The terseness of the enum descriptions costs a little clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return shape needn't be described, and all three params are addressed. The residual gap is the undocumented 'nop' mode and unit/format specifics for mass and formula searches.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the load. It documents all three parameters and the enum's intent, which is solid, but leaves 'nop' undefined and doesn't clarify mass units or formula syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search KEGG compounds') and the axes it searches on (name or chemical property). This distinguishes it from retrieval siblings like get_compound_info, though it doesn't name them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The search_type enumeration implies when to use each mode and query's parenthetical gives formats, but there is no explicit guidance on choosing exact_mass vs mol_weight, no explanation of 'nop', and no mention of when to prefer get_compound_info over searching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_diseasesARead-onlyIdempotent
Search KEGG diseases by name or keyword.
Args: query: Disease name (e.g. 'diabetes', 'cancer', 'Alzheimer'). max_results: Maximum number of results to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| results | Yes | |
| database | Yes | |
| truncated | No | |
| total_found | Yes | |
| returned_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe, idempotent, non-destructive open-world read operation. The description adds useful behavioral detail beyond annotations, notably that results are capped at 100 and that matching is by disease name or keyword.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core operation and then briefly explains both arguments. There is no redundant or wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter search tool, the description covers the operation and parameter semantics sufficiently. Return-value details are not needed because an output schema exists, and annotations already supply the safety and openness profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning; it does document both parameters, including examples for query and the cap for max_results. It could be stronger by noting case behavior or default behavior, but it adequately compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: searching KEGG diseases by name or keyword. It is clear enough to distinguish from detail-retrieval siblings like get_disease_info, but it does not explicitly name or contrast with that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The search-oriented wording implies when to use this tool, and the query examples make the intended input clear. However, it gives no explicit when-to-use versus get_disease_info guidance or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_drugsARead-onlyIdempotent
Search KEGG drugs by name, formula, or molecular weight.
Args: query: Drug name, formula, or mass value. search_type: 'name' (default), 'formula', 'exact_mass', or 'mol_weight'. max_results: Maximum number of results to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No | ||
| search_type | No | name |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| results | Yes | |
| database | Yes | |
| truncated | No | |
| total_found | Yes | |
| returned_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, and open-world behavior, so the safety profile is covered. The description adds useful constraints such as the default search_type and the 100-result cap, though it does not discuss pagination or result completeness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loads the core purpose, and then uses a short Args block for parameter details. There is no redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and annotations cover the behavioral safety profile. The remaining gap is mainly explicit routing guidance versus sibling tools and clearer semantics for the mass-related search modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains query, all four search_type values with a default, and max_results with a cap, but leaves the exact_mass versus mol_weight distinction and expected mass format somewhat unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: search KEGG drugs by name, formula, or molecular weight. It clearly distinguishes a search operation from detail-oriented siblings such as get_drug_info or get_drug_interactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It lists the supported search modes and defaults, which implies when the tool is appropriate. However, it does not explicitly say when to use this instead of get_drug_info, search_compounds, or other drug-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_enzymesARead-onlyIdempotent
Search KEGG enzymes by EC number or name.
Args: query: EC number (e.g. '1.1.1.1') or enzyme name (e.g. 'kinase', 'oxidase'). max_results: Maximum number of results to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| results | Yes | |
| database | Yes | |
| truncated | No | |
| total_found | Yes | |
| returned_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds a real behavioral constraint the annotations lack: results are capped at 100. It says nothing about truncation behavior, pagination, or ordering, which is a moderate gap but not a serious one for a read-only search.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded in one sentence, and the Args block is compact with no filler. Slight redundancy in restating parameter names the schema already exposes, but each line adds format detail rather than repeating types.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only search with an output schema available, the description covers both parameters, the cap behavior, and accepted query formats. What is missing is routing guidance relative to get_enzyme_info, which is the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does so: it defines 'query' as an EC number or enzyme name with concrete examples ('1.1.1.1', 'kinase', 'oxidase') and states that max_results is capped at 100. It omits the default of 25, which the schema supplies, so the gap is minor.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search KEGG enzymes') plus the two lookup keys (EC number or name), which is enough to distinguish it from get_enzyme_info by implication. It never names the sibling explicitly, so discrimination relies on the agent inferring search-vs-detail semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a discovery-then-detail workflow (search here, then get_enzyme_info), but never says so. There are no explicit when-to-use, when-not-to-use, or alternative-routing statements despite several plausible siblings (search_genes, search_compounds, get_enzyme_info).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_genesARead-onlyIdempotent
Search for genes in a KEGG organism database.
Args: query: Search term (gene name, symbol, or description). organism_code: KEGG organism code (e.g. 'hsa' human, 'mmu' mouse, 'eco' E. coli). max_results: Maximum number of results to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No | ||
| organism_code | No | hsa |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| results | Yes | |
| database | Yes | |
| truncated | No | |
| total_found | Yes | |
| returned_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered structurally. The description adds the useful constraint that max_results is capped at 100, but says nothing about permissions, result ordering, or matching behavior (exact vs substring), which materially affect how a search is issued.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a one-line purpose, then a compact Args block with no filler. Some of the Args lines restate schema property titles, but each carries additional semantics, so the space is largely earned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. All three parameters are explained and the organism scoping is clear, leaving only minor gaps: the default organism when omitted and how this differs from the ID-based gene lookups.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load, and it does: it explains all three parameters, clarifies that query covers gene name, symbol, or description, and gives concrete organism codes ('hsa', 'mmu', 'eco'). It also adds a cap of 100 on max_results that is absent from the schema, though it never states the default (hsa / 25) that the schema implies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('Search for genes') and scopes it to a KEGG organism database, so the agent knows exactly what is being queried. It does not distinguish itself from siblings such as get_gene_info, search_ko_entries, or get_gene_orthologs, leaving selection partly to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the word 'search' plus a free-text query term suggests this is for discovery when IDs are unknown, with organism_code scoping the space. There is no explicit statement of when to prefer this over get_gene_info (fetch by ID) or get_gene_orthologs, and no exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_glycansARead-onlyIdempotent
Search KEGG glycan database by keyword or composition.
Args: query: Glycan name or composition (e.g. 'GlcNAc', 'Man5', 'sialic acid'). max_results: Maximum number of results to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| results | Yes | |
| database | Yes | |
| truncated | No | |
| total_found | Yes | |
| returned_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by stating that max_results is capped at 100.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the core purpose, and then documents the arguments efficiently. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With annotations and an output schema present, the definition covers the main requirements for a search operation: what is searched, how to query, and the result cap. Minor gaps remain around matching behavior and ordering, but nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains that query accepts a glycan name or composition with useful examples, and that max_results is capped at 100, covering both parameters well though without exhaustive syntax details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: search the KEGG glycan database by keyword or composition. It is clearly a search tool rather than a detail-fetch tool like get_glycan_info, though it does not explicitly name sibling alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'search ... by keyword or composition', but there is no explicit when-to-use guidance, exclusions, or comparison to alternatives such as get_glycan_info for detailed records. It is adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_ko_entriesARead-onlyIdempotent
Search KEGG Orthology (KO) entries by keyword.
Args: query: Gene function (e.g. 'hexokinase', 'ribosomal protein', 'cytochrome'). max_results: Maximum number of results to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| results | Yes | |
| database | Yes | |
| truncated | No | |
| total_found | Yes | |
| returned_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds a useful cap of 100 results, but does not discuss ranking, pagination, or return behavior beyond what annotations and output schema provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose and then efficiently documents the two arguments. There is no unnecessary text, and the examples and cap are directly useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With rich annotations and an output schema present, the description is nearly complete for a two-parameter search tool. The main remaining gap is explicit routing guidance versus get_ko_info or other KO-related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It does this well for both parameters: query is defined as a gene-function keyword with examples, and max_results is explained as a capped result limit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: search KEGG Orthology (KO) entries by keyword. It is clear what the tool does, but it does not explicitly distinguish itself from siblings such as get_ko_info or other search_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The query examples imply that this is a keyword search for gene functions, but the description does not state when to use this tool instead of get_ko_info or related search tools. Usage is implied rather than explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_modulesARead-onlyIdempotent
Search KEGG modules by keyword.
Args: query: Module name or pathway block (e.g. 'glycolysis', 'TCA cycle'). max_results: Maximum number of results to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| results | Yes | |
| database | Yes | |
| truncated | No | |
| total_found | Yes | |
| returned_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world behavior, so the safety burden is covered. The description adds one genuinely useful behavioral fact not present in structured data: results are capped at 100. It says nothing about matching semantics (term vs. ID matching, substring vs. fuzzy) or behavior on empty results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded, with the purpose in the first sentence and parameters in a compact Args block. Minor waste from the Args formatting duplicating schema field names, but nothing extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the simple two-parameter read operation is largely covered. Still missing the relationship to get_module_info and any note on what the query actually matches against (module names, IDs, or pathway blocks), which matters for a keyword search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it does: query is defined as a module name or pathway block with concrete examples ('glycolysis', 'TCA cycle'), and max_results is explained along with its hard cap of 100, which the schema's default of 25 does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Search KEGG modules") which is unambiguous and clearly distinct from the get_* siblings such as get_module_info. However, it does not distinguish itself from the many other search_* siblings (search_pathways, search_ko_entries, search_genes), leaving scope at the KEGG module database to be inferred from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies discovery usage by describing the query as a keyword, but gives no explicit when-to-use or when-not guidance and never names the natural follow-up (get_module_info) for retrieving full details. An agent must infer the search-then-fetch workflow from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pathwaysARead-onlyIdempotent
Search KEGG pathways by keyword.
Args: query: Search term (e.g. 'glycolysis', 'TCA', 'insulin signaling'). organism_code: 3-4 letter organism code (e.g. 'hsa' for human, 'mmu' for mouse). Use 'map' for reference pathways. max_results: Maximum number of results to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No | ||
| organism_code | No | map |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| results | Yes | |
| database | Yes | |
| truncated | No | |
| total_found | Yes | |
| returned_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, so the safety profile is covered. The description adds two pieces of real behavioral context the annotations lack: results are capped at 100 regardless of max_results, and organism_code='map' yields reference rather than organism-specific pathways. It doesn't disclose matching field or case/paging behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded purpose sentence followed by an Args block; no filler. Because structured coverage is 0%, restating the parameters with added semantics is justified rather than redundant, though the block could fold into prose more tightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and all three parameters are addressed. Remaining gaps are minor: keyword matching scope, default values (25, map), and what to do if results exceed the 100 cap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry all param meaning, and it largely does: example query terms, the 3-4 letter organism code format with 'hsa'/'mmu' examples and the 'map' special value, and the 100-result ceiling on max_results. It omits the default values and doesn't say which fields the keyword is matched against.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('search') and resource ('KEGG pathways') with the matching mode ('by keyword'), which cleanly separates it from search_reactions, search_compounds and search_brite. It never names a sibling or says explicitly that get_pathway_info is the follow-up for a hit, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the entry point before calling get_pathway_info / get_pathway_genes, but nothing states when to prefer it or when not. The 'map' note gives a hint about reference pathways, but no explicit selection criteria between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_reactionsBRead-onlyIdempotent
Search KEGG reactions by keyword.
Args: query: Search term (reaction name or description). max_results: Maximum number of results to return (capped at 100).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| results | Yes | |
| database | Yes | |
| truncated | No | |
| total_found | Yes | |
| returned_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds only that max_results is capped at 100, with no further behavioral details such as ordering, pagination, or external-service behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the purpose stated first and parameter meanings following in a compact Args block. It is appropriately sized, though the Args formatting is slightly mechanical rather than fully narrative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter search tool with rich annotations and an output schema, the description is sufficiently complete. It does not need to explain return values because an output schema exists, and it covers the key input semantics and result cap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It documents both parameters: query as a reaction name or description, and max_results as capped at 100. It does not mention the default value of 25, but otherwise compensates well for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: "Search KEGG reactions by keyword." This clearly distinguishes keyword-based reaction search from sibling detail tools like get_reaction_info, though it does not explicitly name the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies keyword search via "Search KEGG reactions by keyword" and defines the query as a reaction name or description. However, it gives no explicit guidance on when to use this tool versus get_reaction_info, get_pathway_reactions, or other search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.6.0- Added
draw_pathway_map
34 tool updates
v0.5.0- Changed
batch_entry_lookup8 fields changed- added
Input schema / properties / detail_levelAdded value: +{ + "default": "summary", + "enum": [ + "summary", + "full" + ], + "title": "Detail Level", + "type": "string" +} - removed
Output schema / $defsRemoved value: -{ - "BatchLookupResult": { - "properties": { - "entries": { - "items": { - "additionalProperties": true, - "type": "object" - }, - "title": "Entries", - "type": "array" - }, - "found": { - "title": "Found", - "type": "integer" - }, - "requested": { - "items": { - "type": "string" - }, - "title": "Requested", - "type": "array" - } - }, - "required": [ - "requested", - "found", - "entries" - ], - "title": "BatchLookupResult", - "type": "object" - }, - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - } -} - added
Output schema / properties / entriesAdded value: +{ + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Entries", + "type": "array" +} - added
Output schema / properties / foundAdded value: +{ + "title": "Found", + "type": "integer" +} - added
Output schema / properties / requestedAdded value: +{ + "items": { + "type": "string" + }, + "title": "Requested", + "type": "array" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/BatchLookupResult" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "requested", + "found", + "entries" +] - changed
Output schema / titlePrevious value: -"batch_entry_lookupOutput"New value: +"BatchLookupResult"
- Changed
convert_identifiers8 fields changed- removed
Output schema / $defsRemoved value: -{ - "ConversionResult": { - "properties": { - "count": { - "title": "Count", - "type": "integer" - }, - "mappings": { - "additionalProperties": { - "type": "string" - }, - "title": "Mappings", - "type": "object" - }, - "source_db": { - "title": "Source Db", - "type": "string" - }, - "target_db": { - "title": "Target Db", - "type": "string" - } - }, - "required": [ - "source_db", - "target_db", - "mappings", - "count" - ], - "title": "ConversionResult", - "type": "object" - }, - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - } -} - added
Output schema / properties / countAdded value: +{ + "title": "Count", + "type": "integer" +} - added
Output schema / properties / mappingsAdded value: +{ + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Mappings", + "type": "object" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/ConversionResult" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / source_dbAdded value: +{ + "title": "Source Db", + "type": "string" +} - added
Output schema / properties / target_dbAdded value: +{ + "title": "Target Db", + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "source_db", + "target_db", + "mappings", + "count" +] - changed
Output schema / titlePrevious value: -"convert_identifiersOutput"New value: +"ConversionResult"
- Changed
find_related_entries10 fields changed- added
Input schema / properties / max_resultsAdded value: +{ + "default": 100, + "title": "Max Results", + "type": "integer" +} - removed
Output schema / $defsRemoved value: -{ - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - }, - "LinkResult": { - "properties": { - "count": { - "title": "Count", - "type": "integer" - }, - "pairs": { - "items": { - "maxItems": 2, - "minItems": 2, - "prefixItems": [ - { - "type": "string" - }, - { - "type": "string" - } - ], - "type": "array" - }, - "title": "Pairs", - "type": "array" - }, - "source": { - "title": "Source", - "type": "string" - }, - "target_db": { - "title": "Target Db", - "type": "string" - } - }, - "required": [ - "source", - "target_db", - "pairs", - "count" - ], - "title": "LinkResult", - "type": "object" - } -} - added
Output schema / properties / countAdded value: +{ + "title": "Count", + "type": "integer" +} - added
Output schema / properties / pairsAdded value: +{ + "items": { + "maxItems": 2, + "minItems": 2, + "prefixItems": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "type": "array" + }, + "title": "Pairs", + "type": "array" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/LinkResult" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / sourceAdded value: +{ + "title": "Source", + "type": "string" +} - added
Output schema / properties / target_dbAdded value: +{ + "title": "Target Db", + "type": "string" +} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "source", + "target_db", + "pairs", + "count" +] - changed
Output schema / titlePrevious value: -"find_related_entriesOutput"New value: +"LinkResult"
- Changed
get_brite_info16 fields changed- removed
Output schema / $defsRemoved value: -{ - "BriteHierarchy": { - "description": "Bounded projection of a KEGG BRITE ``A``/``B``/``C``/… tree.\n\nBRITE entries are hierarchies, not flat-file entries: ``/get/br:ko00001`` is\n4.3 MB / 65,337 lines and ``/get/br:hsa00001`` is 6.8 MB. Returning the raw\ntext would overflow the context window of the model this feeds, so the\ndefault projection keeps the navigational skeleton (per-level line counts +\nthe top two levels' labels) and drops the leaves. ``raw_content`` is\npopulated only for ``detail_level=\"full\"``, and is itself capped.", - "properties": { - "columns": { - "items": { - "type": "string" - }, - "title": "Columns", - "type": "array" - }, - "deepest_level": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Deepest Level" - }, - "detail_level": { - "default": "summary", - "title": "Detail Level", - "type": "string" - }, - "entry": { - "title": "Entry", - "type": "string" - }, - "labels": { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": "Labels", - "type": "object" - }, - "labels_truncated": { - "items": { - "type": "string" - }, - "title": "Labels Truncated", - "type": "array" - }, - "last_updated": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Last Updated" - }, - "level_counts": { - "additionalProperties": { - "type": "integer" - }, - "title": "Level Counts", - "type": "object" - }, - "raw_content": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Raw Content" - }, - "raw_truncated": { - "default": false, - "title": "Raw Truncated", - "type": "boolean" - }, - "total_lines": { - "default": 0, - "title": "Total Lines", - "type": "integer" - } - }, - "required": [ - "entry" - ], - "title": "BriteHierarchy", - "type": "object" - }, - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - } -} - added
Output schema / descriptionAdded value: +"Bounded projection of a KEGG BRITE ``A``/``B``/``C``/… tree.\n\nBRITE entries are hierarchies, not flat-file entries: ``/get/br:ko00001`` is\n4.3 MB / 65,337 lines and ``/get/br:hsa00001`` is 6.8 MB. Returning the raw\ntext would overflow the context window of the model this feeds, so the\ndefault projection keeps the navigational skeleton (per-level line counts +\nthe top two levels' labels) and drops the leaves. ``raw_content`` is\npopulated only for ``detail_level=\"full\"``, and is itself capped." - added
Output schema / properties / columnsAdded value: +{ + "items": { + "type": "string" + }, + "title": "Columns", + "type": "array" +} - added
Output schema / properties / deepest_levelAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Deepest Level" +} - added
Output schema / properties / detail_levelAdded value: +{ + "default": "summary", + "title": "Detail Level", + "type": "string" +} - added
Output schema / properties / entryAdded value: +{ + "title": "Entry", + "type": "string" +} - added
Output schema / properties / labelsAdded value: +{ + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Labels", + "type": "object" +} - added
Output schema / properties / labels_truncatedAdded value: +{ + "items": { + "type": "string" + }, + "title": "Labels Truncated", + "type": "array" +} - added
Output schema / properties / last_updatedAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Updated" +} - added
Output schema / properties / level_countsAdded value: +{ + "additionalProperties": { + "type": "integer" + }, + "title": "Level Counts", + "type": "object" +} - added
Output schema / properties / raw_contentAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Raw Content" +} - added
Output schema / properties / raw_truncatedAdded value: +{ + "default": false, + "title": "Raw Truncated", + "type": "boolean" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/BriteHierarchy" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / total_linesAdded value: +{ + "default": 0, + "title": "Total Lines", + "type": "integer" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "entry" +] - changed
Output schema / titlePrevious value: -"get_brite_infoOutput"New value: +"BriteHierarchy"
- Changed
get_compound_info4 fields changed- added
Output schema / $defs / EntrySummary / properties / symbolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Symbol" +} - removed
Output schema / $defs / ErrorResultRemoved value: -{ - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" -} - added
Output schema / $defs / Reference / properties / sequenceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sequence" +} - changed
Output schema / properties / result / anyOfPrevious value: -[ - { - "$ref": "#/$defs/CompoundInfo" - }, - { - "$ref": "#/$defs/EntrySummary" - }, - { - "$ref": "#/$defs/ErrorResult" - } -]New value: +[ + { + "$ref": "#/$defs/CompoundInfo" + }, + { + "$ref": "#/$defs/EntrySummary" + } +]
- Changed
get_compound_reactions2 fields changed- added
Input schema / properties / max_resultsAdded value: +{ + "default": 100, + "title": "Max Results", + "type": "integer" +} - changed
Output schema / (root)Previous value: -{ - "$defs": { - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - } - }, - "properties": { - "result": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" - } - }, - "required": [ - "result" - ], - "title": "get_compound_reactionsOutput", - "type": "object" -}New value: +null
- Changed
get_database_info8 fields changed- removed
Output schema / $defsRemoved value: -{ - "DatabaseInfo": { - "properties": { - "database": { - "title": "Database", - "type": "string" - }, - "entries": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Entries" - }, - "raw_info": { - "title": "Raw Info", - "type": "string" - }, - "release": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Release" - } - }, - "required": [ - "database", - "raw_info" - ], - "title": "DatabaseInfo", - "type": "object" - }, - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - } -} - added
Output schema / properties / databaseAdded value: +{ + "title": "Database", + "type": "string" +} - added
Output schema / properties / entriesAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Entries" +} - added
Output schema / properties / raw_infoAdded value: +{ + "title": "Raw Info", + "type": "string" +} - added
Output schema / properties / releaseAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Release" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/DatabaseInfo" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "database", + "raw_info" +] - changed
Output schema / titlePrevious value: -"get_database_infoOutput"New value: +"DatabaseInfo"
- Changed
get_disease_info4 fields changed- added
Output schema / $defs / EntrySummary / properties / symbolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Symbol" +} - removed
Output schema / $defs / ErrorResultRemoved value: -{ - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" -} - added
Output schema / $defs / Reference / properties / sequenceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sequence" +} - changed
Output schema / properties / result / anyOfPrevious value: -[ - { - "$ref": "#/$defs/DiseaseInfo" - }, - { - "$ref": "#/$defs/EntrySummary" - }, - { - "$ref": "#/$defs/ErrorResult" - } -]New value: +[ + { + "$ref": "#/$defs/DiseaseInfo" + }, + { + "$ref": "#/$defs/EntrySummary" + } +]
- Changed
get_drug_info4 fields changed- added
Output schema / $defs / EntrySummary / properties / symbolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Symbol" +} - removed
Output schema / $defs / ErrorResultRemoved value: -{ - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" -} - added
Output schema / $defs / Reference / properties / sequenceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sequence" +} - changed
Output schema / properties / result / anyOfPrevious value: -[ - { - "$ref": "#/$defs/DrugInfo" - }, - { - "$ref": "#/$defs/EntrySummary" - }, - { - "$ref": "#/$defs/ErrorResult" - } -]New value: +[ + { + "$ref": "#/$defs/DrugInfo" + }, + { + "$ref": "#/$defs/EntrySummary" + } +]
- Changed
get_drug_interactions10 fields changed- added
Input schema / properties / max_resultsAdded value: +{ + "default": 100, + "title": "Max Results", + "type": "integer" +} - removed
Output schema / $defs / DrugInteractionResultRemoved value: -{ - "properties": { - "count": { - "title": "Count", - "type": "integer" - }, - "drug_ids": { - "items": { - "type": "string" - }, - "title": "Drug Ids", - "type": "array" - }, - "interactions": { - "items": { - "$ref": "#/$defs/DrugInteraction" - }, - "title": "Interactions", - "type": "array" - } - }, - "required": [ - "drug_ids", - "interactions", - "count" - ], - "title": "DrugInteractionResult", - "type": "object" -} - removed
Output schema / $defs / ErrorResultRemoved value: -{ - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" -} - added
Output schema / properties / countAdded value: +{ + "title": "Count", + "type": "integer" +} - added
Output schema / properties / drug_idsAdded value: +{ + "items": { + "type": "string" + }, + "title": "Drug Ids", + "type": "array" +} - added
Output schema / properties / interactionsAdded value: +{ + "items": { + "$ref": "#/$defs/DrugInteraction" + }, + "title": "Interactions", + "type": "array" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/DrugInteractionResult" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "drug_ids", + "interactions", + "count" +] - changed
Output schema / titlePrevious value: -"get_drug_interactionsOutput"New value: +"DrugInteractionResult"
- Changed
get_enzyme_info5 fields changed- added
Output schema / $defs / EntrySummary / properties / symbolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Symbol" +} - added
Output schema / $defs / EnzymeInfo / properties / genes_truncatedAdded value: +{ + "default": false, + "title": "Genes Truncated", + "type": "boolean" +} - removed
Output schema / $defs / ErrorResultRemoved value: -{ - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" -} - added
Output schema / $defs / Reference / properties / sequenceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sequence" +} - changed
Output schema / properties / result / anyOfPrevious value: -[ - { - "$ref": "#/$defs/EnzymeInfo" - }, - { - "$ref": "#/$defs/EntrySummary" - }, - { - "$ref": "#/$defs/ErrorResult" - } -]New value: +[ + { + "$ref": "#/$defs/EnzymeInfo" + }, + { + "$ref": "#/$defs/EntrySummary" + } +]
- Changed
get_gene_info5 fields changed- added
Output schema / $defs / EntrySummary / properties / symbolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Symbol" +} - removed
Output schema / $defs / ErrorResultRemoved value: -{ - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" -} - added
Output schema / $defs / GeneInfo / properties / symbolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Symbol" +} - added
Output schema / $defs / Reference / properties / sequenceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sequence" +} - changed
Output schema / properties / result / anyOfPrevious value: -[ - { - "$ref": "#/$defs/GeneInfo" - }, - { - "$ref": "#/$defs/EntrySummary" - }, - { - "$ref": "#/$defs/ErrorResult" - } -]New value: +[ + { + "$ref": "#/$defs/GeneInfo" + }, + { + "$ref": "#/$defs/EntrySummary" + } +]
- Changed
get_gene_orthologs1 field changed- changed
Output schema / (root)Previous value: -{ - "$defs": { - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - } - }, - "properties": { - "result": { - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" - } - }, - "required": [ - "result" - ], - "title": "get_gene_orthologsOutput", - "type": "object" -}New value: +null
- Changed
get_glycan_info4 fields changed- added
Output schema / $defs / EntrySummary / properties / symbolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Symbol" +} - removed
Output schema / $defs / ErrorResultRemoved value: -{ - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" -} - added
Output schema / $defs / Reference / properties / sequenceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sequence" +} - changed
Output schema / properties / result / anyOfPrevious value: -[ - { - "$ref": "#/$defs/GlycanInfo" - }, - { - "$ref": "#/$defs/EntrySummary" - }, - { - "$ref": "#/$defs/ErrorResult" - } -]New value: +[ + { + "$ref": "#/$defs/GlycanInfo" + }, + { + "$ref": "#/$defs/EntrySummary" + } +]
- Changed
get_ko_info5 fields changed- added
Output schema / $defs / EntrySummary / properties / symbolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Symbol" +} - removed
Output schema / $defs / ErrorResultRemoved value: -{ - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" -} - added
Output schema / $defs / KOInfo / properties / genes_truncatedAdded value: +{ + "default": false, + "title": "Genes Truncated", + "type": "boolean" +} - added
Output schema / $defs / Reference / properties / sequenceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sequence" +} - changed
Output schema / properties / result / anyOfPrevious value: -[ - { - "$ref": "#/$defs/KOInfo" - }, - { - "$ref": "#/$defs/EntrySummary" - }, - { - "$ref": "#/$defs/ErrorResult" - } -]New value: +[ + { + "$ref": "#/$defs/KOInfo" + }, + { + "$ref": "#/$defs/EntrySummary" + } +]
- Changed
get_module_info4 fields changed- added
Output schema / $defs / EntrySummary / properties / symbolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Symbol" +} - removed
Output schema / $defs / ErrorResultRemoved value: -{ - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" -} - added
Output schema / $defs / Reference / properties / sequenceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sequence" +} - changed
Output schema / properties / result / anyOfPrevious value: -[ - { - "$ref": "#/$defs/ModuleInfo" - }, - { - "$ref": "#/$defs/EntrySummary" - }, - { - "$ref": "#/$defs/ErrorResult" - } -]New value: +[ + { + "$ref": "#/$defs/ModuleInfo" + }, + { + "$ref": "#/$defs/EntrySummary" + } +]
- Changed
get_pathway_compounds10 fields changed- added
Input schema / properties / max_resultsAdded value: +{ + "default": 100, + "title": "Max Results", + "type": "integer" +} - removed
Output schema / $defsRemoved value: -{ - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - }, - "PathwayLinks": { - "properties": { - "count": { - "title": "Count", - "type": "integer" - }, - "linked_db": { - "title": "Linked Db", - "type": "string" - }, - "pairs": { - "items": { - "maxItems": 2, - "minItems": 2, - "prefixItems": [ - { - "type": "string" - }, - { - "type": "string" - } - ], - "type": "array" - }, - "title": "Pairs", - "type": "array" - }, - "pathway_id": { - "title": "Pathway Id", - "type": "string" - } - }, - "required": [ - "pathway_id", - "linked_db", - "pairs", - "count" - ], - "title": "PathwayLinks", - "type": "object" - } -} - added
Output schema / properties / countAdded value: +{ + "title": "Count", + "type": "integer" +} - added
Output schema / properties / linked_dbAdded value: +{ + "title": "Linked Db", + "type": "string" +} - added
Output schema / properties / pairsAdded value: +{ + "items": { + "maxItems": 2, + "minItems": 2, + "prefixItems": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "type": "array" + }, + "title": "Pairs", + "type": "array" +} - added
Output schema / properties / pathway_idAdded value: +{ + "title": "Pathway Id", + "type": "string" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/PathwayLinks" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "pathway_id", + "linked_db", + "pairs", + "count" +] - changed
Output schema / titlePrevious value: -"get_pathway_compoundsOutput"New value: +"PathwayLinks"
- Changed
get_pathway_genes10 fields changed- added
Input schema / properties / max_resultsAdded value: +{ + "default": 100, + "title": "Max Results", + "type": "integer" +} - removed
Output schema / $defsRemoved value: -{ - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - }, - "PathwayLinks": { - "properties": { - "count": { - "title": "Count", - "type": "integer" - }, - "linked_db": { - "title": "Linked Db", - "type": "string" - }, - "pairs": { - "items": { - "maxItems": 2, - "minItems": 2, - "prefixItems": [ - { - "type": "string" - }, - { - "type": "string" - } - ], - "type": "array" - }, - "title": "Pairs", - "type": "array" - }, - "pathway_id": { - "title": "Pathway Id", - "type": "string" - } - }, - "required": [ - "pathway_id", - "linked_db", - "pairs", - "count" - ], - "title": "PathwayLinks", - "type": "object" - } -} - added
Output schema / properties / countAdded value: +{ + "title": "Count", + "type": "integer" +} - added
Output schema / properties / linked_dbAdded value: +{ + "title": "Linked Db", + "type": "string" +} - added
Output schema / properties / pairsAdded value: +{ + "items": { + "maxItems": 2, + "minItems": 2, + "prefixItems": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "type": "array" + }, + "title": "Pairs", + "type": "array" +} - added
Output schema / properties / pathway_idAdded value: +{ + "title": "Pathway Id", + "type": "string" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/PathwayLinks" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "pathway_id", + "linked_db", + "pairs", + "count" +] - changed
Output schema / titlePrevious value: -"get_pathway_genesOutput"New value: +"PathwayLinks"
- Changed
get_pathway_info4 fields changed- added
Output schema / $defs / EntrySummary / properties / symbolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Symbol" +} - removed
Output schema / $defs / ErrorResultRemoved value: -{ - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" -} - added
Output schema / $defs / Reference / properties / sequenceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sequence" +} - changed
Output schema / properties / result / anyOfPrevious value: -[ - { - "$ref": "#/$defs/PathwayInfo" - }, - { - "$ref": "#/$defs/EntrySummary" - }, - { - "$ref": "#/$defs/ErrorResult" - } -]New value: +[ + { + "$ref": "#/$defs/PathwayInfo" + }, + { + "$ref": "#/$defs/EntrySummary" + } +]
- Changed
get_pathway_reactions10 fields changed- added
Input schema / properties / max_resultsAdded value: +{ + "default": 100, + "title": "Max Results", + "type": "integer" +} - removed
Output schema / $defsRemoved value: -{ - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - }, - "PathwayLinks": { - "properties": { - "count": { - "title": "Count", - "type": "integer" - }, - "linked_db": { - "title": "Linked Db", - "type": "string" - }, - "pairs": { - "items": { - "maxItems": 2, - "minItems": 2, - "prefixItems": [ - { - "type": "string" - }, - { - "type": "string" - } - ], - "type": "array" - }, - "title": "Pairs", - "type": "array" - }, - "pathway_id": { - "title": "Pathway Id", - "type": "string" - } - }, - "required": [ - "pathway_id", - "linked_db", - "pairs", - "count" - ], - "title": "PathwayLinks", - "type": "object" - } -} - added
Output schema / properties / countAdded value: +{ + "title": "Count", + "type": "integer" +} - added
Output schema / properties / linked_dbAdded value: +{ + "title": "Linked Db", + "type": "string" +} - added
Output schema / properties / pairsAdded value: +{ + "items": { + "maxItems": 2, + "minItems": 2, + "prefixItems": [ + { + "type": "string" + }, + { + "type": "string" + } + ], + "type": "array" + }, + "title": "Pairs", + "type": "array" +} - added
Output schema / properties / pathway_idAdded value: +{ + "title": "Pathway Id", + "type": "string" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/PathwayLinks" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "pathway_id", + "linked_db", + "pairs", + "count" +] - changed
Output schema / titlePrevious value: -"get_pathway_reactionsOutput"New value: +"PathwayLinks"
- Changed
get_reaction_info4 fields changed- added
Output schema / $defs / EntrySummary / properties / symbolAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Symbol" +} - removed
Output schema / $defs / ErrorResultRemoved value: -{ - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" -} - added
Output schema / $defs / Reference / properties / sequenceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sequence" +} - changed
Output schema / properties / result / anyOfPrevious value: -[ - { - "$ref": "#/$defs/ReactionInfo" - }, - { - "$ref": "#/$defs/EntrySummary" - }, - { - "$ref": "#/$defs/ErrorResult" - } -]New value: +[ + { + "$ref": "#/$defs/ReactionInfo" + }, + { + "$ref": "#/$defs/EntrySummary" + } +]
- Changed
list_organisms8 fields changed- removed
Output schema / $defsRemoved value: -{ - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - }, - "ListResult": { - "properties": { - "database": { - "title": "Database", - "type": "string" - }, - "items": { - "additionalProperties": { - "type": "string" - }, - "title": "Items", - "type": "object" - }, - "total": { - "title": "Total", - "type": "integer" - }, - "truncated": { - "default": false, - "title": "Truncated", - "type": "boolean" - } - }, - "required": [ - "database", - "total", - "items" - ], - "title": "ListResult", - "type": "object" - } -} - added
Output schema / properties / databaseAdded value: +{ + "title": "Database", + "type": "string" +} - added
Output schema / properties / itemsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "title": "Items", + "type": "object" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/ListResult" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / totalAdded value: +{ + "title": "Total", + "type": "integer" +} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "database", + "total", + "items" +] - changed
Output schema / titlePrevious value: -"list_organismsOutput"New value: +"ListResult"
- Changed
render_pathway_ascii15 fields changed- removed
Output schema / $defsRemoved value: -{ - "AsciiPathway": { - "description": "Result of rendering a KEGG pathway as ASCII art.", - "properties": { - "ascii": { - "title": "Ascii", - "type": "string" - }, - "legend": { - "default": [], - "items": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "title": "Legend", - "type": "array" - }, - "node_count": { - "title": "Node Count", - "type": "integer" - }, - "organism": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Organism" - }, - "pathway_id": { - "title": "Pathway Id", - "type": "string" - }, - "reaction_count": { - "title": "Reaction Count", - "type": "integer" - }, - "relation_count": { - "default": 0, - "title": "Relation Count", - "type": "integer" - }, - "style": { - "enum": [ - "chain", - "grid" - ], - "title": "Style", - "type": "string" - }, - "title": { - "title": "Title", - "type": "string" - }, - "truncated": { - "default": false, - "title": "Truncated", - "type": "boolean" - } - }, - "required": [ - "pathway_id", - "title", - "style", - "ascii", - "node_count", - "reaction_count" - ], - "title": "AsciiPathway", - "type": "object" - }, - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - } -} - added
Output schema / descriptionAdded value: +"Result of rendering a KEGG pathway as ASCII art." - added
Output schema / properties / asciiAdded value: +{ + "title": "Ascii", + "type": "string" +} - added
Output schema / properties / legendAdded value: +{ + "default": [], + "items": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "title": "Legend", + "type": "array" +} - added
Output schema / properties / node_countAdded value: +{ + "title": "Node Count", + "type": "integer" +} - added
Output schema / properties / organismAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Organism" +} - added
Output schema / properties / pathway_idAdded value: +{ + "title": "Pathway Id", + "type": "string" +} - added
Output schema / properties / reaction_countAdded value: +{ + "title": "Reaction Count", + "type": "integer" +} - added
Output schema / properties / relation_countAdded value: +{ + "default": 0, + "title": "Relation Count", + "type": "integer" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/AsciiPathway" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / styleAdded value: +{ + "enum": [ + "chain", + "grid" + ], + "title": "Style", + "type": "string" +} - added
Output schema / properties / titleAdded value: +{ + "title": "Title", + "type": "string" +} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "pathway_id", + "title", + "style", + "ascii", + "node_count", + "reaction_count" +] - changed
Output schema / titlePrevious value: -"render_pathway_asciiOutput"New value: +"AsciiPathway"
- Changed
search_brite10 fields changed- removed
Output schema / $defsRemoved value: -{ - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - }, - "SearchResult": { - "properties": { - "database": { - "title": "Database", - "type": "string" - }, - "query": { - "title": "Query", - "type": "string" - }, - "results": { - "additionalProperties": { - "type": "string" - }, - "title": "Results", - "type": "object" - }, - "returned_count": { - "title": "Returned Count", - "type": "integer" - }, - "total_found": { - "title": "Total Found", - "type": "integer" - }, - "truncated": { - "default": false, - "title": "Truncated", - "type": "boolean" - } - }, - "required": [ - "query", - "database", - "total_found", - "returned_count", - "results" - ], - "title": "SearchResult", - "type": "object" - } -} - added
Output schema / properties / databaseAdded value: +{ + "title": "Database", + "type": "string" +} - added
Output schema / properties / queryAdded value: +{ + "title": "Query", + "type": "string" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/SearchResult" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / resultsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "title": "Results", + "type": "object" +} - added
Output schema / properties / returned_countAdded value: +{ + "title": "Returned Count", + "type": "integer" +} - added
Output schema / properties / total_foundAdded value: +{ + "title": "Total Found", + "type": "integer" +} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "query", + "database", + "total_found", + "returned_count", + "results" +] - changed
Output schema / titlePrevious value: -"search_briteOutput"New value: +"SearchResult"
- Changed
search_compounds11 fields changed- added
Input schema / properties / search_type / enumAdded value: +[ + "name", + "formula", + "exact_mass", + "mol_weight", + "nop" +] - removed
Output schema / $defsRemoved value: -{ - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - }, - "SearchResult": { - "properties": { - "database": { - "title": "Database", - "type": "string" - }, - "query": { - "title": "Query", - "type": "string" - }, - "results": { - "additionalProperties": { - "type": "string" - }, - "title": "Results", - "type": "object" - }, - "returned_count": { - "title": "Returned Count", - "type": "integer" - }, - "total_found": { - "title": "Total Found", - "type": "integer" - }, - "truncated": { - "default": false, - "title": "Truncated", - "type": "boolean" - } - }, - "required": [ - "query", - "database", - "total_found", - "returned_count", - "results" - ], - "title": "SearchResult", - "type": "object" - } -} - added
Output schema / properties / databaseAdded value: +{ + "title": "Database", + "type": "string" +} - added
Output schema / properties / queryAdded value: +{ + "title": "Query", + "type": "string" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/SearchResult" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / resultsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "title": "Results", + "type": "object" +} - added
Output schema / properties / returned_countAdded value: +{ + "title": "Returned Count", + "type": "integer" +} - added
Output schema / properties / total_foundAdded value: +{ + "title": "Total Found", + "type": "integer" +} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "query", + "database", + "total_found", + "returned_count", + "results" +] - changed
Output schema / titlePrevious value: -"search_compoundsOutput"New value: +"SearchResult"
- Changed
search_diseases10 fields changed- removed
Output schema / $defsRemoved value: -{ - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - }, - "SearchResult": { - "properties": { - "database": { - "title": "Database", - "type": "string" - }, - "query": { - "title": "Query", - "type": "string" - }, - "results": { - "additionalProperties": { - "type": "string" - }, - "title": "Results", - "type": "object" - }, - "returned_count": { - "title": "Returned Count", - "type": "integer" - }, - "total_found": { - "title": "Total Found", - "type": "integer" - }, - "truncated": { - "default": false, - "title": "Truncated", - "type": "boolean" - } - }, - "required": [ - "query", - "database", - "total_found", - "returned_count", - "results" - ], - "title": "SearchResult", - "type": "object" - } -} - added
Output schema / properties / databaseAdded value: +{ + "title": "Database", + "type": "string" +} - added
Output schema / properties / queryAdded value: +{ + "title": "Query", + "type": "string" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/SearchResult" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / resultsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "title": "Results", + "type": "object" +} - added
Output schema / properties / returned_countAdded value: +{ + "title": "Returned Count", + "type": "integer" +} - added
Output schema / properties / total_foundAdded value: +{ + "title": "Total Found", + "type": "integer" +} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "query", + "database", + "total_found", + "returned_count", + "results" +] - changed
Output schema / titlePrevious value: -"search_diseasesOutput"New value: +"SearchResult"
- Changed
search_drugs11 fields changed- added
Input schema / properties / search_type / enumAdded value: +[ + "name", + "formula", + "exact_mass", + "mol_weight" +] - removed
Output schema / $defsRemoved value: -{ - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - }, - "SearchResult": { - "properties": { - "database": { - "title": "Database", - "type": "string" - }, - "query": { - "title": "Query", - "type": "string" - }, - "results": { - "additionalProperties": { - "type": "string" - }, - "title": "Results", - "type": "object" - }, - "returned_count": { - "title": "Returned Count", - "type": "integer" - }, - "total_found": { - "title": "Total Found", - "type": "integer" - }, - "truncated": { - "default": false, - "title": "Truncated", - "type": "boolean" - } - }, - "required": [ - "query", - "database", - "total_found", - "returned_count", - "results" - ], - "title": "SearchResult", - "type": "object" - } -} - added
Output schema / properties / databaseAdded value: +{ + "title": "Database", + "type": "string" +} - added
Output schema / properties / queryAdded value: +{ + "title": "Query", + "type": "string" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/SearchResult" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / resultsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "title": "Results", + "type": "object" +} - added
Output schema / properties / returned_countAdded value: +{ + "title": "Returned Count", + "type": "integer" +} - added
Output schema / properties / total_foundAdded value: +{ + "title": "Total Found", + "type": "integer" +} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "query", + "database", + "total_found", + "returned_count", + "results" +] - changed
Output schema / titlePrevious value: -"search_drugsOutput"New value: +"SearchResult"
- Changed
search_enzymes10 fields changed- removed
Output schema / $defsRemoved value: -{ - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - }, - "SearchResult": { - "properties": { - "database": { - "title": "Database", - "type": "string" - }, - "query": { - "title": "Query", - "type": "string" - }, - "results": { - "additionalProperties": { - "type": "string" - }, - "title": "Results", - "type": "object" - }, - "returned_count": { - "title": "Returned Count", - "type": "integer" - }, - "total_found": { - "title": "Total Found", - "type": "integer" - }, - "truncated": { - "default": false, - "title": "Truncated", - "type": "boolean" - } - }, - "required": [ - "query", - "database", - "total_found", - "returned_count", - "results" - ], - "title": "SearchResult", - "type": "object" - } -} - added
Output schema / properties / databaseAdded value: +{ + "title": "Database", + "type": "string" +} - added
Output schema / properties / queryAdded value: +{ + "title": "Query", + "type": "string" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/SearchResult" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / resultsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "title": "Results", + "type": "object" +} - added
Output schema / properties / returned_countAdded value: +{ + "title": "Returned Count", + "type": "integer" +} - added
Output schema / properties / total_foundAdded value: +{ + "title": "Total Found", + "type": "integer" +} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "query", + "database", + "total_found", + "returned_count", + "results" +] - changed
Output schema / titlePrevious value: -"search_enzymesOutput"New value: +"SearchResult"
- Changed
search_genes10 fields changed- removed
Output schema / $defsRemoved value: -{ - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - }, - "SearchResult": { - "properties": { - "database": { - "title": "Database", - "type": "string" - }, - "query": { - "title": "Query", - "type": "string" - }, - "results": { - "additionalProperties": { - "type": "string" - }, - "title": "Results", - "type": "object" - }, - "returned_count": { - "title": "Returned Count", - "type": "integer" - }, - "total_found": { - "title": "Total Found", - "type": "integer" - }, - "truncated": { - "default": false, - "title": "Truncated", - "type": "boolean" - } - }, - "required": [ - "query", - "database", - "total_found", - "returned_count", - "results" - ], - "title": "SearchResult", - "type": "object" - } -} - added
Output schema / properties / databaseAdded value: +{ + "title": "Database", + "type": "string" +} - added
Output schema / properties / queryAdded value: +{ + "title": "Query", + "type": "string" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/SearchResult" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / resultsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "title": "Results", + "type": "object" +} - added
Output schema / properties / returned_countAdded value: +{ + "title": "Returned Count", + "type": "integer" +} - added
Output schema / properties / total_foundAdded value: +{ + "title": "Total Found", + "type": "integer" +} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "query", + "database", + "total_found", + "returned_count", + "results" +] - changed
Output schema / titlePrevious value: -"search_genesOutput"New value: +"SearchResult"
- Changed
search_glycans10 fields changed- removed
Output schema / $defsRemoved value: -{ - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - }, - "SearchResult": { - "properties": { - "database": { - "title": "Database", - "type": "string" - }, - "query": { - "title": "Query", - "type": "string" - }, - "results": { - "additionalProperties": { - "type": "string" - }, - "title": "Results", - "type": "object" - }, - "returned_count": { - "title": "Returned Count", - "type": "integer" - }, - "total_found": { - "title": "Total Found", - "type": "integer" - }, - "truncated": { - "default": false, - "title": "Truncated", - "type": "boolean" - } - }, - "required": [ - "query", - "database", - "total_found", - "returned_count", - "results" - ], - "title": "SearchResult", - "type": "object" - } -} - added
Output schema / properties / databaseAdded value: +{ + "title": "Database", + "type": "string" +} - added
Output schema / properties / queryAdded value: +{ + "title": "Query", + "type": "string" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/SearchResult" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / resultsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "title": "Results", + "type": "object" +} - added
Output schema / properties / returned_countAdded value: +{ + "title": "Returned Count", + "type": "integer" +} - added
Output schema / properties / total_foundAdded value: +{ + "title": "Total Found", + "type": "integer" +} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "query", + "database", + "total_found", + "returned_count", + "results" +] - changed
Output schema / titlePrevious value: -"search_glycansOutput"New value: +"SearchResult"
- Changed
search_ko_entries10 fields changed- removed
Output schema / $defsRemoved value: -{ - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - }, - "SearchResult": { - "properties": { - "database": { - "title": "Database", - "type": "string" - }, - "query": { - "title": "Query", - "type": "string" - }, - "results": { - "additionalProperties": { - "type": "string" - }, - "title": "Results", - "type": "object" - }, - "returned_count": { - "title": "Returned Count", - "type": "integer" - }, - "total_found": { - "title": "Total Found", - "type": "integer" - }, - "truncated": { - "default": false, - "title": "Truncated", - "type": "boolean" - } - }, - "required": [ - "query", - "database", - "total_found", - "returned_count", - "results" - ], - "title": "SearchResult", - "type": "object" - } -} - added
Output schema / properties / databaseAdded value: +{ + "title": "Database", + "type": "string" +} - added
Output schema / properties / queryAdded value: +{ + "title": "Query", + "type": "string" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/SearchResult" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / resultsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "title": "Results", + "type": "object" +} - added
Output schema / properties / returned_countAdded value: +{ + "title": "Returned Count", + "type": "integer" +} - added
Output schema / properties / total_foundAdded value: +{ + "title": "Total Found", + "type": "integer" +} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "query", + "database", + "total_found", + "returned_count", + "results" +] - changed
Output schema / titlePrevious value: -"search_ko_entriesOutput"New value: +"SearchResult"
- Changed
search_modules10 fields changed- removed
Output schema / $defsRemoved value: -{ - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - }, - "SearchResult": { - "properties": { - "database": { - "title": "Database", - "type": "string" - }, - "query": { - "title": "Query", - "type": "string" - }, - "results": { - "additionalProperties": { - "type": "string" - }, - "title": "Results", - "type": "object" - }, - "returned_count": { - "title": "Returned Count", - "type": "integer" - }, - "total_found": { - "title": "Total Found", - "type": "integer" - }, - "truncated": { - "default": false, - "title": "Truncated", - "type": "boolean" - } - }, - "required": [ - "query", - "database", - "total_found", - "returned_count", - "results" - ], - "title": "SearchResult", - "type": "object" - } -} - added
Output schema / properties / databaseAdded value: +{ + "title": "Database", + "type": "string" +} - added
Output schema / properties / queryAdded value: +{ + "title": "Query", + "type": "string" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/SearchResult" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / resultsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "title": "Results", + "type": "object" +} - added
Output schema / properties / returned_countAdded value: +{ + "title": "Returned Count", + "type": "integer" +} - added
Output schema / properties / total_foundAdded value: +{ + "title": "Total Found", + "type": "integer" +} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "query", + "database", + "total_found", + "returned_count", + "results" +] - changed
Output schema / titlePrevious value: -"search_modulesOutput"New value: +"SearchResult"
- Changed
search_pathways10 fields changed- removed
Output schema / $defsRemoved value: -{ - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - }, - "SearchResult": { - "properties": { - "database": { - "title": "Database", - "type": "string" - }, - "query": { - "title": "Query", - "type": "string" - }, - "results": { - "additionalProperties": { - "type": "string" - }, - "title": "Results", - "type": "object" - }, - "returned_count": { - "title": "Returned Count", - "type": "integer" - }, - "total_found": { - "title": "Total Found", - "type": "integer" - }, - "truncated": { - "default": false, - "title": "Truncated", - "type": "boolean" - } - }, - "required": [ - "query", - "database", - "total_found", - "returned_count", - "results" - ], - "title": "SearchResult", - "type": "object" - } -} - added
Output schema / properties / databaseAdded value: +{ + "title": "Database", + "type": "string" +} - added
Output schema / properties / queryAdded value: +{ + "title": "Query", + "type": "string" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/SearchResult" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / resultsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "title": "Results", + "type": "object" +} - added
Output schema / properties / returned_countAdded value: +{ + "title": "Returned Count", + "type": "integer" +} - added
Output schema / properties / total_foundAdded value: +{ + "title": "Total Found", + "type": "integer" +} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "query", + "database", + "total_found", + "returned_count", + "results" +] - changed
Output schema / titlePrevious value: -"search_pathwaysOutput"New value: +"SearchResult"
- Changed
search_reactions10 fields changed- removed
Output schema / $defsRemoved value: -{ - "ErrorResult": { - "description": "Structured error returned by a tool when the KEGG API fails.\n\nA tool returns this instead of raising so the model can reason about\nthe failure and decide whether to retry, change inputs, or give up.\nA point lookup that receives a 404 uses code ``not_found``; an empty search\nremains a successful result with no items.", - "properties": { - "code": { - "default": "kegg_api_error", - "title": "Code", - "type": "string" - }, - "error": { - "title": "Error", - "type": "string" - }, - "hint": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Hint" - }, - "path": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Path" - }, - "retryable": { - "default": false, - "title": "Retryable", - "type": "boolean" - }, - "status": { - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Status" - } - }, - "required": [ - "error" - ], - "title": "ErrorResult", - "type": "object" - }, - "SearchResult": { - "properties": { - "database": { - "title": "Database", - "type": "string" - }, - "query": { - "title": "Query", - "type": "string" - }, - "results": { - "additionalProperties": { - "type": "string" - }, - "title": "Results", - "type": "object" - }, - "returned_count": { - "title": "Returned Count", - "type": "integer" - }, - "total_found": { - "title": "Total Found", - "type": "integer" - }, - "truncated": { - "default": false, - "title": "Truncated", - "type": "boolean" - } - }, - "required": [ - "query", - "database", - "total_found", - "returned_count", - "results" - ], - "title": "SearchResult", - "type": "object" - } -} - added
Output schema / properties / databaseAdded value: +{ + "title": "Database", + "type": "string" +} - added
Output schema / properties / queryAdded value: +{ + "title": "Query", + "type": "string" +} - removed
Output schema / properties / resultRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/SearchResult" - }, - { - "$ref": "#/$defs/ErrorResult" - } - ], - "title": "Result" -} - added
Output schema / properties / resultsAdded value: +{ + "additionalProperties": { + "type": "string" + }, + "title": "Results", + "type": "object" +} - added
Output schema / properties / returned_countAdded value: +{ + "title": "Returned Count", + "type": "integer" +} - added
Output schema / properties / total_foundAdded value: +{ + "title": "Total Found", + "type": "integer" +} - added
Output schema / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +} - changed
Output schema / requiredPrevious value: -[ - "result" -]New value: +[ + "query", + "database", + "total_found", + "returned_count", + "results" +] - changed
Output schema / titlePrevious value: -"search_reactionsOutput"New value: +"SearchResult"
2 tool updates
v0.4.0- Changed
get_brite_info4 fields changed- added
Output schema / $defs / BriteHierarchyAdded value: +{ + "description": "Bounded projection of a KEGG BRITE ``A``/``B``/``C``/… tree.\n\nBRITE entries are hierarchies, not flat-file entries: ``/get/br:ko00001`` is\n4.3 MB / 65,337 lines and ``/get/br:hsa00001`` is 6.8 MB. Returning the raw\ntext would overflow the context window of the model this feeds, so the\ndefault projection keeps the navigational skeleton (per-level line counts +\nthe top two levels' labels) and drops the leaves. ``raw_content`` is\npopulated only for ``detail_level=\"full\"``, and is itself capped.", + "properties": { + "columns": { + "items": { + "type": "string" + }, + "title": "Columns", + "type": "array" + }, + "deepest_level": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Deepest Level" + }, + "detail_level": { + "default": "summary", + "title": "Detail Level", + "type": "string" + }, + "entry": { + "title": "Entry", + "type": "string" + }, + "labels": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Labels", + "type": "object" + }, + "labels_truncated": { + "items": { + "type": "string" + }, + "title": "Labels Truncated", + "type": "array" + }, + "last_updated": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Updated" + }, + "level_counts": { + "additionalProperties": { + "type": "integer" + }, + "title": "Level Counts", + "type": "object" + }, + "raw_content": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Raw Content" + }, + "raw_truncated": { + "default": false, + "title": "Raw Truncated", + "type": "boolean" + }, + "total_lines": { + "default": 0, + "title": "Total Lines", + "type": "integer" + } + }, + "required": [ + "entry" + ], + "title": "BriteHierarchy", + "type": "object" +} - removed
Output schema / $defs / BriteInfoRemoved value: -{ - "properties": { - "dblinks": { - "anyOf": [ - { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Dblinks" - }, - "definition": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Definition" - }, - "entry": { - "title": "Entry", - "type": "string" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "type": "array" - } - ], - "title": "Name" - }, - "raw_content": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Raw Content" - } - }, - "required": [ - "entry", - "name" - ], - "title": "BriteInfo", - "type": "object" -} - removed
Output schema / $defs / EntrySummaryRemoved value: -{ - "description": "Compact projection of a KEGG flat-file entry.\n\nReturned from `get_*_info` tools when `detail_level=\"summary\"` (the default) to\nkeep response size small. Counts replace long linked-entity lists; long text\nblocks (sequences, comments, raw content) and per-entry xref/reference dumps\nare omitted. Request `detail_level=\"full\"` for the complete entry.", - "properties": { - "cls": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Cls" - }, - "counts": { - "additionalProperties": { - "type": "integer" - }, - "title": "Counts", - "type": "object" - }, - "dblinks_sample": { - "additionalProperties": { - "items": { - "type": "string" - }, - "type": "array" - }, - "title": "Dblinks Sample", - "type": "object" - }, - "definition": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Definition" - }, - "description": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Description" - }, - "detail_level": { - "default": "summary", - "title": "Detail Level", - "type": "string" - }, - "entry": { - "title": "Entry", - "type": "string" - }, - "entry_type": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Entry Type" - }, - "equation": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Equation" - }, - "exact_mass": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Exact Mass" - }, - "formula": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Formula" - }, - "mol_weight": { - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Mol Weight" - }, - "name": { - "anyOf": [ - { - "type": "string" - }, - { - "items": { - "type": "string" - }, - "type": "array" - } - ], - "default": "", - "title": "Name" - }, - "organism": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Organism" - } - }, - "required": [ - "entry" - ], - "title": "EntrySummary", - "type": "object" -} - changed
Output schema / properties / result / anyOfPrevious value: -[ - { - "$ref": "#/$defs/BriteInfo" - }, - { - "$ref": "#/$defs/EntrySummary" - }, - { - "$ref": "#/$defs/ErrorResult" - } -]New value: +[ + { + "$ref": "#/$defs/BriteHierarchy" + }, + { + "$ref": "#/$defs/ErrorResult" + } +]
- Changed
list_organisms3 fields changed- added
Input schema / properties / max_resultsAdded value: +{ + "default": 100, + "title": "Max Results", + "type": "integer" +} - added
Input schema / properties / queryAdded value: +{ + "default": "", + "title": "Query", + "type": "string" +} - added
Output schema / $defs / ListResult / properties / truncatedAdded value: +{ + "default": false, + "title": "Truncated", + "type": "boolean" +}
34 tool updates
v0.1.0- First observed
batch_entry_lookup - First observed
convert_identifiers - First observed
find_related_entries - First observed
get_brite_info - First observed
get_compound_info - First observed
get_compound_reactions - First observed
get_database_info - First observed
get_disease_info - First observed
get_drug_info - First observed
get_drug_interactions - First observed
get_enzyme_info - First observed
get_gene_info - First observed
get_gene_orthologs - First observed
get_glycan_info - First observed
get_ko_info - First observed
get_module_info - First observed
get_pathway_compounds - First observed
get_pathway_genes - First observed
get_pathway_info - First observed
get_pathway_reactions - First observed
get_reaction_info - First observed
list_organisms - First observed
render_pathway_ascii - First observed
search_brite - First observed
search_compounds - First observed
search_diseases - First observed
search_drugs - First observed
search_enzymes - First observed
search_genes - First observed
search_glycans - First observed
search_ko_entries - First observed
search_modules - First observed
search_pathways - First observed
search_reactions
TDQS
Scored across 35 tools
Most tools map cleanly to a specific KEGG entry type plus action, so an agent can generally distinguish search_compounds, search_drugs, get_pathway_genes, get_pathway_reactions, etc. Minor overlap exists between find_related_entries and convert_identifiers/get_gene_orthologs, and between draw_pathway_map and render_pathway_ascii in the sense of pathway visualization, but the descriptions clarify output modes.
The set is overwhelmingly snake_case and follows predictable patterns such as search_<db>, get_<db>_info, get_pathway_<subresource>, and list_organisms. A few one-off verbs (draw_pathway_map, render_pathway_ascii, batch_entry_lookup, convert_identifiers) are semantically appropriate but keep it from being perfectly uniform.
KEGG is a very broad domain with many entry types, so 35 tools is defensible, but it is still heavy for an agent to navigate. Several search/get pairs could potentially be consolidated or generalized, making the surface borderline rather than well-scoped.
The server covers the major KEGG databases with search, retrieval, linking, batch lookup, identifier conversion, and pathway visualization. Gaps are modest: there is no dedicated genome-info retrieval beyond list_organisms/get_database_info, and cross-database traversal relies heavily on find_related_entries rather than more specific linked-resource tools.
Maintenance
Related MCP Connectors
KEGG REST MCP — Kyoto Encyclopedia of Genes and Genomes.
MCP server for querying BrainKB, a knowledge base for neuroscience knowledge graphs.
WikiPathways MCP — open community pathway database.
An MCP server that provides tools to discover and retrieve podcast episodes transcripts.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that provides tools for querying the PubChem database for detailed information on chemical compounds, substances, bioassays, and molecular properties. It enables users to search by name, structure, or identifier to retrieve chemical classifications and cross-references through natural language.-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides access to the Kyoto Encyclopedia of Genes and Genomes (KEGG) database, offering 30 tools for searching and analyzing biological data like pathways, genes, and compounds. It supports integration with LangChain and Ollama to enable LLMs to interact with comprehensive genomic and chemical datasets.8MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that exposes the KEGG REST API — pathways, genes, compounds, reactions, enzymes, diseases, drugs, modules, orthology, glycans, and BRITE hierarchies, with cross-database linking. Provides 34 tools and 8 resource templates.MIT
- AlicenseAqualityDmaintenanceMCP server for searching Kerbal Space Program mods from the CKAN index, with tools for mod search, recommendations, parts listing, and CKAN download cache integration.81MIT