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
17 tools: 17 change things.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things17Claude Code: ask: see these tools
- Only reads0Claude Code: allow
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/mcpFindings
Matches of fixed checks, with the text they matched.
- Warncalc_expression
The server marks "calc_expression" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "evaluate": a word for a change.
- Warncalc_units
The server marks "calc_units" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "convert": a word for a change.
- Warnplot_function
The server marks "plot_function" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "generate": a word for a change.
- Warnplot_histogram
The server marks "plot_histogram" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "create": a word for a change.
- Warnplot_line_chart
The server marks "plot_line_chart" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "create": a word for a change.
- Warnplot_scatter
The server marks "plot_scatter" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "create": a word for a change.
Show 2 more findingsShow fewer
- Warnplot_box_plot
The server marks "plot_box_plot" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "create": a word for a change.
The server marks "plot_financial_line" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "evaluate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "convert": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "create": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "generate": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "create": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "create": a word for a change.
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".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"idempotentHint":true}; The description's first verb is "create": a word for a change.
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/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .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.
