Skip to main content
Glama

CovaSyn Chemistry Tools

covnmr_qnmr_advanced

qNMR from integrals you already have: ERETIC, PULCON, a full uncertainty budget, or a traceable purity. For an internal-standard purity from a spectrum file use covnmr_purity.

`method` selects which arguments are read; a missing required one is an
error that names it (`missing`), never a silent default:
* "eretic" (electronic reference): `analyte_integral`, `eretic_integral`,
  `eretic_response_factor`, `analyte_protons`, `analyte_mw`. Give
  `sample_mass_mg` for `weight_percent`; without it `weight_percent` is
  null and `weight_percent_status` says "not_computed".
* "pulcon" (reference in a separate tube): `analyte_integral`,
  `analyte_protons`, `analyte_mw`, `reference_integral`,
  `reference_protons`, `reference_conc_mm`; optional T1s, recycle delay and
  the two fields. Check `t1_correction_factor` -- that is where an
  over-short recycle delay shows up.
* "uncertainty" (GUM budget of an internal-standard result):
  `analyte_integral`, `standard_integral`, `standard_conc_mm`,
  `standard_protons`, `analyte_protons`, `analyte_mw`; optional
  `standard_purity` and the u_* inputs. Returns `components`,
  `dominant_source`, `combined_u_rel` and the k=2 expanded uncertainty;
  `n_sources_default_constant` counts the sources you did not supply.
* "purity" (USP <761> mass-fraction purity, no spectrum):
  `analyte_mass_mg`, `standard_mass_mg`, `standard_purity`,
  `analyte_protons`, `standard_protons`; the ratio from
  `analyte_integral` + `standard_integral`, `integral_ratio` or
  `integral_ratio_replicates`; the molar masses from `analyte_mw` /
  `analyte_formula` and `standard_mw` / `standard_formula` /
  `internal_standard`. Returns the same budget as covnmr_purity's
  `purity_traceable`, at top level, plus `system_suitability` (from your
  `sn_standard`, `sn_analyte`, `relaxation_delay_s`, `t1_longest_s`) and
  `internal_standard_check` (from the shifts you state; an overlap is the
  error `internal_standard_overlap`). `audit=true` adds `audit_record`.

Each method returns a different key set; `method` is echoed back.

Input Schema

