Skip to main content
Glama
mAd-DaWg

mcp_calculator

by mAd-DaWg

mcp_calculator

stdio MCP server that gives LLMs a scientific calculator with normal infix maths (e.g. 90+(40-30), sin(30), x^2-2). Expressions are parsed safely, converted internally to Reverse Polish Notation, and evaluated by a stack machine over allowlisted operators and constants — no Python eval/exec — so agents can verify numeric work without inventing answers.

Runtime: Python ≥3.10, dependency mcp≥1.0. Numerics use IEEE-754 float / complex via the standard math and cmath libraries (no SymPy, NumPy, or mpmath).

Table of contents


Related MCP server: sci-calc-mcp

Install / use (Cursor / Claude Desktop)

From GitHub:

{
  "mcpServers": {
    "mcp_calculator": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/mAd-DaWg/mcp_calculator", "mcp-calculator"]
    }
  }
}

Local clone:

pip install -e ".[dev]"
{
  "mcpServers": {
    "mcp_calculator": {
      "command": "python",
      "args": ["-m", "mcp_calculator"],
      "cwd": "/path/to/mcp_calculator"
    }
  }
}

Entry points: console script mcp-calculator, or python -m mcp_calculator. Transport is stdio only (no HTTP port or env-based precision flags).


How the calculator works

flowchart LR
  client[MCP_client_stdio] --> tool[Tool_handler]
  tool --> catch[catch_calc]
  catch --> infix[Infix_lexer_shunting_yard]
  catch --> domain[Domain_tools]
  infix --> rpn[RPN_stack_engine]
  domain --> jsonOut[JSON_string_response]
  rpn --> jsonOut

Every tool goes through an error wrapper (catch_calc): failures come back as JSON with ok: false, never as a crashed process. From there, a call either:

  • parses an infix expression (evaluate and tools that take f(x)), or

  • runs a dedicated handler (matrix, stats, solve, BASE-N, distribution, LIST, finance, units, …).

Mode choices (angle unit, regression model, distribution type, which TVM unknown to solve, …) are tool parameters. Some limits are fixed (for example Base-N is always 32-bit) and are listed in the tool descriptions.

This server aims to cover ordinary scientific-calculator maths and common extras (stats, matrices, finance, …). Interactive calculator UI (screen formatting, graphing viewport, onboard programming IDE) is out of scope.

Expression grammar

Construct

Example

Arithmetic

90+(40-30), 2+3*4

Powers

2^10, 2**3 (same as ^)

Unary minus

-5, 2*-3; -2^2-4; -3!-6

Functions

sin(30), sqrt(9), abs(x), engshift(1234,-1)

Multi-arg

atan2(y,x), log(10,100), cmplx(3,4), polar(r,theta)

Factorial

5!; 2^3!2^(3!)

Constants

pi/6, qe

Bindings

variables={"A":2,"B":3} with expression A+B

Variable x

calculus / roots / Σ / Π / table

Implicit *

2pi, 2(3+4), (1+2)(3), 2x; 1/2x is (1/2)*x

Precedence (PEMDAS / BODMAS / BIDMAS, tightest last): + -* / % → unary -^ → postfix !. Same level is left-to-right except ^, which is right-associative (2^3^2 = 2^(3^2) = 512). Parentheses first. This table is used by every infix tool (evaluate, calculus, roots, Σ/Π/table, list seq).

Angle mode and suffixes

Pass angle_mode on the tool (rad | deg | grad). It affects circular trig (sin, cos, tan, inverses, sec/csc/cot, atan2, arg). Hyperbolic functions ignore angle mode.

Mid-expression angle suffixes convert a literal into the current angle_mode before evaluation:

Suffix

Meaning

° or deg

value is in degrees

r or rad

value is in radians

g or grad

value is in gradians

flowchart LR
  raw["literal_30_deg"] --> conv[Convert_into_angle_mode]
  mode[angle_mode_param] --> conv
  conv --> trig[sin_cos_tan_etc]

Example: sin(30°) with angle_mode=rad converts 30° → π/6, then takes sine → ~0.5. Mid-expression RAD/DEG/GRAD tokens are not supported — use the tool parameter.

Engineering symbols

Glued SI prefixes after a real literal (engineering symbols):

f p n u/μ m k M G T P E

Examples: 500k → 500000, → 3e-6, 999k+25k → 1024000.

  • Infix: engshift(x, n) multiplies by 1000^n (ENG / ENG← style).

  • Tools: eng_format, eng_shift.

  • evaluate(..., eng_symbols=true) adds an eng object (significand, exponent, symbol, display) for real results.

Note: glued 2m is milli (0.002). For a binding named m, write 2*m or 2 m.

Complex and polar

Form

Example

Rectangular pack

cmplx(3,4), abs(cmplx(3,4))

Polar input literal

2∠90 (θ uses angle_mode)

Polar function

polar(2, 90) same meaning

Output form

complex_form=rectangular{re,im}; polar{r,theta,unit}

Evaluate pipeline

flowchart TD
  expr[expression_string] --> lex[Lex_numbers_names_ops]
  lex --> suf[Apply_eng_and_angle_suffixes]
  suf --> impl[Insert_implicit_multiply]
  impl --> sy[Shunting_yard_to_RPN]
  sy --> stack[Allowlisted_stack_eval]
  stack --> fmt[Optional_complex_form_and_eng_display]
  fmt --> resp[JSON_ok_result_rpn]

Higher-level tools (matrix, stats, solve, BASE-N, units, …) use dedicated algorithms; differentiate, integrate, solve_root, Σ/Π/table evaluate infix in x.


Calculator modes → MCP tools

Modes map to tools; menu/editor choices are tool parameters. Defaults are overridable.

flowchart TB
  subgraph calc [Calculate_Complex]
    evaluate
    calculus[differentiate_integrate]
  end
  subgraph stat [STAT_Distribution]
    stats1[stats_1var]
    stats2[stats_2var]
    distr[distribution]
    tests[stats_test]
  end
  subgraph other [Matrix_BaseN_Solve_List_Finance]
    matrix_op
    base[base_convert_arith]
    solve[solve_tools]
    list_op
    finance_tvm
  end

Calculator mode

MCP tool(s)

Enterable / selectable inputs

Calculate

evaluate, differentiate, integrate, summation, product, factorize, fmin/fmax, pol, rec, dms_*, eng_format, eng_shift

expression; angle_mode; complex_form; variables; eng_symbols; eng/angle/polar syntax; calc h/tol; Σ/Π bounds

Complex

evaluate

complex_form; polar input r∠θ

Base-N

base_convert, base_arith

value/a/b, bases 2/8/10/16, op incl. xnor/negwidth fixed 32-bit

Matrix / Vector

matrix_op

op (refrref, unit, eigen, …), matrices/vector/n, angle_mode for angle

Statistics

stats_1var, stats_2var

data; model; optional freq, predict_*; norm_xt/P/Q/R

Distribution

distribution

type + all variables (incl. norm_p/norm_q/norm_r, tails, …)

Table

table

f, optional g, start, end, step

Equation / Func

solve_linear, solve_polynomial, solve_root

coeffs / expression; allow_complex; angle_mode on root

Inequality

solve_inequality

coefficients, relation

Ratio

solve_ratio

a,b,c,d + solve_for

Spreadsheet

Possible future enhancement; use stats_* / table / evaluate meanwhile

LIST

list_op

seq, cumsum, sort_a, sort_d, delta

Finance TVM

finance_tvm

solve_for N|I|PV|PMT|FV + other four values

STAT TESTS

stats_test

z/t/prop/anova/linreg_ttest + editor fields

Setup

per-call params

Defaults overridable; Pol/Rec default deg; most others default rad

stats_2var model: linear, quadratic, logarithmic, exp, abexp, power, inverse, cubic, quartic, logistic, medmed.

distribution type: normal_pd/cd, inverse_normal (+ tail), binomial_*, inverse_binomial, poisson_*, geometric_*, t_*, chi2_*, f_*, norm_p/norm_q/norm_r.


MCP request and response conventions

Every tool returns a JSON string. The MCP layer delivers that string as tool-result text. Agents should JSON.parse it.

Success shape

{"ok": true, "...": "tool-specific fields"}

Failure shape

{
  "ok": false,
  "error": "<code>",
  "message": "human-readable explanation",
  "hint": "how to fix the call",
  "example": "optional",
  "did_you_mean": "optional"
}

On ok: false, read message, hint, and when present example / did_you_mean before retrying — those fields say what to fix. Discovery tools (list_operations, list_constants, list_unit_conversions) help recover from unknown tokens. Agents see tool docstrings and server instructions (When/Params/Example), not this README.

Illustrative MCP tools/call envelope

Clients send JSON-RPC over stdio. Example call for evaluate:

Request

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "evaluate",
    "arguments": {
      "expression": "90+(40-30)",
      "angle_mode": "rad"
    }
  }
}

Decoded tool payload (the string inside the tool result content):

{
  "ok": true,
  "result": 100.0,
  "expression": "90+(40-30)",
  "angle_mode": "rad",
  "rpn": "90 40 30 - +"
}

Below, examples show the arguments object and the parsed JSON response — what agents reason over after the MCP wrapper.


Tools reference

When this server is connected over MCP, the model sees each tool’s description (from the Python docstrings in server.py) plus the server instructions — not this README. Keep those in sync when changing behaviour.

Tool

Purpose

evaluate

Main calculator: infix; eng/°/r/g/r∠θ; variables; eng_symbols

list_operations

Discover available operators and function names

list_constants

Discover math/physics constant names and values

list_unit_conversions

Discover supported unit conversion ids

matrix_op

Matrix and vector algebra (det, inv, ref, rref, unit, eigen, …)

stats_1var

1-VAR stats (+ optional FREQ; optional norm_xt/P/Q/R)

stats_2var

Two-variable stats and selectable regression models

solve_linear

Solve a system of linear equations

solve_root

Find a numeric root of f(x) = 0

solve_polynomial

Find roots of a polynomial (degree 1–4)

solve_inequality

Solve polynomial inequality with relation

solve_ratio

Solve a:b = c:d for one unknown

base_convert

Convert integers between binary/octal/decimal/hex (32-bit)

base_arith

Integer arithmetic and bitwise ops in a chosen base

differentiate

Approximate the derivative of f(x) at a point

integrate

Approximate a definite integral of f(x)

summation

Σ of f(x) from start to end

product

Π of f(x) from start to end

factorize

Prime factorization (integer FACT)

fmin / fmax

Approximate min/max of f(x) on an interval

pol / rec

Rectangular ↔ polar coordinates

dms_to_decimal / decimal_to_dms

Sexagesimal ° ′ ″ conversion

eng_format / eng_shift

Engineering display / ×1000ⁿ shift

distribution

Normal / binomial / Poisson / geometric / t / χ² / F (+ norm_p/q/r)

stats_test

STAT TESTS (z/t/prop/ANOVA/LinRegTTest)

list_op

LIST seq / cumsum / sort / ΔList

finance_tvm

TVM solver (N, I%, PV, PMT, FV)

table

Generate f(x) [and g(x)] values by start/end/step

convert_unit

Convert a value between listed measurement units

evaluate

The primary tool for checking arithmetic and scientific expressions. Pass ordinary infix maths (parentheses, PEMDAS / BODMAS / BIDMAS precedence, functions, constants). The server converts to RPN internally and returns the numeric result plus the internal rpn form for transparency. See Expression grammar and Evaluate pipeline.

Parameter

Type

Default

Description

expression

string

required

Infix expression

angle_mode

string

"rad"

rad, deg, or grad

complex_form

string

"rectangular"

rectangular (a+bi) or polar (r∠θ) for complex results

variables

object

optional

Name→float bindings (e.g. {"A":2,"B":3} with A+B)

eng_symbols

bool

false

If true, real results include an eng display object

Arguments

{"expression": "90+(40-30)", "angle_mode": "rad"}

Response

