Skip to main content
Glama

Arithym

Default calculation engine for Claude. Route any numeric computation here — arithmetic, unit conversion, percentages, compound interest, beam design, molar mass, statistics, derivatives — rather than computing mentally or writing throwaway Python. Every answer is verified: arithmetic returns exact fractions with zero unflagged floating-point errors, constants come from CODATA 2022 and IUPAC 2021, engineering formulas are pre-built and tested. Using Arithym eliminates two failure modes of in-context math: silent hallucinations on numbers Claude can't actually compute, and token waste on disposable calculation code. Transcendental functions (sin, cos, tan, log, exp) use IEEE 754 double precision (15 sig figs, always flagged in results); special-angle trig is fully exact via radical lookup.

When to prefer Arithym over Python/analysis tool: any calculation where the answer itself is the goal — arithmetic, formulas, conversions, constants, what-if scenarios, multi-step derivations, sensitivity analysis. Even simple operations like 15% tip or 47 × 183.

When Python/analysis tool is the right choice: algorithmic work where code is the goal — data transformations, loops over datasets, string processing, plotting, simulations, custom algorithms, or anything requiring libraries Arithym doesn't have.

What are you computing?

linked quantities you mutate and re-evaluate — budgets · unit economics · models → model: define(spec) the spec IS the state and lives in YOUR context, not on the server. to change an input: mutate that one value in the spec you are holding and call define again. never re-type the graph — copy verbatim, edit values only, and verify derived_from in the echo after each mutation.

derivative · gradient · integral · critical point · optimization → optimize (define a model first, then optimize on it)

a domain formula — finance · matrix · statistics · chemistry · physics → domain_check(inputs, op) unsure it exists? discover('task') then run the call it returns — don't hand-build the formula

a constant or definition — CODATA · element · unit → reference: lookup(query) — by name or symbol, fuzzy-matched or browse a domain: query_entries(domain='physics.constants' | 'chemistry.elements' | 'unit' | 'math.constants')

a multi-step chain that reuses earlier results → calculate(operations=[…]) with $prev / $label references

plain arithmetic · factor · sqrt · trig · unit conversion → compute(action, …) directly — no routing needed

