Are you the author? Sign in to claim
UpMath MCP server for Claude Code - LaTeX/TikZ rendering via i.upmath.me API
MCP server that gives Claude Code direct access to LaTeX rendering via the UpMath API. Renders equations, TikZ diagrams, and full documents to SVG/PNG without a local TeX installation.
Single render / embed
| Tool | Description |
|---|---|
render_equation | Render a LaTeX equation to SVG or PNG (optionally save to file) |
render_tikz | Render a TikZ/pgfplots/circuitikz/tikz-3dplot diagram to SVG or PNG |
get_render_url | Get the UpMath image URL for a LaTeX expression (embed, no file) |
check_syntax | Validate a LaTeX snippet by attempting to render it |
Documents / papers
| Tool | Description |
|---|---|
render_paper | Render a full markdown paper ($$...$$ math, headings, tables, code) to publication-ready HTML. useUpmath:false (default) uses KaTeX; useUpmath:true renders all math via the UpMath SVG API |
render_markdown_with_math | Render markdown with $$...$$ math to HTML with embedded UpMath SVGs |
scan_document_math | Inventory every equation in a markdown file |
validate_equations | Validate all equations in a document, reporting failures |
Batch / iteration
| Tool | Description |
|---|---|
render_batch | Render multiple equations at once, saving each to a file |
render_batch_cached | Batch render with caching — skips unchanged equations |
render_equation_sheet | Render named equations into one reference-sheet HTML page |
render_parameter_grid | Render a LaTeX template across a grid of parameter values |
render_diff | Render two versions of an equation side by side for comparison |
Diagrams / notation
| Tool | Description |
|---|---|
list_diagram_templates | List the built-in TikZ diagram templates |
render_diagram_template | Render a named TikZ template |
build_notation_table | Build a symbol/notation table from a document |
Everything TeX Live supports, including:
| Category | Packages |
|---|---|
| Math | All standard LaTeX math, mathrsfs, esvect, stmaryrd |
| Graphics | tikz + libraries, tikz-3dplot, pgfplots, pgflibrary |
| Diagrams | circuitikz (circuits), bussproofs (proofs) |
| Chemistry | mhchem |
| Formatting | array, xcolor, kotex |
The repo is its own plugin marketplace. In Claude Code:
/plugin marketplace add danielsimonjr/upmath-mcp
/plugin install upmath-mcp@upmath
This loads the bundled server (no npm install needed) plus the companion upmath skill.
git clone https://github.com/danielsimonjr/upmath-mcp.git
cd upmath-mcp
npm install
Add to ~/.claude/.mcp.json:
{
"mcpServers": {
"upmath": {
"command": "node",
"args": ["/path/to/upmath-mcp/server.js"]
}
}
}
Restart Claude Code. The rendering tools will be available.
All settings are environment variables (set them in the env block of your MCP config):
| Variable | Default | Purpose |
|---|---|---|
UPMATH_URL | https://i.upmath.me | Renderer base URL (point at a self-hosted instance) |
UPMATH_TIMEOUT_MS | 30000 | Per-request timeout |
UPMATH_RETRIES | 3 | Retries on 429/5xx/network errors (exponential backoff) |
UPMATH_RETRY_BASE_MS | 1000 | First backoff delay (doubles per retry) |
UPMATH_MIN_INTERVAL_MS | 100 | Minimum gap between API requests (politeness throttle for the public API) |
Reliability behavior (built in, no flags needed):
render_paper on an edited document only re-renders changed equations.UPMATH_MIN_INTERVAL_MS to respect the public service's rate limits.Common conventions: format is "svg" (default) or "png"; saveTo writes the output to a file instead of returning it inline; file paths are resolved relative to the server's working directory (absolute paths are safest).
Single render / embed
render_equation({ latex, format?, saveTo? }) — latex is the raw (un-encoded) expression.render_tikz({ tikz, packages?, format?, saveTo? }) — tikz includes \begin{tikzpicture}...\end{tikzpicture}; packages is an array like ["circuitikz", "pgfplots"] prepended as \usepackage{...}.get_render_url({ latex, format? }) — returns the i.upmath.me URL only; no API call, no file.check_syntax({ latex }) — renders to SVG and reports valid / empty / error.Documents / papers
render_paper({ inputFile, outputFile, title?, author?, useUpmath? }) — full markdown paper → HTML. useUpmath: false (default) embeds KaTeX (fast, client-side); useUpmath: true renders every equation to server-side SVG (supports TikZ). title defaults to the first # heading.render_markdown_with_math({ markdown, saveTo? }) — markdown string (not a file) with $$...$$ → HTML with embedded SVGs.scan_document_math({ inputFile, outputReport? }) — equation inventory, symbol frequency, numbering checks; outputReport saves the full JSON.validate_equations({ inputFile, maxEquations? }) — renders each equation to verify it; maxEquations caps API calls (default 50, -1 = all).Batch / iteration
render_batch({ equations, format?, outputDir }) — equations is [{ name, latex }, ...]; each saved as <name>.<format> in outputDir.render_batch_cached({ equations, format?, outputDir }) — same, reporting which files came from the session cache.render_equation_sheet({ title?, equations, saveTo? }) — equations is [{ name, latex, description? }, ...] → one reference-sheet HTML page.render_parameter_grid({ latexTemplate, paramName?, values, saveTo? }) — substitutes each of values for {PARAM} (or {<paramName>}) in the template and renders a comparison grid.render_diff({ before, after, label?, saveTo? }) — two LaTeX versions side by side as HTML.Diagrams / notation
list_diagram_templates() — no parameters.render_diagram_template({ template, params?, format?, saveTo? }) — template is one of control-system, neural-network, state-machine, bayesian-network, signal-flow, data-plot, commutative-diagram; params is an object (or JSON string) of template-specific overrides.build_notation_table({ inputFile, format?, saveTo? }) — format is markdown (default), latex, or html.Render the quadratic formula:
render_equation({ latex: "\\frac{-b \\pm \\sqrt{b^2-4ac}}{2a}", format: "svg" })
Render a circuit:
render_tikz({
tikz: "\\begin{circuitikz}\\draw (0,0) to[R, l=$R_1$] (2,0) to[C, l=$C_1$] (4,0);\\end{circuitikz}",
packages: ["circuitikz"],
format: "svg",
saveTo: "circuit.svg"
})
You can run your own UpMath renderer:
docker run -t -p 8080:80 ghcr.io/parpalak/i.upmath.me:master
Then set UPMATH_URL=http://localhost:8080 in your environment.
MIT
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
Google's universal MCP server supporting PostgreSQL, MySQL, MongoDB, Redis, and 10+ databases
Official GitHub integration for repos, issues, PRs, and CI/CD workflows