该项目源自一个现有的开源项目:tikz-mcp-server
这是一个基于模型上下文协议(MCP)的HTTP服务器,专门设计用于将TikZ/LaTeX代码渲染成高质量的PNG图像。它提供了一个render_tikz工具,允许客户端通过HTTP请求提交TikZ代码,并接收渲染后的图像。
兼容Cherry Studio客户端
render_tikz_base64、render_tikz_url和install_tex_package三种工具。deploy.sh脚本以简化Docker环境中的部署。在启动服务器之前,请确保您的系统已安装以下软件:
项目使用.env文件来配置环境变量。您可以复制.env.example文件并重命名为.env,然后根据需要修改值。
cp .env.example .env
.env文件包含以下示例变量:
SERVICE_NAME:Docker Compose服务的名称,默认为tikz-mcp-server。CONTAINER_NAME:Docker容器的显式名称,默认为tikz-mcp-server-container。PORT:服务监听的外部端口,默认为3000。PUBLIC_IP:公共IP地址,用于生成图像URL,默认为localhost。PUBLIC_PORT:公共网络端口,用于生成图像URL,默认为3000。DOMAIN:(可选)域名,如果设置,则优先使用HTTPS域名生成图像URL,例如https://tikz.yourdomain.com克隆仓库(如果尚未克隆):
git clone git@github.com:JoeChen2me/tikz-http-mcp-server.git
cd tikz-http-mcp-server
运行部署脚本:
首先,确保deploy.sh脚本具有执行权限:
chmod +x deploy.sh
然后,执行deploy.sh脚本来构建Docker镜像并启动服务:
./deploy.sh
运行最小化部署脚本:
首先,确保deploy-minimal.sh脚本具有执行权限:
chmod +x deploy-minimal.sh
然后,执行该脚本来构建最小化的Docker镜像:
./deploy-minimal.sh
要本地运行Python脚本,需要安装以下依赖项:
# macOS
brew install imagemagick mactex
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y texlive-xetex texlive-latex-recommended texlive-pictures imagemagick fonts-noto-cjk
# CentOS/RHEL
sudo yum install -y texlive-xetex texlive-latex-recommended texlive-pictures ImageMagick fonts-noto-cjk
pip install mcp starlette uvicorn click anyio
创建图像目录
mkdir -p images
启动服务器
python3 tikz_http_server.py --port 3000 --log-level INFO
工具列表
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{"method":"tools/list","params":{}}'
测试TikZ渲染
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{
"method":"tools/call",
"params":{
"name":"render_tikz_base64",
"arguments":{"tikz_code":"\\begin{tikzpicture}\\draw (0,0) circle (1cm);\\end{tikzpicture}"}
}
}'
测试并安装TeX包(仅当需要时)
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{
"method":"tools/call",
"params":{
"name":"install_tex_package",
"arguments":{"package_name":"pgfplots"}
}
}'
本地运行时可以使用以下环境变量:
PUBLIC_IP:公共IP地址(默认:localhost)PUBLIC_PORT:公共网络端口(默认:3000)LOG_LEVEL:日志级别(默认:INFO)示例:
PUBLIC_IP=localhost PUBLIC_PORT=3000 python3 tikz_http_server.py
脚本将执行以下操作:
* 检查Docker和Docker Compose是否已安装。
* 如果Docker Compose未安装,将尝试自动安装。
* 从`.env`文件加载环境变量(如果存在)。
* **检查容器是否已在运行,如果存在则停止并删除。**
* 构建名为`tikz-mcp-server:latest`的Docker镜像(`docker-compose.simple.yml`已明确指定使用项目根目录下的`Dockerfile`进行构建)。镜像名称基于`SERVICE_NAME`。
* 启动名为`tikz-mcp-server-container`的Docker容器(容器名称基于`CONTAINER_NAME`),并将容器内部的`3000`端口映射到外部的`${PORT}`端口。
* 等待服务启动并进行健康检查。
服务成功启动后,可以通过以下地址访问MCP服务器:
http://localhost:${PORT}/mcp/服务器提供了以下三个工具:
在使用最小化镜像时,如果缺少特定的TeX包,可以使用install_tex_package工具:
{
"package_name": "pgfplots"
}
支持的包名示例:
pgfplots - 用于绘制函数图表tikz-cd - 用于交换图tkz-euclide - 用于欧几里得几何circuitikz - 用于电路图在项目的根目录下,mcp_server_configs.json文件包含了不同MCP客户端(如Claude Desktop、VSCode、Windsurf、Cline、Cursor)的服务器配置示例。您可以参考此文档并根据所使用的客户端类型进行相应配置。
例如,以下是一般的MCP客户端配置示例:
{
"type": "http",
"url": "http://localhost:${PORT}/mcp/",
"transport": "streamable-http"
}
服务部署后,可以使用以下docker-compose命令来管理服务:
docker-compose -f docker-compose.simple.yml logs -f
docker-compose -f docker-compose.simple.yml restart
docker-compose -f docker-compose.simple.yml stop
docker-compose -f docker-compose.simple.yml down
docker-compose -f docker-compose.minimal.yml logs -f
docker-compose -f docker-compose.minimal.yml restart
docker-compose -f docker-compose.minimal.yml stop
docker-compose -f docker-compose.minimal.yml down
使用反向代理(如nginx)时,通过设置域名可以生成HTTPS格式的图像URL:
配置域名:在.env文件中设置域名
DOMAIN=https://tikz.yourdomain.com
重启服务:
docker-compose -f docker-compose.minimal.yml restart
为了方便开发,所有脚本文件都已通过卷映射到容器:
映射:
tikz_http_server.py → /app/tikz_http_server.pyclean_images.py → /app/clean_images.pyrun.sh → /app/run.sh热更新流程:
docker-compose -f docker-compose.minimal.yml restart增加了全面的CORS头部支持,允许所有来源访问图像资源,并解决跨域加载问题。