{"name":"io.github.clouatre-labs/math-mcp-learning-server","slug":"clouatre-labs-math-mcp-learning-server","title":"Math MCP Learning","description":"Educational MCP server with 17 math/stats tools, visualizations, and persistent workspace","url":"https://mcp.market/server/clouatre-labs-math-mcp-learning-server","rating":null,"grade":"B","score":80,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":27,"stars":5,"forks":4,"downloads_week":null,"last_push_at":"2026-09-19T21:31:58.000Z","license":"NOASSERTION"},"uptime":{"percent":100,"checks":7,"ok":7,"last_checked_at":"2026-09-21T03:55:33.420Z","last_ok_at":"2026-09-21T03:55:33.420Z","latency_ms":806},"claimed":false,"transport":"mixed","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/clouatre-labs/math-mcp-learning-server","website":null,"version":"0.12.5","remotes":[{"type":"streamable-http","url":"https://math-mcp.fastmcp.app/mcp"}],"packages":[{"registryType":"pypi","identifier":"math-mcp-learning-server","version":"0.12.5","transport":{"type":"stdio"}}],"tools":[{"name":"calc_expression","description":"Safely evaluate mathematical expressions with support for basic operations and math functions.\n\nSupported operations: +, -, *, /, **, ()\nSupported functions: sin, cos, tan, log, sqrt, abs, pow\n\nNote:\n    Use this tool to evaluate a single mathematical expression. To compute descriptive statistics over a list of numbers, use the statistics tool instead.\n\nExamples:\n- \"2 + 3 * 4\" → 14\n- \"sqrt(16)\" → 4.0\n- \"sin(3.14159/2)\" → 1.0","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"expression":{"description":"Mathematical expression to evaluate. Supports +, -, *, /, **, and math functions (sin, cos, sqrt, log, etc.). Example: '2 * sin(pi/4) + sqrt(16)'","maxLength":500,"type":"string"}},"required":["expression"],"additionalProperties":false}},{"name":"calc_interest","description":"Calculate compound interest for investments.\n\nFormula: A = P(1 + r/n)^(nt)\nWhere:\n- P = principal amount\n- r = annual interest rate (as decimal)\n- n = number of times interest compounds per year\n- t = time in years\n\nExamples:\n    compound_interest(10000, 0.05, 5)  # $10,000 at 5% for 5 years → $12,762.82\n    compound_interest(5000, 0.03, 10, 12)  # $5,000 at 3% compounded monthly → $6,744.25","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"principal":{"description":"Initial investment amount in dollars (must be > 0), e.g. 1000.0","exclusiveMinimum":0,"type":"number"},"rate":{"description":"Annual interest rate as decimal 0.0-1.0 (e.g. 0.05 = 5%). If entering a percentage, divide by 100 first.","maximum":1,"minimum":0,"type":"number"},"time":{"description":"Investment time in years (must be > 0), e.g. 10.0","exclusiveMinimum":0,"type":"number"},"compounds_per_year":{"default":12,"description":"Compounding frequency per year (must be > 0): 12=monthly, 365=daily","exclusiveMinimum":0,"type":"integer"}},"required":["principal","rate","time"],"additionalProperties":false}},{"name":"calc_statistics","description":"Perform statistical calculations on a list of numbers.\n\nAvailable operations: mean, median, mode, std_dev, variance\n\nNote:\n    Use this tool to compute descriptive statistics over a list of numbers. To evaluate a single mathematical expression, use the calculate tool instead.\n\nExamples:\n    statistics([1.0, 2.5, 3.0, 4.5, 5.0], \"mean\")  # Returns 3.2\n    statistics([1.0, 2.5, 3.0, 4.5, 5.0], \"std_dev\")  # Returns ~1.58","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"numbers":{"description":"List of numbers to compute descriptive statistics on. Example: [1.0, 2.5, 3.0, 4.5, 5.0]","items":{"type":"number"},"maxItems":10000,"type":"array"},"operation":{"description":"Statistical operation to perform. Allowed values: mean, median, mode, std_dev, variance","examples":["mean","median","mode","std_dev","variance"],"type":"string"}},"required":["numbers","operation"],"additionalProperties":false}},{"name":"calc_units","description":"Convert between different units of measurement.\n\nSupported unit types:\n- length: mm, cm, m, km, in, ft, yd, mi\n- weight: g, kg, oz, lb\n- temperature: c, f, k (Celsius, Fahrenheit, Kelvin)\n\nExamples:\n    convert_units(5, \"km\", \"mi\", \"length\")  # 5 kilometers → 3.11 miles\n    convert_units(150, \"lb\", \"kg\", \"weight\")  # 150 pounds → 68.04 kilograms","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"value":{"description":"Numeric value to convert, e.g., 100.0","type":"number"},"from_unit":{"description":"Source unit abbreviation. Valid units depend on unit_type: length (mm, cm, m, km, in, ft, yd, mi), weight (g, kg, oz, lb), temperature (c, f, k)","examples":["m","kg","c"],"type":"string"},"to_unit":{"description":"Target unit abbreviation. Valid units depend on unit_type: length (mm, cm, m, km, in, ft, yd, mi), weight (g, kg, oz, lb), temperature (c, f, k)","examples":["ft","lb","f"],"type":"string"},"unit_type":{"description":"Unit category: length, weight, or temperature","examples":["length","weight","temperature"],"type":"string"}},"required":["value","from_unit","to_unit","unit_type"],"additionalProperties":false}},{"name":"matrix_determinant","description":"Calculate the determinant of a square matrix.\n\nNote:\n    Requires NumPy. Raises ValueError if NumPy is unavailable.\n\nExamples:\n    matrix_determinant([[1, 2], [3, 4]])\n    matrix_determinant([[1, 0, 0], [0, 1, 0], [0, 0, 1]])  # Identity matrix","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"matrix":{"description":"2D list of numbers representing a square matrix. Each inner list is a row. Example: [[1, 2], [3, 4]]","items":{"items":{"type":"number"},"type":"array"},"maxItems":10000,"type":"array"}},"required":["matrix"],"additionalProperties":false}},{"name":"matrix_eigenvalues","description":"Calculate the eigenvalues of a square matrix.\n\nNote:\n    Requires NumPy. Raises ValueError if NumPy is unavailable.\n\nExamples:\n    matrix_eigenvalues([[4, 2], [1, 3]])\n    matrix_eigenvalues([[3, 0, 0], [0, 5, 0], [0, 0, 7]])  # Diagonal matrix","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"matrix":{"description":"2D list of numbers representing a square matrix. Each inner list is a row. Example: [[4, 2], [1, 3]]","items":{"items":{"type":"number"},"type":"array"},"maxItems":10000,"type":"array"}},"required":["matrix"],"additionalProperties":false}},{"name":"matrix_inverse","description":"Calculate the inverse of a square matrix.\n\nNote:\n    Requires NumPy. Raises ValueError if NumPy is unavailable.\n\nExamples:\n    matrix_inverse([[1, 2], [3, 4]])\n    matrix_inverse([[2, 0], [0, 2]])  # Diagonal matrix","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"matrix":{"description":"2D list of numbers representing a square matrix. Each inner list is a row. Example: [[1, 2], [3, 4]]","items":{"items":{"type":"number"},"type":"array"},"maxItems":10000,"type":"array"}},"required":["matrix"],"additionalProperties":false}},{"name":"matrix_multiply","description":"Multiply two matrices (A × B).\n\nNote:\n    Requires NumPy. Raises ValueError if NumPy is unavailable.\n\nExamples:\n    matrix_multiply([[1, 2], [3, 4]], [[5, 6], [7, 8]])\n    matrix_multiply([[1, 2, 3]], [[1], [2], [3]])","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"matrix_a":{"description":"2D list of numbers representing the first matrix. Each inner list is a row. Example: [[1, 2], [3, 4]]","items":{"items":{"type":"number"},"type":"array"},"maxItems":10000,"type":"array"},"matrix_b":{"description":"2D list of numbers representing the second matrix. Each inner list is a row. Example: [[5, 6], [7, 8]]","items":{"items":{"type":"number"},"type":"array"},"maxItems":10000,"type":"array"}},"required":["matrix_a","matrix_b"],"additionalProperties":false}},{"name":"matrix_transpose","description":"Transpose a matrix (swap rows and columns).\n\nNote:\n    Requires NumPy. Raises ValueError if NumPy is unavailable.\n\nExamples:\n    matrix_transpose([[1, 2, 3], [4, 5, 6]])\n    matrix_transpose([[1], [2], [3]])","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"matrix":{"description":"2D list of numbers representing the matrix. Each inner list is a row. Example: [[1, 2, 3], [4, 5, 6]]","items":{"items":{"type":"number"},"type":"array"},"maxItems":10000,"type":"array"}},"required":["matrix"],"additionalProperties":false}},{"name":"plot_box_plot","description":"Create a box plot for comparing distributions (requires matplotlib).\n\nExamples:\n    plot_box_plot([[1, 2, 3, 4, 5], [2, 4, 6, 8, 10]], group_labels=[\"A\", \"B\"])\n    plot_box_plot([[10, 20, 30], [15, 25, 35], [5, 15, 25]], title=\"Comparison\")","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"data_groups":{"description":"List of data groups to compare, e.g., [[1, 2, 3], [4, 5, 6]]","items":{"items":{"type":"number"},"type":"array"},"maxItems":100,"type":"array"},"group_labels":{"anyOf":[{"items":{"type":"string"},"maxItems":100,"type":"array"},{"type":"null"}],"default":null,"description":"Labels for each group, e.g., ['Group A', 'Group B']"},"title":{"default":"Box Plot","description":"Chart title string, e.g., 'Distribution Comparison'","maxLength":100,"type":"string"},"y_label":{"default":"Values","description":"Y-axis label, e.g., 'Values'","maxLength":100,"type":"string"},"color":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Box color (name or hex code, e.g., 'blue', '#2E86AB')"}},"required":["data_groups"],"additionalProperties":false}},{"name":"plot_financial_line","description":"Generate and plot synthetic financial price data (requires matplotlib).\n\nCreates realistic price movement patterns for educational purposes.\nDoes not use real market data.\n\nNote:\n    Use for time-series price data with optional moving average overlay. For general XY data, use plot_line_chart instead.\n\nExamples:\n    plot_financial_line(days=60, trend='bullish')\n    plot_financial_line(days=90, trend='volatile', start_price=150.0, color='orange')","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"days":{"default":30,"description":"Number of days to generate, e.g., 30","maximum":1000,"minimum":2,"type":"integer"},"trend":{"default":"bullish","description":"Market trend direction","examples":["bullish","bearish","volatile"],"type":"string"},"start_price":{"default":100,"description":"Starting price value, e.g., 100.0","type":"number"},"color":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Line color (name or hex code, e.g., 'blue', '#2E86AB')"}},"additionalProperties":false}},{"name":"plot_function","description":"Generate mathematical function plots (requires matplotlib).\n\nExamples:\n    plot_function(\"x**2\", (-5, 5))\n    plot_function(\"sin(x)\", (-3.14, 3.14))","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"expression":{"description":"Mathematical expression to plot, e.g., \"x**2\" or \"sin(x)\". Must be <= MAX_EXPRESSION_LENGTH characters. Example: \"x**2\"","maxLength":500,"type":"string"},"x_range":{"description":"X-axis range as (min, max), e.g., (-5.0, 5.0)","maxItems":2,"minItems":2,"prefixItems":[{"type":"number"},{"type":"number"}],"type":"array"},"num_points":{"default":100,"description":"Number of sample points to plot along x_range, e.g., 100","maximum":10000,"minimum":2,"type":"integer"}},"required":["expression","x_range"],"additionalProperties":false}},{"name":"plot_histogram","description":"Create statistical histograms (requires matplotlib).\n\nExamples:\n    plot_histogram([1.0, 2.0, 2.5, 3.0, 3.5, 4.0, 5.0])\n    plot_histogram([10, 20, 30, 40, 50], bins=5, title=\"Test Scores\")","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"data":{"description":"List of numeric values to bin, e.g., [1.0, 2.0, 2.5, 3.0]","items":{"type":"number"},"maxItems":10000,"type":"array"},"bins":{"default":20,"description":"Number of histogram bins, e.g., 20","type":"integer"},"title":{"default":"Data Distribution","description":"Chart title string, e.g., 'Data Distribution'","maxLength":100,"type":"string"}},"required":["data"],"additionalProperties":false}},{"name":"plot_line_chart","description":"Create a line chart from data points (requires matplotlib).\n\nNote:\n    Use for general XY data. For time-series price data with optional moving average, use plot_financial_line instead.\n\nExamples:\n    plot_line_chart([1, 2, 3, 4], [1, 4, 9, 16], title=\"Squares\")\n    plot_line_chart([0, 1, 2], [0, 1, 4], color='red', x_label='Time', y_label='Distance')","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_data":{"description":"X-axis data points, e.g., [1, 2, 3, 4]","items":{"type":"number"},"maxItems":10000,"type":"array"},"y_data":{"description":"Y-axis data points, e.g., [1, 4, 9, 16]","items":{"type":"number"},"maxItems":10000,"type":"array"},"title":{"default":"Line Chart","description":"Chart title string, e.g., 'Squares'","maxLength":100,"type":"string"},"x_label":{"default":"X","description":"X-axis label, e.g., 'Time'","maxLength":100,"type":"string"},"y_label":{"default":"Y","description":"Y-axis label, e.g., 'Distance'","maxLength":100,"type":"string"},"color":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Line color (name or hex code, e.g., 'blue', '#2E86AB')"},"show_grid":{"default":true,"description":"Whether to display grid lines","type":"boolean"}},"required":["x_data","y_data"],"additionalProperties":false}},{"name":"plot_scatter","description":"Create a scatter plot from data points (requires matplotlib).\n\nExamples:\n    plot_scatter([1, 2, 3, 4], [1, 4, 9, 16], title=\"Correlation Study\")\n    plot_scatter([1, 2, 3], [2, 4, 5], color='purple', point_size=100)","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"x_data":{"description":"X-axis data points, e.g., [1, 2, 3, 4]","items":{"type":"number"},"maxItems":10000,"type":"array"},"y_data":{"description":"Y-axis data points, e.g., [1, 4, 9, 16]","items":{"type":"number"},"maxItems":10000,"type":"array"},"title":{"default":"Scatter Plot","description":"Chart title string, e.g., 'Correlation Study'","maxLength":100,"type":"string"},"x_label":{"default":"X","description":"X-axis label, e.g., 'Variable X'","maxLength":100,"type":"string"},"y_label":{"default":"Y","description":"Y-axis label, e.g., 'Variable Y'","maxLength":100,"type":"string"},"color":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Point color (name or hex code, e.g., 'blue', '#2E86AB')"},"point_size":{"default":50,"description":"Scatter point size in points^2, e.g., 50","type":"integer"}},"required":["x_data","y_data"],"additionalProperties":false}},{"name":"workspace_load","description":"Load previously saved calculation result from workspace.\n\nExamples:\n    load_variable(\"portfolio_return\")  # Returns saved calculation\n    load_variable(\"circle_area\")       # Access across sessions","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"description":"Name of the variable to load from workspace, e.g., 'circle_area'","type":"string"}},"required":["name"],"additionalProperties":false}},{"name":"workspace_save","description":"Save calculation to persistent workspace (survives restarts).\n\nExamples:\n    save_calculation(\"portfolio_return\", \"10000 * 1.07^5\", 14025.52)\n    save_calculation(\"circle_area\", \"pi * 5^2\", 78.54)","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"description":"Variable name for the saved calculation. Used to retrieve it later. Example: 'circle_area'","maxLength":50,"type":"string"},"expression":{"description":"The mathematical expression that was evaluated. Example: 'pi * r**2'","maxLength":500,"type":"string"},"result":{"description":"Numeric result of evaluating the expression, e.g., 78.54","type":"number"}},"required":["name","expression","result"],"additionalProperties":false}}],"scan":{"score":80,"grade":"B","scanned_at":"2026-09-20T20:12:42.396Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-20T20:12:42.308Z","components":{"code":{"score":20,"max":25,"notes":["18 source files scanned"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1286ms"]},"poisoning":{"score":15,"max":15,"notes":["17 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 4 write-action tools with no auth"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"},{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"math_mcp_learning_server-0.12.5/pyproject.toml: …(common in tests) \"S307\", # Use of eval() - controlled and safe for math calcula…"}],"inputs":{"probes":[{"url":"https://math-mcp.fastmcp.app/mcp","reachable":true,"authRequired":false,"latencyMs":1286,"serverInfo":{"name":"Math Learning Server","version":"4.0.5"}}],"packages":[{"registryType":"pypi","identifier":"math-mcp-learning-server","version":"0.12.5","found":true,"license":"Apache-2.0","dependencyCount":11,"publishedAt":"2026-09-01T01:23:16.725432Z","repositoryUrl":"https://github.com/clouatre-labs/math-mcp-learning-server"}],"repo":{"found":true,"owner":"clouatre-labs","repo":"math-mcp-learning-server","archived":false,"pushedAt":"2026-09-19T21:31:58Z","stars":5,"forks":4,"openIssues":2,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/241892492?v=4","ownerCreatedAt":"2025-11-04T04:26:10Z","license":"NOASSERTION"},"icon":{"url":"https://avatars.githubusercontent.com/u/241892492?v=4&s=128","source":"github"},"presence":{"stars":5,"forks":4,"downloadsWeek":null,"license":"NOASSERTION","lastPushAt":"2026-09-19T21:31:58.000Z","score":27}}}},"grade_history":[],"reviews":[]}