NameRequiredDescriptionDefault
auditNo
methodYes
api_keyNo
solventNo
analyte_mwNo
sn_analyteNo
min_sn_qnmrNo
sn_standardNo
standard_mwNo
u_volume_mlNo
analyte_t1_sNo
t1_longest_sNo
u_analyte_mwNo
u_balance_mgNo
u_standard_mwNo
u_weighing_mgNo
integral_ratioNo
reference_t1_sNo
sample_mass_mgNo
u_baseline_relNo
analyte_formulaNo
analyte_mass_mgNo
analyte_protonsNo
coverage_factorNo
eretic_integralNo
recycle_delay_sNo
standard_purityNo
u_lineshape_relNo
analyte_integralNo
analyte_peak_ppmNo
confidence_levelNo
sample_volume_mlNo
standard_conc_mmNo
standard_formulaNo
standard_mass_mgNo
standard_protonsNo
analyte_field_mhzNo
internal_standardNo
reference_conc_mmNo
reference_protonsNo
standard_integralNo
standard_peak_ppmNo
standard_purity_kNo
u_analyte_mass_mgNo
u_analyte_protonsNo
u_integration_relNo
u_standard_purityNo
u_temperature_relNo
acquisition_time_sNo
analyte_ranges_ppmNo
reference_integralNo
relaxation_delay_sNo
u_standard_mass_mgNo
u_standard_protonsNo
analyte_signals_ppmNo
reference_field_mhzNo
u_t1_saturation_relNo
overlap_tolerance_ppmNo
eretic_response_factorNo
integral_ratio_replicatesNo
expanded_u_standard_purityNo

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed98 schema fields changed
    • addedInput schema / properties / acquisition_time_s
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Acquisition Time S"
      +}
    • addedInput schema / properties / analyte_field_mhz / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / analyte_field_mhz / default
      Previous value: -400New value: +null
    • removedInput schema / properties / analyte_field_mhz / type
      Removed value: -"number"
    • addedInput schema / properties / analyte_formula
      Added value: +{
      +  "default": "",
      +  "title": "Analyte Formula",
      +  "type": "string"
      +}
    • addedInput schema / properties / analyte_integral / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / analyte_integral / default
      Added value: +null
    • removedInput schema / properties / analyte_integral / type
      Removed value: -"number"
    • addedInput schema / properties / analyte_mass_mg
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Analyte Mass Mg"
      +}
    • addedInput schema / properties / analyte_mw / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / analyte_mw / default
      Previous value: -0New value: +null
    • removedInput schema / properties / analyte_mw / type
      Removed value: -"number"
    • addedInput schema / properties / analyte_peak_ppm
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Analyte Peak Ppm"
      +}
    • addedInput schema / properties / analyte_protons / anyOf
      Added value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / analyte_protons / default
      Added value: +null
    • removedInput schema / properties / analyte_protons / type
      Removed value: -"integer"
    • addedInput schema / properties / analyte_ranges_ppm
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "items": {
      +          "type": "number"
      +        },
      +        "type": "array"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Analyte Ranges Ppm"
      +}
    • addedInput schema / properties / analyte_signals_ppm
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "number"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Analyte Signals Ppm"
      +}
    • addedInput schema / properties / analyte_t1_s / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / analyte_t1_s / default
      Previous value: -1New value: +null
    • removedInput schema / properties / analyte_t1_s / type
      Removed value: -"number"
    • addedInput schema / properties / audit
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "boolean"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Audit"
      +}
    • addedInput schema / properties / confidence_level
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Confidence Level"
      +}
    • addedInput schema / properties / coverage_factor
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Coverage Factor"
      +}
    • addedInput schema / properties / eretic_integral / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / eretic_integral / default
      Previous value: -0New value: +null
    • removedInput schema / properties / eretic_integral / type
      Removed value: -"number"
    • addedInput schema / properties / eretic_response_factor / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / eretic_response_factor / default
      Previous value: -0New value: +null
    • removedInput schema / properties / eretic_response_factor / type
      Removed value: -"number"
    • addedInput schema / properties / expanded_u_standard_purity
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Expanded U Standard Purity"
      +}
    • addedInput schema / properties / integral_ratio
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Integral Ratio"
      +}
    • addedInput schema / properties / integral_ratio_replicates
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "number"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Integral Ratio Replicates"
      +}
    • addedInput schema / properties / internal_standard
      Added value: +{
      +  "default": "",
      +  "title": "Internal Standard",
      +  "type": "string"
      +}
    • addedInput schema / properties / min_sn_qnmr
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Min Sn Qnmr"
      +}
    • addedInput schema / properties / overlap_tolerance_ppm
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Overlap Tolerance Ppm"
      +}
    • addedInput schema / properties / recycle_delay_s / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / recycle_delay_s / default
      Previous value: -30New value: +null
    • removedInput schema / properties / recycle_delay_s / type
      Removed value: -"number"
    • addedInput schema / properties / reference_conc_mm / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / reference_conc_mm / default
      Previous value: -0New value: +null
    • removedInput schema / properties / reference_conc_mm / type
      Removed value: -"number"
    • addedInput schema / properties / reference_field_mhz / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / reference_field_mhz / default
      Previous value: -400New value: +null
    • removedInput schema / properties / reference_field_mhz / type
      Removed value: -"number"
    • addedInput schema / properties / reference_integral / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / reference_integral / default
      Previous value: -0New value: +null
    • removedInput schema / properties / reference_integral / type
      Removed value: -"number"
    • addedInput schema / properties / reference_protons / anyOf
      Added value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / reference_protons / default
      Previous value: -1New value: +null
    • removedInput schema / properties / reference_protons / type
      Removed value: -"integer"
    • addedInput schema / properties / reference_t1_s / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / reference_t1_s / default
      Previous value: -1New value: +null
    • removedInput schema / properties / reference_t1_s / type
      Removed value: -"number"
    • addedInput schema / properties / relaxation_delay_s
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Relaxation Delay S"
      +}
    • addedInput schema / properties / sample_mass_mg / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / sample_mass_mg / default
      Previous value: -10New value: +null
    • removedInput schema / properties / sample_mass_mg / type
      Removed value: -"number"
    • addedInput schema / properties / sample_volume_ml / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / sample_volume_ml / default
      Previous value: -0.6New value: +null
    • removedInput schema / properties / sample_volume_ml / type
      Removed value: -"number"
    • addedInput schema / properties / sn_analyte
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Sn Analyte"
      +}
    • addedInput schema / properties / sn_standard
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Sn Standard"
      +}
    • addedInput schema / properties / solvent
      Added value: +{
      +  "default": "",
      +  "title": "Solvent",
      +  "type": "string"
      +}
    • addedInput schema / properties / standard_conc_mm / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / standard_conc_mm / default
      Previous value: -0New value: +null
    • removedInput schema / properties / standard_conc_mm / type
      Removed value: -"number"
    • addedInput schema / properties / standard_formula
      Added value: +{
      +  "default": "",
      +  "title": "Standard Formula",
      +  "type": "string"
      +}
    • addedInput schema / properties / standard_integral / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / standard_integral / default
      Previous value: -0New value: +null
    • removedInput schema / properties / standard_integral / type
      Removed value: -"number"
    • addedInput schema / properties / standard_mass_mg
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Standard Mass Mg"
      +}
    • addedInput schema / properties / standard_mw
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Standard Mw"
      +}
    • addedInput schema / properties / standard_peak_ppm
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Standard Peak Ppm"
      +}
    • addedInput schema / properties / standard_protons / anyOf
      Added value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / standard_protons / default
      Previous value: -1New value: +null
    • removedInput schema / properties / standard_protons / type
      Removed value: -"integer"
    • addedInput schema / properties / standard_purity / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / standard_purity / default
      Previous value: -0.999New value: +null
    • removedInput schema / properties / standard_purity / type
      Removed value: -"number"
    • addedInput schema / properties / standard_purity_k
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Standard Purity K"
      +}
    • addedInput schema / properties / t1_longest_s
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "T1 Longest S"
      +}
    • addedInput schema / properties / u_analyte_mass_mg
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "U Analyte Mass Mg"
      +}
    • addedInput schema / properties / u_analyte_mw
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "U Analyte Mw"
      +}
    • addedInput schema / properties / u_analyte_protons
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "U Analyte Protons"
      +}
    • addedInput schema / properties / u_balance_mg
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "U Balance Mg"
      +}
    • addedInput schema / properties / u_baseline_rel
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "U Baseline Rel"
      +}
    • addedInput schema / properties / u_integration_rel
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "U Integration Rel"
      +}
    • addedInput schema / properties / u_lineshape_rel
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "U Lineshape Rel"
      +}
    • addedInput schema / properties / u_standard_mass_mg
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "U Standard Mass Mg"
      +}
    • addedInput schema / properties / u_standard_mw
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "U Standard Mw"
      +}
    • addedInput schema / properties / u_standard_protons
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "U Standard Protons"
      +}
    • addedInput schema / properties / u_standard_purity
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "U Standard Purity"
      +}
    • addedInput schema / properties / u_t1_saturation_rel
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "U T1 Saturation Rel"
      +}
    • addedInput schema / properties / u_temperature_rel
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "U Temperature Rel"
      +}
    • addedInput schema / properties / u_volume_ml
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "U Volume Ml"
      +}
    • addedInput schema / properties / u_weighing_mg
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "U Weighing Mg"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "method",
      -  "analyte_integral",
      -  "analyte_protons"
      -]New value: +[
      +  "method"
      +]
  2. First observed

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and largely does: it states that a missing required argument raises a named error rather than silently defaulting, that weight_percent is null with weight_percent_status='not_computed' when sample_mass_mg is absent, that audit=true adds audit_record, and that each method returns a different key set. It does not mention api_key/auth requirements or whether calls are side-effect free, which is the remaining gap for a computational tool with no annotations.

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?

