前言
开源仓库:ChenAI-TGF/texstudio-mcp(MIT)
传输方式:stdio · 协议:Model Context Protocol (MCP)
如果你在用 TeXstudio 写论文,同时又希望 Cursor、Claude Desktop 等 AI 客户端能「真的动手」读源码、改 .tex、跑编译、看日志,而不是只会泛泛而谈,那么需要一个专门面向 LaTeX 工作流的 MCP 服务。texstudio-mcp 就是这样一层桥:它在你的工程目录(workspace_root)里安全地读写文件,按需调用本机已安装的 TeX 工具链,并把结果以结构化 JSON 还给 AI。
本文只谈它能做什么、适合什么场景 ;本地安装、Cursor 配置、常见踩坑的部署与接入教程 会放在下一篇博客里单独写。
一句话定位
texstudio-mcp = 面向 LaTeX 项目的 MCP 工具集 + 工程路径沙箱 + 对本机 latexmk / bibtex / biber / Poppler / SyncTeX / ChkTeX 等的封装。
效果演示
为什么需要专门的 LaTeX MCP?
通用「读文件夹」类工具往往缺少 LaTeX 语境:
| 痛点 | texstudio-mcp 的做法 |
|---|---|
| AI 乱改路径、读到工程外 | workspace_root + 路径策略,禁止逃逸 |
| 只会改字、不会编译 | 封装 latexmk -pdf,返回摘要与截断日志 |
| BibTeX / biblatex 分不清 | 只读猜测 biber vs bibtex,或一条龙编排 |
| 引用改完不知道要不要多编几遍 | bounded 流水线:latexmk → bib → 可选 1~2 次后续 latexmk |
| PDF 只能「让用户自己看」 | pdfinfo 元数据、pdftotext 前几页文本预览 |
| 编辑器与 PDF 对不上行 | SyncTeX 正向 / 反向解析 |
.bib 重复 key 难以发现 |
.bib 校验,可选 bibtexparser 加强 |
| 想对齐 TeXstudio 最近打开的稿子 | 读配置快照,启发式 suggested_job_basename |
核心设计:工程沙箱
你把 workspace_root 设为 LaTeX 工程根目录(或主 .tex 所在文件夹)。此后:
- 读 :
read_project_file、grep_project、list_latex_related_files - 写 :
replace_project_lines、write_project_file(覆盖需显式overwrite=true) - 析 :
parse_tex_dependencies对单个.tex做静态扫描(不跑 TeX)
路径一律相对 workspace_root 解析;绝对路径、含 .. 的相对路径会被拒绝。这样 AI 在自动化批处理时不容易误删或误读系统其它目录。
和 TeXstudio 的关系 :TeXstudio 常把「当前工作目录」设为主 .tex 那一层。若你把 workspace_root 指到同一层,只传 paper.tex 这样的 basename,服务会自动避免多余的 latexmk -cd;若 workspace_root 是仓库根、主文件在子目录,则用相对路径(如 thesis/chapter1.tex),由 latexmk 在子目录里编译。细节在下一篇部署文里会结合例子说明。
功能详解(按使用场景)
1. 环境与工具链自检
在碰工程之前,可先问 MCP「我这台机器能不能编译」:
| 工具 | 作用 |
|---|---|
get_server_info |
Python 版本、包版本、平台 |
health_check_tex_toolchain |
检测 latexmk、pdflatex、xelatex、lualatex、bibtex、biber、chktex、pdfinfo、pdftotext、synctex 等是否在 PATH |
只做 which,不启动编译,适合 Agent 在流程开头做能力探测。
2. 读工程、搜代码、理清依赖
| 工具 | 作用 |
|---|---|
read_project_file |
读 UTF-8 文本;可按行号截取;有 max_chars 上限 |
grep_project |
在工程内对小文件做正则搜索(默认常见 LaTeX 后缀) |
list_latex_related_files |
递归列出 .tex、.bib、.sty 等(跳过 .git、.venv) |
parse_tex_dependencies |
静态 分析一篇 .tex:\\input、\\include、\\includegraphics(同文件内 \\graphicspath 会参与找图)、\\usepackage、\\bibliography、\\addbibresource 等;可切换为 workspace_manifest 枚举整个工程资源树 |
适合:重构目录前让 AI 画依赖图、找漏掉的 \input、确认插图文件是否在工程内(workspace_asset_found)。
注意 :不会执行 TeX;带 \\、\# 等动态路径会进 unresolved。
3. 可控编辑
| 工具 | 作用 |
|---|---|
replace_project_lines |
按 1-based 行区间替换内容 |
write_project_file |
新建文件(自动建父目录);覆盖必须 overwrite=true |
写入统一 UTF-8、LF,并有体积上限,避免一次塞进巨型内容。
4. 编译与文献(重点)
单次编译:compile_latex_document
在 workspace_root 下对 main_tex 执行 latexmk -pdf。返回:
summary:单行人类可读摘要stdout_tail/stderr_tail:截断后的输出(控制 MCP JSON 体积)wall_clock_ms、exit_code、timed_out等
同一 MCP 进程内,同一 workspace_root 同时只能跑一个「会改产物」的任务 (编译、bib、编排流水线互斥)。并行第二次调用会得到 concurrent_workspace_exclusive_blocked。
文献后端:run_bibtex_on_job / run_biber_on_job
在沙箱内的 relative_working_directory 下,对 job_name(仅基名,如 paper 对应 paper.aux / paper.bcf) 跑 bibtex 或 biber。可开 preflight 检查 .aux / .bcf 是否存在。
编译前猜测:guess_job_bibliography_backend
只读 查看 JOB.bcf、JOB.aux 片段,启发式返回应使用 biber 还是 bibtex(及置信度)。不启动子进程,适合编排前给 Agent 提示。
一条龙编排:compile_latex_then_run_bibliography_on_job
在一次 MCP 调用、占满一把锁的情况下完成常见流程:
text
latexmk -pdf → bibtex 或 biber → (可选)再跑 0~2 次 latexmk
主要参数概念:
| 参数 | 含义 |
|---|---|
main_tex |
主 tex 相对路径 |
job_name |
可为空,默认从 main_tex 文件名推导 |
bibliography_tool |
auto / bibtex / biber |
post_bibliography_latexmk_passes |
0~2,bib 成功后再 latexmk 次数 |
bibliography_cycles |
1~4,重复「bib + 后续 latexmk」的轮数(有上限,非无限收敛) |
auto 时在首次编译后根据 .aux/.bcf 选工具;若 job_name 难从 tex 推导,还可结合 TeXstudio 配置里的 suggested_job_basename(弱联动)。
失败时响应里会有 stage_failed,标明卡在编译、第几轮 bib、还是第几次后续 latexmk。
日志诊断
| 工具 | 作用 |
|---|---|
analyze_latex_log |
读 .log 尾部,启发式提取 error / warning |
analyze_bibliography_log |
读 .blg,区分 biber/BibTeX 风格问题 |
全文日志仍建议用 read_project_file 读 .log,工具返回的是摘要型结果。
5. 参考文献文件 .bib
| 工具 | 作用 |
|---|---|
validate_bib_file |
重复 citation key、重复 @string、粗括号平衡;可选规范化空白并写回 |
| 可选增强 | pip install -e ".[bibtex]" 后,use_bibtexparser=true 用 bibtexparser 做更靠谱的条目级检查 |
不是完整 BibTeX 语法验证器,但足以在 CI/Agent 流程里挡掉低级错误。
6. PDF 与 SyncTeX
| 工具 | 作用 |
|---|---|
read_pdf_metadata |
调用 pdfinfo,返回页数、版本、元数据等 |
extract_pdf_text_preview |
pdftotext 抽取前几页文本;过长会截断,并可配中英文 suggestion |
resolve_synctex_forward |
TeX 行 → PDF 坐标(synctex view) |
resolve_synctex_backward |
PDF 页码+坐标 → TeX 位置(synctex edit) |
需要本机 PATH 里有 Poppler / SyncTeX,且工程内已有对应 .pdf 与 .synctex.gz(通常编译后才有)。
7. ChkTeX 静态检查
| 工具 | 作用 |
|---|---|
run_chktex_on_tex |
检查单个 .tex |
batch_run_chktex_on_tex |
按路径列表批量 |
run_chktex_on_workspace |
先枚举工程内 .tex 再批量(有数量上限) |
ChkTeX 有告警时退出码可能非 0,此时 ok 也可能为 false,但 warnings 里仍有条目可给 AI 读。
8. TeXstudio 联动
| 工具 | 作用 |
|---|---|
read_texstudio_profile_snapshot |
读取白名单文件:texstudio.ini、lastSession.txss(仅文件名,禁止子路径) |
include_parsed_hints=true |
启发式解析最近文档、Master 文档等,得到 suggested_job_basename |
用于:Agent 不知道 job 名时,对齐你 IDE 里最近打开的那篇 .tex。不会 把 TeXstudio 里的绝对路径自动纳入 workspace_root,也不应在不可信会话里开启。
典型工作流示例(给 Agent 编排参考)
改稿 + 单遍编译
validate_workspace_rootread_project_file/grep_project定位章节replace_project_lines修改compile_latex_documentanalyze_latex_log若失败
带参考文献的论文
compile_latex_then_run_bibliography_on_job(bibliography_tool=auto,post_bibliography_latexmk_passes=1或2)- 仍有问题则
analyze_bibliography_log+read_project_file读.blg
插图路径排查
parse_tex_dependencies看includegraphics边与graphicspath- 对缺失资源
list_latex_related_files核对
能力边界(使用前心里有数)
- 不替代完整 IDE:不提供 PDF 预览 UI、正向/反向同步编辑器的交互,只提供数据接口。
- 编译收敛有限:编排流水线有 latexmk/bib 轮数上限,复杂引用仍可能需要你手动多编几次。
- 单进程互斥 :同一 MCP 进程、同一
workspace_root不能并行编译;多开 Cursor 窗口 / 多个 MCP 实例仍可能同时写同一文件夹。 - 日志是截断的 :大段
latexmk输出请读工程内.log文件。 - TeX 工具需本机安装 :MCP 包本身不包含 TeX Live;
health_check_tex_toolchain可自检。
下一篇预告:《texstudio-mcp 部署与接入指南》
计划在下一篇文章中覆盖:
- 从 GitHub 克隆与虚拟环境安装
- Cursor / 其它 MCP 客户端的 stdio 配置示例
workspace_root与main_tex的推荐组合(对齐 TeXstudio 习惯)- 首次
health_check_tex_toolchain与最小main.tex试编译 - 文献流水线参数怎么选(
bibliography_tool、post_bibliography_latexmk_passes、bibliography_cycles) - 常见问题:PATH 里没有
latexmk、并发占槽、PDF/SyncTeX 缺失
欢迎关注仓库 Star / Issue
https://github.com/ChenAI-TGF/texstudio-mcp
链接
- 源码与 MIT 许可证:https://github.com/ChenAI-TGF/texstudio-mcp
- 运行时依赖(见仓库):
mcp>=1.8.0;可选bibtexparser([bibtex]extra)