{
  "markdown": "# mathgraphs-mcp\n\n**MCP server for interactive math graphing, 3D scene building, and presentations.**\n\nMathTalking computes and renders interactive visualizations. Plot 2D functions, geometry, and 3D scenes. Results are graph-verified — roots, extrema, and intersections are computed from actual plotted curves, not generated by AI.\n\n**Zero install. Browser-native. Every result is a shareable interactive URL.**\n\n## Quick Start\n\n### Claude Desktop\n\nSettings → Connectors → Add custom connector → paste:\n\n```\nhttps://mathtalking.com/api/mcp\n```\n\nNo account or API key needed.\n\n### Claude Code\n\n```bash\nclaude mcp add --transport http mathtalking https://mathtalking.com/api/mcp\n```\n\n### Any MCP Client\n\n```\nPOST https://mathtalking.com/api/mcp\nContent-Type: application/json\n```\n\nStandard JSON-RPC 2.0 over Streamable HTTP.\n\n## Tools\n\n### `plot_graph` — 2D Math Visualization\n\nPlot functions, points, segments, labels, and shapes on an interactive graph. Auto-computes roots, extrema, and intersections for plotted functions.\n\n**Input:** Array of elements, each with a `type` and type-specific fields:\n\n| Type | Fields | Example |\n|---|---|---|\n| `function` | `expression` (required), `color` | `{\"type\":\"function\", \"expression\":\"x^2-4\", \"color\":\"#4A90D9\"}` |\n| `points` | `points` [{x,y}] or [[x,y]] (required), `color`, `label` | `{\"type\":\"points\", \"points\":[{\"x\":2,\"y\":0}], \"label\":\"root\"}` |\n| `segment` | `x1,y1,x2,y2` (required), `color`, `label`, `arrow`, `dashed` | `{\"type\":\"segment\", \"x1\":0, \"y1\":0, \"x2\":3, \"y2\":4, \"label\":\"hypotenuse\"}` |\n| `label` | `text` (required), `x,y` (required), `color`, `fontSize` | `{\"type\":\"label\", \"text\":\"vertex\", \"x\":0, \"y\":-4}` |\n| `triangle` | `x1,y1,x2,y2,x3,y3` (required), `color`, `opacity`, `border` | `{\"type\":\"triangle\", \"x1\":0, \"y1\":0, \"x2\":3, \"y2\":0, \"x3\":3, \"y3\":4}` |\n| `box` | `x1,y1,x2,y2` (required), `height` (required), `color`, `opacity` | `{\"type\":\"box\", \"x1\":0, \"y1\":0, \"x2\":1, \"y2\":0, \"height\":5}` |\n| `circle` | `cx,cy,radius` (required), `color`, `opacity`, `border` | `{\"type\":\"circle\", \"cx\":0, \"cy\":0, \"radius\":3}` |\n\n**Supports:** Explicit `y=f(x)`, implicit `x²+y²=1`, parametric `(cos(t),sin(t))`, polar, piecewise, domain restrictions.\n\n**Optional params:**\n- `viewport` — `{xmin, xmax, ymin, ymax}`. Set it to your data's own magnitude; values far outside the range are invisible. Omit it and the server auto-fits the window to your elements.\n- `title` — graph title\n- `summary` — frosted glass overlay text on the graph\n- `gridStyle` — `\"polar\"` (concentric circles + radial lines), `\"axes\"` (axes only), `\"none\"` (clean canvas)\n- `output` — `\"url\"` (default, interactive page), `\"embed\"` (iframe URL), or `\"svg\"` (vector image)\n- `animations` — array of `{tool, name, from, to, loop}` for animated parameters\n- `theme` — `\"default\"`, `\"terminal\"`, `\"wallstreet\"`, `\"science\"`, or `\"finance\"`\n- `base_render_id` — build on an existing render instead of re-sending every element\n- `remove_indices` — drop elements from the base render by index (see `get_graph`)\n\n**Returns:** Interactive URL with zoom, pan, and sliders. Auto-computed roots, extrema, and intersections in the response text, plus a graph check reporting anything that did not render properly — unreadable expressions, off-screen elements, duplicates, or a blank graph.\n\n### `analyze` — Precise Numerical Results\n\nCompute exact values with the graph engine instead of doing the arithmetic in the model. Returns numbers, not a picture.\n\n**Input:** `type` and `f` (both required), plus whichever fields that analysis needs:\n\n| `type` | Extra fields | Returns |\n|---|---|---|\n| `roots` | `a`, `b` (range, default -10..10) | x-values where f crosses zero |\n| `extrema` | `a`, `b` | local minima and maxima |\n| `inflections` | `a`, `b` | points where concavity flips |\n| `intersect` | `g` (second expression), `a`, `b` | where f and g cross |\n| `tangent` | `x` (point of interest) | tangent line at x |\n| `normal` | `x` | normal line at x |\n| `derivative` | `x` | f'(x) |\n| `integral` | `a`, `b` | definite integral over [a, b] |\n| `area_between` | `g`, `a`, `b` | area between the two curves |\n| `arc_length` | `a`, `b` | curve length over [a, b] |\n| `closest_point` | `px`, `py` | point on f nearest to (px, py) |\n\n**Supports:** explicit, parametric, polar, and implicit curves. For parametric curves `x` is the t value.\n\n**Draw the result:** add `plot: true` (and an optional `title`) to get an interactive graph URL and thumbnail with the answer already marked — roots and intersections as labelled points, tangent and normal as lines, `closest_point` joined to its target, `integral` and `arc_length` with their bounds on the curve. Saves transcribing coordinates into a second `plot_graph` call. The linear-algebra types ignore it.\n\n\n**Example:** `{\"type\":\"intersect\", \"f\":\"x^2-4\", \"g\":\"2x-1\", \"plot\":true}`\n\n### `get_graph` — Inspect a Graph\n\nRetrieve the elements and viewport of an existing 2D render. Element indices come back in order, so you can pass them to `remove_indices`.\n\n**Input:** `render_id` (the 10-character code in a plot_graph URL).\n\n**Returns:** element list, viewport, and a one-line summary of what the graph holds.\n\n### `net_generator` — Shape Nets, Volume & Surface Area\n\nUnfold a solid into its printable 2D net, with the measurements worked out.\n\n**Input:** `shape` (required) and `dims`:\n\n| `shape` | `dims` |\n|---|---|\n| `cylinder`, `cone` | `r`, `h` (cone also accepts `r` + `slant`) |\n| `cube` | `a` |\n| `square_pyramid` | `a` (base edge), `h` |\n| `triangular_prism` | `a` (base edge), `l` (length) |\n| `rectangular_prism` | `w`, `h`, `d` |\n| `tetrahedron`, `octahedron`, `icosahedron`, `dodecahedron` | `a` (edge) |\n\nSpelled-out keys work too (`radius`, `height`, `side`, `width`, `depth`, `length`). Give every dimension the shape needs — a partial set is rejected, so a mistyped key cannot quietly produce the wrong net. Omit `dims` entirely to get an example at default sizes; the reply says when it did that.\n\n**Optional:** `unit` (`cm` | `m` | `in` | `ft`), `title`, `output` (`url` | `embed` | `svg`).\n\n**Returns:** the net as an interactive URL and thumbnail, plus volume, surface area, and the substituted formulas.\n\n**Example:** `{\"shape\":\"cylinder\", \"dims\":{\"r\":3,\"h\":5}, \"unit\":\"cm\"}` → volume 141.37 cm³, surface area 150.80 cm², printable net.\n\nA sphere has no planar net — use `plot_3d` for spheres.\n\n### `plot_3d` — 3D Scene Builder\n\nCreate interactive 3D scenes with shapes, lights, and particle effects. Build anything — snowmen, castles, robots, geometry.\n\n**Input:** Array of elements, each with a `type` and type-specific fields:\n\n| Type | Fields | Example |\n|---|---|---|\n| `mesh` | `shape` (required), `color`, `opacity`, `position`, `rotation`, `metalness`, `roughness`, `wireframe` | `{\"type\":\"mesh\", \"shape\":\"sphere\", \"r\":1, \"metalness\":0.8, \"position\":[0,1,0]}` |\n| `compound` | `compound` (required), `position`, `scale`, `color` | `{\"type\":\"compound\", \"compound\":\"house\", \"color\":\"#cc2222\", \"position\":[0,0,0]}` |\n| `surface` | `expression` (required), `color`, `xmin`, `xmax`, `ymin`, `ymax`, `resolution` | `{\"type\":\"surface\", \"expression\":\"sin(x)*cos(y)\", \"color\":\"#4A90D9\"}` |\n| `light` | `kind` (point/spot/directional), `color`, `intensity`, `position` | `{\"type\":\"light\", \"kind\":\"point\", \"color\":\"#ff8800\", \"position\":[0,5,0]}` |\n| `particle` | `preset` (fire/smoke/rain/snow/sparkle/mist/splash), `position`, `count`, `spread` | `{\"type\":\"particle\", \"preset\":\"fire\", \"position\":[3,0,0]}` |\n| `water` | `position`, `size`, `waveHeight`, `color`, `opacity` | `{\"type\":\"water\", \"position\":[0,0,0], \"size\":10}` |\n| `line3d` | `from` [x,y,z], `to` [x,y,z], `color` | `{\"type\":\"line3d\", \"from\":[0,0,0], \"to\":[1,1,1]}` |\n| `label3d` | `text`, `position` [x,y,z] | `{\"type\":\"label3d\", \"text\":\"origin\", \"position\":[0,0,0]}` |\n| `text3d` | `text`, `position` [x,y,z], `color`, `fontSize` | `{\"type\":\"text3d\", \"text\":\"HELLO\", \"position\":[0,2,0], \"color\":\"#ff0000\", \"fontSize\":1}` |\n\n**11 mesh shapes:** cube, box, sphere, cylinder, cone, tetrahedron, octahedron, dodecahedron, icosahedron, torus, prism\n\n**36 compound presets:** tree, house, castle_tower, fence, campfire, rock, stairs, arch, table, chair, person, car, road_sign, windmill, dog, cat, flag, bed, sofa, bookshelf, lamp, desk, bush, flower, bridge, lamp_post, bench, apartment, skyscraper, shopping_center, hospital, ambulance, truck, boat, traffic_light, water_tower, fountain\n\n**Color-driven building styles:** Buildings change architectural style based on color — red=Chinese, blue=modern, yellow=cozy, green=eco, brown=rustic. The actual hex color is used for materials; the hue just selects the geometry variant.\n\n**Shape params:** cube→size, box→width/height/depth, sphere→r, cylinder→r/h, cone→r/h, torus→r/tube, prism→points/h\n\n**Material params:** metalness (0=plastic, 1=chrome), roughness (0=mirror, 1=matte), wireframe (boolean)\n\n**Animation:** `animate: {type, speed, ...}` — spin, bounce, orbit, waypoint, follow (tracks player)\n\n**Physics & controls:** `physics: {velocity, mass}`, `controls: {type:\"wasd\", speed}`, `collision: true`\n\n**Incremental building:**\n- `base_render_id` — build on an existing scene (appends elements, creates new URL)\n- `remove_indices` — remove elements by index from base (use `get_3d` to see indices)\n\n**Optional:** `title`, `summary`, `camera` `{position, target}`, `skybox` (day/sunset/night/overcast), `gravity` (-9.8), `follow` (boolean)\n\n**Returns:** Interactive 3D URL with orbit controls + inline PNG thumbnail for chat preview.\n\n### `get_3d` — Inspect 3D Scene\n\nRetrieve the full element list of an existing 3D render by ID. Use this before `base_render_id` to see what a scene contains and plan modifications.\n\n**Input:** `render_id` (the short alphanumeric ID from the URL)\n\n**Returns:** All elements with their properties (shapes, positions, colors, materials).\n\n### `create_show` — Slideshow Presentations\n\nBundle multiple `plot_graph` results into a slideshow. Create each slide with `plot_graph` first, then pass the render IDs here.\n\n**Input:** `title` (string), `slide_ids` (array of render IDs from `plot_graph` results), `summary` (optional per-slide text).\n\n**Returns:** Interactive show URL with prev/next navigation, keyboard controls, and auto-play.\n\n## Example Prompts\n\n1. **\"Plot x³ - 3x + 1 and show me its roots and extrema\"** → Interactive graph with computed roots (x ≈ -1.88, 0.35, 1.53) and extrema\n2. **\"Build a village with a red house, trees, and a campfire\"** → 3D scene with Chinese-style house (red color triggers Chinese variant), PNG thumbnail in chat\n3. **\"Plot the surface z = sin(x) * cos(y)\"** → Interactive 3D surface plot with orbit controls\n4. **\"Create a 3-slide show: y=x², y=x²+2 shifted up, y=(x-3)² shifted right\"** → Slideshow URL with navigation\n\n## The Same Tools on the Web\n\nSeveral MathTalking pages are the browser form of a call you can make here. If you are answering the same question an agent would, the tool call is usually faster than pointing someone at the page — and both compute with the same engine.\n\n| Web page | Equivalent call |\n|---|---|\n| [Quadratic Roots](https://mathtalking.com/math/quadratic-roots-en), [Root Finder](https://mathtalking.com/math/root-finder-en) | `analyze {type: \"roots\", f}` |\n| [Function Intersection](https://mathtalking.com/math/function-intersection-en) | `analyze {type: \"intersect\", f, g}` |\n| [Tangent Calculator](https://mathtalking.com/math/tangent-calculator-en) | `analyze {type: \"tangent\", f, x}` |\n| [Area Between Curves](https://mathtalking.com/math/area-between-curves-en) | `analyze {type: \"area_between\", f, g, a, b}` |\n| [Arc Length](https://mathtalking.com/math/arc-length-calculator-en) | `analyze {type: \"arc_length\", f, a, b}` |\n| [Closest Point](https://mathtalking.com/math/closest-point-calculator-en) | `analyze {type: \"closest_point\", f, px, py}` |\n| [3D Net Generator](https://mathtalking.com/math/3d-net-generator-en) and the shape-net pages | `net_generator {shape, dims}` |\n\nAdd `plot: true` to an `analyze` call to get the same picture the page shows.\n\nStatistics pages that need a dataset (histogram, regression, box plot, distribution fitting) have no tool call on purpose: sending raw rows through a model costs a token per data point. Point people at [mathtalking.com/stat](https://mathtalking.com/stat), where the data stays on their device.\n\n## When to Use\n\n- User asks to **graph, plot, or visualize** any math\n- You need to **verify** a mathematical result visually\n- **Geometry** needs precise rendering (triangles, circles, constructions)\n- **3D scenes** — shapes, architecture, creative builds\n- **Multi-step explanations** — create slides, bundle into shows\n- You want a **shareable URL** the user can explore interactively\n\n## Why Use This (vs generating images)\n\n- **Computed, not hallucinated** — roots from actual zero-crossings, not LLM guesses\n- **Interactive** — zoom, pan, rotate (3D), adjust sliders\n- **Shareable** — permanent URL for every result\n- **Token efficient** — ~500 output tokens vs ~3,000-5,000 for generated code\n- **9 languages** — en, zh, zh-TW, ja, ko, es, fr, de, pt-BR\n\n## Quick Test\n\n```bash\n# 2D graph\ncurl -X POST https://mathtalking.com/api/mcp \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"plot_graph\",\"arguments\":{\"elements\":[{\"type\":\"function\",\"expression\":\"sin(x)\",\"color\":\"#4A90D9\"}]}}}'\n\n# 3D scene\ncurl -X POST https://mathtalking.com/api/mcp \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"plot_3d\",\"arguments\":{\"elements\":[{\"type\":\"mesh\",\"shape\":\"sphere\",\"r\":1,\"color\":\"#ff0000\",\"position\":[0,1,0]}]}}}'\n```\n\n## Links\n\n- **Website:** [mathtalking.com](https://mathtalking.com)\n- **3D Builder:** [mathtalking.com/3d](https://mathtalking.com/3d)\n- **Privacy:** [mathtalking.com/privacy](https://mathtalking.com/privacy)\n- **Discord:** [discord.gg/5auPsmxh](https://discord.gg/5auPsmxh)\n- **X:** [@Mathtalking_com](https://x.com/Mathtalking_com)\n",
  "bytes": 14058,
  "sha": "1338b286b551455721806bff09f2a4fd7f7eb5fad5752ff2a97caef36a9e261e",
  "repo_slug": "architectds/mathgraphs-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_architectds_mathgraphs_mcp_929e657b/readme"
}