
MagicTeX
io.github.ZoeLinUTS由 GitHub 账号 ZoeLinUTS 发布v0.1.10更新于 Oct 24, 2026
LaTeX editor for AI agents: live PDF preview, PDF comments that drive edits, git history
概览
MagicTeX 是面向 AI 智能体的本地 LaTeX 编辑器:编译论文、打开实时 PDF 工作区,并把锚定在 PDF 上的批注变成智能体的修改指令。
- 可以做什么
- 编译 LaTeX 项目并打开或刷新实时 PDF 工作区,自动识别主文件,可选引擎与编译后端(render_preview)。读取已接受的 PDF 批注,返回页码、引用段落和源文件行号等工作项(check_comments)。在段落上添加批注、在线程中回复、编辑后带说明标记完成(add_comment、reply_to_comment、resolve_comment)。列出最近的编译检查点,并以图片形式显示并排差异(list_checkpoints、show_diff)。
- 适用场景
- 适合让助手协助修改 LaTeX 论文时使用:你在渲染后的 PDF 上审阅并留下批注,智能体据此修改源码并逐条解决,同时有检查点历史可供回退。
- 运行要求
- 通过 npx magictex-mcp 以 stdio 在本地运行。需要 Node 20.19+、Playwright 的 Chromium(自动安装,或复用已装的 Chrome),以及首次运行时约 650 MB 的 WASM TeX Live 资源下载,按用户缓存;可用 MAGICTEX_ASSETS_DIR 更改缓存位置。本地安装 TeX 与 latexmk 是可选项,可获得与 Overleaf 一致的输出。
安装
在 SourceWeft 中
- 打开 控制台中的 MagicTeX,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
MagicTeX — LaTeX Editor for AI Agents
[npm] [MCP registry] [CI] [stars] [last commit] [license] [Sponsor]
English · 简体中文 · 日本語 · 한국어 · Español · Français · Deutsch · Português
MagicTeX is a LaTeX editor built for AI agents — an Overleaf-like
one-window workspace for Claude Code, served by an MCP server, with no local TeX
install and no Overleaf account: live PDF preview, a source editor with a Visual
(WYSIWYG) mode, change history, and comments you anchor on the rendered PDF that
become edit instructions for the agent. (npm package: magictex-mcp.)
It compiles with a WASM TeX Live 2026 engine (texlyre-busytex) running inside a headless browser, so there's nothing multi-gigabyte to install — just a one-time WASM asset download.
[The MagicTeX workspace: file tree, source editor, live PDF, and a reviewer comment]
See it before you install
A guided walkthrough of the comment → agent loop lives at zoelin.dev/tools/magictex, built from real tool output. It's a replay, not a hosted instance — the TeX engine is a one-time ~650 MB download and the agent half is Claude itself, so MagicTeX runs next to your project rather than in a web page.
The workspace
One browser window (inspired by Typst's one-surface editor and LiquidText's anchored annotations):
- Comment → Claude loop (the point of it all). Review the rendered document
like a supervisor marking up a printout: select text, attach a comment
("tighten this paragraph"). Then tell Claude to "address my comments" — it
pulls them via
check_commentsas located work items (page + quoted passage- the source
file:lineit anchors to + your ask), edits the source, and resolves each card with a note. You interact with the document; Claude interacts with the source. Run it hands-off with/loop— seedocs/AGENT-LOOP.md.
- the source
- Editable source panel. A CodeMirror LaTeX editor with the project's files — save (Ctrl+S) recompiles and refreshes the PDF, Typst-style. Or keep using your own editor: any save triggers the same live loop.
- Live reload. A file watcher recompiles on every save — Claude's edits, the built-in editor's, or your external editor's.
- Change history. Each successful compile is auto-snapshotted to a hidden
git ref (
refs/latex-preview/checkpoints) — never touching your branches,git log, or working tree. The History tab shows the timeline and each checkpoint's colorized diff beside the PDF. - Get to Overleaf. Download PDF, Export .zip (clean build-inputs
bundle), and a one-click Open in Overleaf link for public GitHub repos;
Premium Git-bridge sync is a documented
git push. Seedocs/USER-GUIDE.md. - Review workflow (reviewer → gate → resolver). A reviewer/defender agent posts
comments via
add_comment; you Accept/Reject them (or flip Auto-accept for copilot mode); an author loop resolves the accepted ones. Comments carry roles and a reply thread. Seedocs/AGENT-LOOP.md. - Save vs. recompile, your call. The built-in editor auto-saves every 30s without recompiling; Ctrl+S / Save / Recompile rebuild the PDF on demand. (Flip ⚡ Live for recompile-as-you-type.) Your own editor and Claude's edits still auto-recompile via the watcher.
- Real projects. Auto-detects the main file, gathers multi-file
\input/\include,.bib, in-repo.cls/.sty/.bstand figures, runs BibTeX and reruns when needed; common missing packages are auto-injected. - Compile backend. Uses your local latexmk when you have one — full package
fidelity, output matching Overleaf — and the bundled zero-install WASM TeX Live
when you don't. Force either with
backend: "system"/"wasm". Every compile reports which one ran. - Document classes.
IEEEtranis bundled, because no venue class ships in the WASM TeX Live and a missing class can't be worked around the way a package can. Conference classes (NeurIPS, ICML, CVPR, ACL, AAAI …) carry no redistributable licence, so put the.clsfrom the author kit beside your source — it's picked up automatically. - MCP tools:
render_preview(compile + open the workspace),check_comments/resolve_comment/add_comment/reply_to_comment(the review loop),show_diff(side-by-side diff as an image — useful on image-capable clients). - Actionable errors. Failed compiles return parsed
{file, line, message}errors so Claude can self-correct, and show in the workspace.
Setup
MagicTeX is on npm as magictex-mcp and
listed in the official MCP registry as
io.github.ZoeLinUTS/magictex — so any client that reads the registry can find it.
There's nothing to clone and no TeX install; npx fetches it on first use.
-
Add it to your paper project's
.mcp.json(see.mcp.json.example):For local development from a clone, point it at the source instead:
"command": "npx", "args": ["tsx", "/absolute/path/to/magictex-mcp/src/server.ts"] -
Restart Claude Code (or
/mcpreconnect) so it picks up the server. -
Ask Claude to render. e.g. "render a preview of this paper" → the first call downloads the WASM TeX Live assets (~650 MB, one time), compiles, and opens the live preview tab. Subsequent edits reload it automatically.
The WASM assets are not in this repo. They're fetched on first run into a
per-user cache — ~/Library/Caches/magictex on macOS, $XDG_CACHE_HOME/magictex
on Linux, %LOCALAPPDATA%\magictex on Windows — so upgrading MagicTeX doesn't
re-download them, and a checkout, a global install and an npx run share one copy.
Set MAGICTEX_ASSETS_DIR to put them elsewhere. To pre-fetch:
npx texlyre-busytex download-assets <that directory>.
Install as a Claude Code plugin (slash commands)
For a low-typing workflow, install MagicTeX as a plugin — one install gives you the MCP server and the slash commands:
Then, in your paper project, use the workflow commands for the common flows:
/magic-latex— compile and open the workspace (the live preview)./ai-review [skill]— review the paper with a skill (defaultacademic-paper-revision; pass any skill name) and post comments for you to Accept/Reject. Missing skills are reported with an install hint./address-comments— resolve your accepted comments (loop it with/loop 60s /address-comments).- ⚡
/ultra-agents [skill] [depth]— fully autonomous: review, auto-accept, fix, repeat, up todepthrounds (default 2), stopping early the moment a round finds nothing new. No per-round approval — that's the point, and the risk.depth > 5asks you to confirm before starting. Ends with a summary (what was raised, what changed, which checkpoints to look at) — every round is still an ordinary, revertible checkpoint. Seedocs/AGENT-LOOP.md.
One command per tool
Every MCP tool also has a slash command with the same name, so you can drive any
single step by typing the tool name. The rule to teach: the tool is X → type
/X.
You never have to type these — plain English works too ("render a preview", "address my comments"). The commands are just a fast, teachable shorthand.
The plugin bundles the MCP server (
npx magictex-mcp), so installing the plugin is all you need — the.mcp.jsonabove is the alternative if you'd rather not install a plugin. The slash commands work either way.
Tools
The MCP surface, for any client that speaks MCP. (In Claude Code you can just ask in plain English, or use the slash commands above — these are the underlying tools.)
The headline workflows are built on top of these, not among them. /magic-latex,
/ai-review, /address-comments and ⚡ /ultra-agents are Claude Code plugin
commands that orchestrate the tools above — /ultra-agents chains review →
auto-accept → fix for as many rounds as you allow, and is the reason add_comment
takes an accepted flag. They are not part of the MCP surface, so another MCP client
sees the seven tools only. See the plugin section
and docs/AGENT-LOOP.md.
See it in the terminal
These are real tool outputs, captured verbatim from an actual run against the sample paper — not mocked up. This is what you see in Claude Code while the browser workspace (screenshot above) reflects the same state live.
You type:
Claude calls render_preview and replies:
You (or a reviewer skill) leave a comment, then ask what's ready to act on. Claude
calls check_comments:
Claude makes the edit and calls resolve_comment:
Ask again, and the accepted queue is empty — only the still-unaccepted suggestion remains, waiting on you:
How it works
The WASM engines need DOM/Worker globals, so the server hosts a hidden headless
Chromium as its compile worker; the workspace you open is a lightweight React +
pdf.js app with no WASM in it. See docs/ARCHITECTURE.md.
Both front doors — you in the workspace, agents through the 7 MCP tools — meet at
the same coordinator, comment store, and git history. You act on the rendered
document (anchor a comment); Claude acts on the source (reads your comments via
check_comments, edits, resolve_comment). That shared substrate is what makes
the comment loop, the review workflow, and traceable history possible.
Requirements
- Node 20.19+ (the floor
chokidarandplaywrightactually need; the server checks at startup and says so) - Playwright's Chromium (installed automatically; ~150–300 MB) — or set it to reuse your installed Chrome.
- ~650 MB disk for the one-time WASM TeX Live assets — all of it fetched on the
first run, in three package sets (basic 87 MB, recommended 190 MB, extra 324 MB,
plus the 31 MB engine). A normal paper only loads the basic set; the larger two
sit on disk until something needs them. Cached per user, not per install, so
upgrading MagicTeX doesn't re-download them. Override the location with
MAGICTEX_ASSETS_DIR. - A local TeX install is optional. See below for when it matters.
Do I need a local TeX distribution?
No — the bundled WASM engine compiles with nothing installed, which is the whole
point. But it ships a subset of TeX Live, so some things aren't in it: svg,
most venue document classes, and various less common packages. When one is
missing you'll be told, rather than handed a silently wrong PDF.
Install a distribution when you want output that matches Overleaf exactly. MagicTeX picks it up on its own — no configuration:
latexmkis what MagicTeX looks for onPATH, but it isn't something you install on its own — it's a driver script that comes inside the distributions above. Check withlatexmk -version, notwhich latexmk:latexmkis a Perl script, and MiKTeX putslatexmk.exeon yourPATHwithout shipping a Perl to run it with — so the file is found and still cannot execute. On macOS you may needeval "$(/usr/libexec/path_helper)"or a fresh terminal first.
Every compile tells you which one ran — xelatex · system or xelatex · wasm.
Development
Two tiers, on purpose. npm test covers the comment store, anchor matching, line
and column geometry, the history repo, asset paths, compile-log classification, the
preview server's shutdown, and an MCP workflow E2E — all without a browser or a TeX
engine, so it stays fast and deterministic. CI (.github/workflows/ci.yml) runs
typecheck + UI build + that suite on Node 20 and 22 for every push and pull request.
The things a unit test structurally cannot see — highlight geometry at several zoom
levels, what a failed render actually tells the reader, whether shutting down closes
the server and warns any open window — live in scripts/smoke-*.mjs and run against
a real browser and a real compile in .github/workflows/smoke-macos.yml. Each of
those exists because something shipped broken that the unit suite was green through.
Please keep both green and add coverage with changes.
Documentation
- User guide — everyday use, the comment loop, Visual mode, the file tree, getting your paper into Overleaf, package coverage.
- The agent loop — comments as triggers, running it hands-off with
/loop, the reviewer → gate → resolver workflow, and ⚡/ultra-agents. - Roadmap — what's shipped for concurrent agents, and what real parallel multi-agent editing still needs.
- Architecture — why a headless browser, what every module does, the compile flow.
All four are translated into the same 8 languages as this README — each page has its own language switcher at the top.
Roadmap
Multiple Claude Code sessions can already work the same project concurrently without
corrupting comments or the checkpoint history (see docs/ROADMAP.md)
— true parallel multi-agent editing (reviewer/author/defender on their own git branches,
merged back together) is the next milestone.
Sponsor this project
MagicTeX is free and open source (AGPL-3.0). If it saves you time on your papers, please consider sponsoring the project — it funds continued development. A ⭐ on the repo helps too.
Acknowledgements
MagicTeX is written and maintained by Zoe Lin, built with Claude Code.
Thanks to David Turnbull, who told me the story of Knuth spending ten years
building his own typesetter rather than accept how his book looked — the story this
project keeps arguing with. And to the maintainers of
texlyre-busytex, without whose WASM
TeX Live none of this would run locally at all.
License
AGPL-3.0-or-later — matching the texlyre-busytex engine it builds on.
See THIRD_PARTY_NOTICES.md.
来源:README.md,提交 b1e5dae
工具
0版本历史
1- v0.1.10最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分