图像平铺mcp服务器
](https://www.npmjs.com/package/image-tiler-mcp-server)  ](https://nodejs.org/en)
MCP服务器,通过平铺大图像并在细节因自动缩小而丢失之前捕获完整网页,为LLM提供全分辨率视觉。
The server generates an interactive HTML preview for every image, showing per-model tile grids and token estimates
你能做什么
- 网页的视觉质量保证。 捕获一个URL,平铺它,让LLM以全分辨率发现未对齐的元素、错误的颜色和损坏的布局。修复代码,重新捕获,并直观地验证修复。
- 移动响应测试。 使用移动模拟、视网膜缩放和真实的移动用户代理在任何视口宽度进行捕获。LLM逐块审查完整的移动布局,捕捉只出现在小屏幕上的响应断点问题。
- 全分辨率图像分析。 当LLM缩小图表、信息图表和设计模型时,它们会丢失关键细节。克劳德将3600 x 20220px的整页截图压缩到279 x 1568,变成76个可分析的图块,每个图块都是原生分辨率。
- 令牌高效瓷砖检查。 每个图块都得到基于熵的内容分类:空白、低细节、混合或高细节。LLM完全跳过空白磁贴,将令牌集中在重要的事情上。
- 迭代式可视化工作流程。 捕获、分析、修复、重新捕获。版本化输出目录(
_v1,_v2, ...)保留每次迭代,这样您就可以在不覆盖之前结果的情况下比较之前和之后的结果。
快速开始
克劳德代码
claude mcp add image-tiler -- npx -y image-tiler-mcp-serverimage-tiler是本地别名。你可以随心所欲地命名它。image-tiler-mcp-server是下载并运行的npm包。
看 克劳德代码MCP文档 了解更多信息。
Codex CLI
codex mcp add image-tiler -- npx -y image-tiler-mcp-server或添加到 ~/.codex/config.toml:
[mcp_servers.image-tiler]
command = "npx"
args = ["-y", "image-tiler-mcp-server"]VS Code (Cline / Continue)
添加到您的VS Code MCP设置中:
{
"image-tiler": {
"command": "npx",
"args": ["-y", "image-tiler-mcp-server"]
}
}Cursor
添加 ~/.cursor/mcp.json:
{
"mcpServers": {
"image-tiler": {
"command": "npx",
"args": ["-y", "image-tiler-mcp-server"]
}
}
}Claude Desktop
添加到您的Claude Desktop配置文件中:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"image-tiler": {
"command": "npx",
"args": ["-y", "image-tiler-mcp-server"]
}
}
}编辑后重新启动Claude Desktop。
Global Install (faster startup)
npm install -g image-tiler-mcp-server然后在任何客户端中使用更简单的配置:
{
"command": "image-tiler-mcp-server"
}From Source
git clone https://github.com/keiver/image-tiler-mcp-server.git
cd image-tiler-mcp-server
npm install
npm run build然后将MCP配置指向构建文件:
{
"command": "node",
"args": ["/absolute/path/to/image-tiler-mcp-server/dist/index.js"]
}Docker
塑造形象:
git clone https://github.com/keiver/image-tiler-mcp-server.git
cd image-tiler-mcp-server
docker build -t image-tiler-mcp-server .该图像包括用于URL捕获的Chromium。Chrome浏览器 --no-sandbox 默认情况下,镜像中的标志是启用的,因为Docker容器不提供Chrome沙盒所需的用户命名空间。容器本身提供进程隔离。重新启用沙盒(例如 --privileged 或用户命名空间支持),传递 -e CHROME_NO_SANDBOX=0.
{
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "/path/to/your/images:/data",
"-e", "TILER_ALLOWED_DIRS=/data",
"image-tiler-mcp-server"
]
}这 -i 标志是必需的(stdio传输)。为服务器需要读取或写入的任何目录装载一个卷,并设置 TILER_ALLOWED_DIRS 以限制对这些挂载的文件访问。
要完全禁用URL捕获(无Chrome,无网络访问):
{
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TILER_DISABLE_URL_CAPTURE=1",
"-v", "/path/to/your/images:/data",
"-e", "TILER_ALLOWED_DIRS=/data",
"image-tiler-mcp-server"
]
}用法
平铺图像
tile~/source.png和分析内容
服务器读取图像尺寸并生成交互式HTML预览,其中每个模型的选项卡显示网格覆盖、图块计数和令牌估计。选择与您的用例匹配的模型,然后服务器平铺并返回批次进行分析。
捕获网页
捕获的完整页面截图https://tomotv.app
服务器启动无头Chrome浏览器,滚动页面以触发延迟加载的图像(loading="lazy"),然后捕获整页屏幕截图(滚动拼接16384px以上的页面)。您的助手以全分辨率接收每个部分,并可以识别布局问题、未对齐的元素或缩小后隐藏的损坏样式。
要只获取屏幕截图而不进行平铺,只需要求提供屏幕截图,并在比较步骤后停止。
测试移动布局
捕捉https://tomotv.app在移动视图中
这是响应式QA,而不仅仅是一个不同的视口。服务器通过以下方式进行捕获 mobile: true,它设置了一个390px视口、2x视网膜比例和一个移动Safari用户代理。检查移动UA或触摸功能的网站为其移动布局提供服务,因此LLM会准确审查真实手机用户看到的内容。
自定义瓷砖
| What | 示例提示 |
|---|---|
| 针对特定模型 | “Tile hero.png for OpenAI” |
| 保持全分辨率 | “平铺banner.png为全分辨率,不缩小” |
| PNG输出 | “平铺图.PNG为无损PNG” |
| 从URL平铺 | “下载并平铺https://keiver.dev/source.png" |
| 平铺base64 | “平铺此base64图像:iVBORw0KGgo…” |
预设
| 预设 | 默认磁贴 | 令牌/磁贴 | 最大磁贴 | ID |
|---|---|---|---|---|
| 克劳德 | 1092像素 | 1590像素 | 1568像素 | claude |
| OpenAI(GPT-4o/o系列) | 768像素 | 765 | 2048像素 | openai |
| 双子座 | 768像素 | 258像素 | 768像素 | gemini |
| 双子座3 | 1536像素 | 1120 | 3072像素 | gemini3 |
OpenAI注释: 这 openai config的目标是GPT-4o/o系列视觉管道(512px瓷砖补丁)。GPT-4.1使用了一个根本不同的管道(32x32像素补丁),目前不受支持。这将需要一个具有不同计算方法的单独模型配置。双子座3注: Gemini 3为每张图片使用固定的代币预算(1120个代币,无论尺寸大小)。平铺增加了总令牌成本,但保留了细节。对于细节不重要的情况,可以考虑发送一张图片。
为什么是瓷砖?
你截图一整页,粘贴到克劳德,克劳德 把它压成缩略图任何长边超过1568像素的图像都会自动缩小到约1.15百万像素以内。3600 x 20220px的全页截图变成了279 x 1568,在模型看到之前就损失了99%以上的像素。
GPT-4o更宽容,但仍然具有破坏性:它将图像缩放到2048px以内,然后将最短边缩小到768px, *然后* 瓷砖内部。在GPT-4o开始自己的拼接之前,一张8192倍宽的NASA全景图变成了1456 x 768。
Gemini 1.5/2.0以768px平铺的方式原生处理大图像,无需缩小。然而,Gemini 3将每张图片的大小限制在固定的代币预算(1120个代币)内。Tiling为每件作品提供了自己的预算。
每个图块都位于模型的最佳位置内,因此LLM以全分辨率对其进行处理。
没有瓷砖会发生什么
使用 assets/portrait.png (3600 x 20220,国家地理杂志的整版截图)作为示例:
| 模型 | 发生了什么 | 影响 |
|---|---|---|
| 克劳德 | 自动缩小到约279 x 1568 | 约0.6%的原始像素得以保留 |
| GPT-4o | 缩小到~365 x 2048,然后内部平铺 | ~1%的原始像素在缩小后仍然存在 |
| Gemini 3 | 每张图片上限为1120个代币(默认) | 无论图片大小,固定代币预算 |
Gemini 1.5/2.0以768px的分辨率原生平铺大图像,无需缩小。 对于Gemini 3,平铺通过将每个平铺作为单独的图像发送来增加总令牌预算。
使用瓷砖
| 模型 | 瓷砖 | 结果 |
|---|---|---|
| Claude | 1092px下有76块瓷砖 | 1568px最佳点内的每块瓷砖,没有缩小 |
| GPT-4o | 135个768px的瓷砖 | 每个2048px以下的瓷砖,不需要预先缩小尺寸 |
| Gemini 3 | 42个区块,1536px | 每个区块都有自己的1120代币预算 |
使用 assets/landscape.png (8192 x 4320,美国国家航空航天局图片库):
| 模型 | 无瓷砖 | 有瓷砖 |
|---|---|---|
| Claude | 自动缩小到约1568 x 827(约3.7%的像素存活) | 32个图块,1092px,完整分析 |
| GPT-4o | 缩小到约1456 x 768(约3%的像素存活) | 768像素的66个图块,全分辨率 |
| Gemini 3 | 上限为1120个代币 | 18个区块,1536px,18倍代币预算 |
*根据截至2026年2月发布的模型视觉文档: 克劳德视力极限 · OpenAI愿景指南 · 双子座形象理解 · Gemini媒体分辨率*
运作原理
此MCP服务器:
- 读取图像尺寸和目标模型的视觉配置
- 生成交互式HTML预览,每个模型选项卡显示网格覆盖、图块编号和令牌估计
- 计算一个最优网格,使每个图块都保持在模型的最佳点内
- 将图块提取为单个图像(WebP默认,PNG可选)并将其保存到磁盘
- 返回元数据摘要(网格布局、文件路径、令牌成本、每个图块内容提示)
- 按需供应瓷砖:致电
tilesDir+start/end检索最多5个图块的批次
Web捕获管道。 对于URL,服务器启动无头Chrome,通过滚动页面触发延迟加载的图像,捕获整页截图(滚动拼接16384px以上的页面),然后将截图馈送到相同的平铺管道中。
自动缩小。 最长边超过10000px的图像在平铺之前会自动缩小(可通过以下方式配置 maxDimension).这使图块计数合理,并通过增加每个图块的内容密度来提高LLM理解。集 maxDimension=0 以禁用或传递自定义值(例如。, maxDimension=5000)为了更积极地缩小规模。
Tool Reference
tiler
一个处理所有图像拼接操作的统一工具。模式会根据您提供的参数自动检测:
tilesDir目前→ 瓷砖检索模式 (只读分页)url或screenshotPath目前→ URL捕获模式 (截图+互动程序)filePath,sourceUrl,dataUrl,或imageBase64目前→ 平铺图像模式
模式优先级: 当存在多个模式参数时,该工具会按优先级进行解析:tilesDir>url/screenshotPath>filePath/sourceUrl/dataUrl/imageBase64. 避免在同一个调用中传递来自不同模式的参数。
工作流程:
该工具使用两步过程,让您在平铺之前选择正确的模型:
- 比较 -仅使用图像源进行调用。返回一个比较表,显示每个支持模型的磁贴计数和令牌估计值,以及交互式HTML预览。
- 瓷砖 -与所选人员再次通话
preset+outputDir从步骤1开始,加上:
- 图像来源: 重新包含原始源参数(filePath, sourceUrl等等) - 捕获: 使用 screenshotPath 从步骤1(不是原始步骤 url)
跳过比较步骤: 提供preset和outputDir第一次打电话时立即打电话。
交互式模型选择器: 支持MCP启发的客户端会得到一个下拉选择器,而不是比较表。
参数-图像源(平铺图像模式)
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
filePath | string | no\* | - | 图像文件的绝对或相对路径 |
sourceUrl | string | no\* | - | 下载图像的URL(最大50MB,超时30秒)。 https: 使用SSRF滤波; http: 不允许对本地开发服务器进行筛选 |
dataUrl | string | no\* | - | 带有base64编码图像的数据URL |
imageBase64 | string | no\* | - | 原始base64编码图像数据 |
\*平铺图像模式需要至少一个图像源。
参数-URL捕获(捕获模式)
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
url | string | no | - | 要捕获的网页的URL。需要安装Chrome/Chromium(或 CHROME_PATH 有人)。 |
screenshotPath | string | no | - | 指向以前捕获的屏幕截图的路径。跳过提供的URL捕获。 |
viewportWidth | 编号 | 否 | 1280 (390 当 mobile) | 浏览器视口宽度(像素)(320-3840) |
mobile | boolean | 否 | false | 是否模拟移动设备。当为true时,默认值为 viewportWidth 至390, deviceScaleFactor 并设置移动用户代理。 |
deviceScaleFactor | 编号 | 否 | 1 (2 当 mobile) | 设备像素比(0.1-5)。使用 2 对于视网膜, 3 适用于高DPI移动设备。 |
userAgent | string | no | - | 自定义用户代理字符串。在以下情况下自动设置为移动Safari UA mobile: true 并且没有提供明确的值。 |
waitUntil | string | 否 | "load" | 何时考虑页面加载: "load", "networkidle",或 "domcontentloaded" |
delay | 编号 | 否 | 3000 | 页面加载后的额外延迟(毫秒)(最大30000) |
支持对高于16384px的页面进行滚动缝合。自动触发延迟加载的图像(loading="lazy")在通过滚动页面进行捕获之前。没有懒惰图像的页面不受影响。
参数-磁贴检索(分页模式)
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
tilesDir | string | no | - | 磁贴目录的路径(由之前的磁贴调用返回为 outputDir) |
start | 编号 | 否 | 0 | 起始图块索引(从0开始,包括0) |
end | number | no | start+4 | 结束图块索引(从0开始,包括0)。每批最多5块瓷砖。 |
skipBlankTiles | boolean | 否 | true | 跳过空白磁贴,返回文本注释而不是图像。设置为 false 包括所有瓷砖。 |
参数-平铺配置(跨模式共享)
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
preset | string | 否 | 自动(最便宜) | 目标视觉预设: "claude", "openai", "gemini", "gemini3"。省略时,自动选择最具令牌效率的预设。 |
tileSize | number | no | 模型默认值 | 平铺大小(像素)。夹在模型支持的范围内,如果超出范围,则会发出警告。 |
maxDimension | 编号 | 否 | 10000 | 最大尺寸(像素)(0表示禁用,或256-65536)。值1-255被静默地限制为256。预缩小图像,使其最长边在平铺之前符合此值。 |
outputDir | string | no | 见下文 | 保存磁贴的目录。默认值:for filePath 来源, tiles/{name}_vN/ 源旁边(自动递增: _v1, _v2, ..., _vN);为 sourceUrl/dataUrl/imageBase64, {base}/tiles/tiled_{timestamp}_{hex}/对于捕获, {base}/tiles/capture_{timestamp}_{hex}/. {base} 是 ~/Desktop, ~/Downloads,或 ~ (首先可用)。 |
page | 编号 | 否 | 0 | 要返回的平铺页面(0=前5,1=后5,以此类推) |
format | string | 否 | "webp" | 输出格式: "webp" (较小,默认)或 "png" (无损) |
includeMetadata | boolean | 否 | true | 使用图像统计数据分析每个图块,并返回内容分类(空白、低细节、混合、高细节)以及 stdDev 和 entropy 每个图块的值 |
model | string | 否 | - | 已弃用。 使用 preset 相反。仍然接受;在响应中发出弃用警告。 |
MCP Prompts and Resources
提示
为支持的客户提供指导性工作流程 MCP提示:
| 提示 | 参数 | 描述 |
|---|---|---|
tile-and-analyze | filePath (必填), preset (可选), focus (可选) | 遍历局部图像的平铺,并以全分辨率分析每个平铺。这 focus 该论点缩小了分析范围(例如,“UI布局”、“文本可读性”)。 |
capture-and-analyze | url (必填), focus (可选) | 遍历捕获网页屏幕截图并逐一分析。 |
资源
支持的客户端的静态引用 MCP资源:
| URI | 格式 | 描述 |
|---|---|---|
tiler://models | JSON | 所有支持的视觉模型预设,包括图块大小、最小/最大边界和每图块标记率。 |
tiler://guide | 纯文本 | 涵盖平铺工作流程、预设摘要和使用提示的快速参考。 |
行为
- 来源冲突: 多个图像源参数→ 最高优先级源与警告一起使用(
filePath>sourceUrl>dataUrl>imageBase64). - 重新进入: 如果
outputDir已经有了比较步骤的预览,服务器直接跳到平铺。 - 取消奖励: 取消模型选择器将返回
"Tiling cancelled by user."没有瓷砖。 - 版本化输出: 重复平铺同一来源会创建
_v1,_v2, ...,_vN目录,以避免覆盖。 - 瓷砖命名:
tile_ROW_COL.{format}具有零填充的3位数索引(例如。,tile_000_003.webp),一行一行,从左到右。
支持格式
PNG、JPEG、WebP、TIFF、GIF
故障排除
“找不到命令” -请确保已安装Node.js 20+: node --version
“找不到文件” -使用绝对路径。从MCP服务器的工作目录解析相对路径。
“MCP工具不可用” -配置更改后重新启动MCP客户端。在Claude Code中,运行 /mcp 检查服务器状态。
“未找到Chrome” -安装谷歌Chrome浏览器或设置 CHROME_PATH Chrome可执行文件的环境变量(必须是绝对路径)。
以root身份运行 -以root身份运行时,Chrome的沙盒会自动禁用。对于非根容器(例如Docker),设置 CHROME_NO_SANDBOX=1官方Docker镜像已经设置了这个。
安全
运输: 仅限stdio。服务器是由MCP客户端生成的单会话本地进程。它从不监听网络套接字。
URL下载保护(始终打开)
https: sourceUrl 下载使用 request-filtering-agent,在发出请求之前阻止对私有IP范围的请求:
- RFC 1918(10.x,172.16-31.x,192.168.x)
- 环回(127.x,::1)
- 链接本地/IMDS(169.254.x,fe80::/10),包括IPv4映射的IPv6(
::ffff:169.254.169.254) - Cgnat(100.64.X),ula(FC 00:/7)
HTTP重定向最多可跟踪5个跃点。每一跳都重新应用SSRF滤波 https: URL,因此即使初始URL是公共的,重定向到私有IP也会被阻止。 https: 到 http: 降级被阻止。 http: 下载绕过SSRF过滤,适用于本地开发服务器(localhost、LAN IP)。使用 https: 对于所有远程/生产URL。
限制: DNS重新绑定在应用层得到了缓解,但并没有完全阻止。
路径控制(通过选择加入 TILER_ALLOWED_DIRS)
集 TILER_ALLOWED_DIRS 以逗号分隔的绝对路径列表,将所有文件I/O限制到这些目录:
TILER_ALLOWED_DIRS=/app/uploads,/tmp/tiler-work设置时:
filePath和tilesDir通过以下方式检查输入fs.realpath()(解析符号链接)。outputDir根据最近的现有祖先检查写入,以防止通过不存在的目录进行路径遍历。- 允许列表之外的任何路径都会被拒绝
[TILER_ALLOWED_DIRS]错误。
未设置时,不应用路径限制(保留向后兼容的本地行为)。
Chrome URL捕获终止开关
Chrome headless可以访问主机可以访问的任何网络地址。应用程序级IP检查无法可靠地约束它。对于没有 NetworkPolicy 或等效的,完全禁用URL捕获:
TILER_DISABLE_URL_CAPTURE=1任何与 url 参数将返回错误,而不是生成Chrome。
Docker示例:
# CHROME_NO_SANDBOX=1 is set by default in the Docker image
TILER_ALLOWED_DIRS=/app/uploads
TILER_DISABLE_URL_CAPTURE=1 # remove only if Chrome is network-isolated需求
- Node.js 20+
- 兼容的MCP客户端(克劳德代码、Codex CLI、VS代码、游标、克劳德桌面)
贡献
看 贡献.md 了解如何报告错误、建议更改和提交PR。
致谢
在…的帮助下建造 克劳德代码 作为代码起草、测试和文档的人工智能助手。
许可证
麻省理工学院
