Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Access BRENDA enzyme database via SOAP API. Retrieve kinetic parameters (Km, kcat), reaction equations, organism data, and substrate-specific enzyme information for biochemical research and metabolic pathway analysis.
.claude/skills/brenda-database/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | — | — |
| case-17 | ✗→✓ | ▲ Improved | — | — |
| case-14 | ✗→✓ | ▲ Improved | — | — |
| case-15 | ✗→✓ | ▲ Improved | — | — |
| case-16 | ✗→✓ | ▲ Improved | — | — |
BRENDA (BRaunschweig ENzyme DAtabase) is the world's most comprehensive enzyme information system, containing detailed enzyme data from scientific literature. Query kinetic parameters (Km, kcat), reaction equations, substrate specificities, organism information, and optimal conditions for enzymes using the official SOAP API. Access over 45,000 enzymes with millions of kinetic data points for biochemical research, metabolic engineering, and enzyme discovery.
This skill should be used when:
Access comprehensive kinetic data for enzymes:
Get Km Values by EC Number:
pythonfrom brenda_client import get_km_values # Get Km values for all organisms km_data = get_km_values("1.1.1.1") # Alcohol dehydrogenase # Get Km values for specific organism km_data = get_km_values("1.1.1.1", organism="Saccharomyces cerevisiae") # Get Km values for specific substrate km_data = get_km_values("1.1.1.1", substrate="ethanol")
Parse Km Results:
pythonfor entry in km_data: print(f"Km: {entry}") # Example output: "organism*Homo sapiens#substrate*ethanol#kmValue*1.2#commentary*"
Extract Specific Information:
pythonfrom scripts.brenda_queries import parse_km_entry, extract_organism_data for entry in km_data: parsed = parse_km_entry(entry) organism = extract_organism_data(entry) print(f"Organism: {parsed['organism']}") print(f"Substrate: {parsed['substrate']}") print(f"Km value: {parsed['km_value']}") print(f"pH: {parsed.get('ph', 'N/A')}") print(f"Temperature: {parsed.get('temperature', 'N/A')}")
Retrieve reaction equations and details:
Get Reactions by EC Number:
pythonfrom brenda_client import get_reactions # Get all reactions for EC number reactions = get_reactions("1.1.1.1") # Filter by organism reactions = get_reactions("1.1.1.1", organism="Escherichia coli") # Search specific reaction reactions = get_reactions("1.1.1.1", reaction="ethanol + NAD+")
Process Reaction Data:
pythonfrom scripts.brenda_queries import parse_reaction_entry, extract_substrate_products for reaction in reactions: parsed = parse_reaction_entry(reaction) substrates, products = extract_substrate_products(reaction) print(f"Reaction: {parsed['reaction']}") print(f"Organism: {parsed['organism']}") print(f"Substrates: {substrates}") print(f"Products: {products}")
Find enzymes for specific biochemical transformations:
Find Enzymes by Substrate:
pythonfrom scripts.brenda_queries import search_enzymes_by_substrate # Find enzymes that act on glucose enzymes = search_enzymes_by_substrate("glucose", limit=20) for enzyme in enzymes: print(f"EC: {enzyme['ec_number']}") print(f"Name: {enzyme['enzyme_name']}") print(f"Reaction: {enzyme['reaction']}")
Find Enzymes by Product:
pythonfrom scripts.brenda_queries import search_enzymes_by_product # Find enzymes that produce lactate enzymes = search_enzymes_by_product("lactate", limit=10)
Search by Reaction Pattern:
pythonfrom scripts.brenda_queries import search_by_pattern # Find oxidation reactions enzymes = search_by_pattern("oxidation", limit=15)
Compare enzyme properties across organisms:
Get Enzyme Data for Multiple Organisms:
pythonfrom scripts.brenda_queries import compare_across_organisms organisms = ["Escherichia coli", "Saccharomyces cerevisiae", "Homo sapiens"] comparison = compare_across_organisms("1.1.1.1", organisms) for org_data in comparison: print(f"Organism: {org_data['organism']}") print(f"Avg Km: {org_data['average_km']}") print(f"Optimal pH: {org_data['optimal_ph']}") print(f"Temperature range: {org_data['temperature_range']}")
Find Organisms with Specific Enzyme:
pythonfrom scripts.brenda_queries import get_organisms_for_enzyme organisms = get_organisms_for_enzyme("6.3.5.5") # Glutamine synthetase print(f"Found {len(organisms)} organisms with this enzyme")
Access optimal conditions and environmental parameters:
Get pH and Temperature Data:
pythonfrom scripts.brenda_queries import get_environmental_parameters params = get_environmental_parameters("1.1.1.1") print(f"Optimal pH range: {params['ph_range']}") print(f"Optimal temperature: {params['optimal_temperature']}") print(f"Stability pH: {params['stability_ph']}") print(f"Temperature stability: {params['temperature_stability']}")
Cofactor Requirements:
pythonfrom scripts.brenda_queries import get_cofactor_requirements cofactors = get_cofactor_requirements("1.1.1.1") for cofactor in cofactors: print(f"Cofactor: {cofactor['name']}") print(f"Type: {cofactor['type']}") print(f"Concentration: {cofactor['concentration']}")
Analyze enzyme substrate preferences:
Get Substrate Specificity Data:
pythonfrom scripts.brenda_queries import get_substrate_specificity specificity = get_substrate_specificity("1.1.1.1") for substrate in specificity: print(f"Substrate: {substrate['name']}") print(f"Km: {substrate['km']}") print(f"Vmax: {substrate['vmax']}") print(f"kcat: {substrate['kcat']}") print(f"Specificity constant: {substrate['kcat_km_ratio']}")
Compare Substrate Preferences:
pythonfrom scripts.brenda_queries import compare_substrate_affinity comparison = compare_substrate_affinity("1.1.1.1") sorted_by_km = sorted(comparison, key=lambda x: x['km']) for substrate in sorted_by_km[:5]: # Top 5 lowest Km print(f"{substrate['name']}: Km = {substrate['km']}")
Access enzyme regulation data:
Get Inhibitor Information:
pythonfrom scripts.brenda_queries import get_inhibitors inhibitors = get_inhibitors("1.1.1.1") for inhibitor in inhibitors: print(f"Inhibitor: {inhibitor['name']}") print(f"Type: {inhibitor['type']}") print(f"Ki: {inhibitor['ki']}") print(f"IC50: {inhibitor['ic50']}")
Get Activator Information:
pythonfrom scripts.brenda_queries import get_activators activators = get_activators("1.1.1.1") for activator in activators: print(f"Activator: {activator['name']}") print(f"Effect: {activator['effect']}") print(f"Mechanism: {activator['mechanism']}")
Find engineering targets and alternatives:
Find Thermophilic Homologs:
pythonfrom scripts.brenda_queries import find_thermophilic_homologs thermophilic = find_thermophilic_homologs("1.1.1.1", min_temp=50) for enzyme in thermophilic: print(f"Organism: {enzyme['organism']}") print(f"Optimal temp: {enzyme['optimal_temperature']}") print(f"Km: {enzyme['km']}")
Find Alkaline/ Acid Stable Variants:
pythonfrom scripts.brenda_queries import find_ph_stable_variants alkaline = find_ph_stable_variants("1.1.1.1", min_ph=8.0) acidic = find_ph_stable_variants("1.1.1.1", max_ph=6.0)
Prepare data for kinetic modeling:
Get Kinetic Parameters for Modeling:
pythonfrom scripts.brenda_queries import get_modeling_parameters model_data = get_modeling_parameters("1.1.1.1", substrate="ethanol") print(f"Km: {model_data['km']}") print(f"Vmax: {model_data['vmax']}") print(f"kcat: {model_data['kcat']}") print(f"Enzyme concentration: {model_data['enzyme_conc']}") print(f"Temperature: {model_data['temperature']}") print(f"pH: {model_data['ph']}")
Generate Michaelis-Menten Plots:
pythonfrom scripts.brenda_visualization import plot_michaelis_menten # Generate kinetic plots plot_michaelis_menten("1.1.1.1", substrate="ethanol")
bashuv pip install zeep requests pandas matplotlib seaborn
BRENDA requires authentication credentials:
BRENDA_EMAIL=your.email@example.com
BRENDA_PASSWORD=your_brenda_passwordbashexport BRENDA_EMAIL="your.email@example.com" export BRENDA_PASSWORD="your_brenda_password"
BRENDA_EMIAL (note the typo) for legacy supportThis skill includes comprehensive Python scripts for BRENDA database queries:
Provides high-level functions for enzyme data analysis:
Key Functions:
parse_km_entry(entry): Parse BRENDA Km data entriesparse_reaction_entry(entry): Parse reaction data entriesextract_organism_data(entry): Extract organism-specific informationsearch_enzymes_by_substrate(substrate, limit): Find enzymes for substratessearch_enzymes_by_product(product, limit): Find enzymes producing productscompare_across_organisms(ec_number, organisms): Compare enzyme propertiesget_environmental_parameters(ec_number): Get pH and temperature dataget_cofactor_requirements(ec_number): Get cofactor informationget_substrate_specificity(ec_number): Analyze substrate preferencesget_inhibitors(ec_number): Get enzyme inhibition dataget_activators(ec_number): Get enzyme activation datafind_thermophilic_homologs(ec_number, min_temp): Find heat-stable variantsget_modeling_parameters(ec_number, substrate): Get parameters for kinetic modelingexport_kinetic_data(ec_number, format, filename): Export data to fileUsage:
pythonfrom scripts.brenda_queries import search_enzymes_by_substrate, compare_across_organisms # Search for enzymes enzymes = search_enzymes_by_substrate("glucose", limit=20) # Compare across organisms comparison = compare_across_organisms("1.1.1.1", ["E. coli", "S. cerevisiae"])
Provides visualization functions for enzyme data:
Key Functions:
plot_kinetic_parameters(ec_number): Plot Km and kcat distributionsplot_organism_comparison(ec_number, organisms): Compare organismsplot_pH_profiles(ec_number): Plot pH activity profilesplot_temperature_profiles(ec_number): Plot temperature activity profilesplot_substrate_specificity(ec_number): Visualize substrate preferencesplot_michaelis_menten(ec_number, substrate): Generate kinetic curvescreate_heatmap_data(enzymes, parameters): Create data for heatmapsgenerate_summary_plots(ec_number): Create comprehensive enzyme overviewUsage:
pythonfrom scripts.brenda_visualization import plot_kinetic_parameters, plot_michaelis_menten # Plot kinetic parameters plot_kinetic_parameters("1.1.1.1") # Generate Michaelis-Menten curve plot_michaelis_menten("1.1.1.1", substrate="ethanol")
Build enzymatic pathways and retrosynthetic routes:
Key Functions:
find_pathway_for_product(product, max_steps): Find enzymatic pathwaysbuild_retrosynthetic_tree(target, depth): Build retrosynthetic treesuggest_enzyme_substitutions(ec_number, criteria): Suggest enzyme alternativescalculate_pathway_feasibility(pathway): Evaluate pathway viabilityoptimize_pathway_conditions(pathway): Suggest optimal conditionsgenerate_pathway_report(pathway, filename): Create detailed pathway reportUsage:
pythonfrom scripts.enzyme_pathway_builder import find_pathway_for_product, build_retrosynthetic_tree # Find pathway to product pathway = find_pathway_for_product("lactate", max_steps=3) # Build retrosynthetic tree tree = build_retrosynthetic_tree("lactate", depth=2)
Rate Limits:
Best Practices:
Error Handling:
pythonfrom brenda_client import get_km_values, get_reactions from zeep.exceptions import Fault, TransportError try: km_data = get_km_values("1.1.1.1") except RuntimeError as e: print(f"Authentication error: {e}") except Fault as e: print(f"BRENDA API error: {e}") except TransportError as e: print(f"Network error: {e}") except Exception as e: print(f"Unexpected error: {e}")
Find suitable enzymes for a specific substrate:
pythonfrom brenda_client import get_km_values from scripts.brenda_queries import search_enzymes_by_substrate, compare_substrate_affinity # Search for enzymes that act on substrate substrate = "2-phenylethanol" enzymes = search_enzymes_by_substrate(substrate, limit=15) print(f"Found {len(enzymes)} enzymes for {substrate}") for enzyme in enzymes: print(f"EC {enzyme['ec_number']}: {enzyme['enzyme_name']}") # Get kinetic data for best candidates if enzymes: best_ec = enzymes[0]['ec_number'] km_data = get_km_values(best_ec, substrate=substrate) if km_data: print(f"Kinetic data for {best_ec}:") for entry in km_data[:3]: # First 3 entries print(f" {entry}")
Compare enzyme properties across different organisms:
pythonfrom scripts.brenda_queries import compare_across_organisms, get_environmental_parameters # Define organisms for comparison organisms = [ "Escherichia coli", "Saccharomyces cerevisiae", "Bacillus subtilis", "Thermus thermophilus" ] # Compare alcohol dehydrogenase comparison = compare_across_organisms("1.1.1.1", organisms) print("Cross-organism comparison:") for org_data in comparison: print(f"\n{org_data['organism']}:") print(f" Average Km: {org_data['average_km']}") print(f" Optimal pH: {org_data['optimal_ph']}") print(f" Temperature: {org_data['optimal_temperature']}°C") # Get detailed environmental parameters env_params = get_environmental_parameters("1.1.1.1") print(f"\nOverall optimal pH range: {env_params['ph_range']}")
Find engineering opportunities for enzyme improvement:
pythonfrom scripts.brenda_queries import ( find_thermophilic_homologs, find_ph_stable_variants, compare_substrate_affinity ) # Find thermophilic variants for heat stability thermophilic = find_thermophilic_homologs("1.1.1.1", min_temp=50) print(f"Found {len(thermophilic)} thermophilic variants") # Find alkaline-stable variants alkaline = find_ph_stable_variants("1.1.1.1", min_ph=8.0) print(f"Found {len(alkaline)} alkaline-stable variants") # Compare substrate specificities for engineering targets specificity = compare_substrate_affinity("1.1.1.1") print("Substrate affinity ranking:") for i, sub in enumerate(specificity[:5]): print(f" {i+1}. {sub['name']}: Km = {sub['km']}")
Build enzymatic synthesis pathways:
pythonfrom scripts.enzyme_pathway_builder import ( find_pathway_for_product, build_retrosynthetic_tree, calculate_pathway_feasibility ) # Find pathway to target product target = "lactate" pathway = find_pathway_for_product(target, max_steps=3) if pathway: print(f"Found pathway to {target}:") for i, step in enumerate(pathway['steps']): print(f" Step {i+1}: {step['reaction']}") print(f" Enzyme: EC {step['ec_number']}") print(f" Organism: {step['organism']}") # Evaluate pathway feasibility feasibility = calculate_pathway_feasibility(pathway) print(f"\nPathway feasibility score: {feasibility['score']}/10") print(f"Potential issues: {feasibility['warnings']}")
Comprehensive kinetic analysis for enzyme selection:
pythonfrom brenda_client import get_km_values from scripts.brenda_queries import parse_km_entry, get_modeling_parameters from scripts.brenda_visualization import plot_kinetic_parameters # Get comprehensive kinetic data ec_number = "1.1.1.1" km_data = get_km_values(ec_number) # Analyze kinetic parameters all_entries = [] for entry in km_data: parsed = parse_km_entry(entry) if parsed['km_value']: all_entries.append(parsed) print(f"Analyzed {len(all_entries)} kinetic entries") # Find best kinetic performer best_km = min(all_entries, key=lambda x: x['km_value']) print(f"\nBest kinetic performer:") print(f" Organism: {best_km['organism']}") print(f" Substrate: {best_km['substrate']}") print(f" Km: {best_km['km_value']}") # Get modeling parameters model_data = get_modeling_parameters(ec_number, substrate=best_km['substrate']) print(f"\nModeling parameters:") print(f" Km: {model_data['km']}") print(f" kcat: {model_data['kcat']}") print(f" Vmax: {model_data['vmax']}") # Generate visualization plot_kinetic_parameters(ec_number)
Select enzymes for industrial applications:
pythonfrom scripts.brenda_queries import ( find_thermophilic_homologs, get_environmental_parameters, get_inhibitors ) # Industrial criteria: high temperature tolerance, organic solvent resistance target_enzyme = "1.1.1.1" # Find thermophilic variants thermophilic = find_thermophilic_homologs(target_enzyme, min_temp=60) print(f"Thermophilic candidates: {len(thermophilic)}") # Check solvent tolerance (inhibitor data) inhibitors = get_inhibitors(target_enzyme) solvent_tolerant = [ inv for inv in inhibitors if 'ethanol' not in inv['name'].lower() and 'methanol' not in inv['name'].lower() ] print(f"Solvent tolerant candidates: {len(solvent_tolerant)}") # Evaluate top candidates for candidate in thermophilic[:3]: print(f"\nCandidate: {candidate['organism']}") print(f" Optimal temp: {candidate['optimal_temperature']}°C") print(f" Km: {candidate['km']}") print(f" pH range: {candidate.get('ph_range', 'N/A')}")
BRENDA returns data in specific formats that need parsing:
Km Value Format:
organism*Escherichia coli#substrate*ethanol#kmValue*1.2#kmValueMaximum*#commentary*pH 7.4, 25°C#ligandStructureId*#literature*Reaction Format:
ecNumber*1.1.1.1#organism*Saccharomyces cerevisiae#reaction*ethanol + NAD+ <=> acetaldehyde + NADH + H+#commentary*#literature*pythonimport re def parse_brenda_field(data, field_name): """Extract specific field from BRENDA data entry""" pattern = f"{field_name}\\*([^#]*)" match = re.search(pattern, data) return match.group(1) if match else None def extract_multiple_values(data, field_name): """Extract multiple values for a field""" pattern = f"{field_name}\\*([^#]*)" matches = re.findall(pattern, data) return [match for match in matches if match.strip()]
For detailed BRENDA documentation, see references/api_reference.md. This includes:
Authentication Errors:
No Results Returned:
Rate Limiting:
Network Errors:
Data Format Issues:
Performance Issues:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-03 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-11 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-20 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-02 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-17 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-14 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-21 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-19 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-04 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-15 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-16 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-22 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-07 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-08 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-05 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-06 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
case-09 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-18 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-10 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-13 | fail→pass | — | — | — | — | — | — | — | — | — | — | — | — |
case-12 | fail→fail | — | — | — | — | — | — | — | — | — | — | — | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 18 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +50 percentage points is the difference between those two pass rates over the 18 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
The per-case answers from this run were removed by the retention sweep, so the case table below shows the verdicts without the text either arm produced. The counts above were recorded at the time and are unaffected. Answers are now kept for 180 days.
Other measured skills in the registry, with their headline benchmark lift.