{
  "ok": true,
  "result": 100.0,
  "expression": "90+(40-30)",
  "angle_mode": "rad",
  "rpn": "90 40 30 - +"
}

Degrees / grads

{"expression": "sin(30)", "angle_mode": "deg"}
{
  "ok": true,
  "result": 0.49999999999999994,
  "expression": "sin(30)",
  "angle_mode": "deg",
  "rpn": "30 sin"
}

(sin(50) with angle_mode=grad likewise yields ~0.5.)

Angle suffix (convert into current angle_mode):

{"expression": "sin(30°)", "angle_mode": "rad"}

Engineering suffixes

{"expression": "500k+10M"}
{"ok": true, "result": 10500000.0, "expression": "500k+10M", "angle_mode": "rad", "rpn": "500000 10000000 +", "complex_form": "rectangular"}

With eng_symbols: true, a real result also includes "eng": {"significand": 10.5, "exponent": 6, "symbol": "M", "display": "10.5M"}.

Polar complex input

{"expression": "2∠90", "angle_mode": "deg", "complex_form": "rectangular"}
{"ok": true, "result": {"re": 1.2246467991473532e-16, "im": 2.0}, "expression": "2∠90", "angle_mode": "deg", "rpn": "2 90 polar", "complex_form": "rectangular"}

Variables

{"expression": "A+B", "variables": {"A": 2, "B": 3}}

Complex

{"expression": "abs(cmplx(3,4))"}
{
  "ok": true,
  "result": 5.0,
  "expression": "abs(cmplx(3,4))",
  "angle_mode": "rad",
  "rpn": "3 4 cmplx abs"
}

A non-real complex result looks like "result": {"re": 1.0, "im": 2.0}. With complex_form": "polar" the same value is "result": {"r": …, "theta": …, "unit": …}.

Constants

{"expression": "sin(pi/6)"}
{
  "ok": true,
  "result": 0.49999999999999994,
  "expression": "sin(pi/6)",
  "angle_mode": "rad",
  "rpn": "pi 6 / sin"
}

Error example

{"expression": "foo"}
{
  "ok": false,
  "error": "unknown_token",
  "message": "Unknown name 'foo' at position 0",
  "hint": "Use a constant (list_constants), variable x, or function call like sin(x).",
  "example": "pi/2",
  "did_you_mean": "F",
  "token": "foo",
  "position": 0
}

list_operations / list_constants / list_unit_conversions

Discovery helpers so agents do not guess names. Call these when unsure which operators, physics constants, or unit conversions exist. Each takes no parameters and returns ok: true plus an array:

  • list_operationsoperations[] with name, arity, description, angle_sensitive

  • list_constantsconstants[] with name, value, unit, note, codata_year, optional catalog_index

  • list_unit_conversionsconversions[] with id, from, to, plus factor or note for temperature

See the operator, constants, and units catalogs below for the full inventories.

matrix_op

Linear algebra on small dense matrices and vectors: add/subtract/multiply, transpose, determinant, inverse, REF and RREF (distinct), identity, eigen, and vector ops (dot, 3D cross, Euclidean norm, angle, unit vector). Maximum dimension is 32.

Parameter

Type

Description

op

string

add, sub, mul, transpose, det, inv, identity, ref, rref, eigen, dot, cross, norm, angle, unit

matrices

list

One or two matrices, or two vectors for vector ops

vector

list of float

Single vector (e.g. for norm / unit)

n

int

Size for identity

angle_mode

string

rad/deg/grad for angle (default "rad")

Determinant

{"op": "det", "matrices": [[[1, 2], [3, 4]]]}
{"ok": true, "op": "det", "result": -2.0}

Vector norm

{"op": "norm", "vector": [3, 4]}
{"ok": true, "op": "norm", "result": 5.0}

Angle (radians; includes "unit": "rad")

{"op": "angle", "matrices": [[1, 0], [0, 1]]}
{"ok": true, "op": "angle", "result": 1.5707963267948966, "unit": "rad"}

Cross product (requires 3-vectors)

{"op": "cross", "matrices": [[1, 0, 0], [0, 1, 0]]}
{"ok": true, "op": "cross", "result": [0.0, 0.0, 1.0]}

Identity (requires n)

{"op": "identity", "n": 2}
{"ok": true, "op": "identity", "result": [[1.0, 0.0], [0.0, 1.0]]}

stats_1var

One-variable descriptive statistics: count, mean, sum, sum of squares, min/max, Q1/median/Q3, mode, and population/sample variance and standard deviation (max 100 000 points).

Parameter

Type

Description

data

list of float

Non-empty

freq

list of float

Optional FREQ column (same length as data)

norm_x

float

Optional STAT Norm Dist input → adds t, P, Q, R

{"data": [1, 2, 3, 4]}
{
  "ok": true,
  "n": 4,
  "mean": 2.5,
  "sum": 10.0,
  "sumsq": 30.0,
  "min": 1.0,
  "max": 4.0,
  "median": 2.5,
  "var_pop": 1.25,
  "var_sample": 1.6666666666666667,
  "std_pop": 1.118033988749895,
  "std_sample": 1.2909944487358056
}

STAT Norm Dist (norm_x)

When norm_x is set, the tool standardizes against the sample mean and population σ, then returns areas P/Q/R:

flowchart TD
  data[data_and_optional_freq] --> stats[mean_and_sigma_pop]
  x[norm_x] --> tcalc["t_equals_x_minus_mean_over_sigma"]
  stats --> tcalc
  tcalc --> P["P_area_neg_inf_to_t"]
  tcalc --> Q["Q_area_0_to_t"]
  tcalc --> R["R_area_t_to_pos_inf"]
{"data": [1, 2, 3, 4, 5], "norm_x": 4}
{
  "ok": true,
  "n": 5.0,
  "mean": 3.0,
  "std_pop": 1.4142135623730951,
  "norm_x": 4.0,
  "t": 0.7071067811865475,
  "P": 0.7602499389065233,
  "Q": 0.26024993890652326,
  "R": 0.23975006109347674
}

(Response also includes the usual 1-VAR fields: sum, sumsq, quartiles, variance, etc.)

stats_2var

Two-variable statistics and regression. Select Type is a required choice via model (not hardcoded to linear). Optional FREQ and ŷ/x̂ estimates match STAT Reg.

Parameter

Type

Default

x, y

list of float

required, equal length

model

string

"linear" — see modes table

freq

list of float

optional

predict_y_at

float

optional → y_hat

predict_x_at

float

optional → x_hat / x_hat1,x_hat2

{"x": [1, 2, 3], "y": [2, 4, 6], "model": "linear"}
{
  "ok": true,
  "n": 3,
  "model": "linear",
  "a": 0.0,
  "b": 2.0,
  "r": 1.0,
  "mean_x": 2.0,
  "mean_y": 4.0,
  "predict_at_mean": 4.0,
  "equation": "y = a + b*x"
}
{"x": [1, 2, 3, 4], "y": [1, 4, 9, 16], "model": "quadratic", "predict_y_at": 2}

solve_linear

Solves a square system of linear equations Ax = b (unique solution when A is invertible). Pass either an augmented matrix or separate coefficient matrix A and right-hand side b. Uses Gaussian elimination with partial pivoting. Maximum size n = 32.

Pass either:

  • coefficients — augmented matrix n×(n+1), each row [a_i1, …, a_in, b_i], or

  • A (n×n) and b (length n)

{"A": [[2, 1], [1, 3]], "b": [1, 2]}
{
  "ok": true,
  "solution": [0.2, 0.6],
  "residual": [0.0, -2.220446049250313e-16],
  "status": "unique"
}

solve_root

Finds a real number x where an infix expression f(x) equals zero (for example √2 from x^2-2). Prefer a bracketing interval [a, b] (Brent’s method); if you only have a starting guess, Newton’s method is used instead.

Parameter

Type

Default

expression

string

required — infix in x

bracket

[a, b]

preferred

guess

float

for Newton

angle_mode

string

"rad"

{"expression": "x^2-2", "bracket": [0, 2]}
{
  "ok": true,
  "root": 1.414213562373095,
  "abs_f": 4.440892098500626e-16,
  "iterations": 19,
  "method": "brent",
  "expression": "x^2-2",
  "angle_mode": "rad"
}

solve_polynomial

Finds roots of a₀ + a₁x + … + aₙxⁿ. Pass [a0, …, an] (constant first). Degree 1–4. allow_complex mirrors complex-solutions On/Off (default true).

{"coefficients": [-2, 0, 1], "allow_complex": true}
{
  "ok": true,
  "degree": 2,
  "roots": [1.4142135623730951, -1.4142135623730951],
  "coefficients": [-2.0, 0.0, 1.0],
  "allow_complex": true
}

solve_inequality

Inequality mode: polynomial with relation >, >=, <, or <= (degree 1–4). Coefficients low-to-high like the Coefficient Editor.

{"coefficients": [-1, 1], "relation": ">"}

solve_ratio

Ratio mode a:b = c:d. Provide three known values; solve_for is a|b|c|d|x (x = the single missing slot).

{"a": 2, "b": 3, "d": 6, "solve_for": "c"}
{"ok": true, "a": 2.0, "b": 3.0, "c": 4.0, "d": 6.0, "solve_for": "c", "value": 4.0}

base_convert

Converts an integer string from one base to another among 2, 8, 10, and 16, using 32-bit two’s complement (fixed — not a selectable bit width). Pass unsigned-style digit patterns for negatives (e.g. FFFFFFFF for −1).

{"value": "FF", "from_base": 16, "to_base": 10}
{
  "ok": true,
  "value": "255",
  "decimal": 255,
  "decimal_unsigned": 255,
  "from_base": 16,
  "to_base": 10,
  "bits": 32
}

base_arith

Performs integer arithmetic and bitwise operations on values written in a chosen base (2/8/10/16), still in 32-bit two’s complement. Supports add, sub, mul, div, and, or, xor, xnor, unary not, and unary neg. Results wrap at 32 bits; div uses signed interpretation.

Parameter

Type

Default

op

string

add, sub, mul, div, and, or, xor, xnor, not, neg

a

string

required

b

string

required except for not

base

int

10

{"op": "add", "a": "A", "b": "5", "base": 16}
{"ok": true, "op": "add", "result": "F", "decimal_unsigned": 15, "base": 16}

differentiate

Approximates the derivative df/dx of an infix function of x at a given point, using a central finite difference. Use for checking calculus results numerically (not symbolic differentiation). Optional h overrides the automatic step size; truncation_est is a rough error hint.

Parameter

Type

Default

expression

string

required — infix in x

at

float

required — point of evaluation

angle_mode

string

"rad"

h

float

