Educational MCP server with 17 math/stats tools, visualizations, and persistent workspace
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Safely evaluate mathematical expressions with support for basic operations and math functions. Supported operations: +, -, *, /, **, () Supported functions: sin, cos, tan, log, sqrt, abs, pow
Mathematical expression to evaluate. Supports +, -, *, /, **, and math functions (sin, cos, sqrt, log, etc.). Example: '2 * sin(pi/4) + sqrt(16)'
Safely evaluate mathematical expressions with support for basic operations and math functions. Supported operations: +, -, *, /, **, () Supported functions: sin, cos, tan, log, sqrt, abs, pow
| Argument | Type | Description |
|---|---|---|
| expression* | string | Mathematical expression to evaluate. Supports +, -, *, /, **, and math functions (sin, cos, sqrt, log, etc.). Example: '2 * sin(pi/4) + sqrt(16)' |
{
"type": "object",
"required": [
"expression"
],
"properties": {
"expression": {
"type": "string",
"maxLength": 500,
"description": "Mathematical expression to evaluate. Supports +, -, *, /, **, and math functions (sin, cos, sqrt, log, etc.). Example: '2 * sin(pi/4) + sqrt(16)'"
}
},
"additionalProperties": false
}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
| Argument | Type | Description |
|---|---|---|
| rate* | number | Annual interest rate as decimal 0.0-1.0 (e.g. 0.05 = 5%). If entering a percentage, divide by 100 first. |
| time* | number | Investment time in years (must be > 0), e.g. 10.0 |
| principal* | number | Initial investment amount in dollars (must be > 0), e.g. 1000.0 |
| compounds_per_year | integer | Compounding frequency per year (must be > 0): 12=monthly, 365=daily |
{
"type": "object",
"required": [
"principal",
"rate",
"time"
],
"properties": {
"rate": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Annual interest rate as decimal 0.0-1.0 (e.g. 0.05 = 5%). If entering a percentage, divide by 100 first."
},
"time": {
"type": "number",
"description": "Investment time in years (must be > 0), e.g. 10.0",
"exclusiveMinimum": 0
},
"principal": {
"type": "number",
"description": "Initial investment amount in dollars (must be > 0), e.g. 1000.0",
"exclusiveMinimum": 0
},
"compounds_per_year": {
"type": "integer",
"default": 12,
"description": "Compounding frequency per year (must be > 0): 12=monthly, 365=daily",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}Perform statistical calculations on a list of numbers. Available operations: mean, median, mode, std_dev, variance
| Argument | Type | Description |
|---|---|---|
| numbers* | array | List of numbers to compute descriptive statistics on. Example: [1.0, 2.5, 3.0, 4.5, 5.0] |
| operation* | string | Statistical operation to perform. Allowed values: mean, median, mode, std_dev, variance |
{
"type": "object",
"required": [
"numbers",
"operation"
],
"properties": {
"numbers": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 10000,
"description": "List of numbers to compute descriptive statistics on. Example: [1.0, 2.5, 3.0, 4.5, 5.0]"
},
"operation": {
"type": "string",
"examples": [
"mean",
"median",
"mode",
"std_dev",
"variance"
],
"description": "Statistical operation to perform. Allowed values: mean, median, mode, std_dev, variance"
}
},
"additionalProperties": false
}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)
| Argument | Type | Description |
|---|---|---|
| value* | number | Numeric value to convert, e.g., 100.0 |
| to_unit* | string | 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) |
| from_unit* | string | 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) |
| unit_type* | string | Unit category: length, weight, or temperature |
{
"type": "object",
"required": [
"value",
"from_unit",
"to_unit",
"unit_type"
],
"properties": {
"value": {
"type": "number",
"description": "Numeric value to convert, e.g., 100.0"
},
"to_unit": {
"type": "string",
"examples": [
"ft",
"lb",
"f"
],
"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)"
},
"from_unit": {
"type": "string",
"examples": [
"m",
"kg",
"c"
],
"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)"
},
"unit_type": {
"type": "string",
"examples": [
"length",
"weight",
"temperature"
],
"description": "Unit category: length, weight, or temperature"
}
},
"additionalProperties": false
}Calculate the determinant of a square matrix.
| Argument | Type | Description |
|---|---|---|
| matrix* | array | 2D list of numbers representing a square matrix. Each inner list is a row. Example: [[1, 2], [3, 4]] |
{
"type": "object",
"required": [
"matrix"
],
"properties": {
"matrix": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "number"
}
},
"maxItems": 10000,
"description": "2D list of numbers representing a square matrix. Each inner list is a row. Example: [[1, 2], [3, 4]]"
}
},
"additionalProperties": false
}Calculate the eigenvalues of a square matrix.
| Argument | Type | Description |
|---|---|---|
| matrix* | array | 2D list of numbers representing a square matrix. Each inner list is a row. Example: [[4, 2], [1, 3]] |
{
"type": "object",
"required": [
"matrix"
],
"properties": {
"matrix": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "number"
}
},
"maxItems": 10000,
"description": "2D list of numbers representing a square matrix. Each inner list is a row. Example: [[4, 2], [1, 3]]"
}
},
"additionalProperties": false
}Calculate the inverse of a square matrix.
| Argument | Type | Description |
|---|---|---|
| matrix* | array | 2D list of numbers representing a square matrix. Each inner list is a row. Example: [[1, 2], [3, 4]] |
{
"type": "object",
"required": [
"matrix"
],
"properties": {
"matrix": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "number"
}
},
"maxItems": 10000,
"description": "2D list of numbers representing a square matrix. Each inner list is a row. Example: [[1, 2], [3, 4]]"
}
},
"additionalProperties": false
}Multiply two matrices (A × B).
| Argument | Type | Description |
|---|---|---|
| matrix_a* | array | 2D list of numbers representing the first matrix. Each inner list is a row. Example: [[1, 2], [3, 4]] |
| matrix_b* | array | 2D list of numbers representing the second matrix. Each inner list is a row. Example: [[5, 6], [7, 8]] |
{
"type": "object",
"required": [
"matrix_a",
"matrix_b"
],
"properties": {
"matrix_a": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "number"
}
},
"maxItems": 10000,
"description": "2D list of numbers representing the first matrix. Each inner list is a row. Example: [[1, 2], [3, 4]]"
},
"matrix_b": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "number"
}
},
"maxItems": 10000,
"description": "2D list of numbers representing the second matrix. Each inner list is a row. Example: [[5, 6], [7, 8]]"
}
},
"additionalProperties": false
}Transpose a matrix (swap rows and columns).
| Argument | Type | Description |
|---|---|---|
| matrix* | array | 2D list of numbers representing the matrix. Each inner list is a row. Example: [[1, 2, 3], [4, 5, 6]] |
{
"type": "object",
"required": [
"matrix"
],
"properties": {
"matrix": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "number"
}
},
"maxItems": 10000,
"description": "2D list of numbers representing the matrix. Each inner list is a row. Example: [[1, 2, 3], [4, 5, 6]]"
}
},
"additionalProperties": false
}Create a box plot for comparing distributions (requires matplotlib).
| Argument | Type | Description |
|---|---|---|
| color | any | Box color (name or hex code, e.g., 'blue', '#2E86AB') |
| title | string | Chart title string, e.g., 'Distribution Comparison' |
| y_label | string | Y-axis label, e.g., 'Values' |
| data_groups* | array | List of data groups to compare, e.g., [[1, 2, 3], [4, 5, 6]] |
| group_labels | any | Labels for each group, e.g., ['Group A', 'Group B'] |
{
"type": "object",
"required": [
"data_groups"
],
"properties": {
"color": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
],
"default": null,
"description": "Box color (name or hex code, e.g., 'blue', '#2E86AB')"
},
"title": {
"type": "string",
"default": "Box Plot",
"maxLength": 100,
"description": "Chart title string, e.g., 'Distribution Comparison'"
},
"y_label": {
"type": "string",
"default": "Values",
"maxLength": 100,
"description": "Y-axis label, e.g., 'Values'"
},
"data_groups": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "number"
}
},
"maxItems": 100,
"description": "List of data groups to compare, e.g., [[1, 2, 3], [4, 5, 6]]"
},
"group_labels": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
},
"maxItems": 100
},
{
"type": "null"
}
],
"default": null,
"description": "Labels for each group, e.g., ['Group A', 'Group B']"
}
},
"additionalProperties": false
}Generate and plot synthetic financial price data (requires matplotlib). Creates realistic price movement patterns for educational purposes. Does not use real market data.
| Argument | Type | Description |
|---|---|---|
| days | integer | Number of days to generate, e.g., 30 |
| color | any | Line color (name or hex code, e.g., 'blue', '#2E86AB') |
| trend | string | Market trend direction |
| start_price | number | Starting price value, e.g., 100.0 |
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"default": 30,
"maximum": 1000,
"minimum": 2,
"description": "Number of days to generate, e.g., 30"
},
"color": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
],
"default": null,
"description": "Line color (name or hex code, e.g., 'blue', '#2E86AB')"
},
"trend": {
"type": "string",
"default": "bullish",
"examples": [
"bullish",
"bearish",
"volatile"
],
"description": "Market trend direction"
},
"start_price": {
"type": "number",
"default": 100,
"description": "Starting price value, e.g., 100.0"
}
},
"additionalProperties": false
}Generate mathematical function plots (requires matplotlib).
| Argument | Type | Description |
|---|---|---|
| x_range* | array | X-axis range as (min, max), e.g., (-5.0, 5.0) |
| expression* | string | Mathematical expression to plot, e.g., "x**2" or "sin(x)". Must be <= MAX_EXPRESSION_LENGTH characters. Example: "x**2" |
| num_points | integer | Number of sample points to plot along x_range, e.g., 100 |
{
"type": "object",
"required": [
"expression",
"x_range"
],
"properties": {
"x_range": {
"type": "array",
"maxItems": 2,
"minItems": 2,
"description": "X-axis range as (min, max), e.g., (-5.0, 5.0)",
"prefixItems": [
{
"type": "number"
},
{
"type": "number"
}
]
},
"expression": {
"type": "string",
"maxLength": 500,
"description": "Mathematical expression to plot, e.g., \"x**2\" or \"sin(x)\". Must be <= MAX_EXPRESSION_LENGTH characters. Example: \"x**2\""
},
"num_points": {
"type": "integer",
"default": 100,
"maximum": 10000,
"minimum": 2,
"description": "Number of sample points to plot along x_range, e.g., 100"
}
},
"additionalProperties": false
}Create statistical histograms (requires matplotlib).
| Argument | Type | Description |
|---|---|---|
| bins | integer | Number of histogram bins, e.g., 20 |
| data* | array | List of numeric values to bin, e.g., [1.0, 2.0, 2.5, 3.0] |
| title | string | Chart title string, e.g., 'Data Distribution' |
{
"type": "object",
"required": [
"data"
],
"properties": {
"bins": {
"type": "integer",
"default": 20,
"description": "Number of histogram bins, e.g., 20"
},
"data": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 10000,
"description": "List of numeric values to bin, e.g., [1.0, 2.0, 2.5, 3.0]"
},
"title": {
"type": "string",
"default": "Data Distribution",
"maxLength": 100,
"description": "Chart title string, e.g., 'Data Distribution'"
}
},
"additionalProperties": false
}Create a line chart from data points (requires matplotlib).
| Argument | Type | Description |
|---|---|---|
| color | any | Line color (name or hex code, e.g., 'blue', '#2E86AB') |
| title | string | Chart title string, e.g., 'Squares' |
| x_data* | array | X-axis data points, e.g., [1, 2, 3, 4] |
| y_data* | array | Y-axis data points, e.g., [1, 4, 9, 16] |
| x_label | string | X-axis label, e.g., 'Time' |
| y_label | string | Y-axis label, e.g., 'Distance' |
| show_grid | boolean | Whether to display grid lines |
{
"type": "object",
"required": [
"x_data",
"y_data"
],
"properties": {
"color": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
],
"default": null,
"description": "Line color (name or hex code, e.g., 'blue', '#2E86AB')"
},
"title": {
"type": "string",
"default": "Line Chart",
"maxLength": 100,
"description": "Chart title string, e.g., 'Squares'"
},
"x_data": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 10000,
"description": "X-axis data points, e.g., [1, 2, 3, 4]"
},
"y_data": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 10000,
"description": "Y-axis data points, e.g., [1, 4, 9, 16]"
},
"x_label": {
"type": "string",
"default": "X",
"maxLength": 100,
"description": "X-axis label, e.g., 'Time'"
},
"y_label": {
"type": "string",
"default": "Y",
"maxLength": 100,
"description": "Y-axis label, e.g., 'Distance'"
},
"show_grid": {
"type": "boolean",
"default": true,
"description": "Whether to display grid lines"
}
},
"additionalProperties": false
}Create a scatter plot from data points (requires matplotlib).
| Argument | Type | Description |
|---|---|---|
| color | any | Point color (name or hex code, e.g., 'blue', '#2E86AB') |
| title | string | Chart title string, e.g., 'Correlation Study' |
| x_data* | array | X-axis data points, e.g., [1, 2, 3, 4] |
| y_data* | array | Y-axis data points, e.g., [1, 4, 9, 16] |
| x_label | string | X-axis label, e.g., 'Variable X' |
| y_label | string | Y-axis label, e.g., 'Variable Y' |
| point_size | integer | Scatter point size in points^2, e.g., 50 |
{
"type": "object",
"required": [
"x_data",
"y_data"
],
"properties": {
"color": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
],
"default": null,
"description": "Point color (name or hex code, e.g., 'blue', '#2E86AB')"
},
"title": {
"type": "string",
"default": "Scatter Plot",
"maxLength": 100,
"description": "Chart title string, e.g., 'Correlation Study'"
},
"x_data": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 10000,
"description": "X-axis data points, e.g., [1, 2, 3, 4]"
},
"y_data": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 10000,
"description": "Y-axis data points, e.g., [1, 4, 9, 16]"
},
"x_label": {
"type": "string",
"default": "X",
"maxLength": 100,
"description": "X-axis label, e.g., 'Variable X'"
},
"y_label": {
"type": "string",
"default": "Y",
"maxLength": 100,
"description": "Y-axis label, e.g., 'Variable Y'"
},
"point_size": {
"type": "integer",
"default": 50,
"description": "Scatter point size in points^2, e.g., 50"
}
},
"additionalProperties": false
}Load previously saved calculation result from workspace.
| Argument | Type | Description |
|---|---|---|
| name* | string | Name of the variable to load from workspace, e.g., 'circle_area' |
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Name of the variable to load from workspace, e.g., 'circle_area'"
}
},
"additionalProperties": false
}Save calculation to persistent workspace (survives restarts).
| Argument | Type | Description |
|---|---|---|
| name* | string | Variable name for the saved calculation. Used to retrieve it later. Example: 'circle_area' |
| result* | number | Numeric result of evaluating the expression, e.g., 78.54 |
| expression* | string | The mathematical expression that was evaluated. Example: 'pi * r**2' |
{
"type": "object",
"required": [
"name",
"expression",
"result"
],
"properties": {
"name": {
"type": "string",
"maxLength": 50,
"description": "Variable name for the saved calculation. Used to retrieve it later. Example: 'circle_area'"
},
"result": {
"type": "number",
"description": "Numeric result of evaluating the expression, e.g., 78.54"
},
"expression": {
"type": "string",
"maxLength": 500,
"description": "The mathematical expression that was evaluated. Example: 'pi * r**2'"
}
},
"additionalProperties": false
}