Skip to main content
Glama

CovaSyn Chemistry Tools

covnmr_purity

qNMR purity with an internal standard (USP <761>), with an uncertainty budget. Needs standard_protons, analyte_protons, analyte_mw (or analyte_formula), and standard_conc_mm unless the masses are given.

NAME THE TWO SIGNALS: `standard_peak_ppm` (older name `reference_peak_ppm`)
and `analyte_peak_ppm`. A named signal that is not found within
`selection_tolerance_ppm` (0.3) is an error, never the nearest line
instead; 0.0 is a real shift (TMS). The response's `selection` block names
the regions integrated, so the number can be checked against the spectrum.

Optional `analyte_signals`, e.g. [{"ppm": 3.80, "protons": 3}, {"ppm": 1.20,
"protons": 6}], quantifies the analyte on each listed signal and reports
the signals that disagree beyond the integration uncertainty -- the usual
sign of an overlapping impurity. Give `sample_mass_mg` and
`sample_volume_ml` for a mass-based purity. `smiles` is accepted for older
callers and not used.

Traceable purity (USP <761> budget): give `analyte_mass_mg`,
`standard_mass_mg` and `standard_purity`. `purity_traceable` then holds the
mass-fraction purity, a row per input in `budget` (value, uncertainty,
share of the variance), the dominant source, and the expanded uncertainty
with its coverage factor. Inputs you gave no uncertainty for are filled
with stated defaults and listed in `assumed`. Name the standard with
`internal_standard` (e.g. "maleic_acid", "dss", "tms") to take its molar
mass and signals from the table; an unknown name is an error
(`unknown_internal_standard`), and a standard whose signals overlap an
analyte region is refused (`internal_standard_overlap`).

`system_suitability` always checks S/N, baseline, phase and relaxation;
give `t1_longest_s` and `relaxation_delay_s` (else read from the file) or
the relaxation test stays untested. A failed check is listed; it does not
withhold the number. `audit=true` adds `audit_record`, a hash-chained
record of inputs, steps and result (no electronic signature); it names
your file as `display_name`, else the file name in the URL. For ERETIC,
PULCON or a purity from integrals you already have, use
covnmr_qnmr_advanced.

Input Schema

NameRequiredDescriptionDefault
pathYes
auditNo
smilesNo
api_keyNo
nucleusNo
solventNoCDCl3
analyte_mwNo
min_sn_qnmrNo
standard_mwNo
display_nameNo
t1_longest_sNo
u_analyte_mwNo
u_balance_mgNo
u_standard_mwNo
sample_mass_mgNo
analyte_formulaNo
analyte_mass_mgNo
analyte_protonsNo
analyte_signalsNo
coverage_factorNo
standard_purityNo
analyte_peak_ppmNo
confidence_levelNo
sample_volume_mlNo
standard_conc_mmNo
standard_formulaNo
standard_mass_mgNo
standard_protonsNo
internal_standardNo
standard_peak_ppmNo
standard_purity_kNo
u_analyte_mass_mgNo
u_analyte_protonsNo
u_integration_relNo
u_standard_purityNo
acquisition_time_sNo
reference_peak_ppmNo
relaxation_delay_sNo
u_standard_mass_mgNo
u_standard_protonsNo
selection_tolerance_ppmNo
integral_ratio_replicatesNo
expanded_u_standard_purityNo

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed56 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_formula
      Added value: +{
      +  "default": "",
      +  "title": "Analyte Formula",
      +  "type": "string"
      +}
    • 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"
      +  }
      +]
    • addedInput schema / properties / analyte_mw / default
      Added value: +null
    • removedInput schema / properties / analyte_mw / type
      Removed value: -"number"
    • addedInput schema / properties / analyte_peak_ppm / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / analyte_peak_ppm / default
      Previous value: -0New value: +null
    • removedInput schema / properties / analyte_peak_ppm / type
      Removed value: -"number"
    • 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 / 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 / display_name
      Added value: +{
      +  "default": "",
      +  "title": "Display Name",
      +  "type": "string"
      +}
    • 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_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 / nucleus
      Added value: +{
      +  "default": "",
      +  "title": "Nucleus",
      +  "type": "string"
      +}
    • addedInput schema / properties / reference_peak_ppm / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / reference_peak_ppm / default
      Previous value: -0New value: +null
    • removedInput schema / properties / reference_peak_ppm / 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
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Sample Mass Mg"
      +}
    • addedInput schema / properties / sample_volume_ml
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Sample Volume Ml"
      +}
    • addedInput schema / properties / selection_tolerance_ppm
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "Selection Tolerance Ppm"
      +}
    • addedInput schema / properties / smiles / default
      Added value: +""
    • addedInput schema / properties / standard_conc_mm / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / standard_conc_mm / default
      Added 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_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 / anyOf
      Added value: +[
      +  {
      +    "type": "number"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / standard_peak_ppm / default
      Previous value: -0New value: +null
    • removedInput schema / properties / standard_peak_ppm / type
      Removed value: -"number"
    • addedInput schema / properties / standard_protons / anyOf
      Added value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / standard_protons / default
      Added 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: -1New 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_integration_rel
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "title": "U Integration 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"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "path",
      -  "smiles",
      -  "standard_conc_mm",
      -  "standard_protons",
      -  "analyte_protons",
      -  "analyte_mw"
      -]New value: +[
      +  "path"
      +]
  2. First observed

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses hard error conditions (signal not found, unknown_internal_standard, internal_standard_overlap), states that system_suitability failures are reported but do not withhold the number, and warns that audit_record is hash-chained but not an electronic signature. What it omits is operational context — whether api_key implies a remote/paid service, and what auth or rate limits apply.

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?

Roughly 350 words, but nearly all of it is load-bearing for a 43-parameter tool, and the minimum viable call (path + two named peaks + standard quantity) is front-loaded. Some param lists are prose-dense and could be tightened, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 no exposition; the description still points at the key response blocks (selection, budget, assumed, purity_traceable, audit_record) so the agent knows how to verify results. For a complex multi-mode tool it covers each mode — basic, multi-signal, mass-based, traceable, audit — and names when another tool applies.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 43 parameters, so the description must compensate. It explains the critical workflow parameters well (standard/analyte protons, mw/formula, conc, peak ppm names, selection_tolerance_ppm default 0.3, analyte_signals shape), but roughly half the surface is untouched: nucleus, solvent, min_sn_qnmr, acquisition_time_s, integral_ratio_replicates, coverage_factor, confidence_level, standard_purity_k, expanded_u_standard_purity, and the ten u_* uncertainty inputs are only obliquely implied by the 'assumed defaults' sentence.

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?

Opens with a specific verb+resource: qNMR purity by internal standard per USP <761> with an uncertainty budget. It explicitly separates itself from the sibling covnmr_qnmr_advanced (ERETIC, PULCON, pre-computed integrals), 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 Guidelines5/5

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

The description names the alternative tool and the exact condition that selects it. It also gives conditional guidance: give sample_mass_mg/sample_volume_ml for mass-based purity, give the three masses plus standard_purity for a traceable budget, and use covnmr_qnmr_advanced otherwise.

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.