Skip to main content
Glama
kegg-mcp-server

kegg-mcp-server

by Lucas-Servi

get_compound_reactions

Read-onlyIdempotent

Retrieve all KEGG reactions that involve a given compound ID, optionally limiting results (max 100), to identify its metabolic reaction associations.

Instructions

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).

Input Schema

NameRequiredDescriptionDefault
compound_idYes
max_resultsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv0.5.0
    • addedInput schema / properties / max_results
      Added value: +{
      +  "default": 100,
      +  "title": "Max Results",
      +  "type": "integer"
      +}
    • changedOutput 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
  2. First observedv0.1.0

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.