# Math MCP Learning

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

- name: io.github.clouatre-labs/math-mcp-learning-server
- version: 0.12.5
- connection class: R0 (autonomous)
- trust: 91/100
- quality: 78/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.clouatre-labs%2Fmath-mcp-learning-server
- tools: https://api.protogrid.dev/v1/servers/io.github.clouatre-labs%2Fmath-mcp-learning-server/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "math-mcp-learning-server": {
      "type": "http",
      "url": "https://math-mcp.fastmcp.app/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 85
- provenance: 80
- drivers: +repository +namespace-matches-repo +reachable +uptime-100% ~updated-50d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 78/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 17 of 17 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: calc_expression (destructiveHint, openWorldHint); calc_statistics (destructiveHint, openWorldHint); calc_interest (destructiveHint, openWorldHint); …
- pass `tools.token_cost`: about 2,959 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 17 tool changes in 30 days
- fail `stability.rug_pull`: 15 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: 100 (weight 15)

- pass `deps.known_vulns`: no known advisory in 69 resolved packages
- pass `deps.mcp_sdk_version`: mcp 1.30.0, no known advisory
- pass `deps.resolvable`: math-mcp-learning-server@0.12.5 resolved: 69 packages

- tools: 17, about 2,959 tokens to load them all
- tool set hash: d3cfe79fc8745c5ccd37f01ad900cfbd
- tools last changed: 2026-10-12T11:43:04.726Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.clouatre-labs/math-mcp-learning-server.svg)](https://protogrid.dev/servers/io.github.clouatre-labs/math-mcp-learning-server)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-12 `plot_financial_line` changed (description) **meaning changed**
  - before: Generate and plot synthetic financial price data (requires matplotlib). Creates realistic price movement patterns for educational purposes. Does not use real market data. Note: Use for time-series price data with optional moving average overlay. For general XY data, use plot_line_chart instead. Examples: plot_financial_line(days=60, trend='bullish') plot_financial_line(days=90, trend='volatile', start_price=150.0, color='orange')
  - after: Generate and plot synthetic financial price data (requires matplotlib). Creates realistic price movement patterns for educational purposes. Does not use real market data.
- 2026-10-12 `plot_box_plot` changed (description) **meaning changed**
  - before: Create a box plot for comparing distributions (requires matplotlib). Examples: plot_box_plot([[1, 2, 3, 4, 5], [2, 4, 6, 8, 10]], group_labels=["A", "B"]) plot_box_plot([[10, 20, 30], [15, 25, 35], [5, 15, 25]], title="Comparison")
  - after: Create a box plot for comparing distributions (requires matplotlib).
- 2026-10-12 `plot_scatter` changed (description) **meaning changed**
  - before: Create a scatter plot from data points (requires matplotlib). Examples: plot_scatter([1, 2, 3, 4], [1, 4, 9, 16], title="Correlation Study") plot_scatter([1, 2, 3], [2, 4, 5], color='purple', point_size=100)
  - after: Create a scatter plot from data points (requires matplotlib).
- 2026-10-12 `plot_line_chart` changed (description) **meaning changed**
  - before: Create a line chart from data points (requires matplotlib). Note: Use for general XY data. For time-series price data with optional moving average, use plot_financial_line instead. Examples: plot_line_chart([1, 2, 3, 4], [1, 4, 9, 16], title="Squares") plot_line_chart([0, 1, 2], [0, 1, 4], color='red', x_label='Time', y_label='Distance')
  - after: Create a line chart from data points (requires matplotlib).
- 2026-10-12 `plot_histogram` changed (description) **meaning changed**
  - before: Create statistical histograms (requires matplotlib). Examples: plot_histogram([1.0, 2.0, 2.5, 3.0, 3.5, 4.0, 5.0]) plot_histogram([10, 20, 30, 40, 50], bins=5, title="Test Scores")
  - after: Create statistical histograms (requires matplotlib).
- 2026-10-12 `plot_function` changed (description) **meaning changed**
  - before: Generate mathematical function plots (requires matplotlib). Examples: plot_function("x**2", (-5, 5)) plot_function("sin(x)", (-3.14, 3.14))
  - after: Generate mathematical function plots (requires matplotlib).
- 2026-10-12 `workspace_load` changed (description) **meaning changed**
  - before: Load previously saved calculation result from workspace. Examples: load_variable("portfolio_return") # Returns saved calculation load_variable("circle_area") # Access across sessions
  - after: Load previously saved calculation result from workspace.
- 2026-10-12 `workspace_save` changed (description) **meaning changed**
  - before: Save calculation to persistent workspace (survives restarts). Examples: save_calculation("portfolio_return", "10000 * 1.07^5", 14025.52) save_calculation("circle_area", "pi * 5^2", 78.54)
  - after: Save calculation to persistent workspace (survives restarts).
- 2026-10-12 `matrix_eigenvalues` changed (description) **meaning changed**
  - before: Calculate the eigenvalues of a square matrix. Note: Requires NumPy. Raises ValueError if NumPy is unavailable. Examples: matrix_eigenvalues([[4, 2], [1, 3]]) matrix_eigenvalues([[3, 0, 0], [0, 5, 0], [0, 0, 7]]) # Diagonal matrix
  - after: Calculate the eigenvalues of a square matrix.
- 2026-10-12 `matrix_inverse` changed (description) **meaning changed**
  - before: Calculate the inverse of a square matrix. Note: Requires NumPy. Raises ValueError if NumPy is unavailable. Examples: matrix_inverse([[1, 2], [3, 4]]) matrix_inverse([[2, 0], [0, 2]]) # Diagonal matrix
  - after: Calculate the inverse of a square matrix.

Full history: https://api.protogrid.dev/v1/servers/io.github.clouatre-labs%2Fmath-mcp-learning-server/changes

## Dependencies

- pypi math-mcp-learning-server@0.12.5: resolved, 68 dependencies, MCP SDK mcp 1.30.0

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0.

## Remotes

- https://math-mcp.fastmcp.app/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

- pypi math-mcp-learning-server@0.12.5

## Tools (17)

- `calc_expression`: Safely evaluate mathematical expressions with support for basic operations and math functions.

Supported operations: +, -, *, /, **, ()
Supported functions: sin, cos, tan, log, sqrt, abs, pow
- `calc_interest`: 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
- `calc_statistics`: Perform statistical calculations on a list of numbers.

Available operations: mean, median, mode, std_dev, variance
- `calc_units`: 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)
- `matrix_determinant`: Calculate the determinant of a square matrix.
- `matrix_eigenvalues`: Calculate the eigenvalues of a square matrix.
- `matrix_inverse`: Calculate the inverse of a square matrix.
- `matrix_multiply`: Multiply two matrices (A × B).
- `matrix_transpose`: Transpose a matrix (swap rows and columns).
- `plot_box_plot`: Create a box plot for comparing distributions (requires matplotlib).
- `plot_financial_line`: Generate and plot synthetic financial price data (requires matplotlib).

Creates realistic price movement patterns for educational purposes.
Does not use real market data.
- `plot_function`: Generate mathematical function plots (requires matplotlib).
- `plot_histogram`: Create statistical histograms (requires matplotlib).
- `plot_line_chart`: Create a line chart from data points (requires matplotlib).
- `plot_scatter`: Create a scatter plot from data points (requires matplotlib).
- `workspace_load`: Load previously saved calculation result from workspace.
- `workspace_save`: Save calculation to persistent workspace (survives restarts).
