Skip to main content
Glama

OmniParser MCP Server

CI English

把微软 OmniParser(纯视觉 GUI Agent 的屏幕解析工具)封装为 Model Context Protocol 服务,让 Claude Desktop、Cursor、Cline 等 任何 MCP 客户端都能调用屏幕解析能力:给定一张截图,返回结构化的 UI 元素(文本、图标、坐标、语义描述)。

本仓库是独立项目:不包含 OmniParser 模型与官方代码,只提供一个薄 MCP 代理层,通过 HTTP 调用 官方 omniparserserver 服务。

架构

MCP 客户端 (Claude Desktop / Cursor / Cline / ...)
   │  stdio
   ▼
omniparser_mcp.py   (本仓库, MCP Server, 薄代理, 仅依赖 mcp + httpx)
   │  HTTP localhost (OMNIPARSER_API_URL, 默认 http://127.0.0.1:8010)
   ▼
omniparserserver    (官方 OmniParser, FastAPI, 模型常驻)
                     YOLOv9 图标检测 + Florence-2 图标描述 + EasyOCR 文本识别

MCP 层不感知 OmniParser 的安装位置——它只和 HTTP 地址通信。OmniParser 可以装在本机任意目录、 另一台机器、Docker 或远程服务器,只需把地址告诉 MCP(OMNIPARSER_API_URL)。

端口说明:本项目默认后端端口是 8010(不是官方默认的 8000),避免与常用的 8000 端口 开发工具冲突。端口可任意更换:启动后端时指定 -Port,并把 OMNIPARSER_API_URL 改成对应地址 即可(二者保持一致)。

Related MCP server: screen-mcp

环境变量

变量

作用

默认

OMNIPARSER_API_URL

后端 HTTP 地址

http://127.0.0.1:8010

OMNIPARSER_HOME

官方 OmniParser 仓库目录;设置后,后端未运行时 MCP 会自动启动它

空(需手动启动)

OMNIPARSER_DEVICE

自动启动后端时用的设备

cuda(无 GPU 设为 cpu)

OMNIPARSER_PYTHON

自动启动后端时用的 Python 解释器(需 transformers<5 的环境)

空(用 MCP 自身的 python)

三种方式指定 OMNIPARSER_API_URL:环境变量 / MCP 客户端配置的 env 字段 / 代码默认值(兜底)。

快速开始

最快路径:一条命令(推荐)

git clone https://github.com/cute-aaa/OmniParser-MCP
cd OmniParser-MCP
python setup_backend.py --omni-home D:\OmniParser

setup_backend.py 会自动完成(各步可用 flag 跳过):

步骤

内容

跳过 flag

1

定位官方 OmniParser 仓库,不存在则 git clone 到 ../OmniParser

--skip-clone

2

创建 .venv-omni 并安装 requirements-backend.txt(transformers 固定 4.46.x)

--skip-install

3

给 util/utils.py 打兼容补丁(PaddleOCR 可选、Py3.13/NumPy2 shim),见 fix_compat.py

--skip-patch

4

从 Hugging Face 下载权重 ~1.4 GB(幂等,已存在则跳过);同时把 Florence-2 的 processor 与 模型 remote code 一并落到权重目录并把 auto_map 改写为本地形式,使启动完全离线

--skip-weights

5

启动后端并等待 /probe/ 就绪(约 30–60 秒)

--no-start

结束后脚本会打印可直接粘贴的 MCP 客户端配置。

国内网络:加 --hf-endpoint https://hf-mirror.com。 已有装好的环境/权重,只想启动:python setup_backend.py --omni-home D:\OmniParser --start-only。 无 GPU:加 --device cpu(脚本默认自动探测)。

完成后用 python test_mcp.py 验证:应看到 3 个工具、后端 ✅ 就绪、parse_screen 返回元素列表。

Linux / WSL2

同一条命令即可,解释器是 .venv-omni/bin/python:

git clone https://github.com/cute-aaa/OmniParser-MCP
cd OmniParser-MCP
python3 setup_backend.py --omni-home ~/OmniParser
# 国内网络:再加 --hf-endpoint https://hf-mirror.com

用 CUDA 时必须先装 C 工具链(Debian/Ubuntu/WSL2):

sudo apt install build-essential python3.12-dev

原因:torch 的 attention kernel 走 triton,triton 在首次 parse 时用系统 gcc + Python.h 现场编译 driver.c。缺了它们后端能正常启动、/probe/ 也绿,但每次 /parse/ 都返回 500(subprocess.CalledProcessError ... triton/runtime/build.py), 是个很晚才暴露、也很难猜的失败。setup_backend.py 会在启动前预检并打印这两个包名。 只想用 CPU 就无需工具链,加 --device cpu 即可跳过 triton。

已验证:WSL2 + Ubuntu 24.04 + RTX 4070 Ti,完全离线(HF_HUB_OFFLINE=1)冷启动, test_mcp.py 1080p 截图返回 134 元素、耗时 3.9 秒。

手动路径(想自己掌控每一步时)

1. 安装官方 OmniParser(一次性)

git clone https://github.com/microsoft/OmniParser
cd OmniParser
conda create -n omni python==3.12 && conda activate omni
pip install -r requirements.txt
# 国内网络先设置 $env:HF_ENDPOINT="https://hf-mirror.com",再按官方 README 下载权重。
# 需要的权重(约 1.3 GB):
#   weights/icon_detect_v3/model.pt                     (YOLOv9-E 图标检测器)
#   weights/icon_caption_florence/{config.json, generation_config.json, model.safetensors} (Florence-2 描述模型)

权重下载完成后,可先手动验证后端能起来(注意端口:本项目统一用 8010, 与官方默认 8000 不同,请显式加 --port 8010):

python -m omniparserserver --caption_model_name florence2 `
    --caption_model_path ../../weights/icon_caption_florence `
    --device cuda --BOX_TRESHOLD 0.05 --host 127.0.0.1 --port 8010

2. 启动后端(二选一)

方式 A — 手动启动(推荐,后端生命周期自己掌控)

# 从本仓库运行。start_backend.ps1 会自动向上层目录探测 OmniParser,
# 但本仓库 clone 后不含官方 OmniParser,通常需显式指定 -OmniParserHome:
pwsh -File start_backend.ps1 -OmniParserHome D:\OmniParser -Device cuda `
    -Python D:\path\to\omni-env\python.exe   # 可选:后端专用解释器

方式 B — MCP 自动启动

在 MCP 客户端配置的 env 里加上 OMNIPARSER_HOME(见下节),后端未运行时会自动拉起并等待就绪 (首次加载模型约 30–60 秒,最长等待 240 秒),无需手动操作。

3. 安装本仓库依赖并注册 MCP

pip install -r requirements.txt   # 仅 mcp(<2.0) + httpx

⚠️ transformers 版本要求:OmniParser 的 Florence-2 依赖 2024 年的 remote code,与 transformers 5.x 不兼容(会报 TokenizersBackend has no attribute additional_special_tokens / forced_bos_token_id 等错误)。请在 OmniParser 环境中固定 pip install "transformers==4.46.3"(或任何 4.x)。 如果跑 MCP 的 Python 环境不是这个环境,用 -Python / OMNIPARSER_PYTHON 指向后端专用解释器即可。

本仓库依赖建议装进与步骤 1 相同的 conda 环境(omni),MCP 层与 OmniParser 层共用 一个 Python 环境即可。

Claude Desktop — 编辑 %APPDATA%\Claude\claude_desktop_config.json(把 D:\OmniParser-MCP、D:\OmniParser 替换为你的实际路径):

{
  "mcpServers": {
    "omniparser": {
      "command": "python",
      "args": ["D:\\OmniParser-MCP\\omniparser_mcp.py"],
      "env": {
        "OMNIPARSER_API_URL": "http://127.0.0.1:8010",
        "OMNIPARSER_HOME": "D:\\OmniParser",
        "OMNIPARSER_DEVICE": "cuda"
      }
    }
  }
}

Cursor / Cline — 本仓库已附带现成配置(使用 ${workspaceFolder} 变量,clone 即用), 按需在 env 里补 OMNIPARSER_HOME 即可开启自动启动:

  • .cursor/mcp.json

  • .cline/mcp_settings.json

4. 自测

python test_mcp.py        # 完整测试:需后端已在 8010 运行、且仓库内放一张截图
                          # (默认用 test_image.png,可替换为任意截图)
python test_ci_smoke.py   # 轻量冒烟测试:无需后端/GPU,任何环境可跑

test_mcp.py 会枚举工具、检查后端状态并解析截图(解析结果打印时截断为前 1500 字符); test_ci_smoke.py 只验证 MCP server 能启动、工具可用、无后端时优雅报错。

工具说明

工具

参数

返回

parse_screen

image_path 或 base64_image(二选一)、image_size="W,H"、box_threshold=0.05、iou_threshold=0.1、save_som_to="out.png"

结构化元素列表:type / px_xyxy / ratio_xyxy / interactivity / content,可选保存标注图

omniparser_status

无

后端健康状态;设置了 OMNIPARSER_HOME 且后端未运行时自动启动

调用示例:

用户: 解析这个截图 C:\shots\app.png 并告诉我搜索框在哪
Agent: 调用 parse_screen(image_path="C:\shots\app.png", image_size="2560,1440")
       → [12] text px=(320,180,880,230) content='Search...' interactivity=True
       搜索框中心 ≈ (600, 205)

常见问题

现象

处理

工具报 backend not reachable

启动后端(start_backend.ps1),或设置 OMNIPARSER_HOME 启用自动启动

自动启动后仍失败

确认 OMNIPARSER_DEVICE(无 GPU 用 cpu)、OmniParser 权重已下载、依赖已装

解析结果为空

调低 box_threshold(如 0.03)再试

解析耗时

实测 1080p 截图约 3–4 秒(RTX 4070 Ti, cuda);首调用含模型 warm-up 稍慢,大图/纯 CPU 会更久

WSL 里 huggingface.co 报 Network is unreachable

DNS 污染。带 --hf-endpoint https://hf-mirror.com 重跑即可(venv/补丁已完成的部分会自动跳过)

python -m venv 报 ensurepip is not available

最小化 Ubuntu/WSL 缺 python3-venv。setup_backend.py 会自动改用 venv --without-pip + get-pip.py,无需 root;也可 sudo apt install python3-venv

后端冷启动时又去下载 Florence-2 processor

说明 weights/icon_caption_florence_processor/ 缺文件。跑一次 download_weights.py <omni-home>(会补齐 tokenizer/processor,约 2.5 MB)

冷启动时又去下载 configuration_florence2.py / modeling_florence2.py

模型 config.json 的 auto_map 指向 microsoft/Florence-2-base-ft,transformers 每次冷启动都会去拉这两个文件。跑一次 download_weights.py <omni-home> 会把它们下到权重目录并把 auto_map 改写成本地形式,之后完全离线可启动

/probe/ 绿但 /parse/ 一律 500

Linux 上 triton 首次 parse 要现场编译,缺 C 工具链或 Python.h。sudo apt install build-essential python3.12-dev,或 --device cpu

后端起来后很快就没了

启动它的终端/脚本退出时带走了子进程。setup_backend.py 和 MCP 自动启动都已用 detached 方式(start_new_session / DETACHED_PROCESS)拉起,不受父进程退出影响

License

MIT。OmniParser 模型权重遵循其各自的 License。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    kira-mcp is a local MCP server that gives any MCP-compatible agent host full computer-use capabilities on the host machine, including screen perception with OmniParser and desktop automation.
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that gives a model eyes and hands on a Linux Wayland desktop, enabling screenshot capture, mouse/keyboard control, OCR, and icon detection via OmniParser.
    1
    -
  • A
    license
    A
    quality
    F
    maintenance
    Provides an MCP server for local low-power screen vision, enabling AI agents to perform OCR and UI detection on inaccessible screens (games, remote desktops) using NPU acceleration and system OCR.
    5
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server providing AI-friendly computer-use primitives (capture, detect, click) to let LLM agents drive desktop GUI applications on Windows, macOS, and Linux.
    1
    MIT