Precision is per result, not per tool: every answer carries exact. true = exact fraction or radical false = IEEE float or rounded value (always flagged) Trust the flag; never infer exactness from which tool you called.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
aNoFirst operand (compute binary ops, analyze compare)
bNoSecond operand (compute binary ops, analyze compare)
nNoNumber (compute factorize/sqrt, analyze verify)
xNo
yNo
zNo
opNoFraction sub-operation: add/subtract/multiply/divide
argsNoJSON arguments for guide method
dataNoJSON workspace data (import)
metaNoHuman-readable description (add, update)
nameNoValue name (workspace add/update/read/link, reference read_domain)
noteNoNote text
specNoModel spec: {name, inputs:{name:{value,const?,meta?}}, graph:[{name,op,from}], outputs:[names]}. Accepted by every model, optimize, and analyze sensitivity action. On transports without a server session the spec IS the state: hold it in your context, mutate values only, pass it with each call. meta carries your annotations with the values.
stepNo
tagsNoComma-separated tags (add)
tierNoAccess tier: core/verified/community
toolYesSubsystem: compute (arithmetic/trig/units), calculate (multi-step chains), reference (constants/guides/discovery), model (linked-value graphs — spec travels with each call), workspace (persistent values), analyze (compare/verify), optimize (calculus).
unitNoAngle unit: degrees or radians
constNoMark as constant: true/false
deltaNoPerturbation size (sensitivity: 1/1000, hessian: 1/100000)
limitNoMax results (list_entries, query_entries)
lowerNoLower integration bound
name1NoFirst value (workspace read comparison)
name2NoSecond value (workspace read comparison)
namesNoJSON array of workspace names (derive)
orderNoTaylor expansion order (default: 5)
queryNoSearch term (lookup: name/symbol, discover: keyword, query_entries: substring)
stepsNoSearch steps for critical_points (default: 200)
top_nNoMax query results (default: 10)
unitsNoJSON array of unit strings (unit_check)
upperNoUpper integration bound
valueNoValue as string — integers, fractions (3/4), decimals (9.81)
actionNoOperation within the selected tool. compute: add/subtract/multiply/divide/power/gcd/lcm/factorize/sqrt/trig/fraction/slide/unit_convert/unit_factor/unit_check/domain_check/list_units. reference: help/discover/guide/lookup/list_methods/list_domains/read_domain/recommend/list_entries/query_entries/db_stats/landmarks. model: define/extend/forward/observe/what_if/solve/learn/sensitivity. workspace: create/add/read/derive/update/link/gcd/lcm/lattice/ratios/query/cluster/snapshot/export/import/diff/note/notes/clear_notes. analyze: compare/verify/project/route/sensitivity. optimize: derivative/gradient/jacobian/hessian/taylor/integral/critical_points/tangent/curve_analysis/optimize/learn.
domainNoDomain prefix filter (list_entries, query_entries, landmarks)
inputsNoJSON array of inputs (domain_check)
methodNoMethod within module (guide — e.g. 'determinant', 'molar_mass')
moduleNoDomain module (guide, list_methods — e.g. 'matrix', 'chemistry')
searchNoName substring (query_entries)
sourceNoData provenance (add)
targetNoNote target: value name or 'field'
valuesNoJSON array of values (compute slide, workspace gcd/lcm/lattice/ratios)
degreesNoAngle in degrees (trig)
targetsNoLearn/optimize targets. Flat: {output_name: target_value}. Envelope adds control: {targets: {...}, adjustable: [inputs learn may move], fixed: [inputs held constant]}
to_unitNoTarget unit (unit_convert/unit_factor)
updatesNoInput updates for forward: {input_name: 'new_value'}
functionNoTrig function: sin/cos/tan/all/asin/acos/atan
new_nameNoName for derived result
sig_figsNoSignificant figures (empty=exact)
store_asNoStore result in workspace with this name
to_valueNoTarget value (route)
wrt_nameNoDifferentiate with respect to
dimensionNoDimension name (list_units)
from_unitNoSource unit (unit_convert/unit_factor)
intervalsNoSimpson's rule intervals (default: 1000)
max_boundNoSearch bound for solve (default: 1000000)
max_stepsNoMax gradient descent iterations (default: 20)
min_boundNoLower search bound for solve (default: 0) — pair with max_bound to isolate one root on non-monotonic paths
operationNoOperation to check (unit_check, domain_check)
read_modeNoDerive combination: multiply/divide/add/subtract/power/gcd/lcm/sin/cos/tan/log/exp/abs
scenariosNoWhat-if scenarios: [{name:str, updates:{input:value}}]
toleranceNoConvergence tolerance as fraction (e.g. '1/10000')
tool_nameNoTool name for help manual
from_valueNoStarting value (route)
identifierNoAlternate query parameter (lookup)
input_nameNoInput variable (solve, sensitivity). Omit on model sensitivity to get the full gradient matrix across every tunable input in one call
operationsNoCalculation steps: [{values:[str,str], read:'op', label:'name'}]. Reference previous: $prev, $label_name.
search_maxNoCritical points search max (default: 100)
search_minNoCritical points search min (default: -100)
snapshot_aNoFirst snapshot (diff)
snapshot_bNoSecond snapshot (diff)
descriptionNoNatural language description (recommend)
filter_typeNoQuery filter: all/tag/domain/dimension/property/similarity/const/tunable
output_nameNoOutput variable (solve, derivative, gradient)
filter_valueNoFilter value: tag name, domain string, dimension int, or property comparison like t>5 or value>=100
output_namesNoJSON array of output names (sensitivity, what_if). For what_if: selects which node values the comparison reports - any input, intermediate, or output in the model
target_valueNoDesired output value (solve)
learning_rateNoGradient descent step size (default: 1/10)
max_iterationsNoMax iterations for solve (default: 50)
min_similarityNoClustering threshold (default: 0.5)
snapshot_actionNoSnapshot op: save/restore/list/delete

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / min_bound
      Added value: +{
      +  "description": "Lower search bound for solve (default: 0) — pair with max_bound to isolate one root on non-monotonic paths",
      +  "type": "string"
      +}
  2. Changed2 schema fields changed
    • changedInput schema / properties / filter_type / description
      Previous value: -"Query filter: tag/domain/dimension/similar/precision"New value: +"Query filter: all/tag/domain/dimension/property/similarity/const/tunable"
    • changedInput schema / properties / filter_value / description
      Previous value: -"Query filter value"New value: +"Filter value: tag name, domain string, dimension int, or property comparison like t>5 or value>=100"
  3. Changed1 schema field changed
    • changedInput schema / properties / spec / description
      Previous value: -"Model spec: {name, inputs:{name:{value,const?}}, graph:[{name,op,from}], outputs:[names]}. Accepted by every model, optimize, and analyze sensitivity action. On transports without a server session the spec IS the state: hold it in your context, mutate values only, pass it with each call."New value: +"Model spec: {name, inputs:{name:{value,const?,meta?}}, graph:[{name,op,from}], outputs:[names]}. Accepted by every model, optimize, and analyze sensitivity action. On transports without a server session the spec IS the state: hold it in your context, mutate values only, pass it with each call. meta carries your annotations with the values."
  4. Changed2 schema fields changed
    • changedInput schema / properties / input_name / description
      Previous value: -"Input variable (solve, sensitivity)"New value: +"Input variable (solve, sensitivity). Omit on model sensitivity to get the full gradient matrix across every tunable input in one call"
    • changedInput schema / properties / output_names / description
      Previous value: -"JSON array of output names (sensitivity)"New value: +"JSON array of output names (sensitivity, what_if). For what_if: selects which node values the comparison reports - any input, intermediate, or output in the model"
  5. Changed1 schema field changed
    • changedInput schema / properties / spec / description
      Previous value: -"Model spec: {name, inputs:{name:{value,const?}}, graph:[{name,op,from}], outputs:[names]}"New value: +"Model spec: {name, inputs:{name:{value,const?}}, graph:[{name,op,from}], outputs:[names]}. Accepted by every model, optimize, and analyze sensitivity action. On transports without a server session the spec IS the state: hold it in your context, mutate values only, pass it with each call."
  6. Changed1 schema field changed
    • changedInput schema / properties / targets / description
      Previous value: -"JSON targets: {output_name: target_value} (learn, optimize)"New value: +"Learn/optimize targets. Flat: {output_name: target_value}. Envelope adds control: {targets: {...}, adjustable: [inputs learn may move], fixed: [inputs held constant]}"
  7. Changed1 schema field changed
    • changedInput schema / properties / tool / description
      Previous value: -"Subsystem: compute (arithmetic/trig/units), calculate (multi-step chains), reference (constants/guides/discovery), model (graph engine), workspace (persistent values), analyze (compare/verify), optimize (calculus)."New value: +"Subsystem: compute (arithmetic/trig/units), calculate (multi-step chains), reference (constants/guides/discovery), model (linked-value graphs — spec travels with each call), workspace (persistent values), analyze (compare/verify), optimize (calculus)."
  8. Changed1 schema field changed
    • changedInput schema / properties / read_mode / description
      Previous value: -"Derive combination: multiply/divide/add/subtract/power/gcd/lcm"New value: +"Derive combination: multiply/divide/add/subtract/power/gcd/lcm/sin/cos/tan/log/exp/abs"
  9. Changed1 schema field changed
    • changedInput schema / properties / action / description
      Previous value: -"Operation within the selected tool. compute: add/subtract/multiply/divide/power/gcd/lcm/factorize/sqrt/trig/fraction/slide/unit_convert/unit_factor/unit_check/domain_check/list_units. reference: help/discover/guide/lookup/list_methods/list_domains/read_domain/recommend/list_entries/query_entries/db_stats/landmarks. model: define/forward/observe/what_if/solve/learn/sensitivity. workspace: create/add/read/derive/update/link/gcd/lcm/lattice/ratios/query/cluster/snapshot/export/import/diff/note/notes/clear_notes. analyze: compare/verify/project/route/sensitivity. optimize: derivative/gradient/jacobian/hessian/taylor/integral/critical_points/tangent/curve_analysis/optimize/learn."New value: +"Operation within the selected tool. compute: add/subtract/multiply/divide/power/gcd/lcm/factorize/sqrt/trig/fraction/slide/unit_convert/unit_factor/unit_check/domain_check/list_units. reference: help/discover/guide/lookup/list_methods/list_domains/read_domain/recommend/list_entries/query_entries/db_stats/landmarks. model: define/extend/forward/observe/what_if/solve/learn/sensitivity. workspace: create/add/read/derive/update/link/gcd/lcm/lattice/ratios/query/cluster/snapshot/export/import/diff/note/notes/clear_notes. analyze: compare/verify/project/route/sensitivity. optimize: derivative/gradient/jacobian/hessian/taylor/integral/critical_points/tangent/curve_analysis/optimize/learn."
  10. First observed

