关于 Quickshell MCP
Quickshell MCP 是面向使用 Quickshell、QML 和 Qt 的编码 Agent 的 MCP 服务。它依据文档、官方示例和实际项目实现,为搜索、验证、迁移建议及项目检查提供信息。
主要功能
- 01搜索 Quickshell 与 Qt/QML 文档
- 02查找实现模式和示例
- 03验证 QML 与 API 兼容性
- 04分析版本间迁移
- 05检查和测试项目及运行时会话
- 06生成有来源依据的 QML 组件
适用场景
- 01编写 QML 前核实 API
- 02检查组件是否适用于指定 Quickshell 版本
- 03规划不同版本间的 QML 升级
- 04检查或测试 Quickshell 项目
MCP 相关
向 MCP 客户端提供文档搜索、QML 验证、兼容性、迁移、项目和运行时工具。可使用 stdio;配置后也可使用 HTTP 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
102收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| refresh | boolean | 否 |
详细介绍
quickshell-mcp
一个 MCP 服务,可将 AI 编码 Agent 连接到 Quickshell、QML 和 Qt 的实时文档。
在 Agent 编写或运行代码之前,搜索 API、发现实现模式、解释错误、验证 QML、检查项目、运行测试并分析实时 Shell。
为什么
Quickshell 变化很快,而 AI 编码 Agent 可能会根据过时或不完整的训练数据生成 QML。quickshell-mcp 让 Agent 能够依据最新文档验证 API、查找现有实现模式、验证生成的 QML,以及检查或测试项目,而不是凭记忆猜测。
重要
如果来源之间存在冲突,始终以官方文档为准。
目录
快速开始
pip install quickshell-mcp # or: uvx quickshell-mcp
然后将 MCP 客户端指向它(请参阅下文的配置)。
也可通过 Model Context Protocol Registry 安装。
从源码安装
git clone https://github.com/franklinnolasco7/quickshell-mcp
cd quickshell-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
使用 Nix 安装
nix run github:franklinnolasco7/quickshell-mcp
使用 Docker 安装
docker build -t quickshell-mcp .
docker run --rm -i quickshell-mcp # speaks MCP over stdio
| Quickshell 文档 | 按版本区分的类型参考、指南和更新日志 |
| Qt/QML 文档 | QtQuick、Controls、Layouts 和其他基础类型 |
| 官方示例 | 可运行的 Quickshell 示例配置 |
| 真实项目实现 | 可搜索 Caelestia、Noctalia 和 dots-hyprland 的模式 |
| 错误说明 | 基于可靠依据诊断 QML 和 Quickshell 错误 |
| QML 验证 | 静态检查类型、属性、信号、导入项和版本兼容性 |
| 版本兼容性 | 确认某个 API 或 QML 代码片段是否适用于特定 Quickshell 版本 |
| 迁移 | 分析升级后 QML 配置需要进行哪些更改才能继续运行 |
| 组件生成 | 根据自然语言描述生成基于可靠依据的精简 QML 组件 |
| 项目智能分析 | 分析、映射、搜索和分类磁盘上的项目 |
| 项目验证 | 按文件验证、检查代码风格、检查兼容性并迁移整个项目 |
| 运行时会话 | 启动并检查隔离的 qs 进程,需主动启用且会修改状态 |
| 视觉和 UI 检查 | 窗口、屏幕截图、UI 树、属性和快照 |
| 运行时测试 | 针对运行中的会话执行机器可读的测试步骤、测试套件和断言 |
| 性能分析 | 有限采样,以及对组件、绑定和定时器进行静态分析 |
| 桌面适配器 | 只读检查 Hyprland、PipeWire、D-Bus 和系统 |
| 知识 2.0 | 版本差异、API 图谱、最佳实践、模式比较和来源信息 |
| 智能分析 | 项目记忆、架构建议、回归检测和任务计划 |
| Agent 编排 | 端到端地构建、调试、迁移、测试和优化功能 |
| 编码助手 | 通过一条自然语言请求调用合适的工具,并返回结构化、基于可靠依据的结果 |
| CI 入口 | 无头验证、屏幕截图、运行时测试、兼容性检查和迁移脚本 |
外部工具
大多数工具只需要 quickshell-mcp 包。检查真实桌面的工具会在运行时检测依赖项;如果缺少依赖项,会报告其不可用,而不是直接失败。运行时会话、UI 检查和桌面适配器都采用这种方式。
| 依赖项 | 用途 |
|---|---|
qs(Quickshell 二进制文件) | 运行时会话、UI 检查、测试、qs ipc |
grim | 屏幕截图 |
ImageMagick(compare、identify) | 屏幕截图差异比较、视觉检查 |
hyprctl、pw-cli、busctl | 桌面适配器(均为可选;缺少时会优雅降级) |
无头 CI Shell(nix develop .#ci)会打包 quickshell、weston、grim 和 imagemagick,以便在没有桌面的环境中运行运行时测试和屏幕截图任务。
知识来源
此服务由六个来源提供支持:Quickshell 文档、Qt/QML 文档、Quickshell 官方示例,以及三个真实 Shell(Caelestia、Noctalia、dots-hyprland)。这些 Shell 是实用参考资料,并非权威 API 定义。有关冲突时的解决方式,请参阅来源优先级。
配置
opencode(opencode.json):
{
"mcp": {
"quickshell": {
"type": "local",
"command": ["/absolute/path/to/quickshell-mcp/.venv/bin/quickshell-mcp"],
"enabled": true
}
}
}
Claude Desktop:在 claude_desktop_config.json 中使用相同的 JSON,并将其置于 mcpServers 下。
如需使用 HTTP 传输,请设置 QUICKSHELL_DOCS_MCP_TRANSPORT=http(以及可选的 HOST/PORT)。
提示
设置
QUICKSHELL_DOCS_MCP_LOG=DEBUG,即可在 stderr 中记录详细的请求日志。保留
QUICKSHELL_DOCS_MCP_*环境变量前缀,以兼容早期版本。
工具
完整的工具列表按功能分组,并标注了会修改状态及高风险的工具,请参阅 docs/TOOLS.md。
典型工作流
flowchart TD
A[Search] --> B[Find implementation pattern]
B --> C[Verify API]
C --> D[Write QML]
D --> E[Validate]
E -->|errors| F[Fix errors]
F --> E
E -->|clean| G[Done]
classDef discover fill:#cdeaff,stroke:#1c6dd0,stroke-width:1px,color:#0b3661
classDef build fill:#ffe3c2,stroke:#d8871b,stroke-width:1px,color:#5c3a05
classDef check fill:#c9f2d8,stroke:#1f9e5c,stroke-width:1px,color:#0b3d24
classDef fix fill:#ffd1d1,stroke:#d13b3b,stroke-width:1px,color:#5c0b0b
classDef done fill:#e3d6ff,stroke:#7b3ff0,stroke-width:2px,color:#2f1466
class A,B,C discover
class D build
class E check
class F fix
class G done
示例
与其让 AI Agent 猜测如何在 Quickshell 中创建工作区指示器,不如让它搜索 API、查找现有实现、验证指定版本、生成 QML,并在运行前进行验证:
flowchart LR
A[quickshell_search_all] --> B[quickshell_find_pattern]
B --> C[quickshell_list_versions /<br/>quickshell_get_type]
C --> D[quickshell_generate_component]
D --> E[quickshell_validate_qml]
E --> F[quickshell_explain_error]
classDef tool fill:#cdeaff,stroke:#1c6dd0,stroke-width:1px,color:#0b3661
classDef action fill:#ffe3c2,stroke:#d8871b,stroke-width:1px,color:#5c3a05
classDef debug fill:#ffd1d1,stroke:#d13b3b,stroke-width:1px,color:#5c0b0b
class A,B,C tool
class D,E action
class F debug
高级用法
静态验证、版本兼容性、迁移、组件生成和编码助手:捕获错误的 QML、验证各版本的 API 支持情况、规划升级、生成组件,或通过助手处理整个开发任务
静态验证
quickshell_validate_qml 会使用其他工具所用的相同 Quickshell 和 Qt 文档索引检查 QML。它可以捕获:
- 未知的 Quickshell 和 Qt 类型
- 未知的属性、方法和信号
- 缺少导入
- 明显的类型不匹配
- 请求的 Quickshell 版本中不可用的 API
quickshell_validate_qml是对qmlls的补充,并不能取代它。动态 JavaScript 和本地组件解析不在其范围内。
{"source": "PanelWindow { foo: 123 }", "version": "latest", "filename": "panel.qml"}
版本兼容性
quickshell_check_compatibility 会检查 Quickshell API、QML 属性/方法/信号、类型或整段代码片段是否适用于特定版本。传入 api、type 或 code 其中之一;使用 version 选择版本(或者使用 from_version/to_version 指定范围)。
它不会仅依据最新文档页面进行判断,而是交叉参考所请求版本的类型索引和页面以及更新日志;如果证据不足,则返回 uncertain。Qt/QML 类型(Rectangle、Item 等)会显示为 compatible,并带有 origin: "qt",因为它们是否可用取决于 Qt 版本,而非 Quickshell 版本。
{"api": "PanelWindow.exclusiveZone", "version": "v0.2.0"}
{"api": "Quickshell.shellRoot", "version": "v0.3.1"}
{"code": "PanelWindow { exclusiveZone: 1 }", "version": "v0.1.0"}
结果包含判定、版本依据(已知的最早/最新版本)、任何重命名或变更及可能的替代项、匹配的更新日志条目,以及引用的文档 URL。
版本间迁移
quickshell_migrate 会分析将 QML 配置从一个 Quickshell 版本升级到另一个版本时必须进行的更改,以确保其继续正常工作。传入 QML 源代码(或单个 api/type),以及 from_version 和 to_version(两者均为必填项,且顺序必须从旧到新)。
它会报告每个已移除、重命名、弃用或变更的 API,并提供严重性、位置、旧 API 和新 API、必须更改的原因、建议的迁移方案、置信度以及引用来源。它还会扫描两个版本之间提及所引用符号的破坏性变更日志条目,因此,在中间版本中生效的重命名会附上生效版本。问题会分类为 definite(有文档或更新日志作为依据)、likely(有记录但影响较小,例如弃用)或 manual_review(证据表明发生了变更,但无法确证具体迁移方式)。
该工具只进行分析并提供建议,不会重写代码或文件。
{
"code": "Quickshell { shellRoot: \"/tmp\" }\nPanelWindow { exclusiveZone: 1 }",
"from_version": "v0.1.0",
"to_version": "v0.3.1"
}
报告包含总体判定(compatible、changes_required、uncertain)、各问题的发现结果,以及按顺序排列的迁移计划。
组件生成
quickshell_generate_component 可将自然语言描述转换为最简 QML 组件,例如“创建一个 Hyprland 工作区指示器”“带动画的音量 OSD”“包含工作区、时钟和系统托盘的顶部栏”“弹出式控制中心”或“通知弹窗”。
{"description": "volume OSD", "version": "latest", "compositor": "hyprland"}
生成器会搜索请求(使用与其他工具相同的搜索和模式工具),根据章节模板构建一个小型组件,然后使用 quickshell_check_compatibility 检查其中引用的每种 Quickshell 类型、属性和方法是否兼容指定版本,并通过 quickshell_validate_qml 验证组装后的 QML。无法验证的 API 会显示在结果中,而不会被悄悄输出,因此输出绝不会将未经验证的 API 冒充为有效 API。
结果包含生成的 QML,以及:
dependencies:导入项、所需的 Quickshell 类型和 Qt 类型verified_surface:组件使用的每种类型中有文档说明的属性、方法和信号,便于你根据已验证成员重写 QMLintegration:合成器和外部服务要求(Hyprland 套接字、PipeWire、通知守护进程等)verification:各 API 的兼容性判定,以及总体verified/unverified标记validation:静态验证器的诊断信息references:可供对照的文档、官方示例和实际实现assumptions:所采用的保守选择(默认配色、无法识别的合成器、未嵌入的请求窗口)
compositor="hyprland" 会生成 Hyprland 专用类型;其他任何值都会被注明,且不会生成合成器专用代码。若请求与任何模板都不匹配,仍会返回 verified_surface 和 references,因此你可以自行组合组件。每个生成的文件只包含一个顶层窗口:如果请求提到了多个窗口(例如状态栏和通知弹窗),则只生成主要窗口,其余窗口会列在 assumptions 下,而不会嵌套其中。该工具不会向磁盘写入任何内容。
编码助手
quickshell_coding_assistant 是其他工具之上的编排层,适用于需要调用多个工具的任务。向它提供一条自然语言开发请求,它就会运行一条固定的阶段流水线:搜索、验证、生成、校验、迁移、研究(出处),以及可选的执行。每个阶段只会启用请求所需的工具。结果结构化且有来源依据,包含以下部分:需求理解、相关 API、推荐方案、实现参考、兼容性、校验、待解决问题、来源、出处,以及末尾的 grounded_result。
{"request": "Build a Hyprland workspace bar"}
{"request": "Why is this PanelWindow failing?", "code": "PanelWindow { foo: 1 }"}
{"request": "Migrate this shell from v0.2 to v0.3", "from_version": "v0.2.0", "to_version": "v0.3.1"}
{"request": "Find an implementation of a volume OSD and adapt the pattern"}
请求会映射到五种意图,每种意图都会运行相关的流水线阶段:
- build(“构建/添加/制作一个……”)会将搜索和验证阶段交给
quickshell_generate_component,由它在内部运行这两个阶段,并将其通过校验的 QML 作为grounded_result。 - debug(“为什么 X 失败了?”、“修复此错误”)会运行搜索(
quickshell_explain_error)和验证(相关类型页面 + 兼容性),然后进行校验(quickshell_validate_qml);grounded_result是诊断结果和修复方案。 - migrate(“从 vX 迁移/升级到 vY”)会运行搜索(未提供代码时查找破坏性变更日志)、针对目标版本进行校验,以及迁移(
quickshell_migrate);grounded_result是按顺序排列的迁移计划。 - pattern(“查找某个实现……并进行调整”)会运行搜索(
quickshell_find_pattern,并提供排名最高的实现的简短摘录)和验证(检查提示中 API 的兼容性);grounded_result是该摘录及已验证的 API。 - research(“X 是什么?”、“我该如何……?”)会运行搜索(所有来源)和验证(排名靠前的类型页面与指南页面 + 兼容性);
grounded_result会列出已确定的类型和指南。
默认情况下不执行任何操作:助手绝不会修改文件。若要让它应用明确且经过校验的编辑集,请同时传入 permitted_execution=True、edits=[...](格式与 quickshell_apply_patch 相同)以及 project= 路径。对于未获准的请求,系统会记录一个执行步骤,然后继续以只读方式运行。
版本和合成器信息可从请求文本中获取(0.2、hyprland),也可通过 version/compositor/from_version/to_version 参数传入。运行时会根据已发布的版本列表解析宽泛的版本提示。每个步骤都会独立运行,因此某个来源出错时,错误会出现在 errors 中,而不会导致整个请求失败。结果包含一条记录所用工具的 orchestration 跟踪信息,以及去重后的 sources 列表。方案步骤上的 basis 标签和 API 条目上的 verified 标记,可区分已验证事实(来自官方文档)与建议。
**适用场景:**多步骤开发请求,或尚不确定该使用哪个单一工具时。对于单项且范围明确的查询(一个类型页面、一条错误信息、一次版本检查),请直接调用相应工具;这样成本更低,也能获得原始答案。
项目、运行时、检查、测试、性能与 Agent:在磁盘上的真实项目和运行中的 shell 中工作
项目分析
quickshell_project_analyze、quickshell_project_map 和 quickshell_project_find 会读取磁盘上的项目,但不会执行任何内容。分析结果会明确标记未知值;映射会区分已确认和推断出的边,并报告循环;查找会搜索项目文件并提供位置和上下文。quickshell_project_dependencies 会将导入项归类为必需、可选、已检测或缺失。
{"project": "/path/to/shell"}
quickshell_project_validate、quickshell_project_lint、quickshell_project_compatibility 和 quickshell_project_migrate 会对每个 QML 文件运行与单文件工具相同的引擎,并按文件和严重程度分组。Lint 使用可扩展的规则表;兼容性检查不会夸大运行时不兼容情况;迁移会生成机器可读的拟议编辑,且绝不会写入文件。
运行时工具会在隔离的 XDG 目录中启动真实的 qs 进程,确保受管理的 shell 不会触碰你的桌面会话。这些工具需主动启用且会修改状态,并要求 qs 位于 PATH 中。
{"project": "/path/to/shell", "entrypoint": "main.qml"}
quickshell_runtime_start 会返回会话 ID;quickshell_runtime_status、quickshell_runtime_logs 和 quickshell_runtime_ping 用于检查会话;quickshell_runtime_stop 和 quickshell_runtime_reset 用于管理生命周期。配置文件通过生态系统中的 quickshell_profile_* 工具命名并进行版本管理,也可以在启动时重复使用。
视觉和 UI 检查
quickshell_windows、quickshell_ui_tree 和 quickshell_ui_find 用于检查正在运行的会话。截图需要 grim 和合成器;UI 自省需要 shell 中有一个 inspector IpcHandler 目标。quickshell_ui_set_property 和 quickshell_ui_invoke 通过 IPC 修改会话并返回修改前后的状态;quickshell_ui_eval 风险较高(需显式启用、设有时间限制且输出有上限),并且绝不会触碰文件系统。
测试
quickshell_test 运行可机器读取的测试(先执行步骤,再进行断言,失败时截图);quickshell_test_suite 在隔离环境中运行多个测试;quickshell_assert、quickshell_test_macro 和 quickshell_test_record 用于构建步骤;quickshell_test_report 用于汇总测试套件。
{"session_id": "abc123", "tests": [{"name": "bar shows", "assertions": [{"type": "visible", "target": "bar"}]}]}
性能
quickshell_profile 在有限的时间窗口内采集会话的 CPU/内存数据。quickshell_profile_component、quickshell_profile_bindings、quickshell_profile_timers 和 quickshell_profile_object_tree 对项目进行静态分析。quickshell_performance_diagnose 会将证据关联起来,形成带置信度的假设,绝不会在没有证据的情况下归因开销。
Agent
quickshell_build_feature、quickshell_debug、quickshell_migrate_project、quickshell_test_feature、quickshell_optimize 和 quickshell_engineer 均会通过较低层级的工具,按明确分阶段的计划执行。每个阶段彼此隔离,因此单个阶段失败不会导致整个计划失败。quickshell_engineer 会组合完整流程(构建、测试、调试、优化、验证),并返回每个阶段的结果以及扁平化计划。
来源优先级
来源存在冲突时,按以下权威性排序:
- Quickshell 官方文档
- Qt 官方文档
- Quickshell 官方示例
- 真实项目实现
真实项目实现是实用参考,而非权威的 API 定义。
缓存
文档索引会缓存在本地的 ~/.cache/quickshell-mcp 下。
| 缓存类型 | TTL |
|---|---|
| 已获取的页面(内存/磁盘) | 30 分钟 |
| 批量文档索引(磁盘) | 30 天 |
在受支持的情况下,使用 refresh=True 可绕过短期缓存。缓存位置和磁盘 TTL 可通过现有的 QUICKSHELL_DOCS_MCP_* 环境变量配置。
参考资料
| 来源 | URL | 提供内容 |
|---|---|---|
| Quickshell 文档 | https://quickshell.org | 类型参考、使用指南、更新日志 |
| Qt 文档 | https://doc.qt.io/qt-6 | QtQuick 基础类型(Rectangle、RowLayout 等) |
| Quickshell 示例 | https://git.outfoxxed.me/quickshell/quickshell-examples | 官方示例配置 |
| Caelestia shell | https://github.com/caelestia-dots/shell | 真实项目实现参考 |
| Noctalia shell | https://github.com/noctalia-dev/noctalia (legacy-v4) | 真实项目实现参考 |
| dots-hyprland | https://github.com/end-4/dots-hyprland | 真实项目实现参考(“ii” shell) |
开发
有关内部架构(四层能力/来源栈、CI 脚本列表以及编码/提交约定),请参阅 AGENTS.md;有关环境设置和工作流,请参阅 CONTRIBUTING.md。
局限
- 验证采用静态启发式方法,可作为
qmlls的补充。 - 动态 JavaScript 和本地组件解析能力有限。
- 官方示例可能面向不同版本的 Quickshell。
- 冷缓存下,深度文档搜索可能较慢。
- 真实项目实现仅供参考,且可能包含过时的模式。
- 运行时和检查工具需选择启用,并且需要将
qs添加到 PATH;截图还需要合成器,UI 内省则需要一个inspectorIpcHandler 目标。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。