Skip to content

Math MCP Learning

by clouatre-labs · remote · local (pypi) · no sign-in to list tools · v0.12.5 · published by GitHub user clouatre-labs

Educational MCP server with 17 math/stats tools, visualizations, and persistent workspace

Changes · 17

17 tools: 17 change things.

Scanned Oct 21, 2026

8 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http math-learning https://math-mcp.fastmcp.app/mcp

Findings

Matches of fixed checks, with the text they matched.

8 warn
  • The server marks "calc_expression" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "evaluate": a word for a change.

    What this check looks for
  • The server marks "calc_units" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "convert": a word for a change.

    What this check looks for
  • The server marks "plot_function" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The server marks "plot_histogram" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "create": a word for a change.

    What this check looks for
  • The server marks "plot_line_chart" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "create": a word for a change.

    What this check looks for
  • The server marks "plot_scatter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "create": a word for a change.

    What this check looks for
Show 2 more findings
  • The server marks "plot_box_plot" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "create": a word for a change.

    What this check looks for
  • The server marks "plot_financial_line" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "generate": a word for a change.

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

17 tools

Changes things 17Claude Code: ask
  • calc_expressionSafely evaluate mathematical expressions with support for basic operations and math functions.1 finding

    Why it is in this group

    • The description's first verb is "evaluate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "calc_expression" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "evaluate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Safely evaluate mathematical expressions with support for basic operations and math functions. Supported operations: +, -, *, /, **, () Supported functions: sin, cos, tan, log, sqrt, abs, pow

    Annotations the server declares

    • idempotentHint: true
    • readOnlyHint: true
    • title: Mathematical Calculator
  • calc_interestCalculate compound interest for investments.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Calculate compound interest for investments. Formula: A = P(1 + r/n)^(nt) Where: - P = principal amount - r = annual interest rate (as decimal) - n = number of times interest compounds per year - t = time in years

    Annotations the server declares

    • idempotentHint: true
    • readOnlyHint: true
    • title: Compound Interest Calculator
  • calc_statisticsPerform statistical calculations on a list of numbers.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Perform statistical calculations on a list of numbers. Available operations: mean, median, mode, std_dev, variance

    Annotations the server declares

    • idempotentHint: true
    • readOnlyHint: true
    • title: Statistical Analysis
  • calc_unitsConvert between different units of measurement.1 finding

    Why it is in this group

    • The description's first verb is "convert": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "calc_units" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "convert": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Convert between different units of measurement. Supported unit types: - length: mm, cm, m, km, in, ft, yd, mi - weight: g, kg, oz, lb - temperature: c, f, k (Celsius, Fahrenheit, Kelvin)

    Annotations the server declares

    • idempotentHint: true
    • readOnlyHint: true
    • title: Unit Converter
  • matrix_determinantCalculate the determinant of a square matrix.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Calculate the determinant of a square matrix.

    Annotations the server declares

    • idempotentHint: true
    • readOnlyHint: true
    • title: Matrix Determinant
  • matrix_eigenvaluesCalculate the eigenvalues of a square matrix.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Calculate the eigenvalues of a square matrix.

    Annotations the server declares

    • idempotentHint: true
    • readOnlyHint: true
    • title: Matrix Eigenvalues
  • matrix_inverseCalculate the inverse of a square matrix.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Calculate the inverse of a square matrix.

    Annotations the server declares

    • idempotentHint: true
    • readOnlyHint: true
    • title: Matrix Inverse
  • matrix_multiplyMultiply two matrices (A × B).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Multiply two matrices (A × B).

    Annotations the server declares

    • idempotentHint: true
    • readOnlyHint: true
    • title: Matrix Multiplication
  • matrix_transposeTranspose a matrix (swap rows and columns).No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Transpose a matrix (swap rows and columns).

    Annotations the server declares

    • idempotentHint: true
    • readOnlyHint: true
    • title: Matrix Transpose
  • plot_box_plotCreate a box plot for comparing distributions (requires matplotlib).1 finding

    Why it is in this group

    • The description's first verb is "create": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "plot_box_plot" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "create": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Create a box plot for comparing distributions (requires matplotlib).

    Annotations the server declares

    • idempotentHint: true
    • readOnlyHint: true
    • title: Box Plot
  • plot_financial_lineGenerate and plot synthetic financial price data (requires matplotlib).1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "plot_financial_line" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate and plot synthetic financial price data (requires matplotlib). Creates realistic price movement patterns for educational purposes. Does not use real market data.

    Annotations the server declares

    • idempotentHint: true
    • readOnlyHint: true
    • title: Financial Line Chart
  • plot_functionGenerate mathematical function plots (requires matplotlib).1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "plot_function" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generate mathematical function plots (requires matplotlib).

    Annotations the server declares

    • idempotentHint: true
    • readOnlyHint: true
    • title: Function Plotter
  • plot_histogramCreate statistical histograms (requires matplotlib).1 finding

    Why it is in this group

    • The description's first verb is "create": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "plot_histogram" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "create": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Create statistical histograms (requires matplotlib).

    Annotations the server declares

    • idempotentHint: true
    • readOnlyHint: true
    • title: Statistical Histogram
  • plot_line_chartCreate a line chart from data points (requires matplotlib).1 finding

    Why it is in this group

    • The description's first verb is "create": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "plot_line_chart" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "create": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Create a line chart from data points (requires matplotlib).

    Annotations the server declares

    • idempotentHint: true
    • readOnlyHint: true
    • title: Line Chart
  • plot_scatterCreate a scatter plot from data points (requires matplotlib).1 finding

    Why it is in this group

    • The description's first verb is "create": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "plot_scatter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "create": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Create a scatter plot from data points (requires matplotlib).

    Annotations the server declares

    • idempotentHint: true
    • readOnlyHint: true
    • title: Scatter Plot
  • workspace_loadLoad previously saved calculation result from workspace.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Load previously saved calculation result from workspace.

    Annotations the server declares

    • idempotentHint: true
    • readOnlyHint: true
    • title: Load Variable
  • workspace_saveSave calculation to persistent workspace (survives restarts).No findings

    Why it is in this group

    • The name "workspace_save" says "save": a word for a change.
    Description, as the server wrote it
    Save calculation to persistent workspace (survives restarts).

    Annotations the server declares

    • idempotentHint: false
    • readOnlyHint: false
    • title: Save Calculation to Workspace

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 0.12.5. Values in angle brackets are yours to fill in.

claude mcp add --transport http math-learning https://math-mcp.fastmcp.app/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [],
    "ask": [
      "mcp__math-learning__calc_expression",
      "mcp__math-learning__calc_statistics",
      "mcp__math-learning__calc_interest",
      "mcp__math-learning__calc_units",
      "mcp__math-learning__matrix_multiply",
      "mcp__math-learning__matrix_transpose",
      "mcp__math-learning__matrix_determinant",
      "mcp__math-learning__matrix_inverse",
      "mcp__math-learning__matrix_eigenvalues",
      "mcp__math-learning__workspace_save",
      "mcp__math-learning__workspace_load",
      "mcp__math-learning__plot_function",
      "mcp__math-learning__plot_histogram",
      "mcp__math-learning__plot_line_chart",
      "mcp__math-learning__plot_scatter",
      "mcp__math-learning__plot_box_plot",
      "mcp__math-learning__plot_financial_line"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as math-learning. Review it before you use it.