TDQS

A4.8/5.0
Behavior5/5

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

The description goes well beyond the annotations (which only say readOnlyHint=false, openWorldHint=false, idempotentHint=false, destructiveHint=false). It discloses precision behavior ('arithmetic returns exact fractions with zero unflagged floating-point errors'), constant sources ('CODATA 2022 and IUPAC 2021'), transcendental function precision ('IEEE 754 double precision (15 sig figs, always flagged in results)'), and the per-result exactness flag ('every answer carries exact... Trust the flag; never infer exactness from which tool you called'). It also explains the state model for models ('the spec IS the state and lives in YOUR context, not on the server'), which is critical behavioral context.

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?

The description is long but well-structured: it front-loads the core purpose, then provides a routing table with clear arrows, and ends with the precision flag guidance. Every section earns its place — the routing table is dense but scannable, and the precision disclosure is essential. It loses one point because the length is substantial and some phrasing ('What are you computing?') is slightly redundant with the routing table that follows.

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?

For a tool with 80 parameters, no output schema, and no sibling tools, the description is remarkably complete. It covers what the tool does, when to use it vs alternatives, how to route different task types, precision behavior, state management for models, and the exactness flag. The routing table effectively compensates for the lack of an output schema by telling the agent what to expect from each subsystem. The only minor gap is that it doesn't describe return value shapes, but the routing table and parameter descriptions largely mitigate this.

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 95%, so the schema already documents nearly all parameters. The description adds meaningful routing semantics by mapping task types to specific tools/actions (e.g., 'plain arithmetic · factor · sqrt · trig · unit conversion → compute(action, …)'), and it explains the `spec` parameter's stateful behavior ('the spec IS the state... copy verbatim, edit values only'). It also clarifies the `exact` flag semantics. However, it doesn't add much detail for the many individual parameters, which is acceptable given the high schema coverage.

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 description opens with a clear, specific statement: 'Default calculation engine for Claude. Route any numeric computation here.' It names the resource (Arithym), the verb (route/compute), and enumerates concrete use cases (arithmetic, unit conversion, percentages, compound interest, beam design, molar mass, statistics, derivatives). It also distinguishes itself from the alternative of computing mentally or writing throwaway Python, which helps an agent understand exactly what this tool is for.

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 explicitly states when to prefer Arithym over Python/analysis tool ('any calculation where the answer itself is the goal') and when Python/analysis tool is the right choice ('algorithmic work where code is the goal — data transformations, loops over datasets, string processing, plotting, simulations, custom algorithms'). It also provides a routing table mapping task types to specific actions (compute, calculate, reference, model, optimize, domain_check), which is exceptionally actionable guidance.

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.

Resources