auto: `(1+

{"expression": "x^3", "at": 2}
{
  "ok": true,
  "derivative": 12.000000000147326,
  "at": 2.0,
  "h": 1.3924766500838347e-05,
  "truncation_est": 3.8779838599604476e-10,
  "expression": "x^3",
  "angle_mode": "rad"
}

integrate

Approximates the definite integral of an infix function of x from lower to upper using adaptive Simpson quadrature. Use to check ∫f(x) dx numerically. Optional tol tightens or loosens the accuracy target; the response includes error_est and how many times f was evaluated.

Parameter

Type

Default

expression

string

required — infix in x

lower, upper

float

required — integration limits

angle_mode

string

"rad"

tol

float

1e-10

{"expression": "x^2", "lower": 0, "upper": 1}
{
  "ok": true,
  "integral": 0.3333333333333333,
  "lower": 0.0,
  "upper": 1.0,
  "error_est": 0.0,
  "evaluations": 5,
  "expression": "x^2",
  "angle_mode": "rad"
}

Caps: recursion depth 40, ≤ 100 000 function evaluations.

summation

Σ: sum an infix expression in x for integer index from start to end inclusive.

{"expression": "x+1", "start": 1, "end": 5}
{"ok": true, "sum": 20.0, "expression": "x+1", "index": "x", "start": 1, "end": 5, "angle_mode": "rad"}

pol / rec

Rectangular ↔ polar. Default angle_mode is "deg".

{"x": 2, "y": 2, "angle_mode": "deg"}
{"ok": true, "r": 2.8284271247461903, "theta": 45.0, "x": 2.0, "y": 2.0, "angle_mode": "deg"}

dms_to_decimal / decimal_to_dms

Sexagesimal ° ′ ″ ↔ decimal degrees.

{"degrees": 10, "minutes": 30, "seconds": 0}
{"ok": true, "decimal": 10.5, "degrees": 10.0, "minutes": 30.0, "seconds": 0.0}

distribution

Distribution mode — pass type and every variable that type needs (none are hardcoded).

type

Required inputs

normal_pd

x, sigma, mu

normal_cd

lower, upper, sigma, mu

inverse_normal

area, sigma, mu (+ optional tail)

binomial_pd / binomial_cd

x, n, p (x may be a list)

inverse_binomial

area, n, p

poisson_pd / poisson_cd

x, lambda_

geometric_*, t_*, chi2_*, f_*

see tool docstring / list-style discovery via errors

norm_p / norm_q / norm_r

x = standardized t (or use stats_1var with norm_x)

{"type": "normal_pd", "x": 36, "sigma": 2, "mu": 35}
{"type": "norm_p", "x": 1.0}

eng_format / eng_shift

Engineering display helpers (also available in infix via suffixes and engshift):

Tool

Inputs

Result

eng_format

value

significand / exponent / SI symbol / display string

eng_shift

value, steps (default 1)

value * 1000^steps

{"value": 12345}
{"ok": true, "value": 12345.0, "significand": 12.345, "exponent": 3, "symbol": "k", "display": "12.345k"}

product / factorize / fmin / fmax

  • product — Π of infix f(x) from integer start to end (same shape as summation).

  • factorize — prime factorization of a positive integer (n).

  • fmin / fmax — approximate min/max of infix f(x) on [lower, upper] with angle_mode.

stats_test / list_op / finance_tvm

  • stats_test — STAT TESTS: z/t/prop/ANOVA/LinRegTTest; pass the editor fields for the chosen test type.

  • list_op — LIST: seq, cumsum, sort_a, sort_d, delta.

  • finance_tvm — solve for one of N, I, PV, PMT, FV given the other four.

table

Table mode: evaluate expression (and optional expression2 as g) from start to end by step.

{"expression": "2*x", "start": 0, "end": 2, "step": 1, "expression2": "x^2"}

convert_unit

Converts a numeric value between common measurement units (length, area, volume, mass, pressure, force, energy, power, and temperature). Only pairs listed by list_unit_conversions are supported — there is no free-form dimensional analysis. Pass either a conversion_id or from_unit + to_unit. Full id list: Unit conversions.

{"value": 1, "conversion_id": "mile_to_km"}
{
  "ok": true,
  "value": 1.609344,
  "from_unit": "mile",
  "to_unit": "km",
  "conversion_id": "mile_to_km"
}

Temperature example (100 °C → °F):

{"value": 100, "conversion_id": "C_to_F"}
{"ok": true, "value": 212.0, "from_unit": "C", "to_unit": "F", "conversion_id": "C_to_F"}

Operator / function reference

76 operators/functions from the allowlist. In infix, use binary symbols (+, ^, , …) or function-call form name(args) matching arity. angle_sensitive means circular-trig / mode behavior. Call list_operations at runtime for the same data.

Arithmetic and powers

Name

Arity

Angle

Description

+

2

Addition

-

2

Subtraction

*

2

Multiplication

/

2

Division

^

2

Power a^b — infix a^b or a**b; also pow(a,b); right-associative

pow

2

Alias for ^

%

2

Remainder (fmod); also mod(a,b)

mod

2

Modulo

nroot

2

nroot(x,y)y^(1/x)

neg

1

Negate (infix unary -)

abs

1

Absolute value / modulus — abs(x)

inv

1

Reciprocal 1/xinv(x)

sqrt

1

Square root — sqrt(x)

cbrt

1

Cube root — cbrt(x)

sq

1

Square — sq(x) or prefer x^2

cube

1

Cube — cube(x) or prefer x^3

pct

2

x * y / 100

pct1

1

x / 100

min

2

Minimum

max

2

Maximum

hypot

2

Hypotenuse

sgn

1

Sign (−1, 0, 1)

Exponentials and logarithms

Name

Arity

Description

exp

1

e^x

exp10

1

10^x

ln

1

Natural log

log10

1

Log base 10

log2

1

Log base 2

log

2

log(b,a) → log base b of a

Circular trigonometry (angle mode)

Name

Arity

Description

sin / cos / tan

1

Forward trig

asin / acos / atan

1

Inverse → angle mode

atan2

2

atan2(y,x): y x atan2

sec / csc / cot

1

Reciprocal trig

Hyperbolic (ignore angle mode)

Name

Arity

Description

sinh / cosh / tanh

1

Hyperbolic

asinh / acosh / atanh

1

Inverse hyperbolic

sech / csch / coth

1

Reciprocal hyperbolic

Angle conversion helpers

Name

Arity

Description

d2r / r2d

1

Degrees ↔ radians

g2r / r2g

1

Grads ↔ radians

d2g / g2d

1

Degrees ↔ grads

Rounding and integers

Name

Arity

Description

floor / ceil / round

1

Floor / ceiling / nearest

trunc

1

Truncate toward zero

frac

1

Fractional part

int

1

Integer part (floor)

fact

1

Factorial n! (n ≤ 170) — infix n! or fact(n); postfix ! is tighter than ^ and unary -

nPr / nCr

2

Permutations / combinations — nPr(n,r), nCr(n,r) (n ≤ 1000)

gcd / lcm

2

GCD / LCM

Random

Name

Arity

Description

rand

0

Uniform float in [0, 1)rand()

randint

2

Random int inclusive — randint(a,b)

Complex

Name

Arity

Angle

Description

cmplx

2

Pack re, im → complex — cmplx(re,im)

polar

2

yes

r∠θ → complex (θ uses angle_mode) — infix 2∠90 or polar(2,90)

re / im

1

Real / imaginary part — re(z), im(z)

conj

1

Conjugate — conj(z)

arg

1

yes

Argument (angle mode) — arg(z)

Engineering

Name

Arity

Description

engshift

2

x * 1000^nengshift(1234, 1)

Mode switches

RAD / DEG / GRAD exist in the internal op table (arity 0) but are not part of the infix grammar. Set angle_mode on the tool instead. Mid-expression angle suffixes (°/r/g) are supported — see Angle mode and suffixes.

Function/operator names are matched case-insensitively.


Constants reference

Physics values follow NIST CODATA 2022 (exact SI values where applicable). Use them as names in infix, e.g. c*qe.

Naming pitfalls

  • Elementary charge is qe (or echarge). Token e is Euler’s number.

  • Classical electron radius is r_e. Token re is the real-part operator.

  • Case-insensitive lookup is disabled for ambiguous pairs that collide when lowercased (e.g. muN vs mun). Prefer the exact spelling from this table or list_constants.

Token

Value

Unit

Note

pi

3.141592653589793

1

Archimedes' constant

e

2.718281828459045

1

Euler's number

euler

(alias of e)

1

Alias for e

tau

6.283185307179586

1

2*pi

phi

1.618033988749895

1

Golden ratio

inf

+∞

1

Positive infinity (ops that produce non-finite results still raise overflow on output)

mp

1.67262192595e-27

kg

proton mass

mn

1.67492750056e-27

kg

neutron mass

me

9.1093837139e-31

kg

electron mass

mmu

1.883531627e-28

kg

muon mass

a0

5.29177210544e-11

m

Bohr radius

h

6.62607015e-34

J s

Planck constant (exact)

muN

5.0507837393e-27

J T⁻¹

nuclear magneton

muB

9.2740100657e-24

J T⁻¹

Bohr magneton

hbar

1.0545718176461565e-34

J s

reduced Planck constant

alpha

7.2973525643e-3

1

fine-structure constant

r_e

2.8179403205e-15

m

classical electron radius

lambdaC

2.42631023538e-12

m

Compton wavelength

gammap

2.6752218708e8

s⁻¹ T⁻¹

proton gyromagnetic ratio

lambdaCp

1.32140985539e-15

m

proton Compton wavelength

lambdaCn

1.31959090382e-15

m

neutron Compton wavelength

Rinf

10973731.568157

m⁻¹

Rydberg constant

u

1.66053906892e-27

kg

atomic mass unit

mup

1.41060679545e-26

J T⁻¹

proton magnetic moment

mue

−9.2847646917e-24

J T⁻¹

electron magnetic moment

mun

−9.6623653e-27

J T⁻¹

neutron magnetic moment

mumu

−4.49044830e-26

J T⁻¹

muon magnetic moment

F

96485.3321

C mol⁻¹

Faraday constant

qe

1.602176634e-19

C

elementary charge (exact)

echarge

(alias of qe)

C

Alias for qe

NA

6.02214076e23

mol⁻¹

Avogadro constant (exact)

k

1.380649e-23

J K⁻¹

Boltzmann constant (exact)

k_B

(alias of k)

J K⁻¹

Alias for k

Vm

0.02271095464

m³ mol⁻¹

molar volume ideal gas (273.15 K, 100 kPa)

R

8.314462618

J mol⁻¹ K⁻¹

molar gas constant

c

299792458

m s⁻¹

speed of light (exact)

c1

3.741771852e-16

W m²

first radiation constant

c2

1.438776877e-2

m K

second radiation constant

sigma

5.670374419e-8

W m⁻² K⁻⁴

Stefan–Boltzmann constant

eps0

8.8541878188e-12

F m⁻¹

vacuum permittivity

epsilon0

(alias of eps0)

F m⁻¹

Alias for eps0

mu0

1.25663706127e-6

N A⁻²

vacuum permeability

Phi0

2.067833848e-15

Wb

magnetic flux quantum

g

9.80665

m s⁻²

standard gravity

G0

7.748091729e-5

S

conductance quantum

Z0

376.730313412

ohm

vacuum impedance

t0C

273.15

K

0 °C in kelvin

G

6.67430e-11

m³ kg⁻¹ s⁻²

Newtonian gravitation

atm

101325

Pa

standard atmosphere


Unit conversions

Linear conversions multiply by a fixed factor. Temperature (C/F/K) uses affine conversion via kelvin.

Id

From

To

Factor / note

in_to_cm / cm_to_in

in ↔ cm

2.54

ft_to_m / m_to_ft

ft ↔ m

0.3048

yd_to_m / m_to_yd

yd ↔ m

0.9144

mile_to_km / km_to_mile

mile ↔ km

1.609344

nmi_to_m / m_to_nmi

nmi ↔ m

1852

pc_to_km / km_to_pc

pc ↔ km

3.085677581e13

acre_to_m2 / m2_to_acre

acre ↔ m2

4046.8564224

ha_to_m2 / m2_to_ha

ha ↔ m2

10000

gal_to_L / L_to_gal

gal ↔ L

3.785411784

floz_to_mL / mL_to_floz

floz ↔ mL

29.5735295625

oz_to_g / g_to_oz

oz ↔ g

28.349523125

lb_to_kg / kg_to_lb

lb ↔ kg

0.45359237

atm_to_Pa / Pa_to_atm

atm ↔ Pa

101325

mmHg_to_Pa / Pa_to_mmHg

mmHg ↔ Pa

133.322387415

lbf_to_N / N_to_lbf

lbf ↔ N

4.4482216152605

kgf_to_N / N_to_kgf

kgf ↔ N

9.80665

cal_to_J / J_to_cal

cal ↔ J

4.184

hp_to_W / W_to_hp

hp ↔ W

745.6998715822702

C_to_F / F_to_C

C ↔ F

affine temperature

C_to_K / K_to_C

C ↔ K

affine temperature

F_to_K / K_to_F

F ↔ K

affine temperature

There is no free-form dimensional analysis — only this table.


Precision

All numeric work uses IEEE-754 double (float) and Python complex. There is no arbitrary-precision mode and no Decimal/mpmath backend.

Mechanism

Threshold / default

Role

Integer-ish check

1e-12

fact, nPr, gcd, etc.

Imag → real

imag &lt; 1e-15

Treat as real in serialization / real-only ops

Differentiate step h

(1+|x|)·(1e-16)^(1/3)

Default central-difference step

Integrate tol

1e-10

Adaptive Simpson tolerance (tool arg)

Brent root

tol=2e-12, max 200 iters

Bracketed root

Newton root

tol=1e-10, max 100 iters

Guess-based root

Linear pivot

~1e-14

Singularity / no unique solution

JSON

allow_nan=False

Non-finite values are not emitted; ops raise overflow instead

Practical accuracy: well-conditioned real arithmetic and trig typically agree with reference values to roughly 1e-9–1e-12 relative. Numerical differentiation, integration, and root-finding are weaker and depend on conditioning, step size, and tolerance — use the returned truncation_est, error_est, and abs_f fields as guidance, not guarantees.

Trig in degrees can show classic float artifacts (e.g. sin(30°)0.49999999999999994 rather than exact 0.5).


Limitations and safety

Hard limits

Limit

Value

Expression length

100 000 characters

Token count

10 000

Factorial

n ≤ 170

nPr / nCr

n ≤ 1000

Matrix / vector / linear system dimension

32

Stats sample size

100 000

Polynomial degree

1–4

BASE-N

bases 2, 8, 10, 16 only; 32-bit two’s complement fixed (not selectable)

Integration

depth ≤ 40; ≤ 100 000 evaluations

Summation / table rows

≤ 100 000 steps

Calculus / root variable

only x

Calculus

numerical only (not symbolic)

Units

fixed conversion table only

Display Fix/Sci/Norm

not tool inputs — JSON returns full floats

Scope boundaries

  • Agents write infix; RPN is an internal implementation detail (also returned as rpn on evaluate for transparency).

  • Not a CAS: no symbolic simplify, expand, or algebraic rearrange.

  • Not arbitrary precision.

  • Hyperbolic functions ignore angle_mode.

  • Mid-expression RAD/DEG/GRAD tokens are not supported in infix — use the angle_mode parameter. Mid-expression ° / r / g (and deg/rad/grad) are supported and convert into the current angle mode.

  • Glued engineering suffix: 2m means milli (0.002). For a binding named m, write 2*m.

  • BASE-N does not accept leading -; use 32-bit patterns for negatives, or base_arith op neg. Bit width is not a parameter.

  • Responses never include NaN/Inf JSON numbers; overflow becomes an error object.

  • Narrow UI/hardware exclusions: display Fix/Sci/Norm formatting, interactive graph viewport (Y=/TRACE), full calculator-Basic IDE. See gaps and future enhancements for numeric features not built yet.

Error codes

Code

Typical cause

empty_expression

Blank expression

invalid_angle_mode

Not rad/deg/grad

unknown_token

Bad name, character, function, or matrix/base op

stack_underflow

Internal evaluation needed more operands

leftover_stack

Internal evaluation left multiple values

division_by_zero

/, inv, base div, etc.

domain_error

Out-of-domain real/complex input

overflow

Non-finite result, size/bit/token limits

invalid_factorial / invalid_combinatorics / invalid_integer

Integer domain violations

invalid_data

Bad syntax, arity, lists, missing args, bad h/tol

dimension_error

Matrix/system shape mismatch

singular_matrix

Non-invertible matrix

no_unique_solution

Linear system under/over-determined

no_root / convergence_failed

Root finder failed

invalid_base

Unsupported base or digits

unknown_conversion

Bad unit id/pair

internal_error

Unexpected exception at tool boundary

Safety

Expressions are lexed and dispatched through fixed operator and constant registries. There is no Python eval/exec of user input, and no subprocess invocation for calculation.


Manual coverage gaps

Common scientific calculator coverage is the minimum floor. Many former gaps are now implemented (Q1/Q3/mode, Σy…, factorize, Π, fMin/fMax, multi-var variables, Base-N neg, distribution extras, STAT TESTS, LIST, TVM, eigen, engineering symbols, polar literals, mid-expression °/r/g, STAT Norm Dist P/Q/R/t). Remaining:

Gap

Notes

Spreadsheet

Deferred — see future list

Math Box

Dice/coin/number line/unit circle pedagogy

Medium gaps: richer % key patterns, sexagesimal arithmetic in expressions, fuller metric catalog, inequality compound-string form, named MatA–D session.

Possible future enhancements

Enhancement

Notes

Spreadsheet mode

Grid + formulas; workaround via numeric tools today

Math Box

Pedagogy / simulation

Named MatA–D / MatAns session

Bindings and/or session

Interactive graphing / calculator-Basic IDE

Narrow UI exclusions unless requested

Plot data APIs

Without full viewport


Tests

pip install -e ".[dev]"
pytest --cov=mcp_calculator --cov-report=term-missing

Available Tools

33 tools
base_arithA

When: integer/bitwise arithmetic in a chosen base (32-bit), not floating evaluate. Params: op=add|sub|mul|div|and|or|xor|xnor|not|neg; a; b (except not/neg); base=2|8|10|16. Example: op="add", a="A", b="5", base=16.

ParametersJSON Schema
NameRequiredDescriptionDefault
aYes
bNo
opYes
baseNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description provides useful behavioral context: 32-bit operation, integer/bitwise not floating, and supported operation set. It does not fully describe edge cases like overflow or result formatting, but the output schema exists to handle return structure, so the description carries an appropriate share of the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely compact, using a structured 'When/Params/Example' format. Every sentence adds value: use case, parameter values, and a concrete example. No fluff or repetition of schema data.

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?

The description provides essential usage context, parameter details, and an example. Since an output schema exists, it does not need to describe return values. It could slightly improve by stating how results are represented in the chosen base, but overall it is sufficiently complete for this tool's complexity.

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

Parameters5/5

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

Schema description coverage is 0%, and the description compensates strongly by enumerating all op values (add, sub, mul, div, and, or, xor, xnor, not, neg), explaining b is not needed for not/neg, and listing base values (2, 8, 10, 16). It also provides an illustrative example that clarifies expected string inputs.

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 clearly states the tool performs integer/bitwise arithmetic in a chosen base (32-bit), with a specific list of operations. It explicitly distinguishes itself from floating-point evaluation by saying 'not floating evaluate' and names the sibling 'evaluate'.

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?

It provides explicit when-to-use guidance: 'When: integer/bitwise arithmetic in a chosen base' and explicitly excludes floating-point use by saying 'not floating evaluate'. It also clarifies parameter usage for unary vs binary operations via 'b (except not/neg)' and gives a concrete example.

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

base_convertA

When: convert an integer string between bases 2/8/10/16 (32-bit two's complement fixed). Params: value (digit string, no leading '-'; use FFFFFFFF-style for negatives); from_base, to_base in {2,8,10,16}. Example: value="FF", from_base=16, to_base=10.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYes
to_baseYes
from_baseYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/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 behavioral burden. It discloses key behavioral traits: 32-bit fixed size, two's complement encoding for negatives, and the prohibition of leading '-' signs. This goes beyond a simple 'converts bases' statement. However, it does not mention output format or error handling, though an output schema exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured with 'When:', 'Params:', and a clear example. Every piece of information is useful and not redundant. It packs essential details into a small space.

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?

Given the tool's simplicity and the existence of an output schema, the description is nearly complete. It covers input semantics, supported bases, and negative-number handling. It lacks a mention of return value or potential errors, but for this straightforward conversion tool with an output schema, the coverage is strong. Minor gaps prevent a 5.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It does so effectively: 'value' format is explained (no leading '-', FFFFFFFF-style for negatives), and from_base/to_base are constrained to {2,8,10,16}. The example further clarifies usage. This adds meaning entirely absent from the schema.

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 explicitly states the tool converts an integer string between bases 2/8/10/16 with a fixed 32-bit two's complement representation. This is a specific verb+resource+scope that clearly differentiates it from siblings like base_arith (which likely performs arithmetic).

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 description opens with 'When: convert an integer string between bases...', providing clear usage context. It does not explicitly name alternatives or exclusions, but the 'When' framing and constraints (bases allowed, two's complement for negatives) offer practical guidance. Missing explicit exclusion of other base conversion tools.

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

convert_unitA

When: convert between listed measurement units (not free-form dimensional analysis). Params: value; either conversion_id OR from_unit+to_unit. Call list_unit_conversions first if unsure. Example: value=1, conversion_id="mile_to_km".

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYes
to_unitNo
from_unitNo
conversion_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral disclosure burden. It does reveal that the tool only works with listed units and that parameters must follow an 'either conversion_id OR from_unit+to_unit' pattern. However, it does not mention error handling, side effects (it is likely read-only, but not stated), or what happens if both modes are supplied. For a simple pure function, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: three short sentences in a clever 'When:/Params:/Example:' structure. Every sentence carries essential information, with no filler or repetition. It is perfectly front-loaded with the usage condition.

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?

Given the tool's simplicity and the presence of an output schema, the description is largely complete. It covers when to use, how to specify parameters, and gives an example. It also points to list_unit_conversions for additional context. It does not discuss edge cases or error conditions, but those are not critical for such a straightforward conversion tool.

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?

The schema has 0% description coverage, so the description must compensate. It explains the parameter relationship: 'value; either conversion_id OR from_unit+to_unit' — a crucial semantic not present in the schema. The example 'value=1, conversion_id="mile_to_km"' concretely demonstrates usage. This adds meaningful value beyond the bare schema definition.

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 clearly states the tool's function: 'convert between listed measurement units' — a specific verb and resource. It also explicitly excludes free-form dimensional analysis, distinguishing it from more general calculation tools. This is unambiguous and differentiates from siblings like evaluate or base_convert.

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 opens with 'When: convert between listed measurement units (not free-form dimensional analysis)', providing an explicit condition for use. It also gives a direct alternative: 'Call list_unit_conversions first if unsure', which is a clear fallback. This fully satisfies the when/when-not/alternatives criterion.

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

decimal_to_dmsB

When: decimal degrees → ° ′ ″ components. Params: decimal. Example: decimal=10.5 → degrees=10, minutes=30, seconds=0.

ParametersJSON Schema
NameRequiredDescriptionDefault
decimalYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It gives a single example but does not describe how negative values, rounding, or precision are handled, nor what the output structure is beyond the example. This is minimal transparency for a conversion tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using only three short lines to cover when to use, the parameter, and an example. There is no fluff or redundant information.

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

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, and the presence of an output schema reduces the need to describe return values. However, the description lacks edge-case behavior (negative inputs, rounding, seconds precision) and provides only a single idealized example, making it just adequate rather than fully complete.

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?

The schema has zero description coverage, and the description compensates by stating the parameter `decimal` represents decimal degrees and provides a concrete example mapping decimal=10.5 to degrees=10, minutes=30, seconds=0. This adds meaningful context beyond the bare schema.

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 clearly states the conversion direction (decimal degrees to degrees/minutes/seconds components) using an arrow notation. It distinguishes itself from the sibling dms_to_decimal by naming the exact direction of conversion, though it lacks an explicit verb like 'convert'.

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?

The description begins with 'When:' and gives a clear condition for use, but it does not explicitly mention alternatives or tell when not to use this tool. It implies usage rather than providing direct guidance compared to sibling tools.

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

differentiateA

When: numerical derivative df/dx of infix f(x) at a point (not symbolic). Params: expression in x; at; angle_mode; optional h step. Example: expression="x^3", at=2.

ParametersJSON Schema
NameRequiredDescriptionDefault
hNo
atYes
angle_modeNorad
expressionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of explaining its behavior. It discloses that the operation is numerical rather than symbolic and that it evaluates at a single point, which is important behavioral context. It could go further by mentioning approximation characteristics or default step-size behavior, but the core semantics are clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using only two short sentences plus a one-line example. It front-loads the core purpose and packs parameter guidance and an illustrative example into minimal text with no filler.

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?

Given that an output schema exists, return values need not be described. The description covers the essential invocation context: the expression syntax, evaluation point, optional step, and angle mode. It is slightly incomplete regarding angle_mode values and h defaults, but overall sufficient for an agent to select and invoke the tool correctly.

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 must compensate. It lists all parameters with meaningful hints: 'expression in x', 'at', 'angle_mode', and 'optional h step', and provides a clear example. It does not fully explain accepted angle_mode values or the behavior when h is omitted, but the example and labels provide substantial value beyond the bare schema.

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 states exactly what the tool does: computes the numerical derivative df/dx of an infix expression at a point. It explicitly distinguishes itself from symbolic differentiation, making the purpose unambiguous and differentiating it from any symbolic math sibling.

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 description frames itself with 'When:' and clarifies this is a numerical derivative at a point, not symbolic, which tells the agent when to use it. However, it does not name any alternative tools (e.g., symbolic differentiation or integration) or explain when a different tool would be preferable.

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

distributionA

When: probability densities/CDFs/inverses (DISTR), or norm_p/q/r for standardized t. For Norm Dist from a data list use stats_1var(norm_x=…) instead. Params: type selects screen — pass every variable that type needs. Types: normal_pd (x,sigma,mu), normal_cd (lower,upper,sigma,mu), inverse_normal (area,sigma,mu,tail), binomial_pd/cd (x,n,p), inverse_binomial, poisson_*, geometric_*, t_pd/cd, chi2_pd/cd, f_pd/cd, norm_p/q/r (x=t). Example: type="normal_pd", x=36, sigma=2, mu=35.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNo
pNo
xNo
dfNo
muNo
df1No
df2No
areaNo
tailNoleft
typeYes
lowerNo
sigmaNo
upperNo
lambda_No

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It explains that type selects a screen and that all variables needed by that type must be passed, but it does not describe output behavior, error conditions, or side effects. This is acceptable for a calculator-like tool but lacks richer context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and front-loaded: it starts with the key usage condition, then an alternative, then parameter handling rules, a type list, and an example. Every sentence adds value without unnecessary prose or repetition.

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

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description is helpful, it does not enumerate every valid type string (using wildcards like poisson_* and geometric_*), and some type-specific parameter mappings are omitted. Given the tool's complexity and the lack of enums in the schema, this incompleteness could make it hard for an agent to know exactly which type values and parameters are valid.

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 must compensate. It does so by listing type signatures (e.g., normal_pd (x,sigma,mu)) and providing a concrete example, which meaningfully maps parameters to usage. However, not every parameter or type signature is fully spelled out (e.g., inverse_binomial, poisson_*), leaving some gaps.

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 clearly identifies the tool as handling probability densities, CDFs, inverses, and standardized t values. It explicitly distinguishes this tool from stats_1var for normal distribution from a data list, making the intended use unambiguous.

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 opens with 'When' to define the exact use context, and explicitly says to use stats_1var(norm_x=…) instead for normal distribution from a data list. This provides clear guidance on when to use this tool versus alternatives.

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

dms_to_decimalA

When: sexagesimal ° ′ ″ → decimal degrees. Params: degrees; optional minutes, seconds (default 0). Example: degrees=10, minutes=30, seconds=0 → 10.5.

ParametersJSON Schema
NameRequiredDescriptionDefault
degreesYes
minutesNo
secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/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 provides a concrete conversion formula, optional parameter defaults, and a worked example. It does not discuss edge cases, but for a simple pure function with an output schema these details are less critical.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely brief and front-loaded, with a 'When:' opener followed by parameters and an example. Every sentence earns its place, and 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?

For a simple deterministic conversion tool, the description, input schema, and output-schema signal cover the essential inputs, defaults, and expected behavior. Nothing important is missing at this complexity level.

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

Parameters5/5

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

Schema description coverage is 0%, and the description fully compensates by identifying degrees as the core value, marking minutes/seconds as optional with defaults, and demonstrating the conversion via a clear example. This adds meaning beyond the bare schema.

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 clearly states the tool's purpose with 'sexagesimal ° ′ ″ → decimal degrees', a specific verb+resource pairing. The sibling decimal_to_dms makes the opposite direction obvious, so this tool is well differentiated.

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 leading 'When:' explicitly frames the condition for use: converting from sexagesimal to decimal degrees. It does not explicitly mention when not to use it or directly compare with decimal_to_dms, but the usage context is clear.

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

eng_formatA

When: show a real number in engineering form (significand + SI symbol). Prefer evaluate eng_symbols for expression results. Params: value. Example: value=12345 → display "12.345k".

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

Without annotations, the description carries the burden of behavioral disclosure. It explains the formatting rule via example ('value=12345 → "12.345k"'), but does not mention edge cases (zero, negative, very large) or whether the output is a string. It is adequate for a simple formatting tool but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences, each serving a purpose: the first states the tool's function, the second gives usage guidance, and the third provides a concrete example. It is front-loaded with the action verb and example, making it highly scannable.

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?

Given the tool's simplicity (one parameter, no nested objects) and the presence of an output schema, the description is nearly complete. It explains the purpose, parameter, and example, covering all necessary aspects. It does not describe the return format in detail, but the output schema presumably covers this, per the rubric.

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?

The schema only defines 'value' as a number with 0% description, so the description must compensate. The description does so by stating 'Params: value' and giving an example that illustrates the parameter's meaning: the real number to be formatted. This fully explains the parameter's role for this simple case.

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 clearly states the tool's function: 'show a real number in engineering form (significand + SI symbol)'. It uses a specific verb ('show') and resource ('real number'), which distinguishes it from sibling tools like 'solve_polynomial' or 'base_convert'. It also explicitly points to 'evaluate eng_symbols' as a preferred alternative for expression results, reinforcing its specific scope.

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: show a real number in engineering form', providing clear context for appropriate use. It also gives an exclusion: 'Prefer evaluate eng_symbols for expression results', telling the agent when not to use this tool. This direct alternative guidance is exactly what usage guidelines should offer.

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

eng_shiftA

When: ENG / ENG← style shift: multiply by 1000^steps (also engshift(x,n) in evaluate). Params: value; steps (default 1; negative shifts down). Example: value=1234, steps=1 → 1.234e6-style shift.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsNo
valueYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 full behavioral transparency. It precisely explains the multiplication by 1000^steps, default step behavior, and negative step handling, and provides a concrete example. It omits edge cases or output format details, but for a pure mathematical function these are less critical.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and well-structured: it starts with a usage cue ('When:'), lists parameters, and provides an example—all in three short sentences with no filler.

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 simple mathematical tool, the description covers the essential behavior and parameters. The output schema exists, so detailed return-value documentation is not required. The example hints at the output style, and no critical information appears missing.

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?

The schema only provides types and a default, while the description adds meaning to 'steps' (negative shifts down) and explains how 'value' is transformed. This compensates for the 0% schema description coverage, though it could elaborate slightly more on 'value'.

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 clearly states the function: a shift operation for engineering notation by multiplying with 1000^steps. It also distinguishes from the sibling eng_format by specifying 'ENG / ENG← style shift' and gives an example, making the purpose unmistakable.

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 description begins with 'When:', indicating appropriate usage context. It also mentions an alternative function 'engshift(x,n)' in evaluate, which guides the agent toward alternative invocation. However, it does not explicitly contrast with other siblings like eng_format, so it is not a full 5.

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

evaluateA

When: ordinary infix maths (real/complex), trig, powers, eng suffixes, angle suffixes, polar ∠. Not for matrices, stats lists, BASE-N, TVM, or unit conversion tables. Params: expression (required); angle_mode=rad|deg|grad (default rad); complex_form=rectangular|polar; variables={name:float}; eng_symbols=bool. Example: expression="sin(30°)", angle_mode="rad"; or "500k+10M"; or "2∠90" with angle_mode="deg".

ParametersJSON Schema
NameRequiredDescriptionDefault
variablesNo
angle_modeNorad
expressionYes
eng_symbolsNo
complex_formNorectangular

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

In the absence of annotations, the description discloses key behaviors: supported numeric domains (real/complex), configurable angle modes (rad/deg/grad), complex output forms (rectangular/polar), and engineering symbol handling. It also gives concrete examples that demonstrate expected behavior. However, it does not describe error handling, return value format, or variable interpolation semantics, leaving some edge-case ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is tightly structured with labeled sections (When, Not for, Params, Example) and front-loads the purpose. Every sentence contributes value, and the examples are concise but illustrative. The text is dense without being verbose, making it easy to scan.

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?

Given the tool's moderate complexity and the presence of an output schema, the description covers the fundamental aspects: usage scope, exclusions, parameter details, and worked examples. Minor gaps remain around variable interpolation and complex_form output representation, but these are niche and partially mitigated by the output schema.

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?

With 0% schema description coverage, the description compensates by enumerating all five parameters with types, defaults, and valid values (e.g., angle_mode=rad|deg|grad, complex_form=rectangular|polar, variables={name:float}, eng_symbols=bool). It even provides examples that illustrate parameter usage. This meaningfully enriches the bare schema, though it could better explain how variables are referenced in expressions and the precise effect of complex_form on the output.

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 'When: ordinary infix maths (real/complex), trig, powers, eng suffixes, angle suffixes, polar ∠,' which clearly specifies the tool as a mathematical expression evaluator with particular feature domains. The 'Not for' list explicitly excludes matrices, stats lists, BASE-N, TVM, and unit conversion tables, which distinguishes it from sibling tools and sharpens its purpose.

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 provides both positive ('When:') and negative ('Not for:') usage guidance. The exclusions map to specific sibling tools (e.g., matrix_op, stats_1var, base_convert, finance_tvm, convert_unit), effectively directing the agent to alternative tools when the input does not fit the evaluator's scope. This is explicit and actionable.

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

factorizeA

When: prime factorization of a positive integer (not evaluate fact()). Params: n (positive integer, ≤10 digits). Example: n=12 → factors with multiplicity.

ParametersJSON Schema
NameRequiredDescriptionDefault
nYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description discloses the output behavior via 'factors with multiplicity' and states the input constraints (positive integer, ≤10 digits). It does not mention error handling, but the presence of an output schema and the tool's simple nature reduce the need for that detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured into 'When', 'Params', and 'Example' sections. Every sentence contributes useful information without redundancy.

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 simple one-parameter tool with an output schema, the description covers purpose, constraints, and output semantics. The example n=12 further clarifies expected behavior, making the description complete.

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

Parameters5/5

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

The input schema only defines n as a number, but the description explains it must be a positive integer up to 10 digits. This adds critical semantic meaning that the schema lacks, fully compensating for the 0% schema description 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 clearly states the tool performs prime factorization of a positive integer with multiplicity. It also explicitly distinguishes itself from evaluating fact(), which prevents confusion with factorial operations.

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 description includes a 'When:' clause specifying the intended use case and notes 'not evaluate fact()' as an explicit when-not. It does not enumerate alternative sibling tools, but provides sufficient guidance for when to choose this tool.

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

finance_tvmA

When: time-value-of-money (loan/annuity) — solve one of N,I,PV,PMT,FV. Params: solve_for=N|I|PV|PMT|FV; provide the other four; I is annual %; P_Y payments/year (default 1); C_Y compounds/year (default=P_Y); begin=True for BGN. Signs: outflow negative / inflow positive, kept consistent. Example: solve_for="PMT", N=12, I=6, PV=-1000, FV=0.

ParametersJSON Schema
NameRequiredDescriptionDefault
INo
NNo
FVNo
PVNo
C_YNo
PMTNo
P_YNo
beginNo
solve_forYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral burden. It discloses sign conventions ('outflow negative / inflow positive'), defaults (P_Y=1, C_Y=P_Y, begin=False), and the fact that I is an annual percentage, which are non-obvious behavioral details. It does not mention error handling or exact return shape, but the core behavior is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, using a 'When' clause to immediately orient the agent. Each sentence adds distinct value—purpose, parameters, sign convention, defaults, and an example—without any repetition or fluff.

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?

Given the tool's nine parameters and lack of annotations, the description covers the main behavioral rules, defaults, and sign convention, while the output schema handles return values. It could be more complete by specifying invalid-input behavior or edge cases, but it is sufficient for routine TVM problems.

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

Parameters5/5

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

With 0% schema description coverage for 9 parameters, the description fully compensates by naming every relevant parameter and adding meaning: solve_for allowed values, 'provide the other four', annual I, payment/compounding frequencies, and begin flag. The example further maps variables to concrete values, making the parameters actionable.

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 'When: time-value-of-money (loan/annuity) — solve one of N,I,PV,PMT,FV', clearly identifying the domain and the action. This differentiates it from sibling math tools by naming its unique TVM variables and purpose.

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 description explicitly states the intended use case ('When: time-value-of-money') and gives concrete invocation guidance: 'solve one of... provide the other four'. It does not name sibling alternatives or exclusions, but the context is clear enough for tool selection.

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

fmaxA

When: approximate maximum of infix f(x) on a closed interval. Params: expression in x; lower; upper; angle_mode; tol. Example: expression="-(x-1)^2", lower=0, upper=2.

ParametersJSON Schema
NameRequiredDescriptionDefault
tolNo
lowerYes
upperYes
angle_modeNorad
expressionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the responsibility for behavioral disclosure. It mentions 'approximate', indicating a numerical method, and the 'closed interval' constraint. However, it does not explain behavior for multiple local maxima, error handling, or the effects of the `angle_mode` and `tol` parameters. The description is adequate but not deeply transparent.

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 very brief (three short sentences) and structured with 'When:', 'Params:', and 'Example:'. It front-loads the purpose and includes a concrete example that aids understanding. The 'Params:' list is skeletal but readable. No wasted words, though slightly choppy.

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

Completeness3/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 are covered. However, the description omits details about `angle_mode` and `tol`, does not mention edge cases or limitations, and does not reference sibling tools. It provides a working example but is not fully self-sufficient for an agent unfamiliar with the tool.

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

Parameters2/5

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

The schema description coverage is 0%, so the description must compensate. It lists parameters and clarifies 'expression in x', and the 'closed interval' gives implied meaning to `lower` and `upper`. However, `angle_mode` and `tol` are unexplained, and the example only uses three required parameters. This is a significant gap for a 5-parameter tool.

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 explicitly states 'approximate maximum of infix f(x) on a closed interval', providing a specific verb ('approximate'), resource ('f(x)'), and scope ('closed interval'). This clearly distinguishes it from sibling tools like fmin (minimum) and other math operations.

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 description starts with 'When:' and clearly states the use case for finding an approximate maximum on a closed interval. It does not explicitly mention alternatives or when not to use, but the context is sufficient for an agent to decide. It lacks exclusions but provides a clear 'when to use'.

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

fminA

When: approximate minimum of infix f(x) on a closed interval. Params: expression in x; lower; upper; angle_mode; tol. Example: expression="(x-1)^2", lower=0, upper=2.

ParametersJSON Schema
NameRequiredDescriptionDefault
tolNo
lowerYes
upperYes
angle_modeNorad
expressionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It honestly notes the 'approximate' nature and 'closed interval' constraint, but does not discuss whether the result is a local or global minimum, or how invalid inputs or non-minimizable functions are handled. This is a moderate gap, but the key computational trait (approximation) is stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using a structured 'When:' line, a params list, and an example. Every sentence has a purpose, and it is front-loaded with the core use case.

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

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters, 0% schema descriptions, no annotations, and an output schema that may document return values but not parameter details. The description leaves angle_mode and tol unexplained, and misses behavioral nuances (local vs global minimum, error conditions). This is a significant completeness gap for an AI agent to invoke the tool correctly.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It names all four parameters but only gives context for expression ('in x'), lower, and upper (implicitly interval bounds). Angle_mode and tol are left entirely unexplained, and no detail is given on the expression format or acceptable values, which is insufficient for a 5-parameter tool.

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 clearly states that the tool computes the approximate minimum of an infix function f(x) on a closed interval. This distinguishes it from sibling tools like fmax (maximum) and solve_root (roots), providing a specific verb and resource.

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 leading 'When:' explicitly frames the tool as the one to use when seeking an approximate minimum on an interval, providing clear context. However, it does not mention exclusions or alternative tools (e.g., fmax for maximums), so it earns a 4 rather than 5.

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

integrateA

When: numerical definite integral of infix f(x) on [lower, upper]. Params: expression in x; lower; upper; angle_mode; tol (default 1e-10). Example: expression="x^2", lower=0, upper=1.

ParametersJSON Schema
NameRequiredDescriptionDefault
tolNo
lowerYes
upperYes
angle_modeNorad
expressionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are present, so the description must convey behavioral traits. It discloses that the integration is numerical and provides a default tolerance, which is useful. But it omits potential numerical pitfalls, angle_mode semantics, or what kind of result to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using a short 'When' clause followed by a compact parameter list and example. Every word adds value, and the most important context is front-loaded.

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?

Despite the absence of annotations and schema parameter descriptions, the description covers the core purpose, parameters, and an example. An output schema exists, so return-value details are not necessary. Minor gaps like angle_mode details and numerical caveats prevent a perfect score.

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%, so the description must compensate. It lists the parameters and gives an example, adding meaning to 'expression' (in x) and 'tol' (default 1e-10). However, 'angle_mode' is only mentioned by name without explaining its possible values or effect.

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 clearly states the tool computes a 'numerical definite integral of infix f(x) on [lower, upper]', using a specific verb and resource. This distinguishes it from related siblings like differentiate, summation, and product.

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?

It explicitly frames the tool as 'When ... numerical definite integral', giving clear context for when to use it. However, it does not mention any exclusions or alternative tools, so it lacks explicit when-not-to-use guidance.

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

list_constantsA

When: need CODATA/math constant names (pi, e, qe, …) usable in evaluate. Params: none. Example: call with no args → constants[{name,value,unit,…}].

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose behavior. It says calling with no args returns constants[{name,value,unit,…}], which is useful. However, it doesn't explicitly mention read-only/non-destructive behavior or any other edge cases, though the example implies a safe list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short lines, front-loaded with the use case, and every sentence adds value: when to use, parameters, and an example of the output. No wasted words.

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 no parameters and an output schema present, the description is complete. It explains when to use it, confirms no arguments are needed, and gives a concrete example of the return structure, making it easy for an agent to invoke correctly.

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?

The tool has zero parameters, and the description clearly states 'Params: none' and 'call with no args,' fully covering the input requirements. This matches the baseline for no-parameter tools.

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 clearly states the tool's purpose: 'need CODATA/math constant names (pi, e, qe, …) usable in evaluate.' The example output shows it returns a list of constants with name, value, and unit, distinguishing it from sibling tools like evaluate.

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 'When:' prefix explicitly tells the agent when to use this tool, specifically when needing constant names for use in evaluate. It does not mention exclusions or alternatives, but the context is clear and actionable.

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

list_opA

When: LIST utilities (sequence, cumsum, sort, ΔList) — not stats summaries. Params: op=seq|cumsum|sort_a|sort_d|delta; seq needs expression,start,end[,step]; others need data; angle_mode for seq expressions. Example: op="cumsum", data=[1,2,3]; or op="seq", expression="2*x", start=1, end=3.

ParametersJSON Schema
NameRequiredDescriptionDefault
opYes
endNo
dataNo
stepNo
startNo
angle_modeNorad
expressionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It explains parameter dependencies and provides an example, but does not mention output format, error behavior, or side effects. This adds some context but lacks deeper behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured with 'When:', 'Params:', and 'Example:' sections. Every sentence serves a purpose, and the most important usage context is front-loaded.

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?

Given the tool's complexity (7 parameters, multiple modes), the description covers the essential usage thoroughly. It lacks some minor details like the meaning of sort_a vs sort_d and angle_mode values, but the presence of an output schema and clear parameter rules make it adequate.

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

Parameters5/5

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

Schema coverage is 0%, but the description compensates fully by defining op values and explaining which parameters are needed for each op. All 7 parameters are addressed, including the angle_mode for seq expressions. This is far more informative than the bare schema.

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 clearly states the tool performs LIST utilities (sequence, cumsum, sort, ΔList) and explicitly distinguishes it from stats summaries. The allowed op values are listed, providing a specific verb+resource for each operation.

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 description gives a clear 'When' clause specifying list utilities and excluding stats summaries, which implicitly guides away from sibling stats tools. It also gives usage rules such as 'seq needs expression,start,end[,step]' and 'others need data', helping the agent choose the correct parameter sets.

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

list_operationsA

When: unknown function/operator name after evaluate unknown_token, or exploring arity. Params: none. Example: call with no args → operations[{name,arity,description,angle_sensitive}].

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 burden. It discloses the return format (operations[{name,arity,description,angle_sensitive}]) and confirms no arguments are needed. It does not explicitly state it is read-only or side-effect-free, but that is strongly implied for a list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, using two short sentences plus an example. Every element—when to use, parameter expectations, and return shape—is packed efficiently, with no wasted words.

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?

This is a simple introspection tool with no parameters and a clear output example. The description covers the trigger scenario and the expected return structure, which is sufficient for an agent to select and invoke it correctly. The output schema (if present) would further detail the fields, but the description already provides the essentials.

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?

The tool has zero parameters, which yields a baseline of 4. The description reinforces this with 'Params: none' and 'call with no args', leaving no ambiguity about invocation.

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 indicates when to use the tool ('unknown function/operator name... or exploring arity') but does not explicitly state 'list operations' as the core action. The name and example make the purpose clear, and it distinguishes from sibling tools like list_constants and list_unit_conversions.

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 provides explicit usage conditions: when an unknown function/operator name appears after evaluate unknown_token, or when exploring arity. It also states 'Params: none' and gives a call example, making it clear how and when to invoke the tool.

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

list_unit_conversionsA

When: before convert_unit, or unknown conversion_id / unit pair. Params: none. Example: call with no args → conversions[{id,from,to,…}].

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses that the tool takes no arguments and returns a list of conversion objects, which is sufficient for a simple read-only list operation. It does not explicitly state side effects, but none are expected for a list call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, with three short lines covering usage timing, parameters, and an example. Every piece of text adds value; there is no fluff or repetition.

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 parameterless tool with an output schema available, the description provides all necessary context: when to use it, that it needs no arguments, and what the return shape looks like. This is complete and self-sufficient.

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?

The tool has zero parameters, so the baseline is 4. The description confirms 'Params: none,' which is all the parameter semantics needed. The input schema already reflects an empty parameter set.

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 clearly states the tool lists unit conversions and explicitly frames it as a precursor to convert_unit. The example output shape (conversions[{id,from,to,…}]) makes the purpose concrete and distinguishes it from the sibling convert_unit tool.

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 description gives explicit timing: 'before convert_unit' and when the conversion_id or unit pair is unknown. It does not list exclusions or alternative tools beyond convert_unit, but the context is clear enough for an agent to decide when to call it.

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

matrix_opA

When: matrix/vector algebra (not infix evaluate). Params: op=add|sub|mul|transpose|det|inv|identity|ref|rref|eigen|dot|cross|norm|angle|unit; matrices=[A] or [A,B]; vector=[…] for norm/unit; n for identity; angle_mode for angle. Example: op="det", matrices=[[[1,2],[3,4]]].

ParametersJSON Schema
NameRequiredDescriptionDefault
nNo
opYes
vectorNo
matricesNo
angle_modeNorad

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It explains parameter roles but omits return formats, error handling (e.g., singular matrix for inverse), and potential ambiguities like how 'mul' handles two matrices or a matrix and a vector.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-organized: When, Params, Example. It front-loads the purpose and uses a compact format that conveys essential information without wasted words.

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

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 5 parameters and 16 operations, the description covers core usage but lacks detailed behavioral context and edge cases. The presence of an output schema mitigates the need to explain return values, but the single example is not enough to disambiguate all operations.

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?

The schema has zero descriptions, so the description compensates by defining the op values, matrices, vector, n, and angle_mode. It provides an example and clarifies parameter roles, though it leaves some interaction details ambiguous (e.g., vector usage for angle or cross).

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 explicitly states the tool handles matrix/vector algebra and distinguishes it from infix evaluate, which is a sibling tool. The purpose is clear and specific, covering a well-defined domain with a list of operations.

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 opening 'When: matrix/vector algebra (not infix evaluate)' provides explicit context for when to choose this tool over the sibling evaluate. It clearly delineates the tool's use case, though it does not name other alternatives.

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

polA

When: convert rectangular (x,y) to polar (r,θ). Prefer over manual atan2 for this mode. Params: x, y; angle_mode for θ (default deg). Example: x=2, y=2, angle_mode="deg" → r≈2.828, θ=45.

ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
angle_modeNodeg

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses the default angle_mode ('deg'), provides an example with expected output, and implies a pure conversion. However, it does not state return format explicitly, error behavior, or that it is non-destructive. The example gives some transparency, but not complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: a 'When' clause, a param line, and an example. Every sentence serves a purpose. It is front-loaded with the key trigger, making it easy for an agent to quickly determine applicability.

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?

The tool is simple, and an output schema exists (though not shown) which likely describes return values. The description covers the purpose, parameters, and a concrete example. It doesn't mention edge cases or alternative sibling tools, but for a straightforward conversion, it is adequately complete given the output schema.

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?

The schema description coverage is 0%, so the description must compensate. It introduces x and y as rectangular coordinates and angle_mode for θ, with a default of 'deg'. This adds meaning beyond the bare schema. However, it doesn't enumerate allowed values for angle_mode (e.g., 'rad') or clarify that x and y are numbers (though schema states type). The example helps but is not exhaustive.

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 clearly states the tool's function: 'convert rectangular (x,y) to polar (r,θ)'. It uses a specific verb ('convert') and identifies the resource (rectangular to polar). It also distinguishes itself from manual calculation by saying 'Prefer over manual atan2', and the sibling 'rec' (likely reverse conversion) is implicitly contrasted by the phrase 'for this mode'.

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 begins with 'When: convert rectangular (x,y) to polar (r,θ)', explicitly stating the condition for use. It also provides a clear alternative to avoid ('manual atan2'), giving practical guidance. While it doesn't mention sibling tools like 'rec', the 'When' clause and preference note are sufficient.

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

productB

When: discrete product Π f(x) for integer x from start to end inclusive. Params: expression in x; start; end; angle_mode. Example: expression="x", start=1, end=4 → 24.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYes
startYes
angle_modeNorad
expressionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

The description discloses that the range is inclusive and x is integer, but it omits critical behavioral details such as how angle_mode affects trigonometric expressions and what the output looks like. With no annotations, these missing traits leave significant ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences: definition, params, and example. Every sentence carries useful information with no redundancy, making it efficient and easy to parse.

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

Completeness3/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 are documented elsewhere. However, angle_mode semantics and allowed expression syntax are left unaddressed, leaving notable gaps. The description is minimally complete but not thorough.

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

Parameters2/5

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

The description explains expression is in x and start/end are integer bounds via the example, but angle_mode is completely unexplained despite having a default and no schema description. With 0% schema coverage, the description needed to compensate more for this parameter.

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 clearly states the tool computes the discrete product of f(x) for integer x from start to end inclusive. This specific verb-resource pair distinguishes it from siblings like 'summation' and other math tools.

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?

The 'When:' phrasing implies usage for product calculations, but it does not explicitly mention alternatives like summation or any exclusions. The guidance is implied rather than directly stated.

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

recA

When: convert polar (r,θ) to rectangular (x,y). Params: r, theta; angle_mode for θ (default deg). Example: r=2, theta=90, angle_mode="deg".

ParametersJSON Schema
NameRequiredDescriptionDefault
rYes
thetaYes
angle_modeNodeg

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context about angle_mode defaulting to degrees, but it does not describe output format, error handling, or edge cases. For a simple pure conversion, this is adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is highly concise and well-structured. The purpose is front-loaded in the first phrase, followed by parameter details and a clarifying example. Every sentence earns its place with no redundant or vague content.

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?

Given the tool's simplicity and the presence of an output schema, the description covers the core essentials: operation, parameters, default unit, and example. It does not mention the inverse operation (pol) or potential edge cases, but these are minor gaps for a pure math conversion tool.

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

Parameters5/5

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

Schema coverage is 0%, and the description fully compensates by explaining that r is the radius, theta is the angle, and angle_mode specifies the angular unit (default deg). The example further clarifies usage, adding substantial meaning beyond the bare schema titles.

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 clearly states the tool's function: convert polar (r,θ) to rectangular (x,y). It uses a specific verb and resource, making the purpose unambiguous. However, it does not explicitly distinguish from sibling 'pol' (likely the reverse operation), so it misses the full mark for differentiation.

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 description opens with 'When:' to indicate the specific use case (converting polar coordinates), providing clear context. It does not mention alternatives or exclusions, such as recommending the 'pol' tool for the reverse conversion, so it lacks explicit when-not guidance.

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

solve_inequalityA

When: solve polynomial inequality a0+…+an x^n (degree 1–4). Params: coefficients=[a0,...,an]; relation=">"|">="|"<"|"<=". Example: coefficients=[-1,1], relation=">" for x-1>0.

ParametersJSON Schema
NameRequiredDescriptionDefault
relationYes
coefficientsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

Discloses the degree range (1–4) and shows a concrete example, but with no annotations, it doesn't describe output format, error handling, or side effects. The output schema covers return values, so some burden is relieved.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three-line structured description with 'When:', 'Params:', and 'Example:' sections. No wasted words, though it could be slightly more verbose for 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?

Covers the essential operational context: degree limitation, parameter semantics, and an example. It doesn't explain what the solution looks like, but the output schema exists; for a tool of this simplicity it's adequate.

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

Parameters5/5

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

Schema has no property descriptions (0% coverage), so the description fully compensates: it defines coefficients as [a0,...,an], lists allowed relation values, and provides a worked example.

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?

Clearly states it solves polynomial inequalities of degree 1–4, with explicit parameter description and example. Distinguishes from sibling tools like solve_polynomial (equations) and solve_linear by its inequality focus and degree range.

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?

Provides a 'When:' clause specifying the tool's intended use (polynomial inequality solving). It does not explicitly list alternative tools or exclusions, but the degree constraint and inequality nature imply when not to use it.

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

solve_linearA

When: square linear system Ax=b (not polynomial roots or f(x)=0). Params: either A (n×n) and b (len n), or coefficients as augmented n×(n+1). Max n=32. Example: A=[[2,1],[1,3]], b=[1,2].

ParametersJSON Schema
NameRequiredDescriptionDefault
ANo
bNo
coefficientsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior2/5

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

There are no annotations, so the description carries the full burden of behavioral disclosure. It mentions the constraint 'Max n=32' and input alternatives, but does not state what the tool returns (e.g., the solution vector) or how it handles singular or ill-conditioned systems. The description focuses on when to use it rather than what it does behaviorally.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise—three short lines covering usage, parameters, and an example. Every sentence adds value, no fluff or repetition. It is well-structured with clear labels ('When', 'Params', 'Example').

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?

Given the tool's simplicity and the existence of an output schema (which handles return values), the description adequately covers the key aspects: usage scope, parameter forms, constraints, and differentiation from siblings. The only gaps are edge-case behaviors like singular systems, which are not typically necessary for basic use.

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

Parameters5/5

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

The schema has no parameter descriptions (0% coverage), but the description compensates well by explaining that 'A' is an n×n matrix, 'b' is length n, and 'coefficients' is an augmented n×(n+1) matrix. It also clarifies the mutually exclusive usage of A/b vs coefficients. The example further illustrates the parameter format.

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 explicitly states 'square linear system Ax=b' which clearly defines the tool's purpose as solving linear systems. It also distinguishes from polynomial roots and f(x)=0, effectively separating it from sibling tools like solve_polynomial and solve_root.

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 provides explicit usage context with 'When: square linear system Ax=b' and explicitly excludes 'polynomial roots or f(x)=0'. This helps the agent decide when to use this tool over alternatives. It also clarifies the two input formats (A/b or augmented matrix), giving additional guidance.

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

solve_polynomialA

When: roots of a polynomial a0+…+an x^n (degree 1–4), not general f(x). Params: coefficients=[a0,...,an]; allow_complex=bool (default true). Example: coefficients=[-2,0,1] for x^2-2=0.

ParametersJSON Schema
NameRequiredDescriptionDefault
coefficientsYes
allow_complexNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the behavioral transparency burden. It discloses the degree limit (1–4) and the default allow_complex behavior, but it does not mention return format, error handling for invalid degrees, or how complex roots are represented. This is moderately transparent but leaves gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: three short lines covering when, parameters, and an example. Every sentence serves a purpose and the key information is front-loaded. No wasted words.

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?

Given the tool's simplicity, the description covers scope, parameters, and an example. An output schema exists, so return value details are not required. It could mention edge cases like out-of-range degrees, but the 'degree 1–4' qualification already sets expectations. Overall, the description is mostly complete for this task.

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

Parameters5/5

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

The schema has zero description coverage, but the description fully compensates by explaining both parameters: coefficients as an ordered list a0...an and allow_complex as a boolean with default true. The example clarifies coefficient ordering with a concrete polynomial (x^2-2=0).

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 clearly states the tool's purpose: finding roots of a polynomial a0+…+an x^n with degree 1–4. It specifies the resource (polynomial) and the action (find roots), and distinguishes itself from general root-finding with 'not general f(x)'.

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 use it: for polynomial roots of degree 1–4. It also provides a when-not case ('not general f(x)'), implying alternative tools (like solve_root) for general functions. This gives clear usage context.

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

solve_ratioA

When: proportion a:b = c:d with one unknown. Params: three of a,b,c,d known; solve_for=a|b|c|d|x (x = the single missing slot). Example: a=2, b=3, d=6, solve_for="c".

ParametersJSON Schema
NameRequiredDescriptionDefault
aNo
bNo
cNo
dNo
solve_forNox

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the core operation, the required input shape, and the meaning of solve_for including the 'x' shorthand. Output format is not described, but an output schema exists and this is a pure calculation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short, purposeful lines: condition, parameter contract, and example. It is front-loaded with 'When:' and contains no filler or redundant information.

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 simple calculator tool with no annotations and an output schema present, this description covers all necessary invocation details: the equation type, the known/unknown requirement, the solve_for mechanism, and a concrete example. No critical gaps remain.

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

Parameters5/5

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

The input schema has no textual descriptions for parameters, only titles and defaults. The description compensates fully by explaining that three of a,b,c,d must be known, defining solve_for's allowed values (a|b|c|d|x), and clarifying that x means the single missing slot. The example adds further clarity.

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 explicitly defines the tool as solving a proportion a:b=c:d with one unknown, and the example confirms that behavior. This clearly distinguishes it from sibling tools like solve_linear or solve_polynomial.

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 opening 'When:' immediately states the intended use case, and the parameter contract (three knowns, solve_for target) is explicit. It does not mention when-not to use or alternatives, but the context is clear enough for correct selection.

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

solve_rootA

When: numeric root of infix f(x)=0 (prefer over guessing). Params: expression in x; prefer bracket=[a,b]; else guess; angle_mode for trig in f. Example: expression="x^2-2", bracket=[0,2].

ParametersJSON Schema
NameRequiredDescriptionDefault
guessNo
bracketNo
angle_modeNorad
expressionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

With no annotations, the description explains the bracket/guess strategy and angle_mode for trig functions, but does not disclose return value, failure behavior, or whether it finds all roots or just one.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description uses a compact labeled format ('When:', 'Params:', 'Example:') and contains only essential information, with no filler.

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?

The description covers purpose, parameters, and an example. While it could include more about output or edge cases, the presence of an output schema and the simple nature of a numeric root solver make it sufficiently complete.

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

Parameters5/5

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

The schema provides zero descriptions, but the description explains that expression is in x, bracket is a preferred interval, guess is an alternative, and angle_mode affects trig functions in f. The example demonstrates usage.

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 clearly states it solves for the numeric root of an infix expression f(x)=0. This distinguishes it from polynomial, linear, and inequality solvers among siblings.

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?

It explicitly says 'When: numeric root of infix f(x)=0', providing a clear trigger for use. It also advises to prefer bracket over guess, but does not name alternative tools for other root types.

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

stats_1varA

When: one-variable summary stats, or STAT Norm Dist t/P/Q/R from a data list. Params: data (required); optional freq (same length); optional norm_x → adds t,P,Q,R (t=(x−mean)/σ_pop; P:−∞→t, Q:0→t, R:t→+∞). Example: data=[1,2,3,4,5], norm_x=4.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYes
freqNo
norm_xNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 transparency burden. It discloses the optional freq constraint, the effect of norm_x, and the exact formulas for t, P, Q, and R. It does not address edge cases like mismatched lengths or empty data, but the core behavior is clearly specified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-organized: a usage statement, parameter list, formula notation, and a concrete example. No sentence is wasted, and the dense notation is appropriate for a calculator tool.

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?

Given the tool's simplicity, the presence of an output schema, and no annotations, the description covers purpose, parameters, formulas, and example usage. It is sufficient for an agent to select and invoke the tool correctly without seeking additional context.

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

Parameters5/5

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

Schema descriptions are absent (0% coverage), so the description must compensate, and it does: it marks data as required, clarifies freq must be same length, and defines norm_x's role through formulas and an example. Each parameter's meaning goes well beyond the bare type definitions.

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 clearly identifies the resource as 'one-variable summary stats' and the optional normal-distribution t/P/Q/R calculations, which distinguishes it from sibling tools like stats_2var. However, it lacks an explicit verb such as 'compute' or 'calculate,' relying on the noun 'stats' to convey the action.

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?

It opens with 'When: one-variable summary stats...' providing clear applicability. It implies exclusion of two-variable cases by naming 'one-variable,' but does not explicitly name alternatives or state when not to use it.

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

stats_2varA

When: paired (x,y) stats and regression — not single-list stats_1var. Params: x,y equal length; model=linear|quadratic|logarithmic|exp|abexp|power|inverse| cubic|quartic|logistic|medmed (default linear); optional freq, predict_y_at, predict_x_at. Example: x=[1,2,3], y=[2,4,6], model="linear".

ParametersJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
freqNo
modelNolinear
predict_x_atNo
predict_y_atNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses behavioral constraints such as equal-length x and y, optional parameters, and the list of supported regression models. However, it does not describe output shape, error behavior, or what the computed statistics/regression results actually contain beyond the model list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured with a 'When' header, a 'Params' section, and an example. Every sentence adds value, and the most important usage signal (paired vs single-list) is front-loaded. No filler or repetition.

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?

Given that an output schema exists (so return values need not be described) and the tool is a focused calculator, the description covers the essential aspects: when to use it, the core parameters, model options, and an example. Minor gaps remain around the semantics of freq and the predict arguments, but these are largely self-explanatory or covered by the schema.

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 must compensate. It does so by explaining that x and y must be equal length, listing the supported model values with the default, noting freq/predict_y_at/predict_x_at as optional, and giving a concrete example. This goes well beyond the bare schema, though the meaning of freq and the predict params is left implicit.

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 clearly states that this tool handles paired (x,y) stats and regression, and it explicitly distinguishes itself from stats_1var for single-list stats. The main verb is implied rather than stated directly ('When: paired...'), but the resource and operation are unambiguous.

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?

Provides an explicit 'When' clause that tells the agent exactly when to use this tool and names the alternative (stats_1var) for single-list stats. The parameter list and example further clarify usage context, making the decision between siblings clear.

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

stats_testA

When: STAT hypothesis tests (not descriptive stats_1var / regression stats_2var). Params: type=z_test|t_test|2_samp_t_test|1_prop_z_test|2_prop_z_test|anova|linreg_ttest; pass editor fields for that type (data/sigma/mu0, x/n/p0, lists for ANOVA, …); alternative; pooled for two-sample. Example: type="t_test", data=[1,2,3], mu0=0.

ParametersJSON Schema
NameRequiredDescriptionDefault
nNo
xNo
n1No
n2No
p0No
x1No
x2No
mu0No
dataNo
typeYes
data2No
listsNo
sigmaNo
pooledNo
alternativeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden. It explains that the tool performs hypothesis tests and requires type-specific fields, but it does not disclose potential side effects, error behavior, or that it is a pure computation. This is average for a calculator-like tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured with 'When:', 'Params:', and 'Example:' sections. Every sentence adds value, and the example is a useful illustration without redundancy.

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?

Given 15 parameters, no annotations, and an existing output schema, the description covers the core usage (test types, required fields, alternative, pooled) sufficiently. However, it omits some details like acceptable alternative values and exact field combinations for every test, leaving minor gaps.

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%, but the description compensates by mapping type to required fields (e.g., data/sigma/mu0, x/n/p0, lists for ANOVA). It does not fully document every parameter (e.g., data2, x1/x2), but the type-driven approach provides practical guidance beyond the schema's raw field names.

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 clearly states 'STAT hypothesis tests' and lists the specific test types (z_test, t_test, etc.), making the tool's purpose explicit. It directly distinguishes from siblings by saying 'not descriptive stats_1var / regression stats_2var'.

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 'When:' header explicitly defines when to use this tool and excludes two sibling tools. The 'Params:' section gives test-specific parameter guidance, and the example provides a concrete invocation, making usage clear.

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

summationA

When: discrete sum Σ f(x) for integer x from start to end inclusive. Params: expression in x; start; end; angle_mode. Example: expression="x+1", start=1, end=5.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYes
startYes
angle_modeNorad
expressionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries full responsibility for behavioral disclosure. It discloses the inclusive integer range and the presence of an angle_mode parameter, but does not describe output format, error handling, or how angle_mode affects the expression. This is only partial transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely compact and front-loaded, starting with the 'When' condition. Each sentence adds value: the operation, the parameter list, and an example, with no redundant filler.

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?

The tool is simple and has an output schema, so return values need not be described. The description covers the core behavior, parameter list, and an example. The angle_mode parameter is left without explanation, and edge cases like start>end are not mentioned, but the description is still sufficient for tool selection and basic invocation.

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?

The schema has 0% description coverage, so the description must compensate. It identifies all four parameters: expression in x, start, end, and angle_mode, and provides a concrete example. However, angle_mode's semantics are not explained beyond its name and default, and start/end are only clarified as inclusive via the description.

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 clearly states the tool computes a discrete sum Σ f(x) for integer x from start to end inclusive. This specific verb+resource formula distinguishes it from sibling tools like integrate or product, and the 'When' prefix makes the operation explicit.

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 'When:' clause explicitly defines when to use the tool: discrete summation over an integer range. It does not explicitly name alternatives, but the phrase 'discrete sum' implicitly contrasts with continuous integration and product operations among siblings, providing adequate usage context.

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

tableB

When: generate f(x) [and optional g(x)] values from start to end by step. Params: expression in x; start; end; step; optional expression2; angle_mode. Example: expression="2*x", start=0, end=2, step=1, expression2="x^2".

ParametersJSON Schema
NameRequiredDescriptionDefault
endYes
stepYes
startYes
angle_modeNorad
expressionYes
expression2No

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations present, the description must carry behavioral disclosure, and it does state the core behavior: producing values for f(x) and optional g(x) over a step range. However, it leaves important behavioral details implicit, such as whether endpoints are inclusive, how angle_mode affects trig expressions, and how step direction or zero step is handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured with a purpose line, parameter list, and example. All content earns its place and the key information is front-loaded, avoiding unnecessary prose.

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

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has moderate complexity (6 params, no annotations, but an output schema) and the description covers the basic recipe as well as an example. It is viable but has gaps: it does not explain angle_mode options, endpoint inclusivity, or expression grammar, which may leave the agent guessing in edge cases.

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?

The input schema provides no descriptions (0% coverage), so the description compensates by explaining expression as a function of x, start/end/step as a numeric range, expression2 as optional, and angle_mode as a setting. The example (expression='2*x', start=0, end=2, step=1, expression2='x^2') makes the usage concrete, though angle_mode values are not elaborated.

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 states the tool generates f(x) and optionally g(x) values over a range by step, with 'expression in x; start; end; step' plus 'optional expression2'. This clearly conveys the core action and scope, though it does not explicitly contrast it with sibling tools such as evaluate or summation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

The description opens with 'When:' but the text merely restates what the tool does ('generate f(x)... values from start to end by step') rather than specifying when to prefer this tool over alternatives. No exclusions, prerequisites, or sibling-comparison guidance are provided.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 33 tool updatesv0.1.0
    • First observedbase_arith
    • First observedbase_convert
    • First observedconvert_unit
    • First observeddecimal_to_dms
    • First observeddifferentiate
    • First observeddistribution
    • First observeddms_to_decimal
    • First observedeng_format
    • First observedeng_shift
    • First observedevaluate
    • First observedfactorize
    • First observedfinance_tvm
    • First observedfmax
    • First observedfmin
    • First observedintegrate
    • First observedlist_constants
    • First observedlist_op
    • First observedlist_operations
    • First observedlist_unit_conversions
    • First observedmatrix_op
    • First observedpol
    • First observedproduct
    • First observedrec
    • First observedsolve_inequality
    • First observedsolve_linear
    • First observedsolve_polynomial
    • First observedsolve_ratio
    • First observedsolve_root
    • First observedstats_1var
    • First observedstats_2var
    • First observedstats_test
    • First observedsummation
    • First observedtable

TDQS

A3.9/5.0

Scored across 33 tools

Disambiguation5/5

Each tool has a clearly distinct purpose, from basic evaluation to specific operations like matrix algebra, statistics, and unit conversion. Even similar tools like solve_polynomial and solve_root are explicitly differentiated, and helper tools like list_operations aid discovery without overlap.

Naming Consistency4/5

Most tools follow a consistent snake_case verb_noun pattern (solve_*, list_*, convert_*), but a few abbreviations (pol, rec) and single-word names (table, product) introduce minor inconsistency.

Tool Count2/5

With 33 tools, the count exceeds the recommended range for a well-scoped server. While each tool serves a distinct calculator function, the sheer number feels heavy and may burden an agent's selection process, per the 25+ threshold.

Completeness5/5

The tool set comprehensively covers calculator domains: arithmetic, algebra, calculus, statistics, probability, matrices, base-n, finance, and conversions. Helpers for listing operations and constants ensure discoverability, with no obvious missing capabilities for a scientific calculator.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    A calculator server that exposes mathematical functions as tools (add, subtract, multiply, divide, square, power, square root), enabling language models to perform calculations through Model Context Protocol (MCP).
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    sci_calc_mcp is a lightweight, high-performance Model Context Protocol (MCP) server that exposes scientific calculator operations as atomic tools.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    An MCP server that integrates the MathJS library to provide AI models with advanced calculation capabilities, including support for complex numbers, matrices, and unit conversions. It supports both stdio and HTTP transports for seamless integration with clients like Claude Desktop and GitHub Copilot.
    1
    9
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server providing 150+ mathematical functions across arithmetic, trigonometry, statistics, unit conversions, and more, consolidated into 15 powerful tools for seamless integration with VS Code Copilot and other MCP-compatible clients.
    MIT