calculator-mcp-server

v0.4.0 pre-1.0

A hardened math.js calculator MCP server — evaluate, simplify, and differentiate expressions.

calculator.caseyjhand.com/mcp
claude mcp add --transport http calculator-mcp-server https://calculator.caseyjhand.com/mcp
codex mcp add calculator-mcp-server --url https://calculator.caseyjhand.com/mcp
{
  "mcpServers": {
    "calculator-mcp-server": {
      "url": "https://calculator.caseyjhand.com/mcp"
    }
  }
}
gemini mcp add --transport http calculator-mcp-server https://calculator.caseyjhand.com/mcp
{
  "mcpServers": {
    "calculator-mcp-server": {
      "command": "bunx",
      "args": [
        "mcp-remote",
        "https://calculator.caseyjhand.com/mcp"
      ]
    }
  }
}
{
  "mcpServers": {
    "calculator-mcp-server": {
      "type": "http",
      "url": "https://calculator.caseyjhand.com/mcp"
    }
  }
}
curl -X POST https://calculator.caseyjhand.com/mcp \
  -H "Content-Type: application/json" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'

Tools

1

calculate

Evaluate math expressions, simplify algebraic expressions, or compute symbolic derivatives. One expression per call. Supports arithmetic, trigonometry, statistics, matrices, complex numbers, units, and combinatorics.

read
invocation
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "calculate",
    "arguments": {
      "expression": "<expression>"
    }
  }
}
schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "expression": {
      "type": "string",
      "minLength": 1,
      "description": "One mathematical expression per call — neither `;` nor newlines separate statements. Inside matrices, `;` separates rows (e.g. `[1, 2; 3, 4]`). Supports arithmetic (+, -, *, /, ^, %), functions across arithmetic/trig (sin, cos, sqrt, log, abs, round), statistics (mean, median, std, variance), combinatorics (factorial, permutations, combinations), and matrix (det, inv, transpose), plus constants (pi, e, phi, i), units (5 kg to lbs), and variables (when scope is provided). Standard notation `ln` and `arc*` (e.g. `arcsin`, `arctan`) is accepted alongside the math.js names `log` and `asin`/`atan`; common synonyms such as `stdev`, `permute`, `nCr`, and `length`/`len` resolve to their math.js names (`std`, `permutations`, `combinations`, `count`)."
    },
    "operation": {
      "default": "evaluate",
      "description": "Operation to perform. \"evaluate\" computes a numeric result (default). \"simplify\" reduces an algebraic expression symbolically (e.g., \"2x + 3x\" -> \"5 * x\"). Supports algebraic and trigonometric identities. When the simplifier cannot reduce the expression further (e.g. rational expressions requiring polynomial factoring), the result is returned unchanged and unchanged: true is set in the output. \"derivative\" computes the symbolic derivative (requires the variable parameter).",
      "type": "string",
      "enum": [
        "evaluate",
        "simplify",
        "derivative"
      ]
    },
    "variable": {
      "description": "Variable to differentiate with respect to. Required when operation is \"derivative\". Empty string is treated as omitted. Example: \"x\".",
      "anyOf": [
        {
          "type": "string",
          "const": "",
          "description": "Empty string — treated as omitted."
        },
        {
          "type": "string",
          "maxLength": 50,
          "pattern": "^[a-zA-Z_][a-zA-Z0-9_]*$",
          "description": "Variable identifier (alphanumeric and underscores, max 50 chars)."
        }
      ]
    },
    "scope": {
      "description": "Variable assignments for the expression. Example: { \"x\": 5, \"y\": 3 } makes \"x + y\" evaluate to 8.",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "number"
      }
    },
    "precision": {
      "description": "Significant digits (1–16) for numeric results. Omit for full precision. Empty string is treated as omitted. Ignored for symbolic operations (simplify, derivative).",
      "anyOf": [
        {
          "type": "string",
          "const": "",
          "description": "Empty string — treated as omitted."
        },
        {
          "type": "integer",
          "minimum": 1,
          "maximum": 16,
          "description": "Significant digits (integer, 1–16)."
        }
      ]
    },
    "numericType": {
      "default": "number",
      "description": "Numeric type for evaluate. \"number\" (default): 64-bit IEEE 754 float — fastest, standard precision. \"BigNumber\": arbitrary-precision decimal — use when intermediate values overflow 64-bit float (e.g. large factorial ratios like 10000!/9999!); slower than \"number\". \"Fraction\": exact rational arithmetic — eliminates floating-point rounding (e.g. 0.1 + 0.2 = 0.3 exactly); limited to expressions with exactly-rational results — an irrational or transcendental result (sqrt, sin, log, …) fails with fraction_unsupported, so use \"number\" or \"BigNumber\" for those. Ignored for symbolic operations (simplify, derivative). When \"number\" evaluation produces a non-finite result (undefined_result error), retry with \"BigNumber\".",
      "type": "string",
      "enum": [
        "number",
        "BigNumber",
        "Fraction"
      ]
    }
  },
  "required": [
    "expression",
    "operation",
    "numericType"
  ],
  "additionalProperties": false
}
view source ↗

Resources

1