Long but well structured: a one-line summary, an explicit sibling redirect, then a bulleted per-method block keyed on the `method` value, which is the natural reading order for a dispatcher tool. Almost every clause carries information (the t1_correction_factor warning is a genuine tip), though 'the two fields' and a few unelaborated key names cost clarity.

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?

For a 61-parameter polymorphic tool with no annotations, the description covers the critical dispatch information — which parameters each method reads, what error semantics to expect, and which result keys differ — and the output schema handles return shapes. It is not fully complete because roughly a third of the parameters (uncertainty-budget knobs like coverage_factor and confidence_level, overlap_tolerance_ppm, solvent, api_key) are never explained, leaving the agent to guess when to supply them.

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% across 61 parameters, so the description must compensate, and it does for the core: it enumerates the exact required inputs per method plus notable optionals (sample_mass_mg, T1s, recycle delay, standard_purity, the u_* inputs, integral_ratio_replicates). A substantial tail remains undocumented — confidence_level, coverage_factor, overlap_tolerance_ppm, min_sn_qnmr, solvent, api_key, analyte_peak_ppm/standard_peak_ppm — and the phrase 'the two fields' is ambiguous where it should say analyte_field_mhz/reference_field_mhz.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first line states a precise verb and resource — quantitative NMR computed from integrals the caller already has — and enumerates the four supported calculation modes (ERETIC, PULCON, GUM uncertainty, USP <761> purity). It explicitly names the sibling it is not (covnmr_purity for internal-standard purity from a spectrum file), so an agent can route 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The sibling boundary is stated explicitly ('For an internal-standard purity from a spectrum file use covnmr_purity'), and each parenthetical gloss ('electronic reference' vs 'reference in a separate tube') hints at when a method fits. It stops short of explicit when-not guidance for each mode (e.g. no stated condition that rules out ERETIC in favour of PULCON), so it is clear context rather than a